'
},
list : null,
@@ -64,7 +64,8 @@
prev : this.list.find('.btnPrev').click( F.prev ),
next : this.list.find('.btnNext').click( F.next ),
play : this.list.find('.btnPlay').click( F.play ),
- toggle : this.list.find('.btnToggle').click( F.toggle )
+ toggle : this.list.find('.btnToggle').click( F.toggle ),
+ close : this.list.find('.btnClose').click( F.close )
}
}
@@ -118,4 +119,4 @@
}
};
-}(jQuery));
\ No newline at end of file
+}(jQuery));
diff --git a/js/fancybox/helpers/jquery.fancybox-media.js b/css/fancybox/helpers/jquery.fancybox-media.js
similarity index 86%
rename from js/fancybox/helpers/jquery.fancybox-media.js
rename to css/fancybox/helpers/jquery.fancybox-media.js
index 3092832a..3584c8a7 100644
--- a/js/fancybox/helpers/jquery.fancybox-media.js
+++ b/css/fancybox/helpers/jquery.fancybox-media.js
@@ -1,6 +1,6 @@
/*!
* Media helper for fancyBox
- * version: 1.0.4 (Mon, 01 Oct 2012)
+ * version: 1.0.6 (Fri, 14 Jun 2013)
* @requires fancyBox v2.0 or later
*
* Usage:
@@ -25,7 +25,7 @@
*
* Or:
* $(".fancybox").fancybox({,
- * helpers : {
+ * helpers : {
* media: true
* },
* youtube : {
@@ -39,6 +39,7 @@
* http://www.youtube.com/watch?v=opj24KnzrWo
* http://www.youtube.com/embed/opj24KnzrWo
* http://youtu.be/opj24KnzrWo
+ * http://www.youtube-nocookie.com/embed/opj24KnzrWo
* Vimeo
* http://vimeo.com/40648169
* http://vimeo.com/channels/staffpicks/38843628
@@ -88,7 +89,7 @@
F.helpers.media = {
defaults : {
youtube : {
- matcher : /(youtube\.com|youtu\.be)\/(watch\?v=|v\/|u\/|embed\/?)?([\w-]{11}|\?listType=(.*)&list=(.*)).*/i,
+ matcher : /(youtube\.com|youtu\.be|youtube-nocookie\.com)\/(watch\?v=|v\/|u\/|embed\/?)?(videoseries\?list=(.*)|[\w-]{11}|\?listType=(.*)&list=(.*)).*/i,
params : {
autoplay : 1,
autohide : 1,
@@ -151,7 +152,7 @@
instagram : {
matcher : /(instagr\.am|instagram\.com)\/p\/([a-zA-Z0-9_\-]+)\/?/i,
type : 'image',
- url : '//$1/p/$2/media/'
+ url : '//$1/p/$2/media/?size=l'
},
google_maps : {
matcher : /maps\.google\.([a-z]{2,3}(\.[a-z]{2})?)\/(\?ll=|maps\?)(.*)/i,
@@ -171,16 +172,18 @@
params;
for (what in opts) {
- item = opts[ what ];
- rez = url.match( item.matcher );
+ if (opts.hasOwnProperty(what)) {
+ item = opts[ what ];
+ rez = url.match( item.matcher );
- if (rez) {
- type = item.type;
- params = $.extend(true, {}, item.params, obj[ what ] || ($.isPlainObject(opts[ what ]) ? opts[ what ].params : null));
+ if (rez) {
+ type = item.type;
+ params = $.extend(true, {}, item.params, obj[ what ] || ($.isPlainObject(opts[ what ]) ? opts[ what ].params : null));
- url = $.type( item.url ) === "function" ? item.url.call( this, rez, params, obj ) : format( item.url, rez, params );
+ url = $.type( item.url ) === "function" ? item.url.call( this, rez, params, obj ) : format( item.url, rez, params );
- break;
+ break;
+ }
}
}
diff --git a/js/fancybox/helpers/jquery.fancybox-thumbs.css b/css/fancybox/helpers/jquery.fancybox-thumbs.css
similarity index 97%
rename from js/fancybox/helpers/jquery.fancybox-thumbs.css
rename to css/fancybox/helpers/jquery.fancybox-thumbs.css
index e40ae820..63d29436 100644
--- a/js/fancybox/helpers/jquery.fancybox-thumbs.css
+++ b/css/fancybox/helpers/jquery.fancybox-thumbs.css
@@ -51,4 +51,5 @@
position: relative;
border: 0;
padding: 0;
+ max-width: none;
}
\ No newline at end of file
diff --git a/js/fancybox/helpers/jquery.fancybox-thumbs.js b/css/fancybox/helpers/jquery.fancybox-thumbs.js
similarity index 100%
rename from js/fancybox/helpers/jquery.fancybox-thumbs.js
rename to css/fancybox/helpers/jquery.fancybox-thumbs.js
diff --git a/css/fonts.css b/css/fonts.css
new file mode 100644
index 00000000..e6e15126
--- /dev/null
+++ b/css/fonts.css
@@ -0,0 +1,11 @@
+@font-face {
+ font-family: 'Material Icons';
+ font-style: normal;
+ font-weight: 400;
+ src: url("MaterialIcons-Regular.eot"); /* For IE6-8 */
+ src: local('Material Icons'),
+ local('MaterialIcons-Regular'),
+ url("MaterialIcons-Regular.woff2") format('woff2'),
+ url("MaterialIcons-Regular.woff") format('woff'),
+ url("MaterialIcons-Regular.ttf") format('truetype');
+}
\ No newline at end of file
diff --git a/css/images/ui-bg_flat_0_aaaaaa_40x100.png b/css/images/ui-bg_flat_0_aaaaaa_40x100.png
new file mode 100644
index 00000000..b0ad0b3d
Binary files /dev/null and b/css/images/ui-bg_flat_0_aaaaaa_40x100.png differ
diff --git a/css/images/ui-bg_flat_75_ffffff_40x100.png b/css/images/ui-bg_flat_75_ffffff_40x100.png
new file mode 100644
index 00000000..cc331887
Binary files /dev/null and b/css/images/ui-bg_flat_75_ffffff_40x100.png differ
diff --git a/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png b/css/images/ui-bg_glass_55_fbf9ee_1x400.png
similarity index 61%
rename from css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png
rename to css/images/ui-bg_glass_55_fbf9ee_1x400.png
index 5b50a929..dcb2f354 100644
Binary files a/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png and b/css/images/ui-bg_glass_55_fbf9ee_1x400.png differ
diff --git a/css/images/ui-bg_glass_65_ffffff_1x400.png b/css/images/ui-bg_glass_65_ffffff_1x400.png
new file mode 100644
index 00000000..7fbc0d98
Binary files /dev/null and b/css/images/ui-bg_glass_65_ffffff_1x400.png differ
diff --git a/css/smoothness/images/ui-bg_glass_75_ON_1x400.png b/css/images/ui-bg_glass_75_ON_1x400.png
similarity index 100%
rename from css/smoothness/images/ui-bg_glass_75_ON_1x400.png
rename to css/images/ui-bg_glass_75_ON_1x400.png
diff --git a/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png b/css/images/ui-bg_glass_75_dadada_1x400.png
similarity index 51%
rename from css/smoothness/images/ui-bg_glass_75_dadada_1x400.png
rename to css/images/ui-bg_glass_75_dadada_1x400.png
index 33b4dcb7..7c786fdc 100644
Binary files a/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png and b/css/images/ui-bg_glass_75_dadada_1x400.png differ
diff --git a/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png b/css/images/ui-bg_glass_75_e6e6e6_1x400.png
similarity index 51%
rename from css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png
rename to css/images/ui-bg_glass_75_e6e6e6_1x400.png
index 4ddf6f8b..d19b9f84 100644
Binary files a/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png and b/css/images/ui-bg_glass_75_e6e6e6_1x400.png differ
diff --git a/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png b/css/images/ui-bg_glass_95_fef1ec_1x400.png
similarity index 61%
rename from css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png
rename to css/images/ui-bg_glass_95_fef1ec_1x400.png
index d76d8423..37dffde4 100644
Binary files a/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png and b/css/images/ui-bg_glass_95_fef1ec_1x400.png differ
diff --git a/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png
new file mode 100644
index 00000000..c7954d7d
Binary files /dev/null and b/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png differ
diff --git a/css/smoothness/images/ui-icons_222222_256x240.png b/css/images/ui-icons_222222_256x240.png
similarity index 98%
rename from css/smoothness/images/ui-icons_222222_256x240.png
rename to css/images/ui-icons_222222_256x240.png
index c1cb1170..e9c8e16a 100644
Binary files a/css/smoothness/images/ui-icons_222222_256x240.png and b/css/images/ui-icons_222222_256x240.png differ
diff --git a/css/smoothness/images/ui-icons_2e83ff_256x240.png b/css/images/ui-icons_2e83ff_256x240.png
similarity index 97%
rename from css/smoothness/images/ui-icons_2e83ff_256x240.png
rename to css/images/ui-icons_2e83ff_256x240.png
index 84b601bf..f2bf8388 100644
Binary files a/css/smoothness/images/ui-icons_2e83ff_256x240.png and b/css/images/ui-icons_2e83ff_256x240.png differ
diff --git a/css/smoothness/images/ui-icons_454545_256x240.png b/css/images/ui-icons_454545_256x240.png
similarity index 98%
rename from css/smoothness/images/ui-icons_454545_256x240.png
rename to css/images/ui-icons_454545_256x240.png
index b6db1acd..d6169e8b 100644
Binary files a/css/smoothness/images/ui-icons_454545_256x240.png and b/css/images/ui-icons_454545_256x240.png differ
diff --git a/css/smoothness/images/ui-icons_888888_256x240.png b/css/images/ui-icons_888888_256x240.png
similarity index 98%
rename from css/smoothness/images/ui-icons_888888_256x240.png
rename to css/images/ui-icons_888888_256x240.png
index feea0e20..d3e6e02a 100644
Binary files a/css/smoothness/images/ui-icons_888888_256x240.png and b/css/images/ui-icons_888888_256x240.png differ
diff --git a/css/smoothness/images/ui-icons_cd0a0a_256x240.png b/css/images/ui-icons_cd0a0a_256x240.png
similarity index 97%
rename from css/smoothness/images/ui-icons_cd0a0a_256x240.png
rename to css/images/ui-icons_cd0a0a_256x240.png
index ed5b6b09..49370189 100644
Binary files a/css/smoothness/images/ui-icons_cd0a0a_256x240.png and b/css/images/ui-icons_cd0a0a_256x240.png differ
diff --git a/css/jquery-ui.min.css b/css/jquery-ui.min.css
new file mode 100644
index 00000000..8b4ec08d
--- /dev/null
+++ b/css/jquery-ui.min.css
@@ -0,0 +1,7 @@
+/*! jQuery UI - v1.11.4 - 2015-07-18
+* http://jqueryui.com
+* Includes: core.css, draggable.css, resizable.css, accordion.css, button.css, dialog.css, menu.css, spinner.css, tabs.css, theme.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
+* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
+
+.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;min-height:0;font-size:100%}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-dialog{overflow:hidden;position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:none}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{position:relative;margin:0;padding:3px 1em 3px .4em;cursor:pointer;min-height:0;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url("images/ui-bg_flat_75_ffffff_40x100.png") 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-state-default .ui-icon{background-image:url("images/ui-icons_888888_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.ui-state-active .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.ui-state-highlight .ui-icon{background-image:url("images/ui-icons_2e83ff_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cd0a0a_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px}
\ No newline at end of file
diff --git a/css/jquery-ui.structure.min.css b/css/jquery-ui.structure.min.css
new file mode 100644
index 00000000..cefc65bc
--- /dev/null
+++ b/css/jquery-ui.structure.min.css
@@ -0,0 +1,5 @@
+/*! jQuery UI - v1.11.4 - 2015-07-18
+* http://jqueryui.com
+* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
+
+.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;min-height:0;font-size:100%}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-dialog{overflow:hidden;position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:none}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{position:relative;margin:0;padding:3px 1em 3px .4em;cursor:pointer;min-height:0;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}
\ No newline at end of file
diff --git a/js/fancybox/jquery.fancybox.css b/css/jquery.fancybox.css
similarity index 75%
rename from js/fancybox/jquery.fancybox.css
rename to css/jquery.fancybox.css
index 043f8f90..18cd832c 100644
--- a/js/fancybox/jquery.fancybox.css
+++ b/css/jquery.fancybox.css
@@ -1,4 +1,4 @@
-/*! fancyBox v2.1.0 fancyapps.com | fancyapps.com/fancybox/#license */
+/*! fancyBox v2.1.5 fancyapps.com | fancyapps.com/fancybox/#license */
.fancybox-wrap,
.fancybox-skin,
.fancybox-outer,
@@ -76,7 +76,7 @@
}
#fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span {
- background-image: url('../js/fancybox/fancybox_sprite.png');
+ background-image: url('fancybox/fancybox_sprite.png');
}
#fancybox-loading {
@@ -94,7 +94,7 @@
#fancybox-loading div {
width: 44px;
height: 44px;
- background: url('../js/fancybox/fancybox_loading.gif') center center no-repeat;
+ background: url('fancybox/fancybox_loading.gif') center center no-repeat;
}
.fancybox-close {
@@ -114,7 +114,7 @@
height: 100%;
cursor: pointer;
text-decoration: none;
- background: transparent url('../js/fancybox/blank.gif'); /* helps IE */
+ background: transparent url('fancybox/blank.gif'); /* helps IE */
-webkit-tap-highlight-color: rgba(0,0,0,0);
z-index: 8040;
}
@@ -154,15 +154,27 @@
.fancybox-tmp {
position: absolute;
- top: -9999px;
- left: -9999px;
+ top: -99999px;
+ left: -99999px;
visibility: hidden;
+ max-width: 99999px;
+ max-height: 99999px;
+ overflow: visible !important;
}
/* Overlay helper */
.fancybox-lock {
- overflow: hidden;
+ overflow: hidden !important;
+ width: auto;
+}
+
+.fancybox-lock body {
+ overflow: hidden !important;
+}
+
+.fancybox-lock-test {
+ overflow-y: hidden !important;
}
.fancybox-overlay {
@@ -172,7 +184,7 @@
overflow: hidden;
display: none;
z-index: 8010;
- background: url('../js/fancybox/fancybox_overlay.png');
+ background: url('fancybox/fancybox_overlay.png');
}
.fancybox-overlay-fixed {
@@ -243,4 +255,20 @@
padding: 10px;
background: #000;
background: rgba(0, 0, 0, .8);
+}
+
+/*Retina graphics!*/
+@media only screen and (-webkit-min-device-pixel-ratio: 1.5),
+ only screen and (min--moz-device-pixel-ratio: 1.5),
+ only screen and (min-device-pixel-ratio: 1.5){
+
+ #fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span {
+ background-image: url('fancybox/fancybox_sprite@2x.png');
+ background-size: 44px 152px; /*The size of the normal image, half the size of the hi-res image*/
+ }
+
+ #fancybox-loading div {
+ background-image: url('fancybox/fancybox_loading@2x.gif');
+ background-size: 24px 24px; /*The size of the normal image, half the size of the hi-res image*/
+ }
}
\ No newline at end of file
diff --git a/css/jquery.tagsinput.css b/css/jquery.tagsinput.css
index 3ded4462..3d89d56d 100644
--- a/css/jquery.tagsinput.css
+++ b/css/jquery.tagsinput.css
@@ -76,7 +76,7 @@ div.tagsinput input {
}
div.tagsinput span.tag {
- background: url("smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png") repeat-x scroll 50% 50% #E6E6E6;
+ background: url("images/ui-bg_glass_75_e6e6e6_1x400.png") repeat-x scroll 50% 50% #E6E6E6;
border: 1px solid #D3D3D3;
color: #555555;
}
diff --git a/css/material-icons.css b/css/material-icons.css
new file mode 100644
index 00000000..96d822f2
--- /dev/null
+++ b/css/material-icons.css
@@ -0,0 +1,36 @@
+.material-icons {
+ font-family: 'Material Icons';
+ font-weight: normal;
+ font-style: normal;
+ font-size: 24px; /* Preferred icon size */
+ display: inline-block;
+ width: 1em;
+ height: 1em;
+ line-height: 1;
+ text-transform: none;
+ letter-spacing: normal;
+ word-wrap: normal;
+
+ /* Support for all WebKit browsers. */
+ -webkit-font-smoothing: antialiased;
+ /* Support for Safari and Chrome. */
+ text-rendering: optimizeLegibility;
+
+ /* Support for Firefox. */
+ -moz-osx-font-smoothing: grayscale;
+
+ /* Support for IE. */
+ font-feature-settings: 'liga';
+}
+
+.material-icons.md-18 { font-size: 18px; }
+.material-icons.md-24 { font-size: 24px; }
+.material-icons.md-36 { font-size: 36px; }
+.material-icons.md-48 { font-size: 48px; }
+.material-icons.md-60 { font-size: 60px; }
+
+.material-icons.md-dark { color: rgba(0, 0, 0, 0.54); }
+.material-icons.md-dark.md-inactive { color: rgba(0, 0, 0, 0.26); }
+
+.material-icons.md-light { color: rgba(255, 255, 255, 1); }
+.material-icons.md-light.md-inactive { color: rgba(255, 255, 255, 0.3); }
\ No newline at end of file
diff --git a/css/search-grid.css b/css/search-grid.css
deleted file mode 100644
index 6ad714de..00000000
--- a/css/search-grid.css
+++ /dev/null
@@ -1,108 +0,0 @@
-#content #data-search .account-info img,
-#content #data-search .account-actions img {
- width: 24px;
- height: 24px;
- margin: 0 0.5em;
-}
-
-#content #data-search {
- text-align: center;
- padding: 0.5em 0;
-}
-
-#content #data-search .account-label {
- width: 95%;
- height: 70px;
- text-align: left;
- margin: 0;
- margin-bottom: 0.2em;
- padding: 0.5em;
- color: #696969;
- background-color: #fcfcfc;
- display: inline-block;
-}
-
-#content #data-search .account-label .label-field {
- float: left;
- width: 18%;
- height: 3em;
-}
-
-#content #data-search .account-label .field-name {
- float: left;
- width: 80px;
- padding: 0.3em 0.2em;
- color: #b9b9b9;
- display: none
-}
-
-#content #data-search .account-label .field-text {
- float: left;
- width: 95%;
- padding: 0.3em 0.3em;
- word-wrap: break-word;
-}
-
-#content #data-search .account-label .header .field-name {
- color: white;
- font-weight: bold
-}
-
-#content #data-search .account-label .field-text a {
- color: #4895FA
-}
-
-#content #data-search .account-label .no-link,
-#content #data-search .account-label .no-link a {
- color: white;
- font-weight: bold;
-}
-
-#content #data-search .account-label .field-customer .field-text {
- height: 2.5em;
- width: 95%;
-}
-
-#content #data-search .account-label .field-category {
- width: 10% !important;
-}
-
-#content #data-search .account-info {
- float: left;
- clear: left;
- width: 20%;
- /*height: 2em;*/
- padding: 0.5em 0;
- text-align: left;
- /*border-top: 1px solid #d9d9d9;*/
- border: none;
-}
-
-#content #data-search .account-actions {
- float: right;
- position: relative;
- top: -3em;
- width: auto;
- max-width: 18%;
- height: auto;
- padding: 0.5em;
- text-align: right;
- /*border-top: 1px solid #c9c9c9;*/
- background-color: transparent;
- box-shadow: 0 0 8px rgba(0, 0, 0, 0.075) inset;
-}
-
-#content #data-search .account-actions img {
- margin: 3px 5px;
-}
-
-#content .actions-optional {
- display: none;
-}
-
-#content #data-search .account-spacer {
- float: left;
- clear: left;
- height: 2em;
- width: 20%
-}
\ No newline at end of file
diff --git a/css/smoothness/images/animated-overlay.gif b/css/smoothness/images/animated-overlay.gif
deleted file mode 100644
index d441f75e..00000000
Binary files a/css/smoothness/images/animated-overlay.gif and /dev/null differ
diff --git a/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png b/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png
deleted file mode 100644
index 93b95681..00000000
Binary files a/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png and /dev/null differ
diff --git a/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png b/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png
deleted file mode 100644
index 2d6eebd0..00000000
Binary files a/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png and /dev/null differ
diff --git a/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png b/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png
deleted file mode 100644
index c356d534..00000000
Binary files a/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png and /dev/null differ
diff --git a/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png
deleted file mode 100644
index 1a32bd17..00000000
Binary files a/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png and /dev/null differ
diff --git a/css/smoothness/jquery-ui.css b/css/smoothness/jquery-ui.css
deleted file mode 100644
index bc9cfd74..00000000
--- a/css/smoothness/jquery-ui.css
+++ /dev/null
@@ -1,1725 +0,0 @@
-/*! jQuery UI - v1.10.3 - 2013-10-06
-* http://jqueryui.com
-* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css, jquery.ui.theme.css
-* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
-
-.ui-helper-hidden {
- display: none
-}
-
-.ui-helper-hidden-accessible {
- border: 0;
- clip: rect(0 0 0 0);
- height: 1px;
- margin: -1px;
- overflow: hidden;
- padding: 0;
- position: absolute;
- width: 1px
-}
-
-.ui-helper-reset {
- margin: 0;
- padding: 0;
- border: 0;
- outline: 0;
- line-height: 1.3;
- text-decoration: none;
- font-size: 100%;
- list-style: none
-}
-
-.ui-helper-clearfix:before, .ui-helper-clearfix:after {
- content: "";
- display: table;
- border-collapse: collapse
-}
-
-.ui-helper-clearfix:after {
- clear: both
-}
-
-.ui-helper-clearfix {
- min-height: 0
-}
-
-.ui-helper-zfix {
- width: 100%;
- height: 100%;
- top: 0;
- left: 0;
- position: absolute;
- opacity: 0;
- filter: Alpha(Opacity=0)
-}
-
-.ui-front {
- z-index: 100
-}
-
-.ui-state-disabled {
- cursor: default !important
-}
-
-.ui-icon {
- display: block;
- text-indent: -99999px;
- overflow: hidden;
- background-repeat: no-repeat
-}
-
-.ui-widget-overlay {
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%
-}
-
-.ui-resizable {
- position: relative
-}
-
-.ui-resizable-handle {
- position: absolute;
- font-size: 0.1px;
- display: block
-}
-
-.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle {
- display: none
-}
-
-.ui-resizable-n {
- cursor: n-resize;
- height: 7px;
- width: 100%;
- top: -5px;
- left: 0
-}
-
-.ui-resizable-s {
- cursor: s-resize;
- height: 7px;
- width: 100%;
- bottom: -5px;
- left: 0
-}
-
-.ui-resizable-e {
- cursor: e-resize;
- width: 7px;
- right: -5px;
- top: 0;
- height: 100%
-}
-
-.ui-resizable-w {
- cursor: w-resize;
- width: 7px;
- left: -5px;
- top: 0;
- height: 100%
-}
-
-.ui-resizable-se {
- cursor: se-resize;
- width: 12px;
- height: 12px;
- right: 1px;
- bottom: 1px
-}
-
-.ui-resizable-sw {
- cursor: sw-resize;
- width: 9px;
- height: 9px;
- left: -5px;
- bottom: -5px
-}
-
-.ui-resizable-nw {
- cursor: nw-resize;
- width: 9px;
- height: 9px;
- left: -5px;
- top: -5px
-}
-
-.ui-resizable-ne {
- cursor: ne-resize;
- width: 9px;
- height: 9px;
- right: -5px;
- top: -5px
-}
-
-.ui-selectable-helper {
- position: absolute;
- z-index: 100;
- border: 1px dotted black
-}
-
-.ui-accordion .ui-accordion-header {
- display: block;
- cursor: pointer;
- position: relative;
- margin-top: 2px;
- padding: .5em .5em .5em .7em;
- min-height: 0
-}
-
-.ui-accordion .ui-accordion-icons {
- padding-left: 2.2em
-}
-
-.ui-accordion .ui-accordion-noicons {
- padding-left: .7em
-}
-
-.ui-accordion .ui-accordion-icons .ui-accordion-icons {
- padding-left: 2.2em
-}
-
-.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
- position: absolute;
- left: .5em;
- top: 50%;
- margin-top: -8px
-}
-
-.ui-accordion .ui-accordion-content {
- padding: 1em 2.2em;
- border-top: 0;
- overflow: auto
-}
-
-.ui-autocomplete {
- position: absolute;
- top: 0;
- left: 0;
- cursor: default
-}
-
-.ui-button {
- display: inline-block;
- position: relative;
- padding: 0;
- line-height: normal;
- margin-right: .1em;
- cursor: pointer;
- vertical-align: middle;
- text-align: center;
- overflow: visible
-}
-
-.ui-button, .ui-button:link, .ui-button:visited, .ui-button:hover, .ui-button:active {
- text-decoration: none
-}
-
-.ui-button-icon-only {
- width: 2.2em
-}
-
-button.ui-button-icon-only {
- width: 2.4em
-}
-
-.ui-button-icons-only {
- width: 3.4em
-}
-
-button.ui-button-icons-only {
- width: 3.7em
-}
-
-.ui-button .ui-button-text {
- display: block;
- line-height: normal
-}
-
-.ui-button-text-only .ui-button-text {
- padding: .4em 1em
-}
-
-.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text {
- padding: .4em;
- text-indent: -9999999px
-}
-
-.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text {
- padding: .4em 1em .4em 2.1em
-}
-
-.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text {
- padding: .4em 2.1em .4em 1em
-}
-
-.ui-button-text-icons .ui-button-text {
- padding-left: 2.1em;
- padding-right: 2.1em
-}
-
-input.ui-button {
- padding: .4em 1em
-}
-
-.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon {
- position: absolute;
- top: 50%;
- margin-top: -8px
-}
-
-.ui-button-icon-only .ui-icon {
- left: 50%;
- margin-left: -8px
-}
-
-.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary {
- left: .5em
-}
-
-.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary {
- right: .5em
-}
-
-.ui-buttonset {
- margin-right: 7px
-}
-
-.ui-buttonset .ui-button {
- margin-left: 0;
- margin-right: -.3em
-}
-
-input.ui-button::-moz-focus-inner, button.ui-button::-moz-focus-inner {
- border: 0;
- padding: 0
-}
-
-.ui-datepicker {
- width: 17em;
- padding: .2em .2em 0;
- display: none
-}
-
-.ui-datepicker .ui-datepicker-header {
- position: relative;
- padding: .2em 0
-}
-
-.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next {
- position: absolute;
- top: 2px;
- width: 1.8em;
- height: 1.8em
-}
-
-.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover {
- top: 1px
-}
-
-.ui-datepicker .ui-datepicker-prev {
- left: 2px
-}
-
-.ui-datepicker .ui-datepicker-next {
- right: 2px
-}
-
-.ui-datepicker .ui-datepicker-prev-hover {
- left: 1px
-}
-
-.ui-datepicker .ui-datepicker-next-hover {
- right: 1px
-}
-
-.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span {
- display: block;
- position: absolute;
- left: 50%;
- margin-left: -8px;
- top: 50%;
- margin-top: -8px
-}
-
-.ui-datepicker .ui-datepicker-title {
- margin: 0 2.3em;
- line-height: 1.8em;
- text-align: center
-}
-
-.ui-datepicker .ui-datepicker-title select {
- font-size: 1em;
- margin: 1px 0
-}
-
-.ui-datepicker select.ui-datepicker-month-year {
- width: 100%
-}
-
-.ui-datepicker select.ui-datepicker-month, .ui-datepicker select.ui-datepicker-year {
- width: 49%
-}
-
-.ui-datepicker table {
- width: 100%;
- font-size: .9em;
- border-collapse: collapse;
- margin: 0 0 .4em
-}
-
-.ui-datepicker th {
- padding: .7em .3em;
- text-align: center;
- font-weight: bold;
- border: 0
-}
-
-.ui-datepicker td {
- border: 0;
- padding: 1px
-}
-
-.ui-datepicker td span, .ui-datepicker td a {
- display: block;
- padding: .2em;
- text-align: right;
- text-decoration: none
-}
-
-.ui-datepicker .ui-datepicker-buttonpane {
- background-image: none;
- margin: .7em 0 0 0;
- padding: 0 .2em;
- border-left: 0;
- border-right: 0;
- border-bottom: 0
-}
-
-.ui-datepicker .ui-datepicker-buttonpane button {
- float: right;
- margin: .5em .2em .4em;
- cursor: pointer;
- padding: .2em .6em .3em .6em;
- width: auto;
- overflow: visible
-}
-
-.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
- float: left
-}
-
-.ui-datepicker.ui-datepicker-multi {
- width: auto
-}
-
-.ui-datepicker-multi .ui-datepicker-group {
- float: left
-}
-
-.ui-datepicker-multi .ui-datepicker-group table {
- width: 95%;
- margin: 0 auto .4em
-}
-
-.ui-datepicker-multi-2 .ui-datepicker-group {
- width: 50%
-}
-
-.ui-datepicker-multi-3 .ui-datepicker-group {
- width: 33.3%
-}
-
-.ui-datepicker-multi-4 .ui-datepicker-group {
- width: 25%
-}
-
-.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
- border-left-width: 0
-}
-
-.ui-datepicker-multi .ui-datepicker-buttonpane {
- clear: left
-}
-
-.ui-datepicker-row-break {
- clear: both;
- width: 100%;
- font-size: 0
-}
-
-.ui-datepicker-rtl {
- direction: rtl
-}
-
-.ui-datepicker-rtl .ui-datepicker-prev {
- right: 2px;
- left: auto
-}
-
-.ui-datepicker-rtl .ui-datepicker-next {
- left: 2px;
- right: auto
-}
-
-.ui-datepicker-rtl .ui-datepicker-prev:hover {
- right: 1px;
- left: auto
-}
-
-.ui-datepicker-rtl .ui-datepicker-next:hover {
- left: 1px;
- right: auto
-}
-
-.ui-datepicker-rtl .ui-datepicker-buttonpane {
- clear: right
-}
-
-.ui-datepicker-rtl .ui-datepicker-buttonpane button {
- float: left
-}
-
-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, .ui-datepicker-rtl .ui-datepicker-group {
- float: right
-}
-
-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
- border-right-width: 0;
- border-left-width: 1px
-}
-
-.ui-dialog {
- position: absolute;
- top: 0;
- left: 0;
- padding: .2em;
- outline: 0
-}
-
-.ui-dialog .ui-dialog-titlebar {
- padding: .4em 1em;
- position: relative
-}
-
-.ui-dialog .ui-dialog-title {
- float: left;
- margin: .1em 0;
- white-space: nowrap;
- width: 90%;
- overflow: hidden;
- text-overflow: ellipsis
-}
-
-.ui-dialog .ui-dialog-titlebar-close {
- position: absolute;
- right: .3em;
- top: 50%;
- width: 21px;
- margin: -10px 0 0 0;
- padding: 1px;
- height: 20px
-}
-
-.ui-dialog .ui-dialog-content {
- position: relative;
- border: 0;
- padding: .5em 1em;
- background: none;
- overflow: auto
-}
-
-.ui-dialog .ui-dialog-buttonpane {
- text-align: left;
- border-width: 1px 0 0 0;
- background-image: none;
- margin-top: .5em;
- padding: .3em 1em .5em .4em
-}
-
-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
- float: right
-}
-
-.ui-dialog .ui-dialog-buttonpane button {
- margin: .5em .4em .5em 0;
- cursor: pointer
-}
-
-.ui-dialog .ui-resizable-se {
- width: 12px;
- height: 12px;
- right: -5px;
- bottom: -5px;
- background-position: 16px 16px
-}
-
-.ui-draggable .ui-dialog-titlebar {
- cursor: move
-}
-
-.ui-menu {
- list-style: none;
- padding: 2px;
- margin: 0;
- display: block;
- outline: none
-}
-
-.ui-menu .ui-menu {
- margin-top: -3px;
- position: absolute
-}
-
-.ui-menu .ui-menu-item {
- margin: 0;
- padding: 0;
- width: 100%;
- list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
-}
-
-.ui-menu .ui-menu-divider {
- margin: 5px -2px 5px -2px;
- height: 0;
- font-size: 0;
- line-height: 0;
- border-width: 1px 0 0 0
-}
-
-.ui-menu .ui-menu-item a {
- text-decoration: none;
- display: block;
- padding: 2px .4em;
- line-height: 1.5;
- min-height: 0;
- font-weight: normal
-}
-
-.ui-menu .ui-menu-item a.ui-state-focus, .ui-menu .ui-menu-item a.ui-state-active {
- font-weight: normal;
- margin: -1px
-}
-
-.ui-menu .ui-state-disabled {
- font-weight: normal;
- margin: .4em 0 .2em;
- line-height: 1.5
-}
-
-.ui-menu .ui-state-disabled a {
- cursor: default
-}
-
-.ui-menu-icons {
- position: relative
-}
-
-.ui-menu-icons .ui-menu-item a {
- position: relative;
- padding-left: 2em
-}
-
-.ui-menu .ui-icon {
- position: absolute;
- top: .2em;
- left: .2em
-}
-
-.ui-menu .ui-menu-icon {
- position: static;
- float: right
-}
-
-.ui-progressbar {
- height: 2em;
- text-align: left;
- overflow: hidden
-}
-
-.ui-progressbar .ui-progressbar-value {
- margin: -1px;
- height: 100%
-}
-
-.ui-progressbar .ui-progressbar-overlay {
- background: url("smoothness/images/animated-overlay.gif");
- height: 100%;
- filter: alpha(opacity=25);
- opacity: 0.25
-}
-
-.ui-progressbar-indeterminate .ui-progressbar-value {
- background-image: none
-}
-
-.ui-slider {
- position: relative;
- text-align: left
-}
-
-.ui-slider .ui-slider-handle {
- position: absolute;
- z-index: 2;
- width: 1.2em;
- height: 1.2em;
- cursor: default
-}
-
-.ui-slider .ui-slider-range {
- position: absolute;
- z-index: 1;
- font-size: .7em;
- display: block;
- border: 0;
- background-position: 0 0
-}
-
-.ui-slider.ui-state-disabled .ui-slider-handle, .ui-slider.ui-state-disabled .ui-slider-range {
- filter: inherit
-}
-
-.ui-slider-horizontal {
- height: .8em
-}
-
-.ui-slider-horizontal .ui-slider-handle {
- top: -.3em;
- margin-left: -.6em
-}
-
-.ui-slider-horizontal .ui-slider-range {
- top: 0;
- height: 100%
-}
-
-.ui-slider-horizontal .ui-slider-range-min {
- left: 0
-}
-
-.ui-slider-horizontal .ui-slider-range-max {
- right: 0
-}
-
-.ui-slider-vertical {
- width: .8em;
- height: 100px
-}
-
-.ui-slider-vertical .ui-slider-handle {
- left: -.3em;
- margin-left: 0;
- margin-bottom: -.6em
-}
-
-.ui-slider-vertical .ui-slider-range {
- left: 0;
- width: 100%
-}
-
-.ui-slider-vertical .ui-slider-range-min {
- bottom: 0
-}
-
-.ui-slider-vertical .ui-slider-range-max {
- top: 0
-}
-
-.ui-spinner {
- position: relative;
- display: inline-block;
- overflow: hidden;
- padding: 0;
- vertical-align: middle
-}
-
-.ui-spinner-input {
- border: none;
- background: none;
- color: inherit;
- padding: 0;
- margin: .2em 0;
- vertical-align: middle;
- margin-left: .4em;
- margin-right: 22px
-}
-
-.ui-spinner-button {
- width: 16px;
- height: 50%;
- font-size: .5em;
- padding: 0;
- margin: 0;
- text-align: center;
- position: absolute;
- cursor: default;
- display: block;
- overflow: hidden;
- right: 0
-}
-
-.ui-spinner a.ui-spinner-button {
- border-top: none;
- border-bottom: none;
- border-right: none
-}
-
-.ui-spinner .ui-icon {
- position: absolute;
- margin-top: -8px;
- top: 50%;
- left: 0
-}
-
-.ui-spinner-up {
- top: 0
-}
-
-.ui-spinner-down {
- bottom: 0
-}
-
-.ui-spinner .ui-icon-triangle-1-s {
- background-position: -65px -16px
-}
-
-.ui-tabs {
- position: relative;
- padding: .2em
-}
-
-.ui-tabs .ui-tabs-nav {
- margin: 0;
- padding: .2em .2em 0
-}
-
-.ui-tabs .ui-tabs-nav li {
- list-style: none;
- float: left;
- position: relative;
- top: 0;
- margin: 1px .2em 0 0;
- border-bottom-width: 0;
- padding: 0;
- white-space: nowrap
-}
-
-.ui-tabs .ui-tabs-nav li a {
- float: left;
- padding: .5em 1em;
- text-decoration: none
-}
-
-.ui-tabs .ui-tabs-nav li.ui-tabs-active {
- margin-bottom: -1px;
- padding-bottom: 1px
-}
-
-.ui-tabs .ui-tabs-nav li.ui-tabs-active a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-tabs-loading a {
- cursor: text
-}
-
-.ui-tabs .ui-tabs-nav li a, .ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a {
- cursor: pointer
-}
-
-.ui-tabs .ui-tabs-panel {
- display: block;
- border-width: 0;
- padding: 1em 1.4em;
- background: none
-}
-
-.ui-tooltip {
- padding: 8px;
- position: absolute;
- z-index: 9999;
- max-width: 300px;
- -webkit-box-shadow: 0 0 5px #aaa;
- box-shadow: 0 0 5px #aaa
-}
-
-body .ui-tooltip {
- border-width: 2px
-}
-
-.ui-widget {
- font-family: Verdana, Arial, sans-serif;
- font-size: 1.1em
-}
-
-.ui-widget .ui-widget {
- font-size: 1em
-}
-
-.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button {
- font-family: Verdana, Arial, sans-serif;
- font-size: 1em
-}
-
-.ui-widget-content {
- border: 1px solid #aaa;
- background: #fff url(smoothness/images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;
- color: #222
-}
-
-.ui-widget-content a {
- color: #222
-}
-
-.ui-widget-header {
- border: 1px solid #aaa;
- background: #ccc url(smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;
- color: #222;
- font-weight: bold
-}
-
-.ui-widget-header a {
- color: #222
-}
-
-.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default {
- border: 1px solid #d3d3d3;
- background: #e6e6e6 url(smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;
- font-weight: normal;
- color: #555
-}
-
-.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited {
- color: #555;
- text-decoration: none
-}
-
-.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus {
- border: 1px solid #999;
- background: #dadada url(smoothness/images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;
- font-weight: normal;
- color: #212121
-}
-
-.ui-state-hover a, .ui-state-hover a:hover, .ui-state-hover a:link, .ui-state-hover a:visited {
- color: #212121;
- text-decoration: none
-}
-
-.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active {
- border: 1px solid #aaa;
- background: #fff url(smoothness/images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;
- font-weight: normal;
- color: #212121
-}
-
-.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited {
- color: #212121;
- text-decoration: none
-}
-
-.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {
- border: 1px solid #fcefa1;
- background: #fbf9ee url(smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;
- color: #363636
-}
-
-.ui-state-highlight a, .ui-widget-content .ui-state-highlight a, .ui-widget-header .ui-state-highlight a {
- color: #363636
-}
-
-.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {
- border: 1px solid #cd0a0a;
- background: #fef1ec url(smoothness/images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x;
- color: #cd0a0a
-}
-
-.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a {
- color: #cd0a0a
-}
-
-.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text {
- color: #cd0a0a
-}
-
-.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary {
- font-weight: bold
-}
-
-.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary {
- opacity: .7;
- filter: Alpha(Opacity=70);
- font-weight: normal
-}
-
-.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled {
- opacity: .35;
- filter: Alpha(Opacity=35);
- background-image: none
-}
-
-.ui-state-disabled .ui-icon {
- filter: Alpha(Opacity=35)
-}
-
-.ui-icon {
- width: 16px;
- height: 16px
-}
-
-.ui-icon, .ui-widget-content .ui-icon {
- background-image: url(smoothness/images/ui-icons_222222_256x240.png)
-}
-
-.ui-widget-header .ui-icon {
- background-image: url(smoothness/images/ui-icons_222222_256x240.png)
-}
-
-.ui-state-default .ui-icon {
- background-image: url(smoothness/images/ui-icons_888888_256x240.png)
-}
-
-.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {
- background-image: url(smoothness/images/ui-icons_454545_256x240.png)
-}
-
-.ui-state-active .ui-icon {
- background-image: url(smoothness/images/ui-icons_454545_256x240.png)
-}
-
-.ui-state-highlight .ui-icon {
- background-image: url(smoothness/images/ui-icons_2e83ff_256x240.png)
-}
-
-.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {
- background-image: url(smoothness/images/ui-icons_cd0a0a_256x240.png)
-}
-
-.ui-icon-blank {
- background-position: 16px 16px
-}
-
-.ui-icon-carat-1-n {
- background-position: 0 0
-}
-
-.ui-icon-carat-1-ne {
- background-position: -16px 0
-}
-
-.ui-icon-carat-1-e {
- background-position: -32px 0
-}
-
-.ui-icon-carat-1-se {
- background-position: -48px 0
-}
-
-.ui-icon-carat-1-s {
- background-position: -64px 0
-}
-
-.ui-icon-carat-1-sw {
- background-position: -80px 0
-}
-
-.ui-icon-carat-1-w {
- background-position: -96px 0
-}
-
-.ui-icon-carat-1-nw {
- background-position: -112px 0
-}
-
-.ui-icon-carat-2-n-s {
- background-position: -128px 0
-}
-
-.ui-icon-carat-2-e-w {
- background-position: -144px 0
-}
-
-.ui-icon-triangle-1-n {
- background-position: 0 -16px
-}
-
-.ui-icon-triangle-1-ne {
- background-position: -16px -16px
-}
-
-.ui-icon-triangle-1-e {
- background-position: -32px -16px
-}
-
-.ui-icon-triangle-1-se {
- background-position: -48px -16px
-}
-
-.ui-icon-triangle-1-s {
- background-position: -64px -16px
-}
-
-.ui-icon-triangle-1-sw {
- background-position: -80px -16px
-}
-
-.ui-icon-triangle-1-w {
- background-position: -96px -16px
-}
-
-.ui-icon-triangle-1-nw {
- background-position: -112px -16px
-}
-
-.ui-icon-triangle-2-n-s {
- background-position: -128px -16px
-}
-
-.ui-icon-triangle-2-e-w {
- background-position: -144px -16px
-}
-
-.ui-icon-arrow-1-n {
- background-position: 0 -32px
-}
-
-.ui-icon-arrow-1-ne {
- background-position: -16px -32px
-}
-
-.ui-icon-arrow-1-e {
- background-position: -32px -32px
-}
-
-.ui-icon-arrow-1-se {
- background-position: -48px -32px
-}
-
-.ui-icon-arrow-1-s {
- background-position: -64px -32px
-}
-
-.ui-icon-arrow-1-sw {
- background-position: -80px -32px
-}
-
-.ui-icon-arrow-1-w {
- background-position: -96px -32px
-}
-
-.ui-icon-arrow-1-nw {
- background-position: -112px -32px
-}
-
-.ui-icon-arrow-2-n-s {
- background-position: -128px -32px
-}
-
-.ui-icon-arrow-2-ne-sw {
- background-position: -144px -32px
-}
-
-.ui-icon-arrow-2-e-w {
- background-position: -160px -32px
-}
-
-.ui-icon-arrow-2-se-nw {
- background-position: -176px -32px
-}
-
-.ui-icon-arrowstop-1-n {
- background-position: -192px -32px
-}
-
-.ui-icon-arrowstop-1-e {
- background-position: -208px -32px
-}
-
-.ui-icon-arrowstop-1-s {
- background-position: -224px -32px
-}
-
-.ui-icon-arrowstop-1-w {
- background-position: -240px -32px
-}
-
-.ui-icon-arrowthick-1-n {
- background-position: 0 -48px
-}
-
-.ui-icon-arrowthick-1-ne {
- background-position: -16px -48px
-}
-
-.ui-icon-arrowthick-1-e {
- background-position: -32px -48px
-}
-
-.ui-icon-arrowthick-1-se {
- background-position: -48px -48px
-}
-
-.ui-icon-arrowthick-1-s {
- background-position: -64px -48px
-}
-
-.ui-icon-arrowthick-1-sw {
- background-position: -80px -48px
-}
-
-.ui-icon-arrowthick-1-w {
- background-position: -96px -48px
-}
-
-.ui-icon-arrowthick-1-nw {
- background-position: -112px -48px
-}
-
-.ui-icon-arrowthick-2-n-s {
- background-position: -128px -48px
-}
-
-.ui-icon-arrowthick-2-ne-sw {
- background-position: -144px -48px
-}
-
-.ui-icon-arrowthick-2-e-w {
- background-position: -160px -48px
-}
-
-.ui-icon-arrowthick-2-se-nw {
- background-position: -176px -48px
-}
-
-.ui-icon-arrowthickstop-1-n {
- background-position: -192px -48px
-}
-
-.ui-icon-arrowthickstop-1-e {
- background-position: -208px -48px
-}
-
-.ui-icon-arrowthickstop-1-s {
- background-position: -224px -48px
-}
-
-.ui-icon-arrowthickstop-1-w {
- background-position: -240px -48px
-}
-
-.ui-icon-arrowreturnthick-1-w {
- background-position: 0 -64px
-}
-
-.ui-icon-arrowreturnthick-1-n {
- background-position: -16px -64px
-}
-
-.ui-icon-arrowreturnthick-1-e {
- background-position: -32px -64px
-}
-
-.ui-icon-arrowreturnthick-1-s {
- background-position: -48px -64px
-}
-
-.ui-icon-arrowreturn-1-w {
- background-position: -64px -64px
-}
-
-.ui-icon-arrowreturn-1-n {
- background-position: -80px -64px
-}
-
-.ui-icon-arrowreturn-1-e {
- background-position: -96px -64px
-}
-
-.ui-icon-arrowreturn-1-s {
- background-position: -112px -64px
-}
-
-.ui-icon-arrowrefresh-1-w {
- background-position: -128px -64px
-}
-
-.ui-icon-arrowrefresh-1-n {
- background-position: -144px -64px
-}
-
-.ui-icon-arrowrefresh-1-e {
- background-position: -160px -64px
-}
-
-.ui-icon-arrowrefresh-1-s {
- background-position: -176px -64px
-}
-
-.ui-icon-arrow-4 {
- background-position: 0 -80px
-}
-
-.ui-icon-arrow-4-diag {
- background-position: -16px -80px
-}
-
-.ui-icon-extlink {
- background-position: -32px -80px
-}
-
-.ui-icon-newwin {
- background-position: -48px -80px
-}
-
-.ui-icon-refresh {
- background-position: -64px -80px
-}
-
-.ui-icon-shuffle {
- background-position: -80px -80px
-}
-
-.ui-icon-transfer-e-w {
- background-position: -96px -80px
-}
-
-.ui-icon-transferthick-e-w {
- background-position: -112px -80px
-}
-
-.ui-icon-folder-collapsed {
- background-position: 0 -96px
-}
-
-.ui-icon-folder-open {
- background-position: -16px -96px
-}
-
-.ui-icon-document {
- background-position: -32px -96px
-}
-
-.ui-icon-document-b {
- background-position: -48px -96px
-}
-
-.ui-icon-note {
- background-position: -64px -96px
-}
-
-.ui-icon-mail-closed {
- background-position: -80px -96px
-}
-
-.ui-icon-mail-open {
- background-position: -96px -96px
-}
-
-.ui-icon-suitcase {
- background-position: -112px -96px
-}
-
-.ui-icon-comment {
- background-position: -128px -96px
-}
-
-.ui-icon-person {
- background-position: -144px -96px
-}
-
-.ui-icon-print {
- background-position: -160px -96px
-}
-
-.ui-icon-trash {
- background-position: -176px -96px
-}
-
-.ui-icon-locked {
- background-position: -192px -96px
-}
-
-.ui-icon-unlocked {
- background-position: -208px -96px
-}
-
-.ui-icon-bookmark {
- background-position: -224px -96px
-}
-
-.ui-icon-tag {
- background-position: -240px -96px
-}
-
-.ui-icon-home {
- background-position: 0 -112px
-}
-
-.ui-icon-flag {
- background-position: -16px -112px
-}
-
-.ui-icon-calendar {
- background-position: -32px -112px
-}
-
-.ui-icon-cart {
- background-position: -48px -112px
-}
-
-.ui-icon-pencil {
- background-position: -64px -112px
-}
-
-.ui-icon-clock {
- background-position: -80px -112px
-}
-
-.ui-icon-disk {
- background-position: -96px -112px
-}
-
-.ui-icon-calculator {
- background-position: -112px -112px
-}
-
-.ui-icon-zoomin {
- background-position: -128px -112px
-}
-
-.ui-icon-zoomout {
- background-position: -144px -112px
-}
-
-.ui-icon-search {
- background-position: -160px -112px
-}
-
-.ui-icon-wrench {
- background-position: -176px -112px
-}
-
-.ui-icon-gear {
- background-position: -192px -112px
-}
-
-.ui-icon-heart {
- background-position: -208px -112px
-}
-
-.ui-icon-star {
- background-position: -224px -112px
-}
-
-.ui-icon-link {
- background-position: -240px -112px
-}
-
-.ui-icon-cancel {
- background-position: 0 -128px
-}
-
-.ui-icon-plus {
- background-position: -16px -128px
-}
-
-.ui-icon-plusthick {
- background-position: -32px -128px
-}
-
-.ui-icon-minus {
- background-position: -48px -128px
-}
-
-.ui-icon-minusthick {
- background-position: -64px -128px
-}
-
-.ui-icon-close {
- background-position: -80px -128px
-}
-
-.ui-icon-closethick {
- background-position: -96px -128px
-}
-
-.ui-icon-key {
- background-position: -112px -128px
-}
-
-.ui-icon-lightbulb {
- background-position: -128px -128px
-}
-
-.ui-icon-scissors {
- background-position: -144px -128px
-}
-
-.ui-icon-clipboard {
- background-position: -160px -128px
-}
-
-.ui-icon-copy {
- background-position: -176px -128px
-}
-
-.ui-icon-contact {
- background-position: -192px -128px
-}
-
-.ui-icon-image {
- background-position: -208px -128px
-}
-
-.ui-icon-video {
- background-position: -224px -128px
-}
-
-.ui-icon-script {
- background-position: -240px -128px
-}
-
-.ui-icon-alert {
- background-position: 0 -144px
-}
-
-.ui-icon-info {
- background-position: -16px -144px
-}
-
-.ui-icon-notice {
- background-position: -32px -144px
-}
-
-.ui-icon-help {
- background-position: -48px -144px
-}
-
-.ui-icon-check {
- background-position: -64px -144px
-}
-
-.ui-icon-bullet {
- background-position: -80px -144px
-}
-
-.ui-icon-radio-on {
- background-position: -96px -144px
-}
-
-.ui-icon-radio-off {
- background-position: -112px -144px
-}
-
-.ui-icon-pin-w {
- background-position: -128px -144px
-}
-
-.ui-icon-pin-s {
- background-position: -144px -144px
-}
-
-.ui-icon-play {
- background-position: 0 -160px
-}
-
-.ui-icon-pause {
- background-position: -16px -160px
-}
-
-.ui-icon-seek-next {
- background-position: -32px -160px
-}
-
-.ui-icon-seek-prev {
- background-position: -48px -160px
-}
-
-.ui-icon-seek-end {
- background-position: -64px -160px
-}
-
-.ui-icon-seek-start {
- background-position: -80px -160px
-}
-
-.ui-icon-seek-first {
- background-position: -80px -160px
-}
-
-.ui-icon-stop {
- background-position: -96px -160px
-}
-
-.ui-icon-eject {
- background-position: -112px -160px
-}
-
-.ui-icon-volume-off {
- background-position: -128px -160px
-}
-
-.ui-icon-volume-on {
- background-position: -144px -160px
-}
-
-.ui-icon-power {
- background-position: 0 -176px
-}
-
-.ui-icon-signal-diag {
- background-position: -16px -176px
-}
-
-.ui-icon-signal {
- background-position: -32px -176px
-}
-
-.ui-icon-battery-0 {
- background-position: -48px -176px
-}
-
-.ui-icon-battery-1 {
- background-position: -64px -176px
-}
-
-.ui-icon-battery-2 {
- background-position: -80px -176px
-}
-
-.ui-icon-battery-3 {
- background-position: -96px -176px
-}
-
-.ui-icon-circle-plus {
- background-position: 0 -192px
-}
-
-.ui-icon-circle-minus {
- background-position: -16px -192px
-}
-
-.ui-icon-circle-close {
- background-position: -32px -192px
-}
-
-.ui-icon-circle-triangle-e {
- background-position: -48px -192px
-}
-
-.ui-icon-circle-triangle-s {
- background-position: -64px -192px
-}
-
-.ui-icon-circle-triangle-w {
- background-position: -80px -192px
-}
-
-.ui-icon-circle-triangle-n {
- background-position: -96px -192px
-}
-
-.ui-icon-circle-arrow-e {
- background-position: -112px -192px
-}
-
-.ui-icon-circle-arrow-s {
- background-position: -128px -192px
-}
-
-.ui-icon-circle-arrow-w {
- background-position: -144px -192px
-}
-
-.ui-icon-circle-arrow-n {
- background-position: -160px -192px
-}
-
-.ui-icon-circle-zoomin {
- background-position: -176px -192px
-}
-
-.ui-icon-circle-zoomout {
- background-position: -192px -192px
-}
-
-.ui-icon-circle-check {
- background-position: -208px -192px
-}
-
-.ui-icon-circlesmall-plus {
- background-position: 0 -208px
-}
-
-.ui-icon-circlesmall-minus {
- background-position: -16px -208px
-}
-
-.ui-icon-circlesmall-close {
- background-position: -32px -208px
-}
-
-.ui-icon-squaresmall-plus {
- background-position: -48px -208px
-}
-
-.ui-icon-squaresmall-minus {
- background-position: -64px -208px
-}
-
-.ui-icon-squaresmall-close {
- background-position: -80px -208px
-}
-
-.ui-icon-grip-dotted-vertical {
- background-position: 0 -224px
-}
-
-.ui-icon-grip-dotted-horizontal {
- background-position: -16px -224px
-}
-
-.ui-icon-grip-solid-vertical {
- background-position: -32px -224px
-}
-
-.ui-icon-grip-solid-horizontal {
- background-position: -48px -224px
-}
-
-.ui-icon-gripsmall-diagonal-se {
- background-position: -64px -224px
-}
-
-.ui-icon-grip-diagonal-se {
- background-position: -80px -224px
-}
-
-.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl {
- border-top-left-radius: 4px
-}
-
-.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr {
- border-top-right-radius: 4px
-}
-
-.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl {
- border-bottom-left-radius: 4px
-}
-
-.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br {
- border-bottom-right-radius: 4px
-}
-
-.ui-widget-overlay {
- background: #aaa url(smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;
- opacity: .3;
- filter: Alpha(Opacity=30)
-}
-
-.ui-widget-shadow {
- margin: -8px 0 0 -8px;
- padding: 8px;
- background: #aaa url(smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;
- opacity: .3;
- filter: Alpha(Opacity=30);
- border-radius: 8px
-}
\ No newline at end of file
diff --git a/imgs/NotoSansUI-Regular.ttf b/imgs/NotoSansUI-Regular.ttf
new file mode 100644
index 00000000..72709786
Binary files /dev/null and b/imgs/NotoSansUI-Regular.ttf differ
diff --git a/imgs/logo.png b/imgs/logo.png
index c0acda0d..c99c1544 100644
Binary files a/imgs/logo.png and b/imgs/logo.png differ
diff --git a/imgs/logo.svg b/imgs/logo.svg
index d06679d1..c19bf6c6 100644
--- a/imgs/logo.svg
+++ b/imgs/logo.svg
@@ -14,8 +14,11 @@
height="395.32526"
id="svg2985"
version="1.1"
- inkscape:version="0.48.5 r10040"
- sodipodi:docname="logo.svg">
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="logo.svg"
+ inkscape:export-filename="C:\Users\rdominguez\Documents\IMGS\logo.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+
+
+
+
+
+
+
+
+ fit-margin-bottom="0"
+ borderlayer="true" />
@@ -461,10 +503,14 @@
image/svg+xml
-
+
+
@@ -147,6 +147,162 @@
url('register.otf') format('otf');
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+ id="g3095"
+ transform="translate(-4.1115388,15.04713)">
+
+
+
+
+
+ id="g3864"
+ transform="translate(0,-28)">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ id="g4243">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/imgs/preferences.png b/imgs/preferences.png
new file mode 100644
index 00000000..0c7d119a
Binary files /dev/null and b/imgs/preferences.png differ
diff --git a/inc/Account.class.php b/inc/Account.class.php
new file mode 100644
index 00000000..14e4b34a
--- /dev/null
+++ b/inc/Account.class.php
@@ -0,0 +1,705 @@
+.
+ *
+ */
+
+namespace SP;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+/**
+ * Esta clase es la encargada de realizar las operaciones sobre las cuentas de sysPass.
+ */
+class Account extends AccountBase implements AccountInterface
+{
+ /**
+ * @var array Variable para la caché de parámetros de una cuenta.
+ */
+ private $_cacheParams;
+
+ /**
+ * Obtener los datos de usuario y modificador de una cuenta.
+ *
+ * @param int $accountId con el Id de la cuenta
+ * @return false|object con el id de usuario y modificador.
+ */
+ public static function getAccountRequestData($accountId)
+ {
+ $query = 'SELECT account_userId,'
+ . 'account_userEditId,'
+ . 'account_name,'
+ . 'customer_name '
+ . 'FROM accounts '
+ . 'LEFT JOIN customers ON account_customerId = customer_id '
+ . 'WHERE account_id = :id LIMIT 1';
+
+ $data['id'] = $accountId;
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+ return false;
+ }
+
+ return $queryRes;
+ }
+
+ /**
+ * Obtiene el listado con el nombre de los usuaios de una cuenta.
+ *
+ * @param int $accountId con el Id de la cuenta
+ * @return false|array con los nombres de los usuarios ordenados
+ */
+ public static function getAccountUsersName($accountId)
+ {
+ $query = 'SELECT user_name '
+ . 'FROM accUsers '
+ . 'JOIN usrData ON accuser_userId = user_id '
+ . 'WHERE accuser_accountId = :id';
+
+ $data['id'] = $accountId;
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+ return false;
+ }
+
+ if (!is_array($queryRes)) {
+ return false;
+ }
+
+ foreach ($queryRes as $users) {
+ $usersName[] = $users->user_name;
+ }
+
+ sort($usersName, SORT_STRING);
+
+ return $usersName;
+ }
+
+ /**
+ * Actualiza los datos de una cuenta en la BBDD.
+ *
+ * @return bool
+ */
+ public function updateAccount()
+ {
+ $Log = new Log(__FUNCTION__);
+
+ // Guardamos una copia de la cuenta en el histórico
+ if (!AccountHistory::addHistory($this->getAccountId(), false)) {
+ $Log->addDescription(_('Error al actualizar el historial'));
+ $Log->writeLog();
+ return false;
+ }
+
+ $Log->setAction(_('Actualizar Cuenta'));
+
+ if (!Groups::updateGroupsForAccount($this->getAccountId(), $this->getAccountUserGroupsId())) {
+ $Log->addDescription(_('Error al actualizar los grupos secundarios'));
+ $Log->writeLog();
+ $Log->resetDescription();
+ }
+
+ if (!UserUtil::updateUsersForAccount($this->getAccountId(), $this->getAccountUsersId())) {
+ $Log->addDescription(_('Error al actualizar los usuarios de la cuenta'));
+ $Log->writeLog();
+ $Log->resetDescription();
+ }
+
+ $query = 'UPDATE accounts SET '
+ . 'account_customerId = :accountCustomerId,'
+ . 'account_categoryId = :accountCategoryId,'
+ . 'account_name = :accountName,'
+ . 'account_login = :accountLogin,'
+ . 'account_url = :accountUrl,'
+ . 'account_notes = :accountNotes,'
+ . 'account_userEditId = :accountUserEditId,'
+ . 'account_userGroupId = :accountUserGroupId,'
+ . 'account_dateEdit = NOW(),'
+ . 'account_otherUserEdit = :accountOtherUserEdit,'
+ . 'account_otherGroupEdit = :accountOtherGroupEdit '
+ . 'WHERE account_id = :accountId';
+
+ $data['accountCustomerId'] = $this->getAccountCustomerId();
+ $data['accountCategoryId'] = $this->getAccountCategoryId();
+ $data['accountName'] = $this->getAccountName();
+ $data['accountLogin'] = $this->getAccountLogin();
+ $data['accountUrl'] = $this->getAccountUrl();
+ $data['accountNotes'] = $this->getAccountNotes();
+ $data['accountUserEditId'] = $this->getAccountUserEditId();
+ $data['accountUserGroupId'] = ($this->getAccountUserGroupId()) ? $this->getAccountUserGroupId() : 'account_userGroupId';
+ $data['accountOtherUserEdit'] = intval($this->getAccountOtherUserEdit());
+ $data['accountOtherGroupEdit'] = intval($this->getAccountOtherGroupEdit());
+ $data['accountId'] = $this->getAccountId();
+
+ if (DB::getQuery($query, __FUNCTION__, $data) === false) {
+ return false;
+ }
+
+ $accountInfo = array('customer_name');
+ $this->getAccountInfoById($accountInfo);
+
+ $Log->addDescription(Html::strongText(_('Cliente') . ': ') . $this->_cacheParams['customer_name']);
+ $Log->addDescription(Html::strongText(_('Cuenta') . ': ') . $this->getAccountName() . " (" . $this->getAccountId() . ")");
+ $Log->writeLog();
+
+ Email::sendEmail($Log);
+
+ return true;
+ }
+
+ /**
+ * Restaurar una cuenta desde el histórico.
+ *
+ * @param $id int El Id del registro en el histórico
+ * @return bool
+ */
+ public function restoreFromHistory($id)
+ {
+ $Log = new Log(__FUNCTION__);
+
+ // Guardamos una copia de la cuenta en el histórico
+ if (!AccountHistory::addHistory($this->getAccountId(), false)) {
+ $Log->addDescription(_('Error al actualizar el historial'));
+ $Log->writeLog();
+ return false;
+ }
+
+ $query = 'UPDATE accounts dst, '
+ . '(SELECT * FROM accHistory WHERE acchistory_id = :id) src SET '
+ . 'dst.account_customerId = src.acchistory_customerId,'
+ . 'dst.account_categoryId = src.acchistory_categoryId,'
+ . 'dst.account_name = src.acchistory_name,'
+ . 'dst.account_login = src.acchistory_login,'
+ . 'dst.account_url = src.acchistory_url,'
+ . 'dst.account_notes = src.acchistory_notes,'
+ . 'dst.account_userEditId = :accountUserEditId,'
+ . 'dst.account_dateEdit = NOW(),'
+ . 'dst.account_otherUserEdit = src.acchistory_otherUserEdit + 0,'
+ . 'dst.account_otherGroupEdit = src.acchistory_otherGroupEdit + 0,'
+ . 'dst.account_pass = src.acchistory_pass,'
+ . 'dst.account_IV = src.acchistory_IV '
+ . 'WHERE dst.account_id = :accountId';
+
+ $data['id'] = $id;
+ $data['accountId'] = $this->getAccountId();
+ $data['accountUserEditId'] = $this->getAccountUserEditId();
+
+ if (DB::getQuery($query, __FUNCTION__, $data) === false) {
+ return false;
+ }
+
+ $accountInfo = array('customer_name', 'account_name');
+ $this->getAccountInfoById($accountInfo);
+
+ $Log->setAction(_('Restaurar Cuenta'));
+ $Log->addDescription(Html::strongText(_('Cliente') . ': ') . $this->_cacheParams['customer_name']);
+ $Log->addDescription(Html::strongText(_('Cuenta') . ': ') . $this->_cacheParams['account_name'] . " (" . $this->getAccountId() . ")");
+
+ $Log->writeLog();
+ Email::sendEmail($Log);
+
+ return true;
+ }
+
+ /**
+ * Obtener los datos de una cuenta con el id.
+ * Se guardan los datos en la variable $cacheParams de la clase para consultarlos
+ * posteriormente.
+ *
+ * @param array $params con los campos de la BBDD a obtener
+ * @return bool
+ */
+ private function getAccountInfoById($params)
+ {
+ if (!is_array($params)) {
+ return false;
+ }
+
+ if (is_array($this->_cacheParams)) {
+ $cache = true;
+
+ foreach ($params as $param) {
+ if (!array_key_exists($param, $this->_cacheParams)) {
+ $cache = false;
+ }
+ }
+
+ if ($cache) {
+ return true;
+ }
+ }
+
+ $query = 'SELECT ' . implode(',', $params) . ' '
+ . 'FROM accounts '
+ . 'LEFT JOIN usrGroups ug ON account_userGroupId = usergroup_id '
+ . 'LEFT JOIN usrData u1 ON account_userId = u1.user_id '
+ . 'LEFT JOIN usrData u2 ON account_userEditId = u2.user_id '
+ . 'LEFT JOIN customers ON account_customerId = customer_id '
+ . 'WHERE account_id = :id LIMIT 1';
+
+ $data['id'] = $this->getAccountId();
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+ return false;
+ }
+
+ foreach ($queryRes as $param => $value) {
+ $this->_cacheParams[$param] = $value;
+ }
+
+ return true;
+ }
+
+ /**
+ * Obtener los datos de una cuenta.
+ * Esta funcion realiza la consulta a la BBDD y guarda los datos en las variables de la clase.
+ *
+ * @return object
+ * @throws SPException
+ */
+ public function getAccountData()
+ {
+ $query = 'SELECT account_id,'
+ . 'account_name,'
+ . 'account_categoryId,'
+ . 'account_userId,'
+ . 'account_customerId,'
+ . 'account_userGroupId,'
+ . 'account_userEditId,'
+ . 'category_name,'
+ . 'account_login,'
+ . 'account_url,'
+// . 'account_pass,'
+// . 'account_IV,'
+ . 'account_notes,'
+ . 'account_countView,'
+ . 'account_countDecrypt,'
+ . 'account_dateAdd,'
+ . 'account_dateEdit,'
+ . 'BIN(account_otherUserEdit) AS account_otherUserEdit,'
+ . 'BIN(account_otherGroupEdit) AS account_otherGroupEdit,'
+ . 'u1.user_name,'
+ . 'u1.user_login,'
+ . 'u2.user_name as user_editName,'
+ . 'u2.user_login as user_editLogin,'
+ . 'usergroup_name,'
+ . 'customer_name, '
+ . 'CONCAT(account_name,account_categoryId,account_customerId,account_login,account_url,account_notes,BIN(account_otherUserEdit),BIN(account_otherGroupEdit)) as modHash '
+ . 'FROM accounts '
+ . 'LEFT JOIN categories ON account_categoryId = category_id '
+ . 'LEFT JOIN usrGroups ug ON account_userGroupId = usergroup_id '
+ . 'LEFT JOIN usrData u1 ON account_userId = u1.user_id '
+ . 'LEFT JOIN usrData u2 ON account_userEditId = u2.user_id '
+ . 'LEFT JOIN customers ON account_customerId = customer_id '
+ . 'WHERE account_id = :id LIMIT 1';
+
+ $data['id'] = $this->getAccountId();
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+ throw new SPException(SPException::SP_CRITICAL, _('No se pudieron obtener los datos de la cuenta'));
+ }
+
+ $this->setAccountUserId($queryRes->account_userId);
+ $this->setAccountUserGroupId($queryRes->account_userGroupId);
+ $this->setAccountOtherUserEdit($queryRes->account_otherUserEdit);
+ $this->setAccountOtherGroupEdit($queryRes->account_otherGroupEdit);
+ $this->setAccountModHash($queryRes->modHash);
+
+ return $queryRes;
+ }
+
+ /**
+ * Crea una nueva cuenta en la BBDD
+ *
+ * @return bool
+ */
+ public function createAccount()
+ {
+ $query = 'INSERT INTO accounts SET '
+ . 'account_customerId = :accountCustomerId,'
+ . 'account_categoryId = :accountCategoryId,'
+ . 'account_name = :accountName,'
+ . 'account_login = :accountLogin,'
+ . 'account_url = :accountUrl,'
+ . 'account_pass = :accountPass,'
+ . 'account_IV = :accountIV,'
+ . 'account_notes = :accountNotes,'
+ . 'account_dateAdd = NOW(),'
+ . 'account_userId = :accountUserId,'
+ . 'account_userGroupId = :accountUserGroupId,'
+ . 'account_otherUserEdit = :accountOtherUserEdit,'
+ . 'account_otherGroupEdit = :accountOtherGroupEdit';
+
+ $data['accountCustomerId'] = $this->getAccountCustomerId();
+ $data['accountCategoryId'] = $this->getAccountCategoryId();
+ $data['accountName'] = $this->getAccountName();
+ $data['accountLogin'] = $this->getAccountLogin();
+ $data['accountUrl'] = $this->getAccountUrl();
+ $data['accountPass'] = $this->getAccountPass();
+ $data['accountIV'] = $this->getAccountIV();
+ $data['accountNotes'] = $this->getAccountNotes();
+ $data['accountUserId'] = $this->getAccountUserId();
+ $data['accountUserGroupId'] = $this->getAccountUserGroupId();
+ $data['accountOtherUserEdit'] = $this->getAccountOtherUserEdit();
+ $data['accountOtherGroupEdit'] = $this->getAccountOtherGroupEdit();
+
+ if (DB::getQuery($query, __FUNCTION__, $data) === false) {
+ return false;
+ }
+
+ $this->setAccountId(DB::$lastId);
+
+ $Log = new Log(__FUNCTION__);
+
+ if (is_array($this->getAccountUserGroupsId())) {
+ if (!Groups::addGroupsForAccount($this->getAccountId(), $this->getAccountUserGroupsId())) {
+ $Log->addDescription(_('Error al actualizar los grupos secundarios'));
+ $Log->writeLog();
+ $Log->resetDescription();
+ }
+ }
+
+ if (is_array($this->getAccountUsersId())) {
+ if (!UserUtil::addUsersForAccount($this->getAccountId(), $this->getAccountUsersId())) {
+ $Log->addDescription(_('Error al actualizar los usuarios de la cuenta'));
+ $Log->writeLog();
+ $Log->resetDescription();
+ }
+ }
+
+ $accountInfo = array('customer_name');
+ $this->getAccountInfoById($accountInfo);
+
+ $Log->setAction(_('Nueva Cuenta'));
+ $Log->addDescription(Html::strongText(_('Cliente') . ': ') . $this->_cacheParams['customer_name']);
+ $Log->addDescription(Html::strongText(_('Cuenta') . ': ') . $this->getAccountName() . " (" . $this->getAccountId() . ")");
+ $Log->writeLog();
+
+ Email::sendEmail($Log);
+
+ return true;
+ }
+
+ /**
+ * Elimina los datos de una cuenta en la BBDD.
+ *
+ * @return bool
+ */
+ public function deleteAccount()
+ {
+ // Guardamos una copia de la cuenta en el histórico
+ AccountHistory::addHistory($this->getAccountId(), true) || die (_('ERROR: Error en la operación.'));
+
+ $accountInfo = array('account_name,customer_name');
+ $this->getAccountInfoById($accountInfo);
+
+ $Log = new Log(_('Eliminar Cuenta'));
+ $Log->addDescription(Html::strongText(_('Cliente') . ': ') . $this->_cacheParams['customer_name']);
+ $Log->addDescription(Html::strongText(_('Cuenta') . ': ') . $this->_cacheParams['account_name'] . " (" . $this->getAccountId() . ")");
+
+ $query = 'DELETE FROM accounts WHERE account_id = :id LIMIT 1';
+
+ $data['id'] = $this->getAccountId();
+
+ if (DB::getQuery($query, __FUNCTION__, $data) === false) {
+ return false;
+ }
+
+ if (!Groups::deleteGroupsForAccount($this->getAccountId())) {
+ $Log->addDescription(_('Error al eliminar grupos asociados a la cuenta'));
+ }
+
+ if (!UserUtil::deleteUsersForAccount($this->getAccountId())) {
+ $Log->addDescription(_('Error al eliminar usuarios asociados a la cuenta'));
+ }
+
+ if (!Files::deleteAccountFiles($this->getAccountId())) {
+ $Log->addDescription(_('Error al eliminar archivos asociados a la cuenta'));
+ }
+
+ $Log->writeLog();
+
+ Email::sendEmail($Log);
+
+ return true;
+ }
+
+ /**
+ * Incrementa el contador de visitas de una cuenta en la BBDD
+ *
+ * @return bool
+ */
+ public function incrementViewCounter()
+ {
+ $query = 'UPDATE accounts SET account_countView = (account_countView + 1) WHERE account_id = :id LIMIT 1';
+
+ $data['id'] = $this->getAccountId();
+
+ return DB::getQuery($query, __FUNCTION__, $data);
+ }
+
+ /**
+ * Incrementa el contador de vista de clave de una cuenta en la BBDD
+ *
+ * @return bool
+ */
+ public function incrementDecryptCounter()
+ {
+ $query = 'UPDATE accounts SET account_countDecrypt = (account_countDecrypt + 1) WHERE account_id = :id LIMIT 1';
+
+ $data['id'] = $this->getAccountId();
+
+ return DB::getQuery($query, __FUNCTION__, $data);
+ }
+
+ /**
+ * Actualiza las claves de todas las cuentas con la nueva clave maestra.
+ *
+ * @param string $currentMasterPass con la clave maestra actual
+ * @param string $newMasterPass con la nueva clave maestra
+ * @param string $newHash con el nuevo hash de la clave maestra
+ * @return bool
+ */
+ public function updateAccountsMasterPass($currentMasterPass, $newMasterPass, $newHash = null)
+ {
+ $accountsOk = array();
+ $userId = Session::getUserId();
+ $demoEnabled = Util::demoIsEnabled();
+ $errorCount = 0;
+
+ $Log = new Log(_('Actualizar Clave Maestra'));
+ $Log->addDescription(_('Inicio'));
+ $Log->writeLog();
+ $Log->resetDescription();
+
+ if (!Crypt::checkCryptModule()) {
+ $Log->addDescription(_('Error en el módulo de encriptación'));
+ $Log->writeLog();
+ return false;
+ }
+
+ $accountsPass = $this->getAccountsPassData();
+
+ if (!$accountsPass) {
+ $Log->addDescription(_('Error al obtener las claves de las cuentas'));
+ $Log->writeLog();
+ return false;
+ }
+
+ foreach ($accountsPass as $account) {
+ $this->setAccountId($account->account_id);
+ $this->setAccountUserEditId($userId);
+
+ // No realizar cambios si está en modo demo
+ if ($demoEnabled) {
+ $accountsOk[] = $this->getAccountId();
+ continue;
+ }
+
+ if (strlen($account->account_pass) === 0){
+ $Log->addDescription(_('Clave de cuenta vacía') . ' (' . $account->account_id . ') ' . $account->account_name);
+ continue;
+ }
+
+ if (strlen($account->account_IV) < 32) {
+ $Log->addDescription(_('IV de encriptación incorrecto') . ' (' . $account->account_id . ') ' . $account->account_name);
+ }
+
+ $decryptedPass = Crypt::getDecrypt($account->account_pass, $account->account_IV);
+ $this->setAccountPass(Crypt::mkEncrypt($decryptedPass, $newMasterPass));
+ $this->setAccountIV(Crypt::$strInitialVector);
+
+ if ($this->getAccountPass() === false) {
+ $errorCount++;
+ $Log->addDescription(_('No es posible desencriptar la clave de la cuenta') . ' (' . $account->account_id . ') ' . $account->account_name);
+ continue;
+ }
+
+ if (!$this->updateAccountPass(true)) {
+ $errorCount++;
+ $Log->addDescription(_('Fallo al actualizar la clave de la cuenta') . ' (' . $this->getAccountId() . ') ' . $account->acchistory_name);
+ continue;
+ }
+
+ $accountsOk[] = $this->getAccountId();
+ }
+
+ // Vaciar el array de mensajes de log
+ if (count($Log->getDescription()) > 0) {
+ $Log->writeLog();
+ $Log->resetDescription();
+ }
+
+ if ($accountsOk) {
+ $Log->addDescription(_('Cuentas actualizadas') . ': ' . implode(',', $accountsOk));
+ $Log->writeLog();
+ $Log->resetDescription();
+ }
+
+ $Log->addDescription(_('Fin'));
+ $Log->writeLog();
+
+ Email::sendEmail($Log);
+
+ return true;
+ }
+
+ /**
+ * Obtener los datos relativos a la clave de todas las cuentas.
+ *
+ * @return false|array Con los datos de la clave
+ */
+ protected function getAccountsPassData()
+ {
+ $query = 'SELECT account_id, account_name, account_pass, account_IV FROM accounts';
+
+ return DB::getResults($query, __FUNCTION__);
+ }
+
+ /**
+ * Obtener los datos de una cuenta para mostrar la clave
+ * Esta funcion realiza la consulta a la BBDD y devuelve los datos.
+ *
+ * @return object|false
+ */
+ public function getAccountPassData()
+ {
+ $query = 'SELECT account_name AS name,'
+ . 'account_userId AS userId,'
+ . 'account_userGroupId AS groupId,'
+ . 'account_login AS login,'
+ . 'account_pass AS pass,'
+ . 'account_IV AS iv,'
+ . 'customer_name '
+ . 'FROM accounts '
+ . 'LEFT JOIN customers ON account_customerId = customer_id '
+ . 'WHERE account_id = :id LIMIT 1';
+
+ $data['id'] = $this->getAccountId();
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+ return false;
+ }
+
+ $this->setAccountUserId($queryRes->userId);
+ $this->setAccountUserGroupId($queryRes->groupId);
+ $this->setAccountPass($queryRes->pass);
+ $this->setAccountIV($queryRes->iv);
+
+ return $queryRes;
+ }
+
+ /**
+ * Actualiza la clave de una cuenta en la BBDD.
+ *
+ * @param bool $isMassive para no actualizar el histórico ni enviar mensajes
+ * @param bool $isRestore indica si es una restauración
+ * @return bool
+ */
+ public function updateAccountPass($isMassive = false, $isRestore = false)
+ {
+ $Log = new Log(__FUNCTION__);
+
+ // No actualizar el histórico si es por cambio de clave maestra o restauración
+ if (!$isMassive && !$isRestore) {
+ // Guardamos una copia de la cuenta en el histórico
+ if (!AccountHistory::addHistory($this->getAccountId(), false)) {
+ $Log->addDescription(_('Error al actualizar el historial'));
+ $Log->writeLog();
+ return false;
+ }
+ }
+
+ $query = 'UPDATE accounts SET '
+ . 'account_pass = :accountPass,'
+ . 'account_IV = :accountIV,'
+ . 'account_userEditId = :accountUserEditId,'
+ . 'account_dateEdit = NOW() '
+ . 'WHERE account_id = :accountId';
+
+ $data['accountPass'] = $this->getAccountPass();
+ $data['accountIV'] = $this->getAccountIV();
+ $data['accountUserEditId'] = $this->getAccountUserEditId();
+ $data['accountId'] = $this->getAccountId();
+
+
+ if (DB::getQuery($query, __FUNCTION__, $data) === false) {
+ return false;
+ }
+
+ // No escribir en el log ni enviar correos si la actualización es
+ // por cambio de clave maestra o restauración
+ if (!$isMassive && !$isRestore) {
+ $accountInfo = array('customer_name', 'account_name');
+ $this->getAccountInfoById($accountInfo);
+
+ $Log->setAction(_('Modificar Clave'));
+ $Log->addDescription(Html::strongText(_('Cliente') . ': ') . $this->_cacheParams['customer_name']);
+ $Log->addDescription(Html::strongText(_('Cuenta') . ': ') . $this->_cacheParams['account_name'] . " (" . $this->getAccountId() . ")");
+ $Log->writeLog();
+
+ Email::sendEmail($Log);
+ }
+
+ return true;
+ }
+
+ /**
+ * Obtener los datos de todas las cuentas
+ *
+ * @return array
+ * @throws SPException
+ */
+ public static function getAccountsData()
+ {
+ $query = 'SELECT account_id,'
+ . 'account_name,'
+ . 'account_categoryId,'
+ . 'account_customerId,'
+ . 'account_login,'
+ . 'account_url,'
+ . 'account_pass,'
+ . 'account_IV,'
+ . 'account_notes '
+ . 'FROM accounts';
+
+ DB::setReturnArray();
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+ throw new SPException(SPException::SP_CRITICAL, _('No se pudieron obtener los datos de las cuentas'));
+ }
+
+ return $queryRes;
+ }
+}
\ No newline at end of file
diff --git a/inc/AccountBase.class.php b/inc/AccountBase.class.php
new file mode 100644
index 00000000..9aec3adf
--- /dev/null
+++ b/inc/AccountBase.class.php
@@ -0,0 +1,578 @@
+.
+ *
+ */
+
+namespace SP;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+/**
+ * Clase abstracta para definición de métodos comunes a las cuentas
+ */
+abstract class AccountBase
+{
+ /**
+ * Tiempo de expiración de la caché de ACLde usuarios/grupos de cuentas
+ */
+ const CACHE_EXPIRE_TIME = 300;
+ /**
+ * @var int Id de la cuenta padre.
+ */
+ private $_accountParentId;
+ /**
+ * @var string Hash con los datos de la cuenta para verificación de cambios.
+ */
+ private $_accountModHash;
+ /**
+ * @var int Indica si la cuenta es un registro del hitórico.
+ */
+ private $_accountIsHistory = 0;
+ /**
+ * @var int Id de la cuenta.
+ */
+ private $_accountId;
+ /**
+ * @var int Id del usuario principal de la cuenta.
+ */
+ private $_accountUserId;
+ /**
+ * @var array Los Ids de los usuarios secundarios de la cuenta.
+ */
+ private $_accountUsersId;
+ /**
+ * @var array Id del grupo principal de la cuenta.
+ */
+ private $_accountUserGroupId;
+ /**
+ * @var array Los Ids de los grupos secundarios de la cuenta.
+ */
+ private $_accountUserGroupsId;
+ /**
+ * @var int Id del usuario que editó la cuenta.
+ */
+ private $_accountUserEditId;
+ /**
+ * @var string El nombre de la cuenta.
+ */
+ private $_accountName;
+ /**
+ * @var int Id del cliente de la cuenta.
+ */
+ private $_accountCustomerId;
+ /**
+ * @var int Id de la categoría de la cuenta.
+ */
+ private $_accountCategoryId;
+ /**
+ * @var string El nombre de usuario de la cuenta.
+ */
+ private $_accountLogin;
+ /**
+ * @var string La URL de la cuenta.
+ */
+ private $_accountUrl;
+ /**
+ * @var string La clave de la cuenta.
+ */
+ private $_accountPass;
+ /**
+ * @var string El vector de inicialización de la cuenta.
+ */
+ private $_accountIV;
+ /**
+ * @var string Las nosta de la cuenta.
+ */
+ private $_accountNotes;
+ /**
+ * @var bool Si se permite la edición por los usuarios secundarios.
+ */
+ private $_accountOtherUserEdit;
+ /**
+ * @var bool Si se permita la edición por los grupos secundarios.
+ */
+ private $_accountOtherGroupEdit;
+ /**
+ * @var array Los Ids de los grupos con acceso a la cuenta
+ */
+ private $_cacheUserGroupsId;
+ /**
+ * @var array Los Ids de los usuarios con acceso a la cuenta
+ */
+ private $_cacheUsersId;
+
+ /**
+ * Constructor
+ *
+ * @param int $id con el Id de la cuenta a obtener
+ */
+ public function __construct($id = null)
+ {
+ if (!is_null($id)) {
+ $this->setAccountId($id);
+ }
+ }
+
+ /**
+ * @return int
+ */
+ public function getAccountUserEditId()
+ {
+ return $this->_accountUserEditId;
+ }
+
+ /**
+ * @param int $accountUserEditId
+ */
+ public function setAccountUserEditId($accountUserEditId)
+ {
+ $this->_accountUserEditId = $accountUserEditId;
+ }
+
+ /**
+ * @return string
+ */
+ public function getAccountPass()
+ {
+ return $this->_accountPass;
+ }
+
+ /**
+ * @param string $accountPass
+ */
+ public function setAccountPass($accountPass)
+ {
+ $this->_accountPass = $accountPass;
+ }
+
+ /**
+ * @return string
+ */
+ public function getAccountIV()
+ {
+ return $this->_accountIV;
+ }
+
+ /**
+ * @param string $accountIV
+ */
+ public function setAccountIV($accountIV)
+ {
+ $this->_accountIV = $accountIV;
+ }
+
+ /**
+ * @return int
+ */
+ public function getAccountIsHistory()
+ {
+ return $this->_accountIsHistory;
+ }
+
+ /**
+ * @param int $accountIsHistory
+ */
+ public function setAccountIsHistory($accountIsHistory)
+ {
+ $this->_accountIsHistory = $accountIsHistory;
+ }
+
+ /**
+ * @return int
+ */
+ public function getAccountParentId()
+ {
+ return $this->_accountParentId;
+ }
+
+ /**
+ * @param int $accountParentId
+ */
+ public function setAccountParentId($accountParentId)
+ {
+ $this->_accountParentId = $accountParentId;
+ }
+
+ /**
+ * Devolver datos de la cuenta para comprobación de accesos.
+ *
+ * @param int $accountId con el id de la cuenta
+ * @return array con los datos de la cuenta
+ */
+ public function getAccountDataForACL($accountId = null)
+ {
+ $accId = (!is_null($accountId)) ? $accountId : $this->getAccountId();
+
+ return array(
+ 'id' => $accId,
+ 'user_id' => $this->getAccountUserId(),
+ 'group_id' => $this->getAccountUserGroupId(),
+ 'users_id' => $this->getUsersAccount(),
+ 'groups_id' => $this->getGroupsAccount(),
+ 'otheruser_edit' => $this->getAccountOtherUserEdit(),
+ 'othergroup_edit' => $this->getAccountOtherGroupEdit()
+ );
+ }
+
+ /**
+ * @return int|null
+ */
+ public function getAccountId()
+ {
+ return $this->_accountId;
+ }
+
+ /**
+ * @param int $accountId
+ */
+ public function setAccountId($accountId)
+ {
+ $this->_accountId = (int)$accountId;
+ }
+
+ /**
+ * @return int
+ */
+ public function getAccountUserId()
+ {
+ return $this->_accountUserId;
+ }
+
+ /**
+ * @param int $accountUserId
+ */
+ public function setAccountUserId($accountUserId)
+ {
+ $this->_accountUserId = $accountUserId;
+ }
+
+ /**
+ * @return int
+ */
+ public function getAccountUserGroupId()
+ {
+ return $this->_accountUserGroupId;
+ }
+
+ /**
+ * @param int $accountUserGroupId
+ */
+ public function setAccountUserGroupId($accountUserGroupId)
+ {
+ $this->_accountUserGroupId = $accountUserGroupId;
+ }
+
+ /**
+ * Obtiene el listado usuarios con acceso a una cuenta.
+ * Lo almacena en la cache de sesión como array de cuentas
+ *
+ * @return array Con los registros con id de cuenta como clave e id de usuario como valor
+ */
+ public function getUsersAccount()
+ {
+ $accId = $this->getAccountId();
+
+ $cacheUsers = &$_SESSION['cache']['usersId'];
+
+ if (!is_array($cacheUsers)) {
+ $cacheUsers = array($accId => array(), 'expires' => 0);
+ }
+
+ if (!isset($cacheUsers[$accId])
+ || time() > $cacheUsers['expires']
+ ) {
+ $cacheUsers[$accId] = UserUtil::getUsersForAccount($accId);
+ $cacheUsers['expires'] = time() + self::CACHE_EXPIRE_TIME;
+ }
+
+ return $cacheUsers[$accId];
+ }
+
+ /**
+ * Obtiene el listado de grupos secundarios de una cuenta.
+ * Lo almacena en la cache de sesión como array de cuentas
+ *
+ * @return array con los registros con id de cuenta como clave e id de grupo como valor
+ */
+ public function getGroupsAccount()
+ {
+ $accId = $this->getAccountId();
+ $cacheUserGroups = &$_SESSION['cache']['userGroupsId'];
+
+ if (!is_array($cacheUserGroups)) {
+ $cacheUserGroups = array($accId => array(), 'expires' => 0);
+ }
+
+ if (!isset($cacheUserGroups[$accId])
+ || time() > $cacheUserGroups['expires']
+ ) {
+ $cacheUserGroups[$accId] = Groups::getGroupsForAccount($accId);
+ $cacheUserGroups['expires'] = time() + self::CACHE_EXPIRE_TIME;
+ }
+
+ return $cacheUserGroups[$accId];
+ }
+
+ /**
+ * @return bool
+ */
+ public function getAccountOtherUserEdit()
+ {
+ return $this->_accountOtherUserEdit;
+ }
+
+ /**
+ * @param bool $accountOtherUserEdit
+ */
+ public function setAccountOtherUserEdit($accountOtherUserEdit)
+ {
+ $this->_accountOtherUserEdit = $accountOtherUserEdit;
+ }
+
+ /**
+ * @return bool
+ */
+ public function getAccountOtherGroupEdit()
+ {
+ return $this->_accountOtherGroupEdit;
+ }
+
+ /**
+ * @param bool $accountOtherGroupEdit
+ */
+ public function setAccountOtherGroupEdit($accountOtherGroupEdit)
+ {
+ $this->_accountOtherGroupEdit = $accountOtherGroupEdit;
+ }
+
+ /**
+ * Calcular el hash de los datos de una cuenta.
+ * Esta función se utiliza para verificar si los datos de un formulario han sido cambiados
+ * con respecto a los guardados
+ *
+ * @return string con el hash
+ */
+ public function calcChangesHash()
+ {
+ $groups = 0;
+ $users = 0;
+
+ if (is_array($this->getAccountUserGroupsId())) {
+ $groups = implode($this->getAccountUserGroupsId());
+ } elseif (is_array($this->_cacheUserGroupsId)) {
+ foreach ($this->_cacheUserGroupsId as $group) {
+ if (is_array($group)) {
+ // Ordenar el array para que el hash sea igual
+ sort($group, SORT_NUMERIC);
+ $groups = implode($group);
+ }
+ }
+ }
+
+ if (is_array($this->getAccountUsersId())) {
+ $users = implode($this->getAccountUsersId());
+ } elseif (is_array($this->_cacheUsersId)) {
+ foreach ($this->_cacheUsersId as $user) {
+ if (is_array($user)) {
+ // Ordenar el array para que el hash sea igual
+ sort($user, SORT_NUMERIC);
+ $users = implode($user);
+ }
+ }
+ }
+
+ if ($this->getAccountModHash()) {
+ $hashItems = $this->getAccountModHash() . (int)$users . (int)$groups;
+ //error_log("HASH MySQL: ".$hashItems);
+ } else {
+ $hashItems = $this->getAccountName() .
+ $this->getAccountCategoryId() .
+ $this->getAccountCustomerId() .
+ $this->getAccountLogin() .
+ $this->getAccountUrl() .
+ $this->getAccountNotes() .
+ $this->getAccountOtherUserEdit() .
+ $this->getAccountOtherGroupEdit() .
+ (int)$users .
+ (int)$groups;
+ //error_log("HASH PHP: ".$hashItems);
+ }
+
+ return md5($hashItems);
+ }
+
+ /**
+ * @return array
+ */
+ public function getAccountUserGroupsId()
+ {
+ return $this->_accountUserGroupsId;
+ }
+
+ /**
+ * @param array $accountUserGroupsId
+ */
+ public function setAccountUserGroupsId($accountUserGroupsId)
+ {
+ $this->_accountUserGroupsId = $accountUserGroupsId;
+ }
+
+ /**
+ * @return array
+ */
+ public function getAccountUsersId()
+ {
+ return $this->_accountUsersId;
+ }
+
+ /**
+ * @param array $accountUsersId
+ */
+ public function setAccountUsersId($accountUsersId)
+ {
+ $this->_accountUsersId = $accountUsersId;
+ }
+
+ /**
+ * @return string
+ */
+ public function getAccountModHash()
+ {
+ return $this->_accountModHash;
+ }
+
+ /**
+ * @param string $accountModHash
+ */
+ public function setAccountModHash($accountModHash)
+ {
+ $this->_accountModHash = $accountModHash;
+ }
+
+ /**
+ * @return string
+ */
+ public function getAccountName()
+ {
+ return $this->_accountName;
+ }
+
+ /**
+ * @param string $accountName
+ */
+ public function setAccountName($accountName)
+ {
+ $this->_accountName = $accountName;
+ }
+
+ /**
+ * @return int
+ */
+ public function getAccountCategoryId()
+ {
+ return $this->_accountCategoryId;
+ }
+
+ /**
+ * @param int $accountCategoryId
+ */
+ public function setAccountCategoryId($accountCategoryId)
+ {
+ $this->_accountCategoryId = $accountCategoryId;
+ }
+
+ /**
+ * @return int
+ */
+ public function getAccountCustomerId()
+ {
+ return $this->_accountCustomerId;
+ }
+
+ /**
+ * @param int $accountCustomerId
+ */
+ public function setAccountCustomerId($accountCustomerId)
+ {
+ $this->_accountCustomerId = $accountCustomerId;
+ }
+
+ /**
+ * @return string
+ */
+ public function getAccountLogin()
+ {
+ return $this->_accountLogin;
+ }
+
+ /**
+ * @param string $accountLogin
+ */
+ public function setAccountLogin($accountLogin)
+ {
+ $this->_accountLogin = $accountLogin;
+ }
+
+ /**
+ * @return string
+ */
+ public function getAccountUrl()
+ {
+ return $this->_accountUrl;
+ }
+
+ /**
+ * @param string $accountUrl
+ */
+ public function setAccountUrl($accountUrl)
+ {
+ $this->_accountUrl = $accountUrl;
+ }
+
+ /**
+ * @return string
+ */
+ public function getAccountNotes()
+ {
+ return $this->_accountNotes;
+ }
+
+ /**
+ * @param string $accountNotes
+ */
+ public function setAccountNotes($accountNotes)
+ {
+ $this->_accountNotes = $accountNotes;
+ }
+
+ /**
+ * Obtener los datos de una cuenta para mostrar la clave
+ * Esta funcion realiza la consulta a la BBDD y devuelve los datos.
+ */
+ protected abstract function getAccountPassData();
+
+ /**
+ * Obtener los datos relativos a la clave de todas las cuentas.
+ */
+ protected abstract function getAccountsPassData();
+}
\ No newline at end of file
diff --git a/inc/AccountHistory.class.php b/inc/AccountHistory.class.php
new file mode 100644
index 00000000..5992a062
--- /dev/null
+++ b/inc/AccountHistory.class.php
@@ -0,0 +1,510 @@
+.
+ *
+ */
+
+namespace SP;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+class AccountHistory extends AccountBase implements AccountInterface
+{
+ private $_isDelete = false;
+ private $_isModify = false;
+
+ /**
+ * Obtiene el listado del histórico de una cuenta.
+ *
+ * @return false|array Con los registros con id como clave y fecha - usuario como valor
+ */
+ public static function getAccountList($accountId)
+ {
+ $query = 'SELECT acchistory_id,'
+ . 'acchistory_dateEdit,'
+ . 'u1.user_login as user_edit,'
+ . 'u2.user_login as user_add,'
+ . 'acchistory_dateAdd '
+ . 'FROM accHistory '
+ . 'LEFT JOIN usrData u1 ON acchistory_userEditId = u1.user_id '
+ . 'LEFT JOIN usrData u2 ON acchistory_userId = u2.user_id '
+ . 'WHERE acchistory_accountId = :id '
+ . 'ORDER BY acchistory_id DESC';
+
+ $data['id'] = $accountId;
+
+ DB::setReturnArray();
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+ return false;
+ }
+
+ $arrHistory = array();
+
+ foreach ($queryRes as $history) {
+ // Comprobamos si la entrada en el historial es la primera (no tiene editor ni fecha de edición)
+ if ($history->acchistory_dateEdit === null || $history->acchistory_dateEdit == '0000-00-00 00:00:00') {
+ $arrHistory[$history->acchistory_id] = $history->acchistory_dateAdd . ' - ' . $history->user_add;
+ } else {
+ $arrHistory[$history->acchistory_id] = $history->acchistory_dateEdit . ' - ' . $history->user_edit;
+ }
+ }
+
+ return $arrHistory;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isIsDelete()
+ {
+ return $this->_isDelete;
+ }
+
+ /**
+ * @param boolean $isDelete
+ */
+ public function setIsDelete($isDelete)
+ {
+ $this->_isDelete = $isDelete;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isIsModify()
+ {
+ return $this->_isModify;
+ }
+
+ /**
+ * @param boolean $isModify
+ */
+ public function setIsModify($isModify)
+ {
+ $this->_isModify = $isModify;
+ }
+
+ /**
+ * Actualiza las claves de todas las cuentas en el histórico con la nueva clave maestra.
+ *
+ * @param string $currentMasterPass con la clave maestra actual
+ * @param string $newMasterPass con la nueva clave maestra
+ * @param string $newHash con el nuevo hash de la clave maestra
+ * @return bool
+ */
+ public function updateAccountsMasterPass($currentMasterPass, $newMasterPass, $newHash = null)
+ {
+ $idOk = array();
+ $errorCount = 0;
+ $demoEnabled = Util::demoIsEnabled();
+
+ $log = new Log(_('Actualizar Clave Maestra (H)'));
+ $log->addDescription(_('Inicio'));
+ $log->writeLog();
+
+ $log->resetDescription();
+
+ if (!Crypt::checkCryptModule()) {
+ $log->addDescription(_('Error en el módulo de encriptación'));
+ $log->writeLog();
+ return false;
+ }
+
+ $accountsPass = $this->getAccountsPassData();
+
+ if (!$accountsPass) {
+ $log->addDescription(_('Error al obtener las claves de las cuentas'));
+ $log->writeLog();
+
+ return false;
+ }
+
+ foreach ($accountsPass as $account) {
+ $this->setAccountId($account->acchistory_id);
+
+ // No realizar cambios si está en modo demo
+ if ($demoEnabled) {
+ $idOk[] = $account->acchistory_id;
+ continue;
+ }
+
+ if (!$this->checkAccountMPass()) {
+ $errorCount++;
+ $log->addDescription(_('La clave maestra del registro no coincide') . ' (' . $account->acchistory_id . ') ' . $account->acchistory_name);
+ continue;
+ }
+
+ if (strlen($account->acchistory_pass) === 0){
+ $log->addDescription(_('Clave de cuenta vacía') . ' (' . $account->acchistory_id . ') ' . $account->acchistory_name);
+ continue;
+ }
+
+ if (strlen($account->acchistory_IV) < 32) {
+ $log->addDescription(_('IV de encriptación incorrecto') . ' (' . $account->acchistory_id . ') ' . $account->acchistory_name);
+ }
+
+ $decryptedPass = Crypt::getDecrypt($account->acchistory_pass, $account->acchistory_IV);
+ $this->setAccountPass(Crypt::mkEncrypt($decryptedPass, $newMasterPass));
+ $this->setAccountIV(Crypt::$strInitialVector);
+
+ if ($this->getAccountPass() === false) {
+ $errorCount++;
+ $log->addDescription(_('No es posible desencriptar la clave de la cuenta') . ' (' . $account->acchistory_id . ') ' . $account->acchistory_name);
+ continue;
+ }
+
+ if (!$this->updateAccountPass($account->acchistory_id, $newHash)) {
+ $errorCount++;
+ $log->addDescription(_('Fallo al actualizar la clave del histórico') . ' (' . $account->acchistory_id . ') ' . $account->acchistory_name);
+ continue;
+ }
+
+ $idOk[] = $account->acchistory_id;
+ }
+
+ // Vaciar el array de mensaje de log
+ if (count($log->getDescription()) > 0) {
+ $log->writeLog();
+ $log->resetDescription();
+ }
+
+ if ($idOk) {
+ $log->addDescription(_('Registros actualizados') . ': ' . implode(',', $idOk));
+ $log->writeLog();
+ $log->resetDescription();
+ }
+
+ $log->addDescription(_('Fin'));
+ $log->writeLog();
+
+ return true;
+ }
+
+ /**
+ * Obtener los datos relativos a la clave de todas las cuentas del histórico.
+ *
+ * @return false|array con los datos de la clave
+ */
+ protected function getAccountsPassData()
+ {
+ $query = 'SELECT acchistory_id, acchistory_name, acchistory_pass, acchistory_IV FROM accHistory';
+
+ DB::setReturnArray();
+
+ return DB::getResults($query, __FUNCTION__);
+ }
+
+ /**
+ * Comprueba el hash de la clave maestra del registro de histórico de una cuenta.
+ *
+ * @param int $id opcional, con el Id del registro a comprobar
+ * @return bool
+ */
+ public function checkAccountMPass($id = null)
+ {
+ $query = 'SELECT acchistory_mPassHash ' .
+ 'FROM accHistory ' .
+ 'WHERE acchistory_id = :id ' .
+ 'AND acchistory_mPassHash = :mPassHash';
+
+ $data['id'] = (is_null($id)) ? $this->getAccountId() : $id;
+ $data['mPassHash'] = Config::getConfigDbValue('masterPwd');
+
+ return (DB::getResults($query, __FUNCTION__, $data) !== false);
+ }
+
+ /**
+ * Obtener los datos de una cuenta para mostrar la clave
+ * Esta funcion realiza la consulta a la BBDD y devuelve los datos.
+ *
+ * @return object|false
+ */
+ public function getAccountPassData()
+ {
+ $query = 'SELECT acchistory_name AS name,'
+ . 'acchistory_userId AS userId,'
+ . 'acchistory_userGroupId AS groupId,'
+ . 'acchistory_login AS login,'
+ . 'acchistory_pass AS pass,'
+ . 'acchistory_IV AS iv '
+ . 'FROM accHistory '
+ . 'WHERE acchistory_id = :id LIMIT 1';
+
+ $data['id'] = $this->getAccountId();
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+ return false;
+ }
+
+ $this->setAccountUserId($queryRes->userId);
+ $this->setAccountUserGroupId($queryRes->groupId);
+ $this->setAccountPass($queryRes->pass);
+ $this->setAccountIV($queryRes->iv);
+
+ return $queryRes;
+ }
+
+ /**
+ * Actualiza la clave del histórico de una cuenta en la BBDD.
+ *
+ * @param int $id con el id del registro a actualizar
+ * @param string $newHash con el hash de la clave maestra
+ * @return bool
+ */
+ public function updateAccountPass($id, $newHash)
+ {
+ $query = 'UPDATE accHistory SET '
+ . 'acchistory_pass = :accountPass,'
+ . 'acchistory_IV = :accountIV,'
+ . 'acchistory_mPassHash = :newHash '
+ . 'WHERE acchistory_id = :id';
+
+ $data['accountPass'] = $this->getAccountPass();
+ $data['accountIV'] = $this->getAccountIV();
+ $data['newHash'] = $newHash;
+ $data['id'] = $id;
+
+ return DB::getQuery($query, __FUNCTION__, $data);
+ }
+
+ /**
+ * Obtener los datos del histórico de una cuenta.
+ * Esta funcion realiza la consulta a la BBDD y guarda los datos del histórico
+ * en las variables de la clase.
+ *
+ * @return object
+ * @throws SPException
+ */
+ public function getAccountData()
+ {
+ $query = 'SELECT acchistory_accountId as account_id,'
+ . 'acchistory_customerId as account_customerId,'
+ . 'acchistory_categoryId as account_categoryId,'
+ . 'acchistory_name as account_name,'
+ . 'acchistory_login as account_login,'
+ . 'acchistory_url as account_url,'
+ . 'acchistory_pass as account_pass,'
+ . 'acchistory_IV as account_IV,'
+ . 'acchistory_notes as account_notes,'
+ . 'acchistory_countView as account_countView,'
+ . 'acchistory_countDecrypt as account_countDecrypt,'
+ . 'acchistory_dateAdd as account_dateAdd,'
+ . 'acchistory_dateEdit as account_dateEdit,'
+ . 'acchistory_userId as account_userId,'
+ . 'acchistory_userGroupId as account_userGroupId,'
+ . 'acchistory_userEditId as account_userEditId,'
+ . 'acchistory_isModify,'
+ . 'acchistory_isDeleted,'
+ . 'acchistory_otherUserEdit + 0 AS account_otherUserEdit,'
+ . 'acchistory_otherGroupEdit + 0 AS account_otherGroupEdit,'
+ . 'u1.user_name,'
+ . 'u1.user_login,'
+ . 'usergroup_name,'
+ . 'u2.user_name as user_editName,'
+ . 'u2.user_login as user_editLogin,'
+ . 'category_name, customer_name '
+ . 'FROM accHistory '
+ . 'LEFT JOIN categories ON acchistory_categoryId = category_id '
+ . 'LEFT JOIN usrGroups ON acchistory_userGroupId = usergroup_id '
+ . 'LEFT JOIN usrData u1 ON acchistory_userId = u1.user_id '
+ . 'LEFT JOIN usrData u2 ON acchistory_userEditId = u2.user_id '
+ . 'LEFT JOIN customers ON acchistory_customerId = customer_id '
+ . 'WHERE acchistory_id = :id LIMIT 1';
+
+ $data['id'] = $this->getAccountId();
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+ throw new SPException(SPException::SP_CRITICAL, _('No se pudieron obtener los datos de la cuenta'));
+ }
+
+ $this->setAccountUserId($queryRes->account_userId);
+ $this->setAccountUserGroupId($queryRes->account_userGroupId);
+ $this->setAccountOtherUserEdit($queryRes->account_otherUserEdit);
+ $this->setAccountOtherGroupEdit($queryRes->account_otherGroupEdit);
+
+ return $queryRes;
+ }
+
+ /**
+ * Crear una cuenta en el historial
+ *
+ * @return bool
+ */
+ public function createAccount()
+ {
+ // FIXME: continuar
+
+ $query = 'INSERT INTO accHistory SET '
+ . 'acchistory_accountId = :account_id,'
+ . 'acchistory_customerId = :accountCustomerId,'
+ . 'acchistory_categoryId = :accountCategoryId,'
+ . 'acchistory_name = :accountName,'
+ . 'acchistory_login = :accountLogin,'
+ . 'acchistory_url = :accountUrl,'
+ . 'acchistory_pass = :accountPass,'
+ . 'acchistory_IV = :accountIV,'
+ . 'acchistory_notes = :accountNotes,'
+ . 'acchistory_dateAdd = :accountDateAdd,'
+ . 'acchistory_dateEdit = :accountDateEdit,'
+ . 'acchistory_countView = :accountCountView,'
+ . 'acchistory_countDecrypt = :accountCountDecrypt,'
+ . 'acchistory_userId = :accountUserId,'
+ . 'acchistory_userGroupId = :accountUserGroupId,'
+ . 'acchistory_otherUserEdit = :accountOtherUserEdit,'
+ . 'acchistory_otherGroupEdit = :accountOtherGroupEdit,'
+ . 'acchistory_isModify = :isModify,'
+ . 'acchistory_isDeleted = :isDelete,'
+ . 'acchistory_mPassHash = :masterPwd';
+
+ $data['account_id'] = $this->getAccountId();
+ $data['accountCustomerId'] = $this->getAccountCustomerId();
+ $data['accountCategoryId'] = $this->getAccountCategoryId();
+ $data['accountName'] = $this->getAccountName();
+ $data['accountLogin'] = $this->getAccountLogin();
+ $data['accountUrl'] = $this->getAccountUrl();
+ $data['accountPass'] = $this->getAccountPass();
+ $data['accountIV'] = $this->getAccountIV();
+ $data['accountNotes'] = $this->getAccountNotes();
+ $data['accountUserId'] = $this->getAccountUserId();
+ $data['accountUserGroupId'] = $this->getAccountUserGroupId();
+ $data['accountOtherUserEdit'] = $this->getAccountOtherUserEdit();
+ $data['accountOtherGroupEdit'] = $this->getAccountOtherGroupEdit();
+ $data['isModify'] = $this->isIsModify();
+ $data['isDelete'] = $this->isIsDelete();
+ $data['masterPwd'] = Config::getConfigDbValue('masterPwd');
+
+ if (DB::getQuery($query, __FUNCTION__, $data) === false) {
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Eliminar una cuenta del historial
+ *
+ * @return bool
+ */
+ public function deleteAccount()
+ {
+ $query = 'DELETE FROM accHistory WHERE acchistory_id = :id LIMIT 1';
+
+ $data['id'] = $this->getAccountId();
+
+ if (DB::getQuery($query, __FUNCTION__, $data) === false) {
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Crear un nuevo registro de histório de cuenta en la BBDD.
+ *
+ * @param int $id el id de la cuenta primaria
+ * @param bool $isDelete indica que la cuenta es eliminada
+ * @return bool
+ */
+ public static function addHistory($id, $isDelete = false)
+ {
+ $query = 'INSERT INTO accHistory '
+ . '(acchistory_accountId,'
+ . 'acchistory_categoryId,'
+ . 'acchistory_customerId,'
+ . 'acchistory_name,'
+ . 'acchistory_login,'
+ . 'acchistory_url,'
+ . 'acchistory_pass,'
+ . 'acchistory_IV,'
+ . 'acchistory_notes,'
+ . 'acchistory_countView,'
+ . 'acchistory_countDecrypt,'
+ . 'acchistory_dateAdd,'
+ . 'acchistory_dateEdit,'
+ . 'acchistory_userId,'
+ . 'acchistory_userGroupId,'
+ . 'acchistory_userEditId,'
+ . 'acchistory_otherUserEdit,'
+ . 'acchistory_otherGroupEdit,'
+ . 'acchistory_isModify,'
+ . 'acchistory_isDeleted,'
+ . 'acchistory_mPassHash) '
+ . 'SELECT account_id,'
+ . 'account_categoryId,'
+ . 'account_customerId,'
+ . 'account_name,'
+ . 'account_login,'
+ . 'account_url,'
+ . 'account_pass,'
+ . 'account_IV,'
+ . 'account_notes,'
+ . 'account_countView,'
+ . 'account_countDecrypt,'
+ . 'account_dateAdd,'
+ . 'account_dateEdit,'
+ . 'account_userId,'
+ . 'account_userGroupId,'
+ . 'account_userEditId,'
+ . 'account_otherUserEdit,'
+ . 'account_otherGroupEdit,'
+ . ':isModify,'
+ . ':isDelete,'
+ . ':masterPwd '
+ . 'FROM accounts WHERE account_id = :account_id';
+
+ $data['account_id'] = $id;
+ $data['isModify'] = ($isDelete === false) ? 1 : 0;
+ $data['isDelete'] = ($isDelete === false) ? 0 : 1;
+ $data['masterPwd'] = Config::getConfigDbValue('masterPwd');
+
+ return DB::getQuery($query, __FUNCTION__, $data);
+ }
+
+ /**
+ * Obtener el Id padre de una cuenta en el histórico.
+ *
+ * @param $historyId int El id de la cuenta en el histórico
+ * @return int El id de la cuenta padre
+ * @throws SPException
+ */
+ public static function getAccountIdFromId($historyId)
+ {
+ $query = 'SELECT acchistory_accountId FROM accHistory WHERE acchistory_id = :id LIMIT 1';
+
+ $data['id'] = $historyId;
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+ throw new SPException(SPException::SP_CRITICAL, _('No se pudieron obtener los datos de la cuenta'), 0);
+ }
+
+ return $queryRes->acchistory_accountId;
+ }
+}
\ No newline at end of file
diff --git a/inc/AccountInterface.class.php b/inc/AccountInterface.class.php
new file mode 100644
index 00000000..5877a215
--- /dev/null
+++ b/inc/AccountInterface.class.php
@@ -0,0 +1,42 @@
+.
+ *
+ */
+
+namespace SP;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+/**
+ * Interface AccountInterface con la definición de métodos comunes a las cuentas
+ */
+interface AccountInterface
+{
+ public function getAccountData();
+
+ public function createAccount();
+
+ public function deleteAccount();
+
+ public function updateAccountsMasterPass($currentMasterPass, $newMasterPass, $newHash = null);
+}
\ No newline at end of file
diff --git a/inc/AccountSearch.class.php b/inc/AccountSearch.class.php
new file mode 100644
index 00000000..07cd3101
--- /dev/null
+++ b/inc/AccountSearch.class.php
@@ -0,0 +1,474 @@
+.
+ *
+ */
+
+namespace SP;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+/**
+ * Class AccountSearch para la gestión de búsquedas de cuentas
+ */
+class AccountSearch
+{
+ /**
+ * Constantes de ordenación
+ */
+ const SORT_NAME = 1;
+ const SORT_CATEGORY = 2;
+ const SORT_LOGIN = 3;
+ const SORT_URL = 4;
+ const SORT_CUSTOMER = 5;
+
+ /**
+ * @var int El número de registros de la última consulta
+ */
+ public static $queryNumRows;
+
+ /**
+ * @var bool
+ */
+ private $_globalSearch = false;
+ /**
+ * @var string
+ */
+ private $_txtSearch = '';
+ /**
+ * @var int
+ */
+ private $_customerId = 0;
+ /**
+ * @var int
+ */
+ private $_categoryId = 0;
+ /**
+ * @var int
+ */
+ private $_sortOrder = 0;
+ /**
+ * @var int
+ */
+ private $_sortKey = 0;
+ /**
+ * @var int
+ */
+ private $_limitStart = 0;
+ /**
+ * @var int
+ */
+ private $_limitCount = 12;
+
+ /**
+ * Constructor
+ */
+ function __construct()
+ {
+ $this->setLimitCount(Config::getValue('account_count'));
+ }
+
+ /**
+ * @return int
+ */
+ public function getGlobalSearch()
+ {
+ return $this->_globalSearch;
+ }
+
+ /**
+ * @param int $globalSearch
+ */
+ public function setGlobalSearch($globalSearch)
+ {
+ $this->_globalSearch = $globalSearch;
+ }
+
+ /**
+ * @return string
+ */
+ public function getTxtSearch()
+ {
+ return $this->_txtSearch;
+ }
+
+ /**
+ * @param string $txtSearch
+ */
+ public function setTxtSearch($txtSearch)
+ {
+ $this->_txtSearch = $txtSearch;
+ }
+
+ /**
+ * @return int
+ */
+ public function getCustomerId()
+ {
+ return $this->_customerId;
+ }
+
+ /**
+ * @param int $customerId
+ */
+ public function setCustomerId($customerId)
+ {
+ $this->_customerId = $customerId;
+ }
+
+ /**
+ * @return int
+ */
+ public function getCategoryId()
+ {
+ return $this->_categoryId;
+ }
+
+ /**
+ * @param int $categoryId
+ */
+ public function setCategoryId($categoryId)
+ {
+ $this->_categoryId = $categoryId;
+ }
+
+ /**
+ * @return int
+ */
+ public function getSortOrder()
+ {
+ return $this->_sortOrder;
+ }
+
+ /**
+ * @param int $sortOrder
+ */
+ public function setSortOrder($sortOrder)
+ {
+ $this->_sortOrder = $sortOrder;
+ }
+
+ /**
+ * @return int
+ */
+ public function getSortKey()
+ {
+ return $this->_sortKey;
+ }
+
+ /**
+ * @param int $sortKey
+ */
+ public function setSortKey($sortKey)
+ {
+ $this->_sortKey = $sortKey;
+ }
+
+ /**
+ * @return int
+ */
+ public function getLimitStart()
+ {
+ return $this->_limitStart;
+ }
+
+ /**
+ * @param int $limitStart
+ */
+ public function setLimitStart($limitStart)
+ {
+ $this->_limitStart = $limitStart;
+ }
+
+ /**
+ * @return int
+ */
+ public function getLimitCount()
+ {
+ return $this->_limitCount;
+ }
+
+ /**
+ * @param int $limitCount
+ */
+ public function setLimitCount($limitCount)
+ {
+ $this->_limitCount = $limitCount;
+ }
+
+ /**
+ * Obtener las cuentas de una búsqueda.
+ *
+ * @return bool Resultado de la consulta
+ */
+ public function getAccounts()
+ {
+ $isAdmin = (Session::getUserIsAdminApp() || Session::getUserIsAdminAcc());
+
+ $arrFilterCommon = array();
+ $arrFilterSelect = array();
+ $arrFilterUser = array();
+ $arrQueryWhere = array();
+
+ switch ($this->_sortKey) {
+ case self::SORT_NAME:
+ $orderKey = 'account_name';
+ break;
+ case self::SORT_CATEGORY:
+ $orderKey = 'category_name';
+ break;
+ case self::SORT_LOGIN:
+ $orderKey = 'account_login';
+ break;
+ case self::SORT_URL:
+ $orderKey = 'account_url';
+ break;
+ case self::SORT_CUSTOMER:
+ $orderKey = 'customer_name';
+ break;
+ default :
+ $orderKey = 'customer_name, account_name';
+ break;
+ }
+
+ if ($this->_txtSearch) {
+ // Analizar la cadena de búsqueda por etiquetas especiales
+ $stringFilters = $this->analyzeQueryString();
+
+ if ($stringFilters !== false) {
+ $i = 0;
+
+ foreach ($stringFilters as $column => $value) {
+ $parameter = 'P_' . $column . $i;
+ $rel = '=';
+
+ if (preg_match('/name/i', $column)) {
+ $rel = 'LIKE';
+ $value = '%' . $value . '%';
+ }
+
+ $arrFilterCommon[] = $column . ' ' . $rel . ' :' . $parameter;
+ $data[$parameter] = $value;
+ $i++;
+ }
+ } else {
+
+ $arrFilterCommon[] = 'account_name LIKE :name';
+ $arrFilterCommon[] = 'account_login LIKE :login';
+ $arrFilterCommon[] = 'account_url LIKE :url';
+ $arrFilterCommon[] = 'account_notes LIKE :notes';
+
+ $data['name'] = '%' . $this->_txtSearch . '%';
+ $data['login'] = '%' . $this->_txtSearch . '%';
+ $data['url'] = '%' . $this->_txtSearch . '%';
+ $data['notes'] = '%' . $this->_txtSearch . '%';
+ }
+ }
+
+ if ($this->_categoryId !== 0) {
+ $arrFilterSelect[] = 'category_id = :categoryId';
+
+ $data['categoryId'] = $this->_categoryId;
+ }
+
+ if ($this->_customerId !== 0) {
+ $arrFilterSelect[] = 'account_customerId = :customerId';
+
+ $data['customerId'] = $this->_customerId;
+ }
+
+ if (count($arrFilterCommon) > 0) {
+ $arrQueryWhere[] = '(' . implode(' OR ', $arrFilterCommon) . ')';
+ }
+
+ if (count($arrFilterSelect) > 0) {
+ $arrQueryWhere[] = '(' . implode(' AND ', $arrFilterSelect) . ')';
+ }
+
+ if (!$isAdmin && !$this->_globalSearch) {
+ $subQueryGroupsA = '(SELECT user_groupId FROM usrData WHERE user_id = :userIduA UNION ALL SELECT usertogroup_groupId FROM usrToGroups WHERE usertogroup_userId = :userIdgA)';
+ $subQueryGroupsB = '(SELECT user_groupId FROM usrData WHERE user_id = :userIduB UNION ALL SELECT usertogroup_groupId FROM usrToGroups WHERE usertogroup_userId = :userIdgB)';
+
+ $arrFilterUser[] = 'account_userGroupId IN ' . $subQueryGroupsA;
+ $arrFilterUser[] = 'accgroup_groupId IN ' . $subQueryGroupsB;
+ $arrFilterUser[] = 'account_userId = :userId';
+ $arrFilterUser[] = 'accuser_userId = :accuser_userId';
+
+ // Usuario/Grupo principal de la cuenta
+ $data['userId'] = Session::getUserId();
+ $data['accuser_userId'] = Session::getUserId();
+
+ $data['userIduA'] = Session::getUserId();
+ $data['userIduB'] = Session::getUserId();
+ $data['userIdgA'] = Session::getUserId();
+ $data['userIdgB'] = Session::getUserId();
+
+ // Usuario/Grupo secundario de la cuenta
+// $data['userGroupId'] = Session::getUserGroupId();
+// $data['accgroup_groupId'] = Session::getUserGroupId();
+
+ $arrQueryWhere[] = '(' . implode(' OR ', $arrFilterUser) . ')';
+ }
+
+ $orderDir = ($this->_sortOrder === 0) ? 'ASC' : 'DESC';
+ $queryOrder = 'ORDER BY ' . $orderKey . ' ' . $orderDir;
+
+ if ($this->_limitCount != 99) {
+ $queryLimit = 'LIMIT :limitStart,:limitCount';
+
+ $data['limitStart'] = $this->_limitStart;
+ $data['limitCount'] = $this->_limitCount;
+ }
+
+ if (count($arrQueryWhere) === 1) {
+ $queryWhere = ' WHERE ' . implode($arrQueryWhere);
+ } elseif (count($arrQueryWhere) > 1) {
+ $queryWhere = ' WHERE ' . implode(' AND ', $arrQueryWhere);
+ } else {
+ $queryWhere = '';
+ }
+
+ $query = 'SELECT DISTINCT ' .
+ 'account_id,' .
+ 'account_customerId,' .
+ 'category_name,' .
+ 'account_name,' .
+ 'account_login,' .
+ 'account_url,' .
+ 'account_notes,' .
+ 'account_userId,' .
+ 'account_userGroupId,' .
+ 'BIN(account_otherUserEdit) AS account_otherUserEdit,' .
+ 'BIN(account_otherGroupEdit) AS account_otherGroupEdit,' .
+ 'usergroup_name,' .
+ 'customer_name,' .
+ 'count(accfile_id) as num_files ' .
+ 'FROM accounts ' .
+ 'LEFT JOIN accFiles ON account_id = accfile_accountId ' .
+ 'LEFT JOIN categories ON account_categoryId = category_id ' .
+ 'LEFT JOIN usrGroups ug ON account_userGroupId = usergroup_id ' .
+ 'LEFT JOIN customers ON customer_id = account_customerId ' .
+ 'LEFT JOIN accUsers ON accuser_accountId = account_id ' .
+ 'LEFT JOIN accGroups ON accgroup_accountId = account_id ' .
+ $queryWhere . ' ' .
+ 'GROUP BY account_id ' .
+ $queryOrder . ' ' .
+ $queryLimit;
+
+// print_r($query);
+// error_log($query);
+
+ // Obtener el número total de cuentas visibles por el usuario
+ DB::setFullRowCount();
+
+ // Obtener los resultados siempre en array de objetos
+ DB::setReturnArray();
+
+ // Consulta de la búsqueda de cuentas
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+// print_r($query);
+// var_dump($data);
+ return false;
+ }
+
+ // Obtenemos el número de registros totales de la consulta sin contar el LIMIT
+ self::$queryNumRows = DB::$lastNumRows;
+
+ // Establecer el filtro de búsqueda en la sesión como un objeto
+ Session::setSearchFilters($this);
+
+ return $queryRes;
+ }
+
+ /**
+ * Analizar la cadena de consulta por eqituetas especiales y devolver un array
+ * con las columnas y los valores a buscar.
+ *
+ * @return array|bool
+ */
+ private function analyzeQueryString()
+ {
+ preg_match('/:(user|group|file)\s(.*)/i', $this->_txtSearch, $filters);
+
+ if (!is_array($filters) || count($filters) === 0) {
+ return false;
+ }
+
+ switch ($filters[1]) {
+ case 'user':
+ return array(
+ 'account_userId' => UserUtil::getUserIdByLogin(Html::sanitize($filters[2])),
+ 'accuser_userId' => UserUtil::getUserIdByLogin(Html::sanitize($filters[2]))
+ );
+ break;
+ case 'group':
+ return array(
+ 'account_userGroupId' => Groups::getGroupIdByName(Html::sanitize($filters[2])),
+ 'accgroup_groupId' => Groups::getGroupIdByName(Html::sanitize($filters[2]))
+ );
+ break;
+ case 'file':
+ return array(
+ 'accfile_name' => Html::sanitize($filters[2])
+ );
+ break;
+ default:
+ return false;
+ }
+ }
+
+ /**
+ * Obtiene el número de cuentas que un usuario puede ver.
+ *
+ * @return false|int con el número de registros
+ */
+ public function getAccountMax()
+ {
+ $data = null;
+
+ if (!Session::getUserIsAdminApp() && !Session::getUserIsAdminAcc()) {
+ $query = 'SELECT COUNT(DISTINCT account_id) as numacc '
+ . 'FROM accounts '
+ . 'LEFT JOIN accGroups ON account_id = accgroup_accountId '
+ . 'WHERE account_userGroupId = :userGroupId '
+ . 'OR account_userId = :userId '
+ . 'OR accgroup_groupId = :groupId';
+
+ $data['userGroupId'] = Session::getUserGroupId();
+ $data['groupId'] = Session::getUserGroupId();
+ $data['userId'] = Session::getUserId();
+
+ } else {
+ $query = "SELECT COUNT(*) as numacc FROM accounts";
+ }
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+ return false;
+ }
+
+ return $queryRes->numacc;
+ }
+}
\ No newline at end of file
diff --git a/inc/Acl.class.php b/inc/Acl.class.php
new file mode 100644
index 00000000..80739722
--- /dev/null
+++ b/inc/Acl.class.php
@@ -0,0 +1,217 @@
+.
+ *
+ */
+
+namespace SP;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+/**
+ * Esta clase es la encargada de calcular las access lists de acceso a usuarios.
+ */
+class Acl implements Controller\ActionsInterface
+{
+ /**
+ * Comprobar los permisos de acceso del usuario a los módulos de la aplicación.
+ * Esta función comprueba los permisos del usuario para realizar una acción.
+ * Si los permisos ya han sido obtenidos desde la BBDD, se utiliza el objeto creado
+ * en la variable de sesión.
+ *
+ * @param string $action con el nombre de la acción
+ * @param int $userId opcional, con el Id del usuario
+ * @return bool
+ */
+ public static function checkUserAccess($action, $userId = 0)
+ {
+ // Comprobamos si la cache de permisos está inicializada
+ if (!is_object(Session::getUserProfile())) {
+// error_log('ACL_CACHE_MISS');
+ return false;
+ }
+
+ $curUserIsAdminApp = Session::getUserIsAdminApp();
+ $curUserIsAdminAcc = Session::getUserIsAdminAcc();
+ $curUserProfile = Session::getUserProfile();
+ $curUserId = Session::getUserId();
+
+ switch ($action) {
+ case self::ACTION_ACC_VIEW:
+ return ($curUserIsAdminApp || $curUserIsAdminAcc || $curUserProfile->isAccView() || $curUserProfile->isAccEdit());
+ case self::ACTION_ACC_VIEW_PASS:
+ return ($curUserIsAdminApp || $curUserIsAdminAcc || $curUserProfile->isAccViewPass());
+ case self::ACTION_ACC_VIEW_HISTORY:
+ return ($curUserIsAdminApp || $curUserIsAdminAcc || $curUserProfile->isAccViewHistory());
+ case self::ACTION_ACC_EDIT:
+ return ($curUserIsAdminApp || $curUserIsAdminAcc || $curUserProfile->isAccEdit());
+ case self::ACTION_ACC_EDIT_PASS:
+ return ($curUserIsAdminApp || $curUserIsAdminAcc || $curUserProfile->isAccEditPass());
+ case self::ACTION_ACC_NEW:
+ return ($curUserIsAdminApp || $curUserIsAdminAcc || $curUserProfile->isAccAdd());
+ case self::ACTION_ACC_COPY:
+ return ($curUserIsAdminApp || $curUserIsAdminAcc || ($curUserProfile->isAccAdd() && $curUserProfile->isAccView()));
+ case self::ACTION_ACC_DELETE:
+ return ($curUserIsAdminApp || $curUserIsAdminAcc || $curUserProfile->isAccDelete());
+ case self::ACTION_ACC_FILES:
+ return ($curUserIsAdminApp || $curUserIsAdminAcc || $curUserProfile->isAccFiles());
+ case self::ACTION_MGM:
+ return ($curUserIsAdminApp || $curUserProfile->isMgmCategories() || $curUserProfile->isMgmCustomers());
+ case self::ACTION_CFG:
+ return ($curUserIsAdminApp || $curUserProfile->isConfigGeneral() || $curUserProfile->isConfigEncryption() || $curUserProfile->isConfigBackup() || $curUserProfile->isConfigImport());
+ case self::ACTION_CFG_GENERAL:
+ return ($curUserIsAdminApp || $curUserProfile->isConfigGeneral());
+ case self::ACTION_CFG_IMPORT:
+ return ($curUserIsAdminApp || $curUserProfile->isConfigImport());
+ case self::ACTION_MGM_CATEGORIES:
+ return ($curUserIsAdminApp || $curUserProfile->isMgmCategories());
+ case self::ACTION_MGM_CUSTOMERS:
+ return ($curUserIsAdminApp || $curUserProfile->isMgmCustomers());
+ case self::ACTION_MGM_CUSTOMFIELDS:
+ return ($curUserIsAdminApp || $curUserProfile->isMgmCustomFields());
+ case self::ACTION_CFG_ENCRYPTION:
+ return ($curUserIsAdminApp || $curUserProfile->isConfigEncryption());
+ case self::ACTION_CFG_BACKUP:
+ return ($curUserIsAdminApp || $curUserProfile->isConfigBackup());
+ case self::ACTION_USR:
+ return ($curUserIsAdminApp || $curUserProfile->isMgmUsers() || $curUserProfile->isMgmGroups() || $curUserProfile->isMgmProfiles());
+ case self::ACTION_USR_USERS:
+ return ($curUserIsAdminApp || $curUserProfile->isMgmUsers());
+ case self::ACTION_USR_USERS_EDITPASS:
+ return ($userId == $curUserId || $curUserIsAdminApp || $curUserProfile->isMgmUsers());
+ case self::ACTION_USR_GROUPS:
+ return ($curUserIsAdminApp || $curUserProfile->isMgmGroups());
+ case self::ACTION_USR_PROFILES:
+ return ($curUserIsAdminApp || $curUserProfile->isMgmProfiles());
+ case self::ACTION_MGM_APITOKENS:
+ return ($curUserIsAdminApp || $curUserProfile->isMgmApiTokens());
+ case self::ACTION_EVL:
+ return ($curUserIsAdminApp || $curUserProfile->isEvl());
+ }
+
+ Log::writeNewLog(__FUNCTION__, sprintf('%s \'%s\'', _('Denegado acceso a'), self::getActionName($action)));
+
+ return false;
+ }
+
+ /**
+ * Obtener el nombre de la acción indicada
+ *
+ * @param int $action El id de la acción
+ * @return string
+ */
+ public static function getActionName($action, $shortName = false)
+ {
+ $actionName = array(
+ self::ACTION_ACC_SEARCH => array('acc_search', _('Buscar Cuentas')),
+ self::ACTION_ACC_VIEW => array('acc_view', _('Ver Cuenta')),
+ self::ACTION_ACC_COPY => array('acc_copy', _('Copiar Cuenta')),
+ self::ACTION_ACC_NEW => array('acc_new', _('Nueva Cuenta')),
+ self::ACTION_ACC_EDIT => array('acc_edit', _('Editar Cuenta')),
+ self::ACTION_ACC_EDIT_PASS => array('acc_editpass', _('Editar Clave de Cuenta')),
+ self::ACTION_ACC_VIEW_HISTORY => array('acc_viewhist', _('Ver Historial')),
+ self::ACTION_ACC_VIEW_PASS => array('acc_viewpass', _('Ver Clave')),
+ self::ACTION_ACC_DELETE => array('acc_delete', _('Eliminar Cuenta')),
+ self::ACTION_ACC_FILES => array('acc_files', _('Archivos')),
+ self::ACTION_ACC_REQUEST => array('acc_request', _('Peticiones')),
+ self::ACTION_MGM => array('mgm', _('Gestión Aplicación')),
+ self::ACTION_MGM_CATEGORIES => array('mgm_categories', _('Gestión Categorías')),
+ self::ACTION_MGM_CUSTOMERS => array('mgm_customers', _('Gestión Clientes')),
+ self::ACTION_MGM_CUSTOMFIELDS => array('mgm_customfields', _('Gestión Campos Personalizados')),
+ self::ACTION_MGM_APITOKENS => array('mgm_apitokens', _('Gestión Autorizaciones API')),
+ self::ACTION_USR => array('usr', _('Gestión Usuarios')),
+ self::ACTION_USR_USERS => array('usr_users', _('Gestión Usuarios')),
+ self::ACTION_USR_GROUPS => array('usr_groups', _('Gestión Grupos')),
+ self::ACTION_USR_PROFILES => array('usr_profiles', _('Gestión Perfiles')),
+ self::ACTION_CFG => array('cfg', _('Configuración')),
+ self::ACTION_CFG_GENERAL => array('cfg_general', _('Configuración General')),
+ self::ACTION_CFG_ENCRYPTION => array('cfg_encryption', _('Encriptación')),
+ self::ACTION_CFG_BACKUP => array('cfg_backup', _('Copia de Seguridad')),
+ self::ACTION_CFG_EXPORT => array('cfg_export', _('Exportar')),
+ self::ACTION_CFG_IMPORT => array('cfg_import', _('Importar')),
+ self::ACTION_EVL => 'evl'
+ );
+
+ if (!isset($actionName[$action])) {
+ return 'action';
+ }
+
+ if ($shortName){
+ return $actionName[$action][0];
+ }
+
+ return $actionName[$action][1];
+ }
+
+ /**
+ * Comprueba los permisos de acceso a una cuenta.
+ *
+ * @param string $module con la acción realizada
+ * @param array $accountData con los datos de la cuenta a verificar
+ * @return bool
+ */
+ public static function checkAccountAccess($module, $accountData)
+ {
+ $userGroupId = Session::getUserGroupId();
+ $userId = Session::getUserId();
+ $userIsAdminApp = Session::getUserIsAdminApp();
+ $userIsAdminAcc = Session::getUserIsAdminAcc();
+ $userToGroups = false;
+
+ foreach($accountData['groups_id'] as $groupId){
+ $users = Groups::getUsersForGroup($groupId);
+
+ if ($userGroupId === $groupId || in_array($userId, $users)){
+ $userToGroups = true;
+ }
+ }
+
+ $okView = ($userId == $accountData['user_id']
+ || $userGroupId == $accountData['group_id']
+ || in_array($userId, $accountData['users_id'])
+ || $userToGroups
+ || $userIsAdminApp
+ || $userIsAdminAcc);
+
+ $okEdit = ($userId == $accountData['user_id']
+ || $userGroupId == $accountData['group_id']
+ || (in_array($userId, $accountData['users_id']) && $accountData['otheruser_edit'])
+ || ($userToGroups && $accountData['othergroup_edit'])
+ || $userIsAdminApp
+ || $userIsAdminAcc);
+
+ switch ($module) {
+ case self::ACTION_ACC_VIEW:
+ case self::ACTION_ACC_VIEW_PASS:
+ case self::ACTION_ACC_VIEW_HISTORY:
+ case self::ACTION_ACC_COPY:
+ return $okView;
+ case self::ACTION_ACC_EDIT:
+ case self::ACTION_ACC_DELETE:
+ case self::ACTION_ACC_EDIT_PASS:
+ return $okEdit;
+ }
+
+ return false;
+ }
+}
\ No newline at end of file
diff --git a/inc/ActionLog.class.php b/inc/ActionLog.class.php
new file mode 100644
index 00000000..f0cb2629
--- /dev/null
+++ b/inc/ActionLog.class.php
@@ -0,0 +1,159 @@
+.
+ *
+ */
+
+namespace SP;
+
+
+/**
+ * Clase abstracta ActionLog para la gestión de mensajes de eventos
+ *
+ * @package SP
+ */
+abstract class ActionLog
+{
+ /**
+ * Constante de nueva línea para descriciones
+ */
+ const NEWLINE_TXT = ';;';
+
+ /**
+ * Constante de nueva línea para descriciones en formato HTML
+ */
+ const NEWLINE_HTML = ' ';
+
+ /**
+ * Acción realizada
+ *
+ * @var string
+ */
+ protected $_action = __CLASS__;
+ /**
+ * Detalles de la acción
+ *
+ * @var array
+ */
+ protected $_description = null;
+ /**
+ * Formato de nueva línea en HTML
+ *
+ * @var bool
+ */
+ protected $_newLineHtml = false;
+
+ /**
+ * Contructor
+ *
+ * @param $action string La acción realizada
+ * @param $description string La descripción de la acción realizada
+ */
+ function __construct($action = null, $description = null)
+ {
+ if (!is_null($action)) {
+ $this->setAction($action);
+ }
+
+ if (!is_null($description)) {
+ $this->addDescription($description);
+ }
+ }
+
+ /**
+ * Devuelve la acción realizada
+ *
+ * @return string
+ */
+ public function getAction()
+ {
+ return $this->_action;
+ }
+
+ /**
+ * Establece la acción realizada
+ *
+ * @param string $action
+ */
+ public function setAction($action)
+ {
+ $this->_action = $this->formatString($action);
+ }
+
+ /**
+ * Devuelve la descripción de la acción realizada
+ *
+ * @return array
+ */
+ public function getDescription()
+ {
+ if(is_null($this->_description)){
+ return '';
+ }
+
+ if (count($this->_description) > 1){
+ $newline = ($this->_newLineHtml === false) ? self::NEWLINE_TXT : self::NEWLINE_HTML;
+
+ return implode($newline, $this->_description);
+ }
+
+ return $this->_description[0];
+ }
+
+ /**
+ * Establece la descripción de la acción realizada
+ *
+ * @param string $description
+ */
+ public function addDescription($description = '')
+ {
+ $this->_description[] = $this->formatString($description);
+ }
+
+ /**
+ * Formatear una cadena para guardarla en el registro
+ *
+ * @param $string string La cadena a formatear
+ * @return string
+ */
+ private function formatString($string)
+ {
+ return strip_tags(utf8_encode($string));
+ }
+
+ /**
+ * Establecer el formato de nueva línea a HTML
+ *
+ * @param $bool bool
+ */
+ public function setNewLineHtml($bool){
+ $this->_newLineHtml = $bool;
+ }
+
+ /**
+ * Restablecer la variable de descripcion
+ */
+ public function resetDescription()
+ {
+ $this->_description = null;
+ }
+}
\ No newline at end of file
diff --git a/inc/ActionsI.class.php b/inc/ActionsI.class.php
new file mode 100644
index 00000000..f224ddd9
--- /dev/null
+++ b/inc/ActionsI.class.php
@@ -0,0 +1,62 @@
+.
+ *
+ */
+
+namespace Controller;
+
+
+interface ActionsI {
+ const ACTION__ACC_SEARCH = 1;
+ const ACTION_ACC_VIEW = 2;
+ const ACTION_ACC_VIEW_PASS = 3;
+ const ACTION_ACC_VIEW_HISTORY = 4;
+ const ACTION_ACC_EDIT = 10;
+ const ACTION_ACC_EDIT_PASS = 11;
+ const ACTION_ACC_NEW = 20;
+ const ACTION_ACC_COPY = 30;
+ const ACTION_ACC_DELETE = 40;
+ const ACTION_ACC_FILES = 50;
+ const ACTION_ACC_REQUEST = 51;
+ const ACTION_MGM = 60;
+ const ACTION_MGM_CATEGORIES = 61;
+ const ACTION_MGM_CUSTOMERS = 62;
+ const ACTION_USR = 70;
+ const ACTION_USR_USERS = 71;
+ const ACTION_USR_USERS_NEW = 711;
+ const ACTION_USR_USERS_EDIT = 712;
+ const ACTION_USR_USERS_EDITPASS = 713;
+ const ACTION_USR_GROUPS = 72;
+ const ACTION_USR_GROUPS_NEW = 721;
+ const ACTION_USR_GROUPS_EDIT = 722;
+ const ACTION_USR_PROFILES = 73;
+ const ACTION_USR_PROFILES_NEW = 731;
+ const ACTION_USR_PROFILES_EDIT = 732;
+ const ACTION_CFG = 80;
+ const ACTION_CFG_GENERAL = 81;
+ const ACTION_CFG_ENCRYPTION = 82;
+ const ACTION_CFG_ENCRYPTION_TEMPPASS = 83;
+ const ACTION_CFG_BACKUP = 84;
+ const ACTION_CFG_IMPORT = 85;
+ const ACTION_EVL = 90;
+}
\ No newline at end of file
diff --git a/inc/ActionsInterface.class.php b/inc/ActionsInterface.class.php
new file mode 100644
index 00000000..b1b9cce3
--- /dev/null
+++ b/inc/ActionsInterface.class.php
@@ -0,0 +1,97 @@
+.
+ *
+ */
+
+namespace SP\Controller;
+
+/**
+ * Interface ActionsInterface para la definición de constantes de acciones disponibles.
+ *
+ * @package Controller
+ */
+interface ActionsInterface {
+ const ACTION_ACC_SEARCH = 1;
+ const ACTION_ACC_VIEW = 2;
+ const ACTION_ACC_VIEW_PASS = 3;
+ const ACTION_ACC_VIEW_HISTORY = 4;
+ const ACTION_ACC_EDIT = 10;
+ const ACTION_ACC_EDIT_PASS = 11;
+ const ACTION_ACC_EDIT_RESTORE = 12;
+ const ACTION_ACC_NEW = 20;
+ const ACTION_ACC_COPY = 30;
+ const ACTION_ACC_DELETE = 40;
+ const ACTION_ACC_FILES = 50;
+ const ACTION_ACC_REQUEST = 51;
+ const ACTION_MGM = 60;
+ const ACTION_MGM_CATEGORIES = 61;
+ const ACTION_MGM_CATEGORIES_VIEW = 610;
+ const ACTION_MGM_CATEGORIES_NEW = 611;
+ const ACTION_MGM_CATEGORIES_EDIT = 612;
+ const ACTION_MGM_CATEGORIES_DELETE = 613;
+ const ACTION_MGM_CUSTOMERS = 62;
+ const ACTION_MGM_CUSTOMERS_VIEW = 620;
+ const ACTION_MGM_CUSTOMERS_NEW = 621;
+ const ACTION_MGM_CUSTOMERS_EDIT = 622;
+ const ACTION_MGM_CUSTOMERS_DELETE = 623;
+ const ACTION_MGM_APITOKENS = 63;
+ const ACTION_MGM_APITOKENS_NEW = 630;
+ const ACTION_MGM_APITOKENS_VIEW = 631;
+ const ACTION_MGM_APITOKENS_EDIT = 632;
+ const ACTION_MGM_APITOKENS_DELETE = 633;
+ const ACTION_MGM_CUSTOMFIELDS = 64;
+ const ACTION_MGM_CUSTOMFIELDS_NEW = 640;
+ const ACTION_MGM_CUSTOMFIELDS_VIEW = 641;
+ const ACTION_MGM_CUSTOMFIELDS_EDIT = 642;
+ const ACTION_MGM_CUSTOMFIELDS_DELETE = 643;
+ const ACTION_USR = 70;
+ const ACTION_USR_USERS = 71;
+ const ACTION_USR_USERS_VIEW= 710;
+ const ACTION_USR_USERS_NEW = 711;
+ const ACTION_USR_USERS_EDIT = 712;
+ const ACTION_USR_USERS_DELETE = 713;
+ const ACTION_USR_USERS_EDITPASS = 714;
+ const ACTION_USR_GROUPS = 72;
+ const ACTION_USR_GROUPS_VIEW = 720;
+ const ACTION_USR_GROUPS_NEW = 721;
+ const ACTION_USR_GROUPS_EDIT = 722;
+ const ACTION_USR_GROUPS_DELETE = 723;
+ const ACTION_USR_PROFILES = 73;
+ const ACTION_USR_PROFILES_VIEW = 730;
+ const ACTION_USR_PROFILES_NEW = 731;
+ const ACTION_USR_PROFILES_EDIT = 732;
+ const ACTION_USR_PROFILES_DELETE = 733;
+ const ACTION_USR_PREFERENCES = 740;
+ const ACTION_USR_PREFERENCES_SECURITY = 741;
+ const ACTION_CFG = 80;
+ const ACTION_CFG_GENERAL = 81;
+ const ACTION_CFG_ENCRYPTION = 82;
+ const ACTION_CFG_ENCRYPTION_TEMPPASS = 83;
+ const ACTION_CFG_BACKUP = 84;
+ const ACTION_CFG_IMPORT = 85;
+ const ACTION_CFG_EXPORT = 86;
+ const ACTION_CFG_WIKI = 87;
+ const ACTION_CFG_LDAP = 88;
+ const ACTION_CFG_MAIL = 89;
+ const ACTION_EVL = 90;
+}
\ No newline at end of file
diff --git a/inc/Api.class.php b/inc/Api.class.php
new file mode 100644
index 00000000..0fa37be9
--- /dev/null
+++ b/inc/Api.class.php
@@ -0,0 +1,212 @@
+.
+ *
+ */
+
+namespace SP;
+
+use SP\Controller\ActionsInterface;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+/**
+ * Class Api para la gestión de peticiones a la API de sysPass
+ *
+ * @package SP
+ */
+class Api
+{
+ /**
+ * @var int
+ */
+ private $_userId = 0;
+ /**
+ * @var int
+ */
+ private $_actionId = 0;
+ /**
+ * @var bool
+ */
+ private $_auth = false;
+ /**
+ * @var string
+ */
+ private $_mPass = '';
+
+ /**
+ * @param $actionId int El id de la acción
+ * @param $authToken string El token de seguridad
+ * @param null $userPass string La clave del usuario
+ * @throws SPException
+ */
+ public function __construct($actionId, $authToken, $userPass = null)
+ {
+ if (!Auth::checkAuthToken($actionId, $authToken)) {
+ throw new SPException(SPException::SP_CRITICAL, _('Acceso no permitido'));
+ }
+
+ $this->_userId = ApiTokens::getUserIdForToken($authToken);
+ $this->_actionId = $actionId;
+ $this->_auth = true;
+
+ if (!is_null($userPass)) {
+ $userLogin = UserUtil::getUserLoginById($this->_userId);
+
+ $User = new User();
+ $User->setUserId($this->_userId);
+ $User->setUserLogin($userLogin);
+ $User->setUserPass($userPass);
+
+ if (Auth::authUserMySQL($userLogin, $userPass)
+ && !UserUtil::checkUserIsDisabled($userLogin)
+ && UserUtil::checkUserMPass($User)
+ && UserUtil::checkUserUpdateMPass($userLogin)
+ && !$User->isUserChangePass()
+ ) {
+ $this->_mPass = $User->getUserMPass(true);
+ } else {
+ throw new SPException(SPException::SP_CRITICAL, _('Acceso no permitido'));
+ }
+ }
+
+ Session::setUserId($this->_userId);
+ }
+
+ /**
+ * Devolver la clave de una cuenta
+ *
+ * @param $accountId
+ * @return string
+ */
+ public function getAccountPassword($accountId)
+ {
+ $this->checkActionAccess(ActionsInterface::ACTION_ACC_VIEW_PASS);
+
+ $Account = new Account($accountId);
+ $Account->getAccountPassData();
+ $Account->incrementDecryptCounter();
+
+ $ret = array(
+ 'accountId' => $accountId,
+ 'pass' => Crypt::getDecrypt($Account->getAccountPass(), $Account->getAccountIV(), $this->_mPass)
+ );
+
+ return $this->wrapJSON($ret);
+ }
+
+ /**
+ * Comprobar el acceso a la acción
+ *
+ * @param $action
+ * @throws SPException
+ */
+ private function checkActionAccess($action)
+ {
+ if ($this->_actionId !== $action) {
+ throw new SPException(SPException::SP_CRITICAL, _('Acceso no permitido'));
+ }
+ }
+
+ /**
+ * Devuelve una respuesta en formato JSON con el estado y el mensaje.
+ *
+ * @param string $data Los datos a devolver
+ * @return bool
+ * @throws SPException
+ */
+ private function wrapJSON($data)
+ {
+ $arrStrFrom = array("\\", '"', "'");
+ $arrStrTo = array("\\", '\"', "\'");
+
+ if (is_array($data) || is_object($data)) {
+ array_walk($data,
+ function (&$value) use ($arrStrFrom, $arrStrTo) {
+ if (is_object($value)) {
+ foreach ($value as &$attribute) {
+ str_replace($arrStrFrom, $arrStrTo, $attribute);
+ }
+
+ return $value;
+ } else {
+ return str_replace($arrStrFrom, $arrStrTo, $value);
+ }
+ }
+ );
+ } else {
+ $data = str_replace($arrStrFrom, $arrStrTo, $data);
+ }
+
+ $json = json_encode(array(
+ 'action' => Acl::getActionName($this->_actionId, true),
+ 'data' => $data,
+ ));
+
+ if ($json === false) {
+ throw new SPException(SPException::SP_CRITICAL, sprintf('%s : %s', _('Error de codificación'), json_last_error_msg()));
+ }
+
+ return $json;
+ }
+
+ /**
+ * Devolver los resultados de una búsqueda
+ *
+ * @param string $search El texto de búsqueda
+ * @param int $count El número de cuentas a mostrar
+ * @return string
+ * @throws SPException
+ */
+ public function getAccountSearch($search, $count = 0)
+ {
+ $this->checkActionAccess(ActionsInterface::ACTION_ACC_SEARCH);
+
+ $Search = new AccountSearch();
+ $Search->setTxtSearch($search);
+
+ if ($count > 0) {
+ $Search->setLimitCount($count);
+ }
+
+ $ret = $Search->getAccounts();
+
+ return $this->wrapJSON($ret);
+ }
+
+ /**
+ * Devolver la clave de una cuenta
+ *
+ * @param $accountId
+ * @return string
+ */
+ public function getAccountData($accountId)
+ {
+ $this->checkActionAccess(ActionsInterface::ACTION_ACC_VIEW);
+
+ $Account = new Account($accountId);
+ $ret = $Account->getAccountData();
+ $Account->incrementViewCounter();
+
+ return $this->wrapJSON($ret);
+ }
+}
\ No newline at end of file
diff --git a/inc/ApiRequest.class.php b/inc/ApiRequest.class.php
new file mode 100644
index 00000000..3f98a0a1
--- /dev/null
+++ b/inc/ApiRequest.class.php
@@ -0,0 +1,111 @@
+.
+ *
+ */
+
+namespace SP;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+/**
+ * Class ApiRequest encargada de atender la peticiones a la API de sysPass
+ *
+ * @package SP
+ */
+class ApiRequest extends Request
+{
+ const ACTION_ID = 'a';
+ const USER = 'u';
+ const USER_PASS = 'up';
+ const AUTH_TOKEN = 't';
+ const ITEM = 'i';
+ const SEARCH = 's';
+ const SEARCH_COUNT = 'sc';
+
+ /**
+ * @var \stdClass
+ */
+ private $_vars;
+
+ public function __construct(){
+ $authToken = self::analyze(self::AUTH_TOKEN);
+ $actionId = self::analyze(self::ACTION_ID, 0);
+
+ if (!$authToken || !$actionId){
+ throw new SPException(SPException::SP_WARNING, _('Parámetros incorrectos'));
+ }
+
+ $this->addVar('authToken', $authToken);
+ $this->addVar('actionId', $actionId);
+ $this->addVar('userPass', null);
+ }
+
+ /**
+ * Añade una nueva variable de petición al array
+ *
+ * @param $name string El nombre de la variable
+ * @param $value mixed El valor de la variable
+ */
+ public function addVar($name, $value)
+ {
+ $this->_vars->$name = $value;
+ }
+
+ /**
+ * Obtiene una nueva instancia de la Api
+ *
+ * @return Api
+ */
+ public function getApi()
+ {
+ return new Api($this->_vars->actionId, $this->_vars->authToken, $this->_vars->userPass);
+ }
+
+ /**
+ * Obtener el id de la acción
+ *
+ * @return int
+ */
+ public function getAction()
+ {
+ return $this->_vars->actionId;
+ }
+
+ /**
+ * Devolver un array con la ayuda de parámetros
+ *
+ * @return array
+ */
+ public static function getHelp()
+ {
+ return array(
+ self::AUTH_TOKEN => _('Token de autorización'),
+ self::ACTION_ID => _('Acción a realizar'),
+ self::USER_PASS => _('Clave de usuario (opcional)'),
+ self::SEARCH => _('Cadena a buscar'),
+ self::SEARCH_COUNT => _('Numero de cuentas a mostar en la búsqueda'),
+ self::ITEM => _('Item a devolver')
+ );
+ }
+
+}
\ No newline at end of file
diff --git a/inc/ApiTokens.class.php b/inc/ApiTokens.class.php
new file mode 100644
index 00000000..c0eb79c1
--- /dev/null
+++ b/inc/ApiTokens.class.php
@@ -0,0 +1,385 @@
+.
+ *
+ */
+
+namespace SP;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+use SP\Controller\ActionsInterface;
+
+/**
+ * Class ApiTokens para la gestión de autorizaciones de acceso a la API de sysPass
+ *
+ * @package SP
+ */
+class ApiTokens
+{
+ /**
+ * @var int
+ */
+ private $_tokenId = 0;
+ /**
+ * @var int
+ */
+ private $_userId = 0;
+ /**
+ * @var int
+ */
+ private $_actionId = 0;
+ /**
+ * @var string
+ */
+ private $_token = '';
+ /**
+ * @var bool
+ */
+ private $_refreshToken = false;
+
+ /**
+ * Obtener los tokens de la API
+ *
+ * @param int $tokenId opcional, con el Id del token a consultar
+ * @param bool $returnRawData Devolver la consulta tal cual
+ * @return array|object con la lista de tokens
+ */
+ public static function getTokens($tokenId = null, $returnRawData = false)
+ {
+ $query = 'SELECT authtoken_id,' .
+ 'authtoken_userId,' .
+ 'authtoken_actionId, ' .
+ 'authtoken_token, ' .
+ 'user_login ' .
+ 'FROM authTokens ' .
+ 'LEFT JOIN usrData ON user_id = authtoken_userId ';
+
+ $data = null;
+
+ if (!is_null($tokenId)) {
+ $query .= "WHERE authtoken_id = :id LIMIT 1";
+ $data['id'] = $tokenId;
+ } else {
+ $query .= "ORDER BY user_login";
+ }
+
+ if (!$returnRawData) {
+ DB::setReturnArray();
+ }
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+ return array();
+ }
+
+ if (!$returnRawData) {
+ foreach ($queryRes as &$token) {
+ $token->authtoken_actionId = Acl::getActionName($token->authtoken_actionId);
+ }
+ }
+
+ return $queryRes;
+ }
+
+ /**
+ * Devuelver un array de acciones posibles para los tokens
+ *
+ * @return array
+ */
+ public static function getTokenActions()
+ {
+ $actions = array(
+ ActionsInterface::ACTION_ACC_SEARCH => Acl::getActionName(ActionsInterface::ACTION_ACC_SEARCH),
+ ActionsInterface::ACTION_ACC_VIEW => Acl::getActionName(ActionsInterface::ACTION_ACC_VIEW),
+ ActionsInterface::ACTION_ACC_VIEW_PASS => Acl::getActionName(ActionsInterface::ACTION_ACC_VIEW_PASS),
+ ActionsInterface::ACTION_ACC_DELETE => Acl::getActionName(ActionsInterface::ACTION_ACC_DELETE),
+ ActionsInterface::ACTION_CFG_BACKUP => Acl::getActionName(ActionsInterface::ACTION_CFG_BACKUP),
+ ActionsInterface::ACTION_CFG_EXPORT => Acl::getActionName(ActionsInterface::ACTION_CFG_EXPORT),
+ );
+
+ return $actions;
+ }
+
+ /**
+ * Obtener el usuario a partir del token
+ *
+ * @param $token string El token de autorización
+ * @return bool|mixed
+ * @throws SPException
+ */
+ public static function getUserIdForToken($token)
+ {
+ $query = 'SELECT authtoken_userId FROM authTokens WHERE authtoken_token = :token LIMIT 1';
+
+ $data['token'] = $token;
+
+ try {
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+ } catch (SPException $e) {
+ throw new SPException(SPException::SP_CRITICAL, _('Error interno'));
+ }
+
+ if (DB::$lastNumRows === 0) {
+ return false;
+ }
+
+ return $queryRes->authtoken_userId;
+ }
+
+ /**
+ * @param boolean $refreshToken
+ */
+ public function setRefreshToken($refreshToken)
+ {
+ $this->_refreshToken = $refreshToken;
+ }
+
+ /**
+ * Añadir un nuevo token
+ *
+ * @throws SPException
+ */
+ public function addToken()
+ {
+ $this->checkTokenExist();
+
+ if ($this->_refreshToken) {
+ $this->refreshToken();
+ }
+
+ $query = 'INSERT INTO authTokens ' .
+ 'SET authtoken_userId = :userid,' .
+ 'authtoken_actionId = :actionid,' .
+ 'authtoken_createdBy = :createdby,' .
+ 'authtoken_token = :token,' .
+ 'authtoken_startDate = UNIX_TIMESTAMP()';
+
+ $data['userid'] = $this->_userId;
+ $data['actionid'] = $this->_actionId;
+ $data['createdby'] = Session::getUserId();
+ $data['token'] = ($this->getUserToken()) ? $this->_token : sha1(uniqid() . time());
+
+ try {
+ DB::getQuery($query, __FUNCTION__, $data);
+ } catch (SPException $e) {
+ throw new SPException(SPException::SP_CRITICAL, _('Error interno'));
+ }
+
+ $Log = new Log(_('Nueva Autorización'));
+ $Log->addDescription(sprintf('%s : %s', Html::strongText(_('Usuario')), UserUtil::getUserLoginById($this->_userId)));
+ $Log->writeLog();
+
+ Email::sendEmail($Log);
+ }
+
+ /**
+ * Comprobar si el token ya existe
+ *
+ * @return bool
+ * @throws SPException
+ */
+ private function checkTokenExist()
+ {
+ $query = 'SELECT authtoken_id FROM authTokens ' .
+ 'WHERE authtoken_userId = :userid ' .
+ 'AND authtoken_actionId = :actionid ' .
+ 'AND authtoken_id <> :id ' .
+ 'LIMIT 1';
+
+ $data['id'] = $this->_tokenId;
+ $data['userid'] = $this->_userId;
+ $data['actionid'] = $this->_actionId;
+
+ try {
+ DB::getResults($query, __FUNCTION__, $data);
+ } catch (SPException $e) {
+ throw new SPException(SPException::SP_CRITICAL, _('Error interno'));
+ }
+
+ if (DB::$lastNumRows === 1) {
+ throw new SPException(SPException::SP_WARNING, _('La autorización ya existe'));
+ }
+ }
+
+ /**
+ * Regenerar el hash de los tokens de un usuario
+ *
+ * @throws SPException
+ */
+ private function refreshToken()
+ {
+ $query = 'UPDATE authTokens SET ' .
+ 'authtoken_token = :token,' .
+ 'authtoken_startDate = UNIX_TIMESTAMP() ' .
+ 'WHERE authtoken_userId = :userid';
+
+ $data['userid'] = $this->_userId;
+ $data['token'] = sha1(uniqid() . time());
+
+ try {
+ DB::getQuery($query, __FUNCTION__, $data);
+ } catch (SPException $e) {
+ throw new SPException(SPException::SP_CRITICAL, _('Error interno'));
+ }
+ }
+
+ /**
+ * Obtener el token de la API de un usuario
+ *
+ * @return bool
+ * @throws SPException
+ */
+ private function getUserToken()
+ {
+ $query = 'SELECT authtoken_token FROM authTokens WHERE authtoken_userId = :userid LIMIT 1';
+
+ $data['userid'] = $this->_userId;
+
+ try {
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+ } catch (SPException $e) {
+ throw new SPException(SPException::SP_CRITICAL, _('Error interno'));
+ }
+
+ if (DB::$lastNumRows === 0) {
+ return false;
+ }
+
+ $this->_token = $queryRes->authtoken_token;
+
+ return true;
+ }
+
+ /**
+ * Actualizar un token
+ *
+ * @throws SPException
+ */
+ public function updateToken()
+ {
+ $this->checkTokenExist();
+
+ if ($this->_refreshToken) {
+ $this->refreshToken();
+ }
+
+ $query = 'UPDATE authTokens ' .
+ 'SET authtoken_userId = :userid,' .
+ 'authtoken_actionId = :actionid,' .
+ 'authtoken_createdBy = :createdby,' .
+ 'authtoken_token = :token,' .
+ 'authtoken_startDate = UNIX_TIMESTAMP() ' .
+ 'WHERE authtoken_id = :id LIMIT 1';
+
+ $data['id'] = $this->_tokenId;
+ $data['userid'] = $this->_userId;
+ $data['actionid'] = $this->_actionId;
+ $data['createdby'] = Session::getUserId();
+ $data['token'] = ($this->getUserToken()) ? $this->_token : sha1(uniqid() . time());
+
+ try {
+ DB::getQuery($query, __FUNCTION__, $data);
+ } catch (SPException $e) {
+ throw new SPException(SPException::SP_CRITICAL, _('Error interno'));
+ }
+
+ $Log = new Log(_('Actualizar Autorización'));
+ $Log->addDescription(sprintf('%s : %s', Html::strongText(_('Usuario')), UserUtil::getUserLoginById($this->_userId)));
+ $Log->writeLog();
+
+ Email::sendEmail($Log);
+ }
+
+ /**
+ * Eliminar token
+ *
+ * @throws SPException
+ */
+ public function deleteToken()
+ {
+ $query = 'DELETE FROM authTokens WHERE authtoken_id = :id LIMIT 1';
+
+ $data['id'] = $this->_tokenId;
+
+ try {
+ DB::getQuery($query, __FUNCTION__, $data);
+ } catch (SPException $e) {
+ throw new SPException(SPException::SP_CRITICAL, _('Error interno'));
+ }
+
+ $Log = new Log(_('Eliminar Autorización'));
+ $Log->addDescription(sprintf('%d', $this->_tokenId));
+ $Log->writeLog();
+
+ Email::sendEmail($Log);
+ }
+
+ /**
+ * @return int
+ */
+ public function getUserId()
+ {
+ return $this->_userId;
+ }
+
+ /**
+ * @param int $userId
+ */
+ public function setUserId($userId)
+ {
+ $this->_userId = $userId;
+ }
+
+ /**
+ * @return int
+ */
+ public function getTokenId()
+ {
+ return $this->_tokenId;
+ }
+
+ /**
+ * @param int $tokenId
+ */
+ public function setTokenId($tokenId)
+ {
+ $this->_tokenId = $tokenId;
+ }
+
+ /**
+ * @return int
+ */
+ public function getActionId()
+ {
+ return $this->_actionId;
+ }
+
+ /**
+ * @param int $actionId
+ */
+ public function setActionId($actionId)
+ {
+ $this->_actionId = $actionId;
+ }
+}
\ No newline at end of file
diff --git a/inc/Auth.class.php b/inc/Auth.class.php
new file mode 100644
index 00000000..fa32e5bd
--- /dev/null
+++ b/inc/Auth.class.php
@@ -0,0 +1,225 @@
+.
+ *
+ */
+
+namespace SP;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+/**
+ * Esta clase es la encargada de realizar la autentificación de usuarios de sysPass.
+ */
+class Auth
+{
+ static $userName;
+ static $userEmail;
+
+ /**
+ * Autentificación de usuarios con LDAP.
+ *
+ * @param string $userLogin con el login del usuario
+ * @param string $userPass con la clave del usuario
+ * @return int|bool Número de error o boolean
+ */
+ public static function authUserLDAP($userLogin, $userPass)
+ {
+ if (!Util::ldapIsAvailable() || !Util::ldapIsEnabled() || !Ldap::checkLDAPParams()) {
+ return false;
+ }
+
+ $ldapGroupAccess = false;
+ $message['action'] = __FUNCTION__;
+
+ // Conectamos al servidor realizamos la conexión con el usuario proxy
+ try {
+ Ldap::ldapConnect();
+ Ldap::ldapBind();
+ Ldap::getUserDN($userLogin);
+ } catch (\Exception $e) {
+ return false;
+ }
+
+ $userDN = Ldap::$ldapSearchData[0]['dn'];
+
+ // Realizamos la conexión con el usuario real y obtenemos los atributos
+ try {
+ Ldap::ldapBind($userDN, $userPass);
+ $attribs = Ldap::getLDAPAttr();
+ } catch (\Exception $e) {
+ return ldap_errno(Ldap::getConn());
+ }
+
+ // Comprobamos si la cuenta está bloqueada o expirada
+ if (isset($attribs['expire']) && $attribs['expire'] > 0) {
+ return 701;
+ }
+
+ if (Ldap::getLdapGroup() !== '*') {
+ // Comprobamos que el usuario está en el grupo indicado buscando en los atributos del usuario
+ if (isset($attribs['group'])) {
+ if (is_array($attribs['group'])) {
+ foreach ($attribs['group'] as $group) {
+ if (is_int($group)) {
+ continue;
+ }
+
+ // Comprobamos que el usuario está en el grupo indicado
+ if (self::checkLDAPGroup($group)) {
+ $ldapGroupAccess = true;
+ break;
+ }
+ }
+ } else {
+ $ldapGroupAccess = self::checkLDAPGroup($attribs['group']);
+ }
+ // Comprobamos que el usuario está en el grupo indicado buscando en los atributos del grupo
+ } else {
+ $ldapGroupAccess = (Ldap::searchUserInGroup($userDN) || LdapADS::searchADUserInGroup($userLogin));
+ }
+ } else {
+ $ldapGroupAccess = true;
+ }
+
+ if ($ldapGroupAccess === false) {
+ $log = new Log(__FUNCTION__);
+ $log->addDescription(_('Usuario no pertenece al grupo'));
+ $log->addDescription(sprintf('%s : %s', _('Usuario'), $userDN));
+ $log->writeLog();
+
+ return 702;
+ }
+
+ self::$userName = (isset($attribs['name'])) ? $attribs['name'] : $userLogin;
+ self::$userEmail = (isset($attribs['mail'])) ? $attribs['mail'] : '';
+
+ return true;
+ }
+
+ /**
+ * Comprobar si el grupo de LDAP está habilitado.
+ *
+ * @param string $group con el nombre del grupo
+ * @return bool
+ */
+ private static function checkLDAPGroup($group)
+ {
+ $ldapGroup = strtolower(Config::getValue('ldap_group'));
+ $groupName = array();
+
+ preg_match('/^cn=([\w\s-]+),.*/i', $group, $groupName);
+
+ if (strtolower($groupName[1]) == $ldapGroup || strtolower($group) == $ldapGroup) {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Autentificación de usuarios con MySQL.
+ *
+ * Esta función comprueba la clave del usuario. Si el usuario necesita ser migrado desde phpPMS,
+ * se ejecuta el proceso para actualizar la clave.
+ *
+ * @param string $userLogin con el login del usuario
+ * @param string $userPass con la clave del usuario
+ * @return bool
+ */
+ public static function authUserMySQL($userLogin, $userPass)
+ {
+ if (UserUtil::checkUserIsMigrate($userLogin)) {
+ if (!UserUtil::migrateUser($userLogin, $userPass)) {
+ return false;
+ }
+ }
+
+ $query = 'SELECT user_login, user_pass '
+ . 'FROM usrData '
+ . 'WHERE user_login = :login AND user_isMigrate = 0 '
+ . 'AND user_pass = SHA1(CONCAT(user_hashSalt, :pass)) LIMIT 1';
+
+ $data['login'] = $userLogin;
+ $data['pass'] = $userPass;
+
+ $ret = (DB::getQuery($query, __FUNCTION__, $data) === true && DB::$lastNumRows === 1);
+
+ return $ret;
+ }
+
+ /**
+ * Proceso para la recuperación de clave.
+ *
+ * @param string $login con el login del usuario
+ * @param string $email con el email del usuario
+ * @return bool
+ */
+ public static function mailPassRecover($login, $email)
+ {
+ if (UserUtil::checkUserMail($login, $email)
+ && !UserUtil::checkUserIsDisabled($login)
+ && !UserLdap::checkUserIsLDAP($login)
+ && !UserUtil::checkPassRecoverLimit($login)
+ ) {
+ $hash = Util::generate_random_bytes();
+
+ $log = new Log(_('Cambio de Clave'));
+
+ $log->addDescription(Html::strongText(_('Se ha solicitado el cambio de su clave de usuario.')));
+ $log->addDescription();
+ $log->addDescription(_('Para completar el proceso es necesario que acceda a la siguiente URL:'));
+ $log->addDescription();
+ $log->addDescription(Html::anchorText(Init::$WEBURI . '/index.php?a=passreset&h=' . $hash . '&t=' . time()));
+ $log->addDescription('');
+ $log->addDescription(_('Si no ha solicitado esta acción, ignore este mensaje.'));
+
+ return (Email::sendEmail($log, $email, false) && UserUtil::addPassRecover($login, $hash));
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Comprobar el token de seguridad
+ *
+ * @param $userId int El id del usuario
+ * @param $actionId int El id de la accion
+ * @param $token string El token de seguridad
+ * @return bool
+ */
+ public static function checkAuthToken($actionId, $token)
+ {
+ $query = 'SELECT authtoken_id FROM authTokens ' .
+ 'WHERE authtoken_actionId = :actionId ' .
+ 'AND authtoken_token = :token ' .
+ 'LIMIT 1';
+
+ $data['actionId'] = $actionId;
+ $data['token'] = $token;
+
+ DB::getQuery($query, __FUNCTION__, $data);
+
+ return (DB::$lastNumRows === 1);
+ }
+}
diff --git a/inc/Auth2FA.class.php b/inc/Auth2FA.class.php
new file mode 100644
index 00000000..e75de6db
--- /dev/null
+++ b/inc/Auth2FA.class.php
@@ -0,0 +1,142 @@
+.
+ *
+ */
+
+namespace SP\Auth;
+
+use SP\Exts\Google2FA;
+use SP\Exts\Base2n;
+use SP\UserUtil;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+/**
+ * Class Auth2FA
+ *
+ * @package SP\Auth
+ */
+class Auth2FA
+{
+ /**
+ * @var int
+ */
+ private $_timestamp = 0;
+ /**
+ * @var string
+ */
+ private $_initializationKey = '';
+ /**
+ * @var string
+ */
+ private $_totp = '';
+ /**
+ * @var int
+ */
+ private $_userId = 0;
+ /**
+ * @var string
+ */
+ private $_userLogin = '';
+
+ public function __construct($userId, $userLogin = null)
+ {
+ $this->_userId = $userId;
+ $this->_userLogin = $userLogin;
+ $this->_initializationKey = $this->genUserInitializationKey();
+ }
+
+ /**
+ * @param int $userId
+ */
+ public function setUserId($userId)
+ {
+ $this->_userId = $userId;
+ }
+
+ /**
+ * @param string $userLogin
+ */
+ public function setUserLogin($userLogin)
+ {
+ $this->_userLogin = $userLogin;
+ }
+
+ /**
+ * Verificar el código de 2FA
+ *
+ * @param $key
+ * @return bool
+ */
+ public function verifyKey($key)
+ {
+ return Google2FA::verify_key($this->_initializationKey, $key);
+ }
+
+ public function getUserQRUrl(){
+ $qrUrl = 'https://www.google.com/chart?chs=150x150&chld=M|0&cht=qr&chl=';
+ $qrUrl .= urlencode('otpauth://totp/sysPass:syspass/' . $this->_userLogin . '?secret=' . $this->_initializationKey . '&issuer=sysPass');
+
+ return $qrUrl;
+ }
+
+ public function getUserQRCode()
+ {
+ $ch = curl_init($this->getUserQRUrl());
+
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($ch, CURLOPT_HEADER, 0);
+ curl_setopt($ch, CURLOPT_USERAGENT, "sysPass 2FA");
+ curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
+ curl_setopt($ch, CURLOPT_TIMEOUT, 60);
+
+ $data = curl_exec($ch);
+ curl_close($ch);
+
+ if ($data === false) {
+ return false;
+ }
+
+ return base64_encode($data);
+ }
+
+ public function checkUserToken($userToken)
+ {
+ $timeStamp = Google2FA::get_timestamp();
+ $secretkey = Google2FA::base32_decode($this->_initializationKey);
+ $totp = Google2FA::oath_totp($secretkey, $timeStamp);
+
+ error_log($totp . '/' . $userToken);
+
+ return ($totp == $userToken);
+ }
+
+ private function genUserInitializationKey()
+ {
+ $userIV = UserUtil::getUserIVById($this->_userId);
+ $base32 = new Base2n(5, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567', false, true, true);
+ $key = substr($base32->encode($userIV), 0, 16);
+
+ return $key;
+ }
+}
\ No newline at end of file
diff --git a/inc/backup.class.php b/inc/Backup.class.php
similarity index 75%
rename from inc/backup.class.php
rename to inc/Backup.class.php
index 04e314cc..38e6e99a 100644
--- a/inc/backup.class.php
+++ b/inc/Backup.class.php
@@ -23,12 +23,14 @@
*
*/
+namespace SP;
+
defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
/**
* Esta clase es la encargada de realizar la copia y restauración de sysPass.
*/
-class SP_Backup
+class Backup
{
/**
* Realizar backup de la BBDD y aplicación.
@@ -37,24 +39,23 @@ class SP_Backup
*/
public static function doBackup()
{
- $siteName = SP_Html::getAppInfo('appname');
- $backupDir = SP_Init::$SERVERROOT;
+ $siteName = Util::getAppInfo('appname');
+ $backupDir = Init::$SERVERROOT;
+
+ // Generar hash unico para evitar descargas no permitidas
+ $backupUniqueHash = uniqid();
+ Config::setValue('backup_hash', $backupUniqueHash);
+
$backupDstDir = $backupDir . DIRECTORY_SEPARATOR . 'backup';
- $bakFileApp = $backupDstDir . DIRECTORY_SEPARATOR . $siteName . '.tar';
- $bakFileDB = $backupDstDir . DIRECTORY_SEPARATOR . $siteName . '_db.sql';
+ $bakFileApp = $backupDstDir . DIRECTORY_SEPARATOR . $siteName . '-' . $backupUniqueHash . '.tar';
+ $bakFileDB = $backupDstDir . DIRECTORY_SEPARATOR . $siteName . '_db-' . $backupUniqueHash . '.sql';
try {
self::checkBackupDir($backupDstDir);
self::backupTables('*', $bakFileDB);
self::backupApp($bakFileApp);
- } catch (Exception $e) {
-
- $message['action'] = __FUNCTION__;
- $message['text'][] = $e->getMessage();
-
- SP_Log::wrLogInfo($message);
- SP_Common::sendEmail($message);
-
+ } catch (\Exception $e) {
+ Log::writeNewLogAndEmail(__FUNCTION__, $e->getMessage());
return false;
}
@@ -67,12 +68,12 @@ class SP_Backup
*
* @param string $tables
* @param string $backupFile
- * @throws Exception
+ * @throws SPException
* @return bool
*/
private static function backupTables($tables = '*', $backupFile)
{
- $dbname = SP_Config::getValue("dbname");
+ $dbname = Config::getValue("dbname");
try {
$handle = fopen($backupFile, 'w');
@@ -105,10 +106,14 @@ class SP_Backup
$sqlOut .= $txtCreate->{'Create Table'} . ';' . PHP_EOL . PHP_EOL;
fwrite($handle, $sqlOut);
- // Consulta para obtener los registros de la tabla
- $queryRes = DB::getResults('SELECT * FROM ' . $tableName, __FUNCTION__, false, true);
+ DB::setReturnRawData();
- while ($row = $queryRes->fetch_row()) {
+ // Consulta para obtener los registros de la tabla
+ $queryRes = DB::getResults('SELECT * FROM ' . $tableName, __FUNCTION__);
+
+ $numColumns = $queryRes->columnCount();
+
+ while ($row = $queryRes->fetch(\PDO::FETCH_NUM)) {
fwrite($handle, 'INSERT INTO `' . $tableName . '` VALUES(');
$field = 1;
@@ -116,10 +121,10 @@ class SP_Backup
if (is_numeric($value)) {
fwrite($handle, $value);
} else {
- fwrite($handle, '"' . DB::escape($value) . '"');
+ fwrite($handle, DB::escape($value));
}
- if ($field < $queryRes->field_count) {
+ if ($field < $numColumns) {
fwrite($handle, ',');
}
@@ -128,6 +133,8 @@ class SP_Backup
fwrite($handle, ');' . PHP_EOL);
}
fwrite($handle, PHP_EOL . PHP_EOL);
+
+ DB::setReturnRawData(false);
}
$sqlOut = '--' . PHP_EOL;
@@ -138,8 +145,8 @@ class SP_Backup
fwrite($handle, $sqlOut);
fclose($handle);
- } catch (Exception $e) {
- throw new Exception($e->getMessage());
+ } catch (\Exception $e) {
+ throw new SPException(SPException::SP_CRITICAL, $e->getMessage());
}
return true;
@@ -149,18 +156,16 @@ class SP_Backup
* Realizar un backup de la aplicación y comprimirlo.
*
* @param string $backupFile nombre del archivo de backup
- * @throws Exception
+ * @throws SPException
* @return bool
*/
private static function backupApp($backupFile)
{
if (!class_exists('PharData')) {
- if (SP_Util::runningOnWindows()) {
- throw new Exception(_('Esta operación sólo es posible en entornos Linux'));
- }
-
- if (!self::backupAppLegacyLinux($backupFile)) {
- throw new Exception(_('Error al realizar backup en modo compatibilidad'));
+ if (Util::runningOnWindows()) {
+ throw new SPException(SPException::SP_CRITICAL, _('Esta operación sólo es posible en entornos Linux'));
+ } elseif (!self::backupAppLegacyLinux($backupFile)) {
+ throw new SPException(SPException::SP_CRITICAL, _('Error al realizar backup en modo compatibilidad'));
}
return true;
@@ -173,13 +178,13 @@ class SP_Backup
unlink($compressedFile);
}
- $archive = new PharData($backupFile);
- $archive->buildFromDirectory(SP_Init::$SERVERROOT);
- $archive->compress(Phar::GZ);
+ $archive = new \PharData($backupFile);
+ $archive->buildFromDirectory(Init::$SERVERROOT);
+ $archive->compress(\Phar::GZ);
unlink($backupFile);
- } catch (Exception $e) {
- throw new Exception($e->getMessage());
+ } catch (\Exception $e) {
+ throw new SPException(SPException::SP_CRITICAL, $e->getMessage());
}
return file_exists($backupFile);
@@ -194,7 +199,7 @@ class SP_Backup
private static function backupAppLegacyLinux($backupFile)
{
$compressedFile = $backupFile . '.gz';
- $backupDir = SP_Init::$SERVERROOT;
+ $backupDir = Init::$SERVERROOT;
$bakDstDir = $backupDir . '/backup';
$command = 'tar czf ' . $compressedFile . ' ' . $backupDir . ' --exclude "' . $bakDstDir . '" 2>&1';
@@ -207,21 +212,21 @@ class SP_Backup
* Comprobar y crear el directorio de backups.
*
* @param string $backupDir ruta del directorio de backup
- * @throws Exception
+ * @throws SPException
* @return bool
*/
private static function checkBackupDir($backupDir)
{
if (!is_dir($backupDir)) {
if (!@mkdir($backupDir, 0550)) {
- throw new Exception(('No es posible crear el directorio de backups') . ' (' . $backupDir . ')');
+ throw new SPException(SPException::SP_CRITICAL, _('No es posible crear el directorio de backups') . ' (' . $backupDir . ')');
}
}
if (!is_writable($backupDir)) {
- throw new Exception(_('Compruebe los permisos del directorio de backups'));
+ throw new SPException(SPException::SP_CRITICAL, _('Compruebe los permisos del directorio de backups'));
}
return true;
}
-}
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/inc/Base.php b/inc/Base.php
new file mode 100644
index 00000000..02647571
--- /dev/null
+++ b/inc/Base.php
@@ -0,0 +1,39 @@
+.
+ *
+ */
+
+define('MODEL_PATH', __DIR__);
+define('CONTROLLER_PATH', __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'web');
+define('VIEW_PATH', __DIR__ . DIRECTORY_SEPARATOR . 'themes');
+define('EXTENSIONS_PATH', __DIR__ . DIRECTORY_SEPARATOR . 'ext');
+define('DEBUG', false);
+
+require MODEL_PATH . DIRECTORY_SEPARATOR . 'Init.class.php';
+
+// Empezar a calcular el tiempo y memoria utilizados
+$memInit = memory_get_usage();
+$timeStart = \SP\Init::microtime_float();
+
+// Inicializar sysPass
+\SP\Init::start();
\ No newline at end of file
diff --git a/inc/Cache.class.php b/inc/Cache.class.php
new file mode 100644
index 00000000..42a4e7a5
--- /dev/null
+++ b/inc/Cache.class.php
@@ -0,0 +1,89 @@
+.
+ *
+ */
+
+namespace SP;
+
+/**
+ * Clase base para guardar/obtener elementos de la caché
+ */
+class Cache
+{
+ /**
+ * Tiempo de expiración de la cache en segundos
+ */
+ const EXPIRE_TIME = 300;
+
+ /**
+ * Obtener un parámetro de la configuración de sysPass desde la caché de la sesión
+ *
+ * @param string $param El parámetro a obtener
+ * @return null
+ */
+ public static function getSessionCacheConfigValue($param)
+ {
+ $config = self::getSessionCacheConfig();
+
+ if (isset($config) && isset($config[$param])) {
+ return $config[$param];
+ }
+
+ // FIXME
+// error_log('CONFIG_CACHE_VALUE_MISS');
+
+ return null;
+ }
+
+ /**
+ * Obtener la configuración de sysPass desde la caché de la sesión
+ *
+ * @return array|bool Los datos de la configuración
+ */
+ public static function getSessionCacheConfig()
+ {
+ if (isset($_SESSION['cache']['config']) && is_array($_SESSION['cache']['config'])) {
+ $isExpired = (time() - $_SESSION['cache']['config']['expires'] > 0);
+
+ if (!$isExpired) {
+ return $_SESSION['cache']['config'];
+ }
+ }
+
+ self::setSessionCacheConfig();
+
+ return $_SESSION['cache']['config'];
+ }
+
+ /**
+ * Guardar la cache de configuración en la sesion
+ */
+ public static function setSessionCacheConfig()
+ {
+ // FIXME
+// error_log('CONFIG_CACHE_MISS');
+
+ $_SESSION['cache']['config'] = Config::getConfig();
+ $_SESSION['cache']['config']['expires'] = time() + self::EXPIRE_TIME;
+ }
+}
\ No newline at end of file
diff --git a/inc/category.class.php b/inc/Category.class.php
similarity index 50%
rename from inc/category.class.php
rename to inc/Category.class.php
index 589eafed..f992e418 100644
--- a/inc/category.class.php
+++ b/inc/Category.class.php
@@ -3,8 +3,8 @@
/**
* sysPass
*
- * @author nuxsmin
- * @link http://syspass.org
+ * @author nuxsmin
+ * @link http://syspass.org
* @copyright 2012-2015 Rubén Domínguez nuxsmin@syspass.org
*
* This file is part of sysPass.
@@ -24,12 +24,14 @@
*
*/
+namespace SP;
+
defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
/**
* Esta clase es la encargada de realizar las operaciones sobre las categorías de sysPass.
*/
-class SP_Category
+class Category
{
public static $categoryName;
public static $categoryDescription;
@@ -43,46 +45,42 @@ class SP_Category
*/
public static function getCategoryIdByName($categoryName)
{
- $query = "SELECT category_id "
- . "FROM categories "
- . "WHERE category_name = '" . DB::escape($categoryName) . "' LIMIT 1";
- $queryRes = DB::getResults($query, __FUNCTION__);
+ $query = 'SELECT category_id FROM categories WHERE category_name = :name LIMIT 1';
- if ($queryRes === false) {
+ $data['name'] = $categoryName;
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false || DB::$lastNumRows === 0) {
return false;
}
- if (DB::$num_rows == 0) {
- return false;
- } else {
- return $queryRes->category_id;
- }
+ return $queryRes->category_id;
}
/**
* Crear una nueva categoría en la BBDD.
*
- * @return bool
+ * @throws SPException
*/
public static function addCategory()
{
- $query = "INSERT INTO categories "
- . "SET category_name = '" . DB::escape(self::$categoryName) . "',"
- . "category_description = '" . DB::escape(self::$categoryDescription) . "'";
+ if (self::checkDupCategory()){
+ throw new SPException(SPException::SP_WARNING, _('Nombre de categoría duplicado'));
+ }
- if (DB::doQuery($query, __FUNCTION__) === false) {
- return false;
+ $query = 'INSERT INTO categories SET category_name = :name ,category_description = :description';
+
+ $data['name'] = self::$categoryName;
+ $data['description'] = self::$categoryDescription;
+
+ if (DB::getQuery($query, __FUNCTION__, $data) === false) {
+ throw new SPException(SPException::SP_CRITICAL, _('Error al crear la categoría'));
}
self::$categoryLastId = DB::$lastId;
- $message['action'] = _('Nueva Categoría');
- $message['text'][] = SP_Html::strongText(_('Categoría') . ': ') . self::$categoryName;
-
- SP_Log::wrLogInfo($message);
- SP_Common::sendEmail($message);
-
- return true;
+ Log::writeNewLogAndEmail(_('Nueva Categoría'), Html::strongText(_('Categoría') . ': ') . self::$categoryName);
}
/**
@@ -91,54 +89,47 @@ class SP_Category
* @param int $id con el Id de la categoría a consultar
* @return bool
*/
- public static function checkDupCategory($id = NULL)
+ public static function checkDupCategory($id = null)
{
- if ($id === NULL) {
- $query = "SELECT category_id "
- . "FROM categories "
- . "WHERE category_name = '" . DB::escape(self::$categoryName) . "'";
+ if (is_null($id)) {
+ $query = 'SELECT category_id FROM categories WHERE category_name = :name';
} else {
- $query = "SELECT category_id "
- . "FROM categories "
- . "WHERE category_name = '" . DB::escape(self::$categoryName) . "' AND category_id <> " . $id;
+ $query = 'SELECT category_id FROM categories WHERE category_name = :name AND category_id <> :id';
+
+ $data['id'] = $id;
}
- if (DB::doQuery($query, __FUNCTION__) === false) {
- return false;
- }
+ $data['name'] = self::$categoryName;
- if (count(DB::$last_result) >= 1) {
- return false;
- }
-
- return true;
+ return (DB::getQuery($query, __FUNCTION__, $data) === false || DB::$lastNumRows >= 1);
}
/**
* Eliminar una categoría de la BBDD.
*
* @param int $id con el id de la categoría
- * @return bool
+ * @throws SPException
*/
- public static function delCategory($id)
+ public static function deleteCategory($id)
{
- $categoryName = self::getCategoryNameById($id);
+ $resCategoryUse = self::checkCategoryInUse($id);
- $query = "DELETE FROM categories "
- . "WHERE category_id = " . (int)$id . " LIMIT 1";
-
- if (DB::doQuery($query, __FUNCTION__) === false) {
- return false;
+ if ($resCategoryUse !== true) {
+ throw new SPException(SPException::SP_WARNING, _('No es posible eliminar') . ';;' . _('Categoría en uso por:') . ';;' . $resCategoryUse);
}
- $message['action'] = _('Eliminar Categoría');
- $message['text'][] = SP_Html::strongText(_('Categoría') . ': ') . $categoryName . ' (' . $id . ')';
+ $curCategoryName = self::getCategoryNameById($id);
- SP_Log::wrLogInfo($message);
- SP_Common::sendEmail($message);
+ $query = 'DELETE FROM categories WHERE category_id = :id LIMIT 1';
- return true;
+ $data['id'] = $id;
+
+ if (DB::getQuery($query, __FUNCTION__, $data) === false) {
+ throw new SPException(SPException::SP_CRITICAL, _('Error al eliminar la categoría'));
+ }
+
+ Log::writeNewLogAndEmail(_('Eliminar Categoría'), Html::strongText(_('Categoría') . ': ') . $curCategoryName . ' (' . $id . ')');
}
/**
@@ -149,10 +140,11 @@ class SP_Category
*/
public static function getCategoryNameById($id)
{
- $query = "SELECT category_name "
- . "FROM categories "
- . "WHERE category_id = " . (int)$id;
- $queryRes = DB::getResults($query, __FUNCTION__);
+ $query = 'SELECT category_name FROM categories WHERE category_id = :id LIMIT 1';
+
+ $data['id'] = $id;
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
if ($queryRes === false) {
return false;
@@ -165,28 +157,29 @@ class SP_Category
* Actualizar una categoría en la BBDD con el id.
*
* @param int $id con el Id de la categoría a consultar
- * @return bool
+ * @throws SPException
*/
public static function updateCategory($id)
{
- $categoryName = self::getCategoryNameById($id);
-
- $query = "UPDATE categories "
- . "SET category_name = '" . DB::escape(self::$categoryName) . "',"
- . "category_description = '" . DB::escape(self::$categoryDescription) . "' "
- . "WHERE category_id = " . (int)$id . " LIMIT 1";
-
- if (DB::doQuery($query, __FUNCTION__) === false) {
- return false;
+ if (self::checkDupCategory($id)){
+ throw new SPException(SPException::SP_WARNING, _('Nombre de categoría duplicado'));
}
- $message['action'] = _('Modificar Categoría');
- $message['text'][] = SP_Html::strongText(_('Categoría') . ': ') . $categoryName . ' > ' . self::$categoryName;
+ $curCategoryName = self::getCategoryNameById($id);
- SP_Log::wrLogInfo($message);
- SP_Common::sendEmail($message);
+ $query = 'UPDATE categories '
+ . 'SET category_name = :name, category_description = :description '
+ . 'WHERE category_id = :id LIMIT 1';
- return true;
+ $data['name'] = self::$categoryName;
+ $data['description'] = self::$categoryDescription;
+ $data['id'] = $id;
+
+ if (DB::getQuery($query, __FUNCTION__, $data) === false) {
+ throw new SPException(SPException::SP_CRITICAL, _('Error al actualizar la categoría'));
+ }
+
+ Log::writeNewLogAndEmail(_('Modificar Categoría'), Html::strongText(_('Categoría') . ': ') . $curCategoryName . ' > ' . self::$categoryName);
}
/**
@@ -219,24 +212,26 @@ class SP_Category
/**
* Obtiene el listado de categorías.
*
- * @param int $id con el Id de la categoría
+ * @param int $id con el Id de la categoría
* @param bool $retAssocArray para devolver un array asociativo
- * @return array con en id de categorioa como clave y en nombre como valor
+ * @return array con el id de categoria como clave y en nombre como valor
*/
- public static function getCategories($id = NULL, $retAssocArray = false)
+ public static function getCategories($id = null, $retAssocArray = false)
{
- $query = "SELECT category_id,"
- . "category_name,"
- . "category_description "
- . "FROM categories ";
+ $query = 'SELECT category_id, category_name,category_description FROM categories ';
+
+ $data = null;
if (!is_null($id)) {
- $query .= "WHERE category_id = " . (int)$id . " LIMIT 1";
+ $query .= "WHERE category_id = :id LIMIT 1";
+ $data['id'] = $id;
} else {
$query .= "ORDER BY category_name";
}
- $queryRes = DB::getResults($query, __FUNCTION__, true);
+ DB::setReturnArray();
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
if ($queryRes === false) {
return array();
@@ -286,17 +281,37 @@ class SP_Category
*/
private static function getCategoriesInAccounts($id)
{
- $query = "SELECT COUNT(*) as uses "
- . "FROM accounts "
- . "WHERE account_categoryId = " . (int)$id;
+ $query = 'SELECT account_id FROM accounts WHERE account_categoryId = :id';
- $queryRes = DB::getResults($query, __FUNCTION__);
+ $data['id'] = $id;
- if ($queryRes === false) {
- return false;
- }
+ DB::getQuery($query, __FUNCTION__, $data);
- return $queryRes->uses;
+ return DB::$lastNumRows;
}
+ /**
+ * Crear una categoría y devolver el id si existe o de la nueva
+ *
+ * @param $name string El nombre de la categoría
+ * @param $description string La descripción de la categoría
+ * @return int
+ */
+ public static function addCategoryReturnId($name, $description = ''){
+ // Comprobamos si existe la categoría o la creamos
+ $newCategoryId = self::getCategoryIdByName($name);
+
+ if ($newCategoryId == 0) {
+ self::$categoryName = $name;
+ self::$categoryDescription = $description;
+
+ try {
+ self::addCategory();
+ $newCategoryId = self::$categoryLastId;
+ } catch (SPException $e){
+ }
+ }
+
+ return (int)$newCategoryId;
+ }
}
diff --git a/inc/Common.class.php b/inc/Common.class.php
new file mode 100644
index 00000000..e63f1db5
--- /dev/null
+++ b/inc/Common.class.php
@@ -0,0 +1,129 @@
+.
+ *
+ */
+
+namespace SP;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+/**
+ * Esta clase es encargada de ejecutar acciones comunes para las funciones
+ */
+class Common
+{
+ /**
+ * Devuelve una respuesta en formato XML con el estado y el mensaje.
+ *
+ * @param string $description mensaje a devolver
+ * @param int $status devuelve el estado
+ * @return bool
+ */
+ public static function printXML($description, $status = 1)
+ {
+ if (!is_string($description)) {
+ return false;
+ }
+
+ $arrStrFrom = array("&", "<", ">", "\"", "\'");
+ $arrStrTo = array("&", "<", ">", """, "'");
+
+ $cleanDescription = str_replace($arrStrFrom, $arrStrTo, $description);
+
+ $xml = "\n";
+ $xml .= "\n" . $status . "\n " . $cleanDescription . "\n";
+
+ header("Content-Type: application/xml");
+ exit($xml);
+ }
+
+ /**
+ * Devuelve una respuesta en formato JSON con el estado y el mensaje.
+ *
+ * @param string|array $data mensaje a devolver
+ * @param int $status devuelve el estado
+ * @param string $action con la accion a realizar
+ * @return bool
+ */
+ public static function printJSON($data, $status = 1, $action = '')
+ {
+ if (!is_string($data) && !is_array($data)) {
+ return false;
+ }
+
+ $arrStrFrom = array("\\", '"', "'");
+ $arrStrTo = array("\\", '\"', "\'");
+
+ if (!is_array($data)) {
+ $json = array(
+ 'status' => $status,
+ 'description' => str_replace($arrStrFrom, $arrStrTo, $data),
+ 'action' => $action
+ );
+ } else {
+ array_walk($data,
+ function (&$value, &$key) use ($arrStrFrom, $arrStrTo) {
+ return str_replace($arrStrFrom, $arrStrTo, $value);
+ }
+ );
+
+ $data['status'] = $status;
+ $data['action'] = $action;
+ $json = $data;
+ }
+
+ header('Content-type: application/json');
+ exit(json_encode($json));
+ }
+
+ /**
+ * Devuelve un hash para verificación de formularios.
+ * Esta función genera un hash que permite verificar la autenticidad de un formulario
+ *
+ * @param bool $new si es necesrio regenerar el hash
+ * @return string con el hash de verificación
+ */
+ public static function getSessionKey($new = false)
+ {
+ $hash = sha1(time());
+
+ // Generamos un nuevo hash si es necesario y lo guardamos en la sesión
+ if (is_null(Session::getSecurityKey()) || $new === true) {
+ Session::setSecurityKey($hash);
+ return $hash;
+ }
+
+ return Session::getSecurityKey();
+ }
+
+ /**
+ * Comprobar el hash de verificación de formularios.
+ *
+ * @param string $key con el hash a comprobar
+ * @return bool|string si no es correcto el hash devuelve bool. Si lo es, devuelve el hash actual.
+ */
+ public static function checkSessionKey($key)
+ {
+ return (!is_null(Session::getSecurityKey()) && Session::getSecurityKey() == $key);
+ }
+}
\ No newline at end of file
diff --git a/inc/Config.class.php b/inc/Config.class.php
new file mode 100644
index 00000000..000843c3
--- /dev/null
+++ b/inc/Config.class.php
@@ -0,0 +1,491 @@
+.
+ *
+ */
+
+namespace SP;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+/**
+ * Esta clase es responsable de leer y escribir la configuración del archivo config.php
+ * y en la base de datos
+ */
+class Config
+{
+ /**
+ * @var array
+ */
+ private static $_config;
+ /**
+ * @var array
+ */
+ private static $_cache = array();
+ /**
+ * @var bool
+ */
+ private static $_init = false;
+
+ /**
+ * @param null $key La clave a obtener
+ * @return mixed
+ */
+ public static function getArrConfigValue($key = null)
+ {
+ if (!is_null($key) && isset(self::$_config[$key])) {
+ return self::$_config[$key];
+ }
+
+ return self::$_config;
+ }
+
+ /**
+ * @param $key string La clave a actualizar
+ * @param $value mixed El valor a actualizar
+ */
+ public static function setArrConfigValue($key, $value)
+ {
+// if (isset(self::$_config[$key])) {
+ self::$_config[$key] = $value;
+// }
+ }
+
+ /**
+ * Obtener un array con la configuración almacenada en la BBDD.
+ *
+ * @return bool
+ */
+ public static function getConfigDb()
+ {
+ $query = 'SELECT config_parameter, config_value FROM config';
+
+ $queryRes = DB::getResults($query, __FUNCTION__);
+
+ if ($queryRes === false) {
+ return false;
+ }
+
+ foreach ($queryRes as $config) {
+ self::$_config[$config->config_parameter] = $config->config_value;
+ }
+ }
+
+ /**
+ * Guardar la configuración en la BBDD.
+ *
+ * @param bool $mkInsert realizar un 'insert'?
+ * @return bool
+ */
+ public static function writeConfigDb($mkInsert = false)
+ {
+ foreach (self::$_config as $param => $value) {
+ if ($mkInsert) {
+ $query = 'INSERT INTO config VALUES (:param,:value) ON DUPLICATE KEY UPDATE config_value = :valuedup';
+
+ $data['valuedup'] = $value;
+ } else {
+ $query = 'UPDATE config SET config_value = :value WHERE config_parameter = :param';
+ }
+
+ $data['param'] = $param;
+ $data['value'] = $value;
+
+ if (DB::getQuery($query, __FUNCTION__, $data) === false) {
+ return false;
+ }
+ }
+
+ Log::writeNewLogAndEmail(_('Configuración'), _('Modificar configuración'));
+
+ return true;
+ }
+
+ /**
+ * Cargar la configuración desde la BBDD a variable global $CFG.
+ *
+ * @param bool $force reescribir la variable global $CFG?
+ * @return bool
+ */
+ public static function getDBConfig($force = false)
+ {
+ global $CFG;
+
+ if (isset ($CFG) && !$force) {
+ return true;
+ }
+
+ $query = 'SELECT config_parameter, config_value FROM config';
+
+ $queryRes = DB::getResults($query, __FUNCTION__);
+
+ if ($queryRes === false) {
+ return false;
+ }
+
+ foreach ($queryRes as $config) {
+ $cfgParam = $config->config_parameter;
+ $cfgValue = $config->config_value;
+
+ if (strstr($cfgValue, "||")) {
+ $cfgValue = explode("||", $cfgValue);
+ }
+
+ $CFG["$cfgParam"] = $cfgValue;
+ }
+
+ return true;
+ }
+
+ /**
+ * Obtiene un valor de configuración desde el archivo config.php
+ *
+ * @param string $key clave
+ * @param string $default = null valor por defecto
+ * @return string el valor o $default
+ */
+ public static function getValue($key, $default = null)
+ {
+ $param = Cache::getSessionCacheConfigValue($key);
+
+ return (!is_null($param)) ? $param : $default;
+ }
+
+ /**
+ * Lista todas las claves de configuración guardadas en config.php.
+ *
+ * @param bool $full obtener todas las claves y sus valores
+ * @return array con nombres de claves
+ */
+ public static function getKeys($full = false)
+ {
+ self::readData();
+
+ if ($full) {
+ return self::$_cache;
+ }
+
+ return array_keys(self::$_cache);
+ }
+
+ /**
+ * Carga el archivo de configuración y lo guarda en caché.
+ *
+ * @return bool
+ */
+ private static function readData()
+ {
+ if (self::$_init) {
+ return true;
+ }
+
+ $configFile = self::getConfigFile();;
+
+ if (!file_exists($configFile)) {
+ return false;
+ }
+
+ // Include the file, save the data from $CONFIG
+ include_once $configFile;
+
+ if (isset($CONFIG) && is_array($CONFIG)) {
+ self::$_cache = $CONFIG;
+ }
+
+ // We cached everything
+ self::$_init = true;
+
+ return true;
+ }
+
+ /**
+ * Devolver la ruta al archivo de configuración
+ *
+ * @return string Con la ruta
+ */
+ private static function getConfigFile()
+ {
+ return Init::$SERVERROOT . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'config.php';
+ }
+
+ /**
+ * Elimina una clave de la configuración.
+ * Esta función elimina una clave de configmgmt.php. Si no tiene permiso
+ * de escritura en configmgmt.php, devolverá false.
+ *
+ * @param string $key clave
+ * @return bool
+ */
+ public static function deleteKey($key)
+ {
+ self::readData();
+
+ if (isset(self::$_cache[$key])) {
+ // Eliminar la clave de la caché
+ unset(self::$_cache[$key]);
+
+ // Guardar los cambios en la configuración
+ self::writeData();
+ }
+
+ return true;
+ }
+
+ /**
+ * Escribe en archivo de configuración.
+ *
+ * @return bool
+ */
+ public static function writeData()
+ {
+ // Ordenar las claves de la configuración
+ ksort(self::$_cache);
+
+ $content = "addDescription(_('Modificar configuración'));
+ $log->addDescription(_('Parámetro') . ': ' . $param);
+ $log->addDescription(_('Valor') . ': ' . $value);
+ $log->writeLog();
+
+ if ($email === true) {
+ Email::sendEmail($log);
+ }
+
+ return true;
+ }
+
+ /**
+ * Comprueba si la clave temporal es válida
+ *
+ * @param string $pass clave a comprobar
+ * @return bool
+ */
+ public static function checkTempMasterPass($pass)
+ {
+ $passTime = self::getConfigDbValue('tempmaster_passtime');
+ $passMaxTime = self::getConfigDbValue('tempmaster_maxtime');
+ $attempts = self::getConfigDbValue('tempmaster_attempts');
+
+ // Comprobar si el tiempo de validez se ha superado
+ if ($passTime !== false && time() - $passTime > $passMaxTime || $attempts >= 5) {
+ self::setConfigDbValue('tempmaster_pass', '', false);
+ self::setConfigDbValue('tempmaster_passiv', '', false);
+ self::setConfigDbValue('tempmaster_passhash', '', false);
+
+ return false;
+ }
+
+ $isValid = (self::getConfigDbValue('tempmaster_passhash') == sha1($pass));
+
+ if (!$isValid) {
+ self::setConfigDbValue('tempmaster_attempts', $attempts + 1, false);
+ }
+
+ return $isValid;
+ }
+
+ /**
+ * Obtiene un valor desde la configuración en la BBDD.
+ *
+ * @param string $param con el parámetro de configuración
+ * @return false|string con el valor
+ */
+ public static function getConfigDbValue($param)
+ {
+ $query = 'SELECT config_value FROM config WHERE config_parameter = :parameter LIMIT 1';
+
+ $data['parameter'] = $param;
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+ return false;
+ }
+
+ return $queryRes->config_value;
+ }
+
+ /**
+ * Devuelve la clave maestra que ha sido encriptada con la clave temporal
+ *
+ * @param $pass string con la clave utilizada para encriptar
+ * @return string con la clave maestra desencriptada
+ */
+ public static function getTempMasterPass($pass)
+ {
+ $passLogin = hex2bin(self::getConfigDbValue('tempmaster_pass'));
+ $passLoginIV = hex2bin(self::getConfigDbValue('tempmaster_passiv'));
+
+ return Crypt::getDecrypt($passLogin, $passLoginIV, $pass);
+ }
+
+ /**
+ * Obtener la configuración de sysPass
+ *
+ * @return array|bool
+ */
+ public static function getConfig()
+ {
+ if (self::readData()) {
+ return self::$_cache;
+ }
+
+ return false;
+ }
+}
diff --git a/inc/Controller.class.php b/inc/Controller.class.php
new file mode 100644
index 00000000..1d083f10
--- /dev/null
+++ b/inc/Controller.class.php
@@ -0,0 +1,189 @@
+.
+ *
+ */
+
+namespace SP\Controller;
+
+use SP\Session;
+use SP\SPException;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+/**
+ * Clase base para los controladores
+ */
+abstract class Controller
+{
+ /**
+ * Constantes de errores
+ */
+ const ERR_UNAVAILABLE = 0;
+ const ERR_ACCOUNT_NO_PERMISSION = 1;
+ const ERR_PAGE_NO_PERMISSION = 2;
+ const ERR_UPDATE_MPASS = 3;
+ const ERR_OPERATION_NO_PERMISSION = 4;
+
+ /**
+ * @var \SP\Template Instancia del motor de plantillas a utilizar
+ */
+ public $view;
+ /**
+ * @var int Módulo a usar
+ */
+ protected $_action;
+
+ /**
+ * Constructor
+ *
+ * @param $template \SP\Template con instancia de plantilla
+ */
+ public function __construct(\SP\Template $template = null)
+ {
+ global $timeStart;
+
+ if (is_null($template)) {
+ $this->view = $this->getTemplate();
+ } else {
+ $this->view = $template;
+ }
+
+ $this->view->assign('timeStart', $timeStart);
+ }
+
+ /**
+ * Obtener una nueva instancia del motor de plantillas.
+ *
+ * @param null $template string con el nombre de la plantilla
+ * @return \SP\Template
+ */
+ protected function getTemplate($template = null)
+ {
+ return new \SP\Template($template);
+ }
+
+ /**
+ * @return int El id de la acción
+ */
+ public function getAction()
+ {
+ return $this->_action;
+ }
+
+ /**
+ * Establecer el módulo a presentar.
+ *
+ * @param int $action El id de la acción
+ */
+ public function setAction($action)
+ {
+ $this->_action = $action;
+ }
+
+ /**
+ * Renderizar los datos de la plantilla
+ */
+ public function view()
+ {
+ echo $this->view->render();
+ }
+
+ /**
+ * Obtener los datos para la vista de depuración
+ */
+ public function getDebug()
+ {
+ global $memInit;
+
+ $this->view->addTemplate('debug');
+
+ $this->view->assign('time', (\SP\Init::microtime_float() - $this->view->timeStart));
+ $this->view->assign('memInit', $memInit / 1000);
+ $this->view->assign('memEnd', memory_get_usage() / 1000);
+ }
+
+ /**
+ * Establecer la instancia del motor de plantillas a utilizar.
+ *
+ * @param \SP\Template $template
+ */
+ protected function setTemplate(\SP\Template $template)
+ {
+ $this->view = $template;
+ }
+
+ /**
+ * Comprobar si está permitido el acceso al módulo/página.
+ *
+ * @param null $action La acción a comprobar
+ * @return bool
+ */
+ protected function checkAccess($action = null)
+ {
+ $checkAction = $this->_action;
+
+ if (!is_null($action)){
+ $checkAction = $action;
+ }
+
+ if (!Session::getUserIsAdminApp() && !\SP\Acl::checkUserAccess($checkAction)) {
+// $this->showError(self::ERR_PAGE_NO_PERMISSION);
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Establecer la plantilla de error con el código indicado.
+ *
+ * @param $type int con el tipo de error
+ */
+ protected function showError($type, $reset = true, $fancy = false)
+ {
+ $errorsTypes = array(
+ self::ERR_UNAVAILABLE => array('txt' => _('Opción no disponible'), 'hint' => _('Consulte con el administrador')),
+ self::ERR_ACCOUNT_NO_PERMISSION => array('txt' => _('No tiene permisos para acceder a esta cuenta'), 'hint' => _('Consulte con el administrador')),
+ self::ERR_PAGE_NO_PERMISSION => array('txt' => _('No tiene permisos para acceder a esta página'), 'hint' => _('Consulte con el administrador')),
+ self::ERR_OPERATION_NO_PERMISSION => array('txt' => _('No tiene permisos para realizar esta operación'), 'hint' => _('Consulte con el administrador')),
+ self::ERR_UPDATE_MPASS => array('txt' => _('Clave maestra actualizada'), 'hint' => _('Reinicie la sesión para cambiarla'))
+ );
+
+ if ($reset) {
+ $this->view->resetTemplates();
+ }
+
+ if ($fancy) {
+ $this->view->addTemplate('errorfancy');
+ } else {
+ $this->view->addTemplate('error');
+ }
+
+ $this->view->append('errors',
+ array(
+ 'type' => SPException::SP_WARNING,
+ 'description' => $errorsTypes[$type]['txt'],
+ 'hint' => $errorsTypes[$type]['hint'])
+ );
+ }
+}
\ No newline at end of file
diff --git a/inc/crypt.class.php b/inc/Crypt.class.php
similarity index 74%
rename from inc/crypt.class.php
rename to inc/Crypt.class.php
index 0269d186..2bd553d5 100644
--- a/inc/crypt.class.php
+++ b/inc/Crypt.class.php
@@ -23,12 +23,14 @@
*
*/
+namespace SP;
+
defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
/**
* Esta clase es la encargada de realizar el encriptad/desencriptado de claves
*/
-class SP_Crypt
+class Crypt
{
public static $strInitialVector;
@@ -92,19 +94,19 @@ class SP_Crypt
}
/**
- * Generar una clave encriptada.
+ * Generar datos encriptados.
* Esta función llama a los métodos privados para encriptar datos.
*
- * @param string $pwd con la clave a encriptar
+ * @param string $data con los datos a encriptar
* @param string $masterPwd con la clave maestra
* @return bool
*/
- public static function mkEncrypt($pwd, $masterPwd = "")
+ public static function mkEncrypt($data, $masterPwd = "")
{
$masterPwd = (!$masterPwd) ? self::getSessionMasterPass() : $masterPwd;
self::$strInitialVector = self::getIV();
- $cryptValue = self::encrypt($pwd, $masterPwd, self::$strInitialVector);
+ $cryptValue = self::encrypt($data, $masterPwd, self::$strInitialVector);
return $cryptValue;
}
@@ -116,19 +118,23 @@ class SP_Crypt
*/
public static function getSessionMasterPass()
{
- return self::getDecrypt($_SESSION["mPass"], $_SESSION['mPassPwd'], $_SESSION['mPassIV']);
+ return self::getDecrypt(Session::getMPass(), Session::getMPassIV(), Session::getMPassPwd());
}
/**
* Desencriptar datos con la clave maestra.
*
- * @param string $strEncrypted con los datos a desencriptar
- * @param string $strPassword con la clave maestra
- * @param string $cryptIV con el IV
+ * @param string $strEncrypted Los datos a desencriptar
+ * @param string $cryptIV con el IV
+ * @param string $strPassword La clave maestra
* @return string con los datos desencriptados
*/
- public static function getDecrypt($strEncrypted, $strPassword, $cryptIV)
+ public static function getDecrypt($strEncrypted, $cryptIV, $strPassword = null)
{
+ if (is_null($strPassword)){
+ $strPassword = self::getSessionMasterPass();
+ }
+
$mcryptRes = self::getMcryptResource();
mcrypt_generic_init($mcryptRes, $strPassword, $cryptIV);
$strDecrypted = trim(mdecrypt_generic($mcryptRes, $strEncrypted));
@@ -149,7 +155,7 @@ class SP_Crypt
$source = MCRYPT_DEV_URANDOM;
$mcryptRes = self::getMcryptResource();
- if (SP_Util::runningOnWindows() && (!defined('PHP_VERSION_ID') || PHP_VERSION_ID < 50300)) {
+ if (Util::runningOnWindows() && (!defined('PHP_VERSION_ID') || PHP_VERSION_ID < 50300)) {
$source = MCRYPT_RAND;
}
@@ -208,4 +214,42 @@ class SP_Crypt
{
return mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_CBC, '');
}
+
+ /**
+ * Encriptar datos. Devuelve un array con los datos encriptados y el IV.
+ *
+ * @param $data string Los datos a encriptar
+ * @throws SPException
+ * @return array
+ */
+ public static function encryptData($data)
+ {
+ if (empty($data)) {
+ return array('data' => '', 'iv' => '');
+ }
+
+ // Comprobar el módulo de encriptación
+ if (!Crypt::checkCryptModule()) {
+ throw new SPException(
+ SPException::SP_CRITICAL,
+ _('Error interno'),
+ _('No se puede usar el módulo de encriptación')
+ );
+ }
+
+ // Encriptar datos
+ $encData['data'] = Crypt::mkEncrypt($data);
+
+ if (!empty($data) && ($encData['data'] === false || is_null($encData['data']))) {
+ throw new SPException(
+ SPException::SP_CRITICAL,
+ _('Error interno'),
+ _('Error al generar datos cifrados')
+ );
+ }
+
+ $encData['iv'] = Crypt::$strInitialVector;
+
+ return $encData;
+ }
}
\ No newline at end of file
diff --git a/inc/CryptPKI.class.php b/inc/CryptPKI.class.php
new file mode 100644
index 00000000..7e9311f8
--- /dev/null
+++ b/inc/CryptPKI.class.php
@@ -0,0 +1,146 @@
+.
+ *
+ */
+
+namespace SP;
+
+use phpseclib\Exception\FileNotFoundException;
+
+/**
+ * Class CryptPKI para el manejo de las funciones para PKI
+ *
+ * @package SP
+ */
+class CryptPKI
+{
+ /**
+ * @throws SPException
+ */
+ public function __construct()
+ {
+ if (!file_exists($this->getPublicKeyFile()) || !file_exists($this->getPrivateKeyFile())) {
+ if (!$this->createKeys()) {
+ throw new SPException(SPException::SP_CRITICAL, _('No es posible generar las claves RSA'));
+ }
+ }
+ }
+
+ /**
+ * Devuelve la ruta al archivo de la clave pública
+ *
+ * @return string
+ */
+ private function getPublicKeyFile()
+ {
+ return Init::$SERVERROOT . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'pubkey.pem';
+ }
+
+ /**
+ * Devuelve la ruta al archivo de la clave privada
+ *
+ * @return string
+ */
+ private function getPrivateKeyFile()
+ {
+ return Init::$SERVERROOT . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'key.pem';
+ }
+
+ /**
+ * Crea el par de claves pública y privada
+ */
+ public function createKeys()
+ {
+ $Rsa = new \phpseclib\Crypt\RSA();
+ $keys = $Rsa->createKey(1024);
+
+ $priv = file_put_contents($this->getPrivateKeyFile(), $keys['privatekey']);
+ $pub = file_put_contents($this->getPublicKeyFile(), $keys['publickey']);
+
+ chmod($this->getPrivateKeyFile(), 0600);
+
+ return ($priv && $pub);
+ }
+
+ /**
+ * Encriptar datos con la clave pública
+ *
+ * @param string $data los datos a encriptar
+ * @return string
+ */
+ public function encryptRSA($data)
+ {
+ $Rsa = new \phpseclib\Crypt\RSA();
+ $Rsa->setEncryptionMode(\phpseclib\Crypt\RSA::ENCRYPTION_PKCS1);
+ $Rsa->loadKey($this->getPublicKey());
+
+ return $Rsa->encrypt($data);
+ }
+
+ /**
+ * Devuelve la clave pública desde el archivo
+ *
+ * @return string
+ */
+ public function getPublicKey()
+ {
+ $file = $this->getPublicKeyFile();
+
+ if (!file_exists($file)) {
+ throw new FileNotFoundException(_('El archivo de clave no existe'));
+ }
+
+ return file_get_contents($file);
+ }
+
+ /**
+ * Desencriptar datos cifrados con la clave pública
+ *
+ * @param string $data los datos a desencriptar
+ * @return string
+ */
+ public function decryptRSA($data)
+ {
+ $Rsa = new \phpseclib\Crypt\RSA();
+ $Rsa->setEncryptionMode(\phpseclib\Crypt\RSA::ENCRYPTION_PKCS1);
+ $Rsa->loadKey($this->getPrivateKey());
+
+ return $Rsa->decrypt($data);
+ }
+
+ /**
+ * Devuelve la clave privada desde el archivo
+ *
+ * @return string
+ */
+ private function getPrivateKey()
+ {
+ $file = $this->getPrivateKeyFile();
+
+ if (!file_exists($file)) {
+ throw new FileNotFoundException(_('El archivo de clave no existe'));
+ }
+
+ return file_get_contents($file);
+ }
+}
\ No newline at end of file
diff --git a/inc/CsvImport.class.php b/inc/CsvImport.class.php
new file mode 100644
index 00000000..d0ba9528
--- /dev/null
+++ b/inc/CsvImport.class.php
@@ -0,0 +1,48 @@
+.
+ *
+ */
+
+namespace SP;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+class CsvImport extends CsvImportBase
+{
+
+ /**
+ * Iniciar la importación desde XML.
+ *
+ * @throws SPException
+ * @return bool
+ */
+ public function doImport()
+ {
+ try{
+ $this->_file->readFileToArray();
+ $this->processAccounts();
+ } catch (SPException $e){
+ throw $e;
+ }
+ }
+}
\ No newline at end of file
diff --git a/inc/CsvImportBase.class.php b/inc/CsvImportBase.class.php
new file mode 100644
index 00000000..f3551542
--- /dev/null
+++ b/inc/CsvImportBase.class.php
@@ -0,0 +1,149 @@
+.
+ *
+ */
+
+namespace SP;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+/**
+ * Clase CsvImportBase para base de clases de importación desde archivos CSV
+ *
+ * @package SP
+ */
+abstract class CsvImportBase extends ImportBase
+{
+ /**
+ * @var int
+ */
+ protected $_numFields = 7;
+ /**
+ * @var array
+ */
+ protected $_mapFields = array();
+ /**
+ * @var string
+ */
+ protected $_fieldDelimiter = ';';
+
+ /**
+ * Constructor
+ *
+ * @param $file FileImport Instancia de la clase FileImport
+ * @throws SPException
+ */
+ public function __construct($file)
+ {
+ try {
+ $this->_file = $file;
+ } catch (SPException $e) {
+ throw $e;
+ }
+ }
+
+ /**
+ * @param string $fieldDelimiter
+ */
+ public function setFieldDelimiter($fieldDelimiter)
+ {
+ $this->_fieldDelimiter = $fieldDelimiter;
+ }
+
+ /**
+ * @param int $numFields
+ */
+ public function setNumFields($numFields)
+ {
+ $this->_numFields = $numFields;
+ }
+
+ /**
+ * @param array $mapFields
+ */
+ public function setMapFields($mapFields)
+ {
+ $this->_mapFields = $mapFields;
+ }
+
+ /**
+ * Obtener los datos de las entradas de sysPass y crearlas
+ *
+ * @throws SPException
+ */
+ protected function processAccounts()
+ {
+ $line = 0;
+
+ $lines = $this->_file->getFileContent();
+
+ foreach($lines as $data) {
+ $line++;
+ $fields = explode($this->_fieldDelimiter, $data);
+ $numfields = count($fields);
+
+ // Comprobar el número de campos de la línea
+ if ($numfields !== $this->_numFields) {
+ throw new SPException(
+ SPException::SP_CRITICAL,
+ sprintf(_('El número de campos es incorrecto (%d)'), $numfields),
+ sprintf(_('Compruebe el formato del archivo CSV en línea %s'), $line)
+ );
+ }
+
+ // Eliminar las " del principio/fin de los campos
+ array_walk($fields,
+ function(&$value, $key){
+ $value = trim($value, '"');
+ }
+ );
+
+ // Asignar los valores del array a variables
+ list($accountName, $customerName, $categoryName, $url, $login, $password, $notes) = $fields;
+
+ // Obtener los ids de cliente, categoría y la clave encriptada
+ $customerId = Customer::addCustomerReturnId($customerName);
+ $categoryId = Category::addCategoryReturnId($categoryName);
+ $pass = Crypt::encryptData($password);
+
+ // Crear la nueva cuenta
+ $this->setAccountName($accountName);
+ $this->setAccountLogin($login);
+ $this->setCategoryId($categoryId);
+ $this->setCustomerId($customerId);
+ $this->setAccountNotes($notes);
+ $this->setAccountUrl($url);
+ $this->setAccountPass($pass['data']);
+ $this->setAccountPass($pass['iv']);
+
+ if (!$this->addAccount()) {
+ $log = new Log(_('Importar Cuentas'));
+ $log->addDescription(_('Error importando cuenta'));
+ $log->addDescription(sprintf(_('Error procesando línea %s'), $line));
+ $log->writeLog();
+ } else {
+ Log::writeNewLog(_('Importar Cuentas'), sprintf(_('Cuenta importada: %s'), $accountName));
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/inc/CustomFieldDef.class.php b/inc/CustomFieldDef.class.php
new file mode 100644
index 00000000..3a2f5a06
--- /dev/null
+++ b/inc/CustomFieldDef.class.php
@@ -0,0 +1,167 @@
+.
+ *
+ */
+
+namespace SP;
+
+class CustomFieldDef extends CustomFieldsBase
+{
+ /**
+ * @param string $name El nombre del campo
+ * @param int $type El tipo de campo
+ * @param int $module El id del módulo asociado
+ */
+ public function __construct($name, $type, $module)
+ {
+ if (!$name || !$type || !$module) {
+ throw new \InvalidArgumentException(_('Parámetros incorrectos'));
+ }
+
+ $this->_name = $name;
+ $this->_type = $type;
+ $this->_module = $module;
+ }
+
+ /**
+ * Eliminar una definición de campo personalizado.
+ *
+ * @param $id int El id del campo personalizado
+ * @return bool
+ */
+ public static function deleteCustomField($id)
+ {
+ $query = 'DELETE FROM customFieldsDef WHERE customfielddef_id= :id LIMIT 1';
+
+ $data['id'] = $id;
+
+ $queryRes = DB::getQuery($query, __FUNCTION__, $data);
+
+ return $queryRes && CustomFields::deleteCustomFieldForDefinition($id);
+ }
+
+ /**
+ * Devolver los datos de definiciones de campos personalizados
+ *
+ * @param int $customFieldId El id del campo personalizado
+ * @param bool|false $returnRawData Devolver los datos de la consulta sin formatear
+ * @return array|bool
+ */
+ public static function getCustomFields($customFieldId = null, $returnRawData = false)
+ {
+ $query = 'SELECT customfielddef_id, customfielddef_module, customfielddef_field FROM customFieldsDef';
+
+ if (!is_null($customFieldId)) {
+ $query .= ' WHERE customfielddef_id = :id LIMIT 1';
+ $data['id'] = $customFieldId;
+ } else {
+ $query .= ' ORDER BY customfielddef_module';
+ }
+
+ if (!$returnRawData) {
+ DB::setReturnArray();
+ }
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+ return array();
+ }
+
+ if (!$returnRawData) {
+ $customFields = array();
+
+ foreach ($queryRes as $customField) {
+ /**
+ * @var CustomFieldDef
+ */
+ $field = unserialize($customField->customfielddef_field);
+
+ $attribs = new \stdClass();
+ $attribs->id = $customField->customfielddef_id;
+ $attribs->module = self::getFieldsModules($customField->customfielddef_module);
+ $attribs->name = $field->getName();
+ $attribs->typeName = self::getFieldsTypes($field->getType());
+ $attribs->type = $field->getType();
+
+ $customFields[] = $attribs;
+ }
+
+ return $customFields;
+ }
+
+ return $queryRes;
+ }
+
+ /**
+ * Añadir nuevo campo personalizado
+ *
+ * @return bool
+ */
+ public function addCustomField()
+ {
+ $query = 'INSERT INTO customFieldsDef SET customfielddef_module = :module, customfielddef_field = :field';
+
+ $data['module'] = $this->_module;
+ $data['field'] = serialize($this);
+
+ $queryRes = DB::getQuery($query, __FUNCTION__, $data);
+
+ return $queryRes;
+ }
+
+ /**
+ * Actualizar campo personalizado
+ *
+ * @return bool
+ */
+ public function updateCustomField()
+ {
+ $curField = self::getCustomFields($this->_id, true);
+
+ $query = 'UPDATE customFieldsDef SET ' .
+ 'customfielddef_module = :module, ' .
+ 'customfielddef_field = :field ' .
+ 'WHERE customfielddef_id= :id LIMIT 1';
+
+ $data['module'] = $this->_module;
+ $data['field'] = serialize($this);
+ $data['id'] = $this->_id;
+
+ $queryRes = DB::getQuery($query, __FUNCTION__, $data);
+
+ if ($queryRes && $curField->customfielddef_module !== $this->_module) {
+ $queryRes = CustomFields::updateCustomFieldModule($this->_module, $this->_id);
+ }
+
+ return $queryRes;
+ }
+
+ /**
+ * @param int $id
+ */
+ public function setId($id)
+ {
+ $this->_id = $id;
+ }
+}
\ No newline at end of file
diff --git a/inc/CustomFields.class.php b/inc/CustomFields.class.php
new file mode 100644
index 00000000..3d783db3
--- /dev/null
+++ b/inc/CustomFields.class.php
@@ -0,0 +1,371 @@
+.
+ *
+ */
+
+namespace SP;
+
+
+class CustomFields extends CustomFieldsBase
+{
+ /**
+ * @var string
+ */
+ private $_value = '';
+ /**
+ * @var int
+ */
+ private $_itemId = 0;
+
+ /**
+ * @param $customFieldDefId
+ * @param $itemId
+ * @param $value
+ */
+ public function __construct($customFieldDefId, $itemId, $value = null)
+ {
+ if (is_null($value) || !$itemId || !$customFieldDefId) {
+ throw new \InvalidArgumentException(_('Parámetros incorrectos'));
+ }
+
+ $fieldDef = CustomFieldDef::getCustomFields($customFieldDefId, true);
+ $field = unserialize($fieldDef->customfielddef_field);
+
+ $this->_id = $customFieldDefId;
+ $this->_module = $fieldDef->customfielddef_module;
+ $this->_name = $field->getName();
+ $this->_type = $field->getType();
+ $this->_itemId = $itemId;
+ $this->_value = $value;
+ }
+
+ /**
+ * Devolver los campos personalizados del módulo
+ *
+ * @param $moduleId int El Id del módulo
+ * @return array
+ */
+ public static function getCustomFieldsForModule($moduleId)
+ {
+ $query = 'SELECT customfielddef_id, ' .
+ 'customfielddef_field ' .
+ 'FROM customFieldsDef ' .
+ 'WHERE customfielddef_module = :module';
+
+ $data['module'] = $moduleId;
+
+ DB::setReturnArray();
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+ return array();
+ }
+
+ $customFields = array();
+
+ foreach ($queryRes as $customField) {
+ /**
+ * @var CustomFieldDef
+ */
+ $field = unserialize($customField->customfielddef_field);
+
+ $attribs = new \stdClass();
+ $attribs->id = $customField->customfielddef_id;
+ $attribs->name = 'cf_' . strtolower(self::cleanFieldName($field->getName()));
+ $attribs->text = $field->getName();
+ $attribs->type = $field->getType();
+ $attribs->typeName = self::getFieldsTypes($field->getType());
+ $attribs->value = '';
+ $attribs->help = $field->getHelp();
+ $attribs->required = $field->isRequired();
+
+ $customFields[] = $attribs;
+ }
+
+ return $customFields;
+ }
+
+ private static function cleanFieldName($name)
+ {
+ return preg_replace('/\W*/', '', $name);
+ }
+
+ /**
+ * Devuelve los datos de los campos personalizados de un elemento
+ *
+ * @param $moduleId int El id del módulo
+ * @param $itemId int EL id del elemento
+ * @return array
+ */
+ public static function getCustomFieldsData($moduleId, $itemId)
+ {
+ $query = 'SELECT customfielddata_id, ' .
+ 'customfielddata_defId, ' .
+ 'customfielddef_id, ' .
+ 'customfielddata_data, ' .
+ 'customfielddata_iv, ' .
+ 'customfielddef_field ' .
+ 'FROM customFieldsData ' .
+ 'RIGHT JOIN customFieldsDef ON customfielddata_defId = customfielddef_id ' .
+ 'WHERE customfielddef_module = :moduleidA ' .
+ 'AND customfielddata_itemId = :itemid ' .
+ 'UNION ' .
+ 'SELECT customfielddata_id, ' .
+ 'customfielddata_defId, ' .
+ 'customfielddef_id, ' .
+ 'customfielddata_data, ' .
+ 'customfielddata_iv, ' .
+ 'customfielddef_field ' .
+ 'FROM customFieldsData ' .
+ 'RIGHT JOIN customFieldsDef ON customfielddata_defId = customfielddef_id ' .
+ 'WHERE customfielddef_module = :moduleidB ' .
+ 'AND ISNULL(customfielddata_itemId)';
+
+ $data['moduleidA'] = $moduleId;
+ $data['moduleidB'] = $moduleId;
+ $data['itemid'] = $itemId;
+
+ DB::setReturnArray();
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+ return array();
+ }
+
+ $customFields = array();
+
+ foreach ($queryRes as $customField) {
+ /**
+ * @var CustomFieldDef
+ */
+ $field = unserialize($customField->customfielddef_field);
+
+ $attribs = new \stdClass();
+ $attribs->id = $customField->customfielddef_id;
+ $attribs->name = 'cf_' . strtolower(self::cleanFieldName($field->getName()));
+ $attribs->text = $field->getName();
+ $attribs->type = $field->getType();
+ $attribs->typeName = self::getFieldsTypes($field->getType());
+ $attribs->value = (!is_null($customField->customfielddata_data)) ? self::formatValue(Crypt::getDecrypt($customField->customfielddata_data, $customField->customfielddata_iv)) : '';
+ $attribs->help = $field->getHelp();
+ $attribs->required = $field->isRequired();
+
+ $customFields[] = $attribs;
+ }
+
+ return $customFields;
+ }
+
+ /**
+ * Formatear el valor del campo
+ *
+ * @param $value string El valor del campo
+ * @return string
+ */
+ private static function formatValue($value)
+ {
+ if (preg_match('#https?://#', $value)) {
+ return '' . $value . '';
+ }
+
+ return $value;
+ }
+
+ /**
+ * Actualiza el módulo de un campo personalizado
+ *
+ * @param $moduleId int El Id del módulo nuevo
+ * @param $defId int La definición del campo
+ * @return bool
+ */
+ public static function updateCustomFieldModule($moduleId, $defId)
+ {
+ $query = 'UPDATE customFieldsData SET ' .
+ 'customfielddata_moduleId = :moduleid ' .
+ 'WHERE customfielddata_defId = :defid';
+
+ $data['moduleid'] = $moduleId;
+ $data['defid'] = $defId;
+
+ $queryRes = DB::getQuery($query, __FUNCTION__, $data);
+
+ return $queryRes;
+ }
+
+ /**
+ * Eliminar los datos de un campo personalizado o los de una definición de campos
+ *
+ * @param int $itemId El Id del elemento asociado al campo
+ * @return bool
+ */
+ public static function deleteCustomFieldForItem($itemId, $moduleId)
+ {
+ $query = 'DELETE FROM customFieldsData ' .
+ 'WHERE customfielddata_itemId = :itemid ' .
+ 'AND customfielddata_moduleId = :moduleid LIMIT 1';
+ $data['itemid'] = $itemId;
+ $data['moduleid'] = $moduleId;
+
+ $queryRes = DB::getQuery($query, __FUNCTION__, $data);
+
+ return $queryRes;
+ }
+
+ /**
+ * Eliminar los datos de un campo personalizado o los de una definición de campos
+ *
+ * @param int $defId El Id de la definición de campos
+ * @return bool
+ */
+ public static function deleteCustomFieldForDefinition($defId)
+ {
+ $query = 'DELETE FROM customFieldsData WHERE customfielddata_defId = :defid';
+ $data['defid'] = $defId;
+
+ $queryRes = DB::getQuery($query, __FUNCTION__, $data);
+
+ return $queryRes;
+ }
+
+ /**
+ * @return int
+ */
+ public function getItemId()
+ {
+ return $this->_itemId;
+ }
+
+ /**
+ * @param int $itemId
+ */
+ public function setItemId($itemId)
+ {
+ $this->_itemId = $itemId;
+ }
+
+ /**
+ * Actualiza los datos de un campo personalizado de un elemento
+ *
+ * @return bool
+ * @throws SPException
+ */
+ public function updateCustomField()
+ {
+ if (!self::checkCustomFieldExists($this->_module, $this->_itemId, $this->_id)) {
+ return $this->addCustomField();
+ }
+
+ if (empty($this->_value)){
+ return self::deleteCustomFieldForItem($this->_itemId, $this->_module);
+ }
+
+ $cryptData = Crypt::encryptData($this->_value);
+
+ $query = 'UPDATE customFieldsData SET ' .
+ 'customfielddata_data = :data, ' .
+ 'customfielddata_iv = :iv ' .
+ 'WHERE customfielddata_moduleId = :moduleid ' .
+ 'AND customfielddata_itemId = :itemid ' .
+ 'AND customfielddata_defId = :defid';
+
+ $data['itemid'] = $this->_itemId;
+ $data['moduleid'] = $this->_module;
+ $data['defid'] = $this->_id;
+ $data['data'] = $cryptData['data'];
+ $data['iv'] = $cryptData['iv'];
+
+ $queryRes = DB::getQuery($query, __FUNCTION__, $data);
+
+ return $queryRes;
+ }
+
+ /**
+ * Comprueba si el elemento tiene campos personalizados con datos
+ *
+ * @param int $moduleId El id del módulo
+ * @param int $itemId El id del elemento
+ * @param null $defId El id de la definición del campo
+ * @return bool
+ */
+ public static function checkCustomFieldExists($moduleId, $itemId, $defId = null)
+ {
+ $query = 'SELECT customfielddata_id ' .
+ 'FROM customFieldsData ' .
+ 'WHERE customfielddata_moduleId = :moduleid ' .
+ 'AND customfielddata_itemId = :itemid ';
+
+ $data['itemid'] = $itemId;
+ $data['moduleid'] = $moduleId;
+
+ if (!is_null($defId)) {
+ $query .= 'AND customfielddata_defId = :defid';
+ $data['defid'] = $defId;
+ }
+
+ DB::getQuery($query, __FUNCTION__, $data);
+
+ return (DB::$lastNumRows >= 1);
+ }
+
+ /**
+ * Añade los datos de un campo personalizado de un elemento
+ *
+ * @return bool
+ * @throws SPException
+ */
+ public function addCustomField()
+ {
+ if (empty($this->_value)){
+ return true;
+ }
+
+ $cryptData = Crypt::encryptData($this->_value);
+
+ $query = 'INSERT INTO customFieldsData SET ' .
+ 'customfielddata_itemId = :itemid, ' .
+ 'customfielddata_moduleId = :moduleid, ' .
+ 'customfielddata_defId = :defid, ' .
+ 'customfielddata_data = :data, ' .
+ 'customfielddata_iv = :iv';
+
+ $data['itemid'] = $this->_itemId;
+ $data['moduleid'] = $this->_module;
+ $data['defid'] = $this->_id;
+ $data['data'] = $cryptData['data'];
+ $data['iv'] = $cryptData['iv'];
+
+ $queryRes = DB::getQuery($query, __FUNCTION__, $data);
+
+ return $queryRes;
+ }
+
+ /**
+ * @return string
+ */
+ public function getValue()
+ {
+ return $this->_value;
+ }
+}
\ No newline at end of file
diff --git a/inc/CustomFieldsBase.class.php b/inc/CustomFieldsBase.class.php
new file mode 100644
index 00000000..3ebcd06f
--- /dev/null
+++ b/inc/CustomFieldsBase.class.php
@@ -0,0 +1,158 @@
+.
+ *
+ */
+
+namespace SP;
+
+use SP\Controller\ActionsInterface;
+
+abstract class CustomFieldsBase
+{
+ const TYPE_TEXT = 1;
+ const TYPE_PASSWORD = 2;
+ const TYPE_DATE = 3;
+ const TYPE_NUMBER = 4;
+ /**
+ * @var string
+ */
+ protected $_name = '';
+ /**
+ * @var int
+ */
+ protected $_type = 0;
+ /**
+ * @var int
+ */
+ protected $_module = 0;
+ /**
+ * @var int
+ */
+ protected $_id = 0;
+ /**
+ * @var bool
+ */
+ protected $_required = false;
+ /**
+ * @var string
+ */
+ private $_help = '';
+
+ public static function getFieldsTypes($typeId = null)
+ {
+ $types = array(
+ self::TYPE_TEXT => 'text',
+ self::TYPE_PASSWORD => 'password',
+ self::TYPE_DATE => 'date',
+ self::TYPE_NUMBER => 'number'
+ );
+
+ if (!is_null($typeId)) {
+ return $types[$typeId];
+ }
+
+ return $types;
+ }
+
+ public static function getFieldsModules($moduleId = null)
+ {
+ $modules = array(
+ ActionsInterface::ACTION_ACC_NEW => _('Cuentas'),
+ ActionsInterface::ACTION_MGM_CATEGORIES => _('Categorías'),
+ ActionsInterface::ACTION_MGM_CUSTOMERS => _('Clientes'),
+ ActionsInterface::ACTION_USR_USERS => _('Usuarios'),
+ ActionsInterface::ACTION_USR_GROUPS => _('Grupos')
+
+ );
+
+ if (!is_null($moduleId)) {
+ return $modules[$moduleId];
+ }
+
+ return $modules;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isRequired()
+ {
+ return $this->_required;
+ }
+
+ /**
+ * @param boolean $required
+ */
+ public function setRequired($required)
+ {
+ $this->_required = $required;
+ }
+
+ /**
+ * @return int
+ */
+ public function getModule()
+ {
+ return $this->_module;
+ }
+
+ /**
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * @return int
+ */
+ public function getType()
+ {
+ return $this->_type;
+ }
+
+ /**
+ * @return int
+ */
+ public function getId()
+ {
+ return $this->_id;
+ }
+
+ /**
+ * @return string
+ */
+ public function getHelp()
+ {
+ return $this->_help;
+ }
+
+ /**
+ * @param string $help
+ */
+ public function setHelp($help)
+ {
+ $this->_help = $help;
+ }
+}
\ No newline at end of file
diff --git a/inc/customer.class.php b/inc/Customer.class.php
similarity index 53%
rename from inc/customer.class.php
rename to inc/Customer.class.php
index d05879f5..f0c241ba 100644
--- a/inc/customer.class.php
+++ b/inc/Customer.class.php
@@ -24,14 +24,15 @@
*
*/
+namespace SP;
+
defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
/**
* Esta clase es la encargada de realizar las operaciones sobre los clientes de sysPass
*/
-class SP_Customer
+class Customer
{
-
public static $customerName;
public static $customerDescription;
public static $customerLastId;
@@ -40,28 +41,28 @@ class SP_Customer
/**
* Crear un nuevo cliente en la BBDD.
*
- * @return bool
+ * @param null $id El Id del cliente actual (solo para comprobar duplicidad)
+ * @throws SPException
*/
- public static function addCustomer()
+ public static function addCustomer($id = null)
{
- $query = "INSERT INTO customers "
- . "SET customer_name = '" . DB::escape(self::$customerName) . "',"
- . "customer_description = '" . DB::escape(self::$customerDescription) . "',"
- . "customer_hash = '" . self::mkCustomerHash() . "'";
+ if(self::checkDupCustomer($id)){
+ throw new SPException(SPException::SP_WARNING, _('Cliente duplicado'));
+ }
- if (DB::doQuery($query, __FUNCTION__) === false) {
- return false;
+ $query = 'INSERT INTO customers SET customer_name = :name, customer_description = :description, customer_hash = :hash';
+
+ $data['name'] = self::$customerName;
+ $data['description'] = self::$customerDescription;
+ $data['hash'] = self::mkCustomerHash();
+
+ if (DB::getQuery($query, __FUNCTION__, $data) === false) {
+ throw new SPException(SPException::SP_CRITICAL, _('Error al crear el cliente'));
}
self::$customerLastId = DB::$lastId;
- $message['action'] = _('Nuevo Cliente');
- $message['text'][] = SP_Html::strongText(_('Cliente') . ': ') . self::$customerName;
-
- SP_Log::wrLogInfo($message);
- SP_Common::sendEmail($message);
-
- return true;
+ Log::writeNewLogAndEmail(_('Nuevo Cliente'), Html::strongText(_('Cliente') . ': ') . self::$customerName);
}
/**
@@ -86,55 +87,32 @@ class SP_Customer
* Actualizar un cliente en la BBDD.
*
* @param int $id con el Id del cliente
- * @return bool
+ * @throws SPException
*/
public static function updateCustomer($id)
{
+ if(self::checkDupCustomer($id)){
+ throw new SPException(SPException::SP_WARNING, _('Cliente duplicado'));
+ }
+
$customerName = self::getCustomerById($id);
$query = "UPDATE customers "
- . "SET customer_name = '" . DB::escape(self::$customerName) . "',"
- . "customer_description = '" . DB::escape(self::$customerDescription) . "',"
- . "customer_hash = '" . self::mkCustomerHash() . "' "
- . "WHERE customer_id = " . (int)$id;
+ . "SET customer_name = :name,"
+ . "customer_description = :description,"
+ . "customer_hash = :hash "
+ . "WHERE customer_id = :id";
- if (DB::doQuery($query, __FUNCTION__) === false) {
- return false;
+ $data['name'] = self::$customerName;
+ $data['description'] = self::$customerDescription;
+ $data['hash'] = self::mkCustomerHash();
+ $data['id'] = $id;
+
+ if (DB::getQuery($query, __FUNCTION__, $data) === false) {
+ throw new SPException(SPException::SP_CRITICAL, _('Error al actualizar el cliente'));
}
- $message['action'] = _('Actualizar Cliente');
- $message['text'][] = SP_Html::strongText(_('Cliente') . ': ') . $customerName . ' > ' . self::$customerName;
-
- SP_Log::wrLogInfo($message);
- SP_Common::sendEmail($message);
-
- return true;
- }
-
- /**
- * Eliminar un cliente de la BBDD.
- *
- * @param int $id con el Id del cliente a eliminar
- * @return bool
- */
- public static function delCustomer($id)
- {
- $customerName = self::getCustomerById($id);
-
- $query = "DELETE FROM customers "
- . "WHERE customer_id = " . (int)$id . " LIMIT 1";
-
- if (DB::doQuery($query, __FUNCTION__) === false) {
- return false;
- }
-
- $message['action'] = _('Eliminar Cliente');
- $message['text'][] = SP_Html::strongText(_('Cliente') . ': ') . $customerName;
-
- SP_Log::wrLogInfo($message);
- SP_Common::sendEmail($message);
-
- return true;
+ Log::writeNewLogAndEmail(_('Actualizar Cliente'), Html::strongText(_('Cliente') . ': ') . $customerName . ' > ' . self::$customerName);
}
/**
@@ -145,10 +123,11 @@ class SP_Customer
*/
public static function getCustomerById($id)
{
- $query = "SELECT customer_name "
- . "FROM customers "
- . "WHERE customer_id = " . (int)$id . " LIMIT 1";
- $queryRes = DB::getResults($query, __FUNCTION__);
+ $query = 'SELECT customer_name FROM customers WHERE customer_id = :id LIMIT 1';
+
+ $data['id'] = $id;
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
if ($queryRes === false) {
return false;
@@ -157,33 +136,52 @@ class SP_Customer
return $queryRes->customer_name;
}
+ /**
+ * Eliminar un cliente de la BBDD.
+ *
+ * @param int $id con el Id del cliente a eliminar
+ * @throws SPException
+ */
+ public static function deleteCustomer($id)
+ {
+ $resCustomerUse = self::checkCustomerInUse($id);
+
+ if ($resCustomerUse['accounts'] > 0) {
+ throw new SPException(SPException::SP_WARNING, _('No es posible eliminar') . ';;' . _('Cliente en uso por:') . ';;' . _('Cuentas') . ' (' . $resCustomerUse['accounts'] . ')');
+ }
+
+ $curCustomerName = self::getCustomerById($id);
+
+ $query = 'DELETE FROM customers WHERE customer_id = :id LIMIT 1';
+
+ $data['id'] = $id;
+
+ if (DB::getQuery($query, __FUNCTION__, $data) === false) {
+ throw new SPException(SPException::SP_CRITICAL, _('Error al eliminar el cliente'));
+ }
+
+ Log::writeNewLogAndEmail(_('Eliminar Cliente'), Html::strongText(_('Cliente') . ': ') . $curCustomerName);
+ }
+
/**
* Comprobar si existe un cliente duplicado comprobando el hash.
*
* @param int $id opcional con el Id del cliente
* @return bool
*/
- public static function checkDupCustomer($id = NULL)
+ public static function checkDupCustomer($id = null)
{
- if ($id === NULL) {
- $query = "SELECT customer_id "
- . "FROM customers "
- . "WHERE customer_hash = '" . self::mkCustomerHash() . "'";
+ if (is_null($id)) {
+ $query = 'SELECT customer_id FROM customers WHERE customer_hash = :hash';
} else {
- $query = "SELECT customer_id "
- . "FROM customers "
- . "WHERE customer_hash = '" . self::mkCustomerHash() . "' AND customer_id <> " . $id;
+ $query = 'SELECT customer_id FROM customers WHERE customer_hash = :hash AND customer_id <> :id';
+
+ $data['id'] = $id;
}
- if (DB::doQuery($query, __FUNCTION__) === false) {
- return false;
- }
+ $data['hash'] = self::mkCustomerHash();
- if (count(DB::$last_result) >= 1) {
- return false;
- }
-
- return true;
+ return (DB::getQuery($query, __FUNCTION__, $data) === false || DB::$lastNumRows >= 1);
}
/**
@@ -193,10 +191,11 @@ class SP_Customer
*/
public static function getCustomerByName()
{
- $query = "SELECT customer_id "
- . "FROM customers "
- . "WHERE customer_hash = '" . self::mkCustomerHash() . "' LIMIT 1";
- $queryRes = DB::getResults($query, __FUNCTION__);
+ $query = 'SELECT customer_id FROM customers WHERE customer_hash = :hash LIMIT 1';
+
+ $data['hash'] = self::mkCustomerHash();
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
if ($queryRes === false) {
return false;
@@ -235,24 +234,25 @@ class SP_Customer
/**
* Obtener el listado de clientes.
*
- * @param int $customerId con el Id del cliente
+ * @param int $customerId con el Id del cliente
* @param bool $retAssocArray para devolver un array asociativo
* @return array con el id de cliente como clave y el nombre como valor
*/
- public static function getCustomers($customerId = NULL, $retAssocArray = false)
+ public static function getCustomers($customerId = null, $retAssocArray = false)
{
- $query = "SELECT customer_id,"
- . "customer_name, "
- . "customer_description "
- . "FROM customers ";
+ $query = 'SELECT customer_id, customer_name, customer_description FROM customers ';
+ $data = null;
if (!is_null($customerId)) {
- $query .= "WHERE customer_id = " . (int)$customerId . " LIMIT 1";
+ $query .= "WHERE customer_id = :id LIMIT 1";
+ $data['id'] = $customerId;
} else {
$query .= "ORDER BY customer_name";
}
- $queryRes = DB::getResults($query, __FUNCTION__, true);
+ DB::setReturnArray();
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
if ($queryRes === false) {
return array();
@@ -288,20 +288,40 @@ class SP_Customer
* Obtener el número de cuentas que usan un cliente.
*
* @param int $id con el Id del cliente a consultar
- * @return false|int con el número total de cuentas
+ * @return int con el número total de cuentas
*/
private static function getCustomerInAccounts($id)
{
- $query = "SELECT COUNT(*) as uses "
- . "FROM accounts "
- . "WHERE account_customerId = " . (int)$id;
+ $query = 'SELECT account_id FROM accounts WHERE account_customerId = :id';
- $queryRes = DB::getResults($query, __FUNCTION__);
+ $data['id'] = $id;
- if ($queryRes === false) {
- return false;
+ DB::getQuery($query, __FUNCTION__, $data);
+
+ return DB::$lastNumRows;
+ }
+
+ /**
+ * Añadir un cliente
+ * @param $name
+ * @param $description
+ * @return int
+ */
+ public static function addCustomerReturnId($name, $description = ''){
+ $customerId = 0;
+
+ self::$customerName = $name;
+ self::$customerDescription = $description;
+
+ try {
+ self::addCustomer();
+ $customerId = self::$customerLastId;
+ } catch (SPException $e) {
+ if ($e->getType() === SPException::SP_WARNING){
+ $customerId = self::getCustomerByName();
+ }
}
- return $queryRes->uses;
+ return (int)$customerId;
}
}
diff --git a/inc/DB.class.php b/inc/DB.class.php
new file mode 100644
index 00000000..59cb393c
--- /dev/null
+++ b/inc/DB.class.php
@@ -0,0 +1,487 @@
+.
+ *
+ */
+
+namespace SP;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+/**
+ * Esta clase es la encargada de realizar las operaciones con la BBDD de sysPass.
+ */
+class DB
+{
+ /**
+ * @var string
+ */
+ static $txtError = '';
+ /**
+ * @var int
+ */
+ static $numError = 0;
+ /**
+ * @var int
+ */
+ static $lastNumRows = 0;
+ /**
+ * @var int
+ */
+ static $lastId = null;
+ /**
+ * @var bool Resultado como array
+ */
+ private static $_retArray = false;
+ /**
+ * @var bool Resultado como un objeto PDO
+ */
+ private static $_returnRawData = false;
+ /**
+ * @var bool Contar el número de filas totales
+ */
+ private static $_fullRowCount = false;
+ /**
+ * @var int Número de registros obtenidos
+ */
+ private $_numRows = 0;
+ /**
+ * @var int Número de campos de la consulta
+ */
+ private $_numFields = 0;
+ /**
+ * @var array Resultados de la consulta
+ */
+ private $_lastResult = null;
+ /**
+ * @var string Nombre de la función que realiza la consulta
+ */
+ private $_querySource;
+ /**
+ * Datos para el objeto PDOStatement
+ *
+ * @var array
+ */
+ private $_stData;
+
+ /**
+ * @return int
+ */
+ public static function getLastId()
+ {
+ return self::$lastId;
+ }
+
+ /**
+ * Comprobar que la base de datos existe.
+ *
+ * @return bool
+ * @throws SPException
+ */
+ public static function checkDatabaseExist()
+ {
+ try {
+ $db = DBConnectionFactory::getFactory()->getConnection();
+
+ $query = 'SELECT COUNT(*) '
+ . 'FROM information_schema.tables '
+ . 'WHERE table_schema=\'' . Config::getValue("dbname") . '\' '
+ . 'AND table_name = \'usrData\'';
+
+ if ($db->query($query)->fetchColumn() !== 0) {
+ return true;
+ }
+ } catch (\Exception $e) {
+ throw new SPException(SPException::SP_CRITICAL, $e->getMessage(), $e->getCode());
+ }
+
+ return false;
+ }
+
+ /**
+ * Obtener los datos para generar un select.
+ *
+ * @param $tblName string con el nombre de la tabla a cunsultar
+ * @param $tblColId string con el nombre de la columna del tipo Id a mostrar
+ * @param $tblColName string con el nombre de la columna del tipo Name a mostrar
+ * @param $arrFilter array con las columnas a filtrar
+ * @param $arrOrder array con el orden de las columnas
+ * @return array con los valores del select con el Id como clave y el nombre como valor
+ */
+ public static function getValuesForSelect($tblName, $tblColId, $tblColName, $arrFilter = NULL, $arrOrder = NULL)
+ {
+ if (!$tblName || !$tblColId || !$tblColName) {
+ return false;
+ }
+
+ $strFilter = (is_array($arrFilter)) ? " WHERE " . implode(" OR ", $arrFilter) : "";
+ $strOrder = (is_array($arrOrder)) ? " ORDER BY " . implode(",", $arrOrder) : 'ORDER BY ' . $tblColName . ' ASC';
+
+ $query = "SELECT $tblColId, $tblColName FROM $tblName $strFilter $strOrder";
+
+ self::setReturnArray();
+
+ $queryRes = self::getResults($query, __FUNCTION__);
+
+ if ($queryRes === false) {
+ return array();
+ }
+
+ $arrValues = array();
+
+ foreach ($queryRes as $row) {
+ $arrValues[$row->$tblColId] = $row->$tblColName;
+ }
+
+ return $arrValues;
+ }
+
+ /**
+ * Establecer si se devuelve un array de objetos siempre
+ */
+ public static function setReturnArray()
+ {
+ self::$_retArray = true;
+ }
+
+ /**
+ * Obtener los resultados de una consulta.
+ *
+ * @param $query string con la consulta a realizar
+ * @param $querySource string con el nombre de la función que realiza la consulta
+ * @param $data array con los datos de la consulta
+ * @return bool|array devuelve bool si hay un error. Devuelve array con el array de registros devueltos
+ */
+ public static function getResults($query, $querySource, &$data = null)
+ {
+ if (empty($query)) {
+ self::resetVars();
+ return false;
+ }
+
+ try {
+ $db = new DB();
+ $db->_querySource = $querySource;
+ $db->_stData = $data;
+ $doQuery = $db->doQuery($query, $querySource, self::$_returnRawData);
+ self::$lastNumRows = (self::$_fullRowCount === false) ? $db->_numRows : $db->getFullRowCount($query);
+ } catch (SPException $e) {
+ self::logDBException($query, $e->getMessage(), $e->getCode(), $querySource);
+ return false;
+ }
+
+ if (self::$_returnRawData && is_object($doQuery) && get_class($doQuery) == "PDOStatement") {
+ return $doQuery;
+ }
+
+ if ($db->_numRows == 0) {
+ self::resetVars();
+ return false;
+ }
+
+ if ($db->_numRows == 1 && self::$_retArray === false) {
+ self::resetVars();
+ return $db->_lastResult[0];
+ }
+
+ self::resetVars();
+ return $db->_lastResult;
+ }
+
+ /**
+ * Restablecer los atributos estáticos
+ */
+ private static function resetVars()
+ {
+ self::$_returnRawData = false;
+ self::$_fullRowCount = false;
+ self::$_retArray = false;
+ }
+
+ /**
+ * Realizar una consulta a la BBDD.
+ *
+ * @param $query string con la consulta a realizar
+ * @param $querySource string con el nombre de la función que realiza la consulta
+ * @param $getRawData bool realizar la consulta para obtener registro a registro
+ * @return false|int devuelve bool si hay un error. Devuelve int con el número de registros
+ * @throws SPException
+ */
+ public function doQuery(&$query, $querySource, $getRawData = false)
+ {
+ $isSelect = preg_match("/^(select|show)\s/i", $query);
+
+ // Limpiar valores de caché y errores
+ $this->_lastResult = array();
+
+ try {
+ $queryRes = $this->prepareQueryData($query);
+ } catch (SPException $e) {
+ throw $e;
+ }
+
+ if ($isSelect) {
+ if (!$getRawData) {
+ $this->_numFields = $queryRes->columnCount();
+ $this->_lastResult = $queryRes->fetchAll(\PDO::FETCH_OBJ);
+ } else {
+ return $queryRes;
+ }
+
+// $queryRes->closeCursor();
+
+ $this->_numRows = count($this->_lastResult);
+ }
+ }
+
+ /**
+ * Asociar los parámetros de la consulta utilizando el tipo adecuado
+ *
+ * @param &$query string La consulta a realizar
+ * @param $isCount bool Indica si es una consulta de contador de registros
+ * @return bool|\PDOStatement
+ * @throws SPException
+ */
+ private function prepareQueryData(&$query, $isCount = false)
+ {
+ if ($isCount === true) {
+ // No incluimos en el array de parámetros de posición los valores
+ // utilizados para LIMIT
+ preg_match_all('/(\?|:)/', $query, $count);
+
+ // Indice a partir del cual no se incluyen valores
+ $paramMaxIndex = (count($count[1]) > 0) ? count($count[1]) : 0;
+ }
+
+ try {
+ $db = DBConnectionFactory::getFactory()->getConnection();
+
+ if (is_array($this->_stData)) {
+ $sth = $db->prepare($query);
+ $paramIndex = 0;
+
+ foreach ($this->_stData as $param => $value) {
+ // Si la clave es un número utilizamos marcadores de posición "?" en
+ // la consulta. En caso contrario marcadores de nombre
+ $param = (is_int($param)) ? $param + 1 : ':' . $param;
+
+ if ($isCount === true && count($count) > 0 && $paramIndex >= $paramMaxIndex) {
+ continue;
+ }
+
+ if ($param == 'blobcontent') {
+ $sth->bindValue($param, $value, \PDO::PARAM_LOB);
+ } elseif (is_int($value)) {
+// error_log("INT: " . $param . " -> " . $value);
+ $sth->bindValue($param, $value, \PDO::PARAM_INT);
+ } else {
+// error_log("STR: " . $param . " -> " . $value);
+ $sth->bindValue($param, $value, \PDO::PARAM_STR);
+ }
+
+ $paramIndex++;
+ }
+
+ $sth->execute();
+ } else {
+ $sth = $db->query($query);
+ }
+
+ DB::$lastId = $db->lastInsertId();
+
+ return $sth;
+ } catch (\Exception $e) {
+ error_log("Exception: " . $e->getMessage());
+ throw new SPException(SPException::SP_CRITICAL, $e->getMessage(), $e->getCode());
+ }
+ }
+
+ /**
+ * Método para registar los eventos de BD en el log
+ *
+ * @param $query string La consulta que genera el error
+ * @param $errorMsg string El mensaje de error
+ * @param $errorCode int El código de error
+ */
+ private static function logDBException($query, $errorMsg, $errorCode, $querySource)
+ {
+ $Log = new Log($querySource);
+ $Log->addDescription($errorMsg . '(' . $errorCode . ')');
+ $Log->addDescription("SQL: " . self::escape($query));
+ $Log->writeLog();
+
+ error_log($query);
+ error_log($errorMsg);
+ }
+
+ /**
+ * Escapar una cadena de texto con funciones de mysqli.
+ *
+ * @param $str string con la cadena a escapar
+ * @return string con la cadena escapada
+ */
+ public static function escape($str)
+ {
+ try {
+ $db = DBConnectionFactory::getFactory()->getConnection();
+
+ return $db->quote(trim($str));
+ } catch (SPException $e) {
+ return $str;
+ }
+ }
+
+ /**
+ * Obtener el número de filas de una consulta realizada
+ *
+ * @param &$query string La consulta para contar los registros
+ * @return int Número de files de la consulta
+ * @throws SPException
+ */
+ private function getFullRowCount(&$query)
+ {
+ if (empty($query)) {
+ return 0;
+ }
+
+ $num = 0;
+ $patterns = array(
+ '/(LIMIT|ORDER BY|GROUP BY).*/i',
+ '/SELECT DISTINCT\s([\w_]+),.* FROM/iU',
+ '/SELECT [\w_]+,.* FROM/iU',
+ );
+ $replace = array('', 'SELECT COUNT(DISTINCT \1) FROM', 'SELECT COUNT(*) FROM', '');
+
+ preg_match('/SELECT DISTINCT\s([\w_]*),.*\sFROM\s([\w_]*)\s(LEFT|RIGHT|WHERE).*/iU', $query, $match);
+
+ $query = preg_replace($patterns, $replace, $query);
+
+ try {
+ $db = DBConnectionFactory::getFactory()->getConnection();
+
+ if (!is_array($this->_stData)) {
+ $queryRes = $db->query($query);
+ $num = intval($queryRes->fetchColumn());
+ } else {
+ if ($queryRes = $this->prepareQueryData($query, true)) {
+ $num = intval($queryRes->fetchColumn());
+ }
+ }
+
+ $queryRes->closeCursor();
+
+ return $num;
+ } catch (SPException $e) {
+ error_log("Exception: " . $e->getMessage());
+ throw new SPException(SPException::SP_CRITICAL, $e->getMessage(), $e->getCode());
+ }
+ }
+
+ /**
+ * Realizar una consulta y devolver el resultado sin datos
+ *
+ * @param $query string La consulta a realizar
+ * @param $querySource string La función orígen de la consulta
+ * @param $getRawData bool Si se deben de obtener los datos como PDOStatement
+ * @return bool
+ */
+ public static function getQuery($query, $querySource, &$data = null, $getRawData = false)
+ {
+ if (empty($query)) {
+ return false;
+ }
+
+ try {
+ $db = new DB();
+ $db->_querySource = $querySource;
+ $db->_stData = $data;
+ $db->doQuery($query, $querySource, $getRawData);
+ DB::$lastNumRows = $db->_numRows;
+ } catch (SPException $e) {
+ self::logDBException($query, $e->getMessage(), $e->getCode(), $querySource);
+ self::$txtError = $e->getMessage();
+ self::$numError = $e->getCode();
+
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Establecer si se devuelven los datos obtenidos como PDOStatement
+ *
+ * @param bool $on
+ */
+ public static function setReturnRawData($on = true)
+ {
+ self::$_returnRawData = (bool)$on;
+ }
+
+ /**
+ * Establecer si es necesario contar el número total de resultados devueltos
+ */
+ public static function setFullRowCount()
+ {
+ self::$_fullRowCount = true;
+ }
+
+ /**
+ * Obtener la información del servidor de base de datos
+ *
+ * @return array
+ */
+ public static function getDBinfo()
+ {
+ $dbinfo = array();
+
+ try {
+ $db = DBConnectionFactory::getFactory()->getConnection();
+
+ $attributes = array(
+ 'SERVER_VERSION',
+ 'CLIENT_VERSION',
+ 'SERVER_INFO',
+ 'CONNECTION_STATUS',
+ );
+
+ foreach ($attributes as $val) {
+ $dbinfo[$val] = $db->getAttribute(constant('PDO::ATTR_' . $val));
+ }
+
+ } catch (SPException $e) {
+ return $dbinfo;
+ }
+
+ return $dbinfo;
+ }
+
+ /**
+ * Establecer los parámetos de la consulta preparada
+ *
+ * @param &$data array Con los datos de los parámetros de la consulta
+ */
+ public function setParamData(&$data)
+ {
+ $this->_stData = $data;
+ }
+}
diff --git a/inc/DBConnectionFactory.class.php b/inc/DBConnectionFactory.class.php
new file mode 100644
index 00000000..265a848f
--- /dev/null
+++ b/inc/DBConnectionFactory.class.php
@@ -0,0 +1,115 @@
+.
+ *
+ */
+
+namespace SP;
+
+use \PDO;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+/**
+ * Class DBConnectionFactory
+ *
+ * Esta clase se encarga de crear las conexiones a la BD
+ */
+class DBConnectionFactory
+{
+ /**
+ * @var DBConnectionFactory
+ */
+ private static $_factory;
+ /**
+ * @var \PDO
+ */
+ private $_db;
+
+ /**
+ * Obtener una instancia de la clase
+ *
+ * @return DBConnectionFactory
+ */
+ public static function getFactory()
+ {
+ if (!self::$_factory) {
+// FIXME
+// error_log('NEW FACTORY');
+ self::$_factory = new DBConnectionFactory();
+ }
+
+ return self::$_factory;
+ }
+
+ /**
+ * Realizar la conexión con la BBDD.
+ * Esta función utiliza PDO para conectar con la base de datos.
+ *
+ * @throws SPException
+ * @return \PDO
+ */
+
+ public function getConnection()
+ {
+ if (!$this->_db) {
+// FIXME
+// error_log('NEW DB_CONNECTION');
+ $isInstalled = Config::getValue('installed');
+
+ $dbhost = Config::getValue('dbhost');
+ $dbuser = Config::getValue('dbuser');
+ $dbpass = Config::getValue('dbpass');
+ $dbname = Config::getValue('dbname');
+ $dbport = Config::getValue('dbport', 3306);
+
+ if (empty($dbhost) || empty($dbuser) || empty($dbpass) || empty($dbname)) {
+ if ($isInstalled) {
+ Init::initError(_('No es posible conectar con la BD'), _('Compruebe los datos de conexión'));
+ } else {
+ throw new SPException(SPException::SP_CRITICAL, _('No es posible conectar con la BD'), _('Compruebe los datos de conexión'));
+ }
+ }
+
+ try {
+ $dsn = 'mysql:host=' . $dbhost . ';port=' . $dbport . ';dbname=' . $dbname . ';charset=utf8';
+// $this->db = new PDO($dsn, $dbuser, $dbpass, array(PDO::ATTR_PERSISTENT => true));
+ $this->_db = new PDO($dsn, $dbuser, $dbpass);
+ } catch (\Exception $e) {
+ if ($isInstalled) {
+ if ($e->getCode() === 1049) {
+ Config::setValue('installed', '0');
+ }
+
+ Init::initError(_('No es posible conectar con la BD'), 'Error ' . $e->getCode() . ': ' . $e->getMessage());
+ } else {
+ throw new SPException(SPException::SP_CRITICAL, $e->getMessage(), $e->getCode());
+ }
+ }
+ }
+
+ $this->_db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
+ $this->_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
+
+ return $this->_db;
+ }
+}
\ No newline at end of file
diff --git a/inc/Email.class.php b/inc/Email.class.php
new file mode 100644
index 00000000..1850a334
--- /dev/null
+++ b/inc/Email.class.php
@@ -0,0 +1,150 @@
+.
+ *
+ */
+
+namespace SP;
+
+/**
+ * Clase Email para la gestión de envío de correos de notificación
+ *
+ * @package SP
+ */
+class Email
+{
+ /**
+ * Enviar un email utilizando la clase PHPMailer.
+ *
+ * @param Log $log con el objeto del tipo Log
+ * @param string $mailTo con el destinatario
+ * @param bool $isEvent para indicar si es um
+ * @return bool
+ */
+ public static function sendEmail(Log $log, $mailTo = '', $isEvent = true)
+ {
+ if (!Util::mailIsEnabled()) {
+ return false;
+ }
+
+ $mail = self::getEmailObject($mailTo, utf8_decode($log->getAction()));
+
+ if (!is_object($mail)) {
+ return false;
+ }
+
+ $mail->isHTML();
+ $log->setNewLineHtml(true);
+
+ if ($isEvent === true) {
+ $performer = (Session::getUserLogin()) ? Session::getUserLogin() : _('N/D');
+ $body[] = Html::strongText(_('Acción') . ": ") . utf8_decode($log->getAction());
+ $body[] = Html::strongText(_('Realizado por') . ": ") . $performer . ' (' . $_SERVER['REMOTE_ADDR'] . ')';
+
+ $mail->addCC(Config::getValue('mail_from'));
+ }
+
+ $body[] = utf8_decode($log->getDescription());
+ $body[] = '';
+ $body[] = '--';
+ $body[] = Util::getAppInfo('appname') . ' - ' . Util::getAppInfo('appdesc');
+ $body[] = Html::anchorText(Init::$WEBURI);
+
+
+ $mail->Body = implode(Log::NEWLINE_HTML, $body);
+
+ $sendMail = $mail->send();
+
+ $logEmail = new Log(_('Enviar Email'));
+
+ // Enviar correo
+ if ($sendMail) {
+ $logEmail->addDescription(_('Correo enviado'));
+ } else {
+ $logEmail->addDescription(_('Error al enviar correo'));
+ $logEmail->addDescription('ERROR: ' . $mail->ErrorInfo);
+ }
+
+ $logEmail->addDescription(_('Destinatario') . ': ' . $mailTo);
+
+ if ($isEvent === true){
+ $logEmail->addDescription(_('CC') . ': ' . Config::getValue('mail_from'));
+ }
+
+ $logEmail->writeLog();
+
+ return $sendMail;
+ }
+
+ /**
+ * Inicializar la clase PHPMailer.
+ *
+ * @param string $mailTo con la dirección del destinatario
+ * @param string $action con la acción realizada
+ * @return false|\PHPMailer
+ */
+ private static function getEmailObject($mailTo, $action)
+ {
+ $appName = Util::getAppInfo('appname');
+ $mailFrom = Config::getValue('mail_from');
+ $mailServer = Config::getValue('mail_server');
+ $mailPort = Config::getValue('mail_port', 25);
+ $mailAuth = Config::getValue('mail_authenabled', FALSE);
+
+ if ($mailAuth) {
+ $mailUser = Config::getValue('mail_user');
+ $mailPass = Config::getValue('mail_pass');
+ }
+
+ if (!$mailServer) {
+ return false;
+ }
+
+ if (empty($mailTo)) {
+ $mailTo = $mailFrom;
+ }
+
+ require_once EXTENSIONS_PATH . '/phpmailer/class.phpmailer.php';
+ require_once EXTENSIONS_PATH . '/phpmailer/class.smtp.php';
+
+ $mail = new \PHPMailer();
+
+ $mail->isSMTP();
+ $mail->CharSet = 'utf-8';
+ $mail->SMTPAuth = $mailAuth;
+ $mail->Host = $mailServer;
+ $mail->Port = $mailPort;
+ $mail->Username = $mailUser;
+ $mail->Password = $mailPass;
+ $mail->SMTPSecure = strtolower(Config::getValue('mail_security'));
+ //$mail->SMTPDebug = 2;
+ //$mail->Debugoutput = 'error_log';
+
+ $mail->setFrom($mailFrom, $appName);
+ $mail->addAddress($mailTo);
+ $mail->addReplyTo($mailFrom, $appName);
+ $mail->WordWrap = 100;
+ $mail->Subject = $appName . ' (' . _('Aviso') . ') - ' . $action;
+
+ return $mail;
+ }
+}
\ No newline at end of file
diff --git a/inc/FileImport.class.php b/inc/FileImport.class.php
new file mode 100644
index 00000000..ec8fe0a4
--- /dev/null
+++ b/inc/FileImport.class.php
@@ -0,0 +1,172 @@
+.
+ *
+ */
+
+namespace SP;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+/**
+ * Clase FileImport encargada el leer archivos para su importación
+ *
+ * @package SP
+ */
+class FileImport
+{
+ /**
+ * Contenido del archivo leído
+ *
+ * @var string|array
+ */
+ protected $_fileContent = null;
+
+ /**
+ * Archivo temporal utilizado en la subida HTML
+ *
+ * @var string
+ */
+ protected $_tmpFile = '';
+
+ /**
+ * Tipo Mime del archivo
+ *
+ * @var string
+ */
+ protected $_fileType = '';
+
+ /**
+ * @return string|array
+ */
+ public function getFileContent()
+ {
+ return $this->_fileContent;
+ }
+
+ /**
+ * @return string
+ */
+ public function getTmpFile()
+ {
+ return $this->_tmpFile;
+ }
+
+ /**
+ * @return string
+ */
+ public function getFileType()
+ {
+ return $this->_fileType;
+ }
+
+
+ /**
+ * FileImport constructor.
+ */
+ public function __construct(&$fileData)
+ {
+ try {
+ $this->checkFile($fileData);
+ } catch (SPException $e) {
+ throw $e;
+ }
+ }
+
+ /**
+ * Leer los datos del archivo.
+ *
+ * @param array $fileData con los datos del archivo
+ * @throws SPException
+ * @return bool
+ */
+ private function checkFile(&$fileData)
+ {
+ if (!is_array($fileData)) {
+ throw new SPException(SPException::SP_CRITICAL, _('Archivo no subido correctamente'), _('Verifique los permisos del usuario del servidor web'));
+ }
+
+ if ($fileData['name']) {
+ // Comprobamos la extensión del archivo
+ $fileExtension = strtoupper(pathinfo($fileData['name'], PATHINFO_EXTENSION));
+
+ if ($fileExtension != 'CSV' && $fileExtension != 'XML') {
+ throw new SPException(
+ SPException::SP_CRITICAL,
+ _('Tipo de archivo no soportado'),
+ _('Compruebe la extensión del archivo')
+ );
+ }
+ }
+
+ // Variables con información del archivo
+ $this->_tmpFile = $fileData['tmp_name'];
+ $this->_fileType = $fileData['type'];
+
+ if (!file_exists($this->_tmpFile) || !is_readable($this->_tmpFile)) {
+ // Registramos el máximo tamaño permitido por PHP
+ Util::getMaxUpload();
+
+ throw new SPException(
+ SPException::SP_CRITICAL,
+ _('Error interno al leer el archivo'),
+ _('Compruebe la configuración de PHP para subir archivos')
+ );
+ }
+ }
+
+ /**
+ * Leer los datos de un archivo subido a un array
+ *
+ * @throws SPException
+ */
+ public function readFileToArray()
+ {
+ $this->_fileContent = file($this->_tmpFile, FILE_SKIP_EMPTY_LINES);
+
+ if ($this->_fileContent === false){
+ throw new SPException(
+ SPException::SP_CRITICAL,
+ _('Error interno al leer el archivo'),
+ _('Compruebe los permisos del directorio temporal')
+ );
+ }
+ }
+
+ /**
+ * Leer los datos de un archivo subido a una cadena
+ *
+ * @throws SPException
+ */
+ public function readFileToString()
+ {
+ $this->_fileContent = file_get_contents($this->_tmpFile);
+
+ if ($this->_fileContent === false){
+ throw new SPException(
+ SPException::SP_CRITICAL,
+ _('Error interno al leer el archivo'),
+ _('Compruebe los permisos del directorio temporal')
+ );
+ }
+ }
+}
\ No newline at end of file
diff --git a/inc/files.class.php b/inc/Files.class.php
similarity index 50%
rename from inc/files.class.php
rename to inc/Files.class.php
index 3c35bad6..11299c8b 100644
--- a/inc/files.class.php
+++ b/inc/Files.class.php
@@ -3,8 +3,8 @@
/**
* sysPass
*
- * @author nuxsmin
- * @link http://syspass.org
+ * @author nuxsmin
+ * @link http://syspass.org
* @copyright 2012-2015 Rubén Domínguez nuxsmin@syspass.org
*
* This file is part of sysPass.
@@ -24,39 +24,50 @@
*
*/
+namespace SP;
+
defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
/**
* Esta clase es la encargada de realizar operaciones con archivos de las cuentas de sysPass
*/
-class SP_Files
+class Files
{
/**
* Guardar un archivo en la BBDD.
*
- * @param int $accountId
+ * @param int $accountId
* @param array $fileData con los datos y el contenido del archivo
* @return bool
*/
- public static function fileUpload($accountId, $fileData = array())
+ public static function fileUpload($accountId, &$fileData = array())
{
$query = "INSERT INTO accFiles "
- . "SET accfile_accountId = " . (int)$accountId . ","
- . "accfile_name = '" . DB::escape($fileData['name']) . "',"
- . "accfile_type = '" . $fileData['type'] . "',"
- . "accfile_size = '" . $fileData['size'] . "',"
- . "accfile_content = '" . DB::escape($fileData['content']) . "',"
- . "accfile_extension = '" . DB::escape($fileData['extension']) . "'";
+ . "SET accfile_accountId = :accountId,"
+ . "accfile_name = :name,"
+ . "accfile_type = :type,"
+ . "accfile_size = :size,"
+ . "accfile_content = :blobcontent,"
+ . "accfile_extension = :extension,"
+ . "accfile_thumb = :thumbnail";
- if (DB::doQuery($query, __FUNCTION__) !== false) {
- $message['action'] = _('Subir Archivo');
- $message['text'][] = _('Cuenta') . ": " . $accountId;
- $message['text'][] = _('Archivo') . ": " . $fileData['name'];
- $message['text'][] = _('Tipo') . ": " . $fileData['type'];
- $message['text'][] = _('Tamaño') . ": " . round($fileData['size'] / 1024, 2) . " KB";
+ $data['accountId'] = $accountId;
+ $data['name'] = $fileData['name'];
+ $data['type'] = $fileData['type'];
+ $data['size'] = $fileData['size'];
+ $data['blobcontent'] = $fileData['content'];
+ $data['extension'] = $fileData['extension'];
+ $data['thumbnail'] = ImageUtil::createThumbnail($fileData['content'], $fileData['type']);
- SP_Log::wrLogInfo($message);
- SP_Common::sendEmail($message);
+ if (DB::getQuery($query, __FUNCTION__, $data) === true) {
+ $log = new Log(_('Subir Archivo'));
+ $log->addDescription(_('Cuenta') . ": " . $accountId);
+ $log->addDescription(_('Archivo') . ": " . $fileData['name']);
+ $log->addDescription(_('Tipo') . ": " . $fileData['type']);
+ $log->addDescription(_('Tamaño') . ": " . round($fileData['size'] / 1024, 2) . " KB");
+ $log->writeLog();
+
+ Email::sendEmail($log);
return true;
}
@@ -74,19 +85,11 @@ class SP_Files
public static function fileDownload($fileId)
{
// Obtenemos el archivo de la BBDD
- $query = "SELECT * FROM accFiles "
- . "WHERE accfile_id = " . (int)$fileId . " LIMIT 1";
- $queryRes = DB::getResults($query, __FUNCTION__);
+ $query = 'SELECT * FROM accFiles WHERE accfile_id = :id LIMIT 1';
- if ($queryRes === false) {
- return false;
- }
+ $data['id'] = $fileId;
- if (DB::$num_rows == 0) {
- return false;
- }
-
- return $queryRes;
+ return DB::getResults($query, __FUNCTION__, $data);
}
/**
@@ -100,19 +103,19 @@ class SP_Files
$fileInfo = self::getFileInfo($fileId);
// Eliminamos el archivo de la BBDD
- $query = "DELETE FROM accFiles "
- . "WHERE accfile_id = " . (int)$fileId . " LIMIT 1";
- $queryRes = DB::doQuery($query, __FUNCTION__);
+ $query = 'DELETE FROM accFiles WHERE accfile_id = :id LIMIT 1';
- if ($queryRes !== false) {
- $message['action'] = _('Eliminar Archivo');
- $message['text'][] = _('ID') . ": " . $fileId;
- $message['text'][] = _('Archivo') . ": " . $fileInfo->accfile_name;
- $message['text'][] = _('Tipo') . ": " . $fileInfo->accfile_type;
- $message['text'][] = _('Tamaño') . ": " . round($fileInfo->accfile_size / 1024, 2) . " KB";
+ $data['id'] = $fileId;
- SP_Log::wrLogInfo($message);
- SP_Common::sendEmail($message);
+ if (DB::getQuery($query, __FUNCTION__, $data) === true) {
+ $log = new Log(_('Eliminar Archivo'));
+ $log->addDescription(_('ID') . ": " . $fileId);
+ $log->addDescription(_('Archivo') . ": " . $fileInfo->accfile_name);
+ $log->addDescription(_('Tipo') . ": " . $fileInfo->accfile_type);
+ $log->addDescription(_('Tamaño') . ": " . round($fileInfo->accfile_size / 1024, 2) . " KB");
+ $log->writeLog();
+
+ Email::sendEmail($log);
return true;
}
@@ -132,17 +135,11 @@ class SP_Files
. "accfile_size,"
. "accfile_type "
. "FROM accFiles "
- . "WHERE accfile_id = " . (int)$fileId . " LIMIT 1";
- $queryRes = DB::getResults($query, __FUNCTION__);
+ . "WHERE accfile_id = :id LIMIT 1";
- if ($queryRes === false) {
- return false;
- }
+ $data['id'] = $fileId;
- if (DB::$num_rows === 0) {
- echo _('El archivo no existe');
- return false;
- }
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
return $queryRes;
}
@@ -157,23 +154,32 @@ class SP_Files
{
$query = "SELECT accfile_id,"
. "accfile_name,"
- . "accfile_size "
+ . "accfile_size, "
+ . "accfile_thumb, "
+ . "accfile_type "
. "FROM accFiles "
- . "WHERE accfile_accountId = " . (int)$accountId;
- $queryRes = DB::getResults($query, __FUNCTION__, true);
+ . "WHERE accfile_accountId = :id";
+
+ $data['id'] = $accountId;
+
+ DB::setReturnArray();
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
if ($queryRes === false) {
return false;
}
$files = array();
- $fileNum = 0;
foreach ($queryRes as $file) {
- $files[$fileNum]['id'] = $file->accfile_id;
- $files[$fileNum]['name'] = $file->accfile_name;
- $files[$fileNum]['size'] = round($file->accfile_size / 1000, 2);
- $fileNum++;
+ $files[] = array(
+ 'id' => $file->accfile_id,
+ 'name' => $file->accfile_name,
+ 'size' => round($file->accfile_size / 1000, 2),
+ 'thumb' => $file->accfile_thumb,
+ 'type' => $file->accfile_type
+ );
}
return $files;
@@ -183,20 +189,18 @@ class SP_Files
* Obtener el número de archivo de una cuenta.
*
* @param int $accountId con el Id de la cuenta
- * @return false|int con el número de archivos
+ * @return int con el número de archivos
*/
public static function countFiles($accountId)
{
// Obtenemos los archivos de la BBDD para dicha cuenta
- $query = "SELECT accfile_id "
- . "FROM accFiles "
- . "WHERE accfile_accountId = " . (int)$accountId;
+ $query = 'SELECT accfile_id FROM accFiles WHERE accfile_accountId = :id';
- if (DB::doQuery($query, __FUNCTION__) === false) {
- return false;
- }
+ $data['id'] = $accountId;
- return count(DB::$last_result);
+ DB::getQuery($query, __FUNCTION__, $data);
+
+ return DB::$lastNumRows;
}
@@ -208,13 +212,10 @@ class SP_Files
*/
public static function deleteAccountFiles($accountId)
{
- $query = "DELETE FROM accFiles "
- . "WHERE accfile_accountId = " . (int)$accountId;
+ $query = 'DELETE FROM accFiles WHERE accfile_accountId = :id';
- if (DB::doQuery($query, __FUNCTION__) === false) {
- return false;
- }
+ $data['id'] = $accountId;
- return true;
+ return DB::getQuery($query, __FUNCTION__, $data);
}
}
\ No newline at end of file
diff --git a/inc/Groups.class.php b/inc/Groups.class.php
new file mode 100644
index 00000000..1cdc2ab5
--- /dev/null
+++ b/inc/Groups.class.php
@@ -0,0 +1,581 @@
+.
+ *
+ */
+
+namespace SP;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+/**
+ * Esta clase es la encargada de realizar las operaciones sobre los grupos de usuarios.
+ */
+class Groups
+{
+ static $queryRes;
+ static $groupId;
+ static $groupName;
+ static $groupDescription;
+ static $queryLastId;
+
+ /**
+ * Obtener los datos de un grupo.
+ *
+ * @param int $id con el Id del grupo a consultar
+ * @return array con el nombre de la columna como clave y los datos como valor
+ */
+ public static function getGroupData($id = 0)
+ {
+ $group = array('usergroup_id' => 0,
+ 'usergroup_name' => '',
+ 'usergroup_description' => '',
+ 'action' => 1);
+
+ if ($id > 0) {
+ $userGroups = self::getGroups($id);
+
+ if ($userGroups) {
+ foreach ($userGroups[0] as $name => $value) {
+ $group[$name] = $value;
+ }
+ $group['action'] = 2;
+ }
+ }
+
+ return $group;
+ }
+
+ /**
+ * Obtener los grupos de usuarios.
+ *
+ * @param int $groupId opcional, con el Id del grupo a consultar
+ * @param bool $returnArray opcional, si se debe de devolver un array asociativo
+ * @return false|array con la lista de grupos
+ */
+ public static function getGroups($groupId = null, $returnArray = false)
+ {
+ $query = "SELECT usergroup_id,"
+ . "usergroup_name,"
+ . "usergroup_description "
+ . "FROM usrGroups ";
+
+ $data = null;
+
+ if (!is_null($groupId)) {
+ $query .= "WHERE usergroup_id = :id LIMIT 1";
+ $data['id'] = $groupId;
+ } else {
+ $query .= "ORDER BY usergroup_name";
+ }
+
+ DB::setReturnArray();
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+ return false;
+ }
+
+ if ($returnArray === true) {
+ foreach ($queryRes as $group) {
+ $groups[$group->usergroup_name] = $group->usergroup_id;
+ }
+
+ return $groups;
+ }
+
+ return $queryRes;
+ }
+
+ /**
+ * Comprobar si un grupo existe en la BBDD.
+ *
+ * @return bool
+ */
+ public static function checkGroupExist()
+ {
+ $groupId = (int)self::$groupId;
+ $groupName = strtoupper(self::$groupName);
+
+ if ($groupId) {
+ $query = "SELECT usergroup_name FROM usrGroups WHERE UPPER(usergroup_name) = :name AND usergroup_id != :id";
+ $data['id'] = $groupId;
+ } else {
+ $query = "SELECT usergroup_name FROM usrGroups WHERE UPPER(usergroup_name) = :name";
+ }
+
+ $data['name'] = $groupName;
+
+ return (DB::getQuery($query, __FUNCTION__, $data) === false || DB::$lastNumRows >= 1);
+ }
+
+ /**
+ * Añadir un nuevo grupo.
+ *
+ * @param $users array Los usuario del grupo
+ * @return bool
+ */
+ public static function addGroup($users = null)
+ {
+ $query = 'INSERT INTO usrGroups SET usergroup_name = :name, usergroup_description = :description';
+
+ $data['name'] = self::$groupName;
+ $data['description'] = self::$groupDescription;
+
+ if (DB::getQuery($query, __FUNCTION__, $data) === false) {
+ return false;
+ }
+
+ self::$queryLastId = DB::$lastId;
+
+ $Log = new Log(_('Nuevo Grupo'));
+
+ if (!is_null($users) && !Groups::addUsersForGroup(self::$queryLastId, $users)) {
+ $Log->addDescription(_('Error al añadir los usuarios del grupo'));
+ }
+
+ $Log->addDescription(sprintf('%s : %s', Html::strongText(_('Grupo')), self::$groupName));
+ $Log->writeLog();
+
+ Email::sendEmail($Log);
+
+ return true;
+ }
+
+ /**
+ * Crear asociación de grupos con usuarios.
+ *
+ * @param int $groupId con los grupos del usuario
+ * @param array $usersId Los usuarios del grupo
+ * @return bool
+ */
+ public static function addUsersForGroup($groupId, $usersId)
+ {
+ if (!is_array($usersId)) {
+ return true;
+ }
+
+ $values = '';
+
+ // Obtenemos los grupos actuales
+ $groupsExcluded = self::getUsersForGroup($groupId);
+
+ foreach ($usersId as $userId) {
+ // Excluimos los grupos actuales
+ if (isset($groupsExcluded) && is_array($groupsExcluded) && in_array($userId, $groupsExcluded)) {
+ continue;
+ }
+
+ $values[] = '(' . (int)$userId . ',' . (int)$groupId . ')';
+ }
+
+ if (!is_array($values)) {
+ return true;
+ }
+
+ $query = 'INSERT INTO usrToGroups (usertogroup_userId, usertogroup_groupId) VALUES ' . implode(',', $values);
+
+ return DB::getQuery($query, __FUNCTION__);
+ }
+
+ /**
+ * Obtiene el listado de grupos de un usuario.
+ *
+ * @param int $groupId con el Id del usuario
+ * @return array con el Id de grupo
+ */
+ public static function getUsersForGroup($groupId)
+ {
+ $users = array();
+
+ $query = 'SELECT usertogroup_userId FROM usrToGroups WHERE usertogroup_groupId = :id';
+
+ $data['id'] = $groupId;
+
+ DB::setReturnArray();
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+ return array();
+ }
+
+ foreach ($queryRes as $group) {
+ $users[] = $group->usertogroup_userId;
+ }
+
+ return $users;
+ }
+
+ /**
+ * Modificar un grupo.
+ *
+ * @param $users array Los usuario del grupo
+ * @return bool
+ */
+ public static function updateGroup($users)
+ {
+ $groupName = self::getGroupNameById(self::$groupId);
+
+ $query = 'UPDATE usrGroups SET usergroup_name = :name, usergroup_description = :description WHERE usergroup_id = :id';
+
+ $data['name'] = self::$groupName;
+ $data['description'] = self::$groupDescription;
+ $data['id'] = self::$groupId;
+
+ if (DB::getQuery($query, __FUNCTION__, $data) === false) {
+ return false;
+ }
+
+ self::$queryLastId = DB::$lastId;
+
+ $Log = new Log(_('Nuevo Grupo'));
+
+ if (!Groups::updateUsersForGroup(self::$groupId, $users)) {
+ $Log->addDescription(_('Error al actualizar los usuarios del grupo'));
+ }
+
+ $Log->addDescription(sprintf('%s : %s > %s', Html::strongText(_('Grupo')), $groupName, self::$groupName));
+ $Log->writeLog();
+
+ Email::sendEmail($Log);
+
+ return true;
+ }
+
+ /**
+ * Obtener el nombre de un grupo por a partir del Id.
+ *
+ * @param int $id con el Id del grupo
+ * @return false|string con el nombre del grupo
+ */
+ public static function getGroupNameById($id)
+ {
+ $query = 'SELECT usergroup_name FROM usrGroups WHERE usergroup_id = :id LIMIT 1';
+
+ $data['id'] = $id;
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+ return false;
+ }
+
+ return $queryRes->usergroup_name;
+ }
+
+ /**
+ * Obtener el id de un grupo por a partir del nombre.
+ *
+ * @param int $name con el nombre del grupo
+ * @return false|string con el nombre del grupo
+ */
+ public static function getGroupIdByName($name)
+ {
+ $query = 'SELECT usergroup_id FROM usrGroups WHERE usergroup_name = :name LIMIT 1';
+
+ $data['name'] = $name;
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+ return false;
+ }
+
+ return $queryRes->usergroup_id;
+ }
+
+ /**
+ * Actualizar la asociación de grupos con usuarios.
+ *
+ * @param int $groupId con el Id del usuario
+ * @param array $usersId con los usuarios del grupo
+ * @return bool
+ */
+ public static function updateUsersForGroup($groupId, $usersId)
+ {
+ if (self::deleteUsersForGroup($groupId, $usersId)) {
+ return self::addUsersForGroup($groupId, $usersId);
+ }
+
+ return false;
+ }
+
+ /**
+ * Eliminar la asociación de grupos con usuarios.
+ *
+ * @param int $groupId con el Id del grupo
+ * @param array $usersId opcional con los usuarios del grupo
+ * @return bool
+ */
+ public static function deleteUsersForGroup($groupId, $usersId = null)
+ {
+ $queryExcluded = '';
+
+ // Excluimos los grupos actuales
+ if (is_array($usersId)) {
+ array_map('intval', $usersId);
+
+ $queryExcluded = 'AND usertogroup_userId NOT IN (' . implode(',', $usersId) . ')';
+ }
+
+ $query = 'DELETE FROM usrToGroups WHERE usertogroup_groupId = :id ' . $queryExcluded;
+
+ $data['id'] = $groupId;
+
+ return DB::getQuery($query, __FUNCTION__, $data);
+ }
+
+ /**
+ * Eliminar un grupo.
+ *
+ * @return bool
+ */
+ public static function deleteGroup()
+ {
+ $groupName = self::getGroupNameById(self::$groupId);
+
+ $query = 'DELETE FROM usrGroups WHERE usergroup_id = :id LIMIT 1';
+
+ $data['id'] = self::$groupId;
+
+ if (DB::getQuery($query, __FUNCTION__, $data) === false) {
+ return false;
+ }
+
+ self::$queryLastId = DB::$lastId;
+
+ $Log = new Log(_('Eliminar Grupo'));
+
+ if (!Groups::deleteUsersForGroup(self::$groupId)) {
+ $Log->addDescription(_('Error al eliminar los usuarios del grupo'));
+ }
+
+ $Log->addDescription(sprintf('%s : %s', Html::strongText(_('Grupo')), $groupName));
+ $Log->writeLog();
+
+ Email::sendEmail($Log);
+
+ return true;
+ }
+
+ /**
+ * Comprobar si un grupo está en uso por usuarios o cuentas.
+ *
+ * @return array con el número de usuarios/cuentas que usan el grupo
+ */
+ public static function checkGroupInUse()
+ {
+ $count['users'] = self::getGroupInUsers();
+ $count['accounts'] = self::getGroupInAccounts() + self::getGroupInAccountsSec();
+ return $count;
+ }
+
+ /**
+ * Obtener el número de usuarios que usan un grupo.
+ *
+ * @return int con el número total de cuentas
+ */
+ private static function getGroupInUsers()
+ {
+ $query = 'SELECT user_groupId as groupId FROM usrData WHERE user_groupId = :idu ' .
+ 'UNION ALL SELECT usertogroup_groupId as groupId FROM usrToGroups WHERE usertogroup_groupId = :idg';
+
+ $data['idu'] = self::$groupId;
+ $data['idg'] = self::$groupId;
+
+ DB::getQuery($query, __FUNCTION__, $data);
+
+ return DB::$lastNumRows;
+ }
+
+ /**
+ * Obtener el número de cuentas que usan un grupo como primario.
+ *
+ * @return int con el número total de cuentas
+ */
+ private static function getGroupInAccounts()
+ {
+ $query = 'SELECT account_userGroupId FROM accounts WHERE account_userGroupId = :id';
+
+ $data['id'] = self::$groupId;
+
+ DB::getQuery($query, __FUNCTION__, $data);
+
+ return DB::$lastNumRows;
+ }
+
+ /**
+ * Obtener el número de cuentas que usan un grupo como secundario.
+ *
+ * @return false|int con el número total de cuentas
+ */
+ private static function getGroupInAccountsSec()
+ {
+ $query = 'SELECT accgroup_groupId FROM accGroups WHERE accgroup_groupId = :id';
+
+ $data['id'] = self::$groupId;
+
+ DB::getQuery($query, __FUNCTION__, $data);
+
+ return DB::$lastNumRows;
+ }
+
+ /**
+ * Obtiene el listado con el nombre de los grupos de una cuenta.
+ *
+ * @param int $accountId con el Id de la cuenta
+ * @return false|array con los nombres de los grupos ordenados
+ */
+ public static function getGroupsNameForAccount($accountId)
+ {
+ $query = 'SELECT usergroup_id,'
+ . 'usergroup_name '
+ . 'FROM accGroups '
+ . 'JOIN usrGroups ON accgroup_groupId = usergroup_id '
+ . 'WHERE accgroup_accountId = :id';
+
+ $data['id'] = $accountId;
+
+ DB::setReturnArray();
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+ return false;
+ }
+
+ foreach ($queryRes as $groups) {
+ $groupsName[$groups->usergroup_id] = $groups->usergroup_name;
+ }
+
+ asort($groupsName, SORT_STRING);
+
+ return $groupsName;
+ }
+
+ /**
+ * Actualizar la asociación de grupos con cuentas.
+ *
+ * @param int $accountId con el Id de la cuenta
+ * @param array $groupsId con los grupos de la cuenta
+ * @return bool
+ */
+ public static function updateGroupsForAccount($accountId, $groupsId)
+ {
+ if (self::deleteGroupsForAccount($accountId, $groupsId)) {
+ return self::addGroupsForAccount($accountId, $groupsId);
+ }
+
+ return false;
+ }
+
+ /**
+ * Eliminar la asociación de grupos con cuentas.
+ *
+ * @param int $accountId con el Id de la cuenta
+ * @param array $groupsId opcional con los grupos de la cuenta
+ * @return bool
+ */
+ public static function deleteGroupsForAccount($accountId, $groupsId = null)
+ {
+ $queryExcluded = '';
+
+ // Excluimos los grupos actuales
+ if (is_array($groupsId)) {
+ array_map('intval', $groupsId);
+
+ $queryExcluded = 'AND accgroup_groupId NOT IN (' . implode(',', $groupsId) . ')';
+ }
+
+ $query = 'DELETE FROM accGroups WHERE accgroup_accountId = :id ' . $queryExcluded;
+
+ $data['id'] = $accountId;
+
+ return DB::getQuery($query, __FUNCTION__, $data);
+ }
+
+ /**
+ * Crear asociación de grupos con cuentas.
+ *
+ * @param int $accountId con el Id de la cuenta
+ * @param array $groupsId con los grupos de la cuenta
+ * @return bool
+ */
+ public static function addGroupsForAccount($accountId, $groupsId)
+ {
+ if (!is_array($groupsId)) {
+ return true;
+ }
+
+ $values = '';
+
+ // Obtenemos los grupos actuales
+ $groupsExcluded = self::getGroupsForAccount($accountId);
+
+ foreach ($groupsId as $groupId) {
+ // Excluimos los grupos actuales
+ if (isset($groupsExcluded) && is_array($groupsExcluded) && in_array($groupId, $groupsExcluded)) {
+ continue;
+ }
+
+ $values[] = '(' . (int)$accountId . ',' . (int)$groupId . ')';
+ }
+
+ if (!is_array($values)) {
+ return true;
+ }
+
+ $query = 'INSERT INTO accGroups (accgroup_accountId, accgroup_groupId) VALUES ' . implode(',', $values);
+
+ return DB::getQuery($query, __FUNCTION__);
+ }
+
+ /**
+ * Obtiene el listado de grupos de una cuenta.
+ *
+ * @param int $accountId con el Id de la cuenta
+ * @return false|array con el Id de grupo
+ */
+ public static function getGroupsForAccount($accountId)
+ {
+ $query = 'SELECT accgroup_groupId FROM accGroups WHERE accgroup_accountId = :id';
+
+ $data['id'] = $accountId;
+
+ DB::setReturnArray();
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+ return array();
+ }
+
+ foreach ($queryRes as $group) {
+ $groups[] = (int)$group->accgroup_groupId;
+ }
+
+ return $groups;
+ }
+}
diff --git a/inc/Html.class.php b/inc/Html.class.php
new file mode 100644
index 00000000..063fdd36
--- /dev/null
+++ b/inc/Html.class.php
@@ -0,0 +1,145 @@
+.
+ *
+ */
+
+namespace SP;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+/**
+ * Esta clase es la encargada de mostrar el HTML
+ */
+class Html
+{
+ /**
+ * Limpia los datos recibidos de un formulario.
+ *
+ * @param string $data con los datos a limpiar
+ * @return false|string con los datos limpiados
+ */
+ public static function sanitize(&$data)
+ {
+ if (!$data) {
+ return false;
+ }
+
+ if (is_array($data)) {
+ array_walk_recursive($data, '\SP\Html::sanitize');
+ } else {
+ $data = strip_tags($data);
+
+ // Fix &entity\n;
+ $data = str_replace(array('&', '<', '>'), array('&', '<', '>'), $data);
+ $data = preg_replace('/(*\w+)[\x00-\x20]+;/u', '$1;', $data);
+ $data = preg_replace('/(*[0-9A-F]+);*/iu', '$1;', $data);
+ $data = html_entity_decode($data, ENT_COMPAT, 'UTF-8');
+
+ // Remove any attribute starting with "on" or xmlns
+ $data = preg_replace('#(<[^>]+?[\x00-\x20"\'])(?:on|xmlns)[^>]*+>#iu', '$1>', $data);
+
+ // Remove javascript: and vbscript: protocols
+ $data = preg_replace('#([a-z]*)[\x00-\x20]*=[\x00-\x20]*([`\'"]*)[\x00-\x20]*j[\x00-\x20]*a[\x00-\x20]*v[\x00-\x20]*a[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2nojavascript...', $data);
+ $data = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*v[\x00-\x20]*b[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2novbscript...', $data);
+ $data = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*-moz-binding[\x00-\x20]*:#u', '$1=$2nomozbinding...', $data);
+
+ // Only works in IE:
+ $data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?expression[\x00-\x20]*\([^>]*+>#i', '$1>', $data);
+ $data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?behaviour[\x00-\x20]*\([^>]*+>#i', '$1>', $data);
+ $data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:*[^>]*+>#iu', '$1>', $data);
+
+ // Remove namespaced elements (we do not need them)
+ $data = preg_replace('#*\w+:\w[^>]*+>#i', '', $data);
+
+ do {
+ // Remove really unwanted tags
+ $old_data = $data;
+ $data = preg_replace('#*(?:applet|b(?:ase|gsound|link)|embed|frame(?:set)?|i(?:frame|layer)|l(?:ayer|ink)|meta|object|s(?:cript|tyle)|title|xml)[^>]*+>#i', '', $data);
+ } while ($old_data !== $data);
+ }
+ return $data;
+ }
+
+ /**
+ * Truncar un texto a una determinada longitud.
+ *
+ * @param string $str con la cadena a truncar
+ * @param int $len con la longitud máxima de la cadena
+ * @return string con el texto truncado
+ */
+ public static function truncate($str, $len)
+ {
+ $tail = max(0, $len - 10);
+ $truncate = substr($str, 0, $tail);
+ $truncate .= strrev(preg_replace('~^..+?[\s,:]\b|^...~', '...', strrev(substr($str, $tail, $len - $tail))));
+
+ return $truncate;
+ }
+
+ /**
+ * Convertir un color RGB a HEX
+ * From: http://bavotasan.com/2011/convert-hex-color-to-rgb-using-php/
+ *
+ * @param array $rgb con color en RGB
+ * @return string
+ */
+ public static function rgb2hex($rgb)
+ {
+ $hex = "#";
+ $hex .= str_pad(dechex($rgb[0]), 2, "0", STR_PAD_LEFT);
+ $hex .= str_pad(dechex($rgb[1]), 2, "0", STR_PAD_LEFT);
+ $hex .= str_pad(dechex($rgb[2]), 2, "0", STR_PAD_LEFT);
+
+ return $hex; // returns the hex value including the number sign (#)
+ }
+
+ /**
+ * Devolver una cadena con el tag HTML strong.
+ *
+ * @param string $text con la cadena de texto
+ * @return string
+ */
+ public static function strongText($text)
+ {
+ return ('' . $text . '');
+ }
+
+ /**
+ * Devolver un link HTML.
+ *
+ * @param string $text con la cadena de texto
+ * @param string $link con el destino del enlace
+ * @param string $title con el título del enlace
+ * @param string $attribs con atributos del enlace
+ * @return string
+ */
+ public static function anchorText($text, $link = '', $title = '', $attribs = '')
+ {
+ $alink = (!empty($link)) ? $link : $text;
+ $atitle = (!empty($title)) ? $title : '';
+
+ $anchor = '' . $text . '';
+
+ return $anchor;
+ }
+}
diff --git a/inc/ImageUtil.class.php b/inc/ImageUtil.class.php
new file mode 100644
index 00000000..555498cc
--- /dev/null
+++ b/inc/ImageUtil.class.php
@@ -0,0 +1,119 @@
+.
+ *
+ */
+
+namespace SP;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+/**
+ * Class ImageUtil para la manipulación de imágenes
+ *
+ * @package SP
+ */
+class ImageUtil
+{
+ /**
+ * Convertir un texto a imagen
+ *
+ * @param $text string El texto a convertir
+ * @return bool|string
+ */
+ public static function convertText($text)
+ {
+ if(!function_exists('imagepng')){
+ return false;
+ }
+
+ $im = imagecreatetruecolor(strlen($text) * 20, 30);
+
+ // Colores de la imagen
+ $bgColor = imagecolorallocate($im, 255, 255, 255);
+// $shadowColor = imagecolorallocate($im, 128, 128, 128);
+ $fgColor = imagecolorallocate($im, 128, 128, 128);
+
+ imagefilledrectangle($im, 0, 0, strlen($text) * 20, 29, $bgColor);
+
+ // Ruta de la fuente
+ $font = Init::$SERVERROOT . '/imgs/NotoSansUI-Regular.ttf';
+
+ // Sombra
+// imagettftext($im, 14, 0, 13, 23, $shadowColor, $font, $text);
+
+ // Crear el texto
+ imagettftext($im, 12, 0, 10, 20, $fgColor, $font, $text);
+
+ // Devolver la imagen
+ ob_start();
+ imagepng($im);
+ $image = ob_get_contents();
+ ob_end_clean();
+
+ imagedestroy($im);
+
+ return base64_encode($image);
+ }
+
+ /**
+ * Crear miniatura de una imagen
+ *
+ * @param $image string La imagen a redimensionar
+ * @return bool|string
+ */
+ public static function createThumbnail(&$image)
+ {
+ if(!function_exists('imagepng')
+ || !function_exists('imagecreatefromjpeg')
+ || !function_exists('imagecreatefrompng')
+ ){
+ return false;
+ }
+
+ $im = imagecreatefromstring($image);
+
+ $width = imagesx($im);
+ $height = imagesy($im);
+
+ // Calcular el tamaño de la miniatura
+ $new_width = 48;
+ $new_height = floor( $height * ( $new_width / $width ) );
+
+ // Crear nueva imagen
+ $imTmp = imagecreatetruecolor($new_width, $new_height );
+
+ // Redimensionar la imagen
+ imagecopyresized( $imTmp, $im, 0, 0, 0, 0, $new_width, $new_height, $width, $height );
+
+ // Devolver la imagen
+ ob_start();
+ imagepng($imTmp);
+ $thumbnail = ob_get_contents();
+ ob_end_clean();
+
+ imagedestroy($imTmp);
+ imagedestroy($im);
+
+ return base64_encode($thumbnail);
+ }
+}
\ No newline at end of file
diff --git a/inc/Import.class.php b/inc/Import.class.php
new file mode 100644
index 00000000..9cbfb814
--- /dev/null
+++ b/inc/Import.class.php
@@ -0,0 +1,133 @@
+.
+ *
+ */
+
+namespace SP;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+/**
+ * Esta clase es la encargada de importar cuentas.
+ */
+class Import
+{
+ /**
+ * @var string
+ */
+ static $importPwd = '';
+ /**
+ * @var int
+ */
+ static $defUser = 0;
+ /**
+ * @var int
+ */
+ static $defGroup = 0;
+ /**
+ * @var string
+ */
+ static $csvDelimiter = '';
+
+ /**
+ * @param string $importPwd
+ */
+ public static function setImportPwd($importPwd)
+ {
+ self::$importPwd = $importPwd;
+ }
+
+ /**
+ * @param int $defUser
+ */
+ public static function setDefUser($defUser)
+ {
+ self::$defUser = $defUser;
+ }
+
+ /**
+ * @param int $defGroup
+ */
+ public static function setDefGroup($defGroup)
+ {
+ self::$defGroup = $defGroup;
+ }
+
+ /**
+ * @param string $csvDelimiter
+ */
+ public static function setCsvDelimiter($csvDelimiter)
+ {
+ self::$csvDelimiter = $csvDelimiter;
+ }
+
+ /**
+ * Iniciar la importación de cuentas.
+ *
+ * @param array $fileData Los datos del archivo
+ * @return array resultado del proceso
+ */
+ public static function doImport(&$fileData)
+ {
+ try {
+ $file = new FileImport($fileData);
+
+ switch ($file->getFileType()) {
+ case 'text/csv':
+ case 'application/vnd.ms-excel':
+ $import = new CsvImport($file);
+ $import->setFieldDelimiter(self::$csvDelimiter);
+ break;
+ case 'text/xml':
+ $import = new XmlImport($file);
+ $import->setImportPass(self::$importPwd);
+ break;
+ default:
+ throw new SPException(
+ SPException::SP_WARNING,
+ _('Tipo mime no soportado'),
+ _('Compruebe el formato del archivo')
+ );
+ }
+
+ $import->setUserId(self::$defUser);
+ $import->setUserGroupId(self::$defGroup);
+ $import->doImport();
+ } catch (SPException $e) {
+ Log::writeNewLog(_('Importar Cuentas'), $e->getMessage() . ';;' . $e->getHint());
+
+ $result['error'] = array('description' => $e->getMessage(), 'hint' => $e->getHint());
+ return $result;
+ }
+
+ Log::writeNewLog(_('Importar Cuentas'), _('Importación finalizada'));
+
+ $result['ok'] = array(
+ _('Importación finalizada'),
+ _('Revise el registro de eventos para más detalles')
+ );
+
+ return $result;
+ }
+}
\ No newline at end of file
diff --git a/inc/ImportBase.class.php b/inc/ImportBase.class.php
new file mode 100644
index 00000000..4d8ee678
--- /dev/null
+++ b/inc/ImportBase.class.php
@@ -0,0 +1,451 @@
+.
+ *
+ */
+
+namespace SP;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+abstract class ImportBase
+{
+ /**
+ * El id de usuario propietario de la cuenta.
+ *
+ * @var int
+ */
+ public $userId = 0;
+ /**
+ * El id del grupo propietario de la cuenta.
+ *
+ * @var int
+ */
+ public $userGroupId = 0;
+ /**
+ * Nombre de la cuenta.
+ *
+ * @var string
+ */
+ protected $_accountName = '';
+ /**
+ * Id del cliente.
+ *
+ * @var int
+ */
+ protected $_customerId = 0;
+ /**
+ * Id de categoria.
+ *
+ * @var int
+ */
+ protected $_categoryId = 0;
+ /**
+ * Login de la cuenta.
+ *
+ * @var string
+ */
+ protected $_accountLogin = '';
+ /**
+ * Url de la cuenta.
+ *
+ * @var string
+ */
+ protected $_accountUrl = '';
+ /**
+ * Notas de la cuenta.
+ *
+ * @var string
+ */
+ protected $_accountNotes = '';
+ /**
+ * Clave de la cuenta.
+ *
+ * @var string
+ */
+ protected $_accountPass = '';
+ /**
+ * IV de la clave de la cuenta.
+ *
+ * @var string
+ */
+ protected $_accountPassIV = '';
+ /**
+ * Nombre de la categoría.
+ *
+ * @var string
+ */
+ protected $_categoryName = '';
+ /**
+ * Nombre del cliente.
+ *
+ * @var string
+ */
+ protected $_customerName = '';
+ /**
+ * Descrición de la categoría.
+ *
+ * @var string
+ */
+ protected $_categoryDescription = '';
+ /**
+ * Descripción del cliente.
+ *
+ * @var string
+ */
+ protected $_customerDescription = '';
+ /**
+ * @var FileImport
+ */
+ protected $_file;
+ /**
+ * La clave de importación
+ *
+ * @var string
+ */
+ protected $_importPass;
+
+ /**
+ * @return string
+ */
+ public function getImportPass()
+ {
+ return $this->_importPass;
+ }
+
+ /**
+ * @param string $importPass
+ */
+ public function setImportPass($importPass)
+ {
+ $this->_importPass = $importPass;
+ }
+
+ /**
+ * Leer la cabecera del archivo XML y obtener patrones de aplicaciones conocidas.
+ *
+ * @return bool
+ */
+ protected function parseFileHeader()
+ {
+ $handle = @fopen($this->_file->getTmpFile(), "r");
+ $headersRegex = '/(KEEPASSX_DATABASE|revelationdata)/i';
+
+ if ($handle) {
+ // No. de líneas a leer como máximo
+ $maxLines = 5;
+ $count = 0;
+
+ while (($buffer = fgets($handle, 4096)) !== false && $count <= $maxLines) {
+ if (preg_match($headersRegex, $buffer, $app)) {
+ fclose($handle);
+ return strtolower($app[0]);
+ }
+ $count++;
+ }
+
+ fclose($handle);
+ }
+
+ return false;
+ }
+
+ /**
+ * Iniciar la importación desde XML.
+ *
+ * @throws SPException
+ * @return bool
+ */
+ public abstract function doImport();
+
+ /**
+ * Añadir una cuenta desde un archivo importado.
+ *
+ * @return bool
+ */
+ protected function addAccount()
+ {
+ if (is_null($this->getUserId()) || $this->getUserId() === 0) {
+ $this->setUserId(Session::getUserId());
+ }
+
+ if (is_null($this->getUserGroupId()) || $this->getUserGroupId() === 0) {
+ $this->setUserGroupId(Session::getUserGroupId());
+ }
+
+ $account = new Account;
+ $account->setAccountName($this->getAccountName());
+ $account->setAccountCustomerId($this->getCustomerId());
+ $account->setAccountCategoryId($this->getCategoryId());
+ $account->setAccountLogin($this->getAccountLogin());
+ $account->setAccountUrl($this->getAccountUrl());
+ $account->setAccountPass($this->getAccountPass());
+ $account->setAccountIV($this->getAccountPassIV());
+ $account->setAccountNotes($this->getAccountNotes());
+ $account->setAccountUserId($this->getUserId());
+ $account->setAccountUserGroupId($this->getUserGroupId());
+
+ return $account->createAccount();
+ }
+
+ /**
+ * @return int
+ */
+ public function getUserId()
+ {
+ return $this->userId;
+ }
+
+ /**
+ * @param int $userId
+ */
+ public function setUserId($userId)
+ {
+ $this->userId = $userId;
+ }
+
+ /**
+ * @return int
+ */
+ public function getUserGroupId()
+ {
+ return $this->userGroupId;
+ }
+
+ /**
+ * @param int $userGroupId
+ */
+ public function setUserGroupId($userGroupId)
+ {
+ $this->userGroupId = $userGroupId;
+ }
+
+ /**
+ * @return string
+ */
+ public function getAccountName()
+ {
+ return $this->_accountName;
+ }
+
+ /**
+ * @param string $_accountName
+ */
+ public function setAccountName($_accountName)
+ {
+ $this->_accountName = $_accountName;
+ }
+
+ /**
+ * @return int
+ */
+ public function getCustomerId()
+ {
+ return $this->_customerId;
+ }
+
+ /**
+ * @param int $_customerId
+ */
+ public function setCustomerId($_customerId)
+ {
+ $this->_customerId = $_customerId;
+ }
+
+ /**
+ * @return int
+ */
+ public function getCategoryId()
+ {
+ return $this->_categoryId;
+ }
+
+ /**
+ * @param int $_categoryId
+ */
+ public function setCategoryId($_categoryId)
+ {
+ $this->_categoryId = $_categoryId;
+ }
+
+ /**
+ * @return string
+ */
+ public function getAccountLogin()
+ {
+ return $this->_accountLogin;
+ }
+
+ /**
+ * @param string $_accountLogin
+ */
+ public function setAccountLogin($_accountLogin)
+ {
+ $this->_accountLogin = $_accountLogin;
+ }
+
+ /**
+ * @return string
+ */
+ public function getAccountUrl()
+ {
+ return $this->_accountUrl;
+ }
+
+ /**
+ * @param string $_accountUrl
+ */
+ public function setAccountUrl($_accountUrl)
+ {
+ $this->_accountUrl = $_accountUrl;
+ }
+
+ /**
+ * @return string
+ */
+ public function getAccountPass()
+ {
+ return $this->_accountPass;
+ }
+
+ /**
+ * @param string $_accountPass
+ */
+ public function setAccountPass($_accountPass)
+ {
+ $this->_accountPass = $_accountPass;
+ }
+
+ /**
+ * @return string
+ */
+ public function getAccountPassIV()
+ {
+ return $this->_accountPassIV;
+ }
+
+ /**
+ * @param string $_accountPassIV
+ */
+ public function setAccountPassIV($_accountPassIV)
+ {
+ $this->_accountPassIV = $_accountPassIV;
+ }
+
+ /**
+ * @return string
+ */
+ public function getAccountNotes()
+ {
+ return $this->_accountNotes;
+ }
+
+ /**
+ * @param string $_accountNotes
+ */
+ public function setAccountNotes($_accountNotes)
+ {
+ $this->_accountNotes = $_accountNotes;
+ }
+
+ /**
+ * Añadir una categoría y devolver el Id
+ * @return int
+ */
+ protected function addCategory()
+ {
+ return Category::addCategoryReturnId($this->getCategoryName(), $this->getCategoryDescription());
+ }
+
+ /**
+ * @return string
+ */
+ public function getCategoryName()
+ {
+ return $this->_categoryName;
+ }
+
+ /**
+ * @param string $_categoryName
+ */
+ public function setCategoryName($_categoryName)
+ {
+ $this->_categoryName = $_categoryName;
+ }
+
+ /**
+ * @return string
+ */
+ public function getCategoryDescription()
+ {
+ return $this->_categoryDescription;
+ }
+
+ /**
+ * @param string $categoryDescription
+ */
+ public function setCategoryDescription($categoryDescription)
+ {
+ $this->_categoryDescription = $categoryDescription;
+ }
+
+ /**
+ * Añadir un cliente y devolver el Id
+ * @return int
+ */
+ protected function addCustomer()
+ {
+ return Customer::addCustomerReturnId($this->getCustomerName(), $this->getCustomerDescription());
+ }
+
+ /**
+ * @return string
+ */
+ public function getCustomerName()
+ {
+ return $this->_customerName;
+ }
+
+ /**
+ * @param string $_customerName
+ */
+ public function setCustomerName($_customerName)
+ {
+ $this->_customerName = $_customerName;
+ }
+
+ /**
+ * @return string
+ */
+ public function getCustomerDescription()
+ {
+ return $this->_customerDescription;
+ }
+
+ /**
+ * @param string $customerDescription
+ */
+ public function setCustomerDescription($customerDescription)
+ {
+ $this->_customerDescription = $customerDescription;
+ }
+}
\ No newline at end of file
diff --git a/inc/init.php b/inc/Init.class.php
similarity index 50%
rename from inc/init.php
rename to inc/Init.class.php
index c9c78c52..884674d4 100644
--- a/inc/init.php
+++ b/inc/Init.class.php
@@ -23,36 +23,84 @@
*
*/
+namespace SP;
+
+use SP\Controller\ActionsInterface;
+
defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
-define ('EXTENSIONS_DIR', dirname(__FILE__) . DIRECTORY_SEPARATOR . 'ext');
-define('DEBUG', false);
-class SP_Init
+/**
+ * Clase Init para la inicialización del entorno de sysPass
+ *
+ * @package SP
+ */
+class Init
{
+ /**
+ * @var array Associative array for autoloading. classname => filename
+ */
+ public static $CLASSPATH = array();
- public static $CLASSPATH = array(); // Associative array for autoloading. classname => filename
- public static $SERVERROOT = ''; // The installation path on the server (e.g. /srv/www/syspass)
- public static $WEBROOT = ''; // The current request path relative to the sysPass root (e.g. files/index.php)
- public static $WEBURI = ''; // The sysPass root path for http requests (e.g. syspass/)
+ /**
+ * @var string The installation path on the server (e.g. /srv/www/syspass)
+ */
+ public static $SERVERROOT = '';
+
+ /**
+ * @var string The current request path relative to the sysPass root (e.g. files/index.php)
+ */
+ public static $WEBROOT = '';
+
+ /**
+ * @var string The sysPass root path for http requests (e.g. syspass/)
+ */
+ public static $WEBURI = '';
+
+ /**
+ * @var string Language used/detected
+ */
public static $LANG = '';
+
+ /**
+ * @var bool True if sysPass has been updated. Only for notices.
+ */
public static $UPDATED = false;
- private static $SUBURI = '';
+
+ /**
+ * @var string
+ */
+ public static $THEMEURI = '';
+
+ /**
+ * @var string
+ */
+ public static $THEMEPATH = '';
+
+ /**
+ * @var string
+ */
+ public static $THEME = '';
+
+ /**
+ * @var string
+ */
+ private static $_SUBURI = '';
/**
* Inicializar la aplicación.
* Esta función inicializa las variables de la aplicación y muestra la página
* según el estado en el que se encuentre.
- *
- * @return none
*/
- public static function init()
+ public static function start()
{
+ self::setIncludes();
+
if (version_compare(PHP_VERSION, '5.1.2', '>=')) {
// Registro del cargador de clases (PHP >= 5.1.2)
if (version_compare(PHP_VERSION, '5.3.0', '>=')) {
- spl_autoload_register(array('SP_Init', 'sysPassAutoload'), true, true);
+ spl_autoload_register('SP\Init::loadClass', true);
} else {
- spl_autoload_register(array('SP_Init', 'sysPassAutoload'));
+ spl_autoload_register(array('SP\Init', 'loadClass'));
}
} else {
/**
@@ -62,23 +110,14 @@ class SP_Init
*/
function __autoload($classname)
{
- SP_Init::sysPassAutoload($classname);
+ \SP\Init::loadClass($classname);
}
}
- // Establecer el modo debug si una sesión de xdebug está activa
- if (isset($_COOKIE['XDEBUG_SESSION']) && (!defined('DEBUG') || !DEBUG)) {
- define('DEBUG', true);
- }
+ error_reporting(E_ALL | E_STRICT);
- // Establecer el nivel de logging
if (defined('DEBUG') && DEBUG) {
-// error_log('sysPass DEBUG');
- error_reporting(E_ALL);
- ini_set('display_errors', 'On');
- } else {
- error_reporting(E_ALL & ~(E_DEPRECATED | E_STRICT | E_NOTICE));
- ini_set('display_errors', 'Off');
+ ini_set('display_errors', 1);
}
date_default_timezone_set('UTC');
@@ -111,15 +150,36 @@ class SP_Init
$_SERVER['PHP_AUTH_PW'] = strip_tags($password);
}
- // Inicar la sesión de PHP
+ // Establecer el modo debug si una sesión de xdebug está activa
+ if (isset($_COOKIE['XDEBUG_SESSION']) && !defined('DEBUG')) {
+ define('DEBUG', true);
+ }
+
+ // Establecer el nivel de logging
+ if (defined('DEBUG') && DEBUG) {
+// error_log('sysPass DEBUG');
+ error_reporting(E_ALL);
+ ini_set('display_errors', 'On');
+ } else {
+ error_reporting(E_ALL & ~(E_DEPRECATED | E_STRICT | E_NOTICE));
+ ini_set('display_errors', 'Off');
+ }
+
+ // Cargar las extensiones
+ self::loadExtensions();
+
+ // Iniciar la sesión de PHP
self::startSession();
- // Establecer las rutas de la aplicación
+ // Establecer las rutas de la aplicación
self::setPaths();
// Cargar el lenguaje
self::selectLang();
+ // Establecer el tema de sysPass
+ self::selectTheme();
+
// Comprobar si es necesario inicialización
if (self::checkInitSourceInclude()) {
return;
@@ -131,33 +191,36 @@ class SP_Init
// Comprobar si está instalado
self::checkInstalled();
+ // Comprobar si el modo mantenimiento está activado
+ self::checkMaintenanceMode();
+
// Comprobar si la Base de datos existe
- if (!db::checkDatabaseExist()) {
+ if (!DB::checkDatabaseExist()) {
self::initError(_('Error en la verificación de la base de datos'));
}
- // Comprobar si el modo mantenimiento está activado
- self::checkMaintenanceMode();
+ // Comprobar si es cierre de sesión
+ self::checkLogout();
// Comprobar la versión y actualizarla
self::checkVersion();
- // Inicializar las variables de sesión de usuario
+ // Inicializar la sesión
self::initSession();
// Comprobar acciones en URL
- self::checkRequestActions();
+ self::checkPreLoginActions();
// Intentar establecer el tiempo de vida de la sesión en PHP
- $sessionLifeTime = SP_Util::getSessionLifeTime();
+ $sessionLifeTime = self::getSessionLifeTime();
@ini_set('gc_maxlifetime', (string)$sessionLifeTime);
- if (!SP_Config::getValue("installed", false)) {
- $_SESSION['user_id'] = '';
+ if (!Config::getValue("installed", false)) {
+ Session::setUserId('');
}
- if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SESSION['user_id'])
- && $_SERVER['PHP_AUTH_USER'] != $_SESSION['user_id']
+ if (isset($_SERVER['PHP_AUTH_USER']) && Session::getUserId()
+ && $_SERVER['PHP_AUTH_USER'] != Session::getUserId()
) {
self::logout();
}
@@ -174,89 +237,105 @@ class SP_Init
}
}
- // El usuario está logado
- if (self::isLoggedIn()) {
- if (isset($_GET["logout"]) && $_GET["logout"]) {
- self::logout();
-
- if (count($_GET) > 1) {
- foreach ($_GET as $param => $value) {
- if ($param == 'logout') {
- continue;
- }
-
- $params[] = SP_Html::sanitize($param) . '=' . SP_Html::sanitize($value);
- }
-
- header("Location: " . self::$WEBROOT . '/index.php?' . implode('&', $params));
- } else {
- header("Location: " . self::$WEBROOT . '/');
- }
- }
+ if (self::isLoggedIn() || Request::analyze('isAjax', false, true)) {
return;
- } else {
- // Si la petición es ajax, no hacer nada
- if ((isset($_POST['isAjax']) || isset($_GET['isAjax']))
- && ($_POST['isAjax'] || $_GET['isAjax'])
- ) {
- return;
- }
-
- SP_Html::render('login');
- exit();
}
+ // El usuario no está logado y no es una petición, redirigir al login
+ self::goLogin();
}
/**
- * SPL autoload.
- * Cargador de clases
+ * Establecer las rutas de sysPass en el PATH de PHP
*/
- public static function sysPassAutoload($classname)
+ public static function setIncludes()
{
- $class = str_replace("sp_", '', strtolower($classname));
- $classfile = dirname(__FILE__) . DIRECTORY_SEPARATOR . $class . ".class.php";
+ set_include_path(MODEL_PATH . PATH_SEPARATOR . CONTROLLER_PATH . PATH_SEPARATOR . EXTENSIONS_PATH . PATH_SEPARATOR . get_include_path());
+ }
- if (is_readable($classfile)) {
- require $classfile;
- } else {
- error_log('Class Autoloader Error: ' . $classfile);
+ /**
+ * Cargador de clases de sysPass
+ *
+ * @param $class string El nombre de la clase a cargar
+ */
+ public static function loadClass($class)
+ {
+ // Eliminar \\ para las clases con namespace definido
+ $class = (strripos($class, '\\')) ? substr($class, strripos($class, '\\') + 1) : $class;
+
+ // Buscar la clase en los directorios de include
+ foreach (explode(':', get_include_path()) as $includePath) {
+ $classFile = $includePath . DIRECTORY_SEPARATOR . $class . '.class.php';
+ if (is_readable($classFile)) {
+ require $classFile;
+ }
}
}
+ /**
+ * Iniciar la sesión PHP
+ */
+ private static function startSession()
+ {
+ // Evita que javascript acceda a las cookies de sesion de PHP
+ ini_set('session.cookie_httponly', '1');
+
+ // Si la sesión no puede ser iniciada, devolver un error 500
+ if (session_start() === false) {
+
+ Log::newLog(_('Sesion'), _('La sesión no puede ser inicializada'));
+
+ header('HTTP/1.1 500 Internal Server Error');
+
+ self::initError(_('La sesión no puede ser inicializada'), _('Consulte con el administrador'));
+ }
+ }
+
+ /**
+ * Devuelve un eror utilizando la plantilla de rror.
+ *
+ * @param string $str con la descripción del error
+ * @param string $hint opcional, con una ayuda sobre el error
+ */
+ public static function initError($str, $hint = '')
+ {
+ $tpl = new Template();
+ $tpl->append('errors', array('type' => SPException::SP_CRITICAL, 'description' => $str, 'hint' => $hint));
+ $controller = new Controller\MainC($tpl);
+ $controller->getError(true);
+ $controller->view();
+ exit;
+ }
+
/**
* Establecer las rutas de la aplicación.
* Esta función establece las rutas del sistema de archivos y web de la aplicación.
* La variables de clase definidas son $SERVERROOT, $WEBROOT y $SUBURI
- *
- * @return none
*/
private static function setPaths()
{
// Calcular los directorios raíz
- self::$SERVERROOT = str_replace("\\", DIRECTORY_SEPARATOR, substr(__DIR__, 0, -4));
+// self::$SERVERROOT = str_replace("\\", DIRECTORY_SEPARATOR, substr(__DIR__, 0, -4));
+ $dir = (defined(__DIR__)) ? __DIR__ : dirname(__FILE__);
- // Establecer la ruta include correcta
- set_include_path(self::$SERVERROOT . DIRECTORY_SEPARATOR . 'inc' . PATH_SEPARATOR .
- self::$SERVERROOT . DIRECTORY_SEPARATOR . 'config' . PATH_SEPARATOR .
- get_include_path() . PATH_SEPARATOR . self::$SERVERROOT);
+ self::$SERVERROOT = substr($dir, 0, strripos($dir, '/'));
- self::$SUBURI = str_replace("\\", '/', substr(realpath($_SERVER["SCRIPT_FILENAME"]), strlen(self::$SERVERROOT)));
+ self::$_SUBURI = str_replace("\\", '/', substr(realpath($_SERVER["SCRIPT_FILENAME"]), strlen(self::$SERVERROOT)));
$scriptName = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '';
if (substr($scriptName, -1) == '/') {
$scriptName .= 'index.php';
// Asegurar que suburi sigue las mismas reglas que scriptName
- if (substr(self::$SUBURI, -9) != 'index.php') {
- if (substr(self::$SUBURI, -1) != '/') {
- self::$SUBURI .= '/';
+ if (substr(self::$_SUBURI, -9) != 'index.php') {
+ if (substr(self::$_SUBURI, -1) != '/') {
+ self::$_SUBURI .= '/';
}
- self::$SUBURI .= 'index.php';
+ self::$_SUBURI .= 'index.php';
}
}
- $pos = strpos($scriptName, self::$SUBURI);
+ $pos = strpos($scriptName, self::$_SUBURI);
if ($pos === false) {
$pos = strpos($scriptName, '?');
@@ -264,31 +343,22 @@ class SP_Init
self::$WEBROOT = substr($scriptName, 0, $pos);
- if (self::$WEBROOT != '' and self::$WEBROOT[0] !== '/') {
+ if (self::$WEBROOT != '' && self::$WEBROOT[0] !== '/') {
self::$WEBROOT = '/' . self::$WEBROOT;
}
- self::$WEBURI = (isset($_SERVER['HTTPS'])) ? 'https://' : 'http://';
- self::$WEBURI .= $_SERVER['HTTP_HOST'] . self::$WEBROOT;
+ $protocol = (isset($_SERVER['HTTPS'])) ? 'https://' : 'http://';
+ self::$WEBURI .= $protocol . $_SERVER['HTTP_HOST'] . self::$WEBROOT;
}
/**
* Establece el lenguaje de la aplicación.
* Esta función establece el lenguaje según esté definido en la configuración o en el navegador.
- *
- * @returns none
*/
private static function selectLang()
{
- // Comprobamos si el lenguaje ha sido establecido. Si es necesario recargar
- // la configuración, se continúa.
- if (!isset($_SESSION['language']) || SP_Common::parseParams('s', 'reload', 0)){
- $browserLang = str_replace("-", "_", substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 5));
- $configLang = SP_Config::getValue('sitelang');
- } else {
- $browserLang = $configLang = $_SESSION['language'];
- }
-
+ $browserLang = str_replace("-", "_", substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 5));
+ $configLang = Config::getValue('sitelang');
$localesDir = self::$SERVERROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'locales';
// Establecer a en_US si no existe la traducción o no es español
@@ -301,20 +371,26 @@ class SP_Init
self::$LANG = ($configLang) ? $configLang : $browserLang;
}
- self::$LANG .= '.utf8';
+ self::$LANG = self::$LANG . ".utf8";
- putenv('LANG=' . self::$LANG);
+ putenv("LANG=" . self::$LANG);
+ setlocale(LC_MESSAGES, self::$LANG);
+ setlocale(LC_ALL, self::$LANG);
+ bindtextdomain("messages", $localesDir);
+ textdomain("messages");
+ bind_textdomain_codeset("messages", 'UTF-8');
+ }
- if (defined('LC_MESSAGES')){
- setlocale(LC_MESSAGES, self::$LANG);
- } else {
- putenv('LC_ALL=' . self::$LANG);
- setlocale(LC_ALL, self::$LANG);
- }
+ /**
+ * Establecer el tema visual de sysPass desde la configuración
+ */
+ private static function selectTheme()
+ {
+ self::$THEME = Config::getValue('sitetheme', 'material-blue');
+ self::$THEMEURI = self::$WEBURI . '/inc/themes/' . self::$THEME;
+ self::$THEMEPATH = DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'themes' . DIRECTORY_SEPARATOR . self::$THEME;
- bindtextdomain('messages', $localesDir);
- textdomain('messages');
- bind_textdomain_codeset('messages', 'UTF-8');
+ Session::setTheme(self::$THEME);
}
/**
@@ -325,7 +401,7 @@ class SP_Init
private static function checkInitSourceInclude()
{
$srcScript = pathinfo($_SERVER["SCRIPT_NAME"], PATHINFO_BASENAME);
- $skipInit = array('js.php', 'css.php');
+ $skipInit = array('js.php', 'css.php', 'api.php', 'ajax_getEnvironment.php');
return (in_array($srcScript, $skipInit));
}
@@ -333,8 +409,6 @@ class SP_Init
/**
* Comprobar el archivo de configuración.
* Esta función comprueba que el archivo de configuración exista y los permisos sean correctos.
- *
- * @return none
*/
private static function checkConfig()
{
@@ -351,47 +425,29 @@ class SP_Init
//$configPerms = substr(sprintf('%o', fileperms(self::$SERVERROOT.'/config')), -4);
$configPerms = decoct(fileperms(self::$SERVERROOT . DIRECTORY_SEPARATOR . 'config') & 0777);
- if (!SP_Util::runningOnWindows() && $configPerms != "750") {
+ if (!Util::runningOnWindows() && $configPerms != "750") {
clearstatcache();
self::initError(_('Los permisos del directorio "/config" son incorrectos'), _('Actual:') . ' ' . $configPerms . ' - ' . _('Necesario: 750'));
}
}
- /**
- * Devuelve un eror utilizando la plantilla de rror.
- *
- * @param string $str con la descripción del error
- * @param string $hint opcional, con una ayuda sobre el error
- * @returns none
- */
- public static function initError($str, $hint = '')
- {
- $errors[] = array(
- 'type' => 'critical',
- 'description' => $str,
- 'hint' => $hint);
-
- SP_Html::render('error', $errors);
- exit();
- }
-
/**
* Comprueba que la aplicación esté instalada
* Esta función comprueba si la aplicación está instalada. Si no lo está, redirige al instalador.
- *
- * @return none
*/
private static function checkInstalled()
{
// Redirigir al instalador si no está instalada
- if (!SP_Config::getValue('installed', false) && self::$SUBURI != '/index.php') {
- $url = 'http://' . $_SERVER['SERVER_NAME'] . ':' . $_SERVER["SERVER_PORT"] . self::$WEBROOT . '/index.php';
- header("Location: $url");
- exit();
- } elseif (!SP_Config::getValue('installed', false) && self::$SUBURI == '/index.php') {
- // Comprobar si sysPass está instalada o en modo mantenimiento
- if (!SP_Config::getValue('installed', false)) {
- SP_Html::render('install');
+ if (!Config::getValue('installed', false)) {
+ if (self::$_SUBURI != '/index.php') {
+ $url = 'http://' . $_SERVER['SERVER_NAME'] . ':' . $_SERVER["SERVER_PORT"] . self::$WEBROOT . '/index.php';
+ header("Location: $url");
+ exit();
+ } elseif (self::$_SUBURI == '/index.php') {
+ // Comprobar si sysPass está instalada o en modo mantenimiento
+ $controller = new Controller\MainC();
+ $controller->getInstaller();
+ $controller->view();
exit();
}
}
@@ -407,11 +463,11 @@ class SP_Init
*/
public static function checkMaintenanceMode($check = false)
{
- if (SP_Config::getValue('maintenance', false)) {
+ if (Config::getValue('maintenance', false)) {
if ($check === true
- || SP_Common::parseParams('r', 'isAjax', 0) === 1
- || SP_Common::parseParams('g', 'upgrade', 0) === 1
- || SP_Common::parseParams('g', 'nodbupgrade', 0) === 1
+ || Request::analyze('isAjax', 0) === 1
+ || Request::analyze('upgrade', 0) === 1
+ || Request::analyze('nodbupgrade', 0) === 1
) {
return true;
}
@@ -426,95 +482,141 @@ class SP_Init
return false;
}
+ /**
+ * Comprobar si es necesario cerrar la sesión
+ */
+ private static function checkLogout()
+ {
+ if (Request::analyze('logout', false, true)) {
+ self::logout();
+ self::goLogin();
+ }
+ }
+
+ /**
+ * Deslogar el usuario actual y eliminar la información de sesión.
+ */
+ private static function logout()
+ {
+ self::wrLogoutInfo();
+
+ session_unset();
+ session_destroy();
+ }
+
+ /**
+ * Escribir la información de logout en el registro de eventos.
+ */
+ private static function wrLogoutInfo()
+ {
+ $inactiveTime = round(((time() - Session::getLastActivity()) / 60), 2);
+ $totalTime = round(((time() - Session::getStartActivity()) / 60), 2);
+ $ulogin = Session::getUserLogin();
+
+ $log = new Log(_('Finalizar sesión'));
+ $log->addDescription(_('Usuario') . ": " . $ulogin);
+ $log->addDescription(_('Tiempo inactivo') . ": " . $inactiveTime . " min.");
+ $log->addDescription(_('Tiempo total') . ": " . $totalTime . " min.");
+ $log->writeLog();
+ }
+
+ /**
+ * Mostrar la página de login
+ */
+ private static function goLogin()
+ {
+ $controller = new Controller\MainC(null,'login');
+ $controller->getLogin();
+ $controller->view();
+ exit;
+ }
+
/**
* Comrpueba y actualiza la versión de la aplicación.
- *
- * @returns none
*/
private static function checkVersion()
{
- if (substr(self::$SUBURI, -9) != 'index.php' || SP_Common::parseParams('g', 'logout', 0) === 1) {
+ if (substr(self::$_SUBURI, -9) != 'index.php' || Request::analyze('logout', 0) === 1) {
return;
}
$update = false;
- $configVersion = (int)str_replace('.', '', SP_Config::getValue('version'));
- $databaseVersion = (int)str_replace('.', '', SP_Config::getConfigValue('version'));
- $appVersion = (int)implode(SP_Util::getVersion(true));
+ $configVersion = (int)str_replace('.', '', Config::getValue('version'));
+ $databaseVersion = (int)str_replace('.', '', Config::getConfigDbValue('version'));
+ $appVersion = (int)implode(Util::getVersion(true));
if ($databaseVersion < $appVersion
- && SP_Common::parseParams('g', 'nodbupgrade', 0) === 0
+ && Request::analyze('nodbupgrade', 0) === 0
) {
- if (SP_Upgrade::needDBUpgrade($databaseVersion)) {
+ if (Upgrade::needDBUpgrade($databaseVersion)) {
if (!self::checkMaintenanceMode(true)) {
- if (SP_Config::getValue('upgrade_key', 0) === 0) {
- SP_Config::setValue('upgrade_key', sha1(uniqid(mt_rand(), true)));
- SP_Config::setValue('maintenance', true);
+ if (Config::getValue('upgrade_key', 0) === 0) {
+ Config::setValue('upgrade_key', sha1(uniqid(mt_rand(), true)));
+ Config::setValue('maintenance', true);
}
- self::initError(_('La aplicación necesita actualizarse'), _('Si es un administrador pulse en el enlace:') . ' ' . _('Actualizar') . '');
+ self::initError(_('La aplicación necesita actualizarse'), sprintf(_('Si es un administrador pulse en el enlace: %s'), '' . _('Actualizar') . ''));
}
- $action = SP_Common::parseParams('g', 'a');
- $hash = SP_Common::parseParams('g', 'h');
+ $action = Request::analyze('a');
+ $hash = Request::analyze('h');
- if ($action === 'upgrade' && $hash === SP_Config::getValue('upgrade_key', 0)) {
- if (SP_Upgrade::doUpgrade($databaseVersion)) {
- SP_Config::setConfigValue('version', $appVersion);
- SP_Config::setValue('maintenance', false);
- SP_Config::deleteKey('upgrade_key');
+ if ($action === 'upgrade' && $hash === Config::getValue('upgrade_key', 0)) {
+ if (Upgrade::doUpgrade($databaseVersion)) {
+ Config::setConfigDbValue('version', $appVersion);
+ Config::setValue('maintenance', false);
+ Config::deleteKey('upgrade_key');
$update = true;
}
} else {
- SP_Html::render('upgrade');
+ $controller = new Controller\MainC();
+ $controller->getUpgrade();
+ $controller->view();
exit();
}
}
}
if ($configVersion < $appVersion
- && SP_Upgrade::needConfigUpgrade($appVersion)
- && SP_Upgrade::upgradeConfig($appVersion)
+ && Upgrade::needConfigUpgrade($appVersion)
+ && Upgrade::upgradeConfig($appVersion)
) {
- SP_Config::setValue('version', $appVersion);
+ Config::setValue('version', $appVersion);
$update = true;
}
if ($update === true) {
- $message['action'] = _('Actualización');
- $message['text'][] = _('Actualización de versión realizada.');
- $message['text'][] = _('Versión') . ': ' . $appVersion;
+ $log = new Log(_('Actualización'));
+ $log->addDescription(_('Actualización de versión realizada.'));
+ $log->addDescription(_('Versión') . ': ' . $appVersion);
+ $log->writeLog();
- SP_Log::wrLogInfo($message);
- SP_Common::sendEmail($message);
+ Email::sendEmail($log);
self::$UPDATED = true;
}
}
/**
- * Inicializar las variables de la sesión de usuario
- *
- * @return none
+ * Inicialiar la sesión de usuario
*/
private static function initSession()
{
- $sessionLifeTime = SP_Util::getSessionLifeTime();
+ $sessionLifeTime = self::getSessionLifeTime();
// Regenerar el Id de sesión periódicamente para evitar fijación
- if (!isset($_SESSION['SID_CREATED'])) {
- $_SESSION['SID_CREATED'] = time();
- $_SESSION['START_ACTIVITY'] = time();
- } else if (time() - $_SESSION['SID_CREATED'] > $sessionLifeTime / 2) {
+ if (Session::getSidStartTime() === 0) {
+ Session::setSidStartTime(time());
+ Session::setStartActivity(time());
+ } else if (Session::getUserId() && time() - Session::getSidStartTime() > $sessionLifeTime / 2) {
session_regenerate_id(true);
- $_SESSION['SID_CREATED'] = time();
+ Session::setSidStartTime(time());
// Recargar los permisos del perfil de usuario
- $_SESSION['usrprofile'] = SP_Profiles::getProfileForUser();
- unset($_SESSION['APP_CONFIG']);
+ Session::setUserProfile(Profile::getProfile(Session::getUserProfileId()));
}
// Timeout de sesión
- if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > $sessionLifeTime)) {
+ if (Session::getLastActivity() && (time() - Session::getLastActivity() > $sessionLifeTime)) {
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time() - 42000, '/');
}
@@ -526,44 +628,45 @@ class SP_Init
session_start();
}
- $_SESSION['LAST_ACTIVITY'] = time();
+ Session::setLastActivity(time());
}
/**
- * Escribir la información de logout en el registro de eventos.
+ * Obtener el timeout de sesión desde la configuración.
*
- * @return none
+ * @return int con el tiempo en segundos
*/
- private static function wrLogoutInfo()
+ private static function getSessionLifeTime()
{
- $inactiveTime = round(((time() - $_SESSION['LAST_ACTIVITY']) / 60), 2);
- $totalTime = round(((time() - $_SESSION['START_ACTIVITY']) / 60), 2);
- $ulogin = SP_Common::parseParams('s', 'ulogin');
-
- $message['action'] = _('Finalizar sesión');
- $message['text'][] = _('Usuario') . ": " . $ulogin;
- $message['text'][] = _('Tiempo inactivo') . ": " . $inactiveTime . " min.";
- $message['text'][] = _('Tiempo total') . ": " . $totalTime . " min.";
-
- SP_Log::wrLogInfo($message);
- }
-
- /**
- * Comprobar si hay que ejecutar acciones de URL.
- *
- * @return bool|none
- */
- public static function checkRequestActions()
- {
- if (!SP_Common::parseParams('r', 'a', '', true)) {
- return;
+ if (is_null(Session::getSessionTimeout())) {
+ Session::setSessionTimeout(Config::getValue('session_timeout', 60 * 5));
}
- $action = SP_Common::parseParams('r', 'a');
+ return Session::getSessionTimeout();
+ }
+
+ /**
+ * Comprobar si hay que ejecutar acciones de URL antes del login.
+ *
+ * @return bool
+ */
+ public static function checkPreLoginActions()
+ {
+ if (!Request::analyze('a', '', true)) {
+ return false;
+ }
+
+ $action = Request::analyze('a');
+ $controller = new Controller\MainC();
switch ($action) {
case 'passreset':
- SP_Html::render('passreset');
+ $controller->getPassReset();
+ $controller->view();
+ break;
+ case '2fa':
+ $controller->get2FA();
+ $controller->view();
break;
default:
return false;
@@ -573,16 +676,30 @@ class SP_Init
}
/**
- * Deslogar el usuario actual y eliminar la información de sesión.
+ * Comprobar si hay que ejecutar acciones de URL después del login.
*
- * @return none
+ * @return bool
*/
- private static function logout()
+ public static function checkPostLoginActions()
{
- self::wrLogoutInfo();
+ if (!Request::analyze('a', '', true)) {
+ return false;
+ }
- session_unset();
- session_destroy();
+ $action = Request::analyze('a');
+ $controller = new Controller\MainC(null , 'main');
+
+ switch ($action) {
+ case 'accView':
+ $itemId = Request::analyze('i');
+ $onLoad = 'doAction(' . ActionsInterface::ACTION_ACC_VIEW . ',' . ActionsInterface::ACTION_ACC_SEARCH . ',' . $itemId . ')';
+ $controller->getMain($onLoad);
+ $controller->view();
+ break;
+ default:
+ return false;
+ }
+ return true;
}
/**
@@ -592,10 +709,13 @@ class SP_Init
*/
public static function isLoggedIn()
{
- if (SP_Common::parseParams('s', 'ulogin')) {
+ if (Session::getUserLogin()
+ && Session::get2FApassed()
+ ) {
// TODO: refrescar variables de sesión.
return true;
}
+
return false;
}
@@ -612,32 +732,14 @@ class SP_Init
}
/**
- * Iniciar la sesión PHP
+ * Cargar las clases de las extensiones de sysPass
*/
- private static function startSession(){
- // Evita que javascript acceda a las cookies de sesion de PHP
- ini_set('session.cookie_httponly', '1');
+ private static function loadExtensions()
+ {
+ // Utilizar un cargador de clases PSR-0
+ require EXTENSIONS_PATH . DIRECTORY_SEPARATOR . 'SplClassLoader.php';
- // Si la sesión no puede ser iniciada, devolver un error 500
- if (session_start() === false) {
-
- SP_Log::wrLogInfo(_('Sesion'), _('La sesión no puede ser inicializada'));
-
- header('HTTP/1.1 500 Internal Server Error');
- $errors[] = array(
- 'type' => 'critical',
- 'description' => _('La sesión no puede ser inicializada'),
- 'hint' => _('Consulte con el administrador'));
-
- SP_Html::render('error', $errors);
- exit();
- }
+ $phpSecLoader = new \SplClassLoader('phpseclib', EXTENSIONS_PATH);
+ $phpSecLoader->register();
}
-}
-
-// Empezar a calcular el tiempo y memoria utilizados
-$memInit = memory_get_usage();
-$time_start = SP_Init::microtime_float();
-
-// Inicializar sysPass
-SP_Init::init();
+}
\ No newline at end of file
diff --git a/inc/Installer.class.php b/inc/Installer.class.php
new file mode 100644
index 00000000..9cbbb845
--- /dev/null
+++ b/inc/Installer.class.php
@@ -0,0 +1,516 @@
+.
+ *
+ */
+
+namespace SP;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+define('IS_INSTALLER', 1);
+
+/**
+ * Esta clase es la encargada de instalar sysPass.
+ */
+class Installer
+{
+ /**
+ * @var string Usuario de la BD
+ */
+ private static $_dbuser;
+ /**
+ * @var string Clave de la BD
+ */
+ private static $_dbpass;
+ /**
+ * @var string Nombre de la BD
+ */
+ private static $_dbname;
+ /**
+ * @var string Host de la BD
+ */
+ private static $_dbhost;
+ /**
+ * @var \PDO Instancia a de conexión a la BD
+ */
+ private static $_dbc;
+ /**
+ * @var string Usuario 'admin' de sysPass
+ */
+ private static $_username;
+ /**
+ * @var string Clave del usuario 'admin' de sysPass
+ */
+ private static $_password;
+ /**
+ * @var string Clave maestra de sysPass
+ */
+ private static $_masterPassword;
+ /**
+ * @var bool Activar/desactivar Modo hosting
+ */
+ private static $_isHostingMode;
+
+ /**
+ * @param string $dbname
+ */
+ public static function setDbname($dbname)
+ {
+ self::$_dbname = $dbname;
+ }
+
+ /**
+ * @param string $username
+ */
+ public static function setUsername($username)
+ {
+ self::$_username = $username;
+ }
+
+ /**
+ * @param string $password
+ */
+ public static function setPassword($password)
+ {
+ self::$_password = $password;
+ }
+
+ /**
+ * @param string $masterPassword
+ */
+ public static function setMasterPassword($masterPassword)
+ {
+ self::$_masterPassword = $masterPassword;
+ }
+
+ /**
+ * @param boolean $isHostingMode
+ */
+ public static function setIsHostingMode($isHostingMode)
+ {
+ self::$_isHostingMode = $isHostingMode;
+ }
+
+ /**
+ * Iniciar instalación.
+ *
+ * @return array resultado del proceso
+ */
+ public static function install()
+ {
+ $error = array();
+
+ if (!self::$_username) {
+ $error[] = array(
+ 'type' => SPException::SP_CRITICAL,
+ 'description' => _('Indicar nombre de usuario admin'),
+ 'hint' => _('Usuario admin para acceso a la aplicación'));
+ } elseif (!self::$_password) {
+ $error[] = array(
+ 'type' => SPException::SP_CRITICAL,
+ 'description' => _('Indicar la clave de admin'),
+ 'hint' => _('Clave del usuario admin de la aplicación'));
+ } elseif (!self::$_masterPassword) {
+ $error[] = array(
+ 'type' => SPException::SP_CRITICAL,
+ 'description' => _('Indicar la clave maestra'),
+ 'hint' => _('Clave maestra para encriptar las claves'));
+ } elseif (strlen(self::$_masterPassword) < 11) {
+ $error[] = array(
+ 'type' => SPException::SP_CRITICAL,
+ 'description' => _('Clave maestra muy corta'),
+ 'hint' => _('La longitud de la clave maestra ha de ser mayor de 11 caracteres'));
+ } elseif (!self::$_dbuser) {
+ $error[] = array(
+ 'type' => SPException::SP_CRITICAL,
+ 'description' => _('Indicar el usuario de la BBDD'),
+ 'hint' => _('Usuario con permisos de administrador de la Base de Datos'));
+ } elseif (!self::$_dbpass) {
+ $error[] = array(
+ 'type' => SPException::SP_CRITICAL,
+ 'description' => _('Indicar la clave de la BBDD'),
+ 'hint' => _('Clave del usuario administrador de la Base de Datos'));
+ } elseif (!self::$_dbname) {
+ $error[] = array(
+ 'type' => SPException::SP_CRITICAL,
+ 'description' => _('Indicar el nombre de la BBDD'),
+ 'hint' => _('Nombre para la BBDD de la aplicación pej. syspass'));
+ } elseif (substr_count(self::$_dbname, '.') >= 1) {
+ $error[] = array(
+ 'type' => SPException::SP_CRITICAL,
+ 'description' => _('El nombre de la BBDD no puede contener "."'),
+ 'hint' => _('Elimine los puntos del nombre de la Base de Datos'));
+ } elseif (!self::$_dbhost) {
+ $error[] = array(
+ 'type' => SPException::SP_CRITICAL,
+ 'description' => _('Indicar el servidor de la BBDD'),
+ 'hint' => _('Servidor donde se instalará la Base de Datos'));
+ }
+
+ if (count($error) === 0) { //no errors, good
+ // Generate a random salt that is used to salt the local user passwords
+ Config::setValue('passwordsalt', Util::generate_random_bytes(30));
+ Config::setValue('version', implode(Util::getVersion(true)));
+
+ if (preg_match('/(.*):(\d{1,5})/', self::$_dbhost, $match)) {
+ self::setDbhost($match[1]);
+ $dbport = $match[2];
+ } else {
+ $dbport = 3306;
+ }
+
+ // Save DB connection info
+ Config::setValue('dbhost', self::$_dbhost);
+ Config::setValue('dbname', self::$_dbname);
+
+ // Set some basic configuration options
+ Config::setDefaultValues();
+
+ try {
+ self::checkDatabaseAdmin(self::$_dbhost, self::$_dbuser, self::$_dbpass, $dbport);
+ self::setupMySQLDatabase();
+ self::createAdminAccount();
+ } catch (SPException $e) {
+ $error[] = array(
+ 'type' => $e->getType(),
+ 'description' => $e->getMessage(),
+ 'hint' => $e->getHint());
+ return $error;
+ }
+
+ Config::setConfigDbValue('version', implode(Util::getVersion(true)));
+ Config::setValue('installed', 1);
+ }
+
+ return $error;
+ }
+
+ /**
+ * @param string $dbhost
+ */
+ public static function setDbhost($dbhost)
+ {
+ self::$_dbhost = $dbhost;
+ }
+
+ /**
+ * Comprobar la conexión con la BBDD.
+ * Comprobar si la conexión con la base de datos para sysPass es posible con
+ * los datos facilitados.
+ *
+ * @param string $dbhost host de conexión
+ * @param string $dbadmin usuario de conexión
+ * @param string $dbpass clave de conexión
+ * @param string $dbport puerto de conexión
+ * @throws SPException
+ */
+ private static function checkDatabaseAdmin($dbhost, $dbadmin, $dbpass, $dbport)
+ {
+ try {
+ $dsn = 'mysql:host=' . $dbhost . ';dbport=' . $dbport . ';charset=utf8';
+ self::$_dbc = new \PDO($dsn, $dbadmin, $dbpass);
+ } catch (\PDOException $e) {
+ throw new SPException(SPException::SP_CRITICAL
+ , _('No es posible conectar con la BD')
+ , _('Compruebe los datos de conexión') . ' ' . $e->getMessage());
+ }
+ }
+
+ /**
+ * Configurar la base de datos.
+ * Esta función crea la base de datos y el usuario necesario para sysPass.
+ *
+ * @throws SPException
+ */
+ private static function setupMySQLDatabase()
+ {
+
+ // Si no es modo hosting se crea un hash para la clave y un usuario con prefijo "sp_" para la DB
+ if (!self::$_isHostingMode) {
+ self::setDbpass(md5(time() . self::$_password));
+ self::setDbuser(substr('sp_' . self::$_username, 0, 16));
+
+ // Comprobar si el usuario sumistrado existe
+ $query = "SELECT COUNT(*) FROM mysql.user WHERE user='" . self::$_username . "' AND host='" . self::$_dbhost . "'";
+
+ // Si no existe el usuario, se intenta crear
+ if (intval(self::$_dbc->query($query)->fetchColumn()) === 0) {
+ // Se comprueba si el nuevo usuario es distinto del creado en otra instalación
+ if (self::$_dbuser != Config::getValue('dbuser')) {
+ self::createDBUser();
+ }
+ }
+ }
+
+ // Guardar el nuevo usuario/clave de conexión a la BD
+ Config::setValue('dbuser', self::$_dbuser);
+ Config::setValue('dbpass', self::$_dbpass);
+
+ try {
+ self::createMySQLDatabase();
+ self::createDBStructure();
+ } catch (SPException $e) {
+ throw $e;
+ }
+ }
+
+ /**
+ * @param string $dbpass
+ */
+ public static function setDbpass($dbpass)
+ {
+ self::$_dbpass = $dbpass;
+ }
+
+ /**
+ * @param string $dbuser
+ */
+ public static function setDbuser($dbuser)
+ {
+ self::$_dbuser = $dbuser;
+ }
+
+ /**
+ * Crear el usuario para conectar con la base de datos.
+ * Esta función crea el usuario para conectar con la base de datos.
+ * Si se marca en modo hosting, no se crea el usuario.
+ *
+ * @throws SPException
+ */
+ private static function createDBUser()
+ {
+ if (self::$_isHostingMode) {
+ return;
+ }
+
+ $query = "CREATE USER '" . self::$_dbuser . "'@'localhost' IDENTIFIED BY '" . self::$_dbpass . "'";
+
+ try {
+ self::$_dbc->query($query);
+ } catch (\PDOException $e) {
+ throw new SPException(SPException::SP_CRITICAL
+ , _('El usuario de MySQL ya existe') . " (" . self::$_dbuser . ")"
+ , _('Indique un nuevo usuario o elimine el existente'));
+ }
+ }
+
+ /**
+ * Crear la base de datos en MySQL.
+ *
+ * @throws SPException
+ */
+ private static function createMySQLDatabase()
+ {
+ if (self::checkDatabaseExist()) {
+ throw new SPException(SPException::SP_CRITICAL
+ , _('La BBDD ya existe')
+ , _('Indique una nueva Base de Datos o elimine la existente'));
+ }
+
+ $query = "CREATE DATABASE IF NOT EXISTS `" . self::$_dbname . "`";
+
+ try {
+ self::$_dbc->query($query);
+ } catch (\PDOException $e) {
+ throw new SPException(SPException::SP_CRITICAL
+ , _('Error al crear la BBDD') . " (" . $e->getMessage() . ")"
+ , _('Verifique los permisos del usuario de la Base de Datos'));
+ }
+
+ if (!self::$_isHostingMode) {
+ $query = "GRANT ALL PRIVILEGES ON `" . self::$_dbname . "`.* TO '" . self::$_dbuser . "'@'" . self::$_dbhost . "' IDENTIFIED BY '" . self::$_dbpass . "';";
+
+ try {
+ self::$_dbc->query($query);
+ } catch (\PDOException $e) {
+ throw new SPException(SPException::SP_CRITICAL
+ , _('Error al establecer permisos de la BBDD') . " (" . $e->getMessage() . ")"
+ , _('Verifique los permisos del usuario de la Base de Datos'));
+ }
+ }
+ }
+
+ /**
+ * Comprobar si la base de datos indicada existe.
+ *
+ * @return bool
+ */
+ private static function checkDatabaseExist()
+ {
+ $query = "SELECT COUNT(*) "
+ . "FROM information_schema.tables "
+ . "WHERE table_schema = '" . self::$_dbname . "' "
+ . "AND table_name = 'usrData' LIMIT 1";
+
+ return (intval(self::$_dbc->query($query)->fetchColumn()) > 0);
+ }
+
+ /**
+ * Crear la estructura de la base de datos.
+ * Esta función crea la estructura de la base de datos a partir del archivo dbsctructure.sql.
+ *
+ * @throws SPException
+ */
+ private static function createDBStructure()
+ {
+ $fileName = dirname(__FILE__) . '/dbstructure.sql';
+
+ if (!file_exists($fileName)) {
+ throw new SPException(SPException::SP_CRITICAL
+ , _('El archivo de estructura de la BBDD no existe')
+ , _('No es posible crear la BBDD de la aplicación. Descárguela de nuevo.'));
+ }
+
+ // Usar la base de datos de sysPass
+ try {
+ self::$_dbc->query('USE ' . self::$_dbname);
+ } catch (\PDOException $e) {
+ throw new SPException(SPException::SP_CRITICAL
+ , _('Error al seleccionar la BBDD') . " '" . self::$_dbname . "' (" . $e->getMessage() . ")"
+ , _('No es posible usar la Base de Datos para crear la estructura. Compruebe los permisos y que no exista.'));
+ }
+
+ // Leemos el archivo SQL para crear las tablas de la BBDD
+ $handle = fopen($fileName, 'rb');
+
+ if ($handle) {
+ while (!feof($handle)) {
+ $buffer = stream_get_line($handle, 1000000, ";\n");
+ if (strlen(trim($buffer)) > 0) {
+ try {
+ self::$_dbc->query($buffer);
+ } catch (\PDOException $e) {
+ // drop database on error
+ self::$_dbc->query("DROP DATABASE " . self::$_dbname . ";");
+
+ throw new SPException(SPException::SP_CRITICAL
+ , _('Error al crear la BBDD') . ' (' . $e->getMessage() . ')'
+ , _('Error al crear la estructura de la Base de Datos.'));
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Crear el usuario admin de sysPass.
+ * Esta función crea el grupo, perfil y usuario 'admin' para utilizar sysPass.
+ *
+ * @throws SPException
+ */
+ private static function createAdminAccount()
+ {
+ // Datos del grupo
+ Groups::$groupName = "Admins";
+ Groups::$groupDescription = "Admins";
+
+ if (!Groups::addGroup()) {
+ self::rollback();
+
+ throw new SPException(SPException::SP_CRITICAL
+ , _('Error al crear el grupo "admin"')
+ , _('Informe al desarrollador'));
+ }
+
+ $User = new User();
+
+ // Establecer el id de grupo del usuario al recién creado
+ $User->setUserGroupId(Groups::$queryLastId);
+
+ $Profile = new Profile();
+
+ $Profile->setName('Admin');
+ $Profile->setAccAdd(true);
+ $Profile->setAccView(true);
+ $Profile->setAccViewPass(true);
+ $Profile->setAccViewHistory(true);
+ $Profile->setAccEdit(true);
+ $Profile->setAccEditPass(true);
+ $Profile->setAccDelete(true);
+ $Profile->setConfigGeneral(true);
+ $Profile->setConfigEncryption(true);
+ $Profile->setConfigBackup(true);
+ $Profile->setMgmCategories(true);
+ $Profile->setMgmCustomers(true);
+ $Profile->setMgmUsers(true);
+ $Profile->setMgmGroups(true);
+ $Profile->setMgmProfiles(true);
+ $Profile->setEvl(true);
+
+ if (!$Profile->profileAdd()) {
+ self::rollback();
+
+ throw new SPException(SPException::SP_CRITICAL
+ , _('Error al crear el perfil "admin"')
+ , _('Informe al desarrollador'));
+ }
+
+ // Datos del usuario
+ $User->setUserLogin(self::$_username);
+ $User->setUserPass(self::$_password);
+ $User->setUserName('Admin');
+ $User->setUserProfileId($Profile->getId());
+ $User->setUserIsAdminApp(true);
+ $User->setUserIsAdminAcc(false);
+ $User->setUserIsDisabled(false);
+
+ if (!$User->addUser()) {
+ self::rollback();
+
+ throw new SPException(SPException::SP_CRITICAL
+ , _('Error al crear el usuario "admin"')
+ , _('Informe al desarrollador'));
+ }
+
+ // Guardar el hash de la clave maestra
+ Config::setArrConfigValue('masterPwd', Crypt::mkHashPassword(self::$_masterPassword));
+ Config::setArrConfigValue('lastupdatempass', time());
+ Config::writeConfigDb(true);
+
+ if (!$User->updateUserMPass(self::$_masterPassword)) {
+ self::rollback();
+
+ throw new SPException(SPException::SP_CRITICAL
+ , _('Error al actualizar la clave maestra del usuario "admin"')
+ , _('Informe al desarrollador'));
+ }
+ }
+
+ /**
+ * Deshacer la instalación en caso de fallo.
+ * Esta función elimina la base de datos y el usuario de sysPass
+ */
+ private static function rollback()
+ {
+ try {
+ self::$_dbc->query("DROP DATABASE IF EXISTS " . self::$_dbname . ";");
+ self::$_dbc->query("DROP USER '" . self::$_dbuser . "'@'" . self::$_dbhost . "';");
+ self::$_dbc->query("DROP USER '" . self::$_dbuser . "'@'%';");
+ } catch (\PDOException $e) {
+ Config::deleteKey('dbuser');
+ Config::deleteKey('dbpass');
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/inc/keepassimport.class.php b/inc/KeepassImport.class.php
similarity index 59%
rename from inc/keepassimport.class.php
rename to inc/KeepassImport.class.php
index 3d421d7c..58278dcf 100644
--- a/inc/keepassimport.class.php
+++ b/inc/KeepassImport.class.php
@@ -1,5 +1,4 @@
Root->Group);
+ $this->setCustomerName('KeePass');
+ $this->setCustomerId($this->addCustomer());
+
+ $this->processCategories($this->_xml->Root->Group);
+ }
+
+ /**
+ * Obtener los grupos y procesar lan entradas de KeePass.
+ *
+ * @param \SimpleXMLElement $xml El objeto XML del archivo de KeePass
+ */
+ protected function processCategories(\SimpleXMLElement $xml)
+ {
+ foreach ($xml as $node) {
+ if ($node->Group) {
+ foreach ($node->Group as $group) {
+ // Analizar grupo
+ if ($node->Group->Entry) {
+ // Crear la categoría
+ $this->setCategoryName($group->Name);
+ $this->setCategoryId($this->addCategory());
+
+ // Crear cuentas
+ $this->processAccounts($group->Entry);
+ }
+
+ if ($group->Group) {
+ // Analizar subgrupo
+ $this->processCategories($group);
+ }
+ }
+ }
+
+ if ($node->Entry) {
+ // Crear la categoría
+ $this->setCategoryName($node->Name);
+ $this->setCategoryId($this->addCategory());
+
+ // Crear cuentas
+ $this->processAccounts($node->Entry);
+ }
+ }
}
/**
* Obtener los datos de las entradas de KeePass.
*
- * @param object $entries con el objeto XML con las entradas
- * @param string $groupName con nombre del grupo a procesar
- * @throws ImportException
- * @return none
+ * @param \SimpleXMLElement $entries El objeto XML con las entradas
*/
- private static function getEntryData($entries, $groupName)
+ protected function processAccounts(\SimpleXMLElement $entries)
{
foreach ($entries as $entry) {
foreach ($entry->String as $account) {
$value = (isset($account->Value)) ? (string)$account->Value : '';
switch ($account->Key) {
case 'Notes':
- $notes = $value;
+ $this->setAccountNotes($value);
break;
case 'Password':
- $password = $value;
+ $passData = Crypt::encryptData($value);
+
+ $this->setAccountPass($passData['data']);
+ $this->setAccountPassIV($passData['iv']);
break;
case 'Title':
- $name = $value;
+ $this->setAccountName($value);
break;
case 'URL':
- $url = $value;
+ $this->setAccountUrl($value);
break;
case 'UserName':
- $username = $value;
+ $this->setAccountLogin($value);
break;
}
}
- $accountData = array($name, 'KeePass', $groupName, $url, $username, $password, $notes);
- SP_Import::addAccountData($accountData);
+ $this->addAccount();
}
}
-
- /**
- * Obtener los grupos y procesar lan entradas de KeePass.
- *
- * @param object $xml con objeto XML del archivo de KeePass
- * @throws ImportException
- * @return none
- */
- private static function getGroups($xml)
- {
- foreach ($xml as $node) {
- if ($node->Group) {
- foreach ($node->Group as $group) {
- $groupName = $group->Name;
- // Analizar grupo
- if ($node->Group->Entry) {
- // Obtener entradas
- self::getEntryData($group->Entry, $groupName);
- }
-
- if ($group->Group) {
- // Analizar subgrupo
- self::getGroups($group);
- }
- }
- }
-
- if ($node->Entry) {
- $groupName = $node->Name;
- // Obtener entradas
- self::getEntryData($node->Entry, $groupName);
- }
- }
- }
-}
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/inc/keepassximport.class.php b/inc/KeepassXImport.class.php
similarity index 57%
rename from inc/keepassximport.class.php
rename to inc/KeepassXImport.class.php
index 503e269b..780c8c6f 100644
--- a/inc/keepassximport.class.php
+++ b/inc/KeepassXImport.class.php
@@ -1,5 +1,4 @@
setCustomerName('KeePassX');
+ $this->setCustomerId($this->addCustomer());
+
+ self::processCategories($this->_xml);
+ }
+
/**
- * Iniciar la importación desde KeePass.
+ * Obtener los grupos y procesar lan entradas de KeePass.
*
- * @param object $xml
- * @return none
+ * @param \SimpleXMLElement $xml con objeto XML del archivo de KeePass
*/
- public static function addKeepassXAccounts($xml)
+ protected function processCategories(\SimpleXMLElement $xml)
{
- self::getGroups($xml);
+ foreach ($xml as $node) {
+ if ($node->group) {
+ foreach ($node->group as $group) {
+ // Analizar grupo
+ if ($node->group->entry) {
+ // Crear la categoría
+ $this->setCategoryName($group->title);
+ $this->setCategoryId($this->addCategory());
+
+ // Crear cuentas
+ $this->processAccounts($group->entry);
+ }
+
+ if ($group->group) {
+ // Analizar subgrupo
+ $this->processCategories($group);
+ }
+ }
+ }
+
+ if ($node->entry) {
+ // Crear la categoría
+ $this->setCategoryName($node->title);
+ $this->setCategoryId($this->addCategory());
+
+ // Crear cuentas
+ $this->processAccounts($node->entry);
+ }
+ }
}
/**
* Obtener los datos de las entradas de KeePass.
*
- * @param object $entries con el objeto XML con las entradas
+ * @param \SimpleXMLElement $entries El objeto XML con las entradas
* @param string $groupName con nombre del grupo a procesar
- * @throws ImportException
- * @return none
*/
- private static function getEntryData($entries, $groupName)
+ protected function processAccounts(\SimpleXMLElement $entries, $groupName)
{
foreach ($entries as $entry) {
$notes = (isset($entry->comment)) ? (string)$entry->comment : '';
@@ -60,42 +100,16 @@ class SP_KeePassXImport
$url = (isset($entry->url)) ? (string)$entry->url : '';
$username = (isset($entry->username)) ? (string)$entry->username : '';
- $accountData = array($name, 'KeePassX', $groupName, $url, $username, $password, $notes);
- SP_Import::addAccountData($accountData);
+ $passData = Crypt::encryptData($password);
+
+ $this->setAccountPass($passData['data']);
+ $this->setAccountPassIV($passData['iv']);
+ $this->setAccountNotes($notes);
+ $this->setAccountName($name);
+ $this->setAccountUrl($url);
+ $this->setAccountLogin($username);
+
+ $this->addAccount();
}
}
-
- /**
- * Obtener los grupos y procesar lan entradas de KeePass.
- *
- * @param object $xml con objeto XML del archivo de KeePass
- * @throws ImportException
- * @return none
- */
- private static function getGroups($xml)
- {
- foreach ($xml as $node) {
- if ($node->group) {
- foreach ($node->group as $group) {
- $groupName = $group->title;
- // Analizar grupo
- if ($node->group->entry) {
- // Obtener entradas
- self::getEntryData($group->entry, $groupName);
- }
-
- if ($group->group) {
- // Analizar subgrupo
- self::getGroups($group);
- }
- }
- }
-
- if ($node->entry) {
- $groupName = $node->title;
- // Obtener entradas
- self::getEntryData($node->entry, $groupName);
- }
- }
- }
-}
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/inc/Ldap.class.php b/inc/Ldap.class.php
new file mode 100644
index 00000000..10a4db75
--- /dev/null
+++ b/inc/Ldap.class.php
@@ -0,0 +1,423 @@
+.
+ *
+ */
+
+namespace SP;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+/**
+ * Esta clase es la encargada de realizar la autentificación de usuarios de sysPass.
+ */
+class Ldap
+{
+ // Variabla que contiene los datos de una búsqueda
+ public static $ldapSearchData;
+ // Variable para determinar si conecta con Active Directory
+ protected static $_isADS = false;
+
+ // Variables de conexión con LDAP
+ protected static $_ldapConn;
+ protected static $_ldapServer;
+ protected static $_searchBase;
+ private static $_bindDN;
+ private static $_bindPass;
+ private static $_ldapGroup;
+
+ // Mapeo de los atributos
+ private static $_attribsMap = array(
+ 'groupMembership' => 'group',
+ 'memberOf' => 'group',
+ 'displayname' => 'name',
+ 'fullname' => 'name',
+ 'mail' => 'mail',
+ 'lockoutTime' => 'expire');
+
+ /**
+ * @return mixed
+ */
+ public static function getLdapGroup()
+ {
+ return self::$_ldapGroup;
+ }
+
+ /**
+ * @return mixed
+ */
+ public static function getLdapServer()
+ {
+ return self::$_ldapServer;
+ }
+
+ /**
+ * Obtener el recurso de conexión a LDAP.
+ *
+ * @return resource
+ */
+ public static function getConn()
+ {
+ if (is_resource(self::$_ldapConn)) {
+ return self::$_ldapConn;
+ }
+ }
+
+ /**
+ * Comprobar la conexión al servidor de LDAP.
+ *
+ * @param string $ldapServer con la dirección del servidor
+ * @param string $bindDN con el usuario de conexión
+ * @param string $bindPass con la clave del usuario de conexión
+ * @param string $searchBase con la base para las búsquedas
+ * @param string $ldapGroup con el grupo con los usuarios de acceso
+ * @return false|int Con el número de entradas encontradas
+ */
+ public static function checkLDAPConn($ldapServer, $bindDN, $bindPass, $searchBase, $ldapGroup)
+ {
+ self::$_ldapServer = $ldapServer;
+ self::$_bindDN = $bindDN;
+ self::$_bindPass = $bindPass;
+ self::$_searchBase = $searchBase;
+ self::$_ldapGroup = $ldapGroup;
+
+ try {
+ self::ldapConnect();
+ self::ldapBind();
+ $numObjects = self::searchBase();
+ } catch (\Exception $e) {
+ return false;
+ }
+
+ return $numObjects;
+ }
+
+ /**
+ * Realizar la conexión al servidor de LDAP.
+ *
+ * @throws \Exception
+ * @return bool
+ */
+ public static function ldapConnect()
+ {
+ $log = new Log(__FUNCTION__);
+
+ // Conexión al servidor LDAP
+ if (!self::$_ldapConn = @ldap_connect(self::$_ldapServer)) {
+ $log->addDescription(sprintf('%s \'%s\'', _('No es posible conectar con el servidor de LDAP'), self::$_ldapServer));
+ $log->addDescription(sprintf('LDAP ERROR: %s (%d)', ldap_error(self::$_ldapConn), ldap_errno(self::$_ldapConn)));
+ $log->writeLog();
+
+ throw new \Exception(_('No es posible conectar con el servidor de LDAP'));
+ }
+
+ @ldap_set_option(self::$_ldapConn, LDAP_OPT_NETWORK_TIMEOUT, 10); // Set timeout
+ @ldap_set_option(self::$_ldapConn, LDAP_OPT_PROTOCOL_VERSION, 3); // Set LDAP version
+
+ return true;
+ }
+
+ /**
+ * Realizar la autentificación con el servidor de LDAP.
+ *
+ * @param string $userDN con el DN del usuario
+ * @param string $userPass con la clave del usuario
+ * @throws \Exception
+ * @return bool
+ */
+ public static function ldapBind($userDN = '', $userPass = '')
+ {
+ $log = new Log(__FUNCTION__);
+
+ $dn = ($userDN) ? $userDN : self::$_bindDN;
+ $pass = ($userPass) ? $userPass : self::$_bindPass;
+
+ if (!@ldap_bind(self::$_ldapConn, $dn, $pass)) {
+ $log->addDescription(_('Error al conectar (BIND)'));
+ $log->addDescription(sprintf('LDAP ERROR: %s (%d)', ldap_error(self::$_ldapConn), ldap_errno(self::$_ldapConn)));
+ $log->addDescription('LDAP DN: ' . $dn);
+ $log->writeLog();
+
+ throw new \Exception(_('Error al conectar (BIND)'));
+ }
+
+ return true;
+ }
+
+ /**
+ * Realizar una búsqueda de objetos en la ruta indicada.
+ *
+ * @throws \Exception
+ * @return int con el número de resultados
+ */
+ private static function searchBase()
+ {
+ $log = new Log(__FUNCTION__);
+
+ $groupDN = (!empty(self::$_ldapGroup)) ? self::searchGroupDN() : '*';
+ $filter = '(&(|(memberOf=' . $groupDN . ')(groupMembership=' . $groupDN . '))(|(objectClass=inetOrgPerson)(objectClass=person)(objectClass=simpleSecurityObject)))';
+ $filterAttr = array("dn");
+
+ $searchRes = @ldap_search(self::$_ldapConn, self::$_searchBase, $filter, $filterAttr);
+
+ if (!$searchRes) {
+ $log->addDescription(_('Error al buscar objetos en DN base'));
+ $log->addDescription(sprintf('LDAP ERROR: %s (%d)', ldap_error(self::$_ldapConn), ldap_errno(self::$_ldapConn)));
+ $log->addDescription('LDAP FILTER: ' . $filter);
+ $log->writeLog();
+
+ throw new \Exception(_('Error al buscar objetos en DN base'));
+ }
+
+ return @ldap_count_entries(self::$_ldapConn, $searchRes);
+ }
+
+ /**
+ * Obtener el RDN del grupo.
+ *
+ * @throws \Exception
+ * @return string con el RDN del grupo
+ */
+ protected static function searchGroupDN()
+ {
+ $log = new Log(__FUNCTION__);
+ $groupName = array();
+
+ if (preg_match('/^cn=([\w\s-]+),.*/i', self::$_ldapGroup, $groupName)) {
+ $filter = '(cn=' . $groupName[1] . ')';
+ } else {
+ $filter = '(cn=' . self::$_ldapGroup . ')';
+ }
+
+ $filterAttr = array("dn", "cn");
+
+ $searchRes = @ldap_search(self::$_ldapConn, self::$_searchBase, $filter, $filterAttr);
+
+ if (!$searchRes) {
+ $log->addDescription(_('Error al buscar RDN de grupo'));
+ $log->addDescription(sprintf('LDAP ERROR: %s (%d)', ldap_error(self::$_ldapConn), ldap_errno(self::$_ldapConn)));
+ $log->addDescription('LDAP FILTER: ' . $filter);
+ $log->writeLog();
+
+ throw new \Exception(_('Error al buscar RDN de grupo'));
+ }
+
+ if (@ldap_count_entries(self::$_ldapConn, $searchRes) === 1) {
+ $ldapSearchData = @ldap_get_entries(self::$_ldapConn, $searchRes);
+
+ if (!$ldapSearchData) {
+ $log->addDescription(_('Error al buscar RDN de grupo'));
+ $log->addDescription(sprintf('LDAP ERROR: %s (%d)', ldap_error(self::$_ldapConn), ldap_errno(self::$_ldapConn)));
+ $log->writeLog();
+
+ throw new \Exception(_('Error al buscar RDN de grupo'));
+ }
+
+// $log->addDescription(_('RDN de grupo encontrado'));
+// $log->addDescription('RDN: ' . $ldapSearchData[0]["dn"]);
+// $log->writeLog();
+
+ return $ldapSearchData[0]["dn"];
+ } else {
+ $log->addDescription(_('Error al buscar RDN de grupo'));
+ $log->addDescription('LDAP FILTER: ' . $filter);
+ $log->writeLog();
+
+ throw new \Exception(_('Error al buscar RDN de grupo'));
+ }
+ }
+
+ /**
+ * Comprobar si los parámetros necesario de LDAP están establecidos.
+ *
+ * @return bool
+ */
+ public static function checkLDAPParams()
+ {
+ self::$_isADS = Config::getValue('ldap_ads', false);
+ self::$_searchBase = Config::getValue('ldap_base');
+ self::$_ldapServer = (!self::$_isADS) ? Config::getValue('ldap_server') : LdapADS::getADServer(Config::getValue('ldap_server'));
+ self::$_bindDN = Config::getValue('ldap_binduser');
+ self::$_bindPass = Config::getValue('ldap_bindpass');
+ self::$_ldapGroup = Config::getValue('ldap_group', '*');
+
+ if (!self::$_searchBase || !self::$_ldapServer || !self::$_bindDN || !self::$_bindPass) {
+ Log::writeNewLog(__FUNCTION__, _('Los parámetros de LDAP no están configurados'));
+
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Obtener el RDN del usuario que realiza el login.
+ *
+ * @param string $userLogin con el login del usuario
+ * @throws \Exception
+ * @return none
+ */
+ public static function getUserDN($userLogin)
+ {
+ $log = new Log(__FUNCTION__);
+
+ if (self::$_isADS === true) {
+ $filter = '(&(|(samaccountname=' . $userLogin . ')(cn=' . $userLogin . ')(uid=' . $userLogin . '))(|(objectClass=inetOrgPerson)(objectClass=person)(objectClass=simpleSecurityObject))(objectCategory=person))';
+ } else {
+ $filter = '(&(|(samaccountname=' . $userLogin . ')(cn=' . $userLogin . ')(uid=' . $userLogin . '))(|(objectClass=inetOrgPerson)(objectClass=person)(objectClass=simpleSecurityObject)))';
+ }
+
+ $filterAttr = array("dn", "displayname", "samaccountname", "mail", "memberof", "lockouttime", "fullname", "groupmembership", "mail");
+
+ $searchRes = @ldap_search(self::$_ldapConn, self::$_searchBase, $filter, $filterAttr);
+
+ if (!$searchRes) {
+ $log->addDescription(_('Error al buscar el DN del usuario'));
+ $log->addDescription(sprintf('LDAP ERROR: %s (%d)', ldap_error(self::$_ldapConn), ldap_errno(self::$_ldapConn)));
+ $log->addDescription('LDAP FILTER: ' . $filter);
+ $log->writeLog();
+
+ throw new \Exception(_('Error al buscar el DN del usuario'));
+ }
+
+ if (@ldap_count_entries(self::$_ldapConn, $searchRes) === 1) {
+ self::$ldapSearchData = @ldap_get_entries(self::$_ldapConn, $searchRes);
+
+ if (!self::$ldapSearchData) {
+ $log->addDescription(_('Error al localizar el usuario en LDAP'));
+ $log->addDescription(sprintf('LDAP ERROR: %s (%d)', ldap_error(self::$_ldapConn), ldap_errno(self::$_ldapConn)));
+ $log->writeLog();
+
+ throw new \Exception(_('Error al localizar el usuario en LDAP'));
+ }
+ } else {
+ $log->addDescription(_('Error al buscar el DN del usuario'));
+ $log->addDescription('LDAP FILTER: ' . $filter);
+ $log->writeLog();
+
+ throw new \Exception(_('Error al buscar el DN del usuario'));
+ }
+ }
+
+ /**
+ * Realizar la desconexión del servidor de LDAP.
+ */
+ public static function unbind()
+ {
+ @ldap_unbind(self::$_ldapConn);
+ }
+
+ /**
+ * Obtener los atributos del usuario.
+ *
+ * @return array con los atributos disponibles y sus valores
+ */
+ public static function getLDAPAttr()
+ {
+ $attribs = self::$_attribsMap;
+ $res = array();
+
+ foreach (self::$ldapSearchData as $entryValue) {
+ if (is_array($entryValue)) {
+ foreach ($entryValue as $entryAttr => $attrValue) {
+ if (is_array($attrValue)) {
+ if (array_key_exists($entryAttr, $attribs)) {
+ if ($attrValue['count'] > 1) {
+ // Almacenamos un array de valores
+ $res[$attribs[$entryAttr]] = $attrValue;
+ } else {
+ // Almacenamos 1 solo valor
+ $res[$attribs[$entryAttr]] = $attrValue[0];
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return $res;
+ }
+
+ /**
+ * Buscar al usuario en un grupo.
+ *
+ * @param string $userDN con el RDN del usuario
+ * @throws \Exception
+ * @return bool
+ */
+ public static function searchUserInGroup($userDN)
+ {
+ $log = new Log(__FUNCTION__);
+
+ $ldapGroup = Config::getValue('ldap_group');
+
+ // El filtro de grupo no está establecido
+ if (empty($ldapGroup)) {
+ return true;
+ }
+
+ // Obtenemos el DN del grupo
+ if (!$groupDN = self::searchGroupDN()) {
+ return false;
+ }
+
+ $userDN = self::escapeLdapDN($userDN);
+
+ $filter = '(&(|(' . $groupDN . ')(cn=' . $ldapGroup . '))(|(member=' . $userDN . ')(uniqueMember=' . $userDN . '))(|(objectClass=groupOfNames)(objectClass=groupOfUniqueNames)(objectClass=group)))';
+ $filterAttr = array("member", "uniqueMember");
+
+ $searchRes = @ldap_search(self::$_ldapConn, self::$_searchBase, $filter, $filterAttr);
+
+ if (!$searchRes) {
+ $log->addDescription(_('Error al buscar el grupo de usuarios'));
+ $log->addDescription(sprintf('LDAP ERROR: %s (%d)', ldap_error(self::$_ldapConn), ldap_errno(self::$_ldapConn)));
+ $log->addDescription('LDAP FILTER: ' . $filter);
+ $log->writeLog();
+
+ throw new \Exception(_('Error al buscar el grupo de usuarios'));
+ }
+
+ if (@ldap_count_entries(self::$_ldapConn, $searchRes) === 0) {
+ return false;
+ }
+
+ $log->addDescription(_('Usuario verificado en grupo'));
+ $log->writeLog();
+
+ return true;
+ }
+
+ /**
+ * Escapar carácteres especiales en el RDN de LDAP.
+ *
+ * @param string $dn con el RDN del usuario
+ * @return string
+ */
+ private static function escapeLdapDN($dn)
+ {
+ $chars = array('/(,)(?!uid|cn|ou|dc)/i', '/(?)/', '/(<)/', '/(\+)/', '/(#)/', '/\G(\s)/', '/(\s)(?=\s*$)/', '/(\/)/');
+ return preg_replace($chars, '\\\$1', $dn);
+ }
+
+
+}
diff --git a/inc/LdapADS.class.php b/inc/LdapADS.class.php
new file mode 100644
index 00000000..878df4e3
--- /dev/null
+++ b/inc/LdapADS.class.php
@@ -0,0 +1,124 @@
+.
+ *
+ */
+
+namespace SP;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+/**
+ * Class LdapADS para gestión de LDAP de ADS
+ *
+ * @package SP
+ */
+class LdapADS extends Ldap
+{
+ /**
+ * Obtener un servidor de AD aleatorio
+ *
+ * @param $server string El servidor de AD
+ * @return string
+ */
+ public static function getADServer($server)
+ {
+ $serverDomain = '';
+ $serverFQDN = explode('.', $server);
+
+ for ($i = 1; $i <= count($serverFQDN) - 1; $i++){
+ $serverDomain .= $serverFQDN[$i] . '.';
+ }
+
+ $dnsServerQuery = '_msdcs.' . $serverDomain;
+ $records = dns_get_record($dnsServerQuery, DNS_NS);
+
+ if (count($records) === 0) {
+ return parent::$_ldapServer;
+ }
+
+ foreach ($records as $record) {
+ $ads[] = $record['target'];
+ };
+
+ return $ads[rand(0, count($ads) - 1)];
+ }
+
+ /**
+ * Buscar al usuario en un grupo.
+ *
+ * @param string $userLogin con el login del usuario
+ * @throws \Exception
+ * @return bool
+ */
+ public static function searchADUserInGroup($userLogin)
+ {
+ if (Ldap::$_isADS === false) {
+ return false;
+ }
+
+ $log = new Log(__FUNCTION__);
+
+ $ldapGroup = Config::getValue('ldap_group');
+
+ // El filtro de grupo no está establecido
+ if (empty($ldapGroup)) {
+ return true;
+ }
+
+ // Obtenemos el DN del grupo
+ if (!$groupDN = Ldap::searchGroupDN()) {
+ return false;
+ }
+
+ $filter = '(memberof:1.2.840.113556.1.4.1941:=' . $groupDN . ')';
+ $filterAttr = array("sAMAccountName");
+
+ $searchRes = @ldap_search(Ldap::$_ldapConn, Ldap::$_searchBase, $filter, $filterAttr);
+
+ if (!$searchRes) {
+ $log->addDescription(_('Error al buscar el grupo de usuarios'));
+ $log->addDescription('LDAP ERROR: ' . ldap_error(Ldap::$_ldapConn) . '(' . ldap_errno(Ldap::$_ldapConn) . ')');
+ $log->addDescription('LDAP FILTER: ' . $filter);
+ $log->writeLog();
+
+ throw new \Exception(_('Error al buscar el grupo de usuarios'));
+ }
+
+ if (@ldap_count_entries(Ldap::$_ldapConn, $searchRes) === 0) {
+ $log->addDescription(_('No se encontró el grupo con ese nombre'));
+ $log->addDescription('LDAP ERROR: ' . ldap_error(Ldap::$_ldapConn) . '(' . ldap_errno(Ldap::$_ldapConn) . ')');
+ $log->addDescription('LDAP FILTER: ' . $filter);
+ $log->writeLog();
+
+ throw new \Exception(_('No se encontró el grupo con ese nombre'));
+ }
+
+ foreach (ldap_get_entries(Ldap::$_ldapConn, $searchRes) as $entry) {
+ if ($userLogin === $entry['samaccountname'][0]) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+}
\ No newline at end of file
diff --git a/inc/Log.class.php b/inc/Log.class.php
new file mode 100644
index 00000000..b6156d26
--- /dev/null
+++ b/inc/Log.class.php
@@ -0,0 +1,165 @@
+.
+ *
+ */
+
+namespace SP;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+/**
+ * Esta clase es la encargada de manejar el registro de eventos
+ */
+class Log extends ActionLog
+{
+ static $numRows;
+
+ /**
+ * Obtener los eventos guardados.
+ *
+ * @param int $start con el número de registro desde el que empezar
+ * @return false|array con el resultado de la consulta
+ */
+ public static function getEvents($start)
+ {
+ $query = 'SELECT ' .
+ 'log_id,' .
+ 'FROM_UNIXTIME(log_date) as log_date,' .
+ 'log_action,' .
+ 'log_login,' .
+ 'log_ipAddress,' .
+ 'log_description ' .
+ 'FROM log ' .
+ 'ORDER BY log_id DESC ' .
+ 'LIMIT :start, 50';
+
+ $data['start'] = $start;
+
+ // Obtenemos el número total de registros
+ DB::setFullRowCount();
+
+ // Devolver un array siempre
+ DB::setReturnArray();
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+ return false;
+ }
+
+ self::$numRows = DB::$lastNumRows;
+
+ return $queryRes;
+ }
+
+ /**
+ * Limpiar el registro de eventos.
+ *
+ * @return bool con el resultado
+ */
+ public static function clearEvents()
+ {
+ $query = 'TRUNCATE TABLE log';
+
+ if (DB::getQuery($query, __FUNCTION__) === false) {
+ return false;
+ }
+
+ self::writeNewLogAndEmail(_('Vaciar Eventos'), _('Vaciar registro de eventos'));
+
+ return true;
+ }
+
+ /**
+ * Obtener una nueva instancia de la clase inicializada
+ *
+ * @param $action string La acción realizada
+ * @param null $description string La descripción de la acción realizada
+ * @return Log
+ */
+ public static function newLog($action, $description = null)
+ {
+ return new Log($action, $description);
+ }
+
+ /**
+ * Escribir un nuevo evento en el registro de eventos
+ *
+ * @param $action string La acción realizada
+ * @param null $description string La descripción de la acción realizada
+ * @return Log
+ */
+ public static function writeNewLog($action, $description = null){
+ $log = new Log($action, $description);
+ $log->writeLog();
+
+ return $log;
+ }
+
+ /**
+ * Obtener una nueva instancia de la clase inicializada
+ *
+ * @param $action string La acción realizada
+ * @param null $description string La descripción de la acción realizada
+ * @return Log
+ */
+ public static function writeNewLogAndEmail($action, $description = null){
+ $log = new Log($action, $description);
+ $log->writeLog();
+
+ Email::sendEmail($log);
+
+ return $log;
+ }
+
+ /**
+ * Escribir un nuevo evento en el registro de eventos
+ *
+ * @return bool
+ */
+ public function writeLog(){
+ if (defined('IS_INSTALLER') && IS_INSTALLER === 1) {
+ error_log('Action: ' . $this->getAction() . ' -- Description: ' . $this->getDescription());
+ }
+
+ if (!Util::logIsEnabled()) {
+ return false;
+ }
+
+ $query = 'INSERT INTO log SET ' .
+ 'log_date = UNIX_TIMESTAMP(),' .
+ 'log_login = :login,' .
+ 'log_userId = :userId,' .
+ 'log_ipAddress = :ipAddress,' .
+ 'log_action = :action,' .
+ 'log_description = :description';
+
+ $data['login'] = Session::getUserLogin();
+ $data['userId'] = Session::getUserId();
+ $data['ipAddress'] = $_SERVER['REMOTE_ADDR'];
+ $data['action'] = $this->getAction();
+ $data['description'] = $this->getDescription();
+
+ return DB::getQuery($query, __FUNCTION__, $data);
+ }
+}
\ No newline at end of file
diff --git a/inc/Migrate.class.php b/inc/Migrate.class.php
new file mode 100644
index 00000000..23db004a
--- /dev/null
+++ b/inc/Migrate.class.php
@@ -0,0 +1,936 @@
+.
+ *
+ */
+
+namespace SP;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+/**
+ * Esta clase es la encargada de realizar la migración de datos desde phpPMS.
+ */
+class Migrate
+{
+// private static $dbuser;
+ private static $_dbc; // Database connection
+ private static $_customersByName;
+ private static $_currentQuery;
+ private static $_result = array();
+ private static $_oldConfig = array();
+
+ /**
+ * Iniciar migración desde phpPMS.
+ *
+ * @param array $options datos de conexión
+ * @return array resultado del proceso
+ */
+ public static function migrate($options)
+ {
+
+ if (!is_array($options)) {
+ $result['error'][]['description'] = _('Faltan parámetros');
+ return $result;
+ }
+
+ $dbname = $options['dbname'];
+
+ if (preg_match('/(.*):(\d{1,5})/', $options['dbhost'], $match)){
+ $dbhost = $match[1];
+ $dbport = $match[2];
+ } else {
+ $dbhost = $options['dbhost'];
+ $dbport = 3306;
+ }
+
+ $dbadmin = $options['dbuser'];
+ $dbpass = $options['dbpass'];
+
+ try {
+ self::checkDatabaseAdmin($dbhost, $dbadmin, $dbpass, $dbname, $dbport);
+ self::checkDatabaseExist($dbname);
+ self::checkSourceVersion();
+ self::cleanCurrentDB();
+ self::migrateCustomers();
+ self::migrateAccounts();
+ self::migrateAccountsGroups();
+ self::migrateAccountsHistory();
+ self::migrateAcountsFiles();
+ self::migrateAccountsCategories();
+ self::migrateUsers();
+ self::migrateUsersGroups();
+ self::migrateConfig();
+ } catch (SPException $e) {
+ self::$_result['error'][] = array(
+ 'type' => $e->getType(),
+ 'description' => $e->getMessage(),
+ 'hint' => $e->getHint()
+ );
+ return (self::$_result);
+ }
+
+ self::$_result['ok'][] = _('Importación finalizada');
+ self::$_result['ok'][] = _('Revise el registro de eventos para más detalles');
+
+ return (self::$_result);
+ }
+
+ /**
+ * Comprobar si la conexión con la BBDD de phpPMS es posible.
+ *
+ * @param string $dbhost host de conexión
+ * @param string $dbadmin usuario de conexión
+ * @param string $dbpass clave de conexión
+ * @param string $dbname nombre de la base de datos
+ * @param string $dbport puerto de conexión
+ * @throws SPException
+ */
+ private static function checkDatabaseAdmin($dbhost, $dbadmin, $dbpass, $dbname, $dbport)
+ {
+ try {
+ $dsn = 'mysql:host=' . $dbhost . ';dbname=' . $dbname . ';dbport=' . $dbport . ';charset=utf8';
+ self::$_dbc = new \PDO($dsn, $dbadmin, $dbpass);
+ } catch (\PDOException $e) {
+ throw new SPException(SPException::SP_CRITICAL
+ , _('No es posible conectar con la BD')
+ , _('Compruebe los datos de conexión') . ' ' . $e->getMessage());
+ }
+ }
+
+ /**
+ * Comprobar si la BBDD existe.
+ *
+ * @param string $dbname nombre de la base de datos
+ * @return bool
+ */
+ private static function checkDatabaseExist($dbname)
+ {
+ $query = 'SELECT COUNT(*) '
+ . 'FROM information_schema.tables '
+ . 'WHERE table_schema = \'' . $dbname . '\' '
+ . 'AND table_name = \'usrData\' LIMIT 1';
+
+ return (intval(self::$_dbc->query($query)->fetchColumn()) === 0);
+ }
+
+ /**
+ * Comprobar la versión de phpPMS.
+ *
+ * @throws SPException
+ */
+ private static function checkSourceVersion()
+ {
+ if (!isset(self::$_oldConfig['version'])) {
+ self::getSourceConfig();
+ }
+
+ if (self::$_oldConfig['version'] != "0.973b") {
+ throw new SPException(SPException::SP_CRITICAL,
+ _('La versión no es compatible') . '(' . self::$_oldConfig['version'] . ')',
+ _('Actualice a la última versión de phpPMS'));
+ }
+ }
+
+ /**
+ * Obtener la configuración desde desde phpPMS.
+ *
+ * @throws SPException
+ */
+ private static function getSourceConfig()
+ {
+ $query = 'SELECT vacValue as value,vacParameter as parameter FROM config';
+
+ try {
+ self::parseSourceConfig(self::$_dbc->query($query));
+ } catch (\PDOException $e) {
+
+ throw new SPException(SPException::SP_CRITICAL,
+ _('Error al obtener la configuración'),
+ $e->getMessage());
+ }
+ }
+
+ /**
+ * Parsear los valores de configuración de phpPMS y adaptarlos a sysPass.
+ *
+ * @param array $config con los datos de configuración
+ * @return bool
+ */
+ private static function parseSourceConfig($config)
+ {
+ if (!is_array($config)) {
+ return false;
+ }
+
+ if (strtolower($config['value']) == 'true' || strtolower($config['value']) == 'on') {
+ $value = 1;
+ } else {
+ $value = (is_numeric($config['value'])) ? (int)$config['value'] : trim($config['value']);
+ }
+
+ // Guardar la configuración anterior
+ self::$_oldConfig[$config['parameter']] = $value;
+ }
+
+ /**
+ * Limpiar los datos de sysPass.
+ * Limpiar las tablas de la base de sysPass para la importación.
+ *
+ * @throws SPException
+ */
+ private static function cleanCurrentDB()
+ {
+ $tables = array('accounts', 'accHistory', 'accFiles', 'accGroups', 'categories', 'customers', 'usrGroups');
+
+ // Limpiar datos de las tablas
+ foreach ($tables as $table) {
+ $query = 'TRUNCATE TABLE ' . $table;
+
+ if (DB::getQuery($query, __FUNCTION__) === false) {
+ throw new SPException(SPException::SP_CRITICAL,
+ _('Error al vaciar tabla') . ' (' . $table . ')',
+ DB::$txtError);
+ }
+ }
+
+ $currentUserId = Session::getUserId();
+
+ // Limpiar datos de usuarios manteniendo el usuario actual
+ if (self::checkAdminAccount($currentUserId)) {
+ $query = 'DELETE FROM usrData WHERE user_id != ' . $currentUserId;
+
+ if (DB::getQuery($query, __FUNCTION__) === false) {
+ throw new SPException(SPException::SP_CRITICAL,
+ _('Error al vaciar tabla') . ' (' . $table . ')',
+ DB::$txtError);
+ }
+ } else {
+ throw new SPException(SPException::SP_CRITICAL,
+ _('Usuario actual no es administrador de la aplicación'), 1);
+ }
+ }
+
+ /**
+ * Comprobar si el usuario actual es administrador de la aplicación.
+ *
+ * @param int $currentUserId con el Id del usuario de la sesión actual
+ * @return bool
+ */
+ private static function checkAdminAccount($currentUserId)
+ {
+ $query = 'SELECT user_id FROM usrData WHERE user_id = :id AND user_isAdminApp = 1 LIMIT 1';
+
+ $data['id'] = $currentUserId;
+
+ DB::getQuery($query, __FUNCTION__, $data);
+
+ return (DB::$lastNumRows === 0);
+ }
+
+ /**
+ * Migrar los clientes desde phpPMS.
+ *
+ * @throws SPException
+ * @return array resultado
+ */
+ private static function migrateCustomers()
+ {
+ $customers = self::getCustomers();
+
+ $totalRecords = count($customers);
+ $num = 0;
+
+ foreach ($customers as $customer) {
+ Customer::$customerName = $customer;
+
+ try {
+ Customer::addCustomer();
+ $num++;
+ } catch (SPException $e) {
+ if ($e->getType() === SPException::SP_WARNING){
+ continue;
+ }
+ throw new SPException(SPException::SP_CRITICAL,
+ _('No es posible crear el cliente'),
+ _('Contacte con el desarrollador'));
+ }
+ }
+
+ $log = new Log(_('Importar Clientes'));
+ $log->addDescription('OK');
+ $log->addDescription(_('Registros') . ': ' . $num . '/' . $totalRecords);
+ $log->writeLog();
+ }
+
+ /**
+ * Obtener los clientes desde phpPMS.
+ *
+ * @throws SPException
+ * @return array con los clientes
+ */
+ private static function getCustomers()
+ {
+ $query = 'SELECT DISTINCT vacCliente FROM accounts';
+
+ try {
+ foreach (self::$_dbc->query($query) as $row) {
+ $customers[] = trim($row['vacCliente']);
+ }
+
+ return $customers;
+ } catch (\PDOException $e) {
+ throw new SPException(SPException::SP_CRITICAL,
+ _('Error al obtener los clientes'),
+ $e->getMessage());
+ }
+ }
+
+ /**
+ * Migrar las cuentas desde phpPMS.
+ *
+ * @throws SPException
+ * @return array resultado
+ */
+ private static function migrateAccounts()
+ {
+ $query = 'SELECT intAccountId,'
+ . 'intUGroupFId,'
+ . 'intUserFId,'
+ . 'intUEditFId,'
+ . 'vacCliente,vacName,'
+ . 'intCategoryFid,'
+ . 'vacLogin,'
+ . 'vacUrl,'
+ . 'vacPassword,'
+ . 'vacMd5Password,'
+ . 'vacInitialValue,'
+ . 'txtNotice,'
+ . 'intCountView,'
+ . 'intCountDecrypt,'
+ . 'datAdded,datChanged '
+ . 'FROM accounts ';
+
+ $totalRecords = 0;
+ $num = 0;
+
+ try {
+ foreach (self::$_dbc->query($query) as $row) {
+ if (self::insertAccounts($row)) {
+ $num++;
+ }
+ $totalRecords++;
+ }
+ } catch (\PDOException $e) {
+ throw new SPException(SPException::SP_CRITICAL,
+ _('Error al obtener cuentas'),
+ $e->getMessage());
+ }
+
+ $log = new Log(_('Importar Cuentas'));
+ $log->addDescription('OK');
+ $log->addDescription(_('Registros') . ': ' . $num . '/' . $totalRecords);
+ $log->writeLog();
+ }
+
+ /**
+ * Insertar una cuenta en sysPass.
+ *
+ * @param array $account con los datos de la cuenta
+ * @throws SPException
+ * @return bool
+ */
+ private static function insertAccounts($account)
+ {
+ if (!is_array(self::$_customersByName)) {
+ $customers = Customer::getCustomers(NULL, true);
+ self::$_customersByName = array_flip($customers);
+ }
+
+ $customer = trim($account['vacCliente']);
+
+ if (array_key_exists($customer, self::$_customersByName)) {
+ $customerId = self::$_customersByName[$customer];
+ } else {
+ self::$_result['error'][] = _('Cliente no encontrado') . ": " . $account['vacCliente'];
+
+ return false;
+ }
+
+ $query = 'INSERT INTO accounts SET ' .
+ 'account_id = :id,' .
+ 'account_userGroupId = :userGroupId,' .
+ 'account_userId = :userId,' .
+ 'account_userEditId = :userEditId,' .
+ 'account_customerId = :customerId,' .
+ 'account_name = :name,' .
+ 'account_categoryId = :categoryId,' .
+ 'account_login = :login,' .
+ 'account_url = :url,' .
+ 'account_pass = :pass,' .
+ 'account_IV = :iv,' .
+ 'account_notes = :notes,' .
+ 'account_countView = :countView,' .
+ 'account_countDecrypt = :countDecrypt,' .
+ 'account_dateAdd = :dateAdd,' .
+ 'account_dateEdit = :dateEdit';
+
+ $data['id'] = $account['intAccountId'];
+ $data['userGroupId'] = $account['intUGroupFId'];
+ $data['userId'] = $account['intUserFId'];
+ $data['userEditId'] = $account['intUEditFId'];
+ $data['customerId'] = $customerId;
+ $data['name'] = $account['vacName'];
+ $data['categoryId'] = $account['intCategoryFid'];
+ $data['login'] = $account['vacLogin'];
+ $data['url'] = $account['vacUrl'];
+ $data['pass'] = $account['vacPassword'];
+ $data['iv'] = $account['vacInitialValue'];
+ $data['notes'] = $account['txtNotice'];
+ $data['countView'] = $account['intCountView'];
+ $data['countDecrypt'] = $account['intCountDecrypt'];
+ $data['dateAdd'] = $account['datAdded'];
+ $data['dateEdit'] = $account['datChanged'];
+
+ if (DB::getQuery($query, __FUNCTION__, $data) === false) {
+ self::$_currentQuery = DB::escape($query);
+ throw new SPException(SPException::SP_CRITICAL,
+ _('Error al migrar cuenta'),
+ DB::$txtError);
+ }
+
+ return true;
+ }
+
+ /**
+ * Migrar las grupos secundarios de las cuentas desde phpPMS.
+ *
+ * @throws SPException
+ * @return array resultado
+ */
+ private static function migrateAccountsGroups()
+ {
+ $query = 'SELECT intAccId,intUGroupId FROM acc_usergroups';
+
+ $totalRecords = 0;
+ $num = 0;
+
+ try {
+ foreach(self::$_dbc->query($query) as $row){
+ if (self::insertAccountsGroups($row)) {
+ $num++;
+ }
+ $totalRecords++;
+ }
+ } catch(\PDOException $e){
+ throw new SPException(SPException::SP_CRITICAL,
+ _('Error al obtener los grupos de cuentas'),
+ $e->getMessage());
+ }
+
+ $log = new Log(_('Importar Grupos de Cuentas'));
+ $log->addDescription('OK');
+ $log->addDescription(_('Registros') . ': ' . $num . '/' . $totalRecords);
+ $log->writeLog();
+ }
+
+ /**
+ * Insertar los grupos secundarios de una cuenta en sysPass.
+ *
+ * @param array $accountGroup con los datos de los grupos secundarios
+ * @throws SPException
+ * @return bool
+ */
+ private static function insertAccountsGroups($accountGroup)
+ {
+ $query = 'INSERT INTO accGroups SET accgroup_accountId = :accountId,accgroup_groupId = :groudId';
+
+ $data['accountId'] = $accountGroup['intAccId'];
+ $data['groupId'] = $accountGroup['intUGroupId'];
+
+ if (DB::getQuery($query, __FUNCTION__, $data) === false) {
+ throw new SPException(SPException::SP_CRITICAL,
+ _('Error al crear grupos de cuentas'),
+ DB::$txtError);
+ }
+
+ return true;
+ }
+
+ /**
+ * Migrar el historail de las cuentas desde phpPMS.
+ *
+ * @throws SPException
+ * @return array resultado
+ */
+ private static function migrateAccountsHistory()
+ {
+ $query = 'SELECT intAccountId,'
+ . 'intUGroupFId,'
+ . 'intUserFId,'
+ . 'intUEditFId,'
+ . 'vacCliente,'
+ . 'vacName,'
+ . 'intCategoryFid,'
+ . 'vacLogin,'
+ . 'vacUrl,'
+ . 'vacPassword,'
+ . 'vacInitialValue,'
+ . 'txtNotice,'
+ . 'intCountView,'
+ . 'intCountDecrypt,'
+ . 'datAdded,'
+ . 'datChanged,'
+ . 'blnModificada,'
+ . 'blnEliminada '
+ . 'FROM acc_history';
+
+ $totalRecords = 0;
+ $num = 0;
+
+ try {
+ foreach(self::$_dbc->query($query) as $row){
+ if (self::insertAccountsHistory($row)) {
+ $num++;
+ }
+ $totalRecords++;
+ }
+ } catch(\PDOException $e){
+ throw new SPException(SPException::SP_CRITICAL,
+ _('Error al obtener el historico de cuentas'),
+ self::$_dbc->error);
+ }
+
+ $log = new Log(_('Importar Histórico de Cuentas'));
+ $log->addDescription('OK');
+ $log->addDescription(_('Registros') . ': ' . $num . '/' . $totalRecords);
+ $log->writeLog();
+ }
+
+ /**
+ * Insertar el historial de una cuenta en sysPass.
+ *
+ * @param array $accountHistory con los datos del historial de la cuenta
+ * @throws SPException
+ * @return bool
+ */
+ private static function insertAccountsHistory($accountHistory)
+ {
+ if (!is_array(self::$_customersByName)) {
+ $customers = Customer::getCustomers(null, true);
+ self::$_customersByName = array_flip($customers);
+ }
+
+ $customer = trim($accountHistory['vacCliente']);
+
+ if (array_key_exists($customer, self::$_customersByName)) {
+ $customerId = self::$_customersByName[$customer];
+ } else {
+ return false;
+ }
+
+ $query = 'INSERT INTO accHistory SET ' .
+ 'acchistory_accountId = :id,' .
+ 'acchistory_userGroupId = :userGroupId,' .
+ 'acchistory_userId = :userId,' .
+ 'acchistory_userEditId = :userEditId,' .
+ 'acchistory_customerId = :customerId,' .
+ 'acchistory_name = :name,' .
+ 'acchistory_categoryId = :categoryId,' .
+ 'acchistory_login = :login,' .
+ 'acchistory_url = :url,' .
+ 'acchistory_pass = :pass,' .
+ 'acchistory_IV = :iv,' .
+ 'acchistory_notes = :notes,' .
+ 'acchistory_countView = :countView,' .
+ 'acchistory_countDecrypt = :countDecrypt,' .
+ 'acchistory_dateAdd = :dateAdd,' .
+ 'acchistory_dateEdit = :dateEdit,' .
+ 'acchistory_isModify = :isModify,' .
+ 'acchistory_isDeleted = :isDeleted';
+
+ $data['id'] = $accountHistory['intAccountId'];
+ $data['userGroupId'] = $accountHistory['intUGroupFId'];
+ $data['userId'] = $accountHistory['intUserFId'];
+ $data['userEditId'] = $accountHistory['intUEditFId'];
+ $data['customerId'] = $customerId;
+ $data['name'] = $accountHistory['vacName'];
+ $data['categoryId'] = $accountHistory['intCategoryFid'];
+ $data['login'] = $accountHistory['vacLogin'];
+ $data['url'] = $accountHistory['vacUrl'];
+ $data['pass'] = $accountHistory['vacPassword'];
+ $data['iv'] = $accountHistory['vacInitialValue'];
+ $data['notes'] = $accountHistory['txtNotice'];
+ $data['countView'] = $accountHistory['intCountView'];
+ $data['countDecrypt'] = $accountHistory['intCountDecrypt'];
+ $data['dateAdd'] = $accountHistory['datAdded'];
+ $data['dateEdit'] = $accountHistory['datChanged'];
+ $data['isModify'] = $accountHistory['blnModificada'];
+ $data['isDeleted'] = $accountHistory['blnEliminada'];
+
+ if (DB::getQuery($query, __FUNCTION__, $data) === false) {
+ throw new SPException(SPException::SP_CRITICAL,
+ _('Error al crear historico de cuentas'),
+ DB::$txtError);
+ }
+
+ return true;
+ }
+
+ /**
+ * Migrar los archivos de de las cuentas desde phpPMS.
+ *
+ * @throws SPException
+ * @return array resultado
+ */
+ private static function migrateAcountsFiles()
+ {
+ $query = 'SELECT intAccountId,'
+ . 'vacName,'
+ . 'vacType,'
+ . 'intSize,'
+ . 'blobContent,'
+ . 'vacExtension '
+ . 'FROM files';
+
+ $totalRecords = 0;
+ $num = 0;
+
+ try {
+ foreach(self::$_dbc->query($query) as $row){
+ if (self::insertAccountsFiles($row)) {
+ $num++;
+ }
+ $totalRecords++;
+ }
+ } catch(\PDOException $e){
+ throw new SPException(SPException::SP_CRITICAL,
+ _('Error al obtener los archivos de cuentas'),
+ self::$_dbc->error);
+ }
+
+ $log = new Log(_('Importar Archivos de Cuentas'));
+ $log->addDescription('OK');
+ $log->addDescription(_('Registros') . ': ' . $num . '/' . $totalRecords);
+ $log->writeLog();
+ }
+
+ /**
+ * Insertar los archivos de una cuenta en sysPass.
+ *
+ * @param array $accountFile con los datos del archivo
+ * @throws SPException
+ * @return bool
+ */
+ private static function insertAccountsFiles($accountFile)
+ {
+ $query = 'INSERT INTO accFiles '
+ . 'SET accfile_accountId = :id,'
+ . 'accfile_name = :name,'
+ . 'accfile_type = :type,'
+ . 'accfile_size = :size,'
+ . 'accfile_content = :blobcontent,'
+ . 'accfile_extension = :extension';
+
+ $data['id'] = $accountFile['intAccountId'];
+ $data['name'] = $accountFile['vacName'];
+ $data['type'] = $accountFile['vacType'];
+ $data['size'] = $accountFile['intSize'];
+ $data['blobcontent'] = $accountFile['blobContent'];
+ $data['extension'] = $accountFile['vacExtension'];
+
+ if (DB::getQuery($query, __FUNCTION__, $data) === false) {
+ throw new SPException(SPException::SP_CRITICAL,
+ _('Error al crear archivos de cuentas'),
+ DB::$txtError);
+ }
+
+ return true;
+ }
+
+ /**
+ * Migrar las categorías de las cuentas desde phpPMS.
+ *
+ * @throws SPException
+ * @return array resultado
+ */
+ private static function migrateAccountsCategories()
+ {
+ $query = 'SELECT intCategoryId,vacCategoryName FROM categories';
+
+ $totalRecords = 0;
+ $num = 0;
+
+ try {
+ foreach(self::$_dbc->query($query) as $row){
+ if (self::insertAccountsCategories($row)) {
+ $num++;
+ }
+ $totalRecords++;
+ }
+ } catch(\PDOException $e){
+ throw new SPException(SPException::SP_CRITICAL,
+ _('Error al obtener las categorías de cuentas'),
+ self::$_dbc->error);
+ }
+
+ $log = new Log(_('Importar Categorías de Cuentas'));
+ $log->addDescription('OK');
+ $log->addDescription(_('Registros') . ': ' . $num . '/' . $totalRecords);
+ $log->writeLog();
+ }
+
+ /**
+ * Insertar las categorías en sysPass.
+ *
+ * @param array $accountCategory con los datos de la categoría
+ * @throws SPException
+ * @return bool
+ */
+ private static function insertAccountsCategories($accountCategory)
+ {
+ $query = 'INSERT INTO categories SET category_id = :id,category_name = :name';
+
+ $data['id'] = $accountCategory['intCategoryId'];
+ $data['name'] = $accountCategory['vacCategoryName'];
+
+ if (DB::getQuery($query, __FUNCTION__, $data) === false) {
+ throw new SPException(SPException::SP_CRITICAL,
+ _('Error al crear categorías de cuentas'),
+ DB::$txtError);
+ }
+
+ return true;
+ }
+
+ /**
+ * Migrar los usuarios desde desde phpPMS.
+ *
+ * @throws SPException
+ * @return array resultado
+ */
+ private static function migrateUsers()
+ {
+ $query = 'SELECT intUserId,'
+ . 'vacUName,'
+ . 'intUGroupFid,'
+ . 'vacULogin,'
+ . 'vacUPassword,'
+ . 'vacUEmail,'
+ . 'txtUNotes,'
+ . 'intUCount,'
+ . 'intUProfile,'
+ . 'datULastLogin,'
+ . 'blnIsAdminApp,'
+ . 'blnIsAdminAcc,'
+ . 'vacUserMPwd,'
+ . 'vacUserMIv,'
+ . 'datULastUpdate,'
+ . 'datUserLastUpdateMPass,'
+ . 'blnFromLdap,'
+ . 'blnDisabled '
+ . 'FROM users '
+ . 'WHERE intUserId <> ' . Session::getUserId();
+
+ $totalRecords = 0;
+ $num = 0;
+
+ try {
+ foreach(self::$_dbc->query($query) as $row){
+ if (self::insertUsers($row)) {
+ $num++;
+ }
+ $totalRecords++;
+ }
+ } catch(\PDOException $e){
+ throw new SPException(SPException::SP_CRITICAL,
+ _('Error al obtener los usuarios'),
+ self::$_dbc->error);
+ }
+
+ $log = new Log(_('Importar Usuarios'));
+ $log->addDescription('OK');
+ $log->addDescription(_('Registros') . ': ' . $num . '/' . $totalRecords);
+ $log->writeLog();
+ }
+
+ /**
+ * Insertar los usuarios en sysPass.
+ *
+ * @param array $users con los datos del usuario
+ * @throws SPException
+ * @return bool
+ *
+ * El usuario importado está deshabilitado
+ */
+ private static function insertUsers($users)
+ {
+ $query = 'INSERT INTO usrData '
+ . 'SET user_id = :id,'
+ . 'user_name = :name,'
+ . 'user_groupId = :goupId,'
+ . 'user_login = :login,'
+ . 'user_pass = :pass,'
+ . 'user_mPass = :mpass,'
+ . 'user_mIV = :miv,'
+ . 'user_email = :email,'
+ . 'user_notes = :notes,'
+ . 'user_count = :count,'
+ . 'user_profileId = 0,'
+ . 'user_lastLogin = :lastLogin,'
+ . 'user_lastUpdate = :lastUpdate,'
+ . 'user_lastUpdateMPass = :lastUpdateMPass,'
+ . 'user_isAdminApp = :isAdminApp,'
+ . 'user_isAdminAcc = :isAdminAcc,'
+ . 'user_isLdap = :isLdap,'
+ . 'user_isDisabled = 1,'
+ . 'user_isMigrate = 1';
+
+ $data['id'] = $users['intUserId'];
+ $data['name'] = $users['vacUName'];
+ $data['groupId'] = $users['intUGroupFid'];
+ $data['login'] = $users['vacULogin'];
+ $data['pass'] = $users['vacUPassword'];
+ $data['mpass'] = $users['vacUserMPwd'];
+ $data['miv'] = $users['vacUserMIv'];
+ $data['email'] = $users['vacUEmail'];
+ $data['notes'] = $users['txtUNotes'];
+ $data['count'] = $users['intUCount'];
+ $data['lastLogin'] = $users['datULastLogin'];
+ $data['lastUpdate'] = $users['datULastUpdate'];
+ $data['lastUpdateMPass'] = $users['datUserLastUpdateMPass'];
+ $data['isAdminApp'] = $users['blnIsAdminApp'];
+ $data['isAdminAcc'] = $users['blnIsAdminAcc'];
+ $data['isLdap'] = $users['blnFromLdap'];
+
+ if (DB::getQuery($query, __FUNCTION__, $data) === false) {
+ throw new SPException(SPException::SP_CRITICAL,
+ _('Error al crear usuarios'),
+ DB::$txtError);
+ }
+
+ return true;
+ }
+
+ /**
+ * Migrar los grupos de usuarios desde desde phpPMS.
+ *
+ * @throws SPException
+ * @return array resultado
+ */
+ private static function migrateUsersGroups()
+ {
+ $query = 'SELECT intUGroupId,vacUGroupName,vacUGroupDesc FROM usergroups';
+
+ $totalRecords = 0;
+ $num = 0;
+
+ try {
+ foreach(self::$_dbc->query($query) as $row){
+ if (self::insertUsersGroups($row)) {
+ $num++;
+ }
+ $totalRecords++;
+ }
+ } catch(\PDOException $e){
+ throw new SPException(SPException::SP_CRITICAL,
+ _('Error al obtener los grupos de usuarios'),
+ self::$_dbc->error);
+ }
+
+ $log = new Log(_('Importar Grupos de Usuarios'));
+ $log->addDescription('OK');
+ $log->addDescription(_('Registros') . ': ' . $num . '/' . $totalRecords);
+ $log->writeLog();
+ }
+
+ /**
+ * Insertar los grupos de usuarios en sysPass.
+ *
+ * @param array $usersGroups con los datos del grupo
+ * @throws SPException
+ * @return bool
+ */
+ private static function insertUsersGroups($usersGroups)
+ {
+ $query = 'INSERT INTO usrGroups '
+ . 'SET usergroup_id = :id,'
+ . 'usergroup_name = :name,'
+ . 'usergroup_description = :description';
+
+ $data['id'] = $usersGroups['intUGroupId'];
+ $data['name'] = $usersGroups['vacUGroupName'];
+ $data['description'] = $usersGroups['vacUGroupDesc'];
+
+ if (DB::getQuery($query, __FUNCTION__, $data) === false) {
+ throw new SPException(SPException::SP_CRITICAL,
+ _('Error al crear los grupos de usuarios'),
+ DB::$txtError);
+ }
+
+ return true;
+ }
+
+ /**
+ * Migrar la configuración desde phpPMS.
+ *
+ * @return array resultado
+ */
+ private static function migrateConfig()
+ {
+ // Obtener la configuración actual
+ self::getSourceConfig();
+
+ $skip = array('version',
+ 'installed',
+ 'install',
+ 'dbhost',
+ 'dbname',
+ 'dbuser',
+ 'dbpass',
+ 'siteroot',
+ 'sitelang',
+ 'sitename',
+ 'siteshortname',
+ 'md5_pass',
+ 'password_show',
+ 'lastupdatempass',
+ 'passwordsalt');
+
+ $totalParams = count(self::$_oldConfig);
+ $num = 0;
+
+ // Guardar la nueva configuración
+ foreach (self::$_oldConfig as $key => $value) {
+ if (array_key_exists($key, $skip)) {
+ continue;
+ }
+ Config::setValue($key, $value);
+ $num++;
+ }
+
+ $log = new Log(_('Importar Configuración'));
+ $log->addDescription('OK');
+ $log->addDescription(_('Registros') . ': ' . $num . '/' . $totalParams);
+ $log->writeLog();
+ }
+}
\ No newline at end of file
diff --git a/inc/Profile.class.php b/inc/Profile.class.php
new file mode 100644
index 00000000..ea3eedfa
--- /dev/null
+++ b/inc/Profile.class.php
@@ -0,0 +1,228 @@
+.
+ *
+ */
+
+namespace SP;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+/**
+ * Esta clase es la encargada de realizar las operaciones sobre los perfiles de usuarios.
+ */
+class Profile extends ProfileBase
+{
+ /**
+ * Migrar los perfiles con formato anterior a v1.2
+ *
+ * @return bool
+ */
+ public static function migrateProfiles()
+ {
+ $query = 'SELECT userprofile_id AS id,'
+ . 'userprofile_name AS name,'
+ . 'BIN(userProfile_pView) AS pView,'
+ . 'BIN(userProfile_pViewPass) AS pViewPass,'
+ . 'BIN(userProfile_pViewHistory) AS pViewHistory,'
+ . 'BIN(userProfile_pEdit) AS pEdit,'
+ . 'BIN(userProfile_pEditPass) AS pEditPass,'
+ . 'BIN(userProfile_pAdd) AS pAdd,'
+ . 'BIN(userProfile_pDelete) AS pDelete,'
+ . 'BIN(userProfile_pFiles) AS pFiles,'
+ . 'BIN(userProfile_pConfig) AS pConfig,'
+ . 'BIN(userProfile_pConfigMasterPass) AS pConfigMasterPass,'
+ . 'BIN(userProfile_pConfigBackup) AS pConfigBackup,'
+ . 'BIN(userProfile_pAppMgmtCategories) AS pAppMgmtCategories,'
+ . 'BIN(userProfile_pAppMgmtCustomers) AS pAppMgmtCustomers,'
+ . 'BIN(userProfile_pUsers) AS pUsers,'
+ . 'BIN(userProfile_pGroups) AS pGroups,'
+ . 'BIN(userProfile_pProfiles) AS pProfiles,'
+ . 'BIN(userProfile_pEventlog) AS pEventlog '
+ . 'FROM usrProfiles';
+
+ DB::setReturnArray();
+
+ $queryRes = DB::getResults($query, __FUNCTION__);
+
+ if ($queryRes === false) {
+ Log::writeNewLog(_('Migrar Perfiles'), _('Error al obtener perfiles'));
+ return false;
+ }
+
+ foreach ($queryRes as $oldProfile){
+ $profile = new Profile();
+ $profile->setId($oldProfile->id);
+ $profile->setName($oldProfile->name);
+ $profile->setAccAdd($oldProfile->pAdd);
+ $profile->setAccView($oldProfile->pView);
+ $profile->setAccViewPass($oldProfile->pViewPass);
+ $profile->setAccViewHistory($oldProfile->pViewHistory);
+ $profile->setAccEdit($oldProfile->pEdit);
+ $profile->setAccEditPass($oldProfile->pEditPass);
+ $profile->setAccDelete($oldProfile->pDelete);
+ $profile->setConfigGeneral($oldProfile->pConfig);
+ $profile->setConfigEncryption($oldProfile->pConfigMasterPass);
+ $profile->setConfigBackup($oldProfile->pConfigBackup);
+ $profile->setMgmCategories($oldProfile->pAppMgmtCategories);
+ $profile->setMgmCustomers($oldProfile->pAppMgmtCustomers);
+ $profile->setMgmUsers($oldProfile->pUsers);
+ $profile->setMgmGroups($oldProfile->pGroups);
+ $profile->setMgmProfiles($oldProfile->pProfiles);
+ $profile->setEvl($oldProfile->pEventlog);
+
+ if ($profile->profileUpdate() === false){
+ return false;
+ }
+ }
+
+ $query = 'ALTER TABLE usrProfiles '
+ . 'DROP COLUMN userProfile_pAppMgmtCustomers,'
+ . 'DROP COLUMN userProfile_pAppMgmtCategories,'
+ . 'DROP COLUMN userProfile_pAppMgmtMenu,'
+ . 'DROP COLUMN userProfile_pUsersMenu,'
+ . 'DROP COLUMN userProfile_pConfigMenu,'
+ . 'DROP COLUMN userProfile_pFiles,'
+ . 'DROP COLUMN userProfile_pViewHistory,'
+ . 'DROP COLUMN userProfile_pEventlog,'
+ . 'DROP COLUMN userProfile_pEditPass,'
+ . 'DROP COLUMN userProfile_pViewPass,'
+ . 'DROP COLUMN userProfile_pDelete,'
+ . 'DROP COLUMN userProfile_pProfiles,'
+ . 'DROP COLUMN userProfile_pGroups,'
+ . 'DROP COLUMN userProfile_pUsers,'
+ . 'DROP COLUMN userProfile_pConfigBackup,'
+ . 'DROP COLUMN userProfile_pConfigMasterPass,'
+ . 'DROP COLUMN userProfile_pConfig,'
+ . 'DROP COLUMN userProfile_pAdd,'
+ . 'DROP COLUMN userProfile_pEdit,'
+ . 'DROP COLUMN userProfile_pView';
+
+ $queryRes = DB::getQuery($query, __FUNCTION__);
+
+ $log = new Log(_('Migrar Perfiles'));
+
+ if ($queryRes) {
+ $log->addDescription(_('Operación realizada correctamente'));
+ } else {
+ $log->addDescription(_('Migrar Perfiles'), _('Fallo al realizar la operación'));
+ }
+
+ $log->writeLog();
+
+ Email::sendEmail($log);
+
+ return $queryRes;
+ }
+
+ /**
+ * Comprobar si un perfil existe
+ *
+ * @param $id int El id de perfil
+ * @param $name string El nombre del perfil
+ * @return bool
+ */
+ public static function checkProfileExist($id, $name)
+ {
+ $query = 'SELECT userprofile_name '
+ . 'FROM usrProfiles '
+ . 'WHERE UPPER(userprofile_name) = :name';
+
+ $data['name'] = $name;
+
+ if ($id !== 0) {
+ $query .= ' AND userprofile_id != :id';
+
+ $data['id'] = $id;
+ }
+
+ return (DB::getQuery($query, __FUNCTION__, $data) === true && DB::$lastNumRows >= 1);
+ }
+
+ /**
+ * Comprobar si un perfil está en uso.
+ *
+ * @param $id int El id del perfil
+ * @return bool|int Cadena con el número de usuarios, o bool si no está en uso
+ */
+ public static function checkProfileInUse($id)
+ {
+ $count['users'] = self::getProfileInUsersCount($id);
+ return $count;
+ }
+
+ /**
+ * Obtener el número de usuarios que usan un perfil.
+ *
+ * @param $id int El id del perfil
+ * @return false|int con el número total de cuentas
+ */
+ private static function getProfileInUsersCount($id)
+ {
+ $query = 'SELECT user_profileId FROM usrData WHERE user_profileId = :id';
+
+ $data['id'] = $id;
+
+ DB::getQuery($query, __FUNCTION__, $data);
+
+ return DB::$lastNumRows;
+ }
+
+ /**
+ * Obtener el nombre de los usuarios que usan un perfil.
+ *
+ * @param $id int El id del perfil
+ * @return false|int con el número total de cuentas
+ */
+ public static function getProfileInUsersName($id)
+ {
+ $query = 'SELECT user_login FROM usrData WHERE user_profileId = :id';
+
+ $data['id'] = $id;
+
+ DB::setReturnArray();
+
+ return DB::getResults($query, __FUNCTION__, $data);
+ }
+
+ /**
+ * Obtener el nombre de un perfil por a partir del Id.
+ *
+ * @param int $id con el Id del perfil
+ * @return false|string con el nombre del perfil
+ */
+ public static function getProfileNameById($id)
+ {
+ $query = 'SELECT userprofile_name FROM usrProfiles WHERE userprofile_id = :id LIMIT 1';
+
+ $data['id'] = $id;
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+ return false;
+ }
+
+ return $queryRes->userprofile_name;
+ }
+}
diff --git a/inc/ProfileBase.class.php b/inc/ProfileBase.class.php
new file mode 100644
index 00000000..3ef6c002
--- /dev/null
+++ b/inc/ProfileBase.class.php
@@ -0,0 +1,597 @@
+.
+ *
+ */
+
+namespace SP;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+/**
+ * Clase ProfileBase para la definición de perfiles de acceso de usuarios
+ *
+ * @package SP
+ */
+abstract class ProfileBase
+{
+ /**
+ * @var int
+ */
+ protected $_id = 0;
+ /**
+ * @var string
+ */
+ protected $_name = '';
+ /**
+ * @var bool
+ */
+ protected $_accView = false;
+ /**
+ * @var bool
+ */
+ protected $_accViewPass = false;
+ /**
+ * @var bool
+ */
+ protected $_accViewHistory = false;
+ /**
+ * @var bool
+ */
+ protected $_accEdit = false;
+ /**
+ * @var bool
+ */
+ protected $_accEditPass = false;
+ /**
+ * @var bool
+ */
+ protected $_accAdd = false;
+ /**
+ * @var bool
+ */
+ protected $_accDelete = false;
+ /**
+ * @var bool
+ */
+ protected $_accFiles = false;
+ /**
+ * @var bool
+ */
+ protected $_configGeneral = false;
+ /**
+ * @var bool
+ */
+ protected $_configEncryption = false;
+ /**
+ * @var bool
+ */
+ protected $_configBackup = false;
+ /**
+ * @var bool
+ */
+ protected $_configImport = false;
+ /**
+ * @var bool
+ */
+ protected $_mgmUsers = false;
+ /**
+ * @var bool
+ */
+ protected $_mgmGroups = false;
+ /**
+ * @var bool
+ */
+ protected $_mgmProfiles = false;
+ /**
+ * @var bool
+ */
+ protected $_mgmCategories = false;
+ /**
+ * @var bool
+ */
+ protected $_mgmCustomers = false;
+ /**
+ * @var bool
+ */
+ protected $_mgmApiTokens = false;
+
+ /**
+ * @return boolean
+ */
+ public function isMgmApiTokens()
+ {
+ return $this->_mgmApiTokens;
+ }
+
+ /**
+ * @param boolean $mgmApiTokens
+ */
+ public function setMgmApiTokens($mgmApiTokens)
+ {
+ $this->_mgmApiTokens = $mgmApiTokens;
+ }
+ /**
+ * @var bool
+ */
+ protected $_evl = false;
+ /**
+ * @var bool
+ */
+ protected $_mgmCustomFields = false;
+
+ /**
+ * Obtener los datos de un perfil
+ *
+ * @param $id int El id del perfil a obtener
+ * @return array|Profile
+ * @throws SPException
+ */
+ public static function getProfile($id)
+ {
+ $query = 'SELECT userprofile_profile FROM usrProfiles WHERE userprofile_id = :id LIMIT 1';
+
+ $data['id'] = $id;
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+ return false;
+ }
+
+ $profile = unserialize($queryRes->userprofile_profile);
+
+ if (!$profile instanceof Profile) {
+ throw new SPException(SPException::SP_CRITICAL, _('Datos de perfil incorrectos'));
+ }
+
+ return $profile;
+ }
+
+ /**
+ * Obtener los perfiles disponibles
+ *
+ * @return array|bool
+ */
+ public static function getProfiles()
+ {
+ if (Util::demoIsEnabled()){
+ $query = 'SELECT userprofile_id, userprofile_name FROM usrProfiles WHERE userprofile_name <> "Admin" AND userprofile_name <> "Demo" ORDER BY userprofile_name';
+ } else {
+ $query = 'SELECT userprofile_id, userprofile_name FROM usrProfiles ORDER BY userprofile_name';
+ }
+
+ DB::setReturnArray();
+
+ return DB::getResults($query, __FUNCTION__);
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isMgmCustomFields()
+ {
+ return $this->_mgmCustomFields;
+ }
+
+ /**
+ * @param boolean $mgmCustomFields
+ */
+ public function setMgmCustomFields($mgmCustomFields)
+ {
+ $this->_mgmCustomFields = $mgmCustomFields;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isAccView()
+ {
+ return $this->_accView;
+ }
+
+ /**
+ * @param boolean $accView
+ */
+ public function setAccView($accView)
+ {
+ $this->_accView = (bool)$accView;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isAccViewPass()
+ {
+ return $this->_accViewPass;
+ }
+
+ /**
+ * @param boolean $accViewPass
+ */
+ public function setAccViewPass($accViewPass)
+ {
+ $this->_accViewPass = (bool)$accViewPass;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isAccViewHistory()
+ {
+ return $this->_accViewHistory;
+ }
+
+ /**
+ * @param boolean $accViewHistory
+ */
+ public function setAccViewHistory($accViewHistory)
+ {
+ $this->_accViewHistory = (bool)$accViewHistory;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isAccEdit()
+ {
+ return $this->_accEdit;
+ }
+
+ /**
+ * @param boolean $accEdit
+ */
+ public function setAccEdit($accEdit)
+ {
+ $this->_accEdit = (bool)$accEdit;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isAccEditPass()
+ {
+ return $this->_accEditPass;
+ }
+
+ /**
+ * @param boolean $accEditPass
+ */
+ public function setAccEditPass($accEditPass)
+ {
+ $this->_accEditPass = (bool)$accEditPass;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isAccAdd()
+ {
+ return $this->_accAdd;
+ }
+
+ /**
+ * @param boolean $accAdd
+ */
+ public function setAccAdd($accAdd)
+ {
+ $this->_accAdd = (bool)$accAdd;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isAccDelete()
+ {
+ return $this->_accDelete;
+ }
+
+ /**
+ * @param boolean $accDelete
+ */
+ public function setAccDelete($accDelete)
+ {
+ $this->_accDelete = (bool)$accDelete;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isAccFiles()
+ {
+ return $this->_accFiles;
+ }
+
+ /**
+ * @param boolean $accFiles
+ */
+ public function setAccFiles($accFiles)
+ {
+ $this->_accFiles = (bool)$accFiles;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isConfigGeneral()
+ {
+ return $this->_configGeneral;
+ }
+
+ /**
+ * @param boolean $configGeneral
+ */
+ public function setConfigGeneral($configGeneral)
+ {
+ $this->_configGeneral = (bool)$configGeneral;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isConfigEncryption()
+ {
+ return $this->_configEncryption;
+ }
+
+ /**
+ * @param boolean $configEncryption
+ */
+ public function setConfigEncryption($configEncryption)
+ {
+ $this->_configEncryption = (bool)$configEncryption;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isConfigBackup()
+ {
+ return $this->_configBackup;
+ }
+
+ /**
+ * @param boolean $configBackup
+ */
+ public function setConfigBackup($configBackup)
+ {
+ $this->_configBackup = (bool)$configBackup;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isConfigImport()
+ {
+ return $this->_configImport;
+ }
+
+ /**
+ * @param boolean $configImport
+ */
+ public function setConfigImport($configImport)
+ {
+ $this->_configImport = (bool)$configImport;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isMgmUsers()
+ {
+ return $this->_mgmUsers;
+ }
+
+ /**
+ * @param boolean $mgmUsers
+ */
+ public function setMgmUsers($mgmUsers)
+ {
+ $this->_mgmUsers = (bool)$mgmUsers;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isMgmGroups()
+ {
+ return $this->_mgmGroups;
+ }
+
+ /**
+ * @param boolean $mgmGroups
+ */
+ public function setMgmGroups($mgmGroups)
+ {
+ $this->_mgmGroups = (bool)$mgmGroups;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isMgmProfiles()
+ {
+ return $this->_mgmProfiles;
+ }
+
+ /**
+ * @param boolean $mgmProfiles
+ */
+ public function setMgmProfiles($mgmProfiles)
+ {
+ $this->_mgmProfiles = (bool)$mgmProfiles;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isMgmCategories()
+ {
+ return $this->_mgmCategories;
+ }
+
+ /**
+ * @param boolean $mgmCategories
+ */
+ public function setMgmCategories($mgmCategories)
+ {
+ $this->_mgmCategories = (bool)$mgmCategories;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isMgmCustomers()
+ {
+ return $this->_mgmCustomers;
+ }
+
+ /**
+ * @param boolean $mgmCustomers
+ */
+ public function setMgmCustomers($mgmCustomers)
+ {
+ $this->_mgmCustomers = (bool)$mgmCustomers;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isEvl()
+ {
+ return $this->_evl;
+ }
+
+ /**
+ * @param boolean $evl
+ */
+ public function setEvl($evl)
+ {
+ $this->_evl = (bool)$evl;
+ }
+
+ /**
+ * Añadir un nuevo perfil.
+ *
+ * @return bool
+ */
+ public function profileAdd()
+ {
+ $query = 'INSERT INTO usrProfiles SET '
+ . 'userprofile_name = :name,'
+ . 'userprofile_profile = :profile';
+
+ $data['name'] = $this->getName();
+ $data['profile'] = serialize($this);
+
+ if (DB::getQuery($query, __FUNCTION__, $data) === false) {
+ return false;
+ }
+
+ $this->setId(DB::getLastId());
+
+ Log::writeNewLogAndEmail(_('Nuevo Perfil'), Html::strongText(_('Perfil') . ': ') . $this->getName());
+
+ return true;
+ }
+
+ /**
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * @param string $name
+ */
+ public function setName($name)
+ {
+ $this->_name = $name;
+ }
+
+ /**
+ * Eliminar un perfil.
+ *
+ * @return bool
+ */
+ public function profileDelete()
+ {
+ $oldProfileName = static::getProfileNameById($this->getId());
+
+ $query = 'DELETE FROM usrProfiles WHERE userprofile_id = :id LIMIT 1';
+
+ $data['id'] = $this->getId();
+
+ if (DB::getQuery($query, __FUNCTION__, $data) === false) {
+ return false;
+ }
+
+ Log::writeNewLogAndEmail(_('Eliminar Perfil'), Html::strongText(_('Perfil') . ': ') . $oldProfileName);
+
+ return true;
+ }
+
+ /**
+ * @return int
+ */
+ public function getId()
+ {
+ return $this->_id;
+ }
+
+ /**
+ * @param int $id
+ */
+ public function setId($id)
+ {
+ $this->_id = (int)$id;
+ }
+
+ /**
+ * Actualizar un perfil.
+ *
+ * @return bool
+ */
+ public function profileUpdate()
+ {
+ $oldProfileName = static::getProfileNameById($this->getId());
+
+ $query = 'UPDATE usrProfiles SET '
+ . 'userprofile_name = :name,'
+ . 'userprofile_profile = :profile '
+ . 'WHERE userprofile_id = :id LIMIT 1';
+
+ $data['id'] = $this->getId();
+ $data['name'] = $this->getName();
+ $data['profile'] = serialize($this);
+
+ if (DB::getQuery($query, __FUNCTION__, $data) === false) {
+ return false;
+ }
+
+ Log::writeNewLogAndEmail(_('Modificar Perfil'), Html::strongText(_('Perfil') . ': ') . $oldProfileName . ' > ' . $this->getName());
+
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/inc/Request.class.php b/inc/Request.class.php
new file mode 100644
index 00000000..5195c22a
--- /dev/null
+++ b/inc/Request.class.php
@@ -0,0 +1,115 @@
+.
+ *
+ */
+
+namespace SP;
+
+
+/**
+ * Clase Request para la gestión de peticiones HTTP
+ *
+ * @package SP
+ */
+class Request
+{
+ /**
+ * Obtener los valores de variables $_GET y $_POST
+ * y devolverlos limpios con el tipo correcto o esperado.
+ *
+ * @param string $param con el parámetro a consultar
+ * @param mixed $default valor por defecto a devolver
+ * @param bool $check comprobar si el parámetro está presente
+ * @param mixed $force valor devuelto si el parámeto está definido
+ * @param bool $sanitize escapar/eliminar carácteres especiales
+ * @return mixed si está presente el parámeto en la petición devuelve bool. Si lo está, devuelve el valor.
+ */
+ public static function analyze($param, $default = '', $check = false, $force = false, $sanitize = true)
+ {
+ switch($_SERVER['REQUEST_METHOD']){
+ case 'GET':
+ if (!isset($_GET[$param])) {
+ return ($force) ? !$force : $default;
+ }
+ $value = &$_GET[$param];
+ break;
+ case 'POST':
+ if (!isset($_POST[$param])) {
+ return ($force) ? !$force : $default;
+ }
+ $value = &$_POST[$param];
+ break;
+ }
+
+ if ($check) {
+ return true;
+ } elseif ($force) {
+ return $force;
+ }
+
+ return self::parse($value, $default, $sanitize);
+ }
+
+ /**
+ * Devolver el valor con el tipo correcto o requerido.
+ *
+ * @param $value mixed valor a analizar
+ * @param $default mixed tipo por defecto a devolver
+ * @param $sanitize bool limpiar una cadena de caracteres
+ * @return mixed
+ */
+ private static function parse($value, $default, $sanitize)
+ {
+ if (is_array($value)){
+ foreach($value as &$data){
+ self::parse($data, $default, $sanitize);
+ }
+
+ return $value;
+ }
+
+ if ((is_numeric($value) && !is_string($default)) || is_numeric($default)) {
+ return intval($value);
+ }
+
+ if (is_string($value)) {
+ return ($sanitize === true) ? Html::sanitize($value) : $value;
+ }
+ }
+
+ /**
+ * Comprobar el método utilizado para enviar un formulario.
+ *
+ * @param string $method con el método utilizado.
+ */
+ public static function checkReferer($method)
+ {
+ if ($_SERVER['REQUEST_METHOD'] !== strtoupper($method)
+ || !isset($_SERVER['HTTP_REFERER'])
+ || !preg_match('#' . Init::$WEBROOT . '/.*$#', $_SERVER['HTTP_REFERER'])
+ ) {
+ Init::initError(_('No es posible acceder directamente a este archivo'));
+ exit();
+ }
+ }
+}
\ No newline at end of file
diff --git a/inc/SPException.class.php b/inc/SPException.class.php
new file mode 100644
index 00000000..b311088d
--- /dev/null
+++ b/inc/SPException.class.php
@@ -0,0 +1,78 @@
+.
+ *
+ */
+
+namespace SP;
+
+/**
+ * Extender la clase Exception para mostrar ayuda en los mensajes
+ */
+class SPException extends \Exception{
+ /**
+ * Constantes para tipos de excepción
+ */
+ const SP_OK = 0;
+ const SP_CRITICAL = 1;
+ const SP_WARNING = 2;
+ /**
+ * @var int Tipo de excepción
+ */
+ private $_type = 0;
+ /**
+ * @var string Ayuda de la excepción
+ */
+ private $_hint = '';
+
+ public function __construct($type, $message, $hint = '', $code = 0, \Exception $previous = null)
+ {
+ $this->_type = $type;
+ $this->_hint = $hint;
+ parent::__construct($message, $code, $previous);
+ }
+
+ public function __toString()
+ {
+ return __CLASS__ . ": [{$this->code}]: {$this->message} ({$this->_hint})\n";
+ }
+
+ public function getHint()
+ {
+ return $this->_hint;
+ }
+
+ public function getType()
+ {
+ return $this->_type;
+ }
+
+ public static function getExceptionTypeName($type){
+ $typeName = array(
+ self::SP_OK => 'ok',
+ self::SP_CRITICAL => 'critical',
+ self::SP_WARNING => 'warning'
+ );
+
+ return $typeName[$type];
+ }
+}
\ No newline at end of file
diff --git a/inc/Session.class.php b/inc/Session.class.php
new file mode 100644
index 00000000..a50f4c25
--- /dev/null
+++ b/inc/Session.class.php
@@ -0,0 +1,600 @@
+.
+ *
+ */
+
+namespace SP;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+/**
+ * Clase para manejar la variable de sesion
+ */
+class Session
+{
+ /**
+ * Obtiene el id de usuario de la sesión.
+ *
+ * @return int
+ */
+ public static function getUserId()
+ {
+ return self::getSessionKey('uid', 0);
+ }
+
+ /**
+ * Devolver una variable de sesión
+ *
+ * @param mixed $key
+ * @param mixed $default
+ * @return bool|int
+ */
+ public static function getSessionKey($key, $default = '')
+ {
+ if (isset($_SESSION[$key])) {
+ if (is_numeric($default)) {
+ return (int)$_SESSION[$key];
+ }
+ return $_SESSION[$key];
+ }
+
+ return $default;
+ }
+
+ /**
+ * Establece el id de usuario en la sesión.
+ *
+ * @param $userId
+ */
+ public static function setUserId($userId)
+ {
+ self::setSessionKey('uid', $userId);
+ }
+
+ /**
+ * Establecer una variable de sesión
+ *
+ * @param mixed $key El nombre de la variable
+ * @param mixed $value El valor de la variable
+ */
+ public static function setSessionKey($key, $value)
+ {
+ $_SESSION[$key] = $value;
+ }
+
+ /**
+ * Obtiene si el usuario es administrador de la aplicación de la sesión.
+ *
+ * @return bool
+ */
+ public static function getUserIsAdminApp()
+ {
+ return self::getSessionKey('uisadminapp', false);
+ }
+
+ /**
+ * Establece si el usuario es administrador de la aplicación en la sesión.
+ *
+ * @param $bool
+ */
+ public static function setUserIsAdminApp($bool)
+ {
+ self::setSessionKey('uisadminapp', $bool);
+ }
+
+ /**
+ * Obtiene si el usuario es administrador de cuentas de la sesión.
+ *
+ * @return bool
+ */
+ public static function getUserIsAdminAcc()
+ {
+ return self::getSessionKey('uisadminacc', false);
+ }
+
+ /**
+ * Obtiene si el usuario es administrador de cuentas en la sesión.
+ *
+ * @param $bool
+ */
+ public static function setUserIsAdminAcc($bool)
+ {
+ self::setSessionKey('uisadminacc', $bool);
+ }
+
+ /**
+ * Obtiene el id de perfil de usuario de la sesión.
+ *
+ * @return int
+ */
+ public static function getUserProfileId()
+ {
+ return self::getSessionKey('uprofile', 0);
+ }
+
+ /**
+ * Establece el id de perfil de usuario en la sesión.
+ *
+ * @param int $profileId
+ */
+ public static function setUserProfileId($profileId)
+ {
+ self::setSessionKey('uprofile', $profileId);
+ }
+
+ /**
+ * Obtiene el login de usuario de la sesión.
+ *
+ * @return mixed
+ */
+ public static function getUserLogin()
+ {
+ return self::getSessionKey('ulogin', false);
+ }
+
+ /**
+ * Establece el login de usuario en la sesión.
+ *
+ * @param $userLogin
+ */
+ public static function setUserLogin($userLogin)
+ {
+ self::setSessionKey('ulogin', $userLogin);
+ }
+
+ /**
+ * Obtiene el nombre de usuario de la sesión.
+ *
+ * @return string
+ */
+ public static function getUserName()
+ {
+ return self::getSessionKey('uname');
+ }
+
+ /**
+ * Establece el nombre de usuario en la sesión.
+ *
+ * @param $userName
+ */
+ public static function setUserName($userName)
+ {
+ self::setSessionKey('uname', $userName);
+ }
+
+ /**
+ * Obtiene el id de grupo de usuario de la sesión.
+ *
+ * @return int
+ */
+ public static function getUserGroupId()
+ {
+ return self::getSessionKey('ugroup', 0);
+ }
+
+ /**
+ * Obtiene el id de grupo de usuario de la sesión.
+ *
+ * @param $groupId
+ */
+ public static function setUserGroupId($groupId)
+ {
+ self::setSessionKey('ugroup', $groupId);
+ }
+
+ /**
+ * Obtiene el nombre del grupo de usuario de la sesión.
+ *
+ * @return string
+ */
+ public static function getUserGroupName()
+ {
+ return self::getSessionKey('ugroupn');
+ }
+
+ /**
+ * Establece el nombre del grupo de usuario en la sesión.
+ *
+ * @param string $groupName
+ */
+ public static function setUserGroupName($groupName)
+ {
+ self::setSessionKey('ugroupn', $groupName);
+ }
+
+ /**
+ * Obtiene el email de usuario de la sesión.
+ *
+ * @return string
+ */
+ public static function getUserEMail()
+ {
+ return self::getSessionKey('uemail');
+ }
+
+ /**
+ * Establece el nombre del grupo de usuario en la sesión.
+ *
+ * @param $userEmail
+ */
+ public static function setUserEMail($userEmail)
+ {
+ self::setSessionKey('uemail', $userEmail);
+ }
+
+ /**
+ * Obtiene si es un usuario de LDAP de la sesión.
+ *
+ * @return bool
+ */
+ public static function getUserIsLdap()
+ {
+ return self::getSessionKey('uisldap', false);
+ }
+
+ /**
+ * Establece si es un usuario de LDAP en la sesión.
+ *
+ * @param $bool
+ */
+ public static function setUserIsLdap($bool)
+ {
+ self::setSessionKey('uisldap', $bool);
+ }
+
+ /**
+ * Obtiene el objeto de perfil de usuario de la sesión.
+ *
+ * @return Profile
+ */
+ public static function getUserProfile()
+ {
+ return self::getSessionKey('usrprofile');
+ }
+
+ /**
+ * Establece el objeto de perfil de usuario en la sesión.
+ *
+ * @param \SP\Profile $profile
+ */
+ public static function setUserProfile(\SP\Profile $profile)
+ {
+ self::setSessionKey('usrprofile', $profile);
+ }
+
+ /**
+ * @return \SP\AccountSearch
+ */
+ public static function getSearchFilters()
+ {
+ return self::getSessionKey('searchFilters', null);
+ }
+
+ /**
+ * @param \SP\AccountSearch $searchFilters
+ */
+ public static function setSearchFilters(\SP\AccountSearch $searchFilters)
+ {
+ self::setSessionKey('searchFilters', $searchFilters);
+ }
+
+ /**
+ * Establece la cuenta primaria para el histórico
+ *
+ * @param $id int El id de la cuenta
+ */
+ public static function setAccountParentId($id)
+ {
+ self::setSessionKey('accParentId', $id);
+ }
+
+ /**
+ * Devuelve la cuenta primaria para el histórico
+ *
+ * @return int
+ */
+ public static function getAccountParentId()
+ {
+ return self::getSessionKey('accParentId', null);
+ }
+
+ /**
+ * Establece si se ha comprobado si hay actualizaciones
+ *
+ * @param bool $bool
+ */
+ public static function setUpdated($bool = true)
+ {
+ self::setSessionKey('updated', $bool);
+ }
+
+ /**
+ * Devuelve si se ha combrobado si hay actualizaciones
+ *
+ * @return bool
+ */
+ public static function getUpdated()
+ {
+ return self::getSessionKey('updated', false);
+ }
+
+ /**
+ * Devuelve el timeout de la sesión
+ *
+ * @return int|null El valor en segundos
+ */
+ public static function getSessionTimeout()
+ {
+ return self::getSessionKey('sessionTimeout', null);
+ }
+
+ /**
+ * Establecer el timeout de la sesión
+ *
+ * @param int $timeout El valor en segundos
+ */
+ public static function setSessionTimeout($timeout)
+ {
+ self::setSessionKey('sessionTimeout', $timeout);
+ }
+
+ /**
+ * Devuelve si es necesario recargar la aplicación
+ *
+ * @return bool
+ */
+ public static function getReload()
+ {
+ return self::getSessionKey('reload', false);
+ }
+
+ /**
+ * Establecer si es necesario recargar la aplicación
+ *
+ * @param bool $bool
+ */
+ public static function setReload($bool)
+ {
+ self::setSessionKey('reload', $bool);
+ }
+
+ /**
+ * Devuelve la clave de seguridad para los formularios
+ *
+ * @return string|null
+ */
+ public static function getSecurityKey()
+ {
+ return self::getSessionKey('sk', null);
+ }
+
+ /**
+ * Establece la clave de seguridad para los formularios
+ *
+ * @param string $sk La clave de seguridad
+ */
+ public static function setSecurityKey($sk)
+ {
+ self::setSessionKey('sk', $sk);
+ }
+
+ /**
+ * Devuelve la clave maestra encriptada
+ *
+ * @return string
+ */
+ public static function getMPass()
+ {
+ return self::getSessionKey('mPass');
+ }
+
+ /**
+ * Establecer la clave maestra encriptada
+ *
+ * @param $mpass string La clave maestra
+ */
+ public static function setMPass($mpass)
+ {
+ self::setSessionKey('mPass', $mpass);
+ }
+
+ /**
+ * Devuelve la clave usada para encriptar la clave maestra
+ *
+ * @return string
+ */
+ public static function getMPassPwd()
+ {
+ return self::getSessionKey('mPassPwd');
+ }
+
+ /**
+ * Establece la clave usada para encriptar la clave maestra
+ *
+ * @param $mPassPwd string La clave usada
+ */
+ public static function setMPassPwd($mPassPwd)
+ {
+ self::setSessionKey('mPassPwd', $mPassPwd);
+ }
+
+ /**
+ * Devuelve el vector de inicialización de la clave maestra
+ *
+ * @return string
+ */
+ public static function getMPassIV()
+ {
+ return self::getSessionKey('mPassIV');
+ }
+
+ /**
+ * Establece el vector de inicialización de la clave maestra
+ *
+ * @param $mPassIV string El vector de inicialización
+ */
+ public static function setMPassIV($mPassIV)
+ {
+ self::setSessionKey('mPassIV', $mPassIV);
+ }
+
+ /**
+ * Devuelve la hora en la que el SID de sesión fue creado
+ *
+ * @return int
+ */
+ public static function getSidStartTime()
+ {
+ return self::getSessionKey('sidStartTime', 0);
+ }
+
+ /**
+ * Establece la hora de creación del SID
+ *
+ * @param $time int La marca de hora
+ */
+ public static function setSidStartTime($time)
+ {
+ self::setSessionKey('sidStartTime', $time);
+ }
+
+ /**
+ * Devuelve la hora de inicio de actividad.
+ *
+ * @return int
+ */
+ public static function getStartActivity()
+ {
+ return self::getSessionKey('startActivity', 0);
+ }
+
+ /**
+ * Establece la hora de inicio de actividad
+ *
+ * @param $time int La marca de hora
+ */
+ public static function setStartActivity($time)
+ {
+ self::setSessionKey('startActivity', $time);
+ }
+
+ /**
+ * Devuelve la hora de la última actividad
+ *
+ * @return int
+ */
+ public static function getLastActivity()
+ {
+ return self::getSessionKey('lastActivity', 0);
+ }
+
+ /**
+ * Establece la hora de la última actividad
+ *
+ * @param $time int La marca de hora
+ */
+ public static function setLastActivity($time)
+ {
+ self::setSessionKey('lastActivity', $time);
+ }
+
+ /**
+ * Devuelve el id de la última cuenta vista
+ *
+ * @return int
+ */
+ public static function getLastAcountId()
+ {
+ return self::getSessionKey('lastAccountId', 0);
+ }
+
+ /**
+ * Establece el id de la última cuenta vista
+ *
+ * @param $id int La marca de hora
+ */
+ public static function setLastAcountId($id)
+ {
+ self::setSessionKey('lastAccountId', $id);
+ }
+
+ /**
+ * Devuelve el tema visual utilizado en sysPass
+ *
+ * @return string
+ */
+ public static function getTheme()
+ {
+ return self::getSessionKey('theme');
+ }
+
+ /**
+ * Establece el tema visual utilizado en sysPass
+ *
+ * @param $theme string El tema visual a utilizar
+ */
+ public static function setTheme($theme)
+ {
+ self::setSessionKey('theme', $theme);
+ }
+
+ /**
+ * Devuelve si el usuario ha pasado la autentificación en 2 pasos
+ *
+ * @return bool
+ */
+ public static function get2FApassed()
+ {
+ return self::getSessionKey('2fapass', false);
+ }
+
+ /**
+ * Establece esi el usuario ha pasado la autentificación en 2 pasos
+ *
+ * @param $passed bool
+ */
+ public static function set2FApassed($passed)
+ {
+ self::setSessionKey('2fapass', $passed);
+ }
+
+ /**
+ * Devolver la clave pública
+ *
+ * @return mixed
+ */
+ public static function getPublicKey()
+ {
+ return self::getSessionKey('pubkey');
+ }
+
+ /**
+ * Establecer la clave pública
+ *
+ * @param $key
+ */
+ public static function setPublicKey($key)
+ {
+ self::setSessionKey('pubkey', $key);
+ }
+}
\ No newline at end of file
diff --git a/inc/SessionUtil.class.php b/inc/SessionUtil.class.php
new file mode 100644
index 00000000..c2b56453
--- /dev/null
+++ b/inc/SessionUtil.class.php
@@ -0,0 +1,60 @@
+.
+ *
+ */
+
+namespace SP;
+
+
+class SessionUtil
+{
+ /**
+ * Establece las variables de sesión del usuario.
+ *
+ * @param User $User
+ * @throws SPException
+ */
+ public static function loadUserSession(User $User)
+ {
+ Session::setUserId($User->getUserId());
+ Session::setUserName($User->getUserName());
+ Session::setUserLogin($User->getUserLogin());
+ Session::setUserProfileId($User->getUserProfileId());
+ Session::setUserGroupId($User->getUserGroupId());
+ Session::setUserGroupName($User->getUserGroupName());
+ Session::setUserEMail($User->getUserEmail());
+ Session::setUserIsAdminApp($User->isUserIsAdminApp());
+ Session::setUserIsAdminAcc($User->isUserIsAdminAcc());
+ Session::setUserIsLdap($User->isUserIsLdap());
+ Session::setUserProfile(Profile::getProfile($User->getUserProfileId()));
+ }
+
+ /**
+ * Establecer la clave pública RSA en la sessión
+ */
+ public static function loadPublicKey()
+ {
+ $CryptPKI = new CryptPKI();
+ Session::setPublicKey($CryptPKI->getPublicKey());
+ }
+}
\ No newline at end of file
diff --git a/inc/SyspassImport.class.php b/inc/SyspassImport.class.php
new file mode 100644
index 00000000..77426bc4
--- /dev/null
+++ b/inc/SyspassImport.class.php
@@ -0,0 +1,197 @@
+.
+ *
+ */
+
+namespace SP;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+/**
+ * Esta clase es la encargada de importar cuentas desde sysPass
+ */
+class SyspassImport extends XmlImportBase
+{
+ /**
+ * Mapeo de categorías.
+ *
+ * @var array
+ */
+ private $_categories = array();
+ /**
+ * Mapeo de clientes.
+ *
+ * @var array
+ */
+ private $_customers = array();
+
+ /**
+ * Iniciar la importación desde sysPass.
+ *
+ * @throws SPException
+ */
+ public function doImport()
+ {
+ try {
+ if ($this->detectEncrypted() && !is_null($this->getImportPass())) {
+ $this->processEncrypted();
+ }
+ $this->processCategories();
+ $this->processCustomers();
+ $this->processAccounts();
+ } catch (SPException $e) {
+ throw $e;
+ } catch (\DOMException $e) {
+ throw new SPException(SPException::SP_CRITICAL, $e->getMessage());
+ }
+ }
+
+ /**
+ * Verificar si existen datos encriptados
+ *
+ * @return bool
+ */
+ protected function detectEncrypted()
+ {
+ return ($this->_xmlDOM->getElementsByTagName('Encrypted')->length > 0);
+ }
+
+ /**
+ * Procesar los datos encriptados y añadirlos al árbol DOM desencriptados
+ */
+ protected function processEncrypted()
+ {
+ foreach ($this->_xmlDOM->getElementsByTagName('Data') as $node) {
+ $data = base64_decode($node->nodeValue);
+ $iv = base64_decode($node->getAttribute('iv'));
+
+ $xmlDecrypted = Crypt::getDecrypt($data, $iv, $this->getImportPass());
+
+ $newXmlData = new \DOMDocument();
+// $newXmlData->preserveWhiteSpace = true;
+ $newXmlData->loadXML($xmlDecrypted);
+ $newNode = $this->_xmlDOM->importNode($newXmlData->documentElement, TRUE);
+
+ $this->_xmlDOM->documentElement->appendChild($newNode);
+ }
+
+ // Eliminar los datos encriptados tras desencriptar los mismos
+ if ($this->_xmlDOM->getElementsByTagName('Data')->length > 0) {
+ $nodeData = $this->_xmlDOM->getElementsByTagName('Encrypted')->item(0);
+ $nodeData->parentNode->removeChild($nodeData);
+ }
+ }
+
+ /**
+ * Obtener las categorías y añadirlas a sysPass.
+ */
+ protected function processCategories()
+ {
+ if ($this->_xmlDOM->getElementsByTagName('Categories')->length === 0) {
+ throw new SPException(SPException::SP_WARNING, _('Formato de XML inválido'), _('No hay categorías para importar'));
+ }
+
+ foreach ($this->_xmlDOM->getElementsByTagName('Category') as $category) {
+ foreach ($category->childNodes as $node) {
+ switch ($node->nodeName) {
+ case 'name':
+ $this->setCategoryName($node->nodeValue);
+ break;
+ case 'description':
+ $this->setCategoryDescription($node->nodeValue);
+ break;
+ }
+ }
+
+ $this->_categories[$category->getAttribute('id')] = $this->addCategory();
+ }
+ }
+
+ /**
+ * Obtener los clientes y añadirlos a sysPass.
+ */
+ protected function processCustomers()
+ {
+ if ($this->_xmlDOM->getElementsByTagName('Customers')->length === 0) {
+ throw new SPException(SPException::SP_WARNING, _('Formato de XML inválido'), _('No hay clientes para importar'));
+ }
+
+ foreach ($this->_xmlDOM->getElementsByTagName('Customer') as $customer) {
+ foreach ($customer->childNodes as $node) {
+ switch ($node->nodeName) {
+ case 'name':
+ $this->setCustomerName($node->nodeValue);
+ break;
+ case 'description':
+ $this->setCustomerDescription($node->nodeValue);
+ break;
+ }
+ }
+
+ $this->_customers[$customer->getAttribute('id')] = $this->addCustomer();
+ }
+ }
+
+ /**
+ * Obtener los datos de las entradas de sysPass y crearlas.
+ */
+ protected function processAccounts()
+ {
+ if ($this->_xmlDOM->getElementsByTagName('Accounts')->length === 0) {
+ throw new SPException(SPException::SP_WARNING, _('Formato de XML inválido'), _('No hay cuentas para importar'));
+ }
+
+ foreach ($this->_xmlDOM->getElementsByTagName('Account') as $account) {
+ foreach ($account->childNodes as $node) {
+ switch ($node->nodeName) {
+ case 'name';
+ $this->setAccountName($node->nodeValue);
+ break;
+ case 'login';
+ $this->setAccountLogin($node->nodeValue);
+ break;
+ case 'categoryId';
+ $this->setCategoryId($this->_categories[(int)$node->nodeValue]);
+ break;
+ case 'customerId';
+ $this->setCustomerId($this->_customers[(int)$node->nodeValue]);
+ break;
+ case 'url';
+ $this->setAccountUrl($node->nodeValue);
+ break;
+ case 'pass';
+ $this->setAccountPass(base64_decode($node->nodeValue));
+ break;
+ case 'passiv';
+ $this->setAccountPassIV(base64_decode($node->nodeValue));
+ break;
+ case 'notes';
+ $this->setAccountNotes($node->nodeValue);
+ break;
+ }
+ }
+
+ $this->addAccount();
+ }
+ }
+}
\ No newline at end of file
diff --git a/inc/Template.class.php b/inc/Template.class.php
new file mode 100644
index 00000000..7e62e62b
--- /dev/null
+++ b/inc/Template.class.php
@@ -0,0 +1,252 @@
+.
+ *
+ */
+namespace SP;
+
+use InvalidArgumentException;
+
+/**
+ * Clase Template para la manipulación de plantillas
+ *
+ * Motor de plantillas muy básico...
+ *
+ * Idea original de http://www.sitepoint.com/author/agervasio/
+ * publicada en http://www.sitepoint.com/flexible-view-manipulation-1/
+ *
+ */
+class Template
+{
+ /**
+ * @var array Variable con los archivos de plantilla a cargar
+ */
+ private $_file = array();
+ /**
+ * @var array Variable con las variables a incluir en la plantilla
+ */
+ private $_vars = array();
+
+ /**
+ * @param null $file Archivo de plantilla a añadir
+ * @param array $vars Variables a inicializar
+ */
+ public function __construct($file = null, array $vars = array())
+ {
+ $this->addTemplate($file);
+
+ if (!empty($vars)) {
+ $this->setVars($vars);
+ }
+ }
+
+ /**
+ * Añadir una nueva plantilla al array de plantillas de la clase
+ *
+ * @param string $file Con el nombre del archivo de plantilla
+ * @return bool
+ */
+ public function addTemplate($file)
+ {
+ if (!is_null($file) && $this->checkTemplate($file)) {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Comprobar si un archivo de plantilla existe y se puede leer
+ *
+ * @param string $file Con el nombre del archivo
+ * @return bool
+ * @throws InvalidArgumentException
+ */
+ private function checkTemplate($file)
+ {
+ $template = VIEW_PATH . DIRECTORY_SEPARATOR . Init::$THEME . DIRECTORY_SEPARATOR . $file . '.inc';
+
+ if (!is_readable($template)) {
+ throw new InvalidArgumentException('No es posible obtener la plantilla "' . $file . '"');
+ }
+
+ $this->setTemplate($template);
+ return true;
+ }
+
+ /**
+ * Añadir un nuevo archivo de plantilla al array de plantillas de la clase.
+ *
+ * @param string $file Con el nombre del archivo
+ */
+ private function setTemplate($file)
+ {
+ $this->_file[] = $file;
+ }
+
+ /**
+ * Establecer los atributos de la clase a partir de un array.
+ *
+ * @param array $vars Con los atributos de la clase
+ */
+ private function setVars(&$vars)
+ {
+ foreach ($vars as $name => $value) {
+ $this->$name = $value;
+ }
+ }
+
+ /**
+ * Overloadig para controlar la devolución de atributos dinámicos.
+ *
+ * @param string $name Nombre del atributo
+ * @return null
+ * @throws InvalidArgumentException
+ */
+ public function __get($name)
+ {
+ if (!array_key_exists($name, $this->_vars)) {
+ throw new InvalidArgumentException('No es posible obtener la variable "' . $name . '"');
+ }
+
+ return $this->_vars[$name];
+ }
+
+ /**
+ * Overloading para añadir nuevas variables en al array de variables dela plantilla
+ * pasadas como atributos dinámicos de la clase
+ *
+ * @param string $name Nombre del atributo
+ * @param string $value Valor del atributo
+ * @return null
+ */
+ public function __set($name, $value)
+ {
+ $this->_vars[$name] = $value;
+ return null;
+ }
+
+ /**
+ * Overloading para comprobar si el atributo solicitado está declarado como variable
+ * en el array de variables de la plantilla.
+ *
+ * @param string $name Nombre del atributo
+ * @return bool
+ */
+ public function __isset($name)
+ {
+ return array_key_exists($name, $this->_vars);
+ }
+
+ /**
+ * Overloading para eliminar una variable del array de variables de la plantilla pasado como
+ * atributo dinámico de la clase
+ *
+ * @param string $name Nombre del atributo
+ * @return $this
+ * @throws InvalidArgumentException
+ */
+ public function __unset($name)
+ {
+ if (!isset($this->_vars[$name])) {
+ throw new InvalidArgumentException('No es posible destruir la variable "' . $name . '"');
+ }
+
+ unset($this->_vars[$name]);
+ return $this;
+ }
+
+ /**
+ * Mostrar la plantilla solicitada.
+ * La salida se almacena en buffer y se devuelve el contenido
+ *
+ * @return string Con el contenido del buffer de salida
+ */
+ public function render()
+ {
+ extract($this->_vars);
+
+ ob_start();
+
+ // Añadimos las plantillas
+ foreach ($this->_file as $template) {
+ include_once $template;
+ }
+
+ return ob_get_clean();
+ }
+
+ /**
+ * Crear la variable y asignarle un valor en el array de variables
+ *
+ * @param $name string nombre de la variable
+ * @param $value mixed valor de la variable
+ * @param null $scope string ámbito de la variable
+ */
+ public function assign($name, $value = '', $scope = null)
+ {
+ if (!is_null($scope)) {
+ $name = $scope . '_' . $name;
+ }
+
+// error_log('SET: ' . $name . ' -> ' . $value);
+
+ $this->_vars[$name] = $value;
+ }
+
+ /**
+ * Anexar el valor de la variable al array de la misma en el array de variables
+ *
+ * @param $name string nombre de la variable
+ * @param $value mixed valor de la variable
+ * @param $index string índice del array
+ * @param null $scope string ámbito de la variable
+ */
+ public function append($name, $value, $scope = null, $index = null)
+ {
+ if (!is_null($scope)) {
+ $name = $scope . '_' . $name;
+ }
+
+ if (!is_null($index)) {
+ $this->_vars[$name][$index] = $value;
+ } else {
+ $this->_vars[$name][] = $value;
+ }
+ }
+
+ /**
+ * Reset de las plantillas añadidas
+ */
+ public function resetTemplates()
+ {
+ $this->_file = array();
+ }
+
+ /**
+ * Reset de las plantillas añadidas
+ */
+ public function resetVariables()
+ {
+ $this->_vars = array();
+ }
+}
\ No newline at end of file
diff --git a/inc/upgrade.class.php b/inc/Upgrade.class.php
similarity index 57%
rename from inc/upgrade.class.php
rename to inc/Upgrade.class.php
index 602f2a68..b8fe2903 100644
--- a/inc/upgrade.class.php
+++ b/inc/Upgrade.class.php
@@ -24,15 +24,17 @@
*
*/
+namespace SP;
+
defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
/**
* Esta clase es la encargada de realizar las operaciones actualización de la aplicación.
*/
-class SP_Upgrade
+class Upgrade
{
- private static $dbUpgrade = array(110, 1121, 1122, 1123, 11213, 11219);
- private static $cfgUpgrade = array(1124);
+ private static $_dbUpgrade = array(110, 1121, 1122, 1123, 11213, 11219, 11220, 12001);
+ private static $_cfgUpgrade = array(1124);
/**
* Inicia el proceso de actualización de la BBDD.
@@ -42,13 +44,19 @@ class SP_Upgrade
*/
public static function doUpgrade($version)
{
- foreach (self::$dbUpgrade as $upgradeVersion) {
+ foreach (self::$_dbUpgrade as $upgradeVersion) {
if ($version < $upgradeVersion) {
if (self::upgradeTo($upgradeVersion) === false) {
- SP_Init::initError(
+ Init::initError(
_('Error al aplicar la actualización de la Base de Datos'),
_('Compruebe el registro de eventos para más detalles') . '. ' . _('Acceder') . '');
}
+
+ if(self::auxUpgrades($upgradeVersion) === false){
+ Init::initError(
+ _('Error al aplicar la actualización auxiliar'),
+ _('Compruebe el registro de eventos para más detalles') . '. ' . _('Acceder') . '');
+ }
}
}
@@ -63,13 +71,13 @@ class SP_Upgrade
*/
private static function upgradeTo($version)
{
- $result['action'] = _('Actualizar BBDD');
+ $log = new Log(_('Actualizar BBDD'));
switch ($version) {
case 110:
$queries[] = 'ALTER TABLE `accFiles` CHANGE COLUMN `accfile_name` `accfile_name` VARCHAR(100) NOT NULL';
$queries[] = 'ALTER TABLE `accounts` ADD COLUMN `account_otherGroupEdit` BIT(1) NULL DEFAULT 0 AFTER `account_dateEdit`, ADD COLUMN `account_otherUserEdit` BIT(1) NULL DEFAULT 0 AFTER `account_otherGroupEdit`;';
- $queries[] = 'CREATE TABLE `accUsers` (`accuser_id` INT NOT NULL AUTO_INCREMENT,`accuser_accountId` INT(10) UNSIGNED NOT NULL,`accuser_userId` INT(10) UNSIGNED NOT NULL, PRIMARY KEY (`accuser_id`), INDEX `idx_account` (`accuser_accountId` ASC));';
+ $queries[] = 'CREATE TABLE `accUsers` (`accuser_id` INT NOT NULL AUTO_INCREMENT,`accuser_accountId` INT(10) UNSIGNED NOT NULL,`accuser_userId` INT(10) UNSIGNED NOT NULL, PRIMARY KEY (`accuser_id`), INDEX `idx_account` (`accuser_accountId` ASC)) DEFAULT CHARSET=utf8;';
$queries[] = 'ALTER TABLE `accHistory` ADD COLUMN `accHistory_otherUserEdit` BIT NULL AFTER `acchistory_mPassHash`, ADD COLUMN `accHistory_otherGroupEdit` VARCHAR(45) NULL AFTER `accHistory_otherUserEdit`;';
$queries[] = 'ALTER TABLE `accFiles` CHANGE COLUMN `accfile_type` `accfile_type` VARCHAR(100) NOT NULL ;';
break;
@@ -81,7 +89,7 @@ class SP_Upgrade
$queries[] = 'ALTER TABLE `usrData` CHANGE COLUMN `user_login` `user_login` VARCHAR(50) NOT NULL ,CHANGE COLUMN `user_email` `user_email` VARCHAR(80) NULL DEFAULT NULL ;';
break;
case 1123:
- $queries[] = 'CREATE TABLE `usrPassRecover` (`userpassr_id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `userpassr_userId` SMALLINT UNSIGNED NOT NULL,`userpassr_hash` VARBINARY(40) NOT NULL,`userpassr_date` INT UNSIGNED NOT NULL,`userpassr_used` BIT(1) NOT NULL DEFAULT b\'0\', PRIMARY KEY (`userpassr_id`),INDEX `IDX_userId` (`userpassr_userId` ASC, `userpassr_date` ASC)) DEFAULT CHARACTER SET = utf8 COLLATE = utf8_general_ci;';
+ $queries[] = 'CREATE TABLE `usrPassRecover` (`userpassr_id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `userpassr_userId` SMALLINT UNSIGNED NOT NULL,`userpassr_hash` VARBINARY(40) NOT NULL,`userpassr_date` INT UNSIGNED NOT NULL,`userpassr_used` BIT(1) NOT NULL DEFAULT b\'0\', PRIMARY KEY (`userpassr_id`),INDEX `IDX_userId` (`userpassr_userId` ASC, `userpassr_date` ASC)) DEFAULT CHARSET=utf8;';
$queries[] = 'ALTER TABLE `log` ADD COLUMN `log_ipAddress` VARCHAR(45) NOT NULL AFTER `log_userId`;';
$queries[] = 'ALTER TABLE `usrData` ADD COLUMN `user_isChangePass` BIT(1) NULL DEFAULT b\'0\' AFTER `user_isMigrate`;';
break;
@@ -93,22 +101,44 @@ class SP_Upgrade
$queries[] = 'ALTER TABLE `accounts` CHANGE COLUMN `account_pass` `account_pass` VARBINARY(255) NOT NULL ;';
$queries[] = 'ALTER TABLE `accHistory` CHANGE COLUMN `acchistory_pass` `acchistory_pass` VARBINARY(255) NOT NULL ;';
break;
+ case 11220:
+ $queries[] = 'ALTER TABLE `usrData` CHANGE COLUMN `user_pass` `user_pass` VARBINARY(255) NOT NULL,CHANGE COLUMN `user_mPass` `acchistory_pass` VARBINARY(255) DEFAULT NULL ;';
+ break;
+ case 12001:
+ $queries[] = 'ALTER TABLE `accounts` CHANGE COLUMN `account_userEditId` `account_userEditId` TINYINT(3) UNSIGNED NULL DEFAULT NULL, CHANGE COLUMN `account_dateEdit` `account_dateEdit` DATETIME NULL DEFAULT NULL;';
+ $queries[] = 'ALTER TABLE `accHistory` CHANGE COLUMN `acchistory_userEditId` `acchistory_userEditId` TINYINT(3) UNSIGNED NULL DEFAULT NULL, CHANGE COLUMN `acchistory_dateEdit` `acchistory_dateEdit` DATETIME NULL DEFAULT NULL;';
+ $queries[] = 'ALTER TABLE `accHistory` CHANGE COLUMN `accHistory_otherGroupEdit` `accHistory_otherGroupEdit` BIT NULL DEFAULT b\'0\';';
+ $queries[] = 'ALTER TABLE `usrProfiles` ADD COLUMN `userProfile_profile` BLOB NOT NULL;';
+ $queries[] = 'ALTER TABLE `usrData` ADD `user_preferences` BLOB NULL;';
+ $queries[] = 'CREATE TABLE usrToGroups (usertogroup_id INT UNSIGNED PRIMARY KEY NOT NULL AUTO_INCREMENT,usertogroup_userId INT UNSIGNED NOT NULL,usertogroup_groupId INT UNSIGNED NOT NULL) DEFAULT CHARSET=utf8;';
+ $queries[] = 'CREATE INDEX IDX_accountId ON usrToGroups (usertogroup_userId)';
+ $queries[] = 'ALTER TABLE `accFiles` ADD `accFile_thumb` BLOB NULL;';
+ $queries[] = 'CREATE TABLE `authTokens` (`authtoken_id` int(11) NOT NULL AUTO_INCREMENT,`authtoken_userId` int(11) NOT NULL,`authtoken_token` varbinary(100) NOT NULL,`authtoken_actionId` smallint(5) unsigned NOT NULL,`authtoken_createdBy` smallint(5) unsigned NOT NULL,`authtoken_startDate` int(10) unsigned NOT NULL,PRIMARY KEY (`authtoken_id`),UNIQUE KEY `unique_authtoken_id` (`authtoken_id`),KEY `IDX_checkToken` (`authtoken_userId`,`authtoken_actionId`,`authtoken_token`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;';
+ $queries[] = 'CREATE TABLE `customFieldsDef` (`customfielddef_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `customfielddef_module` smallint(5) unsigned NOT NULL, `customfielddef_field` blob NOT NULL, PRIMARY KEY (`customfielddef_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;';
+ $queries[] = 'CREATE TABLE `customFieldsData` (`customfielddata_id` int(10) unsigned NOT NULL AUTO_INCREMENT,`customfielddata_moduleId` smallint(5) unsigned NOT NULL,`customfielddata_itemId` int(10) unsigned NOT NULL,`customfielddata_defId` int(10) unsigned NOT NULL,`customfielddata_data` longblob,`customfielddata_iv` varbinary(128) DEFAULT NULL, PRIMARY KEY (`customfielddata_id`), KEY `IDX_DEFID` (`customfielddata_defId`), KEY `IDX_DELETE` (`customfielddata_itemId`,`customfielddata_moduleId`), KEY `IDX_UPDATE` (`customfielddata_moduleId`,`customfielddata_itemId`,`customfielddata_defId`), KEY `IDX_ITEM` (`customfielddata_itemId`), KEY `IDX_MODULE` (`customfielddata_moduleId`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;';
+ break;
default :
- $result['text'][] = _('No es necesario actualizar la Base de Datos.');
+ $log->addDescription(_('No es necesario actualizar la Base de Datos.'));
return true;
}
foreach ($queries as $query) {
- if (DB::doQuery($query, __FUNCTION__) === false && DB::$numError != 1060 && DB::$numError != 1050) {
- $result['text'][] = _('Error al aplicar la actualización de la Base de Datos.') . ' (v' . $version . ')';
- $result['text'][] = 'ERROR: ' . DB::$txtError . ' (' . DB::$numError . ')';
- SP_Log::wrLogInfo($result);
+ try {
+ DB::getQuery($query, __FUNCTION__);
+ } catch (SPException $e) {
+ $log->addDescription(_('Error al aplicar la actualización de la Base de Datos.') . ' (v' . $version . ')');
+ $log->addDescription('ERROR: ' . $e->getMessage() . ' (' . $e->getCode() . ')');
+ $log->writeLog();
+
+ Email::sendEmail($log);
return false;
}
}
- $result['text'][] = _('Actualización de la Base de Datos realizada correctamente.') . ' (v' . $version . ')';
- SP_Log::wrLogInfo($result);
+ $log->addDescription(_('Actualización de la Base de Datos realizada correctamente.') . ' (v' . $version . ')');
+ $log->writeLog();
+
+ Email::sendEmail($log);
return true;
}
@@ -121,7 +151,7 @@ class SP_Upgrade
*/
public static function needDBUpgrade($version)
{
- $upgrades = array_filter(self::$dbUpgrade, function ($uVersions) use ($version) {
+ $upgrades = array_filter(self::$_dbUpgrade, function ($uVersions) use ($version) {
return ($uVersions >= $version);
});
@@ -136,13 +166,13 @@ class SP_Upgrade
*/
public static function needConfigUpgrade($version)
{
- return (in_array($version, self::$cfgUpgrade));
+ return (in_array($version, self::$_cfgUpgrade));
}
/**
* Migrar valores de configuración.
*
- * @param int $version con el número de versión
+ * @param int $version El número de versión
* @return bool
*/
public static function upgradeConfig($version)
@@ -173,19 +203,33 @@ class SP_Upgrade
'wiki_searchurl' => 'wikisearchurl'
);
- $currData = SP_Config::getKeys(true);
+ $currData = Config::getKeys(true);
foreach ($mapParams as $newParam => $oldParam) {
if (array_key_exists($oldParam, $currData)) {
- SP_Config::setValue($newParam, $currData[$oldParam]);
- SP_Config::deleteKey($oldParam);
+ Config::setValue($newParam, $currData[$oldParam]);
+ Config::deleteKey($oldParam);
}
}
- $result['action'] = _('Actualizar Configuración');
- $result['text'][] = _('Actualización de la Configuración realizada correctamente.') . ' (v' . $version . ')';
- SP_Log::wrLogInfo($result);
+ Log::writeNewLog(_('Actualizar Configuración'), _('Actualización de la Configuración realizada correctamente.') . ' (v' . $version . ')');
return true;
}
+
+ /**
+ * Aplicar actualizaciones auxiliares.
+ *
+ * @param $version int El número de versión
+ * @return bool
+ */
+ private static function auxUpgrades($version){
+ switch ($version){
+ case 12001:
+ return (Profile::migrateProfiles() && UserUtil::migrateUsersGroup());
+ break;
+ default:
+ break;
+ }
+ }
}
\ No newline at end of file
diff --git a/inc/User.class.php b/inc/User.class.php
new file mode 100644
index 00000000..9696a613
--- /dev/null
+++ b/inc/User.class.php
@@ -0,0 +1,128 @@
+.
+ *
+ */
+
+namespace SP;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+/**
+ * Class User
+ *
+ * @package SP
+ */
+class User extends UserBase
+{
+ /**
+ * Actualizar la clave maestra del usuario en la BBDD.
+ *
+ * @param string $masterPwd con la clave maestra
+ * @return bool
+ */
+ public function updateUserMPass($masterPwd)
+ {
+ $configMPass = Config::getConfigDbValue('masterPwd');
+
+ if (!$configMPass) {
+ return false;
+ }
+
+ if (Crypt::checkHashPass($masterPwd, $configMPass)) {
+ $strUserMPwd = Crypt::mkCustomMPassEncrypt(self::getCypherPass($this->_userPass), $masterPwd);
+
+ if (!$strUserMPwd) {
+ return false;
+ }
+ } else {
+ return false;
+ }
+
+ $query = 'UPDATE usrData SET '
+ . 'user_mPass = :mPass,'
+ . 'user_mIV = :mIV,'
+ . 'user_lastUpdateMPass = UNIX_TIMESTAMP() '
+ . 'WHERE user_id = :id LIMIT 1';
+
+ $data['mPass'] = $strUserMPwd[0];
+ $data['mIV'] = $strUserMPwd[1];
+ $data['id'] = $this->_userId;
+
+ return DB::getQuery($query, __FUNCTION__, $data);
+ }
+
+ /**
+ * Obtener una clave de cifrado basada en la clave del usuario y un salt.
+ *
+ * @return string con la clave de cifrado
+ */
+ private function getCypherPass()
+ {
+ $configSalt = Config::getConfigDbValue('passwordsalt');
+ $cypherPass = substr(sha1($configSalt . $this->_userPass), 0, 32);
+
+ return $cypherPass;
+ }
+
+ /**
+ * Desencriptar la clave maestra del usuario para la sesión.
+ *
+ * @param bool $showPass opcional, para devolver la clave desencriptada
+ * @return false|string Devuelve bool se hay error o string si se devuelve la clave
+ */
+ public function getUserMPass($showPass = false)
+ {
+ $query = 'SELECT user_mPass, user_mIV FROM usrData WHERE user_id = :id LIMIT 1';
+
+ $data['id'] = $this->_userId;
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+ return false;
+ }
+
+ if ($queryRes->user_mPass && $queryRes->user_mIV) {
+ $clearMasterPass = Crypt::getDecrypt($queryRes->user_mPass, $queryRes->user_mIV, $this->getCypherPass());
+
+ if (!$clearMasterPass) {
+ return false;
+ }
+
+ if ($showPass == true) {
+ return $clearMasterPass;
+ } else {
+ $mPassPwd = Util::generate_random_bytes(32);
+ Session::setMPassPwd($mPassPwd);
+
+ $sessionMasterPass = Crypt::mkCustomMPassEncrypt($mPassPwd, $clearMasterPass);
+
+ Session::setMPass($sessionMasterPass[0]);
+ Session::setMPassIV($sessionMasterPass[1]);
+ return true;
+ }
+ }
+
+ return false;
+ }
+}
\ No newline at end of file
diff --git a/inc/UserBase.class.php b/inc/UserBase.class.php
new file mode 100644
index 00000000..f00d34f7
--- /dev/null
+++ b/inc/UserBase.class.php
@@ -0,0 +1,596 @@
+.
+ *
+ */
+
+namespace SP;
+
+/**
+ * Class UserBase
+ *
+ * @package SP
+ */
+abstract class UserBase
+{
+ /**
+ * @var int
+ */
+ var $queryLastId = 0;
+ /**
+ * @var int
+ */
+ protected $_userId = 0;
+ /**
+ * @var string
+ */
+ protected $_userName = '';
+ /**
+ * @var int
+ */
+ protected $_userGroupId = 0;
+ /**
+ * @var string
+ */
+ protected $_userGroupName = '';
+ /**
+ * @var string
+ */
+ protected $_userLogin = '';
+ /**
+ * @var string
+ */
+ protected $_userPass = '';
+ /**
+ * @var string
+ */
+ protected $_userEmail = '';
+ /**
+ * @var string
+ */
+ protected $_userNotes = '';
+ /**
+ * @var int
+ */
+ protected $_userProfileId = 0;
+ /**
+ * @var bool
+ */
+ protected $_userIsAdminApp = false;
+ /**
+ * @var bool
+ */
+ protected $_userIsAdminAcc = false;
+ /**
+ * @var bool
+ */
+ protected $_userIsDisabled = false;
+ /**
+ * @var bool
+ */
+ protected $_userIsLdap = false;
+ /**
+ * @var bool
+ */
+ protected $_userChangePass = false;
+
+ /**
+ * @return int
+ */
+ public function getUserId()
+ {
+ return $this->_userId;
+ }
+
+ /**
+ * @param int $_userId
+ */
+ public function setUserId($_userId)
+ {
+ $this->_userId = $_userId;
+ }
+
+ /**
+ * @return string
+ */
+ public function getUserName()
+ {
+ return $this->_userName;
+ }
+
+ /**
+ * @param string $_userName
+ */
+ public function setUserName($_userName)
+ {
+ $this->_userName = $_userName;
+ }
+
+ /**
+ * @return int
+ */
+ public function getUserGroupId()
+ {
+ return $this->_userGroupId;
+ }
+
+ /**
+ * @param int $_userGroupId
+ */
+ public function setUserGroupId($_userGroupId)
+ {
+ $this->_userGroupId = $_userGroupId;
+ }
+
+ /**
+ * @return string
+ */
+ public function getUserGroupName()
+ {
+ return $this->_userGroupName;
+ }
+
+ /**
+ * @param string $_userGroupName
+ */
+ public function setUserGroupName($_userGroupName)
+ {
+ $this->_userGroupName = $_userGroupName;
+ }
+
+ /**
+ * @return string
+ */
+ public function getUserLogin()
+ {
+ return $this->_userLogin;
+ }
+
+ /**
+ * @param string $_userLogin
+ */
+ public function setUserLogin($_userLogin)
+ {
+ $this->_userLogin = $_userLogin;
+ }
+
+ /**
+ * @return string
+ */
+ public function getUserPass()
+ {
+ return $this->_userPass;
+ }
+
+ /**
+ * @param string $_userPass
+ */
+ public function setUserPass($_userPass)
+ {
+ $this->_userPass = $_userPass;
+ }
+
+ /**
+ * @return string
+ */
+ public function getUserEmail()
+ {
+ return $this->_userEmail;
+ }
+
+ /**
+ * @param string $_userEmail
+ */
+ public function setUserEmail($_userEmail)
+ {
+ $this->_userEmail = $_userEmail;
+ }
+
+ /**
+ * @return string
+ */
+ public function getUserNotes()
+ {
+ return $this->_userNotes;
+ }
+
+ /**
+ * @param string $_userNotes
+ */
+ public function setUserNotes($_userNotes)
+ {
+ $this->_userNotes = $_userNotes;
+ }
+
+ /**
+ * @return int
+ */
+ public function getUserProfileId()
+ {
+ return $this->_userProfileId;
+ }
+
+ /**
+ * @param int $_userProfileId
+ */
+ public function setUserProfileId($_userProfileId)
+ {
+ $this->_userProfileId = $_userProfileId;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isUserIsAdminApp()
+ {
+ return $this->_userIsAdminApp;
+ }
+
+ /**
+ * @param boolean $_userIsAdminApp
+ */
+ public function setUserIsAdminApp($_userIsAdminApp)
+ {
+ $this->_userIsAdminApp = $_userIsAdminApp;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isUserIsAdminAcc()
+ {
+ return $this->_userIsAdminAcc;
+ }
+
+ /**
+ * @param boolean $_userIsAdminAcc
+ */
+ public function setUserIsAdminAcc($_userIsAdminAcc)
+ {
+ $this->_userIsAdminAcc = $_userIsAdminAcc;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isUserIsDisabled()
+ {
+ return $this->_userIsDisabled;
+ }
+
+ /**
+ * @param boolean $_userIsDisabled
+ */
+ public function setUserIsDisabled($_userIsDisabled)
+ {
+ $this->_userIsDisabled = $_userIsDisabled;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isUserIsLdap()
+ {
+ return $this->_userIsLdap;
+ }
+
+ /**
+ * @param boolean $_userIsLdap
+ */
+ public function setUserIsLdap($_userIsLdap)
+ {
+ $this->_userIsLdap = $_userIsLdap;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isUserChangePass()
+ {
+ return $this->_userChangePass;
+ }
+
+ /**
+ * @param boolean $_userChangePass
+ */
+ public function setUserChangePass($_userChangePass)
+ {
+ $this->_userChangePass = $_userChangePass;
+ }
+
+ /**
+ * @return int
+ */
+ public function getQueryLastId()
+ {
+ return $this->queryLastId;
+ }
+
+ /**
+ * @param int $queryLastId
+ */
+ public function setQueryLastId($queryLastId)
+ {
+ $this->queryLastId = $queryLastId;
+ }
+
+ /**
+ * Crear un usuario.
+ *
+ * @return bool
+ */
+ public function addUser()
+ {
+ $passdata = UserUtil::makeUserPass($this->_userPass);
+
+ $query = 'INSERT INTO usrData SET '
+ . 'user_name = :name,'
+ . 'user_login = :login,'
+ . 'user_email = :email,'
+ . 'user_notes = :notes,'
+ . 'user_groupId = :groupId,'
+ . 'user_profileId = :profileId,'
+ . 'user_mPass = \'\','
+ . 'user_mIV = \'\','
+ . 'user_isAdminApp = :isAdminApp,'
+ . 'user_isAdminAcc = :isAdminAcc,'
+ . 'user_isDisabled = :isDisabled,'
+ . 'user_isChangePass = :isChangePass,'
+ . 'user_pass = :pass,'
+ . 'user_hashSalt = :salt,'
+ . 'user_isLdap = 0';
+
+ $data['name'] = $this->_userName;
+ $data['login'] = $this->_userLogin;
+ $data['email'] = $this->_userEmail;
+ $data['notes'] = $this->_userNotes;
+ $data['groupId'] = $this->_userGroupId;
+ $data['profileId'] = $this->_userProfileId;
+ $data['isAdminApp'] = $this->_userIsAdminApp;
+ $data['isAdminAcc'] = $this->_userIsAdminAcc;
+ $data['isDisabled'] = $this->_userIsDisabled;
+ $data['isChangePass'] = $this->_userChangePass;
+ $data['pass'] = $passdata['pass'];
+ $data['salt'] = $passdata['salt'];
+
+ if (DB::getQuery($query, __FUNCTION__, $data) === false) {
+ return false;
+ }
+
+ $this->_userId = DB::getLastId();
+
+ $Log = new Log(_('Nuevo Usuario'));
+ $Log->addDescription(sprintf('%s : %s (%s)', Html::strongText(_('Usuario')), $this->_userName, $this->_userLogin));
+
+ if ($this->_userChangePass) {
+ if (!Auth::mailPassRecover(DB::escape($this->_userLogin), DB::escape($this->_userEmail))) {
+ $Log->addDescription(Html::strongText(_('No se pudo realizar la petición de cambio de clave.')));
+ }
+ }
+
+ $Log->writeLog();
+
+ Email::sendEmail($Log);
+
+ return true;
+ }
+
+ /**
+ * Obtener los datos de un usuario desde la BBDD.
+ * Esta función obtiene los datos de un usuario y los guarda en las variables de la clase.
+ *
+ * @return bool
+ */
+ public function getUserInfo()
+ {
+ $query = 'SELECT user_id,'
+ . 'user_name,'
+ . 'user_groupId,'
+ . 'user_login,'
+ . 'user_email,'
+ . 'user_notes,'
+ . 'user_count,'
+ . 'user_profileId,'
+ . 'usergroup_name,'
+ . 'BIN(user_isAdminApp) AS user_isAdminApp,'
+ . 'BIN(user_isAdminAcc) AS user_isAdminAcc,'
+ . 'BIN(user_isLdap) AS user_isLdap,'
+ . 'BIN(user_isDisabled) AS user_isDisabled,'
+ . 'BIN(user_isChangePass) AS user_isChangePass '
+ . 'FROM usrData '
+ . 'LEFT JOIN usrGroups ON user_groupId = usergroup_id '
+ . 'LEFT JOIN usrProfiles ON user_profileId = userprofile_id '
+ . 'WHERE user_login = :login LIMIT 1';
+
+ $data['login'] = $this->_userLogin;
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+ return false;
+ }
+
+ $this->_userId = intval($queryRes->user_id);
+ $this->_userName = $queryRes->user_name;
+ $this->_userGroupId = intval($queryRes->user_groupId);
+ $this->_userGroupName = $queryRes->usergroup_name;
+ $this->_userEmail = $queryRes->user_email;
+ $this->_userProfileId = intval($queryRes->user_profileId);
+ $this->_userIsAdminApp = intval($queryRes->user_isAdminApp);
+ $this->_userIsAdminAcc = intval($queryRes->user_isAdminAcc);
+ $this->_userIsLdap = intval($queryRes->user_isLdap);
+ $this->_userChangePass = intval($queryRes->user_isChangePass);
+
+ return true;
+ }
+
+ /**
+ * Comprobar si un usuario/email existen en la BBDD.
+ *
+ * @return false|int Devuelve bool si error y int si existe el usuario/email
+ */
+ public function checkUserExist()
+ {
+ $userLogin = strtoupper($this->_userLogin);
+ $userEmail = strtoupper($this->_userEmail);
+
+ $query = 'SELECT user_login, user_email '
+ . 'FROM usrData '
+ . 'WHERE (UPPER(user_login) = :login '
+ . 'OR UPPER(user_email) = :email) '
+ . 'AND user_id != :id';
+
+ $data['login'] = $userLogin;
+ $data['email'] = $userEmail;
+ $data['id'] = $this->_userId;
+
+ DB::setReturnArray();
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+ return false;
+ }
+
+ foreach ($queryRes as $userData) {
+ $resULogin = strtoupper($userData->user_login);
+ $resUEmail = strtoupper($userData->user_email);
+
+ if ($resULogin == $userLogin) {
+ return UserUtil::USER_LOGIN_EXIST;
+ } elseif ($resUEmail == $userEmail) {
+ return UserUtil::USER_MAIL_EXIST;
+ }
+ }
+ }
+
+ /**
+ * Modificar un usuario.
+ *
+ * @return bool
+ */
+ public function updateUser()
+ {
+ $query = 'UPDATE usrData SET '
+ . 'user_name = :name,'
+ . 'user_login = :login,'
+ . 'user_email = :email,'
+ . 'user_notes = :notes,'
+ . 'user_groupId = :groupId,'
+ . 'user_profileId = :profileId,'
+ . 'user_isAdminApp = :isAdminApp,'
+ . 'user_isAdminAcc = :isAdminAcc,'
+ . 'user_isDisabled = :isDisabled,'
+ . 'user_isChangePass = :isChangePass,'
+ . 'user_lastUpdate = NOW() '
+ . 'WHERE user_id = :id LIMIT 1';
+
+ $data['name'] = $this->_userName;
+ $data['login'] = $this->_userLogin;
+ $data['email'] = $this->_userEmail;
+ $data['notes'] = $this->_userNotes;
+ $data['groupId'] = $this->_userGroupId;
+ $data['profileId'] = $this->_userProfileId;
+ $data['isAdminApp'] = $this->_userIsAdminApp;
+ $data['isAdminAcc'] = $this->_userIsAdminAcc;
+ $data['isDisabled'] = $this->_userIsDisabled;
+ $data['isChangePass'] = $this->_userChangePass;
+ $data['id'] = $this->_userId;
+
+ if (DB::getQuery($query, __FUNCTION__, $data) === false) {
+ return false;
+ }
+
+ $this->queryLastId = DB::$lastId;
+
+ $Log = new Log(_('Modificar Usuario'));
+ $Log->addDescription(sprintf('%s : %s (%s)', Html::strongText(_('Usuario')), $this->_userName, $this->_userLogin));
+
+ if ($this->_userChangePass) {
+ if (!Auth::mailPassRecover(DB::escape($this->_userLogin), DB::escape($this->_userEmail))) {
+ $Log->addDescription(Html::strongText(_('No se pudo realizar la petición de cambio de clave.')));
+ }
+ }
+
+ $Log->writeLog();
+
+ Email::sendEmail($Log);
+
+ return true;
+ }
+
+ /**
+ * Modificar la clave de un usuario.
+ *
+ * @return bool
+ */
+ public function updateUserPass()
+ {
+ $passdata = UserUtil::makeUserPass($this->_userPass);
+ $userLogin = UserUtil::getUserLoginById($this->_userId);
+
+ $query = 'UPDATE usrData SET '
+ . 'user_pass = :pass,'
+ . 'user_hashSalt = :salt,'
+ . 'user_isChangePass = 0,'
+ . 'user_lastUpdate = NOW() '
+ . 'WHERE user_id = :id LIMIT 1';
+
+ $data['pass'] = $passdata['pass'];
+ $data['salt'] = $passdata['salt'];
+ $data['id'] = $this->_userId;
+
+ if (DB::getQuery($query, __FUNCTION__, $data) === false) {
+ return false;
+ }
+
+ $this->queryLastId = DB::$lastId;
+
+ Log::writeNewLogAndEmail(_('Modificar Clave Usuario'), sprintf('%s : %s', Html::strongText(_('Login')), $userLogin));
+
+ return true;
+ }
+
+ /**
+ * Eliminar un usuario.
+ *
+ * @return bool
+ */
+ public function deleteUser()
+ {
+ $userLogin = UserUtil::getUserLoginById($this->_userId);
+
+ $query = 'DELETE FROM usrData WHERE user_id = :id LIMIT 1';
+
+ $data['id'] = $this->_userId;
+
+ if (DB::getQuery($query, __FUNCTION__, $data) === false) {
+ return false;
+ }
+
+ $this->queryLastId = DB::$lastId;
+
+ Log::writeNewLogAndEmail(_('Eliminar Usuario'), sprintf('%s : %s', Html::strongText(_('Login')), $userLogin));
+
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/inc/UserLdap.class.php b/inc/UserLdap.class.php
new file mode 100644
index 00000000..2ba56288
--- /dev/null
+++ b/inc/UserLdap.class.php
@@ -0,0 +1,149 @@
+.
+ *
+ */
+
+namespace SP;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+/**
+ * Class UserLdap
+ *
+ * @package SP
+ */
+class UserLdap
+{
+ /**
+ * Crear un nuevo usuario en la BBDD con los datos de LDAP.
+ * Esta función crea los usuarios de LDAP en la BBDD para almacenar infomación del mismo
+ * y utilizarlo en caso de fallo de LDAP
+ *
+ * @param User $User
+ * @return bool
+ */
+ public static function newUserLDAP(User $User)
+ {
+ $passdata = UserUtil::makeUserPass($User->getUserPass());
+ $groupId = Config::getValue('ldap_defaultgroup', 0);
+ $profileId = Config::getValue('ldap_defaultprofile', 0);
+
+ $query = 'INSERT INTO usrData SET '
+ . 'user_name = :name,'
+ . 'user_groupId = :groupId,'
+ . 'user_login = :login,'
+ . 'user_pass = :pass,'
+ . 'user_hashSalt = :hashSalt,'
+ . 'user_email = :email,'
+ . 'user_notes = :notes,'
+ . 'user_profileId = :profileId,'
+ . 'user_isLdap = 1,'
+ . 'user_isDisabled = :isDisabled';
+
+ $data['name'] = $User->getUserName();
+ $data['login'] = $User->getUserLogin();
+ $data['pass'] = $passdata['pass'];
+ $data['hashSalt'] = $passdata['hash'];
+ $data['email'] = $User->getUserEmail();
+ $data['notes'] = 'LDAP';
+ $data['groupId'] = $groupId;
+ $data['profileId'] = $profileId;
+ $data['isDisabled'] = ($groupId && $profileId);
+
+ if (DB::getQuery($query, __FUNCTION__, $data) === false) {
+ return false;
+ }
+
+ if (!$groupId || !$profileId) {
+ $Log = new Log(_('Activación Cuenta'));
+ $Log->addDescription(_('Su cuenta está pendiente de activación.'));
+ $Log->addDescription(_('En breve recibirá un email de confirmación.'));
+ $Log->writeLog();
+
+ Email::sendEmail($Log, $User->getUserEmail(), false);
+ }
+
+ Log::writeNewLogAndEmail(_('Nuevo usuario de LDAP'), sprintf("%s (%s)", $User->getUserName(), $User->getUserLogin()));
+
+ return true;
+ }
+
+ /**
+ * Actualiza los datos de los usuarios de LDAP en la BBDD.
+ *
+ * @return bool
+ */
+ public static function updateLDAPUserInDB(User $User)
+ {
+ $passdata = UserUtil::makeUserPass($User->getUserPass());
+
+ $query = 'UPDATE usrData SET '
+ . 'user_pass = :pass,'
+ . 'user_hashSalt = :hashSalt,'
+ . 'user_name = :name,'
+ . 'user_email = :email,'
+ . 'user_lastUpdate = NOW(),'
+ . 'user_isLdap = 1 '
+ . 'WHERE user_id = :id LIMIT 1';
+
+ $data['pass'] = $passdata['pass'];
+ $data['hashSalt'] = $passdata['salt'];
+ $data['name'] = $User->getUserName();
+ $data['email'] = $User->getUserEmail();
+ $data['id'] = UserUtil::getUserIdByLogin($User->getUserLogin());
+
+ return DB::getQuery($query, __FUNCTION__, $data);
+ }
+
+ /**
+ * Comprobar si un usuario autentifica mediante LDAP
+ * .
+ *
+ * @param string $userLogin con el login del usuario
+ * @return bool
+ */
+ public static function checkUserIsLDAP($userLogin)
+ {
+ $query = 'SELECT BIN(user_isLdap) AS user_isLdap FROM usrData WHERE user_login = :login LIMIT 1';
+
+ $data['login'] = $userLogin;
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ return ($queryRes !== false && intval($queryRes->user_isLdap) === 1);
+ }
+
+ /**
+ * Comprobar si los datos del usuario de LDAP están en la BBDD.
+ *
+ * @return bool
+ */
+ public static function checkLDAPUserInDB($userId)
+ {
+ $query = 'SELECT user_login FROM usrData WHERE user_login = :login LIMIT 1';
+
+ $data['login'] = $userId;
+
+ return (DB::getQuery($query, __FUNCTION__, $data) === true && DB::$lastNumRows === 1);
+ }
+}
\ No newline at end of file
diff --git a/inc/UserPreferences.class.php b/inc/UserPreferences.class.php
new file mode 100644
index 00000000..03591913
--- /dev/null
+++ b/inc/UserPreferences.class.php
@@ -0,0 +1,132 @@
+.
+ *
+ */
+
+namespace SP;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+/**
+ * Class UsersPreferences para la gestion de las preferencias de usuarios
+ *
+ * @package SP
+ */
+class UserPreferences
+{
+ /**
+ * @var int
+ */
+ private $_id = 0;
+
+ /**
+ * Usar autentificación en 2 pasos
+ *
+ * @var bool
+ */
+ private $_use2Fa = false;
+
+ /**
+ * Obtener las preferencas de un usuario
+ *
+ * @param $id int El id del usuario
+ * @return bool|UserPreferences
+ * @throws SPException
+ */
+ public static function getPreferences($id)
+ {
+ $query = 'SELECT user_preferences FROM usrData WHERE user_id = :id LIMIT 1';
+
+ $data['id'] = $id;
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+ return new UserPreferences();
+// throw new SPException(SPException::SP_WARNING, _('Datos de preferencias incorrectos'));
+ }
+
+ $preferences = unserialize($queryRes->user_preferences);
+
+ if (!$preferences instanceof UserPreferences) {
+ return new UserPreferences();
+ }
+
+ return $preferences;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isUse2Fa()
+ {
+ return $this->_use2Fa;
+ }
+
+ /**
+ * @param boolean $use2Fa
+ */
+ public function setUse2Fa($use2Fa)
+ {
+ $this->_use2Fa = $use2Fa;
+ }
+
+ /**
+ * Modificar las preferencias de un usuario
+ *
+ * @return bool
+ */
+ public function updatePreferences()
+ {
+ $query = 'UPDATE usrData SET '
+ . 'user_preferences = :preferences '
+ . 'WHERE user_id = :id LIMIT 1';
+
+ $data['id'] = $this->getId();
+ $data['preferences'] = serialize($this);
+
+ if (DB::getQuery($query, __FUNCTION__, $data) === false) {
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * @return int
+ */
+ public function getId()
+ {
+ return $this->_id;
+ }
+
+ /**
+ * @param int $id
+ */
+ public function setId($id)
+ {
+ $this->_id = $id;
+ }
+
+
+}
\ No newline at end of file
diff --git a/inc/UserUtil.class.php b/inc/UserUtil.class.php
new file mode 100644
index 00000000..aa3b6bdd
--- /dev/null
+++ b/inc/UserUtil.class.php
@@ -0,0 +1,711 @@
+.
+ *
+ */
+
+namespace SP;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+/**
+ * Class UserUtil
+ *
+ * @package SP
+ */
+class UserUtil
+{
+ /**
+ * Tiempo máximo para recuperar la clave
+ */
+ const MAX_PASS_RECOVER_TIME = 3600;
+ /**
+ * Número de intentos máximos para recuperar la clave
+ */
+ const MAX_PASS_RECOVER_LIMIT = 3;
+ const USER_LOGIN_EXIST = 1;
+ const USER_MAIL_EXIST = 2;
+ /**
+ * @var int El último id de una consulta de actualización
+ */
+ public static $queryLastId = 0;
+
+ /**
+ * Comprobar si un usuario está migrado desde phpPMS.
+ *
+ * @param string $userLogin con el login del usuario
+ * @return bool
+ */
+ public static function checkUserIsMigrate($userLogin)
+ {
+ $query = 'SELECT BIN(user_isMigrate) AS user_isMigrate FROM usrData WHERE user_login = :login LIMIT 1';
+
+ $data['login'] = $userLogin;
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ return ($queryRes !== false && $queryRes->user_isMigrate == 1);
+ }
+
+ /**
+ * Actualizar la clave de un usuario desde phpPMS.
+ *
+ * @param string $userLogin con el login del usuario
+ * @param string $userPass con la clave del usuario
+ * @return bool
+ *
+ * Esta función actualiza la clave de un usuario que ha sido migrado desde phpPMS
+ */
+ public static function migrateUser($userLogin, $userPass)
+ {
+ $passdata = UserUtil::makeUserPass($userPass);
+
+ $query = 'UPDATE usrData SET '
+ . 'user_pass = :pass,'
+ . 'user_hashSalt = :salt,'
+ . 'user_lastUpdate = NOW(),'
+ . 'user_isMigrate = 0 '
+ . 'WHERE user_login = :login '
+ . 'AND user_isMigrate = 1 '
+ . 'AND (user_pass = SHA1(CONCAT(user_hashSalt,:passOld)) '
+ . 'OR user_pass = MD5(:passOldMd5)) LIMIT 1';
+
+ $data['pass'] = $passdata['pass'];
+ $data['salt'] = $passdata['salt'];
+ $data['login'] = $userLogin;
+ $data['passOld'] = $userPass;
+ $data['passOldMd5'] = $userPass;
+
+ if (DB::getQuery($query, __FUNCTION__, $data) === false) {
+ return false;
+ }
+
+ $log = new Log(__FUNCTION__);
+ $log->addDescription(_('Usuario actualizado'));
+ $log->addDescription('Login: ' . $userLogin);
+ $log->writeLog();
+
+ Email::sendEmail($log);
+
+ return true;
+ }
+
+ /**
+ * Crear la clave de un usuario.
+ *
+ * @param string $userPass con la clave del usuario
+ * @return array con la clave y salt del usuario
+ */
+ public static function makeUserPass($userPass)
+ {
+ $salt = Crypt::makeHashSalt();
+ $userPass = sha1($salt . $userPass);
+
+ return array('salt' => $salt, 'pass' => $userPass);
+ }
+
+ /**
+ * Comprobar si el usuario tiene actualizada la clave maestra actual.
+ *
+ * @param string $login opcional con el login del usuario
+ * @return bool
+ */
+ public static function checkUserUpdateMPass($login = null)
+ {
+ $userId = (!is_null($login)) ? self::getUserIdByLogin($login) : Session::getUserId();
+
+ if ($userId === 0) {
+ return false;
+ }
+
+ $configMPassTime = Config::getConfigDbValue('lastupdatempass');
+
+ if ($configMPassTime === false) {
+ return false;
+ }
+
+ $query = 'SELECT user_lastUpdateMPass FROM usrData WHERE user_id = :id LIMIT 1';
+
+ $data['id'] = $userId;
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ $ret = ($queryRes !== false && $queryRes->user_lastUpdateMPass > $configMPassTime);
+
+ return $ret;
+
+ }
+
+ /**
+ * Obtener el Id de usuario a partir del login.
+ *
+ * @param string $login con el login del usuario
+ * @return false|int con el Id del usuario
+ */
+ public static function getUserIdByLogin($login)
+ {
+ $query = 'SELECT user_id FROM usrData WHERE user_login = :login LIMIT 1';
+
+ $data = array('login' => $login);
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+ return false;
+ }
+
+ return (int)$queryRes->user_id;
+ }
+
+ /**
+ * Actualizar la asociación de grupos con cuentas.
+ *
+ * @param int $accountId con el Id de la cuenta
+ * @param array $usersId con los usuarios de la cuenta
+ * @return bool
+ */
+ public static function updateUsersForAccount($accountId, $usersId)
+ {
+ if (self::deleteUsersForAccount($accountId, $usersId)) {
+ return self::addUsersForAccount($accountId, $usersId);
+ }
+
+ return false;
+ }
+
+ /**
+ * Eliminar la asociación de grupos con cuentas.
+ *
+ * @param int $accountId con el Id de la cuenta
+ * @param array $usersId opcional con los grupos de la cuenta
+ * @return bool
+ */
+ public static function deleteUsersForAccount($accountId, $usersId = null)
+ {
+ $queryExcluded = '';
+
+ // Excluimos los usuarios actuales
+ if (is_array($usersId)) {
+ array_map('intval', $usersId);
+ $queryExcluded = 'AND accuser_userId NOT IN (' . implode(',', $usersId) . ')';
+ }
+
+ $query = 'DELETE FROM accUsers WHERE accuser_accountId = :id ' . $queryExcluded;
+
+ $data['id'] = $accountId;
+
+ return DB::getQuery($query, __FUNCTION__, $data);
+ }
+
+ /**
+ * Crear asociación de grupos con cuentas.
+ *
+ * @param int $accountId con el Id de la cuenta
+ * @param array $usersId con los grupos de la cuenta
+ * @return bool
+ */
+ public static function addUsersForAccount($accountId, $usersId)
+ {
+ if (!is_array($usersId)) {
+ return true;
+ }
+
+ $values = '';
+
+ // Obtenemos los grupos actuales
+ $usersExcluded = self::getUsersForAccount($accountId);
+
+ foreach ($usersId as $userId) {
+ // Excluimos los usuarios actuales
+ if (isset($usersExcluded) && is_array($usersExcluded) && in_array($userId, $usersExcluded)) {
+ continue;
+ }
+
+ $values[] = '(' . (int)$accountId . ',' . (int)$userId . ')';
+ }
+
+ if (!is_array($values)) {
+ return true;
+ }
+
+ $query = 'INSERT INTO accUsers (accuser_accountId, accuser_userId) VALUES ' . implode(',', $values);
+
+ return DB::getQuery($query, __FUNCTION__);
+ }
+
+ /**
+ * Obtiene el listado de usuarios de una cuenta.
+ *
+ * @param int $accountId con el id de la cuenta
+ * @return array con los id de usuarios de la cuenta
+ */
+ public static function getUsersForAccount($accountId)
+ {
+ $query = 'SELECT accuser_userId FROM accUsers WHERE accuser_accountId = :id';
+
+ $data['id'] = $accountId;
+
+ DB::setReturnArray();
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+ return array();
+ }
+
+ foreach ($queryRes as $user) {
+ $users[] = (int)$user->accuser_userId;
+ }
+
+ return $users;
+ }
+
+ /**
+ * Comprobar si un usuario está deshabilitado.
+ *
+ * @param string $userLogin con el login del usuario
+ * @return bool
+ */
+ public static function checkUserIsDisabled($userLogin)
+ {
+ $query = 'SELECT BIN(user_isDisabled) AS user_isDisabled FROM usrData WHERE user_login = :login LIMIT 1';
+
+ $data['login'] = $userLogin;
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ $ret = ($queryRes !== false && intval($queryRes->user_isDisabled) === 1);
+
+ return $ret;
+ }
+
+ /**
+ * Comprobar el hash de recuperación de clave.
+ *
+ * @param string $hash con el hash de recuperación
+ * @return int con el Id del usuario
+ */
+ public static function checkHashPassRecover($hash)
+ {
+ $query = 'SELECT userpassr_userId FROM usrPassRecover '
+ . 'WHERE userpassr_hash = :hash '
+ . 'AND userpassr_used = 0 '
+ . 'AND userpassr_date >= :date '
+ . 'ORDER BY userpassr_date DESC LIMIT 1';
+
+ $data['hash'] = $hash;
+ $data['date'] = time() - self::MAX_PASS_RECOVER_TIME;
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+ return false;
+ }
+
+ return $queryRes->userpassr_userId;
+ }
+
+ /**
+ * Marcar como usado el hash de recuperación de clave.
+ *
+ * @param string $hash con el hash de recuperación
+ * @return bool
+ */
+ public static function updateHashPassRecover($hash)
+ {
+ $query = 'UPDATE usrPassRecover SET userpassr_used = 1 WHERE userpassr_hash = :hash';
+
+ $data['hash'] = $hash;
+
+ return DB::getQuery($query, __FUNCTION__, $data);
+ }
+
+ /**
+ * Comprobar el límite de recuperaciones de clave.
+ *
+ * @param string $login con el login del usuario
+ * @return bool
+ */
+ public static function checkPassRecoverLimit($login)
+ {
+ $query = 'SELECT userpassr_userId ' .
+ 'FROM usrPassRecover ' .
+ 'WHERE userpassr_userId = :id ' .
+ 'AND userpassr_used = 0 ' .
+ 'AND userpassr_date >= :date';
+
+ $data['login'] = self::getUserIdByLogin($login);
+ $data['date'] = time() - self::MAX_PASS_RECOVER_TIME;
+
+ $db = new DB();
+ $db->setParamData($data);
+
+ return (DB::getQuery($query, __FUNCTION__, $data) === false || DB::$lastNumRows >= self::MAX_PASS_RECOVER_LIMIT);
+ }
+
+ /**
+ * Obtiene el listado con el nombre de los usuarios de una cuenta.
+ *
+ * @param int $accountId con el id de la cuenta
+ * @return false|array con los nombres de los usuarios ordenados
+ */
+ public static function getUsersNameForAccount($accountId)
+ {
+ $query = 'SELECT user_id,'
+ . 'user_login '
+ . 'FROM accUsers '
+ . 'JOIN usrData ON user_Id = accuser_userId '
+ . 'WHERE accuser_accountId = :id';
+
+ $data['id'] = $accountId;
+
+ DB::setReturnArray();
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+ return false;
+ }
+
+ foreach ($queryRes as $users) {
+ $usersName[$users->user_id] = $users->user_login;
+ }
+
+ asort($usersName, SORT_STRING);
+
+ return $usersName;
+ }
+
+ /**
+ * Comprobar si un usuario y email existen.
+ *
+ * @param string $login con el login del usuario
+ * @param string $email con el email del usuario
+ * @return bool
+ */
+ public static function checkUserMail($login, $email)
+ {
+ $query = 'SELECT user_id FROM usrData WHERE user_login = :login AND user_email = :email LIMIT 1';
+
+ $data['login'] = $login;
+ $data['email'] = $email;
+
+ return (DB::getQuery($query, __FUNCTION__, $data) === true && DB::$lastNumRows === 1);
+ }
+
+ /**
+ * Obtener el email de un usuario.
+ *
+ * @param int $userId con el Id del usuario
+ * @return string con el email del usuario
+ */
+ public static function getUserEmail($userId)
+ {
+ $query = 'SELECT user_email FROM usrData WHERE user_id = :id AND user_email IS NOT NULL LIMIT 1';
+
+ $data['id'] = $userId;
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+ return false;
+ }
+
+ return $queryRes->user_email;
+ }
+
+ /**
+ * Insertar un registro de recuperación de clave.
+ *
+ * @param string $login con el login del usuario
+ * @param string $hash con el hash para el cambio
+ * @return bool
+ */
+ public static function addPassRecover($login, $hash)
+ {
+ $query = 'INSERT INTO usrPassRecover SET '
+ . 'userpassr_userId = :userId,'
+ . 'userpassr_hash = :hash,'
+ . 'userpassr_date = UNIX_TIMESTAMP(),'
+ . 'userpassr_used = 0';
+
+ $data['userId'] = self::getUserIdByLogin($login);
+ $data['hash'] = $hash;
+
+ return DB::getQuery($query, __FUNCTION__, $data);
+ }
+
+ /**
+ * Obtener el IV del usuario a partir del Id.
+ *
+ * @param int $id El id del usuario
+ * @return string El hash
+ */
+ public static function getUserIVById($id)
+ {
+ $query = 'SELECT user_mIV FROM usrData WHERE user_id = :id LIMIT 1';
+
+ $data['id'] = $id;
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+ return false;
+ }
+
+ return $queryRes->user_mIV;
+ }
+
+
+ /**
+ * Actualiza el último inicio de sesión del usuario en la BBDD.
+ *
+ * @param $userId int El id del usuario
+ * @return bool
+ */
+ public static function setUserLastLogin($userId)
+ {
+ $query = 'UPDATE usrData SET user_lastLogin = NOW(),user_count = user_count + 1 WHERE user_id = :id LIMIT 1';
+
+ $data['id'] = $userId;
+
+ return DB::getQuery($query, __FUNCTION__, $data);
+ }
+
+ /**
+ * Comprueba la clave maestra del usuario.
+ *
+ * @param User $User
+ * @return bool
+ */
+ public static function checkUserMPass(User $User)
+ {
+ $userMPass = $User->getUserMPass(true);
+
+ if ($userMPass === false) {
+ return false;
+ }
+
+ $configMPass = Config::getConfigDbValue('masterPwd');
+
+ if ($configMPass === false) {
+ return false;
+ }
+
+ // Comprobamos el hash de la clave del usuario con la guardada
+ $ret = Crypt::checkHashPass($userMPass, $configMPass);
+
+ return $ret;
+ }
+
+ /**
+ * Obtener los datos de un usuario.
+ *
+ * @param int $id con el Id del usuario a consultar
+ * @return array con el nombre de la columna como clave y los datos como valor
+ */
+ public static function getUserData($id = 0)
+ {
+ // Array con los nombres de los campos para devolverlos con el formato correcto
+ // Es necesario que coincidan con las columnas de la tabla
+ $user = array('user_id' => 0,
+ 'user_name' => '',
+ 'user_login' => '',
+ 'user_profileId' => 0,
+ 'user_groupId' => 0,
+ 'user_email' => '',
+ 'user_notes' => '',
+ 'user_isAdminApp' => 0,
+ 'user_isAdminAcc' => 0,
+ 'user_isLdap' => 0,
+ 'user_isDisabled' => 0,
+ 'user_isChangePass' => 0,
+ 'user_count' => 0,
+ 'user_lastLogin' => '',
+ 'user_lastUpdate' => '',
+ 'user_lastUpdateMPass' => 0,
+ 'action' => 1,
+ 'checks' => array(
+ 'user_isLdap' => 0,
+ 'user_isAdminApp' => 0,
+ 'user_isAdminAcc' => 0,
+ 'user_isDisabled' => 0,
+ 'user_isChangePass' => 0
+ )
+ );
+
+ if ($id > 0) {
+ $users = self::getUsers($id);
+
+ if ($users) {
+ foreach ($users[0] as $name => $value) {
+ // Check if field is a checkbox one
+ if (preg_match('/^.*_is[A-Z].*$/', $name)) {
+ $user['checks'][$name] = ((int)$value === 1) ? 'CHECKED' : '';
+ }
+
+ if ($value === '0000-00-00 00:00:00' || $value === '1970-01-01 01:00:00') {
+ $value = _('N/D');
+ }
+
+ $user[$name] = $value;
+ }
+ $user['action'] = 2;
+ }
+ }
+
+ return $user;
+ }
+
+ /**
+ * Establecer las variables para la consulta de usuarios.
+ *
+ * @param int $itemId opcional, con el Id del usuario a consultar
+ * @return false|array con la lista de usuarios
+ */
+ public static function getUsers($itemId = null)
+ {
+ $data = null;
+
+ if (!is_null($itemId)) {
+ $query = 'SELECT user_id,'
+ . 'user_name,'
+ . 'user_login,'
+ . 'user_profileId,'
+ . 'user_groupId,'
+ . 'user_email,'
+ . 'user_notes,'
+ . 'BIN(user_isAdminApp) AS user_isAdminApp,'
+ . 'BIN(user_isAdminAcc) AS user_isAdminAcc,'
+ . 'BIN(user_isLdap) AS user_isLdap,'
+ . 'BIN(user_isDisabled) AS user_isDisabled,'
+ . 'BIN(user_isChangePass) AS user_isChangePass,'
+ . 'user_count,'
+ . 'user_lastLogin,'
+ . 'user_lastUpdate, '
+ . 'FROM_UNIXTIME(user_lastUpdateMPass) as user_lastUpdateMPass '
+ . 'FROM usrData '
+ . 'LEFT JOIN usrProfiles ON user_profileId = userprofile_id '
+ . 'LEFT JOIN usrGroups ON usrData.user_groupId = usergroup_id '
+ . 'WHERE user_id = :id LIMIT 1';
+
+ $data['id'] = $itemId;
+ } else {
+ $query = 'SELECT user_id,'
+ . 'user_name,'
+ . 'user_login,'
+ . 'userprofile_name,'
+ . 'usergroup_name,'
+ . 'BIN(user_isAdminApp) AS user_isAdminApp,'
+ . 'BIN(user_isAdminAcc) AS user_isAdminAcc,'
+ . 'BIN(user_isLdap) AS user_isLdap,'
+ . 'BIN(user_isDisabled) AS user_isDisabled,'
+ . 'BIN(user_isChangePass) AS user_isChangePass '
+ . 'FROM usrData '
+ . 'LEFT JOIN usrProfiles ON user_profileId = userprofile_id '
+ . 'LEFT JOIN usrGroups ON usrData.user_groupId = usergroup_id ';
+
+ $query .= (!Session::getUserIsAdminApp()) ? 'WHERE user_isAdminApp = 0 ORDER BY user_name' : 'ORDER BY user_name';
+ }
+
+ DB::setReturnArray();
+
+ return DB::getResults($query, __FUNCTION__, $data);
+ }
+
+ /**
+ * Modificar la clave de un usuario.
+ *
+ * @param $userId
+ * @param $userPass
+ * @return bool
+ */
+ public static function updateUserPass($userId, $userPass)
+ {
+ $passdata = UserUtil::makeUserPass($userPass);
+ $userLogin = UserUtil::getUserLoginById($userId);
+
+ $query = 'UPDATE usrData SET '
+ . 'user_pass = :pass,'
+ . 'user_hashSalt = :salt,'
+ . 'user_isChangePass = 0,'
+ . 'user_lastUpdate = NOW() '
+ . 'WHERE user_id = :id LIMIT 1';
+
+ $data['pass'] = $passdata['pass'];
+ $data['salt'] = $passdata['salt'];
+ $data['id'] = $userId;
+
+ if (DB::getQuery($query, __FUNCTION__, $data) === false) {
+ return false;
+ }
+
+ self::$queryLastId = DB::$lastId;
+
+ Log::writeNewLogAndEmail(_('Modificar Clave Usuario'), sprintf('%s : %s', Html::strongText(_('Login')), $userLogin));
+
+ return true;
+ }
+
+ /**
+ * Obtener el login de usuario a partir del Id.
+ *
+ * @param int $id con el id del usuario
+ * @return string con el login del usuario
+ */
+ public static function getUserLoginById($id)
+ {
+ $query = 'SELECT user_login FROM usrData WHERE user_id = :id LIMIT 1';
+
+ $data['id'] = $id;
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+ return false;
+ }
+
+ return $queryRes->user_login;
+ }
+
+ /**
+ * Migrar el grupo de los usuarios a la nueva tabla
+ */
+ public static function migrateUsersGroup()
+ {
+ $query = 'SELECT user_id, user_groupId FROM usrData';
+
+ $queryRes = DB::getResults($query, __FUNCTION__, $data);
+
+ if ($queryRes === false) {
+ return false;
+ }
+
+ foreach ($queryRes as $user) {
+ if (!Groups::addUsersForGroup(array($user->user_groupId), $user->user_id)) {
+ Log::writeNewLog(_('Migrar Grupos'), sprintf('%s (%s)'), _('Error al migrar grupo del usuario'), $user->user_id);
+ }
+ }
+
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/inc/util.class.php b/inc/Util.class.php
similarity index 63%
rename from inc/util.class.php
rename to inc/Util.class.php
index 1818ceac..2647738d 100644
--- a/inc/util.class.php
+++ b/inc/Util.class.php
@@ -23,12 +23,17 @@
*
*/
+namespace SP;
+
+use CssMin;
+use phpseclib\Crypt\RSA;
+
defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
/**
* Clase con utilizades para la aplicación
*/
-class SP_Util
+class Util
{
/**
* Comprobar si la función de números aleatorios está disponible.
@@ -110,14 +115,14 @@ class SP_Util
public static function checkPhpVersion()
{
$error = array();
+ $needsVersion = '5.3.0';
- $version = explode('.', PHP_VERSION);
- $versionId = ($version[0] * 10000 + $version[1] * 100 + $version[2]);
-
- if ($versionId < 50100) {
- $error[] = array('type' => 'critical',
- 'description' => _('Versión de PHP requerida >= 5.1'),
- 'hint' => _('Actualice la versión de PHP para que la aplicación funcione correctamente'));
+ if (version_compare(PHP_VERSION, $needsVersion, '>=')) {
+ $error[] = array(
+ 'type' => SPException::SP_CRITICAL,
+ 'description' => _('Versión de PHP requerida >= ') . $needsVersion,
+ 'hint' => _('Actualice la versión de PHP para que la aplicación funcione correctamente')
+ );
}
return $error;
@@ -130,22 +135,35 @@ class SP_Util
*/
public static function checkModules()
{
- $modsAvail = array_map('strtolower', get_loaded_extensions());
- $modsNeed = array('mysqli', 'ldap', 'mcrypt', 'curl', 'simplexml', 'phar', 'json', 'xml');
- $modsErr = array();
+ $modsNeed = array(
+ 'ldap',
+ 'mcrypt',
+ 'curl',
+ 'SimpleXML',
+ 'Phar',
+ 'json',
+ 'xml',
+ 'PDO',
+ 'zlib',
+ 'gettext',
+ 'openssl',
+ 'pcre',
+ 'session',
+ 'gd'
+ );
+ $error = array();
foreach ($modsNeed as $module) {
- if (!in_array($module, $modsAvail)) {
- $error = array(
- 'type' => 'warning',
- 'description' => _('Módulo no disponible') . " ($module)",
+ if (!extension_loaded($module)) {
+ $error[] = array(
+ 'type' => SPException::SP_WARNING,
+ 'description' => sprintf('%s (%s)', _('Módulo no disponible'), $module),
'hint' => _('Sin este módulo la aplicación puede no funcionar correctamente.')
);
- $modsErr[] = $error;
}
}
- return $modsErr;
+ return $error;
}
/**
@@ -158,9 +176,8 @@ class SP_Util
public static function init_var($s, $d = "")
{
$r = $d;
-
if (isset($_REQUEST[$s]) && !empty($_REQUEST[$s])) {
- $r = SP_Html::sanitize($_REQUEST[$s]);
+ $r = Html::sanitize($_REQUEST[$s]);
}
return $r;
@@ -173,7 +190,7 @@ class SP_Util
*/
public static function ldapIsAvailable()
{
- return in_array("ldap", get_loaded_extensions());
+ return extension_loaded('ldap');
}
/**
@@ -183,7 +200,7 @@ class SP_Util
*/
public static function getVersionString()
{
- return '1.1';
+ return '1.2-rc1';
}
/**
@@ -195,59 +212,91 @@ class SP_Util
*/
public static function checkUpdates()
{
- if (!self::curlIsAvailable() || !SP_Config::getValue('checkupdates')) {
+ if (!self::curlIsAvailable() || !Config::getValue('checkupdates')) {
return false;
}
$githubUrl = 'https://api.github.com/repos/nuxsmin/sysPass/releases/latest';
- $ch = curl_init($githubUrl);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch, CURLOPT_HEADER, 0);
- curl_setopt($ch, CURLOPT_USERAGENT, "sysPass App Updater");
- curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
- curl_setopt($ch, CURLOPT_TIMEOUT, 60);
+ $data = self::getDataFromUrl($githubUrl);
- $data = curl_exec($ch);
+ if ($data) {
+ $updateInfo = json_decode($data);
- if ($data === false) {
- $message['action'] = __FUNCTION__;
- $message['text'][] = curl_error($ch);
+ // $updateInfo[0]->tag_name
+ // $updateInfo[0]->name
+ // $updateInfo[0]->body
+ // $updateInfo[0]->tarball_url
+ // $updateInfo[0]->zipball_url
+ // $updateInfo[0]->published_at
+ // $updateInfo[0]->html_url
- SP_Log::wrLogInfo($message);
+ $version = $updateInfo->tag_name;
+ $url = $updateInfo->html_url;
+ $title = $updateInfo->name;
+ $description = $updateInfo->body;
+ $date = $updateInfo->published_at;
- return false;
- }
+ preg_match('/v?(\d+)\.(\d+)\.(\d+)\.(\d+)(\-[a-z0-9.]+)?$/', $version, $realVer);
- curl_close($ch);
+ if (is_array($realVer) && Init::isLoggedIn()) {
+ $appVersion = implode('', self::getVersion(true));
+ $pubVersion = $realVer[1] . $realVer[2] . $realVer[3] . $realVer[4];
- $updateInfo = json_decode($data);
-
- $version = $updateInfo->tag_name;
- $url = $updateInfo->html_url;
- $title = $updateInfo->name;
- $description = $updateInfo->body;
- $date = $updateInfo->published_at;
-
- preg_match("/v?(\d+)\.(\d+)\.(\d+)\.(\d+)(\-[a-z0-9.]+)?$/", $version, $realVer);
-
- if (is_array($realVer) && SP_Init::isLoggedIn()) {
- $appVersion = implode('', self::getVersion(true));
- $pubVersion = $realVer[1] . $realVer[2] . $realVer[3] . $realVer[4];
-
- if ($pubVersion > $appVersion) {
- return array(
- 'version' => $version,
- 'url' => $url,
- 'title' => $title,
- 'description' => $description,
- 'date' => $date);
+ if ($pubVersion > $appVersion) {
+ return array(
+ 'version' => $version,
+ 'url' => $url,
+ 'title' => $title,
+ 'description' => $description,
+ 'date' => $date);
+ } else {
+ return true;
+ }
} else {
- return true;
+ return false;
}
- } else {
+ }
+
+ return false;
+ }
+
+ /**
+ * Comprobar si hay notificaciones de sysPass disponibles desde internet (github.com)
+ * Esta función hace una petición a GitHub y parsea el JSON devuelto
+ *
+ * @return array|bool
+ */
+ public static function checkNotices()
+ {
+ if (!Config::getValue('checknotices')) {
return false;
}
+
+ $githubUrl = 'https://api.github.com/repos/nuxsmin/sysPass/issues?milestone=none&state=open&labels=Notices';
+
+ $data = self::getDataFromUrl($githubUrl);
+
+ if ($data) {
+ $noticesData = json_decode($data);
+ $notices = array();
+
+ // $noticesData[0]->title
+ // $noticesData[0]->body
+ // $noticesData[0]->created_at
+
+ foreach ($noticesData as $notice) {
+ $notices[] = array(
+ $notice->title,
+// $notice->body,
+ $notice->created_at
+ );
+ }
+
+ return $notices;
+ }
+
+ return false;
}
/**
@@ -268,8 +317,8 @@ class SP_Util
*/
public static function getVersion($retBuild = false)
{
- $build = '24';
- $version = array(1, 1, 2);
+ $build = '01';
+ $version = array(1, 2, 0);
if ($retBuild) {
array_push($version, $build);
@@ -278,37 +327,17 @@ class SP_Util
return $version;
}
- /**
- * Comprobar el método utilizado para enviar un formulario.
- *
- * @param string $method con el método utilizado.
- * @return none
- */
- public static function checkReferer($method)
- {
- if ($_SERVER['REQUEST_METHOD'] !== $method
- || !isset($_SERVER['HTTP_REFERER'])
- || !preg_match('#' . SP_Init::$WEBROOT . '/.*$#', $_SERVER['HTTP_REFERER'])
- ) {
- SP_Init::initError(_('No es posible acceder directamente a este archivo'));
- exit();
- }
- }
/**
* Realiza el proceso de logout.
- *
- * @return none
*/
public static function logout()
{
- exit('');
+ exit('');
}
/**
* Obtener el tamaño máximo de subida de PHP.
- *
- * @return none
*/
public static function getMaxUpload()
{
@@ -317,10 +346,7 @@ class SP_Util
$memory_limit = (int)(ini_get('memory_limit'));
$upload_mb = min($max_upload, $max_post, $memory_limit);
- $message['action'] = __FUNCTION__;
- $message['text'][] = "Max. PHP upload: " . $upload_mb . "MB";
-
- SP_Log::wrLogInfo($message);
+ Log::writeNewLog(__FUNCTION__, "Max. PHP upload: " . $upload_mb . "MB");
}
/**
@@ -330,14 +356,7 @@ class SP_Util
*/
public static function demoIsEnabled()
{
- $enabled = SP_Common::parseParams('s', 'demo_enabled', 0);
- $reload = SP_Common::parseParams('s', 'reload', 0);
-
- if (!isset($_SESSION["demo_enabled"]) || $reload === 1) {
- $enabled = $_SESSION['demo_enabled'] = SP_Config::getValue('demo_enabled', 0);
- }
-
- return self::boolval($enabled);
+ return self::boolval(Config::getValue('demo_enabled', false));
}
/**
@@ -346,29 +365,28 @@ class SP_Util
* such as 'false','N','yes','on','off', etc.
*
* @author Samuel Levy
- * @param mixed $in The variable to check
- * @param bool $strict If set to false, consider everything that is not false to
- * be true.
+ * @param mixed $in The variable to check
+ * @param bool $strict If set to false, consider everything that is not false to
+ * be true.
* @return bool The boolean equivalent or null (if strict, and no exact equivalent)
*/
public static function boolval($in, $strict = false)
{
- $out = null;
$in = (is_string($in) ? strtolower($in) : $in);
+
// if not strict, we only have to check if something is false
if (in_array($in, array('false', 'no', 'n', '0', 'off', false, 0), true) || !$in) {
- $out = false;
+ return false;
} else if ($strict) {
// if strict, check the equivalent true values
if (in_array($in, array('true', 'yes', 'y', '1', 'on', true, 1), true)) {
- $out = true;
+ return true;
}
} else {
// not strict? let the regular php bool check figure it out (will
// largely default to true)
- $out = ($in ? true : false);
+ return ($in ? true : false);
}
- return $out;
}
/**
@@ -378,15 +396,7 @@ class SP_Util
*/
public static function fileIsEnabled()
{
- $check = SP_Common::parseParams('s', 'files_enabled', false, true);
- $enabled = SP_Common::parseParams('s', 'files_enabled', 0);
- $reload = SP_Common::parseParams('s', 'reload', 0);
-
- if (!isset($_SESSION["files_enabled"]) || $reload === 1) {
- $enabled = $_SESSION['files_enabled'] = SP_Config::getValue('files_enabled', false);
- }
-
- return self::boolval($enabled);
+ return self::boolval(Config::getValue('files_enabled', false));
}
/**
@@ -396,14 +406,7 @@ class SP_Util
*/
public static function mailIsEnabled()
{
- $enabled = SP_Common::parseParams('s', 'mail_enabled', 0);
- $reload = SP_Common::parseParams('s', 'reload', 0);
-
- if (!isset($_SESSION["mail_enabled"]) || $reload === 1) {
- $enabled = $_SESSION['mail_enabled'] = SP_Config::getValue('mail_enabled', false);
- }
-
- return self::boolval($enabled);
+ return self::boolval(Config::getValue('mail_enabled', false));
}
/**
@@ -413,14 +416,7 @@ class SP_Util
*/
public static function wikiIsEnabled()
{
- $enabled = SP_Common::parseParams('s', 'wiki_enabled', 0);
- $reload = SP_Common::parseParams('s', 'reload', 0);
-
- if (!isset($_SESSION["wiki_enabled"]) || $reload === 1) {
- $enabled = $_SESSION['wiki_enabled'] = SP_Config::getValue('wiki_enabled', false);
- }
-
- return self::boolval($enabled);
+ return self::boolval(Config::getValue('wiki_enabled', false));
}
/**
@@ -430,14 +426,7 @@ class SP_Util
*/
public static function mailrequestIsEnabled()
{
- $enabled = SP_Common::parseParams('s', 'mail_requestsenabled', 0);
- $reload = SP_Common::parseParams('s', 'reload', 0);
-
- if (!isset($_SESSION["mail_requestsenabled"]) || $reload === 1) {
- $enabled = $_SESSION['mail_requestsenabled'] = SP_Config::getValue('mail_requestsenabled', false);
- }
-
- return self::boolval($enabled);
+ return self::boolval(Config::getValue('mail_requestsenabled', false));
}
/**
@@ -447,14 +436,7 @@ class SP_Util
*/
public static function ldapIsEnabled()
{
- $enabled = SP_Common::parseParams('s', 'ldap_enabled', 0);
- $reload = SP_Common::parseParams('s', 'reload', 0);
-
- if (!isset($_SESSION["ldap_enabled"]) || $reload === 1) {
- $enabled = $_SESSION['ldap_enabled'] = SP_Config::getValue('ldap_enabled', false);
- }
-
- return self::boolval($enabled);
+ return self::boolval(Config::getValue('ldap_enabled', false));
}
/**
@@ -464,14 +446,7 @@ class SP_Util
*/
public static function logIsEnabled()
{
- $enabled = SP_Common::parseParams('s', 'log_enabled', 0);
- $reload = SP_Common::parseParams('s', 'reload', 0);
-
- if (!isset($_SESSION["log_enabled"]) || $reload === 1) {
- $enabled = $_SESSION['log_enabled'] = SP_Config::getValue('log_enabled', false);
- }
-
- return self::boolval($enabled);
+ return self::boolval(Config::getValue('log_enabled', false));
}
/**
@@ -481,42 +456,47 @@ class SP_Util
*/
public static function resultsCardsIsEnabled()
{
- $enabled = SP_Common::parseParams('s', 'resultsascards', 0);
- $reload = SP_Common::parseParams('s', 'reload', 0);
+ return self::boolval(Config::getValue('resultsascards', false));
+ }
- if (!isset($_SESSION["resultsascards"]) || $reload === 1) {
- $enabled = $_SESSION['resultsascards'] = SP_Config::getValue('resultsascards', false);
- }
+ /**
+ * Comprobar si está habilitado usar imagen para claves de cuentas
+ *
+ * @return bool
+ */
+ public static function accountPassToImageIsEnabled()
+ {
+ return self::boolval(Config::getValue('account_passtoimage', false));
+ }
- return self::boolval($enabled);
+ /**
+ * Comprobar si se utiliza HTTPS
+ *
+ * @return bool
+ */
+ public static function httpsEnabled() {
+ return
+ (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')
+ || $_SERVER['SERVER_PORT'] == 443;
}
/**
* Establecer variable de sesión para recargar la aplicación.
- *
- * @return none
*/
public static function reload()
{
- $reload = SP_Common::parseParams('s', 'reload', 0);
-
- if ($reload === 0) {
- $_SESSION["reload"] = 1;
+ if (Session::getReload() === false) {
+ Session::setReload(true);
}
}
/**
* Comprobar si se necesita recargar la aplicación.
- *
- * @return none
*/
public static function checkReload()
{
- $reload = SP_Common::parseParams('s', 'reload', 0);
-
- if ($reload === 1) {
- $_SESSION['reload'] = 0;
- //exit("");
+ if (Session::getReload() === true) {
+ Session::setReload(false);
exit("");
}
}
@@ -526,11 +506,11 @@ class SP_Util
* Método que devuelve un recurso CSS o JS comprimido. Si coincide el ETAG se
* devuelve el código HTTP/304
*
- * @param string $type tipo de recurso a devolver
- * @param array $files archivos a parsear
- * @return none
+ * @param string $type tipo de recurso a devolver
+ * @param array $files archivos a parsear
+ * @param bool $disableMinify Deshabilitar minimizar
*/
- public static function getMinified($type, &$files)
+ public static function getMinified($type, &$files, $disableMinify = false)
{
$offset = 3600 * 24 * 30;
$nextCheck = time() + $offset;
@@ -552,30 +532,45 @@ class SP_Util
exit;
}
- $path = SP_Init::$SERVERROOT . DIRECTORY_SEPARATOR;
+ $path = Init::$SERVERROOT . DIRECTORY_SEPARATOR;
if ($type == 'js') {
- header("Content-type: application/javascript; charset: UTF-8");
+ header("Content-type: application/x-javascript; charset: UTF-8");
} elseif ($type == 'css') {
header("Content-type: text/css; charset: UTF-8");
}
flush();
-
- if (self::checkZlib() || !ob_start("ob_gzhandler")) {
+ if (self::checkZlib() || !ob_start('ob_gzhandler')) {
ob_start();
}
foreach ($files as $file) {
$filePath = $path . $file['href'];
- if ($file['min'] === true) {
+ // Obtener el recurso desde una URL
+ if (preg_match('#^https?://.*#', $file['href'])){
+ $data = self::getDataFromUrl($file['href']);
+
+ if($data !== false){
+ echo '/* URL: ' . $file['href'] . ' */' . PHP_EOL;
+ echo $data;
+ }
+
+ continue;
+ }
+
+ if(!file_exists($filePath)){
+ error_log('File not found: ' . $filePath);
+ continue;
+ }
+
+ if ($file['min'] === true && $disableMinify === false) {
echo '/* MINIFIED FILE: ' . $file['href'] . ' */' . PHP_EOL;
if ($type == 'js') {
echo self::jsCompress(file_get_contents($filePath));
} elseif ($type == 'css') {
- require_once EXTENSIONS_DIR . DIRECTORY_SEPARATOR . 'cssmin' . DIRECTORY_SEPARATOR . 'class.cssmin.php';
echo CssMin::minify(file_get_contents($filePath));
}
} else {
@@ -598,9 +593,12 @@ class SP_Util
private static function getEtag(&$files)
{
$md5Sum = '';
- $path = SP_Init::$SERVERROOT . DIRECTORY_SEPARATOR;
+ $path = Init::$SERVERROOT . DIRECTORY_SEPARATOR;
foreach ($files as $file) {
+ if(preg_match('#^https?://.*#', $file['href'])){
+ continue;
+ }
$md5Sum .= md5_file($path . $file['href']);
}
@@ -687,47 +685,71 @@ class SP_Util
}
/**
- * Comprobar si las cookies están disponibles.
+ * Devuelve información sobre la aplicación.
*
- * @return bool
+ * @param string $index con la key a devolver
+ * @return array con las propiedades de la aplicación
*/
- public static function checkCookies()
+ public static function getAppInfo($index = null)
{
- if (isset($_COOKIE['check'])) {
- return true;
- } else {
- return (setcookie('check', 1, time() + self::getSessionLifeTime()));
+ $appinfo = array(
+ 'appname' => 'sysPass',
+ 'appdesc' => 'Systems Password Manager',
+ 'appwebsite' => 'http://www.syspass.org',
+ 'appblog' => 'http://www.cygnux.org',
+ 'appdoc' => 'http://wiki.syspass.org',
+ 'appupdates' => 'http://sourceforge.net/api/file/index/project-id/775555/mtime/desc/limit/20/rss',
+ 'apphelp' => 'help.syspass.org',
+ 'appchangelog' => '');
+
+ if (!is_null($index) && isset($appinfo[$index])) {
+ return $appinfo[$index];
}
+
+ return $appinfo;
}
/**
- * Obtener el timeout de sesión desde la configuración.
+ * Obtener datos desde una URL
*
- * @return int con el tiempo en segundos
+ * @param $url string La URL
+ * @return bool|string
*/
- public static function getSessionLifeTime()
+ private static function getDataFromUrl($url)
{
- $timeout = SP_Common::parseParams('s', 'session_timeout', 0);
-
- if ($timeout === 0) {
- $timeout = $_SESSION['session_timeout'] = SP_Config::getValue('session_timeout', 60 * 5);
+ if (!self::curlIsAvailable() || !Config::getValue('checkupdates')) {
+ return false;
}
- return $timeout;
- }
+ $ch = curl_init($url);
- /**
- * Devolver el lenguaje detectado o definido
- *
- * @param bool $short si se tiene que devolver en formato de 2 caracteres
- * @return string con el lenguaje en formato xx_XX ó xx
- */
- public static function getLanguage($short = true)
- {
- if ($short) {
- return (substr(SP_Init::$LANG, 0, 2));
+ if (Config::getValue('proxy_enabled')){
+ curl_setopt($ch, CURLOPT_PROXY, Config::getValue('proxy_server'));
+ curl_setopt($ch, CURLOPT_PROXYPORT, Config::getValue('proxy_port'));
+ curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
+
+ $proxyUser = Config::getValue('proxy_user');
+
+ if ($proxyUser) {
+ $proxyAuth = $proxyUser . ':' . Config::getValue('proxy_pass');
+ curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyAuth);
+ }
}
- return SP_Init::$LANG;
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($ch, CURLOPT_HEADER, 0);
+ curl_setopt($ch, CURLOPT_USERAGENT, "sysPass-App");
+ curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
+ curl_setopt($ch, CURLOPT_TIMEOUT, 60);
+
+ $data = curl_exec($ch);
+
+ if ($data === false) {
+ Log::writeNewLog(__FUNCTION__, curl_error($ch));
+
+ return false;
+ }
+
+ return $data;
}
}
\ No newline at end of file
diff --git a/inc/XmlExport.class.php b/inc/XmlExport.class.php
new file mode 100644
index 00000000..2e0bd99e
--- /dev/null
+++ b/inc/XmlExport.class.php
@@ -0,0 +1,474 @@
+.
+ *
+ */
+
+namespace SP;
+
+/**
+ * Clase XmlExport para realizar la exportación de las cuentas de sysPass a formato XML
+ *
+ * @package SP
+ */
+class XmlExport
+{
+ /**
+ * @var \DOMDocument
+ */
+ private $_xml;
+ /**
+ * @var \DOMElement
+ */
+ private $_root;
+ /**
+ * @var string
+ */
+ private $_exportPass = null;
+ /**
+ * @var bool
+ */
+ private $_encrypted = false;
+ /**
+ * @var string
+ */
+ private $_exportDir = '';
+ /**
+ * @var string
+ */
+ private $_exportFile = '';
+
+ /**
+ * Constructor
+ */
+ public function __construct()
+ {
+ $this->_xml = new \DOMDocument('1.0', 'UTF-8');
+ }
+
+ /**
+ * Realiza la exportación de las cuentas a XML
+ *
+ * @param null $pass string La clave de exportación
+ * @return bool
+ */
+ public static function doExport($pass = null)
+ {
+ $xml = new XmlExport();
+
+ if (!is_null($pass) && !empty($pass)) {
+ $xml->setExportPass($pass);
+ $xml->setEncrypted(true);
+ }
+
+ $xml->setExportDir(Init::$SERVERROOT . DIRECTORY_SEPARATOR . 'backup');
+ $xml->setExportFile();
+
+ return $xml->makeXML();
+ }
+
+ /**
+ * Establecer la clave de exportación
+ *
+ * @param string $exportPass
+ */
+ public function setExportPass($exportPass)
+ {
+ $this->_exportPass = $exportPass;
+ }
+
+ /**
+ * @param boolean $encrypted
+ */
+ public function setEncrypted($encrypted)
+ {
+ $this->_encrypted = $encrypted;
+ }
+
+ /**
+ * Crear el documento XML y guardarlo
+ *
+ * @return bool
+ */
+ public function makeXML()
+ {
+ try {
+ $this->checkExportDir();
+ $this->createRoot();
+ $this->createMeta();
+ $this->createCategories();
+ $this->createCustomers();
+ $this->createAccounts();
+ $this->createHash();
+ $this->writeXML();
+ } catch (SPException $e) {
+ Log::writeNewLog(_('Exportar XML'), sprintf('%s (%s)', $e->getMessage(), $e->getHint()));
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Crear el nodo raíz
+ *
+ * @throws SPException
+ */
+ private function createRoot()
+ {
+ try {
+ $root = $this->_xml->createElement('Root');
+ $this->_root = $this->_xml->appendChild($root);
+ } catch (\DOMException $e) {
+ throw new SPException(SPException::SP_WARNING, $e->getMessage(), __FUNCTION__);
+ }
+ }
+
+ /**
+ * Crear el nodo con metainformación del archivo XML
+ *
+ * @throws SPException
+ */
+ private function createMeta()
+ {
+ try {
+ $nodeMeta = $this->_xml->createElement('Meta');
+ $metaGenerator = $this->_xml->createElement('Generator', 'sysPass');
+ $metaVersion = $this->_xml->createElement('Version', implode('.', Util::getVersion()));
+ $metaTime = $this->_xml->createElement('Time', time());
+ $metaUser = $this->_xml->createElement('User', Session::getUserLogin());
+ $metaUser->setAttribute('id', Session::getUserId());
+ $metaGroup = $this->_xml->createElement('Group', Session::getUserGroupName());
+ $metaGroup->setAttribute('id', Session::getUserGroupId());
+
+ $nodeMeta->appendChild($metaGenerator);
+ $nodeMeta->appendChild($metaVersion);
+ $nodeMeta->appendChild($metaTime);
+ $nodeMeta->appendChild($metaUser);
+ $nodeMeta->appendChild($metaGroup);
+
+ $this->_root->appendChild($nodeMeta);
+ } catch (\DOMException $e) {
+ throw new SPException(SPException::SP_WARNING, $e->getMessage(), __FUNCTION__);
+ }
+ }
+
+ /**
+ * Crear el nodo con los datos de las categorías
+ *
+ * @throws SPException
+ */
+ private function createCategories()
+ {
+ $categories = Category::getCategories();
+
+ if (count($categories) === 0) {
+ return;
+ }
+
+ try {
+ // Crear el nodo de categorías
+ $nodeCategories = $this->_xml->createElement('Categories');
+
+ foreach ($categories as $category) {
+ $categoryName = $this->_xml->createElement('name', $this->escapeChars($category->category_name));
+ $categoryDescription = $this->_xml->createElement('description', $this->escapeChars($category->category_description));
+
+ // Crear el nodo de categoría
+ $nodeCategory = $this->_xml->createElement('Category');
+ $nodeCategory->setAttribute('id', $category->category_id);
+ $nodeCategory->appendChild($categoryName);
+ $nodeCategory->appendChild($categoryDescription);
+
+ // Añadir categoría al nodo de categorías
+ $nodeCategories->appendChild($nodeCategory);
+ }
+
+ $this->appendNode($nodeCategories);
+ } catch (\DOMException $e) {
+ throw new SPException(SPException::SP_WARNING, $e->getMessage(), __FUNCTION__);
+ }
+ }
+
+ /**
+ * Escapar carácteres no válidos en XML
+ *
+ * @param $data string Los datos a escapar
+ * @return mixed
+ */
+ private function escapeChars($data)
+ {
+ $arrStrFrom = array("&", "<", ">", "\"", "\'");
+ $arrStrTo = array("&", "<", ">", """, "'");
+
+ return str_replace($arrStrFrom, $arrStrTo, $data);
+ }
+
+ /**
+ * Añadir un nuevo nodo al árbol raíz
+ *
+ * @param \DOMElement $node El nodo a añadir
+ * @throws SPException
+ */
+ private function appendNode(\DOMElement $node)
+ {
+ try {
+ // Si se utiliza clave de encriptación los datos se encriptan en un nuevo nodo:
+ // Encrypted -> Data
+ if ($this->_encrypted === true) {
+ // Obtener el nodo en formato XML
+ $nodeXML = $this->_xml->saveXML($node);
+
+ // Crear los datos encriptados con la información del nodo
+ $encrypted = Crypt::mkEncrypt($nodeXML, $this->_exportPass);
+ $encryptedIV = Crypt::$strInitialVector;
+
+ // Buscar si existe ya un nodo para el conjunto de datos encriptados
+ $encryptedNode = $this->_root->getElementsByTagName('Encrypted')->item(0);
+
+ if (!$encryptedNode instanceof \DOMElement) {
+ $encryptedNode = $this->_xml->createElement('Encrypted');
+ }
+
+ // Crear el nodo hijo con los datos encriptados
+ $encryptedData = $this->_xml->createElement('Data', base64_encode($encrypted));
+
+ $encryptedDataIV = $this->_xml->createAttribute('iv');
+ $encryptedDataIV->value = base64_encode($encryptedIV);
+
+ // Añadir nodos de datos
+ $encryptedData->appendChild($encryptedDataIV);
+ $encryptedNode->appendChild($encryptedData);
+
+ // Añadir el nodo encriptado
+ $this->_root->appendChild($encryptedNode);
+ } else {
+ $this->_root->appendChild($node);
+ }
+ } catch (\DOMException $e) {
+ throw new SPException(SPException::SP_WARNING, $e->getMessage(), __FUNCTION__);
+ }
+ }
+
+ /**
+ * Crear el nodo con los datos de los clientes
+ *
+ * #@throws SPException
+ */
+ private function createCustomers()
+ {
+ $customers = Customer::getCustomers();
+
+ if (count($customers) === 0) {
+ return;
+ }
+
+ try {
+ // Crear el nodo de clientes
+ $nodeCustomers = $this->_xml->createElement('Customers');
+
+ foreach ($customers as $customer) {
+ $customerName = $this->_xml->createElement('name', $this->escapeChars($customer->customer_name));
+ $customerDescription = $this->_xml->createElement('description', $this->escapeChars($customer->customer_description));
+
+ // Crear el nodo de categoría
+ $nodeCustomer = $this->_xml->createElement('Customer');
+ $nodeCustomer->setAttribute('id', $customer->customer_id);
+ $nodeCustomer->appendChild($customerName);
+ $nodeCustomer->appendChild($customerDescription);
+
+ // Añadir categoría al nodo de categorías
+ $nodeCustomers->appendChild($nodeCustomer);
+ }
+
+ $this->appendNode($nodeCustomers);
+ } catch (\DOMException $e) {
+ throw new SPException(SPException::SP_WARNING, $e->getMessage(), __FUNCTION__);
+ }
+ }
+
+ /**
+ * Crear el nodo con los datos de las cuentas
+ *
+ * @throws SPException
+ */
+ private function createAccounts()
+ {
+ $accounts = Account::getAccountsData();
+
+ if (count($accounts) === 0) {
+ return;
+ }
+
+ try {
+ // Crear el nodo de cuentas
+ $nodeAccounts = $this->_xml->createElement('Accounts');
+
+ foreach ($accounts as $account) {
+ $accountName = $this->_xml->createElement('name', $this->escapeChars($account->account_name));
+ $accountCustomerId = $this->_xml->createElement('customerId', $account->account_customerId);
+ $accountCategoryId = $this->_xml->createElement('categoryId', $account->account_categoryId);
+ $accountLogin = $this->_xml->createElement('login', $this->escapeChars($account->account_login));
+ $accountUrl = $this->_xml->createElement('url', $this->escapeChars($account->account_url));
+ $accountNotes = $this->_xml->createElement('notes', $this->escapeChars($account->account_notes));
+ $accountPass = $this->_xml->createElement('pass', $this->escapeChars(base64_encode($account->account_pass)));
+ $accountIV = $this->_xml->createElement('passiv', $this->escapeChars(base64_encode($account->account_IV)));
+
+ // Crear el nodo de cuenta
+ $nodeAccount = $this->_xml->createElement('Account');
+ $nodeAccount->setAttribute('id', $account->account_id);
+ $nodeAccount->appendChild($accountName);
+ $nodeAccount->appendChild($accountCustomerId);
+ $nodeAccount->appendChild($accountCategoryId);
+ $nodeAccount->appendChild($accountLogin);
+ $nodeAccount->appendChild($accountUrl);
+ $nodeAccount->appendChild($accountNotes);
+ $nodeAccount->appendChild($accountPass);
+ $nodeAccount->appendChild($accountIV);
+
+ // Añadir cuenta al nodo de cuentas
+ $nodeAccounts->appendChild($nodeAccount);
+ }
+
+ $this->appendNode($nodeAccounts);
+ } catch (\DOMException $e) {
+ throw new SPException(SPException::SP_WARNING, $e->getMessage(), __FUNCTION__);
+ }
+ }
+
+ /**
+ * Crear el hash del archivo XML e insertarlo en el árbol DOM
+ */
+ private function createHash()
+ {
+ try {
+ if ($this->_encrypted === true) {
+ $hash = md5($this->getNodeXML('Encrypted'));
+ } else {
+ $hash = md5($this->getNodeXML('Categories') . $this->getNodeXML('Customers') . $this->getNodeXML('Accounts'));
+ }
+
+ $metaHash = $this->_xml->createElement('Hash', $hash);
+
+ $nodeMeta = $this->_root->getElementsByTagName('Meta')->item(0);
+ $nodeMeta->appendChild($metaHash);
+ } catch (\DOMException $e) {
+ throw new SPException(SPException::SP_WARNING, $e->getMessage(), __FUNCTION__);
+ }
+ }
+
+ /**
+ * Devuelve el código XML de un nodo
+ *
+ * @param $node string El nodo a devolver
+ * @return string
+ * @throws SPException
+ */
+ private function getNodeXML($node)
+ {
+ try {
+ $nodeXML = $this->_xml->saveXML($this->_root->getElementsByTagName($node)->item(0));
+ return $nodeXML;
+ } catch (\DOMException $e) {
+ throw new SPException(SPException::SP_WARNING, $e->getMessage(), __FUNCTION__);
+ }
+ }
+
+ /**
+ * Generar el archivo XML
+ *
+ * @return bool
+ * @throws SPException
+ */
+ private function writeXML()
+ {
+ try {
+ $this->_xml->formatOutput = true;
+ $this->_xml->preserveWhiteSpace = false;
+
+ if (!$this->_xml->save($this->_exportFile)) {
+ throw new SPException(SPException::SP_CRITICAL, _('Error al crear el archivo XML'));
+ }
+ } catch (\DOMException $e) {
+ throw new SPException(SPException::SP_WARNING, $e->getMessage(), __FUNCTION__);
+ }
+ }
+
+ /**
+ * Genera el nombre del archivo usado para la exportación.
+ */
+ private function setExportFile()
+ {
+ // Generar hash unico para evitar descargas no permitidas
+ $exportUniqueHash = uniqid();
+ Config::setValue('export_hash', $exportUniqueHash);
+
+ $this->_exportFile = $this->_exportDir . DIRECTORY_SEPARATOR . Util::getAppInfo('appname') . '-' . $exportUniqueHash . '.xml';
+ }
+
+ /**
+ * @param string $exportDir
+ */
+ public function setExportDir($exportDir)
+ {
+ $this->_exportDir = $exportDir;
+ }
+
+ /**
+ * Devolver el archivo XML con las cabeceras HTTP
+ */
+ private function sendFileToBrowser($file)
+ {
+ // Enviamos el archivo al navegador
+ header('Set-Cookie: fileDownload=true; path=/');
+ header('Cache-Control: max-age=60, must-revalidate');
+ header("Content-length: " . filesize($file));
+ Header('Content-type: text/xml');
+// header("Content-type: " . filetype($this->_exportFile));
+ header("Content-Disposition: attachment; filename=\"$file\"");
+ header("Content-Description: PHP Generated Data");
+// header("Content-transfer-encoding: binary");
+
+ return file_get_contents($file);
+ }
+
+ /**
+ * Comprobar y crear el directorio de exportación.
+ *
+ * @throws SPException
+ * @return bool
+ */
+ private function checkExportDir()
+ {
+ if (!is_dir($this->_exportDir)) {
+ if (!@mkdir($this->_exportDir, 0550)) {
+ throw new SPException(SPException::SP_CRITICAL, _('No es posible crear el directorio de backups') . ' (' . $this->_exportDir . ')');
+ }
+ }
+
+ if (!is_writable($this->_exportDir)) {
+ throw new SPException(SPException::SP_CRITICAL, _('Compruebe los permisos del directorio de backups'));
+ }
+
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/inc/XmlImport.class.php b/inc/XmlImport.class.php
new file mode 100644
index 00000000..19e23955
--- /dev/null
+++ b/inc/XmlImport.class.php
@@ -0,0 +1,71 @@
+.
+ *
+ */
+
+namespace SP;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+/**
+ * Clase XmlImport para usarla como envoltorio para llamar a la clase que corresponda
+ * según el tipo de archivo XML detectado.
+ *
+ * @package SP
+ */
+class XmlImport extends XmlImportBase
+{
+ /**
+ * Iniciar la importación desde XML.
+ *
+ * @throws SPException
+ * @return bool
+ */
+ public function doImport()
+ {
+ $import = null;
+ $format = $this->detectXMLFormat();
+
+ switch ($format) {
+ case 'syspass':
+ $import = new SyspassImport($this->_file);
+ break;
+ case 'keepass':
+ $import = new KeepassImport($this->_file);
+ break;
+ case 'keepassx':
+ $import = new KeepassXImport($this->_file);
+ break;
+ }
+
+ if (is_object($import)){
+ Log::writeNewLog(_('Importar Cuentas'), _('Inicio'));
+ Log::writeNewLog(_('Importar Cuentas'), _('Formato detectado') . ': ' . strtoupper($format));
+
+ $import->setUserId($this->getUserId());
+ $import->setUserGroupId($this->getUserGroupId());
+ $import->setImportPass($this->getImportPass());
+ $import->doImport();
+ }
+ }
+}
\ No newline at end of file
diff --git a/inc/XmlImportBase.class.php b/inc/XmlImportBase.class.php
new file mode 100644
index 00000000..1f3d9c1b
--- /dev/null
+++ b/inc/XmlImportBase.class.php
@@ -0,0 +1,110 @@
+.
+ *
+ */
+
+namespace SP;
+
+defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+
+abstract class XmlImportBase extends ImportBase
+{
+ /**
+ * @var \SimpleXMLElement
+ */
+ protected $_xml;
+ /**
+ * @var \DOMDocument
+ */
+ protected $_xmlDOM;
+
+ /**
+ * Constructor
+ *
+ * @param $file FileImport Instancia de la clase FileImport
+ * @throws SPException
+ */
+ public function __construct($file)
+ {
+ try {
+ $this->_file = $file;
+ $this->readXMLFile();
+ } catch (SPException $e) {
+ throw $e;
+ }
+ }
+
+ /**
+ * Leer el archivo a un objeto XML.
+ *
+ * @throws SPException
+ * @return \SimpleXMLElement Con los datos del archivo XML
+ */
+ protected function readXMLFile()
+ {
+ $this->_xml = simplexml_load_file($this->_file->getTmpFile());
+
+ // Cargar el XML con DOM
+ $this->_xmlDOM = new \DOMDocument();
+ $this->_xmlDOM->load($this->_file->getTmpFile());
+
+ if ($this->_xml === false) {
+ throw new SPException(
+ SPException::SP_CRITICAL,
+ _('Error interno'),
+ _('No es posible procesar el archivo XML')
+ );
+ }
+ }
+
+ /**
+ * Detectar la aplicación que generó el XML.
+ *
+ * @throws SPException
+ */
+ public function detectXMLFormat()
+ {
+ if ($this->_xml->Meta->Generator == 'KeePass') {
+ return 'keepass';
+ } else if ($this->_xml->Meta->Generator == 'sysPass') {
+ return 'syspass';
+ } else if ($xmlApp = $this->parseFileHeader()) {
+ switch ($xmlApp) {
+ case 'keepassx_database':
+ return 'keepassx';
+ case 'revelationdata':
+ return 'revelation';
+ default:
+ break;
+ }
+ } else {
+ throw new SPException(
+ SPException::SP_CRITICAL,
+ _('Archivo XML no soportado'),
+ _('No es posible detectar la aplicación que exportó los datos')
+ );
+ }
+
+ return '';
+ }
+}
\ No newline at end of file
diff --git a/inc/account.class.php b/inc/account.class.php
deleted file mode 100644
index 97c370c9..00000000
--- a/inc/account.class.php
+++ /dev/null
@@ -1,1192 +0,0 @@
-.
- *
- */
-
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
-
-/**
- * Esta clase es la encargada de realizar las operaciones sobre las cuentas de sysPass.
- */
-class SP_Account
-{
- static $accountSearchTxt;
- static $accountSearchCustomer;
- static $accountSearchCategory;
- static $accountSearchOrder;
- static $accountSearchKey;
-
- var $accountId;
- var $accountParentId;
- var $accountUserId;
- var $accountUsersId;
- var $accountUserGroupId;
- var $accountUserGroupsId;
- var $accountUserEditId;
- var $accountName;
- var $accountCustomerId;
- var $accountCategoryId;
- var $accountLogin;
- var $accountUrl;
- var $accountPass;
- var $accountIV;
- var $accountNotes;
- var $accountOtherUserEdit;
- var $accountOtherGroupEdit;
- var $accountModHash;
-
- var $lastAction;
- var $lastId;
- var $query; // Variable de consulta
- var $queryNumRows;
- var $accountIsHistory = 0; // Variable para indicar si la cuenta es desde el histórico
- var $accountCacheUserGroupsId; // Cache para grupos de usuarios de las cuentas
- var $accountCacheUsersId; // Cache para usuarios de las cuentas
-
- // Variable para la caché de parámetros
- var $cacheParams;
-
- /**
- * Obtener los datos de usuario y modificador de una cuenta.
- *
- * @param int $accountId con el Id de la cuenta
- * @return false|object con el id de usuario y modificador.
- */
- public static function getAccountRequestData($accountId)
- {
- $query = "SELECT account_userId,"
- . "account_userEditId,"
- . "account_name,"
- . "customer_name "
- . "FROM accounts "
- . "LEFT JOIN customers ON account_customerId = customer_id "
- . "WHERE account_id = " . (int)$accountId . " LIMIT 1";
- $queryRes = DB::getResults($query, __FUNCTION__);
-
- if ($queryRes === false) {
- return false;
- }
-
- return $queryRes;
- }
-
- /**
- * Obtiene el listado con el nombre de los usuaios de una cuenta.
- *
- * @param int $accountId con el Id de la cuenta
- * @return false|array con los nombres de los usuarios ordenados
- */
- public static function getAccountUsersName($accountId)
- {
- $query = "SELECT user_name "
- . "FROM accUsers "
- . "JOIN usrData ON accuser_userId = user_id "
- . "WHERE accuser_accountId = " . (int)$accountId;
-
- $queryRes = DB::getResults($query, __FUNCTION__);
-
- if ($queryRes === false) {
- return false;
- }
-
- if (!is_array($queryRes)) {
- return false;
- }
-
- foreach ($queryRes as $users) {
- $usersName[] = $users->user_name;
- }
-
- sort($usersName, SORT_STRING);
-
- return $usersName;
- }
-
- /**
- * Obtener las cuentas de una búsqueda.
- *
- * @param array $searchFilter Filtros de búsqueda
- * @return bool Resultado de la consulta
- */
- public function getAccounts($searchFilter)
- {
- $isAdmin = ($_SESSION["uisadminapp"] || $_SESSION["uisadminacc"]);
- $globalSearch = (SP_Config::getValue('globalsearch', 0) && $searchFilter["globalSearch"] === 1);
-
- $arrFilterCommon = array();
- $arrFilterSelect = array();
- $arrFilterUser = array();
- $arrQueryWhere = array();
-
- switch ($searchFilter["keyId"]) {
- case 1:
- $orderKey = "account_name";
- break;
- case 2:
- $orderKey = "category_name";
- break;
- case 3:
- $orderKey = "account_login";
- break;
- case 4:
- $orderKey = "account_url";
- break;
- case 5:
- $orderKey = "account_customerId";
- break;
- default :
- $orderKey = "customer_name, account_name";
- break;
- }
-
- $querySelect = "SELECT SQL_CALC_FOUND_ROWS DISTINCT "
- . "account_id,"
- . "account_customerId,"
- . "category_name,"
- . "account_name,"
- . "account_login,"
- . "account_url,"
- . "account_notes,"
- . "account_userId,"
- . "account_userGroupId,"
- . "account_otherUserEdit,"
- . "account_otherGroupEdit,"
- . "usergroup_name,"
- . "customer_name "
- . "FROM accounts "
- . "LEFT JOIN categories ON account_categoryId = category_id "
- . "LEFT JOIN usrGroups ug ON account_userGroupId = usergroup_id "
- . "LEFT JOIN customers ON customer_id = account_customerId "
- . "LEFT JOIN accUsers ON accuser_accountId = account_id "
- . "LEFT JOIN accGroups ON accgroup_accountId = account_id";
-
- if ($searchFilter["txtSearch"]) {
- $arrFilterCommon[] = "account_name LIKE '%" . DB::escape($searchFilter["txtSearch"]) . "%'";
- $arrFilterCommon[] = "account_login LIKE '%" . DB::escape($searchFilter["txtSearch"]) . "%'";
- $arrFilterCommon[] = "account_url LIKE '%" . DB::escape($searchFilter["txtSearch"]) . "%'";
- $arrFilterCommon[] = "account_notes LIKE '%" . DB::escape($searchFilter["txtSearch"]) . "%'";
- }
-
- if ($searchFilter["categoryId"] != 0) {
- $arrFilterSelect[] = "category_id = " . $searchFilter["categoryId"];
- }
- if ($searchFilter["customerId"] != 0) {
- $arrFilterSelect[] = "account_customerId = " . $searchFilter["customerId"];
- }
-
-
- if (count($arrFilterCommon) > 0) {
- $arrQueryWhere[] = "(" . implode(" OR ", $arrFilterCommon) . ")";
- }
-
- if (count($arrFilterSelect) > 0) {
- $arrQueryWhere[] = "(" . implode(" AND ", $arrFilterSelect) . ")";
- }
-
- if (!$isAdmin && !$globalSearch) {
- $arrFilterUser[] = "account_userGroupId = " . (int)$searchFilter["groupId"];
- $arrFilterUser[] = "account_userId = " . $searchFilter["userId"];
- $arrFilterUser[] = "accgroup_groupId = " . $searchFilter["groupId"];
- $arrFilterUser[] = "accuser_userId = " . $searchFilter["userId"];
-
- $arrQueryWhere[] = "(" . implode(" OR ", $arrFilterUser) . ")";
- }
-
- $order = ($searchFilter["txtOrder"] == 0) ? 'ASC' : 'DESC';
-
- $queryOrder = " ORDER BY $orderKey " . $order;
-
- if ($searchFilter["limitCount"] != 99) {
- $queryLimit = "LIMIT " . $searchFilter["limitStart"] . ", " . $searchFilter["limitCount"];
- }
-
- if (count($arrQueryWhere) === 1) {
- $query = $querySelect . " WHERE " . implode($arrQueryWhere) . " " . $queryOrder . " " . $queryLimit;
- } elseif (count($arrQueryWhere) > 1) {
- $query = $querySelect . " WHERE " . implode(" AND ", $arrQueryWhere) . " " . $queryOrder . " " . $queryLimit;
- } else {
- $query = $querySelect . $queryOrder . " " . $queryLimit;
- }
-
- $this->query = $query;
-
- // Consulta de la búsqueda de cuentas
- $queryRes = DB::getResults($query, __FUNCTION__, true);
-
- if ($queryRes === false) {
- return false;
- }
-
- // Obtenemos el número de registros totales de la consulta sin contar el LIMIT
- $resQueryNumRows = DB::getResults("SELECT FOUND_ROWS() as numRows", __FUNCTION__);
- $this->queryNumRows = $resQueryNumRows->numRows;
-
- $_SESSION["accountSearchTxt"] = $searchFilter["txtSearch"];
- $_SESSION["accountSearchCustomer"] = $searchFilter["customerId"];
- $_SESSION["accountSearchCategory"] = $searchFilter["categoryId"];
- $_SESSION["accountSearchOrder"] = $searchFilter["txtOrder"];
- $_SESSION["accountSearchKey"] = $searchFilter["keyId"];
- $_SESSION["accountSearchStart"] = $searchFilter["limitStart"];
- $_SESSION["accountSearchLimit"] = $searchFilter["limitCount"];
- $_SESSION["accountGlobalSearch"] = $searchFilter["globalSearch"];
-
- return $queryRes;
- }
-
- /**
- * Obtener los datos del histórico de una cuenta.
- * Esta funcion realiza la consulta a la BBDD y guarda los datos del histórico
- * en las variables de la clase.
- *
- * @return false|object
- */
- public function getAccountHistory()
- {
- $query = "SELECT acchistory_accountId as account_id,"
- . "acchistory_customerId as account_customerId,"
- . "acchistory_categoryId as account_categoryId,"
- . "acchistory_name as account_name,"
- . "acchistory_login as account_login,"
- . "acchistory_url as account_url,"
- . "acchistory_pass as account_pass,"
- . "acchistory_IV as account_IV,"
- . "acchistory_notes as account_notes,"
- . "acchistory_countView as account_countView,"
- . "acchistory_countDecrypt as account_countDecrypt,"
- . "acchistory_dateAdd as account_dateAdd,"
- . "acchistory_dateEdit as account_dateEdit,"
- . "acchistory_userId as account_userId,"
- . "acchistory_userGroupId as account_userGroupId,"
- . "acchistory_userEditId as account_userEditId,"
- . "acchistory_isModify,"
- . "acchistory_isDeleted,"
- . "acchistory_otherUserEdit as account_otherUserEdit,"
- . "acchistory_otherGroupEdit as account_otherGroupEdit,"
- . "u1.user_name,"
- . "u1.user_login,"
- . "usergroup_name,"
- . "u2.user_name as user_editName,"
- . "u2.user_login as user_editLogin,"
- . "category_name, customer_name "
- . "FROM accHistory "
- . "LEFT JOIN categories ON acchistory_categoryId = category_id "
- . "LEFT JOIN usrGroups ON acchistory_userGroupId = usergroup_id "
- . "LEFT JOIN usrData u1 ON acchistory_userId = u1.user_id "
- . "LEFT JOIN usrData u2 ON acchistory_userEditId = u2.user_id "
- . "LEFT JOIN customers ON acchistory_customerId = customer_id "
- . "WHERE acchistory_id = " . (int)$this->accountId . " LIMIT 1";
-
- $queryRes = DB::getResults($query, __FUNCTION__);
-
- if ($queryRes === false) {
- return false;
- }
-
- $this->accountUserId = $queryRes->account_userId;
- $this->accountUserGroupId = $queryRes->account_userGroupId;
- $this->accountOtherUserEdit = $queryRes->account_otherUserEdit;
- $this->accountOtherGroupEdit = $queryRes->account_otherGroupEdit;
-
- return $queryRes;
- }
-
- /**
- * Actualiza los datos de una cuenta en la BBDD.
- *
- * @param bool $isRestore si es una restauración de cuenta
- * @return bool
- */
- public function updateAccount($isRestore = false)
- {
- $message['action'][] = __FUNCTION__;
-
- // Guardamos una copia de la cuenta en el histórico
- if (!$this->addHistory($this->accountId, $this->accountUserEditId, false)) {
- $message['text'][] = _('Error al actualizar el historial');
- SP_Log::wrLogInfo($message);
- return false;
- }
-
- if (!$isRestore) {
- $message['action'] = _('Actualizar Cuenta');
-
- if (!SP_Groups::updateGroupsForAccount($this->accountId, $this->accountUserGroupsId)) {
- $message['text'][] = _('Error al actualizar los grupos secundarios');
- SP_Log::wrLogInfo($message);
- $message['text'] = array();
- }
-
- if (!SP_Users::updateUsersForAccount($this->accountId, $this->accountUsersId)) {
- $message['text'][] = _('Error al actualizar los usuarios de la cuenta');
- SP_Log::wrLogInfo($message);
- $message['text'] = array();
- }
- } else {
- $message['action'] = _('Restaurar Cuenta');
- }
-
- $query = "UPDATE accounts SET "
- . "account_customerId = " . (int)$this->accountCustomerId . ","
- . "account_categoryId = " . (int)$this->accountCategoryId . ","
- . "account_name = '" . DB::escape($this->accountName) . "',"
- . "account_login = '" . DB::escape($this->accountLogin) . "',"
- . "account_url = '" . DB::escape($this->accountUrl) . "',"
- . "account_notes = '" . DB::escape($this->accountNotes) . "',"
- . "account_userEditId = " . (int)$this->accountUserEditId . ","
- . "account_dateEdit = NOW(), "
- . "account_otherUserEdit = " . (int)$this->accountOtherUserEdit . ","
- . "account_otherGroupEdit = " . (int)$this->accountOtherGroupEdit . " "
- . "WHERE account_id = " . (int)$this->accountId;
-
-
- if (DB::doQuery($query, __FUNCTION__) === false) {
- return false;
- }
-
- $accountInfo = array('customer_name');
- $this->getAccountInfoById($accountInfo);
-
- $message['action'] = _('Cuenta actualizada');
- $message['text'][] = SP_Html::strongText(_('Cliente') . ": ") . $this->cacheParams['customer_name'];
- $message['text'][] = SP_Html::strongText(_('Cuenta') . ": ") . "$this->accountName ($this->accountId)";
-
- SP_Log::wrLogInfo($message);
- SP_Common::sendEmail($message);
-
- return true;
- }
-
- /**
- * Crear un nuevo registro de histório de cuenta en la BBDD.
- *
- * @param bool $isDelete indica que la cuenta es eliminada
- * @return bool
- */
- private function addHistory($isDelete = false)
- {
- $objAccountHist = new SP_Account;
-
- $objAccountHist->accountId = $this->accountId;
- $accountData = $objAccountHist->getAccount();
-
- $isModify = ($isDelete === false) ? 1 : 0;
- $isDelete = ($isDelete === false) ? 0 : 1;
-
- $query = "INSERT INTO accHistory SET "
- . "acchistory_accountId = " . $objAccountHist->accountId . ","
- . "acchistory_categoryId = " . $accountData->account_categoryId . ","
- . "acchistory_customerId = " . $accountData->account_customerId . ","
- . "acchistory_name = '" . DB::escape($accountData->account_name) . "',"
- . "acchistory_login = '" . DB::escape($accountData->account_login) . "',"
- . "acchistory_url = '" . DB::escape($accountData->account_url) . "',"
- . "acchistory_pass = '" . DB::escape($accountData->account_pass) . "',"
- . "acchistory_IV = '" . DB::escape($accountData->account_IV) . "',"
- . "acchistory_notes = '" . DB::escape($accountData->account_notes) . "',"
- . "acchistory_countView = " . $accountData->account_countView . ","
- . "acchistory_countDecrypt = " . $accountData->account_countDecrypt . ","
- . "acchistory_dateAdd = '" . $accountData->account_dateAdd . "',"
- . "acchistory_dateEdit = '" . $accountData->account_dateEdit . "',"
- . "acchistory_userId = " . $accountData->account_userId . ","
- . "acchistory_userGroupId = " . $accountData->account_userGroupId . ","
- . "acchistory_userEditId = " . $accountData->account_userEditId . ","
- . "acchistory_isModify = " . $isModify . ","
- . "acchistory_isDeleted = " . $isDelete . ","
- . "acchistory_otherUserEdit = " . $accountData->account_otherUserEdit . ","
- . "acchistory_otherGroupEdit = " . $accountData->account_otherGroupEdit . ","
- . "acchistory_mPassHash = '" . DB::escape(SP_Config::getConfigValue('masterPwd')) . "'";
-
- if (DB::doQuery($query, __FUNCTION__) === false) {
- return false;
- }
-
- return true;
- }
-
- /**
- * Obtener los datos de una cuenta.
- * Esta funcion realiza la consulta a la BBDD y guarda los datos en las variables de la clase.
- *
- * @return object|false
- */
- public function getAccount()
- {
- $query = "SELECT account_id,"
- . "account_name,"
- . "account_categoryId,"
- . "account_userId,"
- . "account_customerId,"
- . "account_userGroupId,"
- . "account_userEditId,"
- . "category_name,"
- . "account_login,"
- . "account_url,"
- . "account_pass,"
- . "account_IV,"
- . "account_notes,"
- . "account_countView,"
- . "account_countDecrypt,"
- . "account_dateAdd,"
- . "account_dateEdit,"
- . "account_otherUserEdit,"
- . "account_otherGroupEdit,"
- . "u1.user_name,"
- . "u1.user_login,"
- . "u2.user_name as user_editName,"
- . "u2.user_login as user_editLogin,"
- . "usergroup_name,"
- . "customer_name, "
- . "CONCAT(account_name,account_categoryId,account_customerId,account_login,account_url,account_notes,BIN(account_otherUserEdit),BIN(account_otherGroupEdit)) as modHash "
- . "FROM accounts "
- . "LEFT JOIN categories ON account_categoryId = category_id "
- . "LEFT JOIN usrGroups ug ON account_userGroupId = usergroup_id "
- . "LEFT JOIN usrData u1 ON account_userId = u1.user_id "
- . "LEFT JOIN usrData u2 ON account_userEditId = u2.user_id "
- . "LEFT JOIN customers ON account_customerId = customer_id "
- . "WHERE account_id = " . (int)$this->accountId . " LIMIT 1";
-
- $queryRes = DB::getResults($query, __FUNCTION__);
-
- if ($queryRes === false) {
- return false;
- }
-
- $this->accountUserId = $queryRes->account_userId;
- $this->accountUserGroupId = $queryRes->account_userGroupId;
- $this->accountOtherUserEdit = $queryRes->account_otherUserEdit;
- $this->accountOtherGroupEdit = $queryRes->account_otherGroupEdit;
- $this->accountModHash = $queryRes->modHash;
-
- return $queryRes;
- }
-
- /**
- * Obtener los datos de una cuenta con el id.
- * Se guardan los datos en la variable $cacheParams de la clase para consultarlos
- * posteriormente.
- *
- * @param array $params con los campos de la BBDD a obtener
- * @return bool
- */
- private function getAccountInfoById($params)
- {
- if (!is_array($params)) {
- return false;
- }
-
- if (is_array($this->cacheParams)) {
- $cache = true;
-
- foreach ($params as $param) {
- if (!array_key_exists($param, $this->cacheParams)) {
- $cache = false;
- }
- }
-
- if ($cache) {
- return true;
- }
- }
-
- $query = "SELECT " . implode(',', $params) . " "
- . "FROM accounts "
- . "LEFT JOIN usrGroups ug ON account_userGroupId = usergroup_id "
- . "LEFT JOIN usrData u1 ON account_userId = u1.user_id "
- . "LEFT JOIN usrData u2 ON account_userEditId = u2.user_id "
- . "LEFT JOIN customers ON account_customerId = customer_id "
- . "WHERE account_id = " . (int)$this->accountId . " LIMIT 1";
- $queryRes = DB::getResults($query, __FUNCTION__);
-
- if ($queryRes === false) {
- return false;
- }
-
- foreach ($queryRes as $param => $value) {
- $this->cacheParams[$param] = $value;
- }
-
- return true;
- }
-
- /**
- * Crea una nueva cuenta en la BBDD
- *
- * @return bool
- */
- public function createAccount()
- {
- $query = "INSERT INTO accounts SET "
- . "account_customerId = " . (int)$this->accountCustomerId . ","
- . "account_categoryId = " . (int)$this->accountCategoryId . ","
- . "account_name = '" . DB::escape($this->accountName) . "',"
- . "account_login = '" . DB::escape($this->accountLogin) . "',"
- . "account_url = '" . DB::escape($this->accountUrl) . "',"
- . "account_pass = '" . DB::escape($this->accountPass). "',"
- . "account_IV = '" . DB::escape($this->accountIV) . "',"
- . "account_notes = '" . DB::escape($this->accountNotes) . "',"
- . "account_dateAdd = NOW(),"
- . "account_userId = " . (int)$this->accountUserId . ","
- . "account_userGroupId = " . (int)$this->accountUserGroupId . ","
- . "account_otherUserEdit = " . (int)$this->accountOtherUserEdit . ","
- . "account_otherGroupEdit = " . (int)$this->accountOtherGroupEdit;
-
- if (DB::doQuery($query, __FUNCTION__) === false) {
- return false;
- }
-
- $this->accountId = DB::$lastId;
-
- $message['action'] = __FUNCTION__;
-
- if (is_array($this->accountUserGroupsId)) {
- if (!SP_Groups::addGroupsForAccount($this->accountId, $this->accountUserGroupsId)) {
- $message['text'][] = _('Error al actualizar los grupos secundarios');
- SP_Log::wrLogInfo($message);
- $message['text'] = array();
- }
- }
-
- if (is_array($this->accountUsersId)) {
- if (!SP_Users::addUsersForAccount($this->accountId, $this->accountUsersId)) {
- $message['text'][] = _('Error al actualizar los usuarios de la cuenta');
- SP_Log::wrLogInfo($message);
- $message['text'] = array();
- }
- }
-
- $accountInfo = array('customer_name');
- $this->getAccountInfoById($accountInfo);
-
- $message['action'] = _('Nueva Cuenta');
- $message['text'][] = SP_Html::strongText(_('Cliente') . ": ") . $this->cacheParams['customer_name'];
- $message['text'][] = SP_Html::strongText(_('Cuenta') . ": ") . "$this->accountName ($this->accountId)";
-
- SP_Log::wrLogInfo($message);
- SP_Common::sendEmail($message);
-
- return true;
- }
-
- /**
- * Elimina los datos de una cuenta en la BBDD.
- *
- * @return bool
- */
- public function deleteAccount()
- {
- // Guardamos una copia de la cuenta en el histórico
- $this->addHistory(true) || die (_('ERROR: Error en la operación.'));
-
- $accountInfo = array('account_name,customer_name');
- $this->getAccountInfoById($accountInfo);
-
- $message['action'] = _('Eliminar Cuenta');
- $message['text'][] = SP_Html::strongText(_('Cliente') . ": ") . $this->cacheParams['customer_name'];
- $message['text'][] = SP_Html::strongText(_('Cuenta') . ": ") . $this->cacheParams['account_name'] . " ($this->accountId)";
-
- $query = "DELETE FROM accounts "
- . "WHERE account_id = " . (int)$this->accountId . " LIMIT 1";
-
- if (DB::doQuery($query, __FUNCTION__) === false) {
- return false;
- }
-
- if (!SP_Groups::deleteGroupsForAccount($this->accountId)) {
- $message['text'][] = _('Error al eliminar grupos asociados a la cuenta');
- }
-
- if (!SP_Users::deleteUsersForAccount($this->accountId)) {
- $message['text'][] = _('Error al eliminar usuarios asociados a la cuenta');
- }
-
- if (!SP_Files::deleteAccountFiles($this->accountId)) {
- $message['text'][] = _('Error al eliminar archivos asociados a la cuenta');
- }
-
- SP_Log::wrLogInfo($message);
- SP_Common::sendEmail($message);
-
- return true;
- }
-
- /**
- * Obtiene el listado del histórico de una cuenta.
- *
- * @return false|array Con los registros con id como clave y fecha - usuario como valor
- */
- public function getAccountHistoryList()
- {
- $query = "SELECT acchistory_id,"
- . "acchistory_dateEdit,"
- . "u1.user_login as user_edit,"
- . "u2.user_login as user_add,"
- . "acchistory_dateAdd "
- . "FROM accHistory "
- . "LEFT JOIN usrData u1 ON acchistory_userEditId = u1.user_id "
- . "LEFT JOIN usrData u2 ON acchistory_userId = u2.user_id "
- . "WHERE acchistory_accountId = " . $_SESSION["accParentId"] . " "
- . "ORDER BY acchistory_id DESC";
-
- $queryRes = DB::getResults($query, __FUNCTION__, true);
-
- if ($queryRes === false) {
- return false;
- }
-
- $arrHistory = array();
-
- foreach ($queryRes as $history) {
- if ($history->acchistory_dateEdit == '0000-00-00 00:00:00') {
- $arrHistory[$history->acchistory_id] = $history->acchistory_dateAdd . " - " . $history->user_add;
- } else {
- $arrHistory[$history->acchistory_id] = $history->acchistory_dateEdit . " - " . $history->user_edit;
- }
- }
-
- return $arrHistory;
- }
-
- /**
- * Incrementa el contador de visitas de una cuenta en la BBDD
- *
- * @return bool
- */
- public function incrementViewCounter()
- {
- $query = "UPDATE accounts "
- . "SET account_countView = (account_countView + 1) "
- . "WHERE account_id = " . (int)$this->accountId;
-
- if (DB::doQuery($query, __FUNCTION__) === false) {
- return false;
- }
-
- return true;
- }
-
- /**
- * Incrementa el contador de vista de clave de una cuenta en la BBDD
- *
- * @return bool
- */
- public function incrementDecryptCounter()
- {
- $query = "UPDATE accounts SET account_countDecrypt = (account_countDecrypt + 1) "
- . "WHERE account_id = " . (int)$this->accountId;
-
- if (DB::doQuery($query, __FUNCTION__) === false) {
- return false;
- }
-
- return true;
- }
-
- /**
- * Obtiene el número de cuentas que un usuario puede ver.
- *
- * @return false|int con el número de registros
- */
- public function getAccountMax()
- {
- $userGroupId = $_SESSION["ugroup"];
- $userId = $_SESSION["uid"];
- $userIsAdminApp = $_SESSION['uisadminapp'];
- $userIsAdminAcc = $_SESSION['uisadminacc'];
-
- if (!$userIsAdminApp && !$userIsAdminAcc) {
- $query = "SELECT COUNT(DISTINCT account_id) as numacc "
- . "FROM accounts "
- . "LEFT JOIN accGroups ON account_id = accgroup_accountId "
- . "WHERE account_userGroupId = " . (int)$userGroupId . " "
- . "OR account_userId = " . (int)$userId . " "
- . "OR accgroup_groupId = " . (int)$userGroupId;
- } else {
- $query = "SELECT COUNT(account_id) as numacc FROM accounts";
- }
-
- $queryRes = DB::getResults($query, __FUNCTION__);
-
- if ($queryRes === false) {
- return false;
- }
-
- return $queryRes->numacc;
- }
-
- /**
- * Actualiza las claves de todas las cuentas con la nueva clave maestra.
- *
- * @param string $currentMasterPass con la clave maestra actual
- * @param string $newMasterPass con la nueva clave maestra
- * @return bool
- */
- public function updateAllAccountsMPass($currentMasterPass, $newMasterPass)
- {
- $accountsOk = array();
- $userId = $_SESSION["uid"];
- $errorCount = 0;
- $demoEnabled = SP_Util::demoIsEnabled();
-
- $message['action'] = _('Actualizar Clave Maestra');
- $message['text'][] = _('Inicio');
-
- SP_Log::wrLogInfo($message);
-
- // Limpiar 'text' para los próximos mensajes
- $message['text'] = array();
-
- if (!SP_Crypt::checkCryptModule()) {
- $message['text'][] = _('Error en el módulo de encriptación');
- SP_Log::wrLogInfo($message);
- return false;
- }
-
- $accountsPass = $this->getAccountsPassData();
-
- if (!$accountsPass) {
- $message['text'][] = _('Error al obtener las claves de las cuentas');
- SP_Log::wrLogInfo($message);
- return false;
- }
-
- foreach ($accountsPass as $account) {
- $this->accountId = $account->account_id;
- $this->accountUserEditId = $userId;
-
- // No realizar cambios si está en modo demo
- if ($demoEnabled) {
- $accountsOk[] = $this->accountId;
- continue;
- }
-
- $decryptedPass = SP_Crypt::getDecrypt($account->account_pass, $currentMasterPass, $account->account_IV);
- $this->accountPass = SP_Crypt::mkEncrypt($decryptedPass, $newMasterPass);
- $this->accountIV = SP_Crypt::$strInitialVector;
-
- if ($this->accountPass === false) {
- $errorCount++;
- continue;
- }
-
- if (!$this->updateAccountPass(true)) {
- $errorCount++;
- $message['text'][] = _('Fallo al actualizar la clave de la cuenta') . "(" . $this->accountId . ")";
- }
- $accountsOk[] = $this->accountId;
- }
-
- // Vaciar el array de mensaje de log
- if (count($message['text']) > 0) {
- SP_Log::wrLogInfo($message);
- $message['text'] = array();
- }
-
- if ($accountsOk) {
- $message['text'][] = _('Cuentas actualizadas:') . ": " . implode(',', $accountsOk);
- SP_Log::wrLogInfo($message);
- $message['text'] = array();
- }
-
- $message['text'][] = _('Fin');
- SP_Log::wrLogInfo($message);
- SP_Common::sendEmail($message);
-
- if ($errorCount > 0) {
- return false;
- }
-
- return true;
- }
-
- /**
- * Obtener los datos relativos a la clave de todas las cuentas.
- *
- * @return false|array Con los datos de la clave
- */
- private function getAccountsPassData()
- {
- $query = "SELECT account_id,"
- . "account_pass,"
- . "account_IV "
- . "FROM accounts";
- $queryRes = DB::getResults($query, __FUNCTION__, true);
-
- if ($queryRes === false) {
- return false;
- }
-
- return $queryRes;
- }
-
- /**
- * Actualiza la clave de una cuenta en la BBDD.
- *
- * @param bool $isMassive para no actualizar el histórico ni enviar mensajes
- * @param bool $isRestore indica si es una restauración
- * @return bool
- */
- public function updateAccountPass($isMassive = false, $isRestore = false)
- {
- $message['action'] = __FUNCTION__;
-
- // No actualizar el histórico si es por cambio de clave maestra o restauración
- if (!$isMassive && !$isRestore) {
- // Guardamos una copia de la cuenta en el histórico
- if (!$this->addHistory($this->accountId, $this->accountUserEditId, false)) {
- $message['text'][] = _('Error al actualizar el historial');
- SP_Log::wrLogInfo($message);
- return false;
- }
- }
-
- $query = "UPDATE accounts SET "
- . "account_pass = '" . DB::escape($this->accountPass) . "',"
- . "account_IV = '" . DB::escape($this->accountIV) . "',"
- . "account_userEditId = " . (int)$this->accountUserEditId . ","
- . "account_dateEdit = NOW() "
- . "WHERE account_id = " . (int)$this->accountId;
-
- if (DB::doQuery($query, __FUNCTION__) === false) {
- return false;
- }
-
- // No escribir en el log ni enviar correos si la actualización es
- // por cambio de clave maestra o restauración
- if (!$isMassive && !$isRestore) {
- $accountInfo = array('customer_name', 'account_name');
- $this->getAccountInfoById($accountInfo);
-
- $message['action'] = _('Modificar Clave');
- $message['text'][] = SP_Html::strongText(_('Cliente') . ": ") . $this->cacheParams['customer_name'];
- $message['text'][] = SP_Html::strongText(_('Cuenta') . ": ") . $this->cacheParams['account_name'] . " ($this->accountId)";
-
- SP_Log::wrLogInfo($message);
- SP_Common::sendEmail($message);
- }
-
- return true;
- }
-
- /**
- * Actualiza las claves de todas las cuentas en el histórico con la nueva clave maestra.
- *
- * @param string $currentMasterPass con la clave maestra actual
- * @param string $newMasterPass con la nueva clave maestra
- * @param string $newHash con el nuevo hash de la clave maestra
- * @return bool
- */
- public function updateAllAccountsHistoryMPass($currentMasterPass, $newMasterPass, $newHash)
- {
- $idOk = array();
- $errorCount = 0;
- $demoEnabled = SP_Util::demoIsEnabled();
-
- $message['action'] = _('Actualizar Clave Maestra (H)');
- $message['text'][] = _('Inicio');
-
- SP_Log::wrLogInfo($message);
-
- // Limpiar 'text' para los próximos mensajes
- $message['text'] = array();
-
- if (!SP_Crypt::checkCryptModule()) {
- $message['text'][] = _('Error en el módulo de encriptación');
- SP_Log::wrLogInfo($message);
- return false;
- }
-
- $accountsPass = $this->getAccountsHistoryPassData();
-
- if (!$accountsPass) {
- $message['text'][] = _('Error al obtener las claves de las cuentas');
- SP_Log::wrLogInfo($message);
- return false;
- }
-
- foreach ($accountsPass as $account) {
- // No realizar cambios si está en modo demo
- if ($demoEnabled) {
- $idOk[] = $account->acchistory_id;
- continue;
- }
-
- if (!$this->checkAccountMPass($account->acchistory_id)) {
- $errorCount++;
- $message['text'][] = _('La clave maestra del registro no coincide') . " (" . $account->acchistory_id . ")";
- continue;
- }
-
- $decryptedPass = SP_Crypt::getDecrypt($account->acchistory_pass, $currentMasterPass, $account->acchistory_IV);
-
- $this->accountPass = SP_Crypt::mkEncrypt($decryptedPass, $newMasterPass);
- $this->accountIV = SP_Crypt::$strInitialVector;
-
- if ($this->accountPass === false) {
- $errorCount++;
- continue;
- }
-
- if (!$this->updateAccountHistoryPass($account->acchistory_id, $newHash)) {
- $errorCount++;
- $message['text'][] = _('Fallo al actualizar la clave del histórico') . " (" . $account->acchistory_id . ")";
- }
-
- $idOk[] = $account->acchistory_id;
- }
-
- // Vaciar el array de mensaje de log
- if (count($message['text']) > 0) {
- SP_Log::wrLogInfo($message);
- $message['text'] = array();
- }
-
- if ($idOk) {
- $message['text'][] = _('Registros actualizados:') . ": " . implode(',', $idOk);
- SP_Log::wrLogInfo($message);
- $message['text'] = array();
- }
-
- $message['text'][] = _('Fin');
- SP_Log::wrLogInfo($message);
-
- if ($errorCount > 0) {
- return false;
- }
-
- return true;
- }
-
- /**
- * Obtener los datos relativo a la clave de todas las cuentas del histórico.
- *
- * @return false|array con los datos de la clave
- */
- private function getAccountsHistoryPassData()
- {
- $query = "SELECT acchistory_id,"
- . "acchistory_pass,"
- . "acchistory_IV "
- . "FROM accHistory";
- $queryRes = DB::getResults($query, __FUNCTION__, true);
-
- if ($queryRes === false) {
- return false;
- }
-
- return $queryRes;
- }
-
- /**
- * Comprueba el hash de la clave maestra del registro de histórico de una cuenta.
- *
- * @param int $id opcional, con el Id del registro a comprobar
- * @return bool
- */
- public function checkAccountMPass($id = NULL)
- {
- if (is_null($id)) {
- $id = $this->accountId;
- }
-
- $query = "SELECT acchistory_mPassHash "
- . "FROM accHistory "
- . "WHERE acchistory_id = " . (int)$id;
- $queryRes = DB::getResults($query, __FUNCTION__);
-
- if ($queryRes === false) {
- return false;
- }
-
- if ($queryRes->acchistory_mPassHash != SP_Config::getConfigValue('masterPwd')) {
- return false;
- }
-
- return true;
- }
-
- /**
- * Actualiza la clave del histórico de una cuenta en la BBDD.
- *
- * @param int $id con el id del registro a actualizar
- * @param string $newHash con el hash de la clave maestra
- * @return bool
- */
- public function updateAccountHistoryPass($id, $newHash)
- {
- $query = "UPDATE accHistory SET "
- . "acchistory_pass = '" . DB::escape($this->accountPass) . "',"
- . "acchistory_IV = '" . DB::escape($this->accountIV) . "',"
- . "acchistory_mPassHash = '" . DB::escape($newHash) . "' "
- . "WHERE acchistory_id = " . (int)$id;
-
- if (DB::doQuery($query, __FUNCTION__) === false) {
- return false;
- }
-
- return true;
- }
-
- /**
- * Calcular el hash de los datos de una cuenta.
- * Esta función se utiliza para verificar si los datos de un formulario han sido cambiados
- * con respecto a los guardados
- *
- * @return string con el hash
- */
- public function calcChangesHash()
- {
- $groups = 0;
- $users = 0;
-
- if (is_array($this->accountUserGroupsId)) {
- $groups = implode($this->accountUserGroupsId);
- } elseif (is_array($this->accountCacheUserGroupsId)) {
- foreach ($this->accountCacheUserGroupsId as $group) {
- if (is_array($group)) {
- // Ordenar el array para que el hash sea igual
- sort($group, SORT_NUMERIC);
- $groups = implode($group);
- }
- }
- }
-
- if (is_array($this->accountUsersId)) {
- $users = implode($this->accountUsersId);
- } elseif (is_array($this->accountCacheUsersId)) {
- foreach ($this->accountCacheUsersId as $user) {
- if (is_array($user)) {
- // Ordenar el array para que el hash sea igual
- sort($user, SORT_NUMERIC);
- $users = implode($user);
- }
- }
- }
-
- if (!empty($this->accountModHash)) {
- $hashItems = $this->accountModHash . (int)$users . (int)$groups;
- //error_log("HASH MySQL: ".$hashItems);
- } else {
- $hashItems = $this->accountName .
- $this->accountCategoryId .
- $this->accountCustomerId .
- $this->accountLogin .
- $this->accountUrl .
- $this->accountNotes .
- $this->accountOtherUserEdit .
- $this->accountOtherGroupEdit .
- (int)$users .
- (int)$groups;
- //error_log("HASH PHP: ".$hashItems);
- }
-
- return md5($hashItems);
- }
-
- /**
- * Devolver datos de la cuenta para comprobación de accesos.
- *
- * @param int $accountId con el id de la cuenta
- * @return array con los datos de la cuenta
- */
- public function getAccountDataForACL($accountId = null)
- {
- $accId = (!is_null($accountId)) ? $accountId : $this->accountId;
-
- return array(
- 'id' => $accId,
- 'user_id' => $this->accountUserId,
- 'group_id' => $this->accountUserGroupId,
- 'users_id' => $this->getUsersAccount(),
- 'groups_id' => $this->getGroupsAccount(),
- 'otheruser_edit' => $this->accountOtherUserEdit,
- 'othergroup_edit' => $this->accountOtherGroupEdit
- );
- }
-
- /**
- * Obtiene el listado usuarios con acceso a una cuenta.
- *
- * @return array Con los registros con id de cuenta como clave e id de usuario como valor
- */
- public function getUsersAccount()
- {
- $accId = ($this->accountIsHistory && $this->accountParentId) ? $this->accountParentId : $this->accountId;
-
- if (!is_array($this->accountCacheUsersId)) {
- //error_log('Users cache MISS');
- $this->accountCacheUsersId = array($accId => array());
- } else {
- if (array_key_exists($accId, $this->accountCacheUsersId)) {
- //error_log('Users cache HIT');
- return $this->accountCacheUsersId[$accId];
- }
- }
-
- //error_log('Users cache MISS '.$accId);
-
- $users = SP_Users::getUsersForAccount($accId);
-
- if (!is_array($users)) {
- return array();
- }
-
- foreach ($users as $user) {
- $this->accountCacheUsersId[$accId][] = $user->accuser_userId;
- }
-
- return $this->accountCacheUsersId[$accId];
- }
-
- /**
- * Obtiene el listado de grupos secundarios de una cuenta.
- *
- * @return array con los registros con id de cuenta como clave e id de grupo como valor
- */
- public function getGroupsAccount()
- {
- $accId = ($this->accountIsHistory && $this->accountParentId) ? $this->accountParentId : $this->accountId;
-
- if (!is_array($this->accountCacheUserGroupsId)) {
- //error_log('Groups cache NO_INIT');
- $this->accountCacheUserGroupsId = array($accId => array());
- } else {
- if (array_key_exists($accId, $this->accountCacheUserGroupsId)) {
- //error_log('Groups cache HIT');
- return $this->accountCacheUserGroupsId[$accId];
- }
- }
-
- //error_log('Groups cache MISS');
-
- $groups = SP_Groups::getGroupsForAccount($accId);
-
- if (!is_array($groups)) {
- return array();
- }
-
- foreach ($groups as $group) {
- $this->accountCacheUserGroupsId[$accId][] = $group->accgroup_groupId;
- }
-
- return $this->accountCacheUserGroupsId[$accId];
- }
-}
\ No newline at end of file
diff --git a/inc/acl.class.php b/inc/acl.class.php
deleted file mode 100644
index 5bb9cd07..00000000
--- a/inc/acl.class.php
+++ /dev/null
@@ -1,179 +0,0 @@
-.
- *
- */
-
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
-
-/**
- * Esta clase es la encargada de calcular las access lists de acceso a usuarios.
- */
-class SP_ACL
-{
-
- static $accountCacheUserGroupsId;
-
- /**
- * Comprobar los permisos de acceso del usuario a los módulos de la aplicación.
- * Esta función comprueba los permisos del usuario para realizar una acción.
- * Si los permisos ya han sido obtenidos desde la BBDD, se utiliza el objeto creado
- * en la variable de sesión.
- *
- * @param string $strAction con el nombre de la acción
- * @param int $userId opcional, con el Id del usuario
- * @return bool
- */
- public static function checkUserAccess($strAction, $userId = 0)
- {
- // Comprobamos si la cache de permisos está inicializada
- if (!isset($_SESSION["usrprofile"]) || !is_object($_SESSION["usrprofile"])) {
- return false;
- }
-
- $blnUIsAdminApp = $_SESSION["uisadminapp"];
- $blnUIsAdminAcc = $_SESSION["uisadminacc"];
- $profile = $_SESSION["usrprofile"];
-
- switch ($strAction) {
- case "accview":
- return ($blnUIsAdminApp || $blnUIsAdminAcc || $profile->userProfile_pView);
- case "accviewpass":
- return ($blnUIsAdminApp || $blnUIsAdminAcc || $profile->userProfile_pViewPass);
- case "accviewhistory":
- return ($blnUIsAdminApp || $blnUIsAdminAcc || $profile->userProfile_pViewHistory);
- case "accedit":
- return ($blnUIsAdminApp || $blnUIsAdminAcc || $profile->userProfile_pEdit);
- case "acceditpass":
- return ($blnUIsAdminApp || $blnUIsAdminAcc || $profile->userProfile_pEditPass || $userId == $_SESSION["uid"]);
- case "accnew":
- return ($blnUIsAdminApp || $blnUIsAdminAcc || $profile->userProfile_pAdd);
- case "acccopy":
- return ($blnUIsAdminApp || $blnUIsAdminAcc || ($profile->userProfile_pAdd && $profile->userProfile_pView));
- case "accdelete":
- return ($blnUIsAdminApp || $blnUIsAdminAcc || $profile->userProfile_pDelete);
- case "accfiles":
- return ($blnUIsAdminApp || $blnUIsAdminAcc || $profile->userProfile_pFiles);
- case "appmgmtmenu":
- return ($blnUIsAdminApp || $profile->userProfile_pAppMgmtMenu);
- case "configmenu":
- return ($blnUIsAdminApp || $profile->userProfile_pConfigMenu);
- case "config":
- return ($blnUIsAdminApp || $profile->userProfile_pConfig);
- case "categories":
- return ($blnUIsAdminApp || $profile->userProfile_pAppMgmtCategories);
- case "customers":
- return ($blnUIsAdminApp || $profile->userProfile_pAppMgmtCustomers);
- case "masterpass":
- return ($blnUIsAdminApp || $profile->userProfile_pConfigMasterPass);
- case "backup":
- return ($blnUIsAdminApp || $profile->userProfile_pConfigBackup);
- case "usersmenu":
- return ($blnUIsAdminApp || $profile->userProfile_pUsersMenu);
- case "users":
- return ($blnUIsAdminApp || $profile->userProfile_pUsers);
- case "groups":
- return ($blnUIsAdminApp || $profile->userProfile_pGroups);
- case "profiles":
- return ($blnUIsAdminApp || $profile->userProfile_pProfiles);
- case "eventlog":
- return ($blnUIsAdminApp || $profile->userProfile_pEventlog);
- }
-
- $message['action'][] = __FUNCTION__;
- $message['text'][] = _('Denegado acceso a') . " '" . $strAction . "'";
-
- SP_Log::wrLogInfo($message);
-
- return false;
- }
-
- /**
- * Comprueba los permisos de acceso a una cuenta.
- *
- * @param string $action con la acción realizada
- * @param array $accountData con los datos de la cuenta a verificar
- * @return bool
- */
- public static function checkAccountAccess($action, $accountData)
- {
- $userGroupId = $_SESSION["ugroup"];
- $userId = $_SESSION["uid"];
- $userIsAdminApp = $_SESSION["uisadminapp"];
- $userIsAdminAcc = $_SESSION["uisadminacc"];
-
- switch ($action) {
- case "accview":
- return ($userId == $accountData['user_id']
- || $userGroupId == $accountData['group_id']
- || in_array($userId, $accountData['users_id'])
- || in_array($userGroupId, $accountData['groups_id'])
- || $userIsAdminApp
- || $userIsAdminAcc);
- case "accviewpass":
- return ($userId == $accountData['user_id']
- || $userGroupId == $accountData['group_id']
- || in_array($userId, $accountData['users_id'])
- || in_array($userGroupId, $accountData['groups_id'])
- || $userIsAdminApp
- || $userIsAdminAcc);
- case "accviewhistory":
- return ($userId == $accountData['user_id']
- || $userGroupId == $accountData['group_id']
- || in_array($userId, $accountData['users_id'])
- || in_array($userGroupId, $accountData['groups_id'])
- || $userIsAdminApp
- || $userIsAdminAcc);
- case "accedit":
- return ($userId == $accountData['user_id']
- || $userGroupId == $accountData['group_id']
- || (in_array($userId, $accountData['users_id']) && $accountData['otheruser_edit'])
- || (in_array($userGroupId, $accountData['groups_id']) && $accountData['othergroup_edit'])
- || $userIsAdminApp
- || $userIsAdminAcc);
- case "accdelete":
- return ($userId == $accountData['user_id']
- || $userGroupId == $accountData['group_id']
- || (in_array($userId, $accountData['users_id']) && $accountData['otheruser_edit'])
- || (in_array($userGroupId, $accountData['groups_id']) && $accountData['othergroup_edit'])
- || $userIsAdminApp
- || $userIsAdminAcc);
- case "acceditpass":
- return ($userId == $accountData['user_id']
- || $userGroupId == $accountData['group_id']
- || (in_array($userId, $accountData['users_id']) && $accountData['otheruser_edit'])
- || (in_array($userGroupId, $accountData['groups_id']) && $accountData['othergroup_edit'])
- || $userIsAdminApp
- || $userIsAdminAcc);
- case "acccopy":
- return ($userId == $accountData['user_id']
- || $userGroupId == $accountData['group_id']
- || in_array($userId, $accountData['users_id'])
- || in_array($userGroupId, $accountData['groups_id'])
- || $userIsAdminApp
- || $userIsAdminAcc);
- }
-
- return false;
- }
-}
\ No newline at end of file
diff --git a/inc/auth.class.php b/inc/auth.class.php
deleted file mode 100644
index dff07c06..00000000
--- a/inc/auth.class.php
+++ /dev/null
@@ -1,208 +0,0 @@
-.
- *
- */
-
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
-
-/**
- * Esta clase es la encargada de realizar la autentificación de usuarios de sysPass.
- */
-class SP_Auth
-{
- static $userName;
- static $userEmail;
-
- /**
- * Autentificación de usuarios con LDAP.
- *
- * @param string $userLogin con el login del usuario
- * @param string $userPass con la clave del usuario
- * @return int|bool Número de error o boolean
- */
- public static function authUserLDAP($userLogin, $userPass)
- {
- if (!SP_Util::ldapIsAvailable() || !SP_Util::ldapIsEnabled() || !SP_LDAP::checkLDAPParams()) {
- return false;
- }
-
- $message['action'] = __FUNCTION__;
-
- $ldapGroupAccess = false;
-
- // Conectamos al servidor realizamos la conexión con el usuario proxy
- try {
- SP_LDAP::ldapConnect();
- SP_LDAP::ldapBind();
- SP_LDAP::getUserDN($userLogin);
- } catch (Exception $e) {
- return false;
- }
-
- $userDN = SP_LDAP::$ldapSearchData[0]['dn'];
- // Mapeo de los atributos
- $attribsMap = array(
- 'groupmembership' => 'group',
- 'memberof' => 'group',
- 'displayname' => 'name',
- 'fullname' => 'name',
- 'mail' => 'mail',
- 'lockouttime' => 'expire');
-
- // Realizamos la conexión con el usuario real y obtenemos los atributos
- try {
- SP_LDAP::ldapBind($userDN, $userPass);
- $attribs = SP_LDAP::getLDAPAttr($attribsMap);
- } catch (Exception $e) {
- return ldap_errno(SP_LDAP::getConn());
- }
-
- // Comprobamos si la cuenta está bloqueada o expirada
- if (isset($attribs['expire']) && $attribs['expire'] > 0) {
- return 701;
- }
-
- // Comprobamos que el usuario está en el grupo indicado buscando en los atributos del usuario
- if (isset($attribs['group'])) {
- if (is_array($attribs['group'])) {
- foreach ($attribs['group'] as $group) {
- if (is_int($group)) {
- continue;
- }
-
- // Comprobamos que el usuario está en el grupo indicado
- if (self::checkLDAPGroup($group)) {
- $ldapGroupAccess = true;
- break;
- }
- }
- } else {
- $ldapGroupAccess = self::checkLDAPGroup($attribs['group']);
- }
- // Comprobamos que el usuario está en el grupo indicado buscando en los atributos del grupo
- } else {
- try {
- SP_LDAP::searchUserInGroup($userDN);
- } catch (Exception $e){
- $ldapGroupAccess = false;
- }
- }
-
- if ($ldapGroupAccess === false){
- return 702;
- }
-
- self::$userName = (isset($attribs['name'])) ? $attribs['name'] : $userLogin;
- self::$userEmail = (isset($attribs['mail'])) ? $attribs['mail'] : '';
-
- return true;
- }
-
- /**
- * Comprobar si el grupo de LDAP está habilitado.
- *
- * @param string $group con el nombre del grupo
- * @return bool
- */
- private static function checkLDAPGroup($group)
- {
- $ldapGroup = strtolower(SP_Config::getValue('ldap_group'));
- $groupName = array();
-
- preg_match('/^cn=([\w\s-]+),.*/i', $group, $groupName);
-
- if (strtolower($groupName[1]) == $ldapGroup || strtolower($group) == $ldapGroup) {
- return true;
- }
-
- return false;
- }
-
- /**
- * Autentificación de usuarios con MySQL.
- *
- * Esta función comprueba la clave del usuario. Si el usuario necesita ser migrado desde phpPMS,
- * se ejecuta el proceso para actualizar la clave.
- *
- * @param string $userLogin con el login del usuario
- * @param string $userPass con la clave del usuario
- * @return bool
- */
- public static function authUserMySQL($userLogin, $userPass)
- {
- if (SP_Users::checkUserIsMigrate($userLogin)) {
- if (!SP_Users::migrateUser($userLogin, $userPass)) {
- return false;
- }
- }
-
- $query = "SELECT user_login,"
- . "user_pass "
- . "FROM usrData "
- . "WHERE user_login = '" . DB::escape($userLogin) . "' "
- . "AND user_isMigrate = 0 "
- . "AND user_pass = SHA1(CONCAT(user_hashSalt,'" . DB::escape($userPass) . "')) LIMIT 1";
-
- if (DB::doQuery($query, __FUNCTION__) === false) {
- return false;
- }
-
- if (count(DB::$last_result) == 0) {
- return false;
- }
-
- return true;
- }
-
- /**
- * Proceso para la recuperación de clave.
- *
- * @param string $login con el login del usuario
- * @param string $email con el email del usuario
- * @return bool
- */
- public static function mailPassRecover($login, $email)
- {
- if (SP_Users::checkUserMail($login, $email)
- && !SP_Users::checkUserIsDisabled($login)
- && !SP_Users::checkUserIsLDAP($login)
- && !SP_Users::checkPassRecoverLimit($login)
- ) {
- $hash = SP_Util::generate_random_bytes();
-
- $message['action'] = _('Cambio de Clave');
- $message['text'][] = SP_Html::strongText(_('Se ha solicitado el cambio de su clave de usuario.'));
- $message['text'][] = '';
- $message['text'][] = _('Para completar el proceso es necesario que acceda a la siguiente URL:');
- $message['text'][] = '';
- $message['text'][] = SP_Html::anchorText(SP_Init::$WEBURI . '/index.php?a=passreset&h=' . $hash . '&t=' . time());
- $message['text'][] = '';
- $message['text'][] = _('Si no ha solicitado esta acción, ignore este mensaje.');
-
- return (SP_Common::sendEmail($message, $email, false) && SP_Users::addPassRecover($login, $hash));
- } else {
- return false;
- }
- }
-}
diff --git a/inc/common.class.php b/inc/common.class.php
deleted file mode 100644
index e7bd3aa8..00000000
--- a/inc/common.class.php
+++ /dev/null
@@ -1,345 +0,0 @@
-.
- *
- */
-
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
-
-/**
- * Esta clase es encargada de ejecutar acciones comunes para las funciones
- */
-class SP_Common
-{
- /**
- * Enviar un email utilizando la clase PHPMailer.
- *
- * @param array $message con el nombre de la accióm y el texto del mensaje
- * @param string $mailTo con el destinatario
- * @param bool $isEvent para indicar si es um
- * @return bool
- */
- public static function sendEmail($message, $mailTo = '', $isEvent = true)
- {
- if (!SP_Util::mailIsEnabled()) {
- return false;
- }
-
- if (!is_array($message)) {
- return false;
- }
-
- $mail = self::getEmailObject($mailTo, $message['action']);
-
- if (!is_object($mail)) {
- return false;
- }
-
- $mail->isHTML();
- $newline = ' ';
-
- if ($isEvent === true) {
- $performer = (isset($_SESSION["ulogin"])) ? $_SESSION["ulogin"] : _('N/D');
- $body[] = SP_Html::strongText(_('Acción') . ": ") . $message['action'];
- $body[] = SP_Html::strongText(_('Realizado por') . ": ") . $performer . ' (' . $_SERVER['REMOTE_ADDR'] . ')';
-
- $mail->addCC(SP_Config::getValue('mail_from'));
- }
-
- $body[] = (is_array($message['text'])) ? implode($newline, $message['text']) : '';
- $body[] = '';
- $body[] = '--';
- $body[] = SP_Html::getAppInfo('appname') . ' - ' . SP_Html::getAppInfo('appdesc');
- $body[] = SP_Html::anchorText(SP_Init::$WEBURI);
-
-
- $mail->Body = implode($newline, $body);
-
- $sendMail = $mail->send();
-
- // Enviar correo
- if ($sendMail) {
- $log['text'][] = _('Correo enviado');
- } else {
- $log['text'][] = _('Error al enviar correo');
- $log['text'][] = 'ERROR: ' . $mail->ErrorInfo;
- }
-
- $log['text'][] = '';
- $log['text'][] = _('Destinatario') . ": $mailTo";
- $log['text'][] = ($isEvent === true) ? _('CC') . ": " . SP_Config::getValue('mail_from') : '';
-
- $log['action'] = _('Enviar Email');
-
- SP_Log::wrLogInfo($log);
- return $sendMail;
- }
-
- /**
- * Inicializar la clase PHPMailer.
- *
- * @param string $mailTo con la dirección del destinatario
- * @param string $action con la acción realizada
- * @return false|object
- */
- public static function getEmailObject($mailTo, $action)
- {
- $appName = SP_Html::getAppInfo('appname');
- $mailFrom = SP_Config::getValue('mail_from');
- $mailServer = SP_Config::getValue('mail_server');
- $mailPort = SP_Config::getValue('mail_port', 25);
- $mailAuth = SP_Config::getValue('mail_authenabled', FALSE);
-
- if ($mailAuth) {
- $mailUser = SP_Config::getValue('mail_user');
- $mailPass = SP_Config::getValue('mail_pass');
- }
-
- if (!$mailServer) {
- return false;
- }
-
- if (empty($mailTo)) {
- $mailTo = $mailFrom;
- }
-
- $phpmailerPath = EXTENSIONS_DIR . DIRECTORY_SEPARATOR . 'phpmailer';
- require_once $phpmailerPath . DIRECTORY_SEPARATOR . 'class.phpmailer.php';
- require_once $phpmailerPath . DIRECTORY_SEPARATOR . 'class.smtp.php';
-
- $mail = new PHPMailer();
-
- $mail->isSMTP();
- $mail->CharSet = 'utf-8';
- $mail->SMTPAuth = $mailAuth;
- $mail->Host = $mailServer;
- $mail->Port = $mailPort;
- $mail->Username = $mailUser;
- $mail->Password = $mailPass;
- $mail->SMTPSecure = strtolower(SP_Config::getValue('mail_security'));
- //$mail->SMTPDebug = 2;
- //$mail->Debugoutput = 'error_log';
-
- $mail->setFrom($mailFrom, $appName);
- $mail->addAddress($mailTo);
- $mail->addReplyTo($mailFrom, $appName);
- $mail->WordWrap = 100;
- $mail->Subject = $appName . ' (' . _('Aviso') . ') - ' . $action;
-
- return $mail;
- }
-
- /**
- * Devuelve una respuesta en formato XML con el estado y el mensaje.
- *
- * @param string $description mensaje a devolver
- * @param int $status devuelve el estado
- * @return bool
- */
- public static function printXML($description, $status = 1)
- {
- if (!is_string($description)) {
- return false;
- }
-
- $arrStrFrom = array("&", "<", ">", "\"", "\'");
- $arrStrTo = array("&", "<", ">", """, "'");
-
- $cleanDescription = str_replace($arrStrFrom, $arrStrTo, $description);
-
- $xml = "\n";
- $xml .= "\n" . $status . "\n " . $cleanDescription . "\n";
-
- header("Content-Type: application/xml");
- exit($xml);
- }
-
- /**
- * Devuelve una respuesta en formato JSON con el estado y el mensaje.
- *
- * @param string $description mensaje a devolver
- * @param int $status devuelve el estado
- * @param string $action con la accion a realizar
- * @return bool
- */
- public static function printJSON($description, $status = 1, $action = '')
- {
- if (!is_string($description)) {
- return false;
- }
-
- $arrStrFrom = array("\\", '"', "'");
- $arrStrTo = array("\\", '\"', "\'");
-
- $cleanDescription = str_replace($arrStrFrom, $arrStrTo, $description);
-
- $json = array('status' => $status, 'description' => $cleanDescription, 'action' => $action);
-
- header('Content-type: application/json');
- exit(json_encode($json));
- }
-
- /**
- * Devuelve un icono de ayuda con el mensaje.
- *
- * @param int $type tipo de mensaje
- * @param int $id id del mensaje
- * @return string Con la etiqueta html del icono de ayuda
- */
- public static function printHelpButton($type, $id)
- {
- $msgHelp[0] = _('Indicar el usuario de conexión a la base de datos de phpPMS');
- $msgHelp[1] = _('Indicar el nombre de la base de datos de phpPMS');
- $msgHelp[2] = _('Indicar el servidor de la base de datos de phpPMS');
- $msgHelp[3] = _('Habilita el nombre de la cuenta de la búsqueda, como enlace a los detalles de la cuenta');
- $msgHelp[4] = _('Número de resultados por página a mostrar, al realizar una búsqueda');
- $msgHelp[5] = _('Habilita la subida/descarga de archivos para las cuentas');
- $msgHelp[6] = _('Establece el tamaño máximo para subir archivos') . "
" . _('El máximo absuluto es de 16MB');
- $msgHelp[7] = _('Habilita la opción de añadir un enlace a Wiki externa para los resultados de la búsqueda');
- $msgHelp[8] = _('URL que utiliza la wiki para realizar una búsqueda de una página en esta') . "
" . _('Como parámetro se utiliza el nombre del cliente') . "
" . _('Ejemplo') . ":
https://wiki.cygnux.org/search.php?phrase=";
- $msgHelp[9] = _('URL que utiliza la wiki para acceder a los detalles de una página de ésta') . "
" . _('El nombre de la cuenta se utiliza como parámetro de la variable de búsqueda de la Wiki') . "
" . _('Ejemplo') . ":
https://wiki.cygnux.org/show.php?name=";
- $msgHelp[10] = _('Prefijo para determinar qué cuentas tienen un enlace a una página de la Wiki') . "
" . _('Este método utilizará MySQL en caso de fallo');
- $msgHelp[12] = _('Usuario para conectar con el servicio de LDAP') . "
" . _('Ejemplo') . ":
cn=syspass,ou=Users,dc=cygnux,o=org";
- $msgHelp[13] = _('Base en la que realizar la búsqueda de usuarios de LDAP') . "
" . _('Ejemplo') . ":
dc=cygnux,o=org";
- $msgHelp[14] = _('Grupo de LDAP al que debe de pertenecer el usuario para permitir el acceso') . "
" . _('Ejemplo') . ":
cn=GRP_SPUSERS,ou=USERS | GRP_SPUSERS";
- $msgHelp[15] = _('Nombre o dirección IP del servidor de LDAP');
- $msgHelp[16] = _('Establece una nueva clave maestra sin re-encriptar las cuentas');
- $msgHelp[17] = _('Clave del usuario de conexión a LDAP');
- $msgHelp[18] = _('En este modo no se puede acceder a la aplicación. Para deshabilitarlo es necesario modificar el archivo de configuración');
- $msgHelp[19] = _('Muestra información relativa a la configuración de la aplicación y rendimiento');
- $msgHelp[20] = _('Guarda las acciones realizadas en la aplicación');
- $msgHelp[21] = _('Comprobar actualizaciones de la aplicación (sólo para los usuarios administradores)');
- $msgHelp[22] = _('Extensiones de máximo 4 caracteres.') . "
" . _('Escribir extensión y pulsar intro para añadir.');
- $msgHelp[23] = _('Importar desde KeePass o KeePassX. El nombre del cliente será igual a KeePass o KeePassX') . "
" . _('Importar desde un archivo CSV con el formato') . ":
';
- self::$htmlPage[] = '';
- }
-
- /**
- * Crear el pie de la página HTML.
- *
- * @param string $page opcional con la paǵina a mostrar
- * @return none
- */
- public static function makeFooter($page = "main")
- {
- $info = self::getAppInfo();
-
- self::$htmlPage[] = ' ';
- self::$htmlPage[] = '';
- }
-
- /**
- * Cargar un archivo de plantilla.
- *
- * @param string $template con el nombre de la plantilla
- * @param array $tplvars con los datos a pasar a la plantilla
- * @return none
- */
- public static function getTemplate($template, $tplvars = array())
- {
- $tpl = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'tpl' . DIRECTORY_SEPARATOR . $template . '.php';
-
- if (file_exists($tpl)) {
- $data = $tplvars;
- include_once $tpl;
- //self::$htmlPage[] = array('include' => $tpl);
- }
- }
-
- /**
- * Crea la barra de navegación para búsqueda de cuentas.
- *
- * @param int $intSortKey con el número de campo del filro
- * @param int $intCur con el número de página actual
- * @param int $intTotal con el número total de páginas
- * @param int $intLimit con el límite de registros a mostrar
- * @param int $intTime con el tiempo de carga de los resultados
- * @param bool $filterOn opcional con el estado del filtrado
- * @return none
- */
- public static function printQuerySearchNavBar($intSortKey, $intCur, $intTotal, $intLimit, $intTime, $filterOn = false)
- {
- $firstPage = ceil(($intCur + 1) / $intLimit);
- $lastPage = ceil($intTotal / $intLimit);
- $globalOn = SP_Common::parseParams('p', 'gsearch', 0, false, 1);
-
- echo '
';
- }
-
- /**
- * Crea la barra de navegación para el registro de eventos.
- *
- * @param int $intCur con el número de página actual
- * @param int $intTotal con el número total de páginas
- * @param int $intTime con el tiempo de carga de los resultados
- * @return none
- */
- public static function printQueryLogNavBar($intCur, $intTotal, $intTime = 0)
- {
- $intLimit = 50;
- $firstPage = ceil(($intCur + 1) / $intLimit);
- $lastPage = ceil($intTotal / $intLimit);
-
- echo '
';
- }
-
- /**
- * Limpia los datos recibidos de un formulario.
- *
- * @param string $data con los datos a limpiar
- * @return false|string con los datos limpiados
- */
- public static function sanitize(&$data)
- {
- if (!$data) {
- return false;
- }
-
- if (is_array($data)) {
- array_walk_recursive($data, 'SP_Html::sanitize');
- } else {
- $data = strip_tags($data);
-
- // Fix &entity\n;
- $data = str_replace(array('&', '<', '>'), array('&', '<', '>'), $data);
- $data = preg_replace('/(*\w+)[\x00-\x20]+;/u', '$1;', $data);
- $data = preg_replace('/(*[0-9A-F]+);*/iu', '$1;', $data);
- $data = html_entity_decode($data, ENT_COMPAT, 'UTF-8');
-
- // Remove any attribute starting with "on" or xmlns
- $data = preg_replace('#(<[^>]+?[\x00-\x20"\'])(?:on|xmlns)[^>]*+>#iu', '$1>', $data);
-
- // Remove javascript: and vbscript: protocols
- $data = preg_replace('#([a-z]*)[\x00-\x20]*=[\x00-\x20]*([`\'"]*)[\x00-\x20]*j[\x00-\x20]*a[\x00-\x20]*v[\x00-\x20]*a[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2nojavascript...', $data);
- $data = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*v[\x00-\x20]*b[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2novbscript...', $data);
- $data = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*-moz-binding[\x00-\x20]*:#u', '$1=$2nomozbinding...', $data);
-
- // Only works in IE:
- $data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?expression[\x00-\x20]*\([^>]*+>#i', '$1>', $data);
- $data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?behaviour[\x00-\x20]*\([^>]*+>#i', '$1>', $data);
- $data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:*[^>]*+>#iu', '$1>', $data);
-
- // Remove namespaced elements (we do not need them)
- $data = preg_replace('#*\w+:\w[^>]*+>#i', '', $data);
-
- do {
- // Remove really unwanted tags
- $old_data = $data;
- $data = preg_replace('#*(?:applet|b(?:ase|gsound|link)|embed|frame(?:set)?|i(?:frame|layer)|l(?:ayer|ink)|meta|object|s(?:cript|tyle)|title|xml)[^>]*+>#i', '', $data);
- } while ($old_data !== $data);
- }
- return $data;
- }
-
- /**
- * Muestra una barra de información con los registros y tiempo de la consulta.
- *
- * @param int $intTotal con el total de registros devueltos
- * @param int $startTime con el tiempo de inicio de la consulta
- * @return none
- */
- public static function printQueryInfoBar($intTotal, $startTime)
- {
- $endTime = microtime();
- $totalTime = round($endTime - $startTime, 5);
-
- echo '
';
- echo '
' . $intTotal . ' @ ' . $totalTime . ' s
';
- echo '
';
- }
-
- /**
- * Truncar un texto a una determinada longitud.
- *
- * @param string $str con la cadena a truncar
- * @param int $len con la longitud máxima de la cadena
- * @return string con el texto truncado
- */
- public static function truncate($str, $len)
- {
- $tail = max(0, $len - 10);
- $truncate = substr($str, 0, $tail);
- $truncate .= strrev(preg_replace('~^..+?[\s,:]\b|^...~', '...', strrev(substr($str, $tail, $len - $tail))));
-
- return $truncate;
- }
-
- /**
- * Devolver errores comunes.
- * Esta función muestra la página de error con el error indicado.
- *
- * @param string $code con el código de error a mostrar
- * @return none
- */
- public static function showCommonError($code)
- {
- $commonErrors = array(
- 'unavailable' => array('txt' => _('Opción no disponible'), 'hint' => _('Consulte con el administrador')),
- 'noaccpermission' => array('txt' => _('No tiene permisos para acceder a esta cuenta'), 'hint' => _('Consulte con el administrador')),
- 'nopermission' => array('txt' => _('No tiene permisos para acceder a esta página'), 'hint' => _('Consulte con el administrador')),
- 'updatempass' => array('txt' => _('Clave maestra actualizada'), 'hint' => _('Reinicie la sesión para cambiarla'))
- );
-
- $data['errors'][] = array(
- 'type' => 'critical',
- 'description' => $commonErrors[$code]['txt'],
- 'hint' => $commonErrors[$code]['hint']);
-
- self::getTemplate('error', $data);
- exit();
- }
-
- /**
- * Convertir un color RGB a HEX
- * From: http://bavotasan.com/2011/convert-hex-color-to-rgb-using-php/
- *
- * @param array $rgb con color en RGB
- * @return string
- */
- public static function rgb2hex($rgb)
- {
- $hex = "#";
- $hex .= str_pad(dechex($rgb[0]), 2, "0", STR_PAD_LEFT);
- $hex .= str_pad(dechex($rgb[1]), 2, "0", STR_PAD_LEFT);
- $hex .= str_pad(dechex($rgb[2]), 2, "0", STR_PAD_LEFT);
-
- return $hex; // returns the hex value including the number sign (#)
- }
-
- /**
- * Devolver una tabla con el resultado de una consulta y acciones.
- *
- * @param array $arrTableProp con las propiedades de la tabla
- * @param array $queryItems con los resultados de la consulta
- * @return none
- */
- public static function getQueryTable($arrTableProp, $queryItems)
- {
- $sk = SP_Common::getSessionKey(true);
- $maxNumActions = 3;
-
- echo '
';
- echo '
';
- echo '
';
- echo '
';
- echo '
';
-
- if ($arrTableProp["header"]) {
- echo '
' . $arrTableProp["header"] . '
';
- }
-
- echo '';
- }
-
- /**
- * Devolver una cadena con el tag HTML strong.
- *
- * @param string $text con la cadena de texto
- * @return string
- */
- public static function strongText($text)
- {
- return ('' . $text . '');
- }
-
- /**
- * Devolver un link HTML.
- *
- * @param string $text con la cadena de texto
- * @param string $link con el destino del enlace
- * @param string $title con el título del enlace
- * @param string $attribs con atributos del enlace
- * @return string
- */
- public static function anchorText($text, $link = '', $title = '', $attribs = '')
- {
- $alink = (!empty($link)) ? $link : $text;
- $atitle = (!empty($title)) ? $title : '';
-
- $anchor = '' . $text . '';
-
- return $anchor;
- }
-}
diff --git a/inc/import.class.php b/inc/import.class.php
deleted file mode 100644
index 64b64590..00000000
--- a/inc/import.class.php
+++ /dev/null
@@ -1,326 +0,0 @@
-.
- *
- */
-
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
-
-/**
- * Extender la clase Exception para mostrar ayuda en los mensajes
- */
-class ImportException extends Exception
-{
- private $type;
- private $hint;
-
- public function __construct($type, $message, $hint, $code = 0, Exception $previous = null)
- {
- $this->type = $type;
- $this->hint = $hint;
- parent::__construct($message, $code, $previous);
- }
-
- public function __toString()
- {
- return __CLASS__ . ": [{$this->code}]: {$this->message} ({$this->hint})\n";
- }
-
- public function getHint()
- {
- return $this->hint;
- }
-
- public function getType()
- {
- return $this->type;
- }
-
-}
-
-/**
- * Esta clase es la encargada de importar cuentas.
- */
-class SP_Import
-{
- private static $result = array();
- private static $fileContent;
- private static $tmpFile;
-
- /**
- * Iniciar la importación de cuentas.
- *
- * @param array $fileData con los datos del archivo
- * @return array resultado del proceso
- */
- public static function doImport(&$fileData)
- {
- try {
- self::readDataFromFile($fileData);
- } catch (ImportException $e) {
- $message['action'] = _('Importar Cuentas');
- $message['text'][] = $e->getMessage();
-
- SP_Log::wrLogInfo($message);
- self::$result['error'][] = array('type' => $e->getType(), 'description' => $e->getMessage(), 'hint' => $e->getHint());
- return (self::$result);
- }
-
- self::$result['ok'][] = _('Importación finalizada');
- self::$result['ok'][] = _('Revise el registro de eventos para más detalles');
-
- return (self::$result);
- }
-
- /**
- * Leer los datos del archivo.
- *
- * @param array $fileData con los datos del archivo
- * @throws ImportException
- * @return bool
- */
- private static function readDataFromFile(&$fileData)
- {
- if (!is_array($fileData)) {
- throw new ImportException('critical', _('Archivo no subido correctamente'), _('Verifique los permisos del usuario del servidor web'));
- }
-
- if ($fileData['name']) {
- // Comprobamos la extensión del archivo
- $fileExtension = strtoupper(pathinfo($fileData['name'], PATHINFO_EXTENSION));
-
- if ($fileExtension != 'CSV' && $fileExtension != 'XML') {
- throw new ImportException('critical', _('Tipo de archivo no soportado'), _('Compruebe la extensión del archivo'));
- }
- }
-
- // Variables con información del archivo
- $tmpName = $fileData['tmp_name'];
-
- if (!file_exists($tmpName) || !is_readable($tmpName)) {
- // Registramos el máximo tamaño permitido por PHP
- SP_Util::getMaxUpload();
-
- throw new ImportException('critical', _('Error interno al leer el archivo'), _('Compruebe la configuración de PHP para subir archivos'));
- }
-
- if ($fileData['type'] === 'text/csv' || $fileData['type'] === 'application/vnd.ms-excel') {
- // Leemos el archivo a un array
- self::$fileContent = file($tmpName);
-
- if (!is_array(self::$fileContent)) {
- throw new ImportException('critical', _('Error interno al leer el archivo'), _('Compruebe los permisos del directorio temporal'));
- }
- // Obtenemos las cuentas desde el archivo CSV
- self::parseFileData();
- } elseif ($fileData['type'] === 'text/xml') {
- self::$tmpFile = $tmpName;
- // Analizamos el XML y seleccionamos el formato a importar
- self::detectXMLFormat();
- } else {
- throw new ImportException('critical', _('Tipo mime no soportado'), _('Compruebe el formato del archivo'));
- }
-
- return true;
- }
-
- /**
- * Leer los datos importados y formatearlos.
- *
- * @throws ImportException
- * @return bool
- */
- private static function parseFileData()
- {
- foreach (self::$fileContent as $data) {
- $fields = explode(';', $data);
-
- if (count($fields) < 7) {
- throw new ImportException('critical', _('El número de campos es incorrecto'), _('Compruebe el formato del archivo CSV'));
- }
-
- if (!self::addAccountData($fields)) {
- $message['action'] = _('Importar Cuentas');
- $message['text'][] = _('Error importando cuenta');
- $message['text'][] = $data;
-
- SP_Log::wrLogInfo($message);
- }
- }
-
- return true;
- }
-
- /**
- * Crear una cuenta con los datos obtenidos.
- *
- * @param array $data con los datos de la cuenta
- * @throws ImportException
- * @return bool
- */
- public static function addAccountData($data)
- {
- // Datos del Usuario
- $userId = SP_Common::parseParams('s', 'uid', 0);
- $groupId = SP_Common::parseParams('s', 'ugroup', 0);
-
- // Asignamos los valores del array a variables
- list($accountName, $customerName, $categoryName, $url, $username, $password, $notes) = $data;
-
- // Comprobamos si existe el cliente o lo creamos
- SP_Customer::$customerName = $customerName;
- if (!SP_Customer::checkDupCustomer()) {
- $customerId = SP_Customer::getCustomerByName();
- } else {
- SP_Customer::addCustomer();
- $customerId = SP_Customer::$customerLastId;
- }
-
- // Comprobamos si existe la categoría o la creamos
- $categoryId = SP_Category::getCategoryIdByName($categoryName);
- if ($categoryId == 0) {
- SP_Category::$categoryName = $categoryName;
- SP_Category::addCategory($categoryName);
- $categoryId = SP_Category::$categoryLastId;
- }
-
- $pass = self::encryptPass($password);
-
- $account = new SP_Account;
- $account->accountName = $accountName;
- $account->accountCustomerId = $customerId;
- $account->accountCategoryId = $categoryId;
- $account->accountLogin = $username;
- $account->accountUrl = $url;
- $account->accountPass = $pass['pass'];
- $account->accountIV = $pass['IV'];
- $account->accountNotes = $notes;
- $account->accountUserId = $userId;
- $account->accountUserGroupId = $groupId;
-
- // Creamos la cuenta
- return $account->createAccount();
- }
-
- /**
- * Encriptar la clave de una cuenta.
- *
- * @param string $password con la clave de la cuenta
- * @throws ImportException
- * @return array con la clave y el IV
- */
- private static function encryptPass($password)
- {
- if (empty($password)) {
- return array('pass' => '', 'IV' => '');
- }
-
- // Comprobar el módulo de encriptación
- if (!SP_Crypt::checkCryptModule()) {
- throw new ImportException('critical', _('Error interno'), _('No se puede usar el módulo de encriptación'));
- }
-
- // Encriptar clave
- $data['pass'] = SP_Crypt::mkEncrypt($password);
-
- if (!empty($password) && ($data['pass'] === false || is_null($data['pass']))) {
- throw new ImportException('critical', _('Error interno'), _('Error al generar datos cifrados'));
- }
-
- $data['IV'] = SP_Crypt::$strInitialVector;
-
- return $data;
- }
-
- /**
- * Leer el archivo de KeePass a un objeto XML.
- *
- * @throws ImportException
- * @return object Con los datos del archivo XML
- */
- private static function readXMLFile()
- {
- if ($xmlFile = simplexml_load_file(self::$tmpFile)) {
- return $xmlFile;
- } else {
- throw new ImportException('critical', _('Error interno'), _('No es posible procesar el archivo XML'));
- }
- }
-
- /**
- * Detectar la aplicación que generó el XML.
- *
- * @throws ImportException
- * @return none
- */
- private static function detectXMLFormat()
- {
- $xml = self::readXMLFile();
-
- if ($xml->Meta->Generator == 'KeePass') {
- SP_KeePassImport::addKeepassAccounts($xml);
- } else if ($xmlApp = self::parseFileHeader()) {
- switch ($xmlApp) {
- case 'keepassx_database':
- SP_KeePassXImport::addKeepassXAccounts($xml);
- break;
- case 'revelationdata':
- error_log('REVELATION');
- break;
- default:
- break;
- }
- } else {
- throw new ImportException('critical', _('Archivo XML no soportado'), _('No es posible detectar la aplicación que exportó los datos'));
- }
- }
-
- /**
- * Leer la cabecera del archivo XML y obtener patrones de aplicaciones conocidas.
- *
- * @return bool
- */
- private static function parseFileHeader()
- {
- $handle = @fopen(self::$tmpFile, "r");
- $headersRegex = '/(KEEPASSX_DATABASE|revelationdata)/i';
-
- if ($handle) {
- // No. de líneas a leer como máximo
- $maxLines = 5;
- $count = 0;
-
- while (($buffer = fgets($handle, 4096)) !== false && $count <= $maxLines) {
- if (preg_match($headersRegex, $buffer, $app)) {
- fclose($handle);
- return strtolower($app[0]);
- }
- $count++;
- }
-
- fclose($handle);
- }
-
- return false;
- }
-}
\ No newline at end of file
diff --git a/inc/installer.class.php b/inc/installer.class.php
deleted file mode 100644
index c5feb292..00000000
--- a/inc/installer.class.php
+++ /dev/null
@@ -1,493 +0,0 @@
-.
- *
- */
-
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
-
-define('IS_INSTALLER', 1);
-
-/**
- * Extender la clase Exception para mostrar ayuda en los mensajes
- */
-class InstallerException extends Exception
-{
- private $type;
- private $hint;
-
- public function __construct($type, $message, $hint, $code = 0, Exception $previous = null)
- {
- $this->type = $type;
- $this->hint = $hint;
- parent::__construct($message, $code, $previous);
- }
-
- public function __toString()
- {
- return __CLASS__ . ": [{$this->code}]: {$this->message} ({$this->hint})\n";
- }
-
- public function getHint()
- {
- return $this->hint;
- }
-
- public function getType()
- {
- return $this->type;
- }
-
-}
-
-/**
- * Esta clase es la encargada de instalar sysPass.
- */
-class SP_Installer
-{
- private static $dbuser;
- private static $dbname;
- private static $dbhost;
- private static $dbc; // Database connection
- private static $username;
- private static $password;
- private static $masterPassword;
- private static $isHostingMode;
-
- /**
- * Iniciar instalación.
- *
- * @param array $options datos de instalación
- * @return array resultado del proceso
- */
- public static function install($options)
- {
- $error = array();
-
- if (empty($options['adminlogin'])) {
- $error[] = array(
- 'type' => 'critical',
- 'description' => _('Indicar nombre de usuario admin'),
- 'hint' => _('Usuario admin para acceso a la aplicación'));
- }
- if (empty($options['adminpass'])) {
- $error[] = array(
- 'type' => 'critical',
- 'description' => _('Indicar la clave de admin'),
- 'hint' => _('Clave del usuario admin de la aplicación'));
- }
-
- if (empty($options['masterpassword'])) {
- $error[] = array(
- 'type' => 'critical',
- 'description' => _('Indicar la clave maestra'),
- 'hint' => _('Clave maestra para encriptar las claves'));
- }
- if (strlen($options['masterpassword']) < 11) {
- $error[] = array(
- 'type' => 'critical',
- 'description' => _('Clave maestra muy corta'),
- 'hint' => _('La longitud de la clave maestra ha de ser mayor de 11 caracteres'));
- }
-
- if (empty($options['dbuser'])) {
- $error[] = array(
- 'type' => 'critical',
- 'description' => _('Indicar el usuario de la BBDD'),
- 'hint' => _('Usuario con permisos de administrador de la Base de Datos'));
- }
- if (empty($options['dbpass'])) {
- $error[] = array(
- 'type' => 'critical',
- 'description' => _('Indicar la clave de la BBDD'),
- 'hint' => _('Clave del usuario administrador de la Base de Datos'));
- }
- if (empty($options['dbname'])) {
- $error[] = array(
- 'type' => 'critical',
- 'description' => _('Indicar el nombre de la BBDD'),
- 'hint' => _('Nombre para la BBDD de la aplicación pej. syspass'));
- }
- if (substr_count($options['dbname'], '.') >= 1) {
- $error[] = array(
- 'type' => 'critical',
- 'description' => _('El nombre de la BBDD no puede contener "."'),
- 'hint' => _('Elimine los puntos del nombre de la Base de Datos'));
- }
-
- if (empty($options['dbhost'])) {
- $error[] = array(
- 'type' => 'critical',
- 'description' => _('Indicar el servidor de la BBDD'),
- 'hint' => _('Servidor donde se instalará la Base de Datos'));
- }
-
- if (count($error) == 0) { //no errors, good
- self::$username = htmlspecialchars_decode($options['adminlogin']);
- self::$password = htmlspecialchars_decode($options['adminpass']);
- self::$masterPassword = htmlspecialchars_decode($options['masterpassword']);
- self::$dbname = trim($options['dbname']);
- self::$dbhost = trim($options['dbhost']);
-
- //generate a random salt that is used to salt the local user passwords
- $salt = SP_Util::generate_random_bytes(30);
- SP_Config::setValue('passwordsalt', $salt);
- SP_Config::setValue('version', implode(SP_Util::getVersion(true)));
-
- $dbadmin = trim($options['dbuser']);
- $dbpass = trim($options['dbpass']);
-
- if (preg_match('/(.*):(\d{1,5})/', trim($options['dbhost']), $match)){
- $dbhost = $match[1];
- $dbport = $match[2];
- } else {
- $dbhost = trim($options['dbhost']);
- $dbport = 3306;
- }
-
- self::$isHostingMode = (isset($options['hostingmode'])) ? 1 : 0;
-
- // Save DB connection info
- SP_Config::setValue('dbhost', $dbhost);
- SP_Config::setValue('dbname', self::$dbname);
- SP_Config::setValue('dbport', $dbport);
-
- // Set some basic configuration options
- SP_Config::setDefaultValues();
-
- try {
- self::checkDatabaseAdmin($dbhost, $dbadmin, $dbpass, $dbport);
- self::setupMySQLDatabase();
- self::createAdminAccount();
- } catch (InstallerException $e) {
- $error[] = array('type' => $e->getType(), 'description' => $e->getMessage(), 'hint' => $e->getHint());
- return ($error);
- }
-
- SP_Config::setConfigValue('version', implode(SP_Util::getVersion(true)));
- SP_Config::setValue('installed', 1);
- }
-
- return ($error);
- }
-
- /**
- * Comprobar la conexión con la BBDD.
- * Comprobar si la conexión con la base de datos para sysPass es posible con
- * los datos facilitados.
- *
- * @param string $dbhost host de conexión
- * @param string $dbadmin usuario de conexión
- * @param string $dbpass clave de conexión
- * @param int $dbport puerto de conexión a la BD
- * @throws InstallerException
- * @return none
- */
- private static function checkDatabaseAdmin($dbhost, $dbadmin, $dbpass, $dbport)
- {
- self::$dbc = @new mysqli($dbhost, $dbadmin, $dbpass, '', $dbport);
-
- if (!is_object(self::$dbc) || self::$dbc->connect_errno) {
- error_log('MySQL Error: ' . self::$dbc->connect_error . ' (' . self::$dbc->connect_errno . ')');
-
- throw new InstallerException('critical',
- _('No es posible conectar con la BD'),
- _('Compruebe los datos de conexión') . ' ' . self::$dbc->connect_error);
- }
- }
-
- /**
- * Configurar la base de datos.
- * Esta función crea la base de datos y el usuario necesario para sysPass.
- *
- * @throws InstallerException
- * @return none
- */
- private static function setupMySQLDatabase()
- {
- $oldUser = SP_Config::getValue('dbuser', false);
-
- //this should be enough to check for admin rights in mysql
- $query = "SELECT user "
- . "FROM mysql.user "
- . "WHERE user='" . self::$username . "' and host='" . self::$dbhost . "';";
-
- // Hash DB connection password
- $dbpassword = (!self::$isHostingMode) ? md5(time() . self::$password) : self::$password;
-
- self::$dbuser = (!self::$isHostingMode) ? substr('sp_' . self::$username, 0, 16) : self::$username;
-
- if (!self::$dbc->query($query)) {
- if (self::$dbuser != $oldUser) {
- self::createDBUser($dbpassword);
-
- SP_Config::setValue('dbuser', self::$dbuser);
- SP_Config::setValue('dbpass', $dbpassword);
- }
- } else {
- if (self::$username != $oldUser) {
- SP_Config::setValue('dbuser', self::$dbuser);
- SP_Config::setValue('dbpass', $dbpassword);
- }
- }
-
- self::createMySQLDatabase($dbpassword);
-
- if (!self::checkDatabaseExist()) {
- self::createDBStructure();
- } else {
- throw new InstallerException('critical'
- , _('La BBDD ya existe')
- , _('Indique una nueva Base de Datos o elimine la existente'));
- }
-
-// self::$dbc->close();
- }
-
- /**
- * Crear el usuario para conectar con la base de datos.
- * Esta función crea el usuario para conectar con la base de datos.
- * Si se marca en modo hosting, no se crea el usuario.
- *
- * @param string $dbpassword clave del usuario de sysPass
- * @throws InstallerException
- * @return none
- */
- private static function createDBUser($dbpassword)
- {
- if (self::$isHostingMode) {
- return;
- }
-
- $query = "CREATE USER '" . self::$dbuser . "'@'localhost' IDENTIFIED BY '" . $dbpassword . "'";
-
- if (!self::$dbc->query($query)) {
- throw new InstallerException('critical'
- , _('El usuario de MySQL ya existe') . " (" . self::$dbuser . ")"
- , _('Indique un nuevo usuario o elimine el existente'));
- }
- }
-
- /**
- * Crear la base de datos.
- *
- * @param string $dbpassword clave del usuario de sysPass
- * @throws InstallerException
- * @return none
- */
- private static function createMySQLDatabase($dbpassword)
- {
- $query = "CREATE DATABASE IF NOT EXISTS `" . self::$dbname . "`";
-
- if (!self::$dbc->query($query)) {
- throw new InstallerException('critical'
- , _('Error al crear la BBDD') . " (" . self::$dbc->error . ")"
- , _('Verifique los permisos del usuario de la Base de Datos'));
- }
-
- if (!self::$isHostingMode) {
- $dbhost = (!preg_match('/(127\.0\.0\.1|localhost)/i', self::$dbhost)) ? $_SERVER['SERVER_ADDR'] : self::$dbhost;
- $query = "GRANT ALL PRIVILEGES ON `" . self::$dbname . "`.* TO '" . self::$dbuser . "'@'$dbhost' IDENTIFIED BY '$dbpassword';";
-
- self::$dbc->query($query);
-
- if (!self::$dbc->query($query)) {
- throw new InstallerException('critical'
- , _('Error al establecer permisos de la BBDD') . " (" . self::$dbc->error . ")"
- , _('Verifique los permisos del usuario de la Base de Datos'));
- }
- }
- }
-
- /**
- * Comprobar si la base de datos indicada existe.
- *
- * @return bool
- */
- private static function checkDatabaseExist()
- {
- $query = "SELECT COUNT(*) "
- . "FROM information_schema.tables "
- . "WHERE table_schema = '" . self::$dbname . "' "
- . "AND table_name = 'usrData';";
-
- $resquery = self::$dbc->query($query);
-
- if ($resquery) {
- $row = $resquery->fetch_row();
- }
-
- if (!$resquery || $row[0] == 0) {
- return false;
- }
-
- return true;
- }
-
- /**
- * Crear la estructura de la base de datos.
- * Esta función crea la estructura de la base de datos a partir del archivo dbsctructure.sql.
- *
- * @throws InstallerException
- * @return none
- */
- private static function createDBStructure()
- {
- $fileName = dirname(__FILE__) . '/dbstructure.sql';
-
- if (!file_exists($fileName)) {
- throw new InstallerException('critical'
- , _('El archivo de estructura de la BBDD no existe')
- , _('No es posible crear la BBDD de la aplicación. Descárguela de nuevo.'));
- }
-
- // Usar la base de datos de sysPass
- if (!self::$dbc->select_db(self::$dbname)) {
- throw new InstallerException('critical'
- , _('Error al seleccionar la BBDD') . " '" . self::$dbname . "' (" . self::$dbc->error . ")"
- , _('No es posible usar la Base de Datos para crear la estructura. Compruebe los permisos y que no exista.'));
- }
-
- // Leemos el archivo SQL para crear las tablas de la BBDD
- $handle = fopen($fileName, 'rb');
-
- if ($handle) {
- while (!feof($handle)) {
- $buffer = stream_get_line($handle, 1000000, ";\n");
- if (strlen(trim($buffer)) > 0) {
- if (!self::$dbc->query($buffer)) {
- // drop database on error
- self::$dbc->query("DROP DATABASE " . self::$dbname . ";");
- throw new InstallerException('critical'
- , _('Error al crear la BBDD')
- , _('Error al crear la estructura de la Base de Datos.'));
- }
- }
- }
- }
- }
-
- /**
- * Crear el usuario admin de sysPass.
- * Esta función crea el grupo, perfil y usuario 'admin' para utilizar sysPass.
- *
- * @throws InstallerException
- * @return none
- */
- private static function createAdminAccount()
- {
- $user = new SP_Users;
-
- // Datos del grupo
- SP_Groups::$groupName = "Admins";
- SP_Groups::$groupDescription = "Admins";
-
- if (!SP_Groups::addGroup()) {
- self::rollback();
-
- throw new InstallerException("critical"
- , _('Error al crear el grupo "admin"')
- , _('Informe al desarrollador'));
- }
-
- // Establecer el id de grupo del usuario al recién creado
- $user->userGroupId = SP_Groups::$queryLastId;
-
- $profileProp = array("pAccView" => 1,
- "pAccViewPass" => 1,
- "pAccViewHistory" => 1,
- "pAccEdit" => 1,
- "pAccEditPass" => 1,
- "pAccAdd" => 1,
- "pAccDel" => 1,
- "pAccFiles" => 1,
- "pConfig" => 1,
- "pConfigMpw" => 1,
- "pConfigBack" => 1,
- "pAppMgmtCat" => 1,
- "pAppMgmtCust" => 1,
- "pUsers" => 1,
- "pGroups" => 1,
- "pProfiles" => 1,
- "pEventlog" => 1);
-
- SP_Profiles::$profileName = 'Admin';
-
- if (!SP_Profiles::addProfile($profileProp)) {
- self::rollback();
-
- throw new InstallerException("critical"
- , _('Error al crear el perfil "admin"')
- , _('Informe al desarrollador'));
- }
-
- // Establecer el id de perfil del usuario al recién creado
- $user->userProfileId = SP_Profiles::$queryLastId;
-
- // Datos del usuario
- $user->userLogin = self::$username;
- $user->userPass = self::$password;
- $user->userName = "Admin";
- $user->userIsAdminApp = 1;
-
-
- if (!$user->addUser()) {
- self::rollback();
-
- throw new InstallerException('critical'
- , _('Error al crear el usuario "admin"')
- , _('Informe al desarrollador'));
- }
-
- // Guardar el hash de la clave maestra
- SP_Config::$arrConfigValue["masterPwd"] = SP_Crypt::mkHashPassword(self::$masterPassword);
- SP_Config::$arrConfigValue["lastupdatempass"] = time();
- SP_Config::writeConfig(true);
-
- $user->userId = $user->queryLastId; // Needed for update user's master password
-
- if (!$user->updateUserMPass(self::$masterPassword, false)) {
- self::rollback();
-
- throw new InstallerException('critical'
- , _('Error al actualizar la clave maestra del usuario "admin"')
- , _('Informe al desarrollador'));
- }
- }
-
- /**
- * Deshacer la instalación en caso de fallo.
- * Esta función elimina la base de datos y el usuario de sysPass
- *
- * @return none
- */
- private static function rollback()
- {
- self::$dbc->query("DROP DATABASE IF EXISTS " . self::$dbname . ";");
- self::$dbc->query("DROP USER '" . self::$dbuser . "'@'" . self::$dbhost . "';");
- self::$dbc->query("DROP USER '" . self::$dbuser . "'@'%';");
- SP_Config::deleteKey('dbuser');
- SP_Config::deleteKey('dbpass');
- }
-
-}
diff --git a/inc/ldap.class.php b/inc/ldap.class.php
deleted file mode 100644
index 226a5db2..00000000
--- a/inc/ldap.class.php
+++ /dev/null
@@ -1,415 +0,0 @@
-.
- *
- */
-
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
-
-/**
- * Esta clase es la encargada de realizar la autentificación de usuarios de sysPass.
- */
-class SP_LDAP
-{
- // Variabla que contiene los datos de una búsqueda
- public static $ldapSearchData;
-
- // Variable para determinar si conecta con Active Directory
- private static $isADS = false;
- // Variables de conexión con LDAP
- private static $ldapConn;
- private static $ldapServer;
- private static $searchBase;
- private static $bindDN;
- private static $bindPass;
- private static $ldapGroup;
-
- /**
- * Obtener el recurso de conexión a LDAP.
- *
- * @return resource
- */
- public static function getConn()
- {
- if (is_resource(self::$ldapConn)) {
- return self::$ldapConn;
- }
- }
-
- /**
- * Comprobar la conexión al servidor de LDAP.
- *
- * @param string $ldapServer con la dirección del servidor
- * @param string $bindDN con el usuario de conexión
- * @param string $bindPass con la clave del usuario de conexión
- * @param string $searchBase con la base para las búsquedas
- * @param string $ldapGroup con el grupo con los usuarios de acceso
- * @return false|int Con el número de entradas encontradas
- */
- public static function checkLDAPConn($ldapServer, $bindDN, $bindPass, $searchBase, $ldapGroup)
- {
- self::$ldapServer = $ldapServer;
- self::$bindDN = $bindDN;
- self::$bindPass = $bindPass;
- self::$searchBase = $searchBase;
- self::$ldapGroup = $ldapGroup;
-
- try {
- self::ldapConnect();
- self::ldapBind();
- $numObjects = self::searchBase();
- } catch (Exception $e) {
- return false;
- }
-
- return $numObjects;
- }
-
- /**
- * Realizar la conexión al servidor de LDAP.
- *
- * @throws Exception
- * @return bool
- */
- public static function ldapConnect()
- {
- $message['action'] = __FUNCTION__;
-
- // Conexión al servidor LDAP
- if (!self::$ldapConn = @ldap_connect(self::$ldapServer)) {
- $message['text'][] = _('No es posible conectar con el servidor de LDAP') . " '" . self::$ldapServer . "'";
- $message['text'][] = 'LDAP ERROR: ' . ldap_error(self::$ldapConn) . '(' . ldap_errno(self::$ldapConn) . ')';
-
- SP_Log::wrLogInfo($message);
-
- throw new Exception(_('No es posible conectar con el servidor de LDAP'));
- }
-
- @ldap_set_option(self::$ldapConn, LDAP_OPT_NETWORK_TIMEOUT, 10); // Set timeout
- @ldap_set_option(self::$ldapConn, LDAP_OPT_PROTOCOL_VERSION, 3); // Set LDAP version
-
- return true;
- }
-
- /**
- * Realizar la autentificación con el servidor de LDAP.
- *
- * @param string $userDN con el DN del usuario
- * @param string $userPass con la clave del usuario
- * @throws Exception
- * @return bool
- */
- public static function ldapBind($userDN = '', $userPass = '')
- {
- $message['action'] = __FUNCTION__;
-
- $dn = ($userDN) ? $userDN : self::$bindDN;
- $pass = ($userPass) ? $userPass : self::$bindPass;
-
- if (!@ldap_bind(self::$ldapConn, $dn, $pass)) {
- $message['text'][] = _('Error al conectar (BIND)');
- $message['text'][] = 'LDAP ERROR: ' . ldap_error(self::$ldapConn) . '(' . ldap_errno(self::$ldapConn) . ')';
- $message['text'][] = 'LDAP DN: ' . $dn;
-
- SP_Log::wrLogInfo($message);
-
- throw new Exception(_('Error al conectar (BIND)'));
- }
-
- return true;
- }
-
- /**
- * Realizar una búsqueda de objetos en la ruta indicada.
- *
- * @throws Exception
- * @return int con el número de resultados
- */
- private static function searchBase()
- {
- $message['action'] = __FUNCTION__;
-
- $groupDN = (!empty(self::$ldapGroup)) ? self::searchGroupDN() : '*';
- $filter = '(&(|(memberOf=' . $groupDN . ')(groupMembership=' . $groupDN . '))(|(objectClass=inetOrgPerson)(objectClass=person)(objectClass=simpleSecurityObject)))';
- $filterAttr = array("dn");
-
- $searchRes = @ldap_search(self::$ldapConn, self::$searchBase, $filter, $filterAttr);
-
- if (!$searchRes) {
- $message['text'][] = _('Error al buscar objetos en DN base');
- $message['text'][] = 'LDAP ERROR: ' . ldap_error(self::$ldapConn) . '(' . ldap_errno(self::$ldapConn) . ')';
- $message['text'][] = 'LDAP FILTER: ' . $filter;
-
- SP_Log::wrLogInfo($message);
-
- throw new Exception(_('Error al buscar objetos en DN base'));
- }
-
- return @ldap_count_entries(self::$ldapConn, $searchRes);
- }
-
- /**
- * Obtener el RDN del grupo.
- *
- * @throws Exception
- * @return string con el RDN del grupo
- */
- private static function searchGroupDN()
- {
- $message['action'] = __FUNCTION__;
- $groupName = array();
-
- if (preg_match('/^cn=([\w\s-]+),.*/i', self::$ldapGroup, $groupName)) {
- $filter = '(cn=' . $groupName[1] . ')';
- } else {
- $filter = '(cn=' . self::$ldapGroup . ')';
- }
-
- $filterAttr = array("dn", "cn");
-
- $searchRes = @ldap_search(self::$ldapConn, self::$searchBase, $filter, $filterAttr);
-
- if (!$searchRes) {
- $message['text'][] = _('Error al buscar RDN de grupo');
- $message['text'][] = 'LDAP ERROR: ' . ldap_error(self::$ldapConn) . '(' . ldap_errno(self::$ldapConn) . ')';
- $message['text'][] = 'LDAP FILTER: ' . $filter;
-
- SP_Log::wrLogInfo($message);
-
- throw new Exception(_('Error al buscar RDN de grupo'));
- }
-
- if (@ldap_count_entries(self::$ldapConn, $searchRes) === 1) {
- $ldapSearchData = @ldap_get_entries(self::$ldapConn, $searchRes);
-
- if (!$ldapSearchData) {
- $message['text'][] = _('Error al buscar RDN de grupo');
- $message['text'][] = 'LDAP ERROR: ' . ldap_error(self::$ldapConn) . '(' . ldap_errno(self::$ldapConn) . ')';
-
- SP_Log::wrLogInfo($message);
-
- throw new Exception(_('Error al buscar RDN de grupo'));
- }
-
- $message['text'][] = _('RDN de grupo encontrado');
- $message['text'][] = 'RDN: ' . $ldapSearchData[0]["dn"];
-
- SP_Log::wrLogInfo($message);
-
- return $ldapSearchData[0]["dn"];
- } else {
- $message['text'][] = _('Error al buscar RDN de grupo');
- $message['text'][] = 'LDAP FILTER: ' . $filter;
-
- SP_Log::wrLogInfo($message);
-
- throw new Exception(_('Error al buscar RDN de grupo'));
- }
- }
-
- /**
- * Comprobar si los parámetros necesario de LDAP están establecidos.
- *
- * @return bool
- */
- public static function checkLDAPParams()
- {
- self::$searchBase = SP_Config::getValue('ldap_base');
- self::$ldapServer = SP_Config::getValue('ldap_server');
- self::$bindDN = SP_Config::getValue('ldap_binduser');
- self::$bindPass = SP_Config::getValue('ldap_bindpass');
- self::$ldapGroup = SP_Config::getValue('ldap_group', '*');
- self::$isADS = SP_Config::getValue('ldap_ads', false);
-
- if (!self::$searchBase || !self::$ldapServer || !self::$bindDN || !self::$bindPass) {
- $message['action'] = __FUNCTION__;
- $message['text'][] = _('Los parámetros de LDAP no están configurados');
-
- SP_Log::wrLogInfo($message);
-
- return false;
- }
-
- return true;
- }
-
- /**
- * Obtener el RDN del usuario que realiza el login.
- *
- * @param string $userLogin con el login del usuario
- * @throws Exception
- * @return none
- */
- public static function getUserDN($userLogin)
- {
- $message['action'] = __FUNCTION__;
-
- if (self::$isADS === true) {
- $filter = '(&(|(samaccountname=' . $userLogin . ')(cn=' . $userLogin . ')(uid=' . $userLogin . '))(|(objectClass=inetOrgPerson)(objectClass=person)(objectClass=simpleSecurityObject))(objectCategory=person))';
- } else {
- $filter = '(&(|(samaccountname=' . $userLogin . ')(cn=' . $userLogin . ')(uid=' . $userLogin . '))(|(objectClass=inetOrgPerson)(objectClass=person)(objectClass=simpleSecurityObject)))';
- }
-
- $filterAttr = array("dn", "displayname", "samaccountname", "mail", "memberof", "lockouttime", "fullname", "groupmembership", "mail");
-
- $searchRes = @ldap_search(self::$ldapConn, self::$searchBase, $filter, $filterAttr);
-
- if (!$searchRes) {
- $message['text'][] = _('Error al buscar el DN del usuario');
- $message['text'][] = 'LDAP ERROR: ' . ldap_error(self::$ldapConn) . '(' . ldap_errno(self::$ldapConn) . ')';
- $message['text'][] = 'LDAP FILTER: ' . $filter;
-
- SP_Log::wrLogInfo($message);
-
- throw new Exception(_('Error al buscar el DN del usuario'));
- }
-
- if (@ldap_count_entries(self::$ldapConn, $searchRes) === 1) {
- self::$ldapSearchData = @ldap_get_entries(self::$ldapConn, $searchRes);
-
- if (!self::$ldapSearchData) {
- $message['text'][] = _('Error al localizar el usuario en LDAP');
- $message['text'][] = 'LDAP ERROR: ' . ldap_error(self::$ldapConn) . '(' . ldap_errno(self::$ldapConn) . ')';
-
- SP_Log::wrLogInfo($message);
-
- throw new Exception(_('Error al localizar el usuario en LDAP'));
- }
- } else {
- $message['text'][] = _('Error al buscar el DN del usuario');
- $message['text'][] = 'LDAP FILTER: ' . $filter;
-
- SP_Log::wrLogInfo($message);
-
- throw new Exception(_('Error al buscar el DN del usuario'));
- }
- }
-
- /**
- * Realizar la desconexión del servidor de LDAP.
- *
- * @return none
- */
- public static function unbind()
- {
- @ldap_unbind(self::$ldapConn);
- }
-
- /**
- * Obtener los atributos del usuario.
- *
- * @param array $attribs con los atributos a obtener
- * @return array con los atributos disponibles y sus valores
- */
- public static function getLDAPAttr($attribs)
- {
- $res = array();
-
- foreach (self::$ldapSearchData as $entryValue) {
- if (is_array($entryValue)) {
- foreach ($entryValue as $entryAttr => $attrValue) {
- if (is_array($attrValue)) {
- if (array_key_exists(strtolower($entryAttr), $attribs)) {
- if ($attrValue['count'] > 1) {
- // Almacenamos un array de valores
- $res[$attribs[$entryAttr]] = $attrValue;
- } else {
- // Almacenamos 1 solo valor
- $res[$attribs[$entryAttr]] = $attrValue[0];
- }
- }
- }
- }
- }
- }
-
- return $res;
- }
-
- /**
- * Buscar al usuario en un grupo.
- *
- * @param string $userDN con el RDN del usuario
- * @throws Exception
- * @return bool
- */
- public static function searchUserInGroup($userDN)
- {
- $message['action'] = __FUNCTION__;
-
- $ldapGroup = SP_Config::getValue('ldap_group');
-
- // El filtro de grupo no está establecido
- if (empty($ldapGroup)) {
- return true;
- }
-
- // Obtenemos el DN del grupo
- if (!$groupDN = self::searchGroupDN()) {
- return false;
- }
-
- $userDN = self::escapeLdapDN($userDN);
-
- $filter = '(&(' . $groupDN . ')(|(member=' . $userDN . ')(uniqueMember=' . $userDN . '))(|(objectClass=groupOfNames)(objectClass=groupOfUniqueNames)(objectClass=group)))';
- $filterAttr = array('member', 'uniqueMember');
-
- $searchRes = @ldap_search(self::$ldapConn, self::$searchBase, $filter, $filterAttr);
-
- if (!$searchRes) {
- $message['text'][] = _('Error al buscar el grupo de usuarios');
- $message['text'][] = 'LDAP ERROR: ' . ldap_error(self::$ldapConn) . '(' . ldap_errno(self::$ldapConn) . ')';
- $message['text'][] = 'LDAP FILTER: ' . $filter;
-
- SP_Log::wrLogInfo($message);
-
- throw new Exception(_('Error al buscar el grupo de usuarios'));
- }
-
- $numEntries = ldap_count_entries(self::$ldapConn, $searchRes);
-
- if ($numEntries === 0) {
- $message['text'][] = _('El usuario no pertenece al grupo');
- $message['text'][] = 'LDAP ERROR: ' . ldap_error(self::$ldapConn) . '(' . ldap_errno(self::$ldapConn) . ')';
- $message['text'][] = 'LDAP FILTER: ' . $filter;
-
- SP_Log::wrLogInfo($message);
-
- throw new Exception(_('El usuario no pertenece al grupo'));
- }
-
- return true;
- }
-
- /**
- * Escapar carácteres especiales en el RDN de LDAP.
- *
- * @param string $dn con el RDN del usuario
- * @return string
- */
- private static function escapeLdapDN($dn)
- {
- $chars = array('/(,)(?!uid|cn|ou|dc)/i', '/(?)/', '/(<)/', '/(\+)/', '/(#)/', '/\G(\s)/', '/(\s)(?=\s*$)/', '/(\/)/');
- return preg_replace($chars, '\\\$1', $dn);
- }
-}
diff --git a/inc/locales/de_DE/LC_MESSAGES/messages.mo b/inc/locales/de_DE/LC_MESSAGES/messages.mo
index 9b0e227e..144d5a7f 100644
Binary files a/inc/locales/de_DE/LC_MESSAGES/messages.mo and b/inc/locales/de_DE/LC_MESSAGES/messages.mo differ
diff --git a/inc/locales/de_DE/LC_MESSAGES/messages.po b/inc/locales/de_DE/LC_MESSAGES/messages.po
index 7ea83cf1..64926d6d 100644
--- a/inc/locales/de_DE/LC_MESSAGES/messages.po
+++ b/inc/locales/de_DE/LC_MESSAGES/messages.po
@@ -1,16 +1,10 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-#
-# Translators:
-# Uwe Steinmann , 2014
msgid ""
msgstr ""
"Project-Id-Version: sysPass\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-07-28 18:31+0100\n"
-"PO-Revision-Date: 2015-07-28 18:33+0100\n"
-"Last-Translator: nuxsmin \n"
+"POT-Creation-Date: 2015-09-23 12:59+0100\n"
+"PO-Revision-Date: 2015-09-23 12:59+0100\n"
+"Last-Translator: nuxsmin \n"
"Language-Team: \n"
"Language: de_DE\n"
"MIME-Version: 1.0\n"
@@ -22,3870 +16,4740 @@ msgstr ""
"X-Generator: Poedit 1.6.10\n"
"X-Poedit-SearchPath-0: ../../../..\n"
-# Session not started or timeout
-#: ../../../../ajax/ajax_accountSave.php:33
-#: ../../../../ajax/ajax_appMgmtSave.php:34
-#: ../../../../ajax/ajax_backup.php:32 ../../../../ajax/ajax_checkLdap.php:32
-#: ../../../../ajax/ajax_configSave.php:33 ../../../../ajax/ajax_import.php:1
-#: ../../../../ajax/ajax_migrate.php:1
-#: ../../../../ajax/ajax_sendRequest.php:32
-msgid "La sesión no se ha iniciado o ha caducado"
-msgstr "Sitzung konnte nicht gestartet werden oder ist abgelaufen"
-
-# INVALID QUERY
-#: ../../../../ajax/ajax_accountSave.php:39
-#: ../../../../ajax/ajax_appMgmtSave.php:40
-#: ../../../../ajax/ajax_backup.php:38 ../../../../ajax/ajax_checkLdap.php:38
-#: ../../../../ajax/ajax_configSave.php:39 ../../../../ajax/ajax_files.php:40
-#: ../../../../ajax/ajax_getFiles.php:43 ../../../../ajax/ajax_import.php:1
-#: ../../../../ajax/ajax_migrate.php:1 ../../../../ajax/ajax_passReset.php:34
-#: ../../../../ajax/ajax_search.php:38
-#: ../../../../ajax/ajax_sendRequest.php:38
+#: ../../../../ajax/ajax_2fa.php:35 ../../../../ajax/ajax_accountSave.php:41
+#: ../../../../ajax/ajax_appMgmtSave.php:42
+#: ../../../../ajax/ajax_backup.php:39 ../../../../ajax/ajax_checkLdap.php:41
+#: ../../../../ajax/ajax_configSave.php:41 ../../../../ajax/ajax_files.php:41
+#: ../../../../ajax/ajax_getFiles.php:46 ../../../../ajax/ajax_import.php:49
+#: ../../../../ajax/ajax_migrate.php:45 ../../../../ajax/ajax_passReset.php:37
+#: ../../../../ajax/ajax_search.php:41
+#: ../../../../ajax/ajax_sendRequest.php:41
+#: ../../../../ajax/ajax_userPrefsSave.php:42
msgid "CONSULTA INVÁLIDA"
msgstr "Ungültige Anfrage"
-# Account name needed
-#: ../../../../ajax/ajax_accountSave.php:67
-#: ../../../../ajax/ajax_accountSave.php:92
+#: ../../../../ajax/ajax_2fa.php:55
+msgid "Código correcto"
+msgstr "Verifizierte Code"
+
+#: ../../../../ajax/ajax_2fa.php:58 ../../../../ajax/ajax_userPrefsSave.php:66
+msgid "Código incorrecto"
+msgstr "Falscher Code"
+
+#: ../../../../ajax/ajax_accountSave.php:35
+#: ../../../../ajax/ajax_appMgmtSave.php:36
+#: ../../../../ajax/ajax_backup.php:33 ../../../../ajax/ajax_checkLdap.php:35
+#: ../../../../ajax/ajax_configSave.php:35 ../../../../ajax/ajax_import.php:35
+#: ../../../../ajax/ajax_migrate.php:35
+#: ../../../../ajax/ajax_sendRequest.php:35
+#: ../../../../ajax/ajax_userPrefsSave.php:36
+#: ../../../../ajax/ajax_viewpass.php:36
+msgid "La sesión no se ha iniciado o ha caducado"
+msgstr "Sitzung konnte nicht gestartet werden oder ist abgelaufen"
+
+#: ../../../../ajax/ajax_accountSave.php:75
+#: ../../../../ajax/ajax_accountSave.php:90
msgid "Es necesario un nombre de cuenta"
msgstr "Kontoname ist notwendig"
-# Customer name needed
-#: ../../../../ajax/ajax_accountSave.php:71
+#: ../../../../ajax/ajax_accountSave.php:77
#: ../../../../ajax/ajax_accountSave.php:88
-#: ../../../../ajax/ajax_appMgmtSave.php:327
+#: ../../../../ajax/ajax_appMgmtSave.php:337
msgid "Es necesario un nombre de cliente"
msgstr "Kunde ist notwendig"
-# Username needed
-#: ../../../../ajax/ajax_accountSave.php:75
-#: ../../../../ajax/ajax_accountSave.php:96
+#: ../../../../ajax/ajax_accountSave.php:79
+#: ../../../../ajax/ajax_accountSave.php:92
msgid "Es necesario un usuario"
msgstr "Benutzername ist notwendig"
-# Password needed
-#: ../../../../ajax/ajax_accountSave.php:79
-msgid "Es necesario una clave"
+#: ../../../../ajax/ajax_accountSave.php:81
+#: ../../../../ajax/ajax_accountSave.php:103
+#, fuzzy
+msgid "Es necesaria una clave"
msgstr "Passwort ist notwendig"
-# Passwords mismatch
#: ../../../../ajax/ajax_accountSave.php:83
-#: ../../../../ajax/ajax_accountSave.php:109
-#: ../../../../ajax/ajax_appMgmtSave.php:123
-#: ../../../../ajax/ajax_appMgmtSave.php:149
-msgid "Las claves no coinciden"
-msgstr "Passwörter stimmen nicht"
+#: ../../../../ajax/ajax_accountSave.php:94
+msgid "Es necesario una categoría"
+msgstr "Eine Kategorie wird benötigt"
-# Invalid Id
-#: ../../../../ajax/ajax_accountSave.php:100
-#: ../../../../ajax/ajax_accountSave.php:113
+#: ../../../../ajax/ajax_accountSave.php:98
+#: ../../../../ajax/ajax_accountSave.php:107
msgid "Id inválido"
msgstr "Ungültige ID"
-# Password cannot be blank
-#: ../../../../ajax/ajax_accountSave.php:105
-#: ../../../../ajax/ajax_appMgmtSave.php:119
-#: ../../../../ajax/ajax_appMgmtSave.php:145
-msgid "La clave no puede estar en blanco"
-msgstr "Passwort darf nicht leer sein"
-
-# Invalid Action
-#: ../../../../ajax/ajax_accountSave.php:116
-#: ../../../../ajax/ajax_accountSave.php:264
-#: ../../../../ajax/ajax_appMgmtSave.php:179
-#: ../../../../ajax/ajax_appMgmtSave.php:240
-#: ../../../../ajax/ajax_appMgmtSave.php:318
-#: ../../../../ajax/ajax_appMgmtSave.php:369
-#: ../../../../ajax/ajax_appMgmtSave.php:418
-#: ../../../../ajax/ajax_configSave.php:239
+#: ../../../../ajax/ajax_accountSave.php:110
+#: ../../../../ajax/ajax_accountSave.php:263
+#: ../../../../ajax/ajax_appMgmtSave.php:543
+#: ../../../../ajax/ajax_configSave.php:297
+#: ../../../../ajax/ajax_userPrefsSave.php:79 ../../../../api.php:53
msgid "Acción Inválida"
msgstr "Ungültige Aktion"
-# Crypto module can't be loaded
#: ../../../../ajax/ajax_accountSave.php:122
-#: ../../../../inc/import.class.php:240
-msgid "No se puede usar el módulo de encriptación"
-msgstr "Kryptographie-Modul konnte nicht geladen werden"
+#: ../../../../ajax/ajax_appMgmtSave.php:111
+#: ../../../../ajax/ajax_appMgmtSave.php:155
+#: ../../../../ajax/ajax_backup.php:70
+msgid "Las claves no coinciden"
+msgstr "Passwörter stimmen nicht"
-# Error on creating encryption data
-#: ../../../../ajax/ajax_accountSave.php:129
-#: ../../../../inc/import.class.php:247
-msgid "Error al generar datos cifrados"
-msgstr "Fehler beim Erzeugen der verschlüsselten Daten"
-
-# Duplicated customer
-#: ../../../../ajax/ajax_accountSave.php:144
-#: ../../../../ajax/ajax_accountSave.php:193
-msgid "Cliente duplicado"
-msgstr "Doppelter Kunde"
-
-# Error on creating customer
-#: ../../../../ajax/ajax_accountSave.php:148
-#: ../../../../ajax/ajax_accountSave.php:197
-#: ../../../../ajax/ajax_appMgmtSave.php:341
-msgid "Error al crear el cliente"
-msgstr "Fehler beim Anlegen des Kunden"
-
-# Account added
-#: ../../../../ajax/ajax_accountSave.php:172
+#: ../../../../ajax/ajax_accountSave.php:173
msgid "Cuenta creada"
msgstr "Konto hinzugefügt"
-# Error on account creation
-#: ../../../../ajax/ajax_accountSave.php:174
+#: ../../../../ajax/ajax_accountSave.php:176
msgid "Error al crear la cuenta"
msgstr "Fehler beim Anlegen des Kontos"
-# No changes
-#: ../../../../ajax/ajax_accountSave.php:207
+#: ../../../../ajax/ajax_accountSave.php:211
msgid "Sin cambios"
msgstr "Keine Änderungen"
-# Account updated
-#: ../../../../ajax/ajax_accountSave.php:212
-#: ../../../../inc/account.class.php:369
+#: ../../../../ajax/ajax_accountSave.php:223
msgid "Cuenta actualizada"
msgstr "Konto aktualisiert"
-# Error on updating account
-#: ../../../../ajax/ajax_accountSave.php:214
+#: ../../../../ajax/ajax_accountSave.php:226
msgid "Error al modificar la cuenta"
msgstr "Fehler beim Änderns des Kontos"
-# Account deleted
-#: ../../../../ajax/ajax_accountSave.php:221
+#: ../../../../ajax/ajax_accountSave.php:233
msgid "Cuenta eliminada"
msgstr "Konto gelöscht"
-# Error on account deletion
-#: ../../../../ajax/ajax_accountSave.php:223
+#: ../../../../ajax/ajax_accountSave.php:236
msgid "Error al eliminar la cuenta"
msgstr "Fehler beim Löschen eines Kontos"
-# Password updated
-#: ../../../../ajax/ajax_accountSave.php:233
-#: ../../../../ajax/ajax_appMgmtSave.php:156
-#: ../../../../ajax/ajax_passReset.php:79
+#: ../../../../ajax/ajax_accountSave.php:246
+#: ../../../../ajax/ajax_appMgmtSave.php:161
+#: ../../../../ajax/ajax_passReset.php:74
msgid "Clave actualizada"
msgstr "Passwort aktualisiert"
-# Error on updating password
-#: ../../../../ajax/ajax_accountSave.php:235
+#: ../../../../ajax/ajax_accountSave.php:249
msgid "Error al actualizar la clave"
msgstr "Fehler beim Ändern des Passworts"
-# Account restored
-#: ../../../../ajax/ajax_accountSave.php:258
+#: ../../../../ajax/ajax_accountSave.php:256
msgid "Cuenta restaurada"
msgstr "Konto wiederhergestellt"
-# Error on restoring account
-#: ../../../../ajax/ajax_accountSave.php:261
+#: ../../../../ajax/ajax_accountSave.php:259
msgid "Error al restaurar cuenta"
msgstr "Fehler bei der Wiederherstellung der Rechnung"
-# Edit User
-#: ../../../../ajax/ajax_appMgmtData.php:46
-#: ../../../../ajax/ajax_getContent.php:137
+#: ../../../../ajax/ajax_appMgmtData.php:54
+msgid "Ver Usuario"
+msgstr "Benutzer anzeigen"
+
+#: ../../../../ajax/ajax_appMgmtData.php:61
+#: ../../../../web/UsersMgmtC.class.php:136
msgid "Editar Usuario"
msgstr "Benutzer ändern"
-# New User
-#: ../../../../ajax/ajax_appMgmtData.php:51
-#: ../../../../ajax/ajax_getContent.php:135
-#: ../../../../inc/users.class.php:816
+#: ../../../../ajax/ajax_appMgmtData.php:67
+#: ../../../../inc/UserBase.class.php:381
+#: ../../../../web/UsersMgmtC.class.php:121
msgid "Nuevo Usuario"
msgstr "Neuer Benutzer"
-# Edit Group
-#: ../../../../ajax/ajax_appMgmtData.php:56
-#: ../../../../ajax/ajax_getContent.php:168
+#: ../../../../ajax/ajax_appMgmtData.php:73
+msgid "Ver Grupo"
+msgstr "Gruppe anzeigen"
+
+#: ../../../../ajax/ajax_appMgmtData.php:80
+#: ../../../../web/UsersMgmtC.class.php:202
msgid "Editar Grupo"
msgstr "Gruppe ändern"
-# New Group
-#: ../../../../ajax/ajax_appMgmtData.php:61
-#: ../../../../ajax/ajax_getContent.php:167
-#: ../../../../inc/groups.class.php:154
+#: ../../../../ajax/ajax_appMgmtData.php:86
+#: ../../../../inc/Groups.class.php:152 ../../../../inc/Groups.class.php:253
+#: ../../../../web/UsersMgmtC.class.php:194
msgid "Nuevo Grupo"
msgstr "Neue Gruppe"
-# Edit Profile
-#: ../../../../ajax/ajax_appMgmtData.php:66
-#: ../../../../ajax/ajax_getContent.php:200
+#: ../../../../ajax/ajax_appMgmtData.php:92
+msgid "Ver Perfil"
+msgstr "Profil anzeigen"
+
+#: ../../../../ajax/ajax_appMgmtData.php:99
+#: ../../../../web/UsersMgmtC.class.php:267
msgid "Editar Perfil"
msgstr "Profil ändern"
-# New Profile
-#: ../../../../ajax/ajax_appMgmtData.php:71
-#: ../../../../ajax/ajax_getContent.php:199
-#: ../../../../inc/profiles.class.php:206
+#: ../../../../ajax/ajax_appMgmtData.php:105
+#: ../../../../inc/ProfileBase.class.php:512
+#: ../../../../web/UsersMgmtC.class.php:252
msgid "Nuevo Perfil"
msgstr "Neues Profil"
-# Edit Customer
-#: ../../../../ajax/ajax_appMgmtData.php:76
-#: ../../../../ajax/ajax_getContent.php:285
+#: ../../../../ajax/ajax_appMgmtData.php:111
+msgid "Ver Cliente"
+msgstr "Kunde anzeigen"
+
+#: ../../../../ajax/ajax_appMgmtData.php:118
+#: ../../../../web/AccountsMgmtC.class.php:152
msgid "Editar Cliente"
msgstr "Kunde ändern"
-# New Customer
-#: ../../../../ajax/ajax_appMgmtData.php:81
-#: ../../../../ajax/ajax_getContent.php:284
-#: ../../../../inc/customer.class.php:58
+#: ../../../../ajax/ajax_appMgmtData.php:124
+#: ../../../../inc/Customer.class.php:65
+#: ../../../../web/AccountsMgmtC.class.php:145
msgid "Nuevo Cliente"
msgstr "Neuer Kunde"
-# Edit Category
-#: ../../../../ajax/ajax_appMgmtData.php:86
-#: ../../../../ajax/ajax_getContent.php:253
+#: ../../../../ajax/ajax_appMgmtData.php:130
+msgid "Ver Categoría"
+msgstr "Kategorie anzeigen"
+
+#: ../../../../ajax/ajax_appMgmtData.php:137
+#: ../../../../web/AccountsMgmtC.class.php:94
msgid "Editar Categoría"
msgstr "Kategorie ändern"
-# New Category
-#: ../../../../ajax/ajax_appMgmtData.php:91
-#: ../../../../ajax/ajax_getContent.php:252
-#: ../../../../inc/category.class.php:79
+#: ../../../../ajax/ajax_appMgmtData.php:143
+#: ../../../../inc/Category.class.php:83
+#: ../../../../web/AccountsMgmtC.class.php:86
msgid "Nueva Categoría"
msgstr "Neue Kategorie"
-# Username required
-#: ../../../../ajax/ajax_appMgmtSave.php:76
+#: ../../../../ajax/ajax_appMgmtData.php:149
+msgid "Ver Autorización"
+msgstr "Authentifizierung anzeigen"
+
+#: ../../../../ajax/ajax_appMgmtData.php:156
+#: ../../../../inc/ApiTokens.class.php:189
+#: ../../../../web/UsersMgmtC.class.php:399
+msgid "Nueva Autorización"
+msgstr "Neue Authentifizierung"
+
+#: ../../../../ajax/ajax_appMgmtData.php:162
+#: ../../../../web/UsersMgmtC.class.php:414
+msgid "Editar Autorización"
+msgstr "Authentifizierung bearbeiten"
+
+#: ../../../../ajax/ajax_appMgmtData.php:168
+#: ../../../../web/AccountsMgmtC.class.php:273
+msgid "Nuevo Campo"
+msgstr "Neues Feld"
+
+#: ../../../../ajax/ajax_appMgmtData.php:174
+#: ../../../../web/AccountsMgmtC.class.php:280
+msgid "Editar Campo"
+msgstr "Feld bearbeiten"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:85
msgid "Es necesario un nombre de usuario"
msgstr "Benutzername ist notwendig"
-# Login required
-#: ../../../../ajax/ajax_appMgmtSave.php:80
+#: ../../../../ajax/ajax_appMgmtSave.php:87
msgid "Es necesario un login"
msgstr "Login ist notwendig"
-# Profile required
-#: ../../../../ajax/ajax_appMgmtSave.php:84
+#: ../../../../ajax/ajax_appMgmtSave.php:89
msgid "Es necesario un perfil"
msgstr "Profil ist notwendig"
-# Group required
-#: ../../../../ajax/ajax_appMgmtSave.php:88
+#: ../../../../ajax/ajax_appMgmtSave.php:91
msgid "Es necesario un grupo"
msgstr "Gruppe ist notwendig"
-# Email required
-#: ../../../../ajax/ajax_appMgmtSave.php:92
+#: ../../../../ajax/ajax_appMgmtSave.php:93
msgid "Es necesario un email"
msgstr "E-Mail ist notwendig"
-# Duplicated user login
-#: ../../../../ajax/ajax_appMgmtSave.php:110
-msgid "Login de usuario duplicado"
-msgstr "Dupbliziertes Benutzer-Anmeldung "
-
-# Duplicated user email
-#: ../../../../ajax/ajax_appMgmtSave.php:113
-msgid "Email de usuario duplicado"
-msgstr "Bereits verwendete Benutzer-E-Mail"
-
-# User added
-#: ../../../../ajax/ajax_appMgmtSave.php:127
-msgid "Usuario creado"
-msgstr "Benutzer hinzugefügt"
-
-# Error on creating user
-#: ../../../../ajax/ajax_appMgmtSave.php:130
-msgid "Error al crear el usuario"
-msgstr "Fehler beim Anlegen des Benutzers"
-
-# User updated
-#: ../../../../ajax/ajax_appMgmtSave.php:133
-#: ../../../../inc/users.class.php:228
-msgid "Usuario actualizado"
-msgstr "Benutzer aktualisiert"
-
-# Error on user update
-#: ../../../../ajax/ajax_appMgmtSave.php:136
-msgid "Error al actualizar el usuario"
-msgstr "Fehler beim Ändern des Benutzers"
-
-# Ey, this is a DEMO!!
-#: ../../../../ajax/ajax_appMgmtSave.php:141
-#: ../../../../ajax/ajax_appMgmtSave.php:163
-#: ../../../../ajax/ajax_configSave.php:214 ../../../../ajax/ajax_import.php:1
-#: ../../../../ajax/ajax_migrate.php:1
+#: ../../../../ajax/ajax_appMgmtSave.php:95
+#: ../../../../ajax/ajax_appMgmtSave.php:144
+#: ../../../../ajax/ajax_appMgmtSave.php:168
+#: ../../../../ajax/ajax_configSave.php:272
+#: ../../../../ajax/ajax_import.php:39 ../../../../ajax/ajax_migrate.php:39
+#: ../../../../ajax/ajax_userPrefsSave.php:55
msgid "Ey, esto es una DEMO!!"
msgstr "Hey, dies ist eine DEMO!!"
-# Error on updating password
-#: ../../../../ajax/ajax_appMgmtSave.php:159
-#: ../../../../ajax/ajax_passReset.php:83
+#: ../../../../ajax/ajax_appMgmtSave.php:100
+msgid "Login de usuario duplicado"
+msgstr "Dupbliziertes Benutzer-Anmeldung "
+
+#: ../../../../ajax/ajax_appMgmtSave.php:103
+msgid "Email de usuario duplicado"
+msgstr "Bereits verwendete Benutzer-E-Mail"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:109
+#: ../../../../ajax/ajax_appMgmtSave.php:146
+msgid "La clave no puede estar en blanco"
+msgstr "Passwort darf nicht leer sein"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:122
+msgid "Usuario creado"
+msgstr "Benutzer hinzugefügt"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:125
+msgid "Error al crear el usuario"
+msgstr "Fehler beim Anlegen des Benutzers"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:135
+#: ../../../../inc/UserUtil.class.php:103
+msgid "Usuario actualizado"
+msgstr "Benutzer aktualisiert"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:138
+msgid "Error al actualizar el usuario"
+msgstr "Fehler beim Ändern des Benutzers"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:164
+#: ../../../../ajax/ajax_passReset.php:78
msgid "Error al modificar la clave"
msgstr "Fehler beim Ändern des Passworts"
-# Unable to delete, user in use
-#: ../../../../ajax/ajax_appMgmtSave.php:169
+#: ../../../../ajax/ajax_appMgmtSave.php:170
msgid "No es posible eliminar, usuario en uso"
msgstr "Benutzer kann nicht gelöscht werden, wird noch benutzt"
-# User deleted
-#: ../../../../ajax/ajax_appMgmtSave.php:173
+#: ../../../../ajax/ajax_appMgmtSave.php:174
msgid "Usuario eliminado"
msgstr "Benutzer gelöscht"
-# Error on user deletion
-#: ../../../../ajax/ajax_appMgmtSave.php:176
+#: ../../../../ajax/ajax_appMgmtSave.php:177
msgid "Error al eliminar el usuario"
msgstr "Fehler beim Löschen eines Benutzers"
-# Group name required
-#: ../../../../ajax/ajax_appMgmtSave.php:188
+#: ../../../../ajax/ajax_appMgmtSave.php:192
msgid "Es necesario un nombre de grupo"
msgstr "Gruppename ist notwendig"
-# Duplicated group name
-#: ../../../../ajax/ajax_appMgmtSave.php:196
+#: ../../../../ajax/ajax_appMgmtSave.php:200
msgid "Nombre de grupo duplicado"
msgstr "Duplizierter Gruppenname"
-# Group added
-#: ../../../../ajax/ajax_appMgmtSave.php:201
+#: ../../../../ajax/ajax_appMgmtSave.php:212
msgid "Grupo creado"
msgstr "Gruppe hinzugefügt"
-# Error on group creation
-#: ../../../../ajax/ajax_appMgmtSave.php:203
+#: ../../../../ajax/ajax_appMgmtSave.php:214
msgid "Error al crear el grupo"
msgstr "Fehler beim Anlegen des Kunden"
-# Group updated
-#: ../../../../ajax/ajax_appMgmtSave.php:207
+#: ../../../../ajax/ajax_appMgmtSave.php:225
msgid "Grupo actualizado"
msgstr "Gruppe aktualisiert"
-# Error on updating group
-#: ../../../../ajax/ajax_appMgmtSave.php:210
+#: ../../../../ajax/ajax_appMgmtSave.php:228
msgid "Error al actualizar el grupo"
msgstr "Fehler beim Ändern der Gruppe"
-# Users
-#: ../../../../ajax/ajax_appMgmtSave.php:221
-#: ../../../../ajax/ajax_appMgmtSave.php:298
-#: ../../../../inc/tpl/accounts.php:283 ../../../../inc/tpl/profiles.php:88
+#: ../../../../ajax/ajax_appMgmtSave.php:237
+#: ../../../../ajax/ajax_appMgmtSave.php:314
+#: ../../../../inc/CustomFieldsBase.class.php:83
+#: ../../../../inc/themes/classic/account.inc:109
+#: ../../../../inc/themes/classic/groups.inc:24
+#: ../../../../inc/themes/classic/profiles.inc:85
+#: ../../../../inc/themes/material-blue/account.inc:134
+#: ../../../../inc/themes/material-blue/groups.inc:32
+#: ../../../../inc/themes/material-blue/profiles.inc:99
msgid "Usuarios"
msgstr "Benutzer"
-# Accounts
-#: ../../../../ajax/ajax_appMgmtSave.php:225
-#: ../../../../ajax/ajax_appMgmtSave.php:356
-#: ../../../../inc/category.class.php:271 ../../../../inc/tpl/profiles.php:45
+#: ../../../../ajax/ajax_appMgmtSave.php:241
+#: ../../../../inc/Category.class.php:266
+#: ../../../../inc/CustomFieldsBase.class.php:80
+#: ../../../../inc/Customer.class.php:150
+#: ../../../../inc/themes/classic/profiles.inc:15
+#: ../../../../inc/themes/material-blue/config.inc:139
+#: ../../../../inc/themes/material-blue/profiles.inc:19
msgid "Cuentas"
msgstr "Konten"
-# Unable to delete
-#: ../../../../ajax/ajax_appMgmtSave.php:228
-#: ../../../../ajax/ajax_appMgmtSave.php:300
-#: ../../../../ajax/ajax_appMgmtSave.php:358
-#: ../../../../ajax/ajax_appMgmtSave.php:407
+#: ../../../../ajax/ajax_appMgmtSave.php:244
+#: ../../../../ajax/ajax_appMgmtSave.php:316
+#: ../../../../inc/Category.class.php:119
+#: ../../../../inc/Customer.class.php:150
msgid "No es posible eliminar"
msgstr "Kann nicht gelöscht werden"
-# Group in use by:
-#: ../../../../ajax/ajax_appMgmtSave.php:228
+#: ../../../../ajax/ajax_appMgmtSave.php:244
msgid "Grupo en uso por:"
msgstr "Gruppe in Benutzung durch:"
-# Group deleted
-#: ../../../../ajax/ajax_appMgmtSave.php:233
+#: ../../../../ajax/ajax_appMgmtSave.php:249
msgid "Grupo eliminado"
msgstr "Gruppe gelöscht"
-# Error on group deletion
-#: ../../../../ajax/ajax_appMgmtSave.php:236
+#: ../../../../ajax/ajax_appMgmtSave.php:252
msgid "Error al eliminar el grupo"
msgstr "Fehler beim Löschen einer Gruppe"
-# Profile name needed
-#: ../../../../ajax/ajax_appMgmtSave.php:270
+#: ../../../../ajax/ajax_appMgmtSave.php:291
msgid "Es necesario un nombre de perfil"
msgstr "Profil ist notwendig"
-# Duplicated profile name
-#: ../../../../ajax/ajax_appMgmtSave.php:276
+#: ../../../../ajax/ajax_appMgmtSave.php:293
msgid "Nombre de perfil duplicado"
msgstr "Duplizierter Profilname"
-# Profile added
-#: ../../../../ajax/ajax_appMgmtSave.php:281
+#: ../../../../ajax/ajax_appMgmtSave.php:298
msgid "Perfil creado"
msgstr "Profil hinzugefügt"
-# Error on creating profile
-#: ../../../../ajax/ajax_appMgmtSave.php:284
+#: ../../../../ajax/ajax_appMgmtSave.php:301
msgid "Error al crear el perfil"
msgstr "Fehler beim Anlegen des Profils"
-# Profile updated
-#: ../../../../ajax/ajax_appMgmtSave.php:287
+#: ../../../../ajax/ajax_appMgmtSave.php:304
msgid "Perfil actualizado"
msgstr "Profil aktualisiert"
-# Error on updating profile
-#: ../../../../ajax/ajax_appMgmtSave.php:290
+#: ../../../../ajax/ajax_appMgmtSave.php:307
msgid "Error al actualizar el perfil"
msgstr "Fehler beim Ändern des Profils"
-# Profiles in use by:
-#: ../../../../ajax/ajax_appMgmtSave.php:300
+#: ../../../../ajax/ajax_appMgmtSave.php:316
msgid "Perfil en uso por:"
msgstr "Profil wird benutzt durch: "
-# Delete Profile
-#: ../../../../ajax/ajax_appMgmtSave.php:305
-#: ../../../../ajax/ajax_getContent.php:201
-msgid "Eliminar Perfil"
-msgstr "Profil löschen"
-
-# Profile
-#: ../../../../ajax/ajax_appMgmtSave.php:306
-#: ../../../../ajax/ajax_doLogin.php:157
-#: ../../../../ajax/ajax_getContent.php:114
-#: ../../../../inc/profiles.class.php:207
-#: ../../../../inc/profiles.class.php:259 ../../../../inc/tpl/users.php:102
-msgid "Perfil"
-msgstr "Profil"
-
-# Profile deleted
-#: ../../../../ajax/ajax_appMgmtSave.php:311
+#: ../../../../ajax/ajax_appMgmtSave.php:319
msgid "Perfil eliminado"
msgstr "Profil gelöscht"
-# Error on profile deletion
-#: ../../../../ajax/ajax_appMgmtSave.php:314
+#: ../../../../ajax/ajax_appMgmtSave.php:322
msgid "Error al eliminar el perfil"
msgstr "Fehler beim Löschen eines Profils"
-# Duplicated customer name
-#: ../../../../ajax/ajax_appMgmtSave.php:334
-msgid "Nombre de cliente duplicado"
-msgstr "Duplizierter Kundenname"
-
-# Customer added
-#: ../../../../ajax/ajax_appMgmtSave.php:339
+#: ../../../../ajax/ajax_appMgmtSave.php:357
msgid "Cliente creado"
msgstr "Kunde hinzugefügt"
-# Customer updated
-#: ../../../../ajax/ajax_appMgmtSave.php:345
+#: ../../../../ajax/ajax_appMgmtSave.php:372
msgid "Cliente actualizado"
msgstr "Kunde aktualisiert"
-# Error on updating customer
-#: ../../../../ajax/ajax_appMgmtSave.php:348
-msgid "Error al actualizar el cliente"
-msgstr "Fehler beim Ändern des Kunden"
-
-# Customer in use by:
-#: ../../../../ajax/ajax_appMgmtSave.php:358
-msgid "Cliente en uso por:"
-msgstr "Kunde wird verwendet von:"
-
-# Customer deleted
-#: ../../../../ajax/ajax_appMgmtSave.php:362
+#: ../../../../ajax/ajax_appMgmtSave.php:382
msgid "Cliente eliminado"
msgstr "Kunde gelöscht"
-# Error on customer deletion
-#: ../../../../ajax/ajax_appMgmtSave.php:365
-msgid "Error al eliminar el cliente"
-msgstr "Fehler beim Löschen eines Kunden"
-
-# Category name needed
-#: ../../../../ajax/ajax_appMgmtSave.php:378
+#: ../../../../ajax/ajax_appMgmtSave.php:396
msgid "Es necesario un nombre de categoría"
msgstr "Kategoriename ist notwendig"
-# Category name duplicated
-#: ../../../../ajax/ajax_appMgmtSave.php:385
-msgid "Nombre de categoría duplicado"
-msgstr "Kategoriename dupliziert"
-
-# Category added
-#: ../../../../ajax/ajax_appMgmtSave.php:390
+#: ../../../../ajax/ajax_appMgmtSave.php:416
msgid "Categoría creada"
msgstr "Kategorie hinzugefügt"
-# Error on creating category
-#: ../../../../ajax/ajax_appMgmtSave.php:392
-msgid "Error al crear la categoría"
-msgstr "Fehler beim Anlegen der Kategorie"
-
-# Category updated
-#: ../../../../ajax/ajax_appMgmtSave.php:396
+#: ../../../../ajax/ajax_appMgmtSave.php:431
msgid "Categoría actualizada"
msgstr "Kategorie aktualisiert"
-# Error on updating category
-#: ../../../../ajax/ajax_appMgmtSave.php:399
-msgid "Error al actualizar la categoría"
-msgstr "Fehler beim Ändern der Kategorie"
-
-# Category in use by:
-#: ../../../../ajax/ajax_appMgmtSave.php:407
-msgid "Categoría en uso por:"
-msgstr "Kategorie wird verwendet von:"
-
-# Category deleted
-#: ../../../../ajax/ajax_appMgmtSave.php:411
+#: ../../../../ajax/ajax_appMgmtSave.php:442
msgid "Categoría eliminada"
msgstr "Kategorie gelöscht"
-# Error on category deletion
-#: ../../../../ajax/ajax_appMgmtSave.php:414
-msgid "Error al eliminar la categoría"
-msgstr "Fehler beim Löschen einer Kategorie"
+#: ../../../../ajax/ajax_appMgmtSave.php:458
+msgid "Usuario o acción no indicado"
+msgstr ""
-# Error while doing backup
-#: ../../../../ajax/ajax_backup.php:49
-msgid "Error al realizar el backup"
-msgstr "Fehler beim Ausführen des Backups"
+#: ../../../../ajax/ajax_appMgmtSave.php:468
+msgid "Autorización creada"
+msgstr "Authentifizierung hinzugefügt"
-# Please, check the event log for more details
-#: ../../../../ajax/ajax_backup.php:49 ../../../../ajax/ajax_checkLdap.php:54
-#: ../../../../inc/import.class.php:90 ../../../../inc/migrate.class.php:118
-msgid "Revise el registro de eventos para más detalles"
-msgstr "Bitte schauen Sie in das Protokol für weitere Details"
+#: ../../../../ajax/ajax_appMgmtSave.php:476
+msgid "Autorización actualizada"
+msgstr "Authentifizierung aktualisiert"
-# Make Backup
-#: ../../../../ajax/ajax_backup.php:52 ../../../../inc/tpl/backup.php:82
+#: ../../../../ajax/ajax_appMgmtSave.php:486
+msgid "Autorización eliminada"
+msgstr "Authentifizierung gelöscht"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:503
+msgid "Nombre del campo no indicado"
+msgstr "Feldname nicht gesetzt"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:505
+msgid "Tipo del campo no indicado"
+msgstr "Feldtyp nicht gesetzt"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:507
+msgid "Módulo del campo no indicado"
+msgstr "Feldmodul nicht gesetzt"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:521
+msgid "Campo creado"
+msgstr "Feld hinzugefügt"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:530
+msgid "Campo actualizado"
+msgstr "Feld aktualisiert"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:540
+msgid "Campo eliminado"
+msgstr "Feld gelöscht"
+
+#: ../../../../ajax/ajax_backup.php:52 ../../../../ajax/ajax_backup.php:57
+#: ../../../../inc/themes/classic/backup.inc:54
msgid "Realizar Backup"
msgstr "Backup erstellen"
-# Application and database backup successfully done
-#: ../../../../ajax/ajax_backup.php:53
+#: ../../../../ajax/ajax_backup.php:52 ../../../../ajax/ajax_backup.php:54
+msgid "Error al realizar el backup"
+msgstr "Fehler beim Ausführen des Backups"
+
+#: ../../../../ajax/ajax_backup.php:54 ../../../../ajax/ajax_backup.php:76
+#: ../../../../ajax/ajax_checkLdap.php:57 ../../../../inc/Import.class.php:128
+#: ../../../../inc/Migrate.class.php:93
+msgid "Revise el registro de eventos para más detalles"
+msgstr "Bitte schauen Sie in das Protokol für weitere Details"
+
+#: ../../../../ajax/ajax_backup.php:57
msgid "Copia de la aplicación y base de datos realizada correctamente"
msgstr "Sicherung der Applikation und der Datenbank erfolgreich durchgeführt"
-# Backup process finished
-#: ../../../../ajax/ajax_backup.php:58
+#: ../../../../ajax/ajax_backup.php:59
msgid "Proceso de backup finalizado"
msgstr "Backup beendet"
-# LDAP parameters are not set
-#: ../../../../ajax/ajax_checkLdap.php:48 ../../../../inc/ldap.class.php:246
+#: ../../../../ajax/ajax_backup.php:66
+#: ../../../../ajax/ajax_configSave.php:244
+#: ../../../../ajax/ajax_doLogin.php:53 ../../../../ajax/ajax_import.php:56
+#, fuzzy
+msgid "Error en clave RSA"
+msgstr "Abfrage-Fehler"
+
+#: ../../../../ajax/ajax_backup.php:74 ../../../../ajax/ajax_backup.php:79
+msgid "Realizar Exportación"
+msgstr "Export ausführen"
+
+#: ../../../../ajax/ajax_backup.php:74
+msgid "Error al realizar la exportación de cuentas"
+msgstr "Fehler beim exportieren der Accounts"
+
+#: ../../../../ajax/ajax_backup.php:76
+msgid "Error al realizar la exportación"
+msgstr "Fehler beim exportieren"
+
+#: ../../../../ajax/ajax_backup.php:79
+msgid "Exportación de cuentas realizada correctamente"
+msgstr "Export erfolgreich abgeschlossen"
+
+#: ../../../../ajax/ajax_backup.php:81
+msgid "Proceso de exportación finalizado"
+msgstr "Export fertig"
+
+#: ../../../../ajax/ajax_checkLdap.php:51 ../../../../inc/Ldap.class.php:265
msgid "Los parámetros de LDAP no están configurados"
msgstr "LDAP-Parameter sind nicht gesetzt"
-# LDAP connection error
-#: ../../../../ajax/ajax_checkLdap.php:54
+#: ../../../../ajax/ajax_checkLdap.php:57
msgid "Error de conexión a LDAP"
msgstr "LDAP Verbindungsfehler"
-# LDAP connection OK
-#: ../../../../ajax/ajax_checkLdap.php:56
+#: ../../../../ajax/ajax_checkLdap.php:59
msgid "Conexión a LDAP correcta"
msgstr "LDAP-Verbindung ist OK"
-# Objects found
-#: ../../../../ajax/ajax_checkLdap.php:56
+#: ../../../../ajax/ajax_checkLdap.php:59
msgid "Objetos encontrados"
msgstr "Objekte gefunden"
-# Download new version
-#: ../../../../ajax/ajax_checkUpds.php:41
-msgid "Descargar nueva versión"
-msgstr "Neu Version herunterladen"
-
-# Updated
-#: ../../../../ajax/ajax_checkUpds.php:44
-msgid "Actualizado"
-msgstr "Aktualisiert"
-
-# Missing Wiki parameters
-#: ../../../../ajax/ajax_configSave.php:96
-msgid "Faltan parámetros de Wiki"
-msgstr "Fehlender Wiki-Parameter"
-
-# Missing LDAP parameters
-#: ../../../../ajax/ajax_configSave.php:107
-msgid "Faltan parámetros de LDAP"
-msgstr "Fehlender LDAP-Parameter"
-
-# Missing Mail parameters
-#: ../../../../ajax/ajax_configSave.php:123
-msgid "Faltan parámetros de Correo"
-msgstr "Fehlender Mail-Parameter"
-
-# Maximum file upload size in 16MB
-#: ../../../../ajax/ajax_configSave.php:144
-msgid "El tamaño máximo de archivo es de 16MB"
-msgstr "Maximale Dateigröße beim Upload ist 16MB"
-
-# Edit Configuration
-#: ../../../../ajax/ajax_configSave.php:161
+#: ../../../../ajax/ajax_configSave.php:55
msgid "Modificar Configuración"
msgstr "Konfiguration ändern"
-# Configuration updated
-#: ../../../../ajax/ajax_configSave.php:169
+#: ../../../../ajax/ajax_configSave.php:100
+msgid "El tamaño máximo por archivo es de 16MB"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:113
+msgid "Faltan parámetros de Proxy"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:124
+#: ../../../../web/ConfigC.class.php:126
+#: ../../../../inc/themes/classic/profiles.inc:61
+#: ../../../../inc/themes/material-blue/profiles.inc:72
+msgid "General"
+msgstr "Allgemein"
+
+#: ../../../../ajax/ajax_configSave.php:134
+msgid "Faltan parámetros de Wiki"
+msgstr "Fehlender Wiki-Parameter"
+
+#: ../../../../ajax/ajax_configSave.php:144
+#: ../../../../web/ConfigC.class.php:261
+#: ../../../../inc/themes/classic/wiki.inc:4
+#: ../../../../inc/themes/material-blue/wiki.inc:4
+msgid "Wiki"
+msgstr "Wiki"
+
+#: ../../../../ajax/ajax_configSave.php:159
+msgid "Faltan parámetros de LDAP"
+msgstr "Fehlender LDAP-Parameter"
+
+#: ../../../../ajax/ajax_configSave.php:174
+#: ../../../../web/ConfigC.class.php:293
+#: ../../../../inc/themes/classic/ldap.inc:4
+#: ../../../../inc/themes/material-blue/ldap.inc:4
+msgid "LDAP"
+msgstr "LDAP"
+
+#: ../../../../ajax/ajax_configSave.php:189
+msgid "Faltan parámetros de Correo"
+msgstr "Fehlender Mail-Parameter"
+
+#: ../../../../ajax/ajax_configSave.php:209
+#: ../../../../web/ConfigC.class.php:323
+#: ../../../../inc/themes/classic/mail.inc:4
+#: ../../../../inc/themes/material-blue/mail.inc:4
+msgid "Correo"
+msgstr "E-Mail"
+
+#: ../../../../ajax/ajax_configSave.php:221
msgid "Configuración actualizada"
msgstr "Konfiguration aktualisiert"
-# Master Password updated
-#: ../../../../ajax/ajax_configSave.php:178
-#: ../../../../ajax/ajax_configSave.php:224
-#: ../../../../ajax/ajax_viewpass.php:68 ../../../../ajax/ajax_viewpass.php:70
-#: ../../../../inc/html.class.php:427
+#: ../../../../ajax/ajax_configSave.php:230
+#: ../../../../ajax/ajax_configSave.php:282
+#: ../../../../ajax/ajax_viewpass.php:60
+#: ../../../../inc/Controller.class.php:169
msgid "Clave maestra actualizada"
msgstr "Master-Passwort aktualisiert"
-# Restart session to update
-#: ../../../../ajax/ajax_configSave.php:178
-#: ../../../../ajax/ajax_viewpass.php:68 ../../../../ajax/ajax_viewpass.php:70
-#: ../../../../inc/html.class.php:427
+#: ../../../../ajax/ajax_configSave.php:230
+#: ../../../../ajax/ajax_viewpass.php:60
+#: ../../../../inc/Controller.class.php:169
msgid "Reinicie la sesión para cambiarla"
msgstr "Neue Sitzung beginnen"
-# Master Password needed
-#: ../../../../ajax/ajax_configSave.php:182
+#: ../../../../ajax/ajax_configSave.php:232
msgid "Clave maestra no indicada"
msgstr "Master-Passwort notwendig"
-# Password update must be confirmed
-#: ../../../../ajax/ajax_configSave.php:186
+#: ../../../../ajax/ajax_configSave.php:234
msgid "Se ha de confirmar el cambio de clave"
msgstr "Passwort muss bestätigt werden"
-# Password are the same
-#: ../../../../ajax/ajax_configSave.php:190
+#: ../../../../ajax/ajax_configSave.php:248
msgid "Las claves son idénticas"
msgstr "Passwörter sind identisch"
-# Master passwords mismatch
-#: ../../../../ajax/ajax_configSave.php:194
+#: ../../../../ajax/ajax_configSave.php:250
msgid "Las claves maestras no coinciden"
msgstr "Master-Passwort stimmt nicht"
-# Current master password mismatch
-#: ../../../../ajax/ajax_configSave.php:198
+#: ../../../../ajax/ajax_configSave.php:252
msgid "La clave maestra actual no coincide"
msgstr "Aktuelles Master-Passwort stimmt nicht"
-# Error on updating accounts' passwords
-#: ../../../../ajax/ajax_configSave.php:207
+#: ../../../../ajax/ajax_configSave.php:261
msgid "Errores al actualizar las claves de las cuentas"
msgstr "Fehler beim Ändern der Passwörter eines Kontos"
-# Update Master Password
-#: ../../../../ajax/ajax_configSave.php:221
-#: ../../../../inc/account.class.php:749
+#: ../../../../ajax/ajax_configSave.php:267
+msgid "Errores al actualizar las claves de las cuentas del histórico"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:280
+#: ../../../../inc/Account.class.php:497
msgid "Actualizar Clave Maestra"
msgstr "Master-Passwort ändern"
-# Error on saving master password's hash
-#: ../../../../ajax/ajax_configSave.php:227
+#: ../../../../ajax/ajax_configSave.php:284
msgid "Error al guardar el hash de la clave maestra"
msgstr "Fehler beim Speichern des Hash für das Master-Passwort"
-# Generate Temporary Password
-#: ../../../../ajax/ajax_configSave.php:232
-#, fuzzy
+#: ../../../../ajax/ajax_configSave.php:292
msgid "Generar Clave Temporal"
-msgstr "Generate Temporary Password"
+msgstr "temporäres Passwort erstellen"
-# Password
-#: ../../../../ajax/ajax_configSave.php:233
-#: ../../../../ajax/ajax_usrpass.php:53 ../../../../ajax/ajax_usrpass.php:56
-#: ../../../../ajax/ajax_viewpass.php:98 ../../../../inc/tpl/accounts.php:251
-#: ../../../../inc/tpl/config.php:462 ../../../../inc/tpl/editpass.php:57
-#: ../../../../inc/tpl/install.php:102 ../../../../inc/tpl/install.php:103
-#: ../../../../inc/tpl/login.php:37 ../../../../inc/tpl/login.php:45
-#: ../../../../inc/tpl/passreset.php:62 ../../../../inc/tpl/users.php:135
+#: ../../../../ajax/ajax_configSave.php:292
+#: ../../../../inc/themes/classic/account.inc:83
+#: ../../../../inc/themes/classic/editpass.inc:25
+#: ../../../../inc/themes/classic/install.inc:38
+#: ../../../../inc/themes/classic/install.inc:39
+#: ../../../../inc/themes/classic/login.inc:10
+#: ../../../../inc/themes/classic/login.inc:22
+#: ../../../../inc/themes/classic/mail.inc:55
+#: ../../../../inc/themes/classic/passreset.inc:29
+#: ../../../../inc/themes/classic/users.inc:75
+#: ../../../../inc/themes/classic/userspass.inc:8
+#: ../../../../inc/themes/classic/userspass.inc:11
+#: ../../../../inc/themes/material-blue/account.inc:95
+#: ../../../../inc/themes/material-blue/account.inc:100
+#: ../../../../inc/themes/material-blue/config.inc:358
+#: ../../../../inc/themes/material-blue/editpass.inc:26
+#: ../../../../inc/themes/material-blue/editpass.inc:31
+#: ../../../../inc/themes/material-blue/editpass.inc:41
+#: ../../../../inc/themes/material-blue/install.inc:44
+#: ../../../../inc/themes/material-blue/ldap.inc:105
+#: ../../../../inc/themes/material-blue/login.inc:17
+#: ../../../../inc/themes/material-blue/login.inc:40
+#: ../../../../inc/themes/material-blue/mail.inc:73
+#: ../../../../inc/themes/material-blue/mail.inc:80
+#: ../../../../inc/themes/material-blue/passreset.inc:31
+#: ../../../../inc/themes/material-blue/users.inc:89
+#: ../../../../inc/themes/material-blue/users.inc:96
+#: ../../../../inc/themes/material-blue/userspass.inc:8
+#: ../../../../inc/themes/material-blue/userspass.inc:13
msgid "Clave"
msgstr "Passwort"
-# Temporary Password Generated
-#: ../../../../ajax/ajax_configSave.php:236
-#, fuzzy
+#: ../../../../ajax/ajax_configSave.php:294
msgid "Clave Temporal Generada"
-msgstr "Temporary Password Generated"
+msgstr "temporäres Passwort erstellt"
-# User/Pass not entered
-#: ../../../../ajax/ajax_doLogin.php:41
+#: ../../../../ajax/ajax_doLogin.php:46
msgid "Usuario/Clave no introducidos"
msgstr "Keine Benutzername/Passwort eingegeben"
-# Session start (LDAP)
-#: ../../../../ajax/ajax_doLogin.php:54 ../../../../ajax/ajax_doLogin.php:75
-#: ../../../../ajax/ajax_doLogin.php:82 ../../../../ajax/ajax_doLogin.php:89
-msgid "Inicio sesión (LDAP)"
-msgstr "Sitzungsbeginn (LDAP)"
+#: ../../../../ajax/ajax_doLogin.php:65
+msgid "Inicio sesión"
+msgstr "Anmelden"
-# Error on saving LDAP user data
-#: ../../../../ajax/ajax_doLogin.php:60
+#: ../../../../ajax/ajax_doLogin.php:70
+msgid "Servidor Login"
+msgstr "Anmeldeserver"
+
+#: ../../../../ajax/ajax_doLogin.php:76
msgid "Error al guardar los datos de LDAP"
msgstr "Fehler beim Speichern der LDAP-Benutzerdaten"
-# Internal error
-#: ../../../../ajax/ajax_doLogin.php:63 ../../../../ajax/ajax_doLogin.php:71
-#: ../../../../ajax/ajax_doLogin.php:122 ../../../../inc/import.class.php:240
-#: ../../../../inc/import.class.php:247 ../../../../inc/import.class.php:266
+#: ../../../../ajax/ajax_doLogin.php:79 ../../../../ajax/ajax_doLogin.php:87
+#: ../../../../ajax/ajax_doLogin.php:139 ../../../../ajax/ajax_doLogin.php:185
+#: ../../../../inc/ApiTokens.class.php:140
+#: ../../../../inc/ApiTokens.class.php:186
+#: ../../../../inc/ApiTokens.class.php:217
+#: ../../../../inc/ApiTokens.class.php:243
+#: ../../../../inc/ApiTokens.class.php:262
+#: ../../../../inc/ApiTokens.class.php:304
+#: ../../../../inc/ApiTokens.class.php:328 ../../../../inc/Crypt.class.php:235
+#: ../../../../inc/Crypt.class.php:246
+#: ../../../../inc/XmlImportBase.class.php:74
msgid "Error interno"
msgstr "Interner Fehler"
-# Error on updating user password in BD
-#: ../../../../ajax/ajax_doLogin.php:68
+#: ../../../../ajax/ajax_doLogin.php:84
msgid "Error al actualizar la clave del usuario en la BBDD"
msgstr "Fehler beim Ändern des Benutzer-Passworts in der BD"
-# Incorrect login
-#: ../../../../ajax/ajax_doLogin.php:76 ../../../../ajax/ajax_doLogin.php:100
+#: ../../../../ajax/ajax_doLogin.php:92 ../../../../ajax/ajax_doLogin.php:117
msgid "Login incorrecto"
msgstr "Fehlerhafte Anmeldung"
-# User
-#: ../../../../ajax/ajax_doLogin.php:77 ../../../../ajax/ajax_doLogin.php:84
-#: ../../../../ajax/ajax_doLogin.php:91 ../../../../ajax/ajax_doLogin.php:101
-#: ../../../../ajax/ajax_doLogin.php:111 ../../../../ajax/ajax_doLogin.php:156
-#: ../../../../ajax/ajax_search.php:131 ../../../../ajax/ajax_search.php:250
-#: ../../../../ajax/ajax_viewpass.php:94 ../../../../inc/init.php:544
-#: ../../../../inc/tpl/accounts.php:234 ../../../../inc/tpl/config.php:453
-#: ../../../../inc/tpl/editpass.php:53 ../../../../inc/tpl/eventlog.php:62
-#: ../../../../inc/tpl/install.php:92 ../../../../inc/tpl/install.php:93
-#: ../../../../inc/tpl/login.php:35 ../../../../inc/tpl/login.php:44
-#: ../../../../inc/tpl/passreset.php:51 ../../../../inc/tpl/request.php:52
-#: ../../../../inc/users.class.php:817 ../../../../inc/users.class.php:859
-#: ../../../../res/test.php:64
+#: ../../../../ajax/ajax_doLogin.php:93 ../../../../ajax/ajax_doLogin.php:100
+#: ../../../../ajax/ajax_doLogin.php:107 ../../../../ajax/ajax_doLogin.php:118
+#: ../../../../ajax/ajax_doLogin.php:128 ../../../../ajax/ajax_doLogin.php:180
+#: ../../../../inc/ApiTokens.class.php:190
+#: ../../../../inc/ApiTokens.class.php:308 ../../../../inc/Auth.class.php:108
+#: ../../../../inc/Init.class.php:517 ../../../../inc/UserBase.class.php:382
+#: ../../../../inc/UserBase.class.php:526 ../../../../res/test.php:64
+#: ../../../../web/SearchC.class.php:289
+#: ../../../../web/UsersMgmtC.class.php:392
+#: ../../../../inc/themes/classic/account.inc:70
+#: ../../../../inc/themes/classic/editpass.inc:21
+#: ../../../../inc/themes/classic/eventlog.inc:25
+#: ../../../../inc/themes/classic/info.inc:39
+#: ../../../../inc/themes/classic/install.inc:27
+#: ../../../../inc/themes/classic/install.inc:28
+#: ../../../../inc/themes/classic/login.inc:7
+#: ../../../../inc/themes/classic/login.inc:20
+#: ../../../../inc/themes/classic/mail.inc:47
+#: ../../../../inc/themes/classic/passreset.inc:17
+#: ../../../../inc/themes/classic/request.inc:17
+#: ../../../../inc/themes/classic/search.inc:50
+#: ../../../../inc/themes/classic/tokens.inc:8
+#: ../../../../inc/themes/material-blue/account.inc:80
+#: ../../../../inc/themes/material-blue/config.inc:344
+#: ../../../../inc/themes/material-blue/editpass.inc:22
+#: ../../../../inc/themes/material-blue/eventlog.inc:24
+#: ../../../../inc/themes/material-blue/info.inc:39
+#: ../../../../inc/themes/material-blue/login.inc:10
+#: ../../../../inc/themes/material-blue/login.inc:33
+#: ../../../../inc/themes/material-blue/mail.inc:61
+#: ../../../../inc/themes/material-blue/mail.inc:67
+#: ../../../../inc/themes/material-blue/passreset.inc:17
+#: ../../../../inc/themes/material-blue/request.inc:20
+#: ../../../../inc/themes/material-blue/search.inc:55
+#: ../../../../inc/themes/material-blue/tokens.inc:8
msgid "Usuario"
msgstr "Benutzer"
-# Wrong user/pass
-#: ../../../../ajax/ajax_doLogin.php:80 ../../../../ajax/ajax_doLogin.php:94
-#: ../../../../ajax/ajax_doLogin.php:104
+#: ../../../../ajax/ajax_doLogin.php:96 ../../../../ajax/ajax_doLogin.php:110
+#: ../../../../ajax/ajax_doLogin.php:121
msgid "Usuario/Clave incorrectos"
msgstr "Falscher/s Benutzername/Passwort"
-# Account expired
-#: ../../../../ajax/ajax_doLogin.php:83 ../../../../ajax/ajax_doLogin.php:87
+#: ../../../../ajax/ajax_doLogin.php:99 ../../../../ajax/ajax_doLogin.php:103
msgid "Cuenta expirada"
msgstr "Konto abgelaufen"
-# The user have no associated groups
-#: ../../../../ajax/ajax_doLogin.php:90
+#: ../../../../ajax/ajax_doLogin.php:106
msgid "El usuario no tiene grupos asociados"
msgstr "Der Benutzer hat keine zugewiesene Gruppe"
-# Session start (MySQL)
-#: ../../../../ajax/ajax_doLogin.php:96
-msgid "Inicio sesión (MySQL)"
-msgstr "Sitzungsbeginn (MySQL)"
-
-# User disabled
-#: ../../../../ajax/ajax_doLogin.php:110 ../../../../ajax/ajax_doLogin.php:114
+#: ../../../../ajax/ajax_doLogin.php:127 ../../../../ajax/ajax_doLogin.php:131
msgid "Usuario deshabilitado"
msgstr "Benutzer gespert"
-# Error on retrieving user data from DB
-#: ../../../../ajax/ajax_doLogin.php:119
+#: ../../../../ajax/ajax_doLogin.php:136
msgid "Error al obtener los datos del usuario de la BBDD"
msgstr "Fehler beim Laden der Benutzerdaten aus der Datenbank"
-# The master password not saved or is incorrect
-#: ../../../../ajax/ajax_doLogin.php:127
+#: ../../../../ajax/ajax_doLogin.php:146
msgid "La clave maestra no ha sido guardada o es incorrecta"
msgstr "Master-Passwort ist nicht sicher oder stimmt nicht"
-# Invalid Master Password
-#: ../../../../ajax/ajax_doLogin.php:134 ../../../../ajax/ajax_doLogin.php:137
+#: ../../../../ajax/ajax_doLogin.php:155 ../../../../ajax/ajax_doLogin.php:158
msgid "Clave maestra incorrecta"
msgstr "Ungültiges Master-Passwort"
-# Group
-#: ../../../../ajax/ajax_doLogin.php:158
-#: ../../../../ajax/ajax_getContent.php:115
-#: ../../../../inc/groups.class.php:155 ../../../../inc/groups.class.php:184
-#: ../../../../inc/groups.class.php:211 ../../../../inc/tpl/config.php:352
-#: ../../../../inc/tpl/users.php:109
+#: ../../../../ajax/ajax_doLogin.php:181
+#: ../../../../inc/ProfileBase.class.php:512
+#: ../../../../inc/ProfileBase.class.php:550
+#: ../../../../inc/ProfileBase.class.php:593
+#: ../../../../web/UsersMgmtC.class.php:89
+#: ../../../../inc/themes/classic/users.inc:37
+#: ../../../../inc/themes/material-blue/users.inc:43
+msgid "Perfil"
+msgstr "Profil"
+
+#: ../../../../ajax/ajax_doLogin.php:182 ../../../../inc/Groups.class.php:158
+#: ../../../../inc/Groups.class.php:259 ../../../../inc/Groups.class.php:375
+#: ../../../../web/UsersMgmtC.class.php:90
+#: ../../../../inc/themes/classic/ldap.inc:116
+#: ../../../../inc/themes/classic/users.inc:49
+#: ../../../../inc/themes/material-blue/ldap.inc:139
+#: ../../../../inc/themes/material-blue/ldap.inc:164
+#: ../../../../inc/themes/material-blue/users.inc:57
msgid "Grupo"
msgstr "Gruppe"
-# Event log cleared
-#: ../../../../ajax/ajax_eventlog.php:43
-msgid "Registro de eventos vaciado"
-msgstr "Protokol gelöscht"
-
-# Error on clearing event log
-#: ../../../../ajax/ajax_eventlog.php:45
-msgid "Error al vaciar el registro de eventos"
-msgstr "Fehler beim Löschen des Protokols"
-
-# Files management disabled
-#: ../../../../ajax/ajax_files.php:44 ../../../../ajax/ajax_getFiles.php:36
+#: ../../../../ajax/ajax_files.php:45 ../../../../ajax/ajax_getFiles.php:39
msgid "Gestión de archivos deshabilitada"
msgstr "Dateiverwaltung gesperrt"
-# There are no allowed extensions
-#: ../../../../ajax/ajax_files.php:63
-msgid "No hay extensiones permitidas"
-msgstr "Es gibt keine erlaubten Dateiendungen"
-
-# File type not allowed
-#: ../../../../ajax/ajax_files.php:71 ../../../../inc/import.class.php:113
-msgid "Tipo de archivo no soportado"
-msgstr "Dateityp nicht erlaubt"
-
-# Invalid file
-#: ../../../../ajax/ajax_files.php:74
-msgid "Archivo inválido"
-msgstr "Ungültige Datei"
-
-# Internal error while reading file
-#: ../../../../ajax/ajax_files.php:87 ../../../../ajax/ajax_files.php:99
-#: ../../../../ajax/ajax_files.php:103 ../../../../inc/import.class.php:124
-#: ../../../../inc/import.class.php:132
-msgid "Error interno al leer el archivo"
-msgstr "Interner Fehler beim Lesen der Datei"
-
-# File is bigger than
-#: ../../../../ajax/ajax_files.php:91
-msgid "El archivo es mayor de "
-msgstr "Datei ist größer als"
-
-# Upload File
-#: ../../../../ajax/ajax_files.php:98 ../../../../inc/files.class.php:52
+#: ../../../../ajax/ajax_files.php:59 ../../../../inc/Files.class.php:63
msgid "Subir Archivo"
msgstr "Datei hochladen"
-# File saved
-#: ../../../../ajax/ajax_files.php:107
+#: ../../../../ajax/ajax_files.php:68
+msgid "No hay extensiones permitidas"
+msgstr "Es gibt keine erlaubten Dateiendungen"
+
+#: ../../../../ajax/ajax_files.php:79 ../../../../inc/FileImport.class.php:115
+msgid "Tipo de archivo no soportado"
+msgstr "Dateityp nicht erlaubt"
+
+#: ../../../../ajax/ajax_files.php:85
+msgid "Archivo inválido"
+msgstr "Ungültige Datei"
+
+#: ../../../../ajax/ajax_files.php:101 ../../../../ajax/ajax_files.php:118
+#: ../../../../inc/FileImport.class.php:131
+#: ../../../../inc/FileImport.class.php:149
+#: ../../../../inc/FileImport.class.php:167
+msgid "Error interno al leer el archivo"
+msgstr "Interner Fehler beim Lesen der Datei"
+
+#: ../../../../ajax/ajax_files.php:108
+msgid "El archivo es mayor de "
+msgstr "Datei ist größer als"
+
+#: ../../../../ajax/ajax_files.php:125
msgid "Archivo guardado"
msgstr "Datei gespeichert"
-# Error on file save
-#: ../../../../ajax/ajax_files.php:109
+#: ../../../../ajax/ajax_files.php:130
msgid "No se pudo guardar el archivo"
msgstr "Fehler beim Speichern der Datei"
-# Invalid file ID
-#: ../../../../ajax/ajax_files.php:116 ../../../../ajax/ajax_files.php:174
+#: ../../../../ajax/ajax_files.php:140 ../../../../ajax/ajax_files.php:199
msgid "No es un ID de archivo válido"
msgstr "Ungültige Datei-ID"
-# File doesn't exist
-#: ../../../../ajax/ajax_files.php:124 ../../../../inc/files.class.php:143
+#: ../../../../ajax/ajax_files.php:148
msgid "El archivo no existe"
msgstr "Datei existiert nicht"
-# Download File
-#: ../../../../ajax/ajax_files.php:133 ../../../../ajax/ajax_getFiles.php:67
+#: ../../../../ajax/ajax_files.php:157
+#: ../../../../inc/themes/classic/files.inc:19
+#: ../../../../inc/themes/material-blue/files.inc:19
msgid "Descargar Archivo"
msgstr "Datei herunterladen"
-# ID
-#: ../../../../ajax/ajax_files.php:134 ../../../../ajax/ajax_viewpass.php:81
-#: ../../../../inc/files.class.php:109 ../../../../inc/tpl/eventlog.php:53
+#: ../../../../ajax/ajax_files.php:158 ../../../../ajax/ajax_viewpass.php:69
+#: ../../../../inc/Files.class.php:112
+#: ../../../../inc/themes/classic/eventlog.inc:16
+#: ../../../../inc/themes/material-blue/eventlog.inc:15
msgid "ID"
msgstr "ID"
-# File
-#: ../../../../ajax/ajax_files.php:135 ../../../../inc/files.class.php:54
-#: ../../../../inc/files.class.php:110 ../../../../inc/tpl/migrate.php:110
+#: ../../../../ajax/ajax_files.php:159 ../../../../inc/Files.class.php:65
+#: ../../../../inc/Files.class.php:113
+#: ../../../../inc/themes/classic/import.inc:155
+#: ../../../../inc/themes/material-blue/import.inc:83
msgid "Archivo"
msgstr "Datei"
-# Type
-#: ../../../../ajax/ajax_files.php:136 ../../../../inc/files.class.php:55
-#: ../../../../inc/files.class.php:111
+#: ../../../../ajax/ajax_files.php:160 ../../../../inc/Files.class.php:66
+#: ../../../../inc/Files.class.php:114
+#: ../../../../web/AccountsMgmtC.class.php:266
+#: ../../../../inc/themes/classic/customfields.inc:16
+#: ../../../../inc/themes/material-blue/customfields.inc:19
msgid "Tipo"
msgstr "Typ"
-# Size
-#: ../../../../ajax/ajax_files.php:137 ../../../../inc/files.class.php:56
-#: ../../../../inc/files.class.php:112
+#: ../../../../ajax/ajax_files.php:161 ../../../../inc/Files.class.php:67
+#: ../../../../inc/Files.class.php:115
msgid "Tamaño"
msgstr "Größe"
-# File deleted
-#: ../../../../ajax/ajax_files.php:178
+#: ../../../../ajax/ajax_files.php:203
msgid "Archivo eliminado"
msgstr "Datei gelöscht"
-# Error on file deletion
-#: ../../../../ajax/ajax_files.php:180
+#: ../../../../ajax/ajax_files.php:208
msgid "Error al eliminar el archivo"
msgstr "Fehler beim Löschen einer Datei"
-# Incorrect parameters
-#: ../../../../ajax/ajax_getContent.php:42
+#: ../../../../ajax/ajax_getContent.php:41
+#: ../../../../inc/ApiRequest.class.php:55
+#: ../../../../inc/CustomFieldDef.class.php:38
+#: ../../../../inc/CustomFields.class.php:48
msgid "Parámetros incorrectos"
msgstr "Fehlerhafter Parameter"
-# Users Management
-#: ../../../../ajax/ajax_getContent.php:100 ../../../../inc/tpl/main.php:54
-msgid "Gestión de Usuarios"
-msgstr "Benutzerverwaltung"
-
-# Groups Management
-#: ../../../../ajax/ajax_getContent.php:101
-msgid "Gestión de Grupos"
-msgstr "Gruppenverwaltung"
-
-# Profiles Management
-#: ../../../../ajax/ajax_getContent.php:102
-msgid "Gestión de Perfiles"
-msgstr "Profilverwaltung"
-
-# Name
-#: ../../../../ajax/ajax_getContent.php:112
-#: ../../../../ajax/ajax_getContent.php:158
-#: ../../../../ajax/ajax_getContent.php:190
-#: ../../../../ajax/ajax_getContent.php:243
-#: ../../../../ajax/ajax_getContent.php:275
-#: ../../../../ajax/ajax_search.php:125 ../../../../ajax/ajax_search.php:238
-#: ../../../../inc/tpl/accounts.php:173 ../../../../inc/tpl/categories.php:40
-#: ../../../../inc/tpl/customers.php:40 ../../../../inc/tpl/editpass.php:40
-#: ../../../../inc/tpl/groups.php:39 ../../../../inc/tpl/profiles.php:39
-#: ../../../../inc/tpl/request.php:38 ../../../../inc/tpl/users.php:66
-msgid "Nombre"
-msgstr "Name"
-
-# Login
-#: ../../../../ajax/ajax_getContent.php:113
-#: ../../../../ajax/ajax_passReset.php:74 ../../../../inc/tpl/users.php:83
-#: ../../../../inc/users.class.php:897 ../../../../inc/users.class.php:924
-msgid "Login"
-msgstr "Anmeldung"
-
-# Properties
-#: ../../../../ajax/ajax_getContent.php:116
-msgid "Propiedades"
-msgstr "Eigenschaften"
-
-# Application Admin
-#: ../../../../ajax/ajax_getContent.php:122 ../../../../inc/tpl/main.php:30
-msgid "Admin Aplicación"
-msgstr "Anwendungs-Administrator"
-
-# Account Admin
-#: ../../../../ajax/ajax_getContent.php:123
-msgid "Admin Cuentas"
-msgstr "Konto-Administrator"
-
-# LDAP User
-#: ../../../../ajax/ajax_getContent.php:124 ../../../../inc/tpl/users.php:91
-msgid "Usuario de LDAP"
-msgstr "LDAP-Benutzer"
-
-# Disabled
-#: ../../../../ajax/ajax_getContent.php:125 ../../../../inc/tpl/users.php:171
-msgid "Deshabilitado"
-msgstr "inaktiv"
-
-# View User Details
-#: ../../../../ajax/ajax_getContent.php:136
-msgid "Ver Detalles de Usuario"
-msgstr "Benutzerdetails anzeigen"
-
-# Delete User
-#: ../../../../ajax/ajax_getContent.php:138
-#: ../../../../inc/users.class.php:923
-msgid "Eliminar Usuario"
-msgstr "Benutzer löschen"
-
-# Change user password
-#: ../../../../ajax/ajax_getContent.php:139
-msgid "Cambiar Clave de Usuario"
-msgstr "Benutzerpasswort Ändern"
-
-# Description
-#: ../../../../ajax/ajax_getContent.php:158
-#: ../../../../ajax/ajax_getContent.php:243
-#: ../../../../ajax/ajax_getContent.php:275
-#: ../../../../ajax/ajax_sendRequest.php:62
-#: ../../../../inc/tpl/categories.php:48 ../../../../inc/tpl/customers.php:48
-#: ../../../../inc/tpl/eventlog.php:68 ../../../../inc/tpl/groups.php:46
-msgid "Descripción"
-msgstr "Beschreibung"
-
-# Delete Group
-#: ../../../../ajax/ajax_getContent.php:169
-#: ../../../../inc/groups.class.php:210
-msgid "Eliminar Grupo"
-msgstr "Gruppe löschen"
-
-# Categories management
-#: ../../../../ajax/ajax_getContent.php:233
-msgid "Gestión de Categorías"
-msgstr "Kategorienverwaltung"
-
-# Customers Management
-#: ../../../../ajax/ajax_getContent.php:234
-msgid "Gestión de Clientes"
-msgstr "Kundenverwaltung"
-
-# Delete Category
-#: ../../../../ajax/ajax_getContent.php:254
-#: ../../../../inc/category.class.php:135
-msgid "Eliminar Categoría"
-msgstr "Kategorie löschen"
-
-# Delete Customer
-#: ../../../../ajax/ajax_getContent.php:286
-#: ../../../../inc/customer.class.php:131
-msgid "Eliminar Cliente"
-msgstr "Kunde löschen"
-
-# Configuration
-#: ../../../../ajax/ajax_getContent.php:319
-#: ../../../../inc/config.class.php:121 ../../../../inc/config.class.php:149
-#: ../../../../inc/tpl/main.php:56 ../../../../inc/tpl/profiles.php:71
-msgid "Configuración"
-msgstr "Konfiguration"
-
-# Master Password
-#: ../../../../ajax/ajax_getContent.php:320
-#: ../../../../inc/tpl/install.php:112 ../../../../inc/tpl/install.php:117
-#: ../../../../inc/tpl/install.php:118 ../../../../inc/tpl/login.php:40
-#: ../../../../inc/tpl/login.php:48 ../../../../inc/tpl/profiles.php:76
-msgid "Clave Maestra"
-msgstr "Master-Passwort"
-
-# Backup
-#: ../../../../ajax/ajax_getContent.php:321
-msgid "Copia de Seguridad"
-msgstr "Sicherung"
-
-# Import accounts from external sources
-#: ../../../../ajax/ajax_getContent.php:322
-msgid "Importar cuentas desde fuentes externas"
-msgstr "Importiere Konto aus externer Quelle"
-
-# Import Accounts
-#: ../../../../ajax/ajax_getContent.php:322
-#: ../../../../inc/import.class.php:81 ../../../../inc/import.class.php:163
-#: ../../../../inc/migrate.class.php:402
-msgid "Importar Cuentas"
-msgstr "Importiere Konten"
-
-# Delete File
-#: ../../../../ajax/ajax_getFiles.php:63 ../../../../inc/files.class.php:108
-msgid "Eliminar Archivo"
-msgstr "Datei löschen"
-
-# View file
-#: ../../../../ajax/ajax_getFiles.php:70
-msgid "Ver Archivo"
-msgstr "Datei ansehen"
-
-# Confirm account import
-#: ../../../../ajax/ajax_migrate.php:1
+#: ../../../../ajax/ajax_migrate.php:55
msgid "Confirmar la importación de cuentas"
msgstr "Import der Konten bestätigen"
-# Connection username needed
-#: ../../../../ajax/ajax_migrate.php:1
+#: ../../../../ajax/ajax_migrate.php:57
msgid "Es necesario un usuario de conexión"
msgstr "Benutzername der Verbindung ist notwendig"
-# Connection password needed
-#: ../../../../ajax/ajax_migrate.php:1
+#: ../../../../ajax/ajax_migrate.php:59
msgid "Es necesaria una clave de conexión"
msgstr "Verbindungs-Passwort wird benötigt"
-# Database name needed
-#: ../../../../ajax/ajax_migrate.php:1
+#: ../../../../ajax/ajax_migrate.php:61
msgid "Es necesario el nombre de la BBDD"
msgstr "Datenbank ist notwendig"
-# Host name needed
-#: ../../../../ajax/ajax_migrate.php:1
+#: ../../../../ajax/ajax_migrate.php:63
msgid "Es necesario un nombre de host"
msgstr "Hostname ist notwendig"
-# Password Recovery
-#: ../../../../ajax/ajax_passReset.php:44
+#: ../../../../ajax/ajax_passReset.php:47
+#: ../../../../ajax/ajax_passReset.php:50
msgid "Recuperación de Clave"
msgstr "Wiederherstellung des Passworts"
-# Requested for
-#: ../../../../ajax/ajax_passReset.php:48
-#: ../../../../ajax/ajax_passReset.php:55
+#: ../../../../ajax/ajax_passReset.php:53
+#: ../../../../ajax/ajax_passReset.php:58
msgid "Solicitado para"
msgstr "Anfrage für"
-# Request sent
-#: ../../../../ajax/ajax_passReset.php:52
-#: ../../../../ajax/ajax_sendRequest.php:71
+#: ../../../../ajax/ajax_passReset.php:55
+#: ../../../../ajax/ajax_sendRequest.php:75
msgid "Solicitud enviada"
msgstr "Anfrage verschickt."
-# You will receive an email to complete the request in short.
-#: ../../../../ajax/ajax_passReset.php:52
+#: ../../../../ajax/ajax_passReset.php:55
msgid "En breve recibirá un correo para completar la solicitud."
msgstr "Sie bekommen in Kürze eine E-Mail, um die Anfrage zu beenden"
-# The request can't be done. Please contact with the administrator
-#: ../../../../ajax/ajax_passReset.php:59
+#: ../../../../ajax/ajax_passReset.php:60
msgid "No se ha podido realizar la solicitud. Consulte con el administrador."
msgstr ""
"Anfrage konnte nicht ausgeführt werden. Bitte Administrator benachrichtigen."
-# Edit User Password
-#: ../../../../ajax/ajax_passReset.php:73 ../../../../inc/users.class.php:896
+#: ../../../../ajax/ajax_passReset.php:72
+#: ../../../../inc/UserBase.class.php:568
+#: ../../../../inc/UserUtil.class.php:664
msgid "Modificar Clave Usuario"
msgstr "Benutzer-Passwort ändern"
-# The password is incorrect or not the same
-#: ../../../../ajax/ajax_passReset.php:85
+#: ../../../../ajax/ajax_passReset.php:72
+#: ../../../../inc/UserBase.class.php:568
+#: ../../../../inc/UserBase.class.php:592
+#: ../../../../inc/UserUtil.class.php:664
+#: ../../../../web/UsersMgmtC.class.php:88
+#: ../../../../inc/themes/classic/users.inc:21
+#: ../../../../inc/themes/material-blue/users.inc:24
+msgid "Login"
+msgstr "Anmeldung"
+
+#: ../../../../ajax/ajax_passReset.php:80
msgid "La clave es incorrecta o no coincide"
msgstr "Das Passwort is falsch oder nicht gleich"
-# No records found
-#: ../../../../ajax/ajax_search.php:108 ../../../../inc/tpl/eventlog.php:42
-msgid "No se encontraron registros"
-msgstr "Keine Datensätze gefunden"
-
-# Sort by Customer
-#: ../../../../ajax/ajax_search.php:122
-msgid "Ordenar por Cliente"
-msgstr "Nach Kunde sortieren"
-
-# Customer
-#: ../../../../ajax/ajax_search.php:122 ../../../../ajax/ajax_search.php:233
-#: ../../../../ajax/ajax_sendRequest.php:61
-#: ../../../../inc/account.class.php:370 ../../../../inc/account.class.php:580
-#: ../../../../inc/account.class.php:603 ../../../../inc/account.class.php:879
-#: ../../../../inc/customer.class.php:59
-#: ../../../../inc/customer.class.php:106
-#: ../../../../inc/customer.class.php:132 ../../../../inc/tpl/accounts.php:189
-#: ../../../../inc/tpl/editpass.php:44 ../../../../inc/tpl/request.php:42
-msgid "Cliente"
-msgstr "Kunde"
-
-# Sort by Name
-#: ../../../../ajax/ajax_search.php:125
-msgid "Ordenar por Nombre"
-msgstr "Nach Name sortieren"
-
-# Sort by Category
-#: ../../../../ajax/ajax_search.php:128
-msgid "Ordenar por Categoría"
-msgstr "Nach Kategorie sortieren"
-
-# Category
-#: ../../../../ajax/ajax_search.php:128 ../../../../ajax/ajax_search.php:243
-#: ../../../../inc/category.class.php:80
-#: ../../../../inc/category.class.php:136
-#: ../../../../inc/category.class.php:184 ../../../../inc/tpl/accounts.php:206
-msgid "Categoría"
-msgstr "Kategorie"
-
-# Sort by Username
-#: ../../../../ajax/ajax_search.php:131
-msgid "Ordenar por Usuario"
-msgstr "Nach Benutzername sortieren"
-
-# Sort by URL / IP
-#: ../../../../ajax/ajax_search.php:134
-msgid "Ordenar por URL / IP"
-msgstr "Nach URL/IP sortieren"
-
-# URL / IP
-#: ../../../../ajax/ajax_search.php:134 ../../../../ajax/ajax_search.php:255
-#: ../../../../inc/tpl/accounts.php:218 ../../../../inc/tpl/editpass.php:48
-#: ../../../../inc/tpl/request.php:47
-msgid "URL / IP"
-msgstr "URL/IP"
-
-# Search in Wiki
-#: ../../../../ajax/ajax_search.php:173
-msgid "Buscar en Wiki"
-msgstr "Im Wiki suchen"
-
-# Account Details
-#: ../../../../ajax/ajax_search.php:181 ../../../../ajax/ajax_search.php:289
-#: ../../../../inc/tpl/accounts.php:80 ../../../../inc/tpl/accounts.php:91
-msgid "Detalles de Cuenta"
-msgstr "Kontodetails"
-
-# Open link to
-#: ../../../../ajax/ajax_search.php:199 ../../../../ajax/ajax_search.php:201
-msgid "Abrir enlace a"
-msgstr "Öffne Verweis nach"
-
-# Notes
-#: ../../../../ajax/ajax_search.php:262 ../../../../inc/tpl/accounts.php:271
-#: ../../../../inc/tpl/users.php:154
-msgid "Notas"
-msgstr "Bemerkungen"
-
-# Attachments
-#: ../../../../ajax/ajax_search.php:266
-msgid "Archivos adjuntos"
-msgstr "Anhänge"
-
-# Link to Wiki
-#: ../../../../ajax/ajax_search.php:277
-msgid "Enlace a Wiki"
-msgstr "Verweis zum Wiki"
-
-# View password
-#: ../../../../ajax/ajax_search.php:293 ../../../../ajax/ajax_viewpass.php:80
-#: ../../../../inc/tpl/accounts.php:528 ../../../../inc/tpl/profiles.php:50
-msgid "Ver Clave"
-msgstr "Passwort anzeigen"
-
-# Copy Password to Clipboard
-#: ../../../../ajax/ajax_search.php:294 ../../../../ajax/ajax_search.php:346
-#: ../../../../inc/tpl/accounts.php:533 ../../../../inc/tpl/accounts.php:624
-msgid "Copiar Clave en Portapapeles"
-msgstr "Passwort in die Zwischenablage kopieren"
-
-# More Actions
-#: ../../../../ajax/ajax_search.php:298 ../../../../inc/html.class.php:545
-msgid "Más Acciones"
-msgstr "Weitere Aktionen"
-
-# Edit Account
-#: ../../../../ajax/ajax_search.php:302 ../../../../inc/tpl/accounts.php:556
-msgid "Modificar Cuenta"
-msgstr "Konto ändern"
-
-# Copy Account
-#: ../../../../ajax/ajax_search.php:306 ../../../../inc/tpl/accounts.php:53
-msgid "Copiar Cuenta"
-msgstr "Konto kopieren"
-
-# Delete Account
-#: ../../../../ajax/ajax_search.php:310 ../../../../inc/account.class.php:602
-#: ../../../../inc/tpl/accounts.php:73 ../../../../inc/tpl/accounts.php:568
-msgid "Eliminar Cuenta"
-msgstr "Konto löschen"
-
-# Request Modification
-#: ../../../../ajax/ajax_search.php:317 ../../../../inc/tpl/accounts.php:561
-msgid "Solicitar Modificación"
-msgstr "Änderung initiiert"
-
-# Password Copied to Clipboard
-#: ../../../../ajax/ajax_search.php:350 ../../../../inc/tpl/accounts.php:628
-msgid "Clave Copiada al Portapapeles"
-msgstr "Passwort in die Zwischenablage kopiert"
-
-# Description is needed
-#: ../../../../ajax/ajax_sendRequest.php:45
+#: ../../../../ajax/ajax_sendRequest.php:48
msgid "Es necesaria una descripción"
msgstr "Beschreibung ist notwendig"
-# Request for Account Modification
-#: ../../../../ajax/ajax_sendRequest.php:58
+#: ../../../../ajax/ajax_sendRequest.php:61
msgid "Solicitud de Modificación de Cuenta"
msgstr "Kontoänderung initiiert"
-# Requester
-#: ../../../../ajax/ajax_sendRequest.php:59
+#: ../../../../ajax/ajax_sendRequest.php:62
msgid "Solicitante"
msgstr "Anfrager"
-# Account
-#: ../../../../ajax/ajax_sendRequest.php:60
-#: ../../../../ajax/ajax_viewpass.php:82 ../../../../inc/account.class.php:371
-#: ../../../../inc/account.class.php:581 ../../../../inc/account.class.php:604
-#: ../../../../inc/account.class.php:880 ../../../../inc/files.class.php:53
+#: ../../../../ajax/ajax_sendRequest.php:63
+#: ../../../../ajax/ajax_viewpass.php:70 ../../../../inc/Account.class.php:165
+#: ../../../../inc/Account.class.php:219 ../../../../inc/Account.class.php:402
+#: ../../../../inc/Account.class.php:425 ../../../../inc/Account.class.php:667
+#: ../../../../inc/Files.class.php:64
msgid "Cuenta"
msgstr "Konto"
-# Error on sending request
-#: ../../../../ajax/ajax_sendRequest.php:74
+#: ../../../../ajax/ajax_sendRequest.php:64
+#: ../../../../inc/Account.class.php:164 ../../../../inc/Account.class.php:218
+#: ../../../../inc/Account.class.php:401 ../../../../inc/Account.class.php:424
+#: ../../../../inc/Account.class.php:666 ../../../../inc/Customer.class.php:65
+#: ../../../../inc/Customer.class.php:115
+#: ../../../../inc/Customer.class.php:163
+#: ../../../../web/SearchC.class.php:271
+#: ../../../../inc/themes/classic/account.inc:23
+#: ../../../../inc/themes/classic/editpass.inc:12
+#: ../../../../inc/themes/classic/request.inc:9
+#: ../../../../inc/themes/classic/search.inc:19
+#: ../../../../inc/themes/material-blue/account.inc:29
+#: ../../../../inc/themes/material-blue/editpass.inc:13
+#: ../../../../inc/themes/material-blue/request.inc:10
+#: ../../../../inc/themes/material-blue/search.inc:24
+msgid "Cliente"
+msgstr "Kunde"
+
+#: ../../../../ajax/ajax_sendRequest.php:65
+#: ../../../../web/AccountsMgmtC.class.php:79
+#: ../../../../web/AccountsMgmtC.class.php:138
+#: ../../../../web/UsersMgmtC.class.php:187
+#: ../../../../inc/themes/classic/categories.inc:16
+#: ../../../../inc/themes/classic/customers.inc:16
+#: ../../../../inc/themes/classic/eventlog.inc:31
+#: ../../../../inc/themes/classic/groups.inc:16
+#: ../../../../inc/themes/material-blue/categories.inc:20
+#: ../../../../inc/themes/material-blue/customers.inc:20
+#: ../../../../inc/themes/material-blue/eventlog.inc:30
+#: ../../../../inc/themes/material-blue/groups.inc:20
+msgid "Descripción"
+msgstr "Beschreibung"
+
+#: ../../../../ajax/ajax_sendRequest.php:78
msgid "Error al enviar la solicitud"
msgstr "Fehler beim Senden der Anfrage"
-# You don't have permission to do this operation
-#: ../../../../ajax/ajax_usrpass.php:41
-msgid "No tiene permisos para realizar esta operación"
-msgstr "Sie haben keine Erlaubnis für diese Aktion"
+#: ../../../../ajax/ajax_userPrefsSave.php:74
+msgid "Error al actualizar preferencias"
+msgstr "Fehler beim aktualisieren der Einstellungen"
-# Password Change
-#: ../../../../ajax/ajax_usrpass.php:48 ../../../../inc/auth.class.php:194
-#: ../../../../inc/tpl/users.php:175
-msgid "Cambio de Clave"
-msgstr "Passwortänderung"
+#: ../../../../ajax/ajax_userPrefsSave.php:77
+msgid "Preferencias actualizadas"
+msgstr ""
-# Generate random password
-#: ../../../../ajax/ajax_usrpass.php:57 ../../../../inc/tpl/accounts.php:258
-#: ../../../../inc/tpl/editpass.php:64 ../../../../inc/tpl/users.php:139
-msgid "Generar clave aleatoria"
-msgstr "Zufälliges Passwort erzeugen"
-
-# Password (repeat)
-#: ../../../../ajax/ajax_usrpass.php:63 ../../../../ajax/ajax_usrpass.php:65
-#: ../../../../inc/tpl/accounts.php:263 ../../../../inc/tpl/editpass.php:69
-#: ../../../../inc/tpl/users.php:145
-msgid "Clave (repetir)"
-msgstr "Passwort (Wiederholung)"
-
-# Password strength level
-#: ../../../../ajax/ajax_usrpass.php:66 ../../../../inc/tpl/accounts.php:266
-#: ../../../../inc/tpl/editpass.php:71 ../../../../inc/tpl/install.php:107
-#: ../../../../inc/tpl/install.php:122 ../../../../inc/tpl/masterpass.php:64
-#: ../../../../inc/tpl/passreset.php:65 ../../../../inc/tpl/passreset.php:73
-#: ../../../../inc/tpl/users.php:148
-msgid "Nivel de fortaleza de la clave"
-msgstr "Passwortstärke"
-
-# Save
-#: ../../../../ajax/ajax_usrpass.php:82 ../../../../ajax/ajax_usrpass.php:83
-#: ../../../../inc/tpl/accounts.php:542 ../../../../inc/tpl/categories.php:68
-#: ../../../../inc/tpl/config.php:522 ../../../../inc/tpl/customers.php:68
-#: ../../../../inc/tpl/editpass.php:89 ../../../../inc/tpl/groups.php:64
-#: ../../../../inc/tpl/masterpass.php:114 ../../../../inc/tpl/profiles.php:138
-#: ../../../../inc/tpl/users.php:220
-msgid "Guardar"
-msgstr "Speichern"
-
-# You don't have permission to access to this account
-#: ../../../../ajax/ajax_viewpass.php:52 ../../../../ajax/ajax_viewpass.php:58
-#: ../../../../inc/html.class.php:425
-msgid "No tiene permisos para acceder a esta cuenta"
-msgstr "Sie haben keine Erlaubnis auf dieses Konto zuzugreifen"
-
-# Master password mismatch
-#: ../../../../ajax/ajax_viewpass.php:61
+#: ../../../../ajax/ajax_viewpass.php:54
msgid "La clave maestra no coincide"
msgstr "Master-Passwort stimmt nicht"
-# Unable to access to this file directly
-#: ../../../../inc/account.class.php:26 ../../../../inc/acl.class.php:27
-#: ../../../../inc/auth.class.php:27 ../../../../inc/backup.class.php:26
-#: ../../../../inc/category.class.php:27 ../../../../inc/common.class.php:26
-#: ../../../../inc/config.class.php:26 ../../../../inc/crypt.class.php:26
-#: ../../../../inc/customer.class.php:27 ../../../../inc/db.class.php:27
-#: ../../../../inc/files.class.php:27 ../../../../inc/groups.class.php:27
-#: ../../../../inc/html.class.php:27 ../../../../inc/import.class.php:27
-#: ../../../../inc/init.php:26 ../../../../inc/installer.class.php:27
-#: ../../../../inc/keepassimport.class.php:27
-#: ../../../../inc/keepassximport.class.php:27
-#: ../../../../inc/ldap.class.php:27 ../../../../inc/log.class.php:26
-#: ../../../../inc/migrate.class.php:26 ../../../../inc/profiles.class.php:27
-#: ../../../../inc/tpl/accounts.php:26 ../../../../inc/tpl/backup.php:26
-#: ../../../../inc/tpl/categories.php:26 ../../../../inc/tpl/config.php:26
-#: ../../../../inc/tpl/customers.php:26 ../../../../inc/tpl/editpass.php:25
-#: ../../../../inc/tpl/eventlog.php:26 ../../../../inc/tpl/groups.php:26
-#: ../../../../inc/tpl/login.php:26 ../../../../inc/tpl/main.php:26
-#: ../../../../inc/tpl/masterpass.php:26 ../../../../inc/tpl/migrate.php:26
-#: ../../../../inc/tpl/profiles.php:26 ../../../../inc/tpl/request.php:25
-#: ../../../../inc/tpl/search.php:26 ../../../../inc/tpl/users.php:26
-#: ../../../../inc/upgrade.class.php:27 ../../../../inc/users.class.php:27
-#: ../../../../inc/util.class.php:26 ../../../../inc/util.class.php:293
+#: ../../../../ajax/ajax_viewpass.php:58
+#: ../../../../inc/Controller.class.php:166
+msgid "No tiene permisos para acceder a esta cuenta"
+msgstr "Sie haben keine Erlaubnis auf dieses Konto zuzugreifen"
+
+#: ../../../../ajax/ajax_viewpass.php:68 ../../../../inc/Acl.class.php:133
+#: ../../../../inc/themes/classic/account.inc:379
+#: ../../../../inc/themes/classic/profiles.inc:23
+#: ../../../../inc/themes/classic/search.inc:100
+#: ../../../../inc/themes/material-blue/account.inc:419
+#: ../../../../inc/themes/material-blue/profiles.inc:35
+#: ../../../../inc/themes/material-blue/search.inc:113
+msgid "Ver Clave"
+msgstr "Passwort anzeigen"
+
+#: ../../../../ajax/ajax_viewpass.php:79
+msgid "Clave de Cuenta"
+msgstr "Account Passwort"
+
+#: ../../../../api.php:56
+msgid "Ayuda Parámetros"
+msgstr ""
+
+#: ../../../../inc/Account.class.php:28
+#: ../../../../inc/AccountBase.class.php:28
+#: ../../../../inc/AccountHistory.class.php:28
+#: ../../../../inc/AccountInterface.class.php:28
+#: ../../../../inc/AccountSearch.class.php:28 ../../../../inc/Acl.class.php:29
+#: ../../../../inc/Api.class.php:30 ../../../../inc/ApiRequest.class.php:28
+#: ../../../../inc/ApiTokens.class.php:28 ../../../../inc/Auth.class.php:29
+#: ../../../../inc/Auth2FA.class.php:32 ../../../../inc/Backup.class.php:28
+#: ../../../../inc/Category.class.php:29 ../../../../inc/Common.class.php:28
+#: ../../../../inc/Config.class.php:28 ../../../../inc/Controller.class.php:31
+#: ../../../../inc/Crypt.class.php:28 ../../../../inc/CsvImport.class.php:28
+#: ../../../../inc/CsvImportBase.class.php:28
+#: ../../../../inc/Customer.class.php:29 ../../../../inc/DB.class.php:28
+#: ../../../../inc/DBConnectionFactory.class.php:30
+#: ../../../../inc/FileImport.class.php:28 ../../../../inc/Files.class.php:29
+#: ../../../../inc/Groups.class.php:29 ../../../../inc/Html.class.php:28
+#: ../../../../inc/ImageUtil.class.php:28 ../../../../inc/Import.class.php:29
+#: ../../../../inc/ImportBase.class.php:28 ../../../../inc/Init.class.php:30
+#: ../../../../inc/Installer.class.php:29
+#: ../../../../inc/KeepassImport.class.php:28
+#: ../../../../inc/KeepassXImport.class.php:28
+#: ../../../../inc/Ldap.class.php:29 ../../../../inc/LdapADS.class.php:28
+#: ../../../../inc/Log.class.php:28 ../../../../inc/Migrate.class.php:28
+#: ../../../../inc/Profile.class.php:29
+#: ../../../../inc/ProfileBase.class.php:28
+#: ../../../../inc/Request.class.php:111 ../../../../inc/Session.class.php:28
+#: ../../../../inc/SyspassImport.class.php:28
+#: ../../../../inc/Upgrade.class.php:29 ../../../../inc/User.class.php:28
+#: ../../../../inc/UserLdap.class.php:28
+#: ../../../../inc/UserPreferences.class.php:28
+#: ../../../../inc/UserUtil.class.php:28 ../../../../inc/Util.class.php:31
+#: ../../../../inc/XmlImport.class.php:28
+#: ../../../../inc/XmlImportBase.class.php:28
+#: ../../../../web/AccountC.class.php:38
+#: ../../../../web/AccountsMgmtC.class.php:32
+#: ../../../../web/ConfigC.class.php:31 ../../../../web/EventlogC.class.php:28
+#: ../../../../web/SearchC.class.php:30
+#: ../../../../web/UsersMgmtC.class.php:39
+#: ../../../../web/UsersPrefsC.class.php:32
msgid "No es posible acceder directamente a este archivo"
msgstr "Auf diese Datei darf nicht direkt zugegriffen werden"
-# Error on updating history
-#: ../../../../inc/account.class.php:325 ../../../../inc/account.class.php:855
+#: ../../../../inc/Account.class.php:112 ../../../../inc/Account.class.php:185
+#: ../../../../inc/Account.class.php:636
msgid "Error al actualizar el historial"
msgstr "Fehler beim Ändern der Historie"
-# Update Account
-#: ../../../../inc/account.class.php:331
+#: ../../../../inc/Account.class.php:117
msgid "Actualizar Cuenta"
msgstr "Konto ändern"
-# Error on updating secondary groups
-#: ../../../../inc/account.class.php:334 ../../../../inc/account.class.php:562
+#: ../../../../inc/Account.class.php:120 ../../../../inc/Account.class.php:383
msgid "Error al actualizar los grupos secundarios"
msgstr "Fehler beim Ändern der Gruppe"
-# Error on updating account's users
-#: ../../../../inc/account.class.php:340 ../../../../inc/account.class.php:570
+#: ../../../../inc/Account.class.php:126 ../../../../inc/Account.class.php:391
msgid "Error al actualizar los usuarios de la cuenta"
msgstr "Fehler beim Ändern der Benutzer eines Kontos"
-# Restore Account
-#: ../../../../inc/account.class.php:345
+#: ../../../../inc/Account.class.php:217
msgid "Restaurar Cuenta"
msgstr "Wiederherstellen Konto"
-# New Account
-#: ../../../../inc/account.class.php:579 ../../../../inc/tpl/accounts.php:47
-#: ../../../../inc/tpl/main.php:53
+#: ../../../../inc/Account.class.php:326
+#: ../../../../inc/AccountHistory.class.php:343
+#: ../../../../inc/AccountHistory.class.php:505
+msgid "No se pudieron obtener los datos de la cuenta"
+msgstr ""
+
+#: ../../../../inc/Account.class.php:400 ../../../../inc/Acl.class.php:129
+#: ../../../../web/AccountC.class.php:147 ../../../../web/MainC.class.php:161
msgid "Nueva Cuenta"
msgstr "Neues Konto"
-# ERROR: Operation failed
-#: ../../../../inc/account.class.php:597
+#: ../../../../inc/Account.class.php:418
msgid "ERROR: Error en la operación."
msgstr "Fehler: Operation fehlgeschlagen"
-# Error on deleting account's groups
-#: ../../../../inc/account.class.php:614
+#: ../../../../inc/Account.class.php:423 ../../../../inc/Acl.class.php:134
+#: ../../../../web/AccountC.class.php:352
+#: ../../../../inc/themes/classic/account.inc:366
+#: ../../../../inc/themes/classic/search.inc:127
+#: ../../../../inc/themes/material-blue/account.inc:413
+#: ../../../../inc/themes/material-blue/search.inc:142
+msgid "Eliminar Cuenta"
+msgstr "Konto löschen"
+
+#: ../../../../inc/Account.class.php:436
msgid "Error al eliminar grupos asociados a la cuenta"
msgstr "Fehler beim Löschen der Guppen eines Kontos"
-# Error on deleting account's users
-#: ../../../../inc/account.class.php:618
+#: ../../../../inc/Account.class.php:440
msgid "Error al eliminar usuarios asociados a la cuenta"
msgstr "Fehler beim Löschen der Benutzer eines Kontos"
-# Error on deleting account's files
-#: ../../../../inc/account.class.php:622
+#: ../../../../inc/Account.class.php:444
msgid "Error al eliminar archivos asociados a la cuenta"
msgstr "Fehler beim Löschen der Dateien eines Kontos"
-# Start
-#: ../../../../inc/account.class.php:750 ../../../../inc/account.class.php:904
+#: ../../../../inc/Account.class.php:498
+#: ../../../../inc/AccountHistory.class.php:124
+#: ../../../../inc/XmlImport.class.php:62
msgid "Inicio"
msgstr "Start"
-# Error on encryption module
-#: ../../../../inc/account.class.php:758 ../../../../inc/account.class.php:912
+#: ../../../../inc/Account.class.php:503
+#: ../../../../inc/AccountHistory.class.php:130
msgid "Error en el módulo de encriptación"
msgstr "Fehler im Verschlüsselungsmodul"
-# Error on retrieving accounts' passwords
-#: ../../../../inc/account.class.php:766 ../../../../inc/account.class.php:920
+#: ../../../../inc/Account.class.php:511
+#: ../../../../inc/AccountHistory.class.php:138
msgid "Error al obtener las claves de las cuentas"
msgstr "Fehler beim Laden der Konto-Passwörter"
-# Error on updating account's password
-#: ../../../../inc/account.class.php:792
+#: ../../../../inc/Account.class.php:527
+#: ../../../../inc/AccountHistory.class.php:160
+msgid "Clave de cuenta vacía"
+msgstr "Account Passwort leer"
+
+#: ../../../../inc/Account.class.php:532
+#: ../../../../inc/AccountHistory.class.php:165
+msgid "IV de encriptación incorrecto"
+msgstr ""
+
+#: ../../../../inc/Account.class.php:541
+#: ../../../../inc/AccountHistory.class.php:174
+msgid "No es posible desencriptar la clave de la cuenta"
+msgstr ""
+
+#: ../../../../inc/Account.class.php:547
msgid "Fallo al actualizar la clave de la cuenta"
msgstr "Fehler beim Ändern des Passworts eines Kontos "
-# Accounts updated:
-#: ../../../../inc/account.class.php:804
-msgid "Cuentas actualizadas:"
-msgstr "Konten aktualisiert"
+#: ../../../../inc/Account.class.php:561
+msgid "Cuentas actualizadas"
+msgstr "Accounts aktualisiert"
-# End
-#: ../../../../inc/account.class.php:809 ../../../../inc/account.class.php:968
+#: ../../../../inc/Account.class.php:566
+#: ../../../../inc/AccountHistory.class.php:199
msgid "Fin"
msgstr "Ende"
-# Update Password
-#: ../../../../inc/account.class.php:878
+#: ../../../../inc/Account.class.php:665
msgid "Modificar Clave"
msgstr "Passwort ändern"
-# Update Master Password (H)
-#: ../../../../inc/account.class.php:903
+#: ../../../../inc/Account.class.php:700
+msgid "No se pudieron obtener los datos de las cuentas"
+msgstr ""
+
+#: ../../../../inc/AccountHistory.class.php:123
msgid "Actualizar Clave Maestra (H)"
msgstr "Master-Passwort (H) ändern"
-# Record's Master password mismatch
-#: ../../../../inc/account.class.php:934
+#: ../../../../inc/AccountHistory.class.php:155
msgid "La clave maestra del registro no coincide"
msgstr "Master-Passwort stimmt nicht"
-# Error on updating history's master password
-#: ../../../../inc/account.class.php:950
+#: ../../../../inc/AccountHistory.class.php:180
msgid "Fallo al actualizar la clave del histórico"
msgstr "Fehler beim Ändern des Master-Passworts"
-# Records updated
-#: ../../../../inc/account.class.php:963
-msgid "Registros actualizados:"
-msgstr "Datensätze aktualisiert"
+#: ../../../../inc/AccountHistory.class.php:194
+msgid "Registros actualizados"
+msgstr ""
-# Access denied to
-#: ../../../../inc/acl.class.php:104
+#: ../../../../inc/Acl.class.php:112
msgid "Denegado acceso a"
msgstr "Zugriff verweigert auf"
-# A request for changing your user password has been done.
-#: ../../../../inc/auth.class.php:195
+#: ../../../../inc/Acl.class.php:126
+msgid "Buscar Cuentas"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:127
+msgid "Ver Cuenta"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:128 ../../../../web/AccountC.class.php:259
+#: ../../../../inc/themes/classic/search.inc:121
+#: ../../../../inc/themes/material-blue/search.inc:136
+msgid "Copiar Cuenta"
+msgstr "Konto kopieren"
+
+#: ../../../../inc/Acl.class.php:130 ../../../../web/AccountC.class.php:323
+msgid "Editar Cuenta"
+msgstr "Konto ändern"
+
+#: ../../../../inc/Acl.class.php:131
+msgid "Editar Clave de Cuenta"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:132
+#: ../../../../inc/themes/classic/profiles.inc:28
+#: ../../../../inc/themes/material-blue/profiles.inc:40
+msgid "Ver Historial"
+msgstr "Protokol ansehen"
+
+#: ../../../../inc/Acl.class.php:135
+#: ../../../../inc/themes/classic/account.inc:188
+#: ../../../../inc/themes/classic/profiles.inc:50
+#: ../../../../inc/themes/material-blue/account.inc:230
+#: ../../../../inc/themes/material-blue/config.inc:224
+#: ../../../../inc/themes/material-blue/profiles.inc:60
+msgid "Archivos"
+msgstr "Dateien"
+
+#: ../../../../inc/Acl.class.php:136
+msgid "Peticiones"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:137
+msgid "Gestión Aplicación"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:138
+msgid "Gestión Categorías"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:139
+msgid "Gestión Clientes"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:140
+msgid "Gestión Campos Personalizados"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:141
+msgid "Gestión Autorizaciones API"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:142 ../../../../inc/Acl.class.php:143
+msgid "Gestión Usuarios"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:144
+msgid "Gestión Grupos"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:145
+msgid "Gestión Perfiles"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:146 ../../../../inc/Config.class.php:118
+#: ../../../../inc/Config.class.php:400 ../../../../web/MainC.class.php:179
+#: ../../../../inc/themes/classic/profiles.inc:57
+#: ../../../../inc/themes/material-blue/profiles.inc:66
+msgid "Configuración"
+msgstr "Konfiguration"
+
+#: ../../../../inc/Acl.class.php:147
+msgid "Configuración General"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:148 ../../../../web/ConfigC.class.php:149
+#: ../../../../inc/themes/classic/profiles.inc:65
+#: ../../../../inc/themes/material-blue/profiles.inc:77
+msgid "Encriptación"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:149 ../../../../web/ConfigC.class.php:194
+#: ../../../../inc/themes/classic/backup.inc:4
+#: ../../../../inc/themes/material-blue/backup.inc:4
+msgid "Copia de Seguridad"
+msgstr "Sicherung"
+
+#: ../../../../inc/Acl.class.php:150
+msgid "Exportar"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:151
+#: ../../../../inc/themes/classic/profiles.inc:74
+#: ../../../../inc/themes/material-blue/profiles.inc:87
+msgid "Importar"
+msgstr ""
+
+#: ../../../../inc/Api.class.php:65 ../../../../inc/Api.class.php:88
+#: ../../../../inc/Api.class.php:126
+msgid "Acceso no permitido"
+msgstr ""
+
+#: ../../../../inc/Api.class.php:166
+msgid "Error de codificación"
+msgstr ""
+
+#: ../../../../inc/ApiRequest.class.php:102
+msgid "Token de autorización"
+msgstr ""
+
+#: ../../../../inc/ApiRequest.class.php:103
+msgid "Acción a realizar"
+msgstr ""
+
+#: ../../../../inc/ApiRequest.class.php:104
+msgid "Clave de usuario (opcional)"
+msgstr ""
+
+#: ../../../../inc/ApiRequest.class.php:105
+msgid "Cadena a buscar"
+msgstr ""
+
+#: ../../../../inc/ApiRequest.class.php:106
+msgid "Numero de cuentas a mostar en la búsqueda"
+msgstr ""
+
+#: ../../../../inc/ApiRequest.class.php:107
+msgid "Item a devolver"
+msgstr ""
+
+#: ../../../../inc/ApiTokens.class.php:221
+msgid "La autorización ya existe"
+msgstr ""
+
+#: ../../../../inc/ApiTokens.class.php:307
+msgid "Actualizar Autorización"
+msgstr ""
+
+#: ../../../../inc/ApiTokens.class.php:331
+#: ../../../../web/UsersMgmtC.class.php:421
+msgid "Eliminar Autorización"
+msgstr ""
+
+#: ../../../../inc/Auth.class.php:107
+msgid "Usuario no pertenece al grupo"
+msgstr ""
+
+#: ../../../../inc/Auth.class.php:187
+#: ../../../../inc/themes/classic/users.inc:117
+#: ../../../../inc/themes/classic/userspass.inc:2
+#: ../../../../inc/themes/material-blue/users.inc:161
+#: ../../../../inc/themes/material-blue/userspass.inc:2
+msgid "Cambio de Clave"
+msgstr "Passwortänderung"
+
+#: ../../../../inc/Auth.class.php:189
msgid "Se ha solicitado el cambio de su clave de usuario."
msgstr "Ein Anfrage zum Ändern ihres Benutzerpassworts wurde begonnen."
-# In order to complete the process, please go to this URL:
-#: ../../../../inc/auth.class.php:197
+#: ../../../../inc/Auth.class.php:191
msgid "Para completar el proceso es necesario que acceda a la siguiente URL:"
msgstr "Zum Abschluss dieses Vorgangs, gehen Sie bitte zu der URL: "
-# If you have not requested this action, please dismiss this message.
-#: ../../../../inc/auth.class.php:201
+#: ../../../../inc/Auth.class.php:195
msgid "Si no ha solicitado esta acción, ignore este mensaje."
msgstr ""
"Wenn Sie diese Aktion nicht ausgelöst haben, dann ignorieren Sie bitte diese "
"Meldung"
-# This operation is only available on Linux environments
-#: ../../../../inc/backup.class.php:159
+#: ../../../../inc/Backup.class.php:166
msgid "Esta operación sólo es posible en entornos Linux"
msgstr "Diese Funktion is nur in einer Linux-Umgebung verfügbar"
-# Error while doing backup in compatibility mode
-#: ../../../../inc/backup.class.php:163
+#: ../../../../inc/Backup.class.php:168
msgid "Error al realizar backup en modo compatibilidad"
msgstr "Fehler während der Durchführung der Sicherung im Kompatibilitätsmodus"
-# Check backup directory permissions
-#: ../../../../inc/backup.class.php:222
+#: ../../../../inc/Backup.class.php:222
+#: ../../../../inc/XmlExport.class.php:464
+msgid "No es posible crear el directorio de backups"
+msgstr "Verzeichnis für Backups kann nicht angelegt werden"
+
+#: ../../../../inc/Backup.class.php:227
+#: ../../../../inc/XmlExport.class.php:469
msgid "Compruebe los permisos del directorio de backups"
msgstr "Bitte überprüfen Sie die Zugriffsrechte des Backup₋Verzeichnisses"
-# Category Edit
-#: ../../../../inc/category.class.php:183
+#: ../../../../inc/Category.class.php:69
+#: ../../../../inc/Category.class.php:165
+msgid "Nombre de categoría duplicado"
+msgstr "Kategoriename dupliziert"
+
+#: ../../../../inc/Category.class.php:78
+msgid "Error al crear la categoría"
+msgstr "Fehler beim Anlegen der Kategorie"
+
+#: ../../../../inc/Category.class.php:83
+#: ../../../../inc/Category.class.php:132
+#: ../../../../inc/Category.class.php:182
+#: ../../../../web/SearchC.class.php:283
+#: ../../../../inc/themes/classic/account.inc:42
+#: ../../../../inc/themes/classic/search.inc:44
+#: ../../../../inc/themes/material-blue/account.inc:50
+#: ../../../../inc/themes/material-blue/search.inc:49
+msgid "Categoría"
+msgstr "Kategorie"
+
+#: ../../../../inc/Category.class.php:119
+msgid "Categoría en uso por:"
+msgstr "Kategorie wird verwendet von:"
+
+#: ../../../../inc/Category.class.php:129
+msgid "Error al eliminar la categoría"
+msgstr "Fehler beim Löschen einer Kategorie"
+
+#: ../../../../inc/Category.class.php:132
+#: ../../../../web/AccountsMgmtC.class.php:101
+msgid "Eliminar Categoría"
+msgstr "Kategorie löschen"
+
+#: ../../../../inc/Category.class.php:179
+msgid "Error al actualizar la categoría"
+msgstr "Fehler beim Ändern der Kategorie"
+
+#: ../../../../inc/Category.class.php:182
msgid "Modificar Categoría"
msgstr "Kategorie ändern"
-# N/A
-#: ../../../../inc/common.class.php:61 ../../../../inc/users.class.php:108
-msgid "N/D"
-msgstr "N/A"
-
-# Action
-#: ../../../../inc/common.class.php:62
-msgid "Acción"
-msgstr "Aktion"
-
-# Performed by
-#: ../../../../inc/common.class.php:63
-msgid "Realizado por"
-msgstr "Ausgeführt durch"
-
-# Email sent
-#: ../../../../inc/common.class.php:81
-msgid "Correo enviado"
-msgstr "E-Mail gesendet"
-
-# Error on sending email
-#: ../../../../inc/common.class.php:83
-msgid "Error al enviar correo"
-msgstr "Fehler beim Sender der Mail"
-
-# Recipient
-#: ../../../../inc/common.class.php:88
-msgid "Destinatario"
-msgstr "Empfänger"
-
-# CC
-#: ../../../../inc/common.class.php:89
-msgid "CC"
-msgstr "CC"
-
-# Send Email
-#: ../../../../inc/common.class.php:91
-msgid "Enviar Email"
-msgstr "E-Mail senden"
-
-# Warning
-#: ../../../../inc/common.class.php:146
-msgid "Aviso"
-msgstr "Warnung"
-
-# Enter phpPMS database connection user
-#: ../../../../inc/common.class.php:210
-msgid "Indicar el usuario de conexión a la base de datos de phpPMS"
-msgstr "Bentuzername der phpPMS-Datenbank eingeben"
-
-# Enter phpPMS database name
-#: ../../../../inc/common.class.php:211
-msgid "Indicar el nombre de la base de datos de phpPMS"
-msgstr "Name der phpPMS-Datenbank eingeben"
-
-# Enter phpPMS database server name
-#: ../../../../inc/common.class.php:212
-msgid "Indicar el servidor de la base de datos de phpPMS"
-msgstr "Server der phpPMS-Datenbank eingeben"
-
-# Enables account name as a link to account details in search page.
-#: ../../../../inc/common.class.php:213
-msgid ""
-"Habilita el nombre de la cuenta de la búsqueda, como enlace a los detalles "
-"de la cuenta"
-msgstr "Verwende Kontoname als Link zu den Kontodetails im Suchergebnis"
-
-# Number of results that are shown per page when searching
-#: ../../../../inc/common.class.php:214
-msgid "Número de resultados por página a mostrar, al realizar una búsqueda"
-msgstr "Anzahl der Treffer pro Seite im Suchergebnis"
-
-# Enables upload/download accounts files.
-#: ../../../../inc/common.class.php:215
-msgid "Habilita la subida/descarga de archivos para las cuentas"
-msgstr "Erlaube Upload/Download von Kontodateien"
-
-# Sets up the max upload file size.
-#: ../../../../inc/common.class.php:216
-msgid "Establece el tamaño máximo para subir archivos"
-msgstr "Setzt die maximale Größe beim Hochladen von Dateien"
-
-# The absolute maximum is 16MB.
-#: ../../../../inc/common.class.php:216
-msgid "El máximo absuluto es de 16MB"
-msgstr "Die maximale Größe ist 16MB."
-
-# Enables the option to add an external Wiki link for accounts search results.
-#: ../../../../inc/common.class.php:217
-msgid ""
-"Habilita la opción de añadir un enlace a Wiki externa para los resultados de "
-"la búsqueda"
-msgstr ""
-"Erlaube das Hinzufügen eines externen Wiki-Links für Konten im Suchergebnis"
-
-# URL that wiki uses to do a page search on it.
-#: ../../../../inc/common.class.php:218
-msgid ""
-"URL que utiliza la wiki para realizar una búsqueda de una página en esta"
-msgstr "URL zum Suchen im Wiki"
-
-# It uses customer name as parameter.
-#: ../../../../inc/common.class.php:218
-msgid "Como parámetro se utiliza el nombre del cliente"
-msgstr "Benutzt den Kundennamen als Parameter"
-
-# Example
-#: ../../../../inc/common.class.php:218 ../../../../inc/common.class.php:219
-#: ../../../../inc/common.class.php:222 ../../../../inc/common.class.php:223
-#: ../../../../inc/common.class.php:224
-msgid "Ejemplo"
-msgstr "Beispiel"
-
-# URL that wiki uses to access to page details on it.
-#: ../../../../inc/common.class.php:219
-msgid ""
-"URL que utiliza la wiki para acceder a los detalles de una página de ésta"
-msgstr "URL mit Details im Wiki"
-
-# The account name is used as wiki search variable parameter.
-#: ../../../../inc/common.class.php:219
-msgid ""
-"El nombre de la cuenta se utiliza como parámetro de la variable de búsqueda "
-"de la Wiki"
-msgstr "Der Kontoname wird als Parameter in der Wiki-Suche verwendet"
-
-# Preffix to select what accounts have a wiki page link.
-#: ../../../../inc/common.class.php:220
-msgid ""
-"Prefijo para determinar qué cuentas tienen un enlace a una página de la Wiki"
-msgstr "Präfix um Konten mit Wiki-Link zu selektieren."
-
-# Examples
-#: ../../../../inc/common.class.php:220
-msgid "Ejemplos"
-msgstr "Beispiele"
-
-# Enables LDAP authentication
-#: ../../../../inc/common.class.php:221
-msgid "Habilita de autentificación mediante servidor LDAP"
-msgstr "LDAP-Authentifizierung einschalten"
-
-# This method will switch to MySQL on failure
-#: ../../../../inc/common.class.php:221
-msgid "Este método utilizará MySQL en caso de fallo"
-msgstr "Diese Methode wechselt im Fehlerfall zu MySQL"
-
-# User to connect LDAP server
-#: ../../../../inc/common.class.php:222
-msgid "Usuario para conectar con el servicio de LDAP"
-msgstr "Benutzer für Verbindung zum LDAP-Server"
-
-# LDAP base to do users searches.
-#: ../../../../inc/common.class.php:223
-msgid "Base en la que realizar la búsqueda de usuarios de LDAP"
-msgstr "LDAP Base bei der Benutzersuche"
-
-# LDAP group that users belong to for access permission
-#: ../../../../inc/common.class.php:224
-msgid ""
-"Grupo de LDAP al que debe de pertenecer el usuario para permitir el acceso"
-msgstr "LDAP-Gruppe zu der der Benutzer gehört für Zugriffsrechte verwenden."
-
-# LDAP server hostname or IP address
-#: ../../../../inc/common.class.php:225
-msgid "Nombre o dirección IP del servidor de LDAP"
-msgstr "Hostname oder IP des LDAP-Servers"
-
-# Sets a new master password without re-encrypt the accounts.
-#: ../../../../inc/common.class.php:226
-msgid "Establece una nueva clave maestra sin re-encriptar las cuentas"
-msgstr "Setze Master-Passwort ohne die Konten neu zu verschlüsseln"
-
-# LDAP bind user password
-#: ../../../../inc/common.class.php:227
-msgid "Clave del usuario de conexión a LDAP"
-msgstr "LDAP Benutzerpasswort"
-
-# In this mode you cannot login to application. To disable it, you need to modify configuration file.
-#: ../../../../inc/common.class.php:228
-msgid ""
-"En este modo no se puede acceder a la aplicación. Para deshabilitarlo es "
-"necesario modificar el archivo de configuración"
-msgstr ""
-"In diesem Modus können Sie sich nicht anmelden. Um dies zu ändern, müssen "
-"Sie die Konfigurationsdatei anpassen."
-
-# Shows some information about application and performance.
-#: ../../../../inc/common.class.php:229
-msgid ""
-"Muestra información relativa a la configuración de la aplicación y "
-"rendimiento"
-msgstr "Zeige Informationen über die Anwendung"
-
-# It saves the actions done by the application.
-#: ../../../../inc/common.class.php:230
-msgid "Guarda las acciones realizadas en la aplicación"
-msgstr "Sichert die Aktionen der Anwendung"
-
-# Check for application updates (only for administrators).
-#: ../../../../inc/common.class.php:231
-msgid ""
-"Comprobar actualizaciones de la aplicación (sólo para los usuarios "
-"administradores)"
-msgstr "Nach Anwendungs-Updates schauen (nur Adminstratoren)."
-
-# Extensions max length is 4 characters.
-#: ../../../../inc/common.class.php:232
-msgid "Extensiones de máximo 4 caracteres."
-msgstr "Länge der Endung ist maximal 4 Zeichen."
-
-# Write extension and press enter to add.
-#: ../../../../inc/common.class.php:232
-msgid "Escribir extensión y pulsar intro para añadir."
-msgstr "Tragen Sie die Endung ein und drücken Sie Enter zum Hinzufügen"
-
-# Import from KeePass or KeePassX. The customer name will be KeePass or KeePassX.
-#: ../../../../inc/common.class.php:233
-msgid ""
-"Importar desde KeePass o KeePassX. El nombre del cliente será igual a "
-"KeePass o KeePassX"
-msgstr ""
-"Import von KeePass oder KeePassX. Der Kundenname wird KeePass oder KeePassX "
-"sein."
-
-# Import form a CSV file with the format
-#: ../../../../inc/common.class.php:233
-msgid "Importar desde un archivo CSV con el formato"
-msgstr "Importiere CSV-Datei mit vorgegebenen Format"
-
-# account_name;customer;category;url;user;password;notes
-#: ../../../../inc/common.class.php:233
-msgid "nombre_de_cuenta;cliente;categoría;url;usuario;clave;notas"
-msgstr "konto_name;kunde;kategorie;url;benutzer;passwort;bemerkungen"
-
-# If the customer or category are not created, they will be automatically created.
-#: ../../../../inc/common.class.php:233
-msgid ""
-"Si el cliente o la categoría no están creados, se crean automáticamente."
-msgstr ""
-"Wenn der Kunde oder die Kategorie nicht erzeugt wurden, werde sie nun "
-"automatisch erzeugt."
-
-# Allows to show the non-permission accounts only for searches.
-#: ../../../../inc/common.class.php:234
-msgid ""
-"Permite que las cuentas sin acceso sean visibles sólo para las búsquedas."
-msgstr "Erlaubt es Konten ohne Berechtigungen die globale Suche zu verwenden."
-
-# Enables to show account's search results like a card format.
-#: ../../../../inc/common.class.php:235
-msgid "Muestra los resultados de búsqueda de cuentas en formato tarjeta."
-msgstr "Zeigt die Ergebnisse einer Konten-Suche im Visitenkarten-Format an."
-
-# Enables Active Directory LDAP connection mode.
-#: ../../../../inc/common.class.php:236
-msgid "Habilita el modo de conexión con LDAP de Active Directory."
-msgstr "Aktiviert den Active Directory LDAP Verbindungsmodus."
-
-# Define the default users group for new LDAP users
-#: ../../../../inc/common.class.php:237
-msgid ""
-"Define el grupo de usuarios por defecto para los nuevos usuarios de LDAP."
-msgstr "Legen Sie die Standard-Gruppe für neue LDAP-Benutzer fest"
-
-# Define the default users profile for new LDAP users
-#: ../../../../inc/common.class.php:238
-msgid ""
-"Define el perfil de usuario por defecto para los nuevos usuarios de LDAP."
-msgstr "Legen Sie das Standard-Profile für neue LDAP-Benutzer fest"
-
-# Update Configuration
-#: ../../../../inc/config.class.php:122 ../../../../inc/config.class.php:150
+#: ../../../../inc/Config.class.php:118 ../../../../inc/Config.class.php:401
msgid "Modificar configuración"
msgstr "Konfiguration ändern"
-# Parameter
-#: ../../../../inc/config.class.php:151
-msgid "Parámetro"
-msgstr "Parameter"
-
-# Value
-#: ../../../../inc/config.class.php:152
-msgid "Valor"
-msgstr "Wert"
-
-# Unable to write on configuration file
-#: ../../../../inc/config.class.php:310
+#: ../../../../inc/Config.class.php:276
msgid "No es posible escribir el archivo de configuración"
msgstr "Konfigurationsdatei kann nicht geschrieben werden"
-# Please, check 'config' directory permissions
-#: ../../../../inc/config.class.php:311
+#: ../../../../inc/Config.class.php:276
msgid "Compruebe los permisos del directorio \"config\""
msgstr "Bitte überprüfen Sie Zugriffsrechte auf das Verzeichnis \"config\""
-# Update Customer
-#: ../../../../inc/customer.class.php:105
-msgid "Actualizar Cliente"
-msgstr "Kunde ändern"
+#: ../../../../inc/Config.class.php:402
+msgid "Parámetro"
+msgstr "Parameter"
-# Unable to connect to DB
-#: ../../../../inc/db.class.php:95 ../../../../inc/db.class.php:109
-#: ../../../../inc/db.class.php:116 ../../../../inc/installer.class.php:214
-msgid "No es posible conectar con la BD"
-msgstr "Verbindung zum Datenbank-Server kann nicht hergestellt werden"
+#: ../../../../inc/Config.class.php:403
+msgid "Valor"
+msgstr "Wert"
-# Please, check connection parameters
-#: ../../../../inc/db.class.php:95 ../../../../inc/installer.class.php:215
-msgid "Compruebe los datos de conexión"
-msgstr "Bitte überprüfen Sie Ihre Verbindungseinstellungen"
-
-# Edit Group
-#: ../../../../inc/groups.class.php:183
-msgid "Modificar Grupo"
-msgstr "Gruppe ändern"
-
-# Javascript is needed in order to run correctly
-#: ../../../../inc/html.class.php:207
-msgid "Javascript es necesario para el correcto funcionamiento"
-msgstr "Javascript muss eingeschaltet sein."
-
-# Help :: FAQ :: Changelog
-#: ../../../../inc/html.class.php:231
-msgid "Ayuda :: FAQ :: Changelog"
-msgstr "Hilfe :: FAQ :: Changelog"
-
-# A cygnux.org project
-#: ../../../../inc/html.class.php:233
-msgid "Un proyecto de cygnux.org"
-msgstr "Ein cygnux.org Projekt"
-
-# Filter ON
-#: ../../../../inc/html.class.php:277
-msgid "Filtro ON"
-msgstr "Filter Eingeschaltet"
-
-# Global ON
-#: ../../../../inc/html.class.php:279
-msgid "Global ON"
-msgstr "Global eingeschaltet"
-
-# First page
-#: ../../../../inc/html.class.php:284 ../../../../inc/html.class.php:318
-msgid "Primera página"
-msgstr "Erste Seite"
-
-# Previous page
-#: ../../../../inc/html.class.php:285 ../../../../inc/html.class.php:319
-msgid "Página anterior"
-msgstr "Vorherige Seite"
-
-# Next page
-#: ../../../../inc/html.class.php:292 ../../../../inc/html.class.php:326
-msgid "Página siguiente"
-msgstr "Nächste Seite"
-
-# Last page
-#: ../../../../inc/html.class.php:293 ../../../../inc/html.class.php:327
-msgid "Última página"
-msgstr "Letzte Seite"
-
-# Option unavilable
-#: ../../../../inc/html.class.php:424
+#: ../../../../inc/Controller.class.php:165
msgid "Opción no disponible"
msgstr "Option nicht verfügbar"
-# Please, contact to administrator
-#: ../../../../inc/html.class.php:424 ../../../../inc/html.class.php:425
-#: ../../../../inc/html.class.php:426 ../../../../inc/init.php:630
+#: ../../../../inc/Controller.class.php:165
+#: ../../../../inc/Controller.class.php:166
+#: ../../../../inc/Controller.class.php:167
+#: ../../../../inc/Controller.class.php:168 ../../../../inc/Init.class.php:290
msgid "Consulte con el administrador"
msgstr "Bitte kontaktieren Sie den Administrator"
-# You don't have permission to access to this page
-#: ../../../../inc/html.class.php:426
+#: ../../../../inc/Controller.class.php:167
msgid "No tiene permisos para acceder a esta página"
msgstr "Sie haben keine Erlaubnis auf diese Seite zuzugreifen"
-# Import finished
-#: ../../../../inc/import.class.php:89 ../../../../inc/migrate.class.php:117
-msgid "Importación finalizada"
-msgstr "Import beendet"
+#: ../../../../inc/Controller.class.php:168
+msgid "No tiene permisos para realizar esta operación"
+msgstr "Sie haben keine Erlaubnis für diese Aktion"
-# File successfully uploaded
-#: ../../../../inc/import.class.php:105
-msgid "Archivo no subido correctamente"
-msgstr "Datei erfolgreich hochgeladen"
+#: ../../../../inc/Crypt.class.php:236
+msgid "No se puede usar el módulo de encriptación"
+msgstr "Kryptographie-Modul konnte nicht geladen werden"
-# Please, check the web server's user permissions
-#: ../../../../inc/import.class.php:105
-msgid "Verifique los permisos del usuario del servidor web"
-msgstr "Bitte überprüfen Sie die Zugriffsberechtigungen des Web-Servers"
+#: ../../../../inc/Crypt.class.php:247
+msgid "Error al generar datos cifrados"
+msgstr "Fehler beim Erzeugen der verschlüsselten Daten"
-# Please, check file extension
-#: ../../../../inc/import.class.php:113
-msgid "Compruebe la extensión del archivo"
-msgstr "Bitte überprüfen Sie die Dateiendung"
+#: ../../../../inc/CryptPKI.class.php:44
+#, fuzzy
+msgid "No es posible generar las claves RSA"
+msgstr "Kunde kann nicht angelegt werden"
-# Please, check PHP configuration for upload files
-#: ../../../../inc/import.class.php:124
-msgid "Compruebe la configuración de PHP para subir archivos"
-msgstr "Bitte überprüfen Sie die PHP-Konfiguration zum Hochladen von Dateien"
+#: ../../../../inc/CryptPKI.class.php:110
+#: ../../../../inc/CryptPKI.class.php:141
+#, fuzzy
+msgid "El archivo de clave no existe"
+msgstr "Datei existiert nicht"
-# Please, check temporary directory permissions
-#: ../../../../inc/import.class.php:132
-msgid "Compruebe los permisos del directorio temporal"
-msgstr "Bitte überprüfen Sie die Zugriffsrechte des temporären Verzeichnisses"
+#: ../../../../inc/CsvImportBase.class.php:109
+#, php-format
+msgid "El número de campos es incorrecto (%d)"
+msgstr ""
-# Mime type not supported
-#: ../../../../inc/import.class.php:141
-msgid "Tipo mime no soportado"
-msgstr "Mimetype wird nicht unterstützt"
+#: ../../../../inc/CsvImportBase.class.php:110
+#, php-format
+msgid "Compruebe el formato del archivo CSV en línea %s"
+msgstr ""
-# Please, check the file format
-#: ../../../../inc/import.class.php:141
-msgid "Compruebe el formato del archivo"
-msgstr "Bitte überprüfen Sie das Format der Datei"
+#: ../../../../inc/CsvImportBase.class.php:140
+#: ../../../../inc/CsvImportBase.class.php:145
+#: ../../../../inc/Import.class.php:118 ../../../../inc/Import.class.php:124
+#: ../../../../inc/Migrate.class.php:349
+#: ../../../../inc/XmlImport.class.php:62
+#: ../../../../inc/XmlImport.class.php:63
+#: ../../../../web/ConfigC.class.php:216
+msgid "Importar Cuentas"
+msgstr "Importiere Konten"
-# The number of fields is incorrect
-#: ../../../../inc/import.class.php:159
-msgid "El número de campos es incorrecto"
-msgstr "Die Anzahl der Felder ist falsch"
-
-# Please, check the CSV file format
-#: ../../../../inc/import.class.php:159
-msgid "Compruebe el formato del archivo CSV"
-msgstr "Bitte überprüfen Sie das Format der CSV-Datei"
-
-# Error on importing account
-#: ../../../../inc/import.class.php:164
+#: ../../../../inc/CsvImportBase.class.php:141
msgid "Error importando cuenta"
msgstr "Fehler beim Importieren des Kontos"
-# Unable to process XML file
-#: ../../../../inc/import.class.php:266
-msgid "No es posible procesar el archivo XML"
-msgstr "XML-Datei kann nicht verarbeitet werden"
-
-# XML file not supported
-#: ../../../../inc/import.class.php:294
-msgid "Archivo XML no soportado"
-msgstr "XML-Datei wird nicht unterstützt"
-
-# Unable to detect the application the data was exported from
-#: ../../../../inc/import.class.php:294
-msgid "No es posible detectar la aplicación que exportó los datos"
+#: ../../../../inc/CsvImportBase.class.php:142
+#, php-format
+msgid "Error procesando línea %s"
msgstr ""
-"Die Anwendung von der die Daten exportiert wurden, kann nicht festgestellt "
-"werden"
-# Error on checking database
-#: ../../../../inc/init.php:136
+#: ../../../../inc/CsvImportBase.class.php:145
+#, php-format
+msgid "Cuenta importada: %s"
+msgstr ""
+
+#: ../../../../inc/CustomFieldsBase.class.php:81
+#: ../../../../inc/themes/classic/profiles.inc:98
+#: ../../../../inc/themes/material-blue/profiles.inc:114
+msgid "Categorías"
+msgstr "Kategorien"
+
+#: ../../../../inc/CustomFieldsBase.class.php:82
+#: ../../../../inc/themes/classic/profiles.inc:103
+#: ../../../../inc/themes/material-blue/profiles.inc:119
+msgid "Clientes"
+msgstr "Kunden"
+
+#: ../../../../inc/CustomFieldsBase.class.php:84
+#: ../../../../inc/themes/classic/account.inc:140
+#: ../../../../inc/themes/classic/profiles.inc:89
+#: ../../../../inc/themes/material-blue/account.inc:166
+#: ../../../../inc/themes/material-blue/profiles.inc:104
+msgid "Grupos"
+msgstr "Gruppen"
+
+#: ../../../../inc/Customer.class.php:50 ../../../../inc/Customer.class.php:95
+msgid "Cliente duplicado"
+msgstr "Doppelter Kunde"
+
+#: ../../../../inc/Customer.class.php:60
+msgid "Error al crear el cliente"
+msgstr "Fehler beim Anlegen des Kunden"
+
+#: ../../../../inc/Customer.class.php:112
+msgid "Error al actualizar el cliente"
+msgstr "Fehler beim Ändern des Kunden"
+
+#: ../../../../inc/Customer.class.php:115
+msgid "Actualizar Cliente"
+msgstr "Kunde ändern"
+
+#: ../../../../inc/Customer.class.php:150
+msgid "Cliente en uso por:"
+msgstr "Kunde wird verwendet von:"
+
+#: ../../../../inc/Customer.class.php:160
+msgid "Error al eliminar el cliente"
+msgstr "Fehler beim Löschen eines Kunden"
+
+#: ../../../../inc/Customer.class.php:163
+#: ../../../../web/AccountsMgmtC.class.php:159
+msgid "Eliminar Cliente"
+msgstr "Kunde löschen"
+
+#: ../../../../inc/DBConnectionFactory.class.php:87
+#: ../../../../inc/DBConnectionFactory.class.php:89
+#: ../../../../inc/DBConnectionFactory.class.php:103
+#: ../../../../inc/Installer.class.php:235
+#: ../../../../inc/Migrate.class.php:115
+msgid "No es posible conectar con la BD"
+msgstr "Verbindung zum Datenbank-Server kann nicht hergestellt werden"
+
+#: ../../../../inc/DBConnectionFactory.class.php:87
+#: ../../../../inc/DBConnectionFactory.class.php:89
+#: ../../../../inc/Installer.class.php:236
+#: ../../../../inc/Migrate.class.php:116
+msgid "Compruebe los datos de conexión"
+msgstr "Bitte überprüfen Sie Ihre Verbindungseinstellungen"
+
+#: ../../../../inc/Email.class.php:59 ../../../../inc/UserUtil.class.php:567
+msgid "N/D"
+msgstr "N/A"
+
+#: ../../../../inc/Email.class.php:60 ../../../../web/UsersMgmtC.class.php:392
+#: ../../../../inc/themes/classic/tokens.inc:20
+#: ../../../../inc/themes/material-blue/tokens.inc:20
+msgid "Acción"
+msgstr "Aktion"
+
+#: ../../../../inc/Email.class.php:61
+msgid "Realizado por"
+msgstr "Ausgeführt durch"
+
+#: ../../../../inc/Email.class.php:77
+msgid "Enviar Email"
+msgstr "E-Mail senden"
+
+#: ../../../../inc/Email.class.php:81
+msgid "Correo enviado"
+msgstr "E-Mail gesendet"
+
+#: ../../../../inc/Email.class.php:83
+msgid "Error al enviar correo"
+msgstr "Fehler beim Sender der Mail"
+
+#: ../../../../inc/Email.class.php:87
+msgid "Destinatario"
+msgstr "Empfänger"
+
+#: ../../../../inc/Email.class.php:90
+msgid "CC"
+msgstr "CC"
+
+#: ../../../../inc/Email.class.php:146
+msgid "Aviso"
+msgstr "Warnung"
+
+#: ../../../../inc/FileImport.class.php:105
+msgid "Archivo no subido correctamente"
+msgstr "Datei erfolgreich hochgeladen"
+
+#: ../../../../inc/FileImport.class.php:105
+msgid "Verifique los permisos del usuario del servidor web"
+msgstr "Bitte überprüfen Sie die Zugriffsberechtigungen des Web-Servers"
+
+#: ../../../../inc/FileImport.class.php:116
+msgid "Compruebe la extensión del archivo"
+msgstr "Bitte überprüfen Sie die Dateiendung"
+
+#: ../../../../inc/FileImport.class.php:132
+msgid "Compruebe la configuración de PHP para subir archivos"
+msgstr "Bitte überprüfen Sie die PHP-Konfiguration zum Hochladen von Dateien"
+
+#: ../../../../inc/FileImport.class.php:150
+#: ../../../../inc/FileImport.class.php:168
+msgid "Compruebe los permisos del directorio temporal"
+msgstr "Bitte überprüfen Sie die Zugriffsrechte des temporären Verzeichnisses"
+
+#: ../../../../inc/Files.class.php:111
+#: ../../../../inc/themes/classic/files.inc:15
+#: ../../../../inc/themes/material-blue/files.inc:16
+msgid "Eliminar Archivo"
+msgstr "Datei löschen"
+
+#: ../../../../inc/Groups.class.php:155
+msgid "Error al añadir los usuarios del grupo"
+msgstr ""
+
+#: ../../../../inc/Groups.class.php:256
+msgid "Error al actualizar los usuarios del grupo"
+msgstr ""
+
+#: ../../../../inc/Groups.class.php:369
+#: ../../../../web/UsersMgmtC.class.php:209
+msgid "Eliminar Grupo"
+msgstr "Gruppe löschen"
+
+#: ../../../../inc/Groups.class.php:372
+msgid "Error al eliminar los usuarios del grupo"
+msgstr ""
+
+#: ../../../../inc/Import.class.php:109
+msgid "Tipo mime no soportado"
+msgstr "Mimetype wird nicht unterstützt"
+
+#: ../../../../inc/Import.class.php:110
+msgid "Compruebe el formato del archivo"
+msgstr "Bitte überprüfen Sie das Format der Datei"
+
+#: ../../../../inc/Import.class.php:124 ../../../../inc/Import.class.php:127
+#: ../../../../inc/Migrate.class.php:92
+msgid "Importación finalizada"
+msgstr "Import beendet"
+
+#: ../../../../inc/Init.class.php:199
msgid "Error en la verificación de la base de datos"
msgstr "Fehler beim der Datenbanküberprüfung"
-# \"/config\" directory doesn't exist.
-#: ../../../../inc/init.php:343
-msgid "El directorio \"/config\" no existe"
-msgstr "\"/config\" Verzeichnis existiert nicht."
-
-# Unable to write into \"/config\" directory
-#: ../../../../inc/init.php:348
-msgid "No es posible escribir en el directorio \"config\""
-msgstr "In das Verzeichnis \"/config\" kann nicht geschrieben werden"
-
-# \"/config\" directory permissions are incorrect
-#: ../../../../inc/init.php:356
-msgid "Los permisos del directorio \"/config\" son incorrectos"
-msgstr "\"/config\"-Verzeichnis hat falsche Zugriffsrechte"
-
-# Current:
-#: ../../../../inc/init.php:356
-msgid "Actual:"
-msgstr "Aktuell:"
-
-# Needed: 750
-#: ../../../../inc/init.php:356
-msgid "Necesario: 750"
-msgstr "Erforderlich: 750"
-
-# Application in maintenance
-#: ../../../../inc/init.php:423
-msgid "Aplicación en mantenimiento"
-msgstr "Anwendung im Wartungsmodus"
-
-# It will be running in short
-#: ../../../../inc/init.php:423
-msgid "En breve estará operativa"
-msgstr "Es wird in Kürze gestartet"
-
-# The application needs to be updated
-#: ../../../../inc/init.php:455
-msgid "La aplicación necesita actualizarse"
-msgstr "Die Anwendung muss aktualisiert werden"
-
-# If you are an administrator, click on the link:
-#: ../../../../inc/init.php:455
-msgid "Si es un administrador pulse en el enlace:"
-msgstr "Wenn Sie ein Administrator sind, klicken Sie auf diesen Link:"
-
-# Update
-#: ../../../../inc/init.php:455 ../../../../inc/tpl/upgrade.php:54
-msgid "Actualizar"
-msgstr "Aktualisierung"
-
-# Update
-#: ../../../../inc/init.php:484
-msgid "Actualización"
-msgstr "Aktualisierung"
-
-# Version updating done.
-#: ../../../../inc/init.php:485
-msgid "Actualización de versión realizada."
-msgstr "Version aktualisiert"
-
-# Version
-#: ../../../../inc/init.php:486
-msgid "Versión"
-msgstr "Version"
-
-# Logout session
-#: ../../../../inc/init.php:543
-msgid "Finalizar sesión"
-msgstr "Aus Sitzung ausloggen"
-
-# Inactive time
-#: ../../../../inc/init.php:545
-msgid "Tiempo inactivo"
-msgstr "Zeit ohne Aktivität"
-
-# Total time
-#: ../../../../inc/init.php:546
-msgid "Tiempo total"
-msgstr "Gesamtzeit"
-
-# Session
-#: ../../../../inc/init.php:624
+#: ../../../../inc/Init.class.php:286
msgid "Sesion"
msgstr "Sitzung"
-# Session cannot be initialized.
-#: ../../../../inc/init.php:624 ../../../../inc/init.php:629
+#: ../../../../inc/Init.class.php:286 ../../../../inc/Init.class.php:290
msgid "La sesión no puede ser inicializada"
msgstr "Sitzung konnte nicht initialisiert werden"
-# Enter admin username
-#: ../../../../inc/installer.class.php:90
+#: ../../../../inc/Init.class.php:417
+msgid "El directorio \"/config\" no existe"
+msgstr "\"/config\" Verzeichnis existiert nicht."
+
+#: ../../../../inc/Init.class.php:422
+msgid "No es posible escribir en el directorio \"config\""
+msgstr "In das Verzeichnis \"/config\" kann nicht geschrieben werden"
+
+#: ../../../../inc/Init.class.php:430
+msgid "Los permisos del directorio \"/config\" son incorrectos"
+msgstr "\"/config\"-Verzeichnis hat falsche Zugriffsrechte"
+
+#: ../../../../inc/Init.class.php:430
+msgid "Actual:"
+msgstr "Aktuell:"
+
+#: ../../../../inc/Init.class.php:430
+msgid "Necesario: 750"
+msgstr "Erforderlich: 750"
+
+#: ../../../../inc/Init.class.php:479
+msgid "Aplicación en mantenimiento"
+msgstr "Anwendung im Wartungsmodus"
+
+#: ../../../../inc/Init.class.php:479
+msgid "En breve estará operativa"
+msgstr "Es wird in Kürze gestartet"
+
+#: ../../../../inc/Init.class.php:516
+msgid "Finalizar sesión"
+msgstr "Aus Sitzung ausloggen"
+
+#: ../../../../inc/Init.class.php:518
+msgid "Tiempo inactivo"
+msgstr "Zeit ohne Aktivität"
+
+#: ../../../../inc/Init.class.php:519
+msgid "Tiempo total"
+msgstr "Gesamtzeit"
+
+#: ../../../../inc/Init.class.php:558
+msgid "La aplicación necesita actualizarse"
+msgstr "Die Anwendung muss aktualisiert werden"
+
+#: ../../../../inc/Init.class.php:558
+#, php-format
+msgid "Si es un administrador pulse en el enlace: %s"
+msgstr ""
+
+#: ../../../../inc/Init.class.php:558
+#: ../../../../inc/themes/classic/upgrade.inc:20
+#: ../../../../inc/themes/material-blue/upgrade.inc:24
+msgid "Actualizar"
+msgstr "Aktualisierung"
+
+#: ../../../../inc/Init.class.php:589
+msgid "Actualización"
+msgstr "Aktualisierung"
+
+#: ../../../../inc/Init.class.php:590
+msgid "Actualización de versión realizada."
+msgstr "Version aktualisiert"
+
+#: ../../../../inc/Init.class.php:591
+#: ../../../../inc/themes/classic/info.inc:33
+#: ../../../../inc/themes/material-blue/info.inc:33
+msgid "Versión"
+msgstr "Version"
+
+#: ../../../../inc/Installer.class.php:127
msgid "Indicar nombre de usuario admin"
msgstr "Benutzername des Administrators eingeben"
-# Admin user to login to application
-#: ../../../../inc/installer.class.php:91
+#: ../../../../inc/Installer.class.php:128
msgid "Usuario admin para acceso a la aplicación"
msgstr "Administrator der Anwendung"
-# Enter admin password
-#: ../../../../inc/installer.class.php:96
+#: ../../../../inc/Installer.class.php:132
msgid "Indicar la clave de admin"
msgstr "Administrator-Passwort eingeben"
-# Application administrator's password
-#: ../../../../inc/installer.class.php:97
+#: ../../../../inc/Installer.class.php:133
msgid "Clave del usuario admin de la aplicación"
msgstr "Administrationspasswort der Anwendung"
-# Enter master password
-#: ../../../../inc/installer.class.php:103
+#: ../../../../inc/Installer.class.php:137
msgid "Indicar la clave maestra"
msgstr "Master-Passwort eingeben"
-# Master password to encrypt the passwords
-#: ../../../../inc/installer.class.php:104
+#: ../../../../inc/Installer.class.php:138
msgid "Clave maestra para encriptar las claves"
msgstr "Master-Passwords zum Verschlüsseln der Passwörter"
-# Master password too short
-#: ../../../../inc/installer.class.php:109
+#: ../../../../inc/Installer.class.php:142
msgid "Clave maestra muy corta"
msgstr "Master-Passwort zu kurz"
-# Master password length need to be at least 11 characters
-#: ../../../../inc/installer.class.php:110
+#: ../../../../inc/Installer.class.php:143
msgid "La longitud de la clave maestra ha de ser mayor de 11 caracteres"
msgstr "Master-Password muss mindestens 11 Zeichen lang sein"
-# Enter database user
-#: ../../../../inc/installer.class.php:116
+#: ../../../../inc/Installer.class.php:147
msgid "Indicar el usuario de la BBDD"
msgstr "Datenbankbenutzer eingeben"
-# An user with database administrative rights
-#: ../../../../inc/installer.class.php:117
+#: ../../../../inc/Installer.class.php:148
msgid "Usuario con permisos de administrador de la Base de Datos"
msgstr "Ein Benutzer mit administrativen Rechten in der Datenbank"
-# Enter database password
-#: ../../../../inc/installer.class.php:122
+#: ../../../../inc/Installer.class.php:152
msgid "Indicar la clave de la BBDD"
msgstr "Datenbankpasswort eingeben"
-# Database administartor's password
-#: ../../../../inc/installer.class.php:123
+#: ../../../../inc/Installer.class.php:153
msgid "Clave del usuario administrador de la Base de Datos"
msgstr "Administrationspasswort der Datenbank"
-# Enter database name
-#: ../../../../inc/installer.class.php:128
+#: ../../../../inc/Installer.class.php:157
msgid "Indicar el nombre de la BBDD"
msgstr "Datenbankname eingeben"
-# Application database name. eg. syspass
-#: ../../../../inc/installer.class.php:129
+#: ../../../../inc/Installer.class.php:158
msgid "Nombre para la BBDD de la aplicación pej. syspass"
msgstr "Datenbankname der Anwendung, z.B. syspass"
-# Database name can't contains \".\"
-#: ../../../../inc/installer.class.php:134
+#: ../../../../inc/Installer.class.php:162
msgid "El nombre de la BBDD no puede contener \".\""
msgstr "Name der Datenbank darf keine \".\" enthalten"
-# Please, remove dots on database name
-#: ../../../../inc/installer.class.php:135
+#: ../../../../inc/Installer.class.php:163
msgid "Elimine los puntos del nombre de la Base de Datos"
msgstr "Bitte entfernen Sie den Punkt aus dem Datenbanknamen"
-# Enter database server
-#: ../../../../inc/installer.class.php:141
+#: ../../../../inc/Installer.class.php:167
msgid "Indicar el servidor de la BBDD"
msgstr "Datenbank-Server eingeben"
-# Server where the database will be installed
-#: ../../../../inc/installer.class.php:142
+#: ../../../../inc/Installer.class.php:168
msgid "Servidor donde se instalará la Base de Datos"
msgstr "Server auf dem die Datenbank installiert wird"
-# Database already exist
-#: ../../../../inc/installer.class.php:260
-msgid "La BBDD ya existe"
-msgstr "Datenbank existiert bereits"
-
-# Enter a new database or delete the existing one
-#: ../../../../inc/installer.class.php:261
-msgid "Indique una nueva Base de Datos o elimine la existente"
-msgstr "Neuen Datenbanknamen eingeben oder bestehende Datenbank löschen"
-
-# MySQL user already exist
-#: ../../../../inc/installer.class.php:286
+#: ../../../../inc/Installer.class.php:313
msgid "El usuario de MySQL ya existe"
msgstr "MySQL Benutzer wird schon benutzt"
-# Enter a new username or delete the existing one
-#: ../../../../inc/installer.class.php:287
+#: ../../../../inc/Installer.class.php:314
msgid "Indique un nuevo usuario o elimine el existente"
msgstr "Neuen Benutzernamen eingeben oder bestehenden Benutzer löschen"
-# Error on DB creation
-#: ../../../../inc/installer.class.php:304
-#: ../../../../inc/installer.class.php:382
+#: ../../../../inc/Installer.class.php:327
+msgid "La BBDD ya existe"
+msgstr "Datenbank existiert bereits"
+
+#: ../../../../inc/Installer.class.php:328
+msgid "Indique una nueva Base de Datos o elimine la existente"
+msgstr "Neuen Datenbanknamen eingeben oder bestehende Datenbank löschen"
+
+#: ../../../../inc/Installer.class.php:337
+#: ../../../../inc/Installer.class.php:408
msgid "Error al crear la BBDD"
msgstr "Fehler beim Anlegen der Datenbank"
-# Please, check database user permissions
-#: ../../../../inc/installer.class.php:305
-#: ../../../../inc/installer.class.php:317
+#: ../../../../inc/Installer.class.php:338
+#: ../../../../inc/Installer.class.php:349
msgid "Verifique los permisos del usuario de la Base de Datos"
msgstr "Bitte überprüfen Sie die Datenbank-Zugriffsberechtigungen"
-# Error on setting database permissions
-#: ../../../../inc/installer.class.php:316
+#: ../../../../inc/Installer.class.php:348
msgid "Error al establecer permisos de la BBDD"
msgstr "Fehler beim Setzen der Datenbank-Berechtigungen"
-# Database structure file doesn't exist
-#: ../../../../inc/installer.class.php:360
+#: ../../../../inc/Installer.class.php:381
msgid "El archivo de estructura de la BBDD no existe"
msgstr "Datei mit Datenbank-Schema existiert nicht"
-# Unable to create application database. Please, download it again.
-#: ../../../../inc/installer.class.php:361
+#: ../../../../inc/Installer.class.php:382
msgid "No es posible crear la BBDD de la aplicación. Descárguela de nuevo."
msgstr ""
"Anwendungsdatenbank kann nicht angelegt werden. Bitte erneut herunterladen"
-# Error on selecting database.
-#: ../../../../inc/installer.class.php:367
+#: ../../../../inc/Installer.class.php:390
msgid "Error al seleccionar la BBDD"
msgstr "Fehler beim Auswählen der Datenbank"
-# Unable to use the database to create the structure. Check permissions and it doesn't exist.
-#: ../../../../inc/installer.class.php:368
+#: ../../../../inc/Installer.class.php:391
msgid ""
"No es posible usar la Base de Datos para crear la estructura. Compruebe los "
"permisos y que no exista."
msgstr "Datenbank kann nicht gefunden werden. Überprüfen Sie die Berechtigung."
-# Error on creating database structure.
-#: ../../../../inc/installer.class.php:383
+#: ../../../../inc/Installer.class.php:409
msgid "Error al crear la estructura de la Base de Datos."
msgstr "Fehler beim Anlegen der Datenbankstruktur"
-# Error on creating \"admin\" group
-#: ../../../../inc/installer.class.php:409
+#: ../../../../inc/Installer.class.php:432
msgid "Error al crear el grupo \"admin\""
msgstr "Fehler beim Anlegen der \"admin\" Gruppe"
-# Warn to developer
-#: ../../../../inc/installer.class.php:410
-#: ../../../../inc/installer.class.php:441
-#: ../../../../inc/installer.class.php:459
-#: ../../../../inc/installer.class.php:474
+#: ../../../../inc/Installer.class.php:433
+#: ../../../../inc/Installer.class.php:466
+#: ../../../../inc/Installer.class.php:483
+#: ../../../../inc/Installer.class.php:496
msgid "Informe al desarrollador"
msgstr "Warnung an Entwickler"
-# Error on creating \"admin\" profile
-#: ../../../../inc/installer.class.php:440
+#: ../../../../inc/Installer.class.php:465
msgid "Error al crear el perfil \"admin\""
msgstr "Fehler beim Anlegen des \"admin\" Profils"
-# Error on creating \"admin\" user
-#: ../../../../inc/installer.class.php:458
+#: ../../../../inc/Installer.class.php:482
msgid "Error al crear el usuario \"admin\""
msgstr "Fehler beim Anlegen des \"admin\" Benutzers"
-# Error on updating master password for user \"admin\"
-#: ../../../../inc/installer.class.php:473
+#: ../../../../inc/Installer.class.php:495
msgid "Error al actualizar la clave maestra del usuario \"admin\""
msgstr "Fehler beim Ändern des Master-Passworts des Benutzers \"admin\""
-# Unable to connect to LDAP server
-#: ../../../../inc/ldap.class.php:100 ../../../../inc/ldap.class.php:105
+#: ../../../../inc/Ldap.class.php:127 ../../../../inc/Ldap.class.php:131
msgid "No es posible conectar con el servidor de LDAP"
msgstr "Verbindung zum LDAP-Server kann nicht hergestellt werden"
-# Connection error (BIND)
-#: ../../../../inc/ldap.class.php:130 ../../../../inc/ldap.class.php:136
+#: ../../../../inc/Ldap.class.php:156 ../../../../inc/Ldap.class.php:161
msgid "Error al conectar (BIND)"
msgstr "LDAP-Verbindungsfehler (BIND)"
-# Error on searching objects in base DN
-#: ../../../../inc/ldap.class.php:159 ../../../../inc/ldap.class.php:165
+#: ../../../../inc/Ldap.class.php:184 ../../../../inc/Ldap.class.php:189
msgid "Error al buscar objetos en DN base"
msgstr "Fehler beim Suchen nach Objekten in der Base-DN"
-# Error on searching group RDN
-#: ../../../../inc/ldap.class.php:193 ../../../../inc/ldap.class.php:199
-#: ../../../../inc/ldap.class.php:206 ../../../../inc/ldap.class.php:211
-#: ../../../../inc/ldap.class.php:221 ../../../../inc/ldap.class.php:226
+#: ../../../../inc/Ldap.class.php:217 ../../../../inc/Ldap.class.php:222
+#: ../../../../inc/Ldap.class.php:229 ../../../../inc/Ldap.class.php:233
+#: ../../../../inc/Ldap.class.php:242 ../../../../inc/Ldap.class.php:246
msgid "Error al buscar RDN de grupo"
msgstr "Fehler beim Suchen nach Gruppen RDN"
-# Group RDN found
-#: ../../../../inc/ldap.class.php:214
-msgid "RDN de grupo encontrado"
-msgstr "Gruppen-RDN gefunden"
-
-# Error on searching user DN
-#: ../../../../inc/ldap.class.php:278 ../../../../inc/ldap.class.php:284
-#: ../../../../inc/ldap.class.php:299 ../../../../inc/ldap.class.php:304
+#: ../../../../inc/Ldap.class.php:295 ../../../../inc/Ldap.class.php:300
+#: ../../../../inc/Ldap.class.php:314 ../../../../inc/Ldap.class.php:318
msgid "Error al buscar el DN del usuario"
msgstr "Fehler beim Suchen nach Benutzer DN"
-# Error on searching user on LDAP
-#: ../../../../inc/ldap.class.php:291 ../../../../inc/ldap.class.php:296
+#: ../../../../inc/Ldap.class.php:307 ../../../../inc/Ldap.class.php:311
msgid "Error al localizar el usuario en LDAP"
msgstr "Fehler beim Suchen des Benutzers in LDAP"
-# Error on searching users group
-#: ../../../../inc/ldap.class.php:380 ../../../../inc/ldap.class.php:386
+#: ../../../../inc/Ldap.class.php:392 ../../../../inc/Ldap.class.php:397
+#: ../../../../inc/LdapADS.class.php:99 ../../../../inc/LdapADS.class.php:104
msgid "Error al buscar el grupo de usuarios"
msgstr "Fehler beim Suchen nach Benutzergruppe"
-# The user has not associated groups
-#: ../../../../inc/ldap.class.php:392 ../../../../inc/ldap.class.php:398
-msgid "El usuario no pertenece al grupo"
-msgstr "Der Benutzer hat keine zugewiesene Gruppe"
+#: ../../../../inc/Ldap.class.php:404
+msgid "Usuario verificado en grupo"
+msgstr ""
-# Clear Events
-#: ../../../../inc/log.class.php:82
+#: ../../../../inc/LdapADS.class.php:108 ../../../../inc/LdapADS.class.php:113
+msgid "No se encontró el grupo con ese nombre"
+msgstr "Keine Gruppe mit dem Namen gefunden"
+
+#: ../../../../inc/Log.class.php:88
msgid "Vaciar Eventos"
msgstr "Protokol löschen"
-# Clear event log
-#: ../../../../inc/log.class.php:83 ../../../../inc/tpl/eventlog.php:129
+#: ../../../../inc/Log.class.php:88
+#: ../../../../inc/themes/classic/eventlog.inc:100
+#: ../../../../inc/themes/material-blue/eventlog.inc:100
msgid "Vaciar registro de eventos"
msgstr "Protokol löschen"
-# Missing parameters
-#: ../../../../inc/migrate.class.php:81
+#: ../../../../inc/Migrate.class.php:52
msgid "Faltan parámetros"
msgstr "Fehlender Parameter"
-# Wrong MySQL user/pass
-#: ../../../../inc/migrate.class.php:140
-msgid "El usuario/clave de MySQL no es correcto"
-msgstr "Falsche MySQL Zugangsdaten"
-
-# Please, check database connection user
-#: ../../../../inc/migrate.class.php:141
-msgid "Verifique el usuario de conexión con la Base de Datos"
-msgstr "Bitte überprüfen Sie den Datenbankbenutzer"
-
-# Incompatible version
-#: ../../../../inc/migrate.class.php:185
+#: ../../../../inc/Migrate.class.php:149
msgid "La versión no es compatible"
msgstr "Inkompatible Version"
-# Please, update to last version of phpPMS
-#: ../../../../inc/migrate.class.php:186
+#: ../../../../inc/Migrate.class.php:150
msgid "Actualice a la última versión de phpPMS"
msgstr "Bitte aktualisieren Sie auf die letzte Version von phpPMS."
-# Error on retrieving configuration
-#: ../../../../inc/migrate.class.php:205
+#: ../../../../inc/Migrate.class.php:168
msgid "Error al obtener la configuración"
msgstr "Fehler beim Laden der Konfiguration"
-# Error on cleaning table
-#: ../../../../inc/migrate.class.php:256 ../../../../inc/migrate.class.php:270
+#: ../../../../inc/Migrate.class.php:211 ../../../../inc/Migrate.class.php:224
msgid "Error al vaciar tabla"
msgstr "Fehler beim Leeren der Tabelle"
-# Current user is not application administrator
-#: ../../../../inc/migrate.class.php:275
+#: ../../../../inc/Migrate.class.php:229
msgid "Usuario actual no es administrador de la aplicación"
msgstr "Angemeldeter Benutzer ist nicht Administrator"
-# Unable to create customer
-#: ../../../../inc/migrate.class.php:323
+#: ../../../../inc/Migrate.class.php:274
msgid "No es posible crear el cliente"
msgstr "Kunde kann nicht angelegt werden"
-# Please, contact to developer
-#: ../../../../inc/migrate.class.php:324
+#: ../../../../inc/Migrate.class.php:275
msgid "Contacte con el desarrollador"
msgstr "Bitte kontaktieren Sie den Entwickler"
-# Import Customers
-#: ../../../../inc/migrate.class.php:328
+#: ../../../../inc/Migrate.class.php:279
msgid "Importar Clientes"
msgstr "Importiere Kunden"
-# Records
-#: ../../../../inc/migrate.class.php:330 ../../../../inc/migrate.class.php:404
-#: ../../../../inc/migrate.class.php:493 ../../../../inc/migrate.class.php:567
-#: ../../../../inc/migrate.class.php:659 ../../../../inc/migrate.class.php:722
-#: ../../../../inc/migrate.class.php:798 ../../../../inc/migrate.class.php:877
-#: ../../../../inc/migrate.class.php:948
+#: ../../../../inc/Migrate.class.php:281 ../../../../inc/Migrate.class.php:351
+#: ../../../../inc/Migrate.class.php:452 ../../../../inc/Migrate.class.php:525
+#: ../../../../inc/Migrate.class.php:633 ../../../../inc/Migrate.class.php:698
+#: ../../../../inc/Migrate.class.php:772 ../../../../inc/Migrate.class.php:862
+#: ../../../../inc/Migrate.class.php:933
msgid "Registros"
msgstr "Datensätze"
-# Error on retrieving customer
-#: ../../../../inc/migrate.class.php:350
+#: ../../../../inc/Migrate.class.php:303
msgid "Error al obtener los clientes"
msgstr "Fehler beim Laden des Kunden"
-# Error on retrieving accounts
-#: ../../../../inc/migrate.class.php:389
+#: ../../../../inc/Migrate.class.php:345
msgid "Error al obtener cuentas"
msgstr "Fehler beim Laden des Kontos"
-# Customer not found
-#: ../../../../inc/migrate.class.php:430
+#: ../../../../inc/Migrate.class.php:374
msgid "Cliente no encontrado"
msgstr "Kunde nicht gefunden"
-# Error on importing account
-#: ../../../../inc/migrate.class.php:456
+#: ../../../../inc/Migrate.class.php:417
msgid "Error al migrar cuenta"
msgstr "Fehler beim Importieren des Kontos"
-# Error on retrieving accounts groups
-#: ../../../../inc/migrate.class.php:478
+#: ../../../../inc/Migrate.class.php:446
msgid "Error al obtener los grupos de cuentas"
msgstr "Fehler beim Laden der Gruppen eines Kontos"
-# Import Accounts Groups
-#: ../../../../inc/migrate.class.php:491
+#: ../../../../inc/Migrate.class.php:450
msgid "Importar Grupos de Cuentas"
msgstr "Importiere Kontogruppen"
-# Error on accounts groups creation
-#: ../../../../inc/migrate.class.php:514
+#: ../../../../inc/Migrate.class.php:472
msgid "Error al crear grupos de cuentas"
msgstr "Fehler beim Anlegen der Gruppen eines Kontos"
-# Error on retrieving accounts history
-#: ../../../../inc/migrate.class.php:552
+#: ../../../../inc/Migrate.class.php:519
msgid "Error al obtener el historico de cuentas"
msgstr "Fehler beim Laden der Konto-Historie"
-# Import Accounts History
-#: ../../../../inc/migrate.class.php:565
+#: ../../../../inc/Migrate.class.php:523
msgid "Importar Histórico de Cuentas"
msgstr "Importiere Konten-Historie"
-# Error on creating accounts history
-#: ../../../../inc/migrate.class.php:618
+#: ../../../../inc/Migrate.class.php:592
msgid "Error al crear historico de cuentas"
msgstr "Fehler beim Anlegen der Konto-Historie"
-# Error on retrieving accounts files
-#: ../../../../inc/migrate.class.php:644
+#: ../../../../inc/Migrate.class.php:627
msgid "Error al obtener los archivos de cuentas"
msgstr "Fehler beim Laden der Konto-Dateien"
-# Import Accounts Files
-#: ../../../../inc/migrate.class.php:657
+#: ../../../../inc/Migrate.class.php:631
msgid "Importar Archivos de Cuentas"
msgstr "Importiere Konto-Dateien"
-# Error on creating accounts files
-#: ../../../../inc/migrate.class.php:685
+#: ../../../../inc/Migrate.class.php:663
msgid "Error al crear archivos de cuentas"
msgstr "Fehler beim Anlegen der Kontodateien"
-# Error on retrieving accounts categories
-#: ../../../../inc/migrate.class.php:707
+#: ../../../../inc/Migrate.class.php:692
msgid "Error al obtener las categorías de cuentas"
msgstr "Fehler beim Holen der Konto-Kategorien"
-# Import Accounts Categories
-#: ../../../../inc/migrate.class.php:720
+#: ../../../../inc/Migrate.class.php:696
msgid "Importar Categorías de Cuentas"
msgstr "Importiere Kontokategorien"
-# Error on retrieving accounts categories
-#: ../../../../inc/migrate.class.php:744
+#: ../../../../inc/Migrate.class.php:718
msgid "Error al crear categorías de cuentas"
msgstr "Fehler beim Holen der Konto-Kategorien"
-# Error on retrieving users
-#: ../../../../inc/migrate.class.php:783
+#: ../../../../inc/Migrate.class.php:766
msgid "Error al obtener los usuarios"
msgstr "Fehler beim Laden der Benutzer"
-# Import Users
-#: ../../../../inc/migrate.class.php:796
+#: ../../../../inc/Migrate.class.php:770
msgid "Importar Usuarios"
msgstr "Importiere Benutzer"
-# Error on creating users
-#: ../../../../inc/migrate.class.php:839
+#: ../../../../inc/Migrate.class.php:827
msgid "Error al crear usuarios"
msgstr "Fehler beim Anlegen der Benutzer"
-# Error on retrieving users groups
-#: ../../../../inc/migrate.class.php:862
+#: ../../../../inc/Migrate.class.php:856
msgid "Error al obtener los grupos de usuarios"
msgstr "Fehler beim Laden der Gruppen eines Benutzers"
-# Import Users Groups
-#: ../../../../inc/migrate.class.php:875
+#: ../../../../inc/Migrate.class.php:860
msgid "Importar Grupos de Usuarios"
msgstr "Importiere Benutzergruppen"
-# Error on adding users groups
-#: ../../../../inc/migrate.class.php:900
+#: ../../../../inc/Migrate.class.php:886
msgid "Error al crear los grupos de usuarios"
msgstr "Fehler beim Hinzufügen Gruppen eines Benutzers"
-# Import Configuration
-#: ../../../../inc/migrate.class.php:946
+#: ../../../../inc/Migrate.class.php:931
msgid "Importar Configuración"
msgstr "Importiere Konfiguration"
-# Edit Profile
-#: ../../../../inc/profiles.class.php:258
+#: ../../../../inc/Profile.class.php:69 ../../../../inc/Profile.class.php:123
+#: ../../../../inc/Profile.class.php:128
+msgid "Migrar Perfiles"
+msgstr "Profile migrieren"
+
+#: ../../../../inc/Profile.class.php:69
+msgid "Error al obtener perfiles"
+msgstr ""
+
+#: ../../../../inc/Profile.class.php:126
+msgid "Operación realizada correctamente"
+msgstr ""
+
+#: ../../../../inc/Profile.class.php:128
+msgid "Fallo al realizar la operación"
+msgstr ""
+
+#: ../../../../inc/ProfileBase.class.php:164
+msgid "Datos de perfil incorrectos"
+msgstr "falsche Profildaten"
+
+#: ../../../../inc/ProfileBase.class.php:550
+#: ../../../../web/UsersMgmtC.class.php:274
+msgid "Eliminar Perfil"
+msgstr "Profil löschen"
+
+#: ../../../../inc/ProfileBase.class.php:593
msgid "Modificar Perfil"
msgstr "Profil ändern"
-# Edit Account
-#: ../../../../inc/tpl/accounts.php:63
-msgid "Editar Cuenta"
-msgstr "Konto ändern"
-
-# Account name
-#: ../../../../inc/tpl/accounts.php:178
-msgid "Nombre de cuenta"
-msgstr "Kontoname"
-
-# Search down or enter
-#: ../../../../inc/tpl/accounts.php:197
-msgid "Buscar en desplegable o introducir"
-msgstr "Weitersuchen"
-
-# Access URL or IP
-#: ../../../../inc/tpl/accounts.php:223
-msgid "URL o IP de acceso"
-msgstr "Auf URL/IP zugreifen"
-
-# Access user
-#: ../../../../inc/tpl/accounts.php:239
-msgid "Usuario de acceso"
-msgstr "Benutzer für Zugriff"
-
-# The generated password will be shown here
-#: ../../../../inc/tpl/accounts.php:255 ../../../../inc/tpl/editpass.php:61
-msgid "La clave generada se mostrará aquí"
-msgstr "Das erzeugte Passwort wird hier gezeigt"
-
-# Notes about the account
-#: ../../../../inc/tpl/accounts.php:273
-msgid "Notas sobre la cuenta"
-msgstr "Bemerkungen zum Konto"
-
-# Permissions
-#: ../../../../inc/tpl/accounts.php:279
-msgid "Permisos"
-msgstr "Berechtigungen"
-
-# Enable Edit
-#: ../../../../inc/tpl/accounts.php:306 ../../../../inc/tpl/accounts.php:337
-msgid "Hablitar edición"
-msgstr "Erlaube Änderungen"
-
-# YES
-#: ../../../../inc/tpl/accounts.php:307 ../../../../inc/tpl/accounts.php:338
-#: ../../../../inc/tpl/accounts.php:601 ../../../../inc/tpl/masterpass.php:178
-#: ../../../../inc/tpl/migrate.php:132
-msgid "SI"
-msgstr "Ja"
-
-# NO
-#: ../../../../inc/tpl/accounts.php:307 ../../../../inc/tpl/accounts.php:338
-#: ../../../../inc/tpl/accounts.php:599 ../../../../inc/tpl/masterpass.php:81
-#: ../../../../inc/tpl/masterpass.php:100
-#: ../../../../inc/tpl/masterpass.php:176 ../../../../inc/tpl/migrate.php:81
-#: ../../../../inc/tpl/migrate.php:130
-msgid "NO"
-msgstr "Nein"
-
-# Groups
-#: ../../../../inc/tpl/accounts.php:314 ../../../../inc/tpl/profiles.php:90
-msgid "Grupos"
-msgstr "Gruppen"
-
-# Files
-#: ../../../../inc/tpl/accounts.php:360 ../../../../inc/tpl/profiles.php:65
-msgid "Archivos"
-msgstr "Dateien"
-
-# Drop files here (max. 5) or click to select
-#: ../../../../inc/tpl/accounts.php:373
-msgid "Soltar archivos aquí (max. 5) o click para seleccionar"
-msgstr "Dateien hier fallen lassen (max. 5) oder zum selektieren anklicken"
-
-# Maximum file size
-#: ../../../../inc/tpl/accounts.php:373 ../../../../inc/tpl/config.php:204
-msgid "Tamaño máximo de archivo"
-msgstr "Maximale Dateigröße"
-
-# History
-#: ../../../../inc/tpl/accounts.php:385
-msgid "Historial"
-msgstr "Protokol"
-
-# Select date
-#: ../../../../inc/tpl/accounts.php:402
-msgid "Seleccionar fecha"
-msgstr "Datum auswählen"
-
-# Last Modification
-#: ../../../../inc/tpl/accounts.php:410 ../../../../inc/tpl/users.php:193
-msgid "Última Modificación"
-msgstr "Letzte Änderung"
-
-# by
-#: ../../../../inc/tpl/accounts.php:412
-msgid "por"
-msgstr "durch"
-
-# Visits
-#: ../../../../inc/tpl/accounts.php:422
-msgid "Visitas"
-msgstr "Besuche"
-
-# Date Added
-#: ../../../../inc/tpl/accounts.php:426
-msgid "Fecha Alta"
-msgstr "Datum hinzugefügt"
-
-# Creator
-#: ../../../../inc/tpl/accounts.php:430
-msgid "Creador"
-msgstr "Erzeuger"
-
-# Main Group
-#: ../../../../inc/tpl/accounts.php:434
-msgid "Grupo Principal"
-msgstr "Hauptgruppe"
-
-# Secondary Users
-#: ../../../../inc/tpl/accounts.php:439
-msgid "Usuarios Secundarios"
-msgstr "Unter-Benutzer"
-
-# Secondary Groups
-#: ../../../../inc/tpl/accounts.php:460
-msgid "Grupos Secundarios"
-msgstr "Untergruppe"
-
-# Date Modified
-#: ../../../../inc/tpl/accounts.php:482
-msgid "Fecha Edición"
-msgstr "Änderungsdatum"
-
-# Editor
-#: ../../../../inc/tpl/accounts.php:486
-msgid "Editor"
-msgstr "Editor"
-
-# View Current
-#: ../../../../inc/tpl/accounts.php:508
-msgid "Ver Actual"
-msgstr "Ansehen"
-
-# Back
-#: ../../../../inc/tpl/accounts.php:513 ../../../../inc/tpl/editpass.php:85
-#: ../../../../inc/tpl/request.php:72
-msgid "Atrás"
-msgstr "Zurück"
-
-# Restore account from this point
-#: ../../../../inc/tpl/accounts.php:520
-msgid "Restaurar cuenta desde este punto"
-msgstr "Wiederherstellen Konto von diesem Punkt"
-
-# Edit Account Password
-#: ../../../../inc/tpl/accounts.php:549 ../../../../inc/tpl/editpass.php:35
-msgid "Modificar Clave de Cuenta"
-msgstr "Konto-Passwort ändern"
-
-# Select Customer
-#: ../../../../inc/tpl/accounts.php:578 ../../../../inc/tpl/search.php:89
-msgid "Seleccionar Cliente"
-msgstr "Kunde auswählen"
-
-# No results
-#: ../../../../inc/tpl/accounts.php:580 ../../../../inc/tpl/accounts.php:585
-#: ../../../../inc/tpl/config.php:601 ../../../../inc/tpl/config.php:606
-#: ../../../../inc/tpl/search.php:89 ../../../../inc/tpl/search.php:90
-#: ../../../../inc/tpl/users.php:231 ../../../../inc/tpl/users.php:236
-msgid "Sin resultados"
-msgstr "Kein Ergebnis"
-
-# Select category
-#: ../../../../inc/tpl/accounts.php:583 ../../../../inc/tpl/search.php:90
-msgid "Seleccionar Categoría"
-msgstr "Kategorie auswählen"
-
-# Select secondary groups
-#: ../../../../inc/tpl/accounts.php:588
-msgid "Seleccionar grupos secundarios"
-msgstr "Untergruppe auswählen"
-
-# Select users
-#: ../../../../inc/tpl/accounts.php:591
-msgid "Seleccionar usuarios"
-msgstr "Benutzer auswählen"
-
-# Last backup
-#: ../../../../inc/tpl/backup.php:42
-msgid "Último backup"
-msgstr "Letztes Backup"
-
-# There're no backups available
-#: ../../../../inc/tpl/backup.php:42
-msgid "No se encontraron backups"
-msgstr "Es existieren keine Backups"
-
-# Result
-#: ../../../../inc/tpl/backup.php:48
-msgid "Resultado"
-msgstr "Ergebnis"
-
-# Download Current
-#: ../../../../inc/tpl/backup.php:56
-msgid "Descargar Actual"
-msgstr "Herunterladen"
-
-# There're no backups for download
-#: ../../../../inc/tpl/backup.php:64
-msgid "No hay backups para descargar"
-msgstr "Es existieren keine Backups zum Herunterladen"
-
-# Category name
-#: ../../../../inc/tpl/categories.php:42
-msgid "Nombre de la categoría"
-msgstr "Kategoriename"
-
-# Category description
-#: ../../../../inc/tpl/categories.php:50
-msgid "Descripción de la categoría"
-msgstr "Beschreibung der Kategorie"
-
-# Site
-#: ../../../../inc/tpl/config.php:87
-msgid "Sitio"
-msgstr "Site"
-
-# Language
-#: ../../../../inc/tpl/config.php:95
-msgid "Idioma"
-msgstr "Sprache"
-
-# Session timeout (s)
-#: ../../../../inc/tpl/config.php:109
-msgid "Timeout de sesión (s)"
-msgstr "Ablauf der Sitzung (s)"
-
-# Enable event log
-#: ../../../../inc/tpl/config.php:118
-msgid "Habilitar log de eventos"
-msgstr "Protokol einschalten"
-
-# Enable debug
-#: ../../../../inc/tpl/config.php:129
-msgid "Habilitar depuración"
-msgstr "Debugging einschalten"
-
-# Maintenance mode.
-#: ../../../../inc/tpl/config.php:140
-msgid "Modo mantenimiento"
-msgstr "Wartungsmodus"
-
-# Check for updates
-#: ../../../../inc/tpl/config.php:151
-msgid "Comprobar actualizaciones"
-msgstr "Nach Updates schauen"
-
-# Account name as link
-#: ../../../../inc/tpl/config.php:162
-msgid "Nombre de cuenta como enlace"
-msgstr "Kontoname als Link"
-
-# Files management
-#: ../../../../inc/tpl/config.php:173
-msgid "Gestión de archivos"
-msgstr "Dateiverwaltung"
-
-# Global searches
-#: ../../../../inc/tpl/config.php:184
-msgid "Búsquedas globales"
-msgstr "Globale Suchen"
-
-# Allowed file extensions
-#: ../../../../inc/tpl/config.php:195
-msgid "Extensiones de archivos permitidas"
-msgstr "Erlaubte Dateiendungen"
-
-# Results per page
-#: ../../../../inc/tpl/config.php:215
-msgid "Resultados por página"
-msgstr "Treffer pro Seite"
-
-# Results as Cards
-#: ../../../../inc/tpl/config.php:231
-msgid "Resultados en Tarjetas"
-msgstr "Results as Cards"
-
-# Wiki
-#: ../../../../inc/tpl/config.php:244
-msgid "Wiki"
-msgstr "Wiki"
-
-# Enable Wiki links
-#: ../../../../inc/tpl/config.php:250
-msgid "Habilitar enlaces Wiki"
-msgstr "Wike-Links einschalten"
-
-# Wiki search URL
-#: ../../../../inc/tpl/config.php:261
-msgid "URL de búsqueda Wiki"
-msgstr "Wiki Such-URL"
-
-# Wiki page URL
-#: ../../../../inc/tpl/config.php:271
-msgid "URL de página en Wiki"
-msgstr "Wike URL"
-
-# Account name preffix
-#: ../../../../inc/tpl/config.php:281
-msgid "Prefijo para nombre de cuenta"
-msgstr "Präfix eines Kontonamens"
-
-# LDAP
-#: ../../../../inc/tpl/config.php:294
-msgid "LDAP"
-msgstr "LDAP"
-
-# Enable LDAP
-#: ../../../../inc/tpl/config.php:301
-msgid "Habilitar LDAP"
-msgstr "LDAP verwenden"
-
-# Server
-#: ../../../../inc/tpl/config.php:312 ../../../../inc/tpl/config.php:425
-msgid "Servidor"
-msgstr "Server"
-
-# Bind User
-#: ../../../../inc/tpl/config.php:322
-msgid "Usuario de conexión"
-msgstr "Benutzer für Bind"
-
-# Bind Password
-#: ../../../../inc/tpl/config.php:332
-msgid "Clave de conexión"
-msgstr "LDAP-Passwort"
-
-# Search base
-#: ../../../../inc/tpl/config.php:342
-msgid "Base de búsqueda"
-msgstr "Suchpräfix"
-
-# Default Group
-#: ../../../../inc/tpl/config.php:362
-msgid "Grupo por Defecto"
-msgstr "Standard-Gruppe"
-
-# Default Profile
-#: ../../../../inc/tpl/config.php:371
-msgid "Perfil por Defecto"
-msgstr "Standard-Profil"
-
-# Active Directory
-#: ../../../../inc/tpl/config.php:380
-msgid "Active Directory"
-msgstr "Active Directory"
-
-# Check
-#: ../../../../inc/tpl/config.php:391
-msgid "Comprobar"
-msgstr "Überprüfung"
-
-# Check LDAP connection
-#: ../../../../inc/tpl/config.php:394
-msgid "Comprobar conexión con LDAP"
-msgstr "LDAP-Verbindung prüfen"
-
-# Module unavilable
-#: ../../../../inc/tpl/config.php:401 ../../../../inc/util.class.php:141
-msgid "Módulo no disponible"
-msgstr "Modul verfügbar"
-
-# Mail
-#: ../../../../inc/tpl/config.php:409
-msgid "Correo"
-msgstr "E-Mail"
-
-# Enable email notifications
-#: ../../../../inc/tpl/config.php:415
-msgid "Habilitar notificaciones de correo"
-msgstr "E-Mail-Benachrichtigung einschalten"
-
-# Port
-#: ../../../../inc/tpl/config.php:434
-msgid "Puerto"
-msgstr "Port"
-
-# Enable Authentication
-#: ../../../../inc/tpl/config.php:443
-msgid "Habilitar Autentificación"
-msgstr "aktivieren Sie Authentifizierung"
-
-# Security
-#: ../../../../inc/tpl/config.php:471
-msgid "Seguridad"
-msgstr "Sicherheit"
-
-# Disabled
-#: ../../../../inc/tpl/config.php:477
-msgid "Deshabilitada"
-msgstr "Inaktiv"
-
-# Recipient email address
-#: ../../../../inc/tpl/config.php:488
-msgid "Dirección de correo de envío"
-msgstr "E-Mail-Adresse des Empfängers"
-
-# Enable requests by email
-#: ../../../../inc/tpl/config.php:497
-msgid "Habilitar peticiones por correo"
-msgstr "Erlaube Anfragen per E-Mail"
-
-# Add extension
-#: ../../../../inc/tpl/config.php:541
-msgid "Añadir extensión"
-msgstr "Endung hinzufügen"
-
-# Delete extension
-#: ../../../../inc/tpl/config.php:542
-msgid "Eliminar extensión"
-msgstr "Endung löschen"
-
-# Add filter
-#: ../../../../inc/tpl/config.php:570
-msgid "Añadir filtro"
-msgstr "Filter hinzufügen"
-
-# Delete filter
-#: ../../../../inc/tpl/config.php:571
-msgid "Eliminar filtro"
-msgstr "Filter löschen"
-
-# Select Group
-#: ../../../../inc/tpl/config.php:599 ../../../../inc/tpl/users.php:234
-msgid "Seleccionar Grupo"
-msgstr "Gruppe auswählen"
-
-# Select Profile
-#: ../../../../inc/tpl/config.php:604 ../../../../inc/tpl/users.php:229
-msgid "Seleccionar Perfil"
-msgstr "Profil auswählen"
-
-# Customer name
-#: ../../../../inc/tpl/customers.php:42
-msgid "Nombre del cliente"
-msgstr "Kundenname"
-
-# Customer description
-#: ../../../../inc/tpl/customers.php:50
-msgid "Descripción del cliente"
-msgstr "Beschreibung des Kunden"
-
-# Event Log
-#: ../../../../inc/tpl/eventlog.php:37 ../../../../inc/tpl/main.php:57
-msgid "Registro de Eventos"
-msgstr "Protokol"
-
-# Date / Time
-#: ../../../../inc/tpl/eventlog.php:56
-msgid "Fecha / Hora"
-msgstr "Datum/Zeit"
-
-# Event
-#: ../../../../inc/tpl/eventlog.php:59
-msgid "Evento"
-msgstr "Ereignis"
-
-# IP
-#: ../../../../inc/tpl/eventlog.php:65
-msgid "IP"
-msgstr "IP"
-
-# Group name
-#: ../../../../inc/tpl/groups.php:41
-msgid "Nombre del grupo"
-msgstr "Gruppenname"
-
-# Group description
-#: ../../../../inc/tpl/groups.php:47
-msgid "Descripción del grupo"
-msgstr "Beschreibung der Gruppe"
-
-# Installation finished
-#: ../../../../inc/tpl/install.php:36
-msgid "Instalación finalizada"
-msgstr "Installation beendet"
-
-# Click here to access
-#: ../../../../inc/tpl/install.php:37
-msgid "Pulse aquí para acceder"
+#: ../../../../inc/SyspassImport.class.php:111
+#: ../../../../inc/SyspassImport.class.php:136
+#: ../../../../inc/SyspassImport.class.php:161
+msgid "Formato de XML inválido"
msgstr ""
-"Klicken Sie hier für den Zugriff"
-# Installation
-#: ../../../../inc/tpl/install.php:47
-msgid "Instalación "
-msgstr "Installation"
-
-# This PHP version is vulnerable to NULL Byte attack CVE-2006-7243)
-#: ../../../../inc/tpl/install.php:55
-msgid "La version de PHP es vulnerable al ataque NULL Byte (CVE-2006-7243)"
-msgstr "Die PHP-Version is verwundbar für 'NULL Byte attack (CVE-2006-7243)'"
-
-# Please update PHP version to run sysPass in a secure way
-#: ../../../../inc/tpl/install.php:56
-msgid "Actualice la versión de PHP para usar sysPass de forma segura"
+#: ../../../../inc/SyspassImport.class.php:111
+msgid "No hay categorías para importar"
msgstr ""
-"Bitte aktualisieren Sie ihre PHP Installation, um sysPass sicher betreiben "
-"zu können."
-# Cannot find random number generator.
-#: ../../../../inc/tpl/install.php:60
-msgid "No se encuentra el generador de números aleatorios."
-msgstr "Zufallszahlengenerator konnte nicht gefunden werden"
-
-# Without this function, an attacker could take your account on password reset.
-#: ../../../../inc/tpl/install.php:61
-msgid ""
-"Sin esta función un atacante puede utilizar su cuenta al resetear la clave"
+#: ../../../../inc/SyspassImport.class.php:136
+msgid "No hay clientes para importar"
msgstr ""
-"Ohne diese Funktion könnte an Angreifer Ihren Zugang oder Ihr Passwort "
-"zurücksetzen."
-# Create admin account
-#: ../../../../inc/tpl/install.php:88
-msgid "Crear cuenta de admin de sysPass"
-msgstr "Administrator-Konto anlegen"
+#: ../../../../inc/SyspassImport.class.php:161
+msgid "No hay cuentas para importar"
+msgstr ""
-# sysPass administrator's login
-#: ../../../../inc/tpl/install.php:91
-msgid "Login del usuario administrador de sysPass"
-msgstr "sysPass Administrator Anmeldung"
-
-# Show Password
-#: ../../../../inc/tpl/install.php:99 ../../../../inc/tpl/install.php:100
-#: ../../../../inc/tpl/install.php:114 ../../../../inc/tpl/install.php:115
-#: ../../../../inc/tpl/install.php:140 ../../../../inc/tpl/install.php:141
-msgid "Mostrar Clave"
-msgstr "Passwort anzeigen"
-
-# DB Configuration
-#: ../../../../inc/tpl/install.php:127
-msgid "Configurar BBDD"
-msgstr "Datenbank-Konfiguration"
-
-# User login with with database administrative rights
-#: ../../../../inc/tpl/install.php:133
-msgid "Login de usuario con permisos de administrador de MySQL"
-msgstr "Benutzer-Anmeldung mit administrativen Datenbank-Rechten"
-
-# DB Username
-#: ../../../../inc/tpl/install.php:134 ../../../../inc/tpl/install.php:135
-#: ../../../../inc/tpl/migrate.php:40
-msgid "Usuario BBDD"
-msgstr "Datenbankbenutzer"
-
-# DB Password
-#: ../../../../inc/tpl/install.php:142 ../../../../inc/tpl/install.php:143
-#: ../../../../inc/tpl/migrate.php:49
-msgid "Clave BBDD"
-msgstr "Datenbank-Passwort"
-
-# sysPass database name
-#: ../../../../inc/tpl/install.php:149
-msgid "Nombre de la base de datos para sysPass"
-msgstr "Name der sysPass-Datenbank"
-
-# DB Name
-#: ../../../../inc/tpl/install.php:150 ../../../../inc/tpl/install.php:151
-#: ../../../../inc/tpl/migrate.php:57
-msgid "Nombre BBDD"
-msgstr "Datenbankname"
-
-# sysPass database server name
-#: ../../../../inc/tpl/install.php:158
-msgid "Nombre del servidor de la base de datos de sysPass"
-msgstr "Server der sysPass-Datenbank eingeben"
-
-# DB Server
-#: ../../../../inc/tpl/install.php:159 ../../../../inc/tpl/install.php:160
-#: ../../../../inc/tpl/migrate.php:66
-msgid "Servidor BBDD"
-msgstr "Datenbank-Server"
-
-# It does not create or verify the user's permissions on the DB
-#: ../../../../inc/tpl/install.php:168
-msgid "No crea ni verifica los permisos del usuario sobre la BBDD"
-msgstr "Zugangsberechtigungen zur DB werden weder angelegt nocht überprüft"
-
-# Hosting Mode
-#: ../../../../inc/tpl/install.php:170 ../../../../inc/tpl/install.php:191
-#: ../../../../inc/tpl/install.php:194
-msgid "Modo Hosting"
-msgstr "Hosting-Modus"
-
-# Install
-#: ../../../../inc/tpl/install.php:177
-msgid "Instalar"
-msgstr "Installieren"
-
-# Login
-#: ../../../../inc/tpl/login.php:51 ../../../../inc/upgrade.class.php:50
-msgid "Acceder"
-msgstr "Anmeldung"
-
-# Lost your password?
-#: ../../../../inc/tpl/login.php:65
-msgid "¿Olvidó su clave?"
-msgstr "Passwort vergessen?"
-
-# Session finished
-#: ../../../../inc/tpl/login.php:71 ../../../../js/js.php:47
-msgid "Sesión finalizada"
-msgstr "Sitzung beendet"
-
-# Application successfully updated
-#: ../../../../inc/tpl/login.php:78
-msgid "Aplicación actualizada correctamente"
-msgstr "Anwendung erfolgreich aktualisiert"
-
-# New search interface with list or card like styles
-#: ../../../../inc/tpl/login.php:84
-#, fuzzy
-msgid "Nuevo interface de búsqueda con estilo de lista o tipo tarjeta"
-msgstr "New search interface with list or card like styles"
-
-# Users and groups selection for account access
-#: ../../../../inc/tpl/login.php:85
-#, fuzzy
-msgid "Selección de grupos y usuarios de acceso a cuentas"
-msgstr "Users and groups selection for account access"
-
-# Drag&Drop for files uploading
-#: ../../../../inc/tpl/login.php:86
-#, fuzzy
-msgid "Drag&Drop para subida de archivos"
-msgstr "Drag&Drop for files uploading"
-
-# Copy Password to Clipboard
-#: ../../../../inc/tpl/login.php:87
-#, fuzzy
-msgid "Copiar clave al portapapeles"
-msgstr "Copy password to clipboard"
-
-# Accounts history and restore points
-#: ../../../../inc/tpl/login.php:88
-#, fuzzy
-msgid "Historial de cuentas y restauración"
-msgstr "Accounts history and restore points"
-
-# New categories and customers management
-#: ../../../../inc/tpl/login.php:89
-#, fuzzy
-msgid "Nueva gestión de categorías y clientes"
-msgstr "New categories and customers management"
-
-# Reset password function for users
-#: ../../../../inc/tpl/login.php:90
-#, fuzzy
-msgid "Función de olvido de claves para usuarios"
-msgstr "Reset password function for users"
-
-# Improved Active Directory and LDAP integration
-#: ../../../../inc/tpl/login.php:91
-#, fuzzy
-msgid "Integración con Active Directory y LDAP mejorada"
-msgstr "Improved Active Directory and LDAP integration"
-
-# Email notifications with authentication
-#: ../../../../inc/tpl/login.php:92
-#, fuzzy
-msgid "Autentificación para notificaciones por correo"
-msgstr "Email notifications with authentication"
-
-# Global account searching for unprivileged users
-#: ../../../../inc/tpl/login.php:93
-#, fuzzy
-msgid "Búsqueda global de cuentas para usuarios sin permisos"
-msgstr "Global account searching for unprivileged users"
-
-# Request for Account Modification
-#: ../../../../inc/tpl/login.php:94
-#, fuzzy
-msgid "Solicitudes de modificación de cuentas para usuarios sin permisos"
-msgstr "Requests for account modification for unprivileged users"
-
-# Accounts import from KeePass, KeePassX and CSV
-#: ../../../../inc/tpl/login.php:95
-#, fuzzy
-msgid "Importación de cuentas desde KeePass, KeePassX y CSV"
-msgstr "Accounts import from KeePass, KeePassX and CSV"
-
-# Clone account function
-#: ../../../../inc/tpl/login.php:96
-#, fuzzy
-msgid "Función de copiar cuentas"
-msgstr "Clone account function"
-
-# Code optimization and faster loading
-#: ../../../../inc/tpl/login.php:97
-#, fuzzy
-msgid "Optimización del código y mayor rapidez de carga"
-msgstr "Code optimization and faster loading"
-
-# Improved security to prevent XSS and SQL injection
-#: ../../../../inc/tpl/login.php:98
-#, fuzzy
-msgid "Mejoras de seguridad en XSS e inyección SQL"
-msgstr "Improved security to prevent XSS and SQL injection"
-
-# New Features
-#: ../../../../inc/tpl/login.php:101 ../../../../inc/tpl/login.php:102
-#, fuzzy
-msgid "Nuevas Características"
-msgstr "New Features"
-
-# Change user password
-#: ../../../../inc/tpl/main.php:37
-msgid "Cambiar clave de usuario"
-msgstr "Benutzerpasswort ändern"
-
-# Logout
-#: ../../../../inc/tpl/main.php:44
-msgid "Salir"
-msgstr "Abmelden"
-
-# Search
-#: ../../../../inc/tpl/main.php:52
-msgid "Buscar"
-msgstr "Suchen"
-
-# Customer and Categories management
-#: ../../../../inc/tpl/main.php:55
-msgid "Gestión de Clientes y Categorías"
-msgstr "Kunden- und Kategorienverwaltung"
-
-# Last Change
-#: ../../../../inc/tpl/masterpass.php:43
-#: ../../../../inc/tpl/masterpass.php:128
-msgid "Último cambio"
-msgstr "Letzte Änderung"
-
-# Current Master Password
-#: ../../../../inc/tpl/masterpass.php:52
-msgid "Clave Maestra actual"
-msgstr "Aktuelles Master-Passwort"
-
-# New Master Password
-#: ../../../../inc/tpl/masterpass.php:60
-msgid "Nueva Clave Maestra"
-msgstr "Neues Master-Passwort"
-
-# New Master Password (repeat)
-#: ../../../../inc/tpl/masterpass.php:69
-msgid "Nueva Clave Maestra (repetir)"
-msgstr "Neues Master-Passwort (Wiederholung)"
-
-# Don't modify accounts
-#: ../../../../inc/tpl/masterpass.php:77
-msgid "No modificar cuentas"
-msgstr "Konten nicht verändern"
-
-# Confirm Change
-#: ../../../../inc/tpl/masterpass.php:87
-msgid "Confirmar cambio"
-msgstr "Änderung bestätigen"
-
-# Warning
-#: ../../../../inc/tpl/masterpass.php:90 ../../../../inc/tpl/masterpass.php:93
-#: ../../../../inc/tpl/masterpass.php:96 ../../../../inc/tpl/migrate.php:78
-msgid "Atención"
-msgstr "Warnung"
-
-# You should save the new password on a secure place
-#: ../../../../inc/tpl/masterpass.php:91
-msgid "Guarde la nueva clave en un lugar seguro."
-msgstr "Sie sollten das neue Passwort an einem sicheren Ort aufbewahren"
-
-# All accounts passwords will be encrypted again.
-#: ../../../../inc/tpl/masterpass.php:94
-msgid "Se volverán a encriptar las claves de todas las cuentas."
-msgstr "Alle Passwörter der Konten werden neu verschlüsselt."
-
-# All users must re-enter the new master password.
-#: ../../../../inc/tpl/masterpass.php:97
-msgid "Los usuarios deberán de introducir la nueva clave maestra."
-msgstr "All Benutzer müssen das neue Master-Passwort eingeben."
-
-# Temporary Password
-#: ../../../../inc/tpl/masterpass.php:121
-#, fuzzy
-msgid "Clave Temporal"
-msgstr "Temporary Password"
-
-# Not generated
-#: ../../../../inc/tpl/masterpass.php:135
-#: ../../../../inc/tpl/masterpass.php:149
-#, fuzzy
-msgid "No generada"
-msgstr "Not generated"
-
-# Valid until
-#: ../../../../inc/tpl/masterpass.php:142
-#, fuzzy
-msgid "Válido hasta"
-msgstr "Valid until"
-
-# Generate
-#: ../../../../inc/tpl/masterpass.php:164
-#, fuzzy
-msgid "Generar"
-msgstr "Generate"
-
-# phpPMS Import
-#: ../../../../inc/tpl/migrate.php:33
-msgid "Importar phpPMS"
-msgstr "phpPMS Import"
-
-# Confirm
-#: ../../../../inc/tpl/migrate.php:75
-msgid "Confirmar"
-msgstr "Bestätigen"
-
-# Current data will be removed (except current user)
-#: ../../../../inc/tpl/migrate.php:79
-msgid "Los datos actuales serán borrados (excepto el usuario actual)"
-msgstr "Daten werden gelöscht (mit Ausnahme des aktuellen Benutzers)"
-
-# Start
-#: ../../../../inc/tpl/migrate.php:97
-msgid "Iniciar"
-msgstr "Start"
-
-# CSV Import
-#: ../../../../inc/tpl/migrate.php:103
-msgid "Importar CSV/XML"
-msgstr "CSV/XML Import"
-
-# Drop files here or click to select
-#: ../../../../inc/tpl/migrate.php:117
-msgid "Soltar archivo aquí o click para seleccionar"
-msgstr "Dateien hier fallen lassen oder zum selektieren anklicken"
-
-# Request Password Change
-#: ../../../../inc/tpl/passreset.php:47
-msgid "Solicitud de Cambio de Clave"
-msgstr "Passwortänderung initiiert."
-
-# User login
-#: ../../../../inc/tpl/passreset.php:50
-msgid "Login del Usuario"
-msgstr "Benutzer-Anmeldung"
-
-# User Email
-#: ../../../../inc/tpl/passreset.php:55
-msgid "Email del Usuario"
-msgstr "Benutzer-E-Mail"
-
-# Email
-#: ../../../../inc/tpl/passreset.php:56 ../../../../inc/tpl/users.php:116
-msgid "Email"
-msgstr "E-Mail"
-
-# New Password
-#: ../../../../inc/tpl/passreset.php:61
-msgid "Nueva Clave"
-msgstr "Neues Passwort"
-
-# New Password (Verify)
-#: ../../../../inc/tpl/passreset.php:69
-msgid "Nueva Clave (Verificar)"
-msgstr "Neues Passwort (Wіederholung)"
-
-# Password (Verify)
-#: ../../../../inc/tpl/passreset.php:70
-msgid "Clave (Verificar)"
-msgstr "Passwort (Wiederholung)"
-
-# Back
-#: ../../../../inc/tpl/passreset.php:83
-msgid "Volver"
-msgstr "Zurück"
-
-# Go back to login
-#: ../../../../inc/tpl/passreset.php:83
-msgid "Volver a iniciar sesión"
-msgstr "Zurück zur Anmeldung"
-
-# Request
-#: ../../../../inc/tpl/passreset.php:85
-msgid "Solicitar"
-msgstr "Anfrage"
-
-# Request password change
-#: ../../../../inc/tpl/passreset.php:86
-msgid "Solicitar cambio de clave"
-msgstr "Starte Passwortänderung"
-
-# Change
-#: ../../../../inc/tpl/passreset.php:88
-msgid "Cambiar"
-msgstr "Ändern"
-
-# Change password
-#: ../../../../inc/tpl/passreset.php:89
-msgid "Cambiar Clave"
-msgstr "Passwort ändern"
-
-# Profile name
-#: ../../../../inc/tpl/profiles.php:41
-msgid "Nombre del perfil"
-msgstr "Profilname"
-
-# View account details
-#: ../../../../inc/tpl/profiles.php:48
-msgid "Ver detalles de cuenta"
-msgstr "Kontodetails anzeigen"
-
-# View
-#: ../../../../inc/tpl/profiles.php:48
-msgid "Ver"
-msgstr "Ansehen"
-
-# View account password
-#: ../../../../inc/tpl/profiles.php:50
-msgid "Ver clave de cuenta"
-msgstr "Passwort anzeigen"
-
-# View account history
-#: ../../../../inc/tpl/profiles.php:53
-msgid "Ver historial de cuenta"
-msgstr "Konto-Historie anzeigen"
-
-# View History
-#: ../../../../inc/tpl/profiles.php:53
-msgid "Ver Historial"
-msgstr "Protokol ansehen"
-
-# Edit account
-#: ../../../../inc/tpl/profiles.php:55
-msgid "Editar cuenta"
-msgstr "Konto ändern"
-
-# Edit
-#: ../../../../inc/tpl/profiles.php:55
-msgid "Editar"
-msgstr "Ändern"
-
-# Edit account password
-#: ../../../../inc/tpl/profiles.php:58
-msgid "Editar clave de cuenta"
-msgstr "Passwort des Kontos ändern"
-
-# Edit Password
-#: ../../../../inc/tpl/profiles.php:58
-msgid "Editar Clave"
-msgstr "Passwort ändern"
-
-# Add new account
-#: ../../../../inc/tpl/profiles.php:60
-msgid "Añadir nueva cuenta"
-msgstr "Konto hinzufügen"
-
-# Add
-#: ../../../../inc/tpl/profiles.php:60
-msgid "Añadir"
-msgstr "Hinzufügen"
-
-# Delete account
-#: ../../../../inc/tpl/profiles.php:63
-msgid "Borrar cuenta"
-msgstr "Konto löschen"
-
-# Delete
-#: ../../../../inc/tpl/profiles.php:63
-msgid "Borrar"
-msgstr "Löschen"
-
-# View account files
-#: ../../../../inc/tpl/profiles.php:65
-msgid "Ver archivos de cuenta"
-msgstr "Dateien des Kontos anzeigen"
-
-# General configuration
-#: ../../../../inc/tpl/profiles.php:74
-msgid "Configuración general"
-msgstr "Allgemeine Konfiguration"
-
-# General
-#: ../../../../inc/tpl/profiles.php:74
-msgid "General"
-msgstr "Allgemein"
-
-# Change master password
-#: ../../../../inc/tpl/profiles.php:76
-msgid "Cambiar clave maestra"
-msgstr "Master-Passwort ändern"
-
-# Make backup
-#: ../../../../inc/tpl/profiles.php:79
-msgid "Realizar copia de seguridad"
-msgstr "Backup erstellen"
-
-# Backup
-#: ../../../../inc/tpl/profiles.php:79
-msgid "Backup"
-msgstr "Sicherung"
-
-# Management
-#: ../../../../inc/tpl/profiles.php:85
-msgid "Gestión"
-msgstr "Verwaltung"
-
-# Users management
-#: ../../../../inc/tpl/profiles.php:88
-msgid "Gestión de usuarios"
-msgstr "Benutzerverwaltung"
-
-# Groups management
-#: ../../../../inc/tpl/profiles.php:90
-msgid "Gestión de grupos"
-msgstr "Gruppenverwaltung"
-
-# Profiles management
-#: ../../../../inc/tpl/profiles.php:93
-msgid "Gestión de perfiles"
-msgstr "Profilverwaltung"
-
-# Profiles
-#: ../../../../inc/tpl/profiles.php:93
-msgid "Perfiles"
-msgstr "Profile"
-
-# Categories management
-#: ../../../../inc/tpl/profiles.php:96
-msgid "Gestión de categorías"
-msgstr "Kategorienverwaltung"
-
-# Categories
-#: ../../../../inc/tpl/profiles.php:96
-msgid "Categorías"
-msgstr "Kategorien"
-
-# Customers Management
-#: ../../../../inc/tpl/profiles.php:101
-msgid "Gestión de clientes"
-msgstr "Kundenverwaltung"
-
-# Customers
-#: ../../../../inc/tpl/profiles.php:101
-msgid "Clientes"
-msgstr "Kunden"
-
-# Others
-#: ../../../../inc/tpl/profiles.php:108
-msgid "Otros"
-msgstr "Andere"
-
-# View event log
-#: ../../../../inc/tpl/profiles.php:111
-msgid "Ver log de eventos"
-msgstr "Protokol anzeigen"
-
-# Event Log
-#: ../../../../inc/tpl/profiles.php:111
-msgid "Log de Eventos"
-msgstr "Protokol"
-
-# Request Account Modification
-#: ../../../../inc/tpl/request.php:33
-msgid "Solicitar Modificación de Cuenta"
-msgstr "Kontoänderung initiiert"
-
-# Request
-#: ../../../../inc/tpl/request.php:57
-msgid "Petición"
-msgstr "Anfrage"
-
-# Request description
-#: ../../../../inc/tpl/request.php:60
-msgid "Descripción de la petición"
-msgstr "Beschreibung der Anfrage"
-
-# Send
-#: ../../../../inc/tpl/request.php:76
-msgid "Enviar"
-msgstr "Senden"
-
-# Clear
-#: ../../../../inc/tpl/search.php:59
-msgid "Limpiar"
-msgstr "Löschen"
-
-# Text to search
-#: ../../../../inc/tpl/search.php:63
-msgid "Texto a buscar"
-msgstr "Suchbegriff"
-
-# Global search
-#: ../../../../inc/tpl/search.php:68
-msgid "Búsqueda global"
-msgstr "Globale Suche"
-
-# Accounts Per Page
-#: ../../../../inc/tpl/search.php:82
-msgid "CPP"
-msgstr "KPS"
-
-# Accounts per page
-#: ../../../../inc/tpl/search.php:82
-msgid "Cuentas por página"
-msgstr "Konten pro Seite"
-
-# DB Update
-#: ../../../../inc/tpl/upgrade.php:42
-msgid "Actualización de BBDD"
-msgstr "Datenbank-Update"
-
-# Enter Security Code
-#: ../../../../inc/tpl/upgrade.php:44
-msgid "Introducir Código de Seguridad"
-msgstr "Sicherheitscode eingeben"
-
-# Security Code
-#: ../../../../inc/tpl/upgrade.php:45
-msgid "Código de Seguridad"
-msgstr "Sicherheitscode"
-
-# Start Update
-#: ../../../../inc/tpl/upgrade.php:55
-msgid "Iniciar Actualización"
-msgstr "Aktualisierung starten"
-
-# Full username
-#: ../../../../inc/tpl/users.php:72
-msgid "Nombre de usuario completo"
-msgstr "Volständiger Benutzername"
-
-# Session login
-#: ../../../../inc/tpl/users.php:88
-msgid "Login de inicio de sesión"
-msgstr "Sitzungs-Anmeldung"
-
-# Email address
-#: ../../../../inc/tpl/users.php:122
-msgid "Dirección de correo"
-msgstr "E-Mail-Adresse"
-
-# Options
-#: ../../../../inc/tpl/users.php:161
-msgid "Opciones"
-msgstr "Optionen"
-
-# Application administrator
-#: ../../../../inc/tpl/users.php:165
-msgid "Administrador de la aplicación"
-msgstr "Anwendungs-Administrator"
-
-# Application Admin
-#: ../../../../inc/tpl/users.php:165
-msgid "Admin. Aplicación"
-msgstr "Anwendungs-Administrator"
-
-# Accounts administrator
-#: ../../../../inc/tpl/users.php:167
-msgid "Administrador de cuentas"
-msgstr "Anwendungs-Administrator"
-
-# Accounts Admin
-#: ../../../../inc/tpl/users.php:167
-msgid "Admin. Cuentas"
-msgstr "Konto-Administrator"
-
-# Force password change
-#: ../../../../inc/tpl/users.php:175
-msgid "Forzar cambio de clave"
-msgstr "Erzwinge Passwortänderung"
-
-# Entries
-#: ../../../../inc/tpl/users.php:183
-msgid "Entradas"
-msgstr "Einträge"
-
-# Last Access
-#: ../../../../inc/tpl/users.php:188
-msgid "Último Acceso"
-msgstr "Letzter Zugriff"
-
-# Master Password Date
-#: ../../../../inc/tpl/users.php:198
-msgid "Fecha Clave Maestra"
-msgstr "Datum des Master-Passworts"
-
-# Error on updating database
-#: ../../../../inc/upgrade.class.php:49
+#: ../../../../inc/Upgrade.class.php:51
msgid "Error al aplicar la actualización de la Base de Datos"
msgstr "Fehler beim Ändern der Datenbank"
-# Please, check the event log for more details
-#: ../../../../inc/upgrade.class.php:50
+#: ../../../../inc/Upgrade.class.php:52 ../../../../inc/Upgrade.class.php:58
msgid "Compruebe el registro de eventos para más detalles"
msgstr "Bitte schauen Sie in das Protokol für weitere Details"
-# Update DB
-#: ../../../../inc/upgrade.class.php:66
+#: ../../../../inc/Upgrade.class.php:52 ../../../../inc/Upgrade.class.php:58
+#: ../../../../inc/themes/classic/login.inc:32
+#: ../../../../inc/themes/material-blue/2fa.inc:26
+#: ../../../../inc/themes/material-blue/login.inc:64
+msgid "Acceder"
+msgstr "Anmeldung"
+
+#: ../../../../inc/Upgrade.class.php:57
+msgid "Error al aplicar la actualización auxiliar"
+msgstr ""
+
+#: ../../../../inc/Upgrade.class.php:74
msgid "Actualizar BBDD"
msgstr "DB aktualisieren"
-# Database update not needed.
-#: ../../../../inc/upgrade.class.php:97
+#: ../../../../inc/Upgrade.class.php:121
msgid "No es necesario actualizar la Base de Datos."
msgstr "Keine Datenbankaktualisierung notwendig"
-# Error on updating database.
-#: ../../../../inc/upgrade.class.php:103
+#: ../../../../inc/Upgrade.class.php:129
msgid "Error al aplicar la actualización de la Base de Datos."
msgstr "Fehler beim Ändern der Datenbank"
-# Database updating was done successfully.
-#: ../../../../inc/upgrade.class.php:110
+#: ../../../../inc/Upgrade.class.php:138
msgid "Actualización de la Base de Datos realizada correctamente."
msgstr "Aktualisierung der Datenbank war erfolgreich."
-# Update Configuration
-#: ../../../../inc/upgrade.class.php:185
+#: ../../../../inc/Upgrade.class.php:215
msgid "Actualizar Configuración"
msgstr "Konfiguration aktualisieren"
-# Configuration updating successfully done.
-#: ../../../../inc/upgrade.class.php:186
+#: ../../../../inc/Upgrade.class.php:215
msgid "Actualización de la Configuración realizada correctamente."
msgstr "Configuration Aktualisierung erfolgreich durchgeführt."
-# Account Activation
-#: ../../../../inc/users.class.php:774
-msgid "Activación Cuenta"
-msgstr "Kontoaktivierung"
-
-# Your account activation is pending.
-#: ../../../../inc/users.class.php:775
-msgid "Su cuenta está pendiente de activación."
-msgstr "Ihre Kontoaktivierung ist anhängig"
-
-# You will receive a confirmation email in short.
-#: ../../../../inc/users.class.php:776
-msgid "En breve recibirá un email de confirmación."
-msgstr "Sie bekommen in Kürze eine Bestätigungs-Mail"
-
-# Could not perform the password change request.
-#: ../../../../inc/users.class.php:821 ../../../../inc/users.class.php:863
+#: ../../../../inc/UserBase.class.php:386
+#: ../../../../inc/UserBase.class.php:530
msgid "No se pudo realizar la petición de cambio de clave."
msgstr "Die Passwortänderung Anfrage konnte nicht ausgeführt werden."
-# Edit User
-#: ../../../../inc/users.class.php:858
+#: ../../../../inc/UserBase.class.php:525
msgid "Modificar Usuario"
msgstr "Benutzer ändern"
-# Required PHP version >= 5.1
-#: ../../../../inc/util.class.php:119
-msgid "Versión de PHP requerida >= 5.1"
-msgstr "Erforderliche PHP-Version >= 5.1"
+#: ../../../../inc/UserBase.class.php:592
+#: ../../../../web/UsersMgmtC.class.php:150
+msgid "Eliminar Usuario"
+msgstr "Benutzer löschen"
-# Please update PHP version to run sysPass in a secure way
-#: ../../../../inc/util.class.php:120
+#: ../../../../inc/UserLdap.class.php:78
+msgid "Activación Cuenta"
+msgstr "Kontoaktivierung"
+
+#: ../../../../inc/UserLdap.class.php:79
+msgid "Su cuenta está pendiente de activación."
+msgstr "Ihre Kontoaktivierung ist anhängig"
+
+#: ../../../../inc/UserLdap.class.php:80
+msgid "En breve recibirá un email de confirmación."
+msgstr "Sie bekommen in Kürze eine Bestätigungs-Mail"
+
+#: ../../../../inc/UserLdap.class.php:86
+msgid "Nuevo usuario de LDAP"
+msgstr "Neuer LDAP Benutzer"
+
+#: ../../../../inc/UserUtil.class.php:705
+msgid "Migrar Grupos"
+msgstr "Gurppen migrieren"
+
+#: ../../../../inc/UserUtil.class.php:705
+msgid "Error al migrar grupo del usuario"
+msgstr ""
+
+#: ../../../../inc/Util.class.php:123
+msgid "Versión de PHP requerida >= "
+msgstr ""
+
+#: ../../../../inc/Util.class.php:124
msgid ""
"Actualice la versión de PHP para que la aplicación funcione correctamente"
msgstr ""
"Bitte aktualisieren Sie ihre PHP Installation, um sysPass sicher betreiben "
"zu können."
-# Without this module the application couldn't run correctly
-#: ../../../../inc/util.class.php:142
+#: ../../../../inc/Util.class.php:160
+#: ../../../../inc/themes/classic/ldap.inc:212
+#: ../../../../inc/themes/material-blue/ldap.inc:238
+msgid "Módulo no disponible"
+msgstr "Modul verfügbar"
+
+#: ../../../../inc/Util.class.php:161
msgid "Sin este módulo la aplicación puede no funcionar correctamente."
msgstr "Ohne dieses Modul wird die Anwendung nicht korrekt funktionieren."
-# Query error
-#: ../../../../js/js.php:45
+#: ../../../../inc/XmlExport.class.php:124
+#, fuzzy
+msgid "Exportar XML"
+msgstr "XML importieren"
+
+#: ../../../../inc/XmlExport.class.php:409
+msgid "Error al crear el archivo XML"
+msgstr ""
+
+#: ../../../../inc/XmlImport.class.php:63
+msgid "Formato detectado"
+msgstr ""
+
+#: ../../../../inc/XmlImportBase.class.php:75
+msgid "No es posible procesar el archivo XML"
+msgstr "XML-Datei kann nicht verarbeitet werden"
+
+#: ../../../../inc/XmlImportBase.class.php:103
+msgid "Archivo XML no soportado"
+msgstr "XML-Datei wird nicht unterstützt"
+
+#: ../../../../inc/XmlImportBase.class.php:104
+msgid "No es posible detectar la aplicación que exportó los datos"
+msgstr ""
+"Die Anwendung von der die Daten exportiert wurden, kann nicht festgestellt "
+"werden"
+
+#: ../../../../js/strings.js.php:27
msgid "Error en la consulta"
msgstr "Abfrage-Fehler"
-# An error has occured
-#: ../../../../js/js.php:46
+#: ../../../../js/strings.js.php:28
msgid "Ha ocurrido un error"
msgstr "Ein Fehler ist aufgetreten"
-# Delete account?
-#: ../../../../js/js.php:48
+#: ../../../../js/strings.js.php:29
+#: ../../../../inc/themes/classic/login.inc:52
+#: ../../../../inc/themes/material-blue/login.inc:77
+msgid "Sesión finalizada"
+msgstr "Sitzung beendet"
+
+#: ../../../../js/strings.js.php:30
msgid "Borrar la cuenta?"
msgstr "Account löschen?"
-# Delete user?
-#: ../../../../js/js.php:49
+#: ../../../../js/strings.js.php:31
msgid "Borrar el usuario?"
msgstr "Benutzer löschen?"
-# Please save the configuration in order to take effect
-#: ../../../../js/js.php:50
+#: ../../../../js/strings.js.php:32
msgid "Guarde la configuración para que sea efectiva"
msgstr "Bitte speichern Sie die Konfiguration, um wirksam"
-# Generated Password
-#: ../../../../js/js.php:51
+#: ../../../../js/strings.js.php:33
msgid "Clave Generada"
msgstr "Generiertes Passwort"
-# High level
-#: ../../../../js/js.php:52
+#: ../../../../js/strings.js.php:34
msgid "Nivel alto"
msgstr "Hohe"
-# Average level
-#: ../../../../js/js.php:53
+#: ../../../../js/strings.js.php:35
msgid "Nivel medio"
msgstr "Mittelstufe"
-# Low level
-#: ../../../../js/js.php:54
+#: ../../../../js/strings.js.php:36
msgid "Nivel bajo"
msgstr "Low-Pegel"
-# Very high level
-#: ../../../../js/js.php:55
+#: ../../../../js/strings.js.php:37
msgid "Nivel muy alto"
msgstr "Sehr hohes Niveau"
-# You should use at least 8 characters
-#: ../../../../js/js.php:56
+#: ../../../../js/strings.js.php:38
msgid "Utilizar al menos 8 caracteres"
msgstr "Verwenden Sie mindestens 8 Zeichen"
-# Delete item?
-#: ../../../../js/js.php:57
+#: ../../../../js/strings.js.php:39
msgid "Borrar elemento?"
msgstr "Artikel löschen?"
-# Page not found
-#: ../../../../js/js.php:58
+#: ../../../../js/strings.js.php:40
msgid "Página no encontrada"
msgstr "Seite nicht gefunden"
-# File not supported for preview
-#: ../../../../js/js.php:59
+#: ../../../../js/strings.js.php:41
msgid "Archivo no soportado para visualizar"
msgstr "Die Datei, nicht unterstützt"
-# Delete file?
-#: ../../../../js/js.php:60
+#: ../../../../js/strings.js.php:42
msgid "Eliminar archivo?"
msgstr "Datei löschen?"
-# Your browser does not support HTML 5 file uploads
-#: ../../../../js/js.php:61
+#: ../../../../js/strings.js.php:43
msgid "Su navegador no soporta subir archivos con HTML5"
msgstr "Ihr Browser unterstützt keine Hochladen von Dateien in HTML5"
-# Too many files
-#: ../../../../js/js.php:62
+#: ../../../../js/strings.js.php:44
msgid "Demasiados archivos"
msgstr "Zu viele Dateien"
-# Unable to save file. Max file size:
-#: ../../../../js/js.php:63
-msgid "No es posible guardar el archivo. Tamaño máximo:"
-msgstr "Datei konnte nicht gespeichert Max. Dateigröße.:"
+#: ../../../../js/strings.js.php:45
+#, php-format
+msgid "No es posible guardar el archivo.%sTamaño máximo:"
+msgstr ""
-# Extension not allowed
-#: ../../../../js/js.php:64
+#: ../../../../js/strings.js.php:46
msgid "Extensión no permitida"
msgstr "Erweiterung nicht erlaubt"
-# Clear event log?
-#: ../../../../js/js.php:65
+#: ../../../../js/strings.js.php:47
msgid "Vaciar el registro de eventos?"
msgstr "Klar Ereignisprotokoll?"
-# No group found with that name
-#~ msgid "No se encontró el grupo con ese nombre"
-#~ msgstr "Keine Gruppe mit dem Namen gefunden"
+#: ../../../../js/strings.js.php:48
+msgid "Seleccionar Grupo"
+msgstr "Gruppe auswählen"
-# Unable to create backup directory
-#~ msgid "No es posible crear el directorio de backups"
-#~ msgstr "Verzeichnis für Backups kann nicht angelegt werden"
+#: ../../../../js/strings.js.php:49
+msgid "Seleccionar Usuario"
+msgstr "Benutzer auswählen"
-# Database Backup
-#~ msgid "Copia BBDD"
-#~ msgstr "Datenbank-Backup"
+#: ../../../../js/strings.js.php:50
+msgid "Seleccionar Perfil"
+msgstr "Profil auswählen"
-# sysPass administrator's password
+#: ../../../../js/strings.js.php:51
+msgid "Seleccionar Cliente"
+msgstr "Kunde auswählen"
+
+#: ../../../../js/strings.js.php:52
+msgid "Seleccionar Categoría"
+msgstr "Kategorie auswählen"
+
+#: ../../../../js/strings.js.php:53
+msgid "Sin resultados"
+msgstr "Kein Ergebnis"
+
+#: ../../../../js/strings.js.php:54
+msgid "Opciones de clave"
+msgstr "Password Optionen"
+
+#: ../../../../js/strings.js.php:55
+msgid "Generar clave aleatoria"
+msgstr "Zufälliges Passwort erzeugen"
+
+#: ../../../../js/strings.js.php:56
+msgid "Complejidad"
+msgstr ""
+
+#: ../../../../js/strings.js.php:57
+msgid "Reset"
+msgstr ""
+
+#: ../../../../js/strings.js.php:58
+#: ../../../../inc/themes/classic/editpass.inc:33
+msgid "Nivel de fortaleza de la clave"
+msgstr "Passwortstärke"
+
+#: ../../../../js/strings.js.php:59
+msgid "Mostrar Clave"
+msgstr "Passwort anzeigen"
+
+#: ../../../../js/strings.js.php:60
+msgid "Copiar Usuario"
+msgstr "Benutzername kopieren"
+
+#: ../../../../js/strings.js.php:61
+msgid "Copiar Clave"
+msgstr "Passwort kopieren"
+
+#: ../../../../js/strings.js.php:62
+msgid "Incluir Números"
+msgstr ""
+
+#: ../../../../js/strings.js.php:63
+msgid "Incluir Mayúsculas"
+msgstr ""
+
+#: ../../../../js/strings.js.php:64
+msgid "Incluir Símbolos"
+msgstr ""
+
+#: ../../../../js/strings.js.php:65
+msgid "Longitud"
+msgstr "Länge"
+
+#: ../../../../js/strings.js.php:66
+msgid "Seleccionar Acción"
+msgstr "Aktion auswählen"
+
+#: ../../../../js/strings.js.php:67
+#: ../../../../inc/themes/classic/account.inc:133
+#: ../../../../inc/themes/classic/account.inc:164
+#: ../../../../inc/themes/classic/account.inc:449
+#: ../../../../inc/themes/classic/install.inc:99
+msgid "SI"
+msgstr "Ja"
+
+#: ../../../../js/strings.js.php:68
+#: ../../../../inc/themes/classic/account.inc:133
+#: ../../../../inc/themes/classic/account.inc:164
+#: ../../../../inc/themes/classic/account.inc:447
+#: ../../../../inc/themes/classic/encryption.inc:61
+#: ../../../../inc/themes/classic/encryption.inc:80
+#: ../../../../inc/themes/classic/import.inc:70
+#: ../../../../inc/themes/classic/install.inc:99
+#: ../../../../inc/themes/classic/tokens.inc:36
+msgid "NO"
+msgstr "Nein"
+
+#: ../../../../js/strings.js.php:69
+msgid "Aceptar"
+msgstr ""
+
+#: ../../../../js/strings.js.php:70
+msgid "Cancelar"
+msgstr ""
+
+#: ../../../../web/AccountC.class.php:380
+#: ../../../../web/AccountC.class.php:411
+#: ../../../../inc/themes/classic/search.inc:36
+#: ../../../../inc/themes/classic/search.inc:95
+#: ../../../../inc/themes/material-blue/search.inc:41
+#: ../../../../inc/themes/material-blue/search.inc:108
+msgid "Detalles de Cuenta"
+msgstr "Kontodetails"
+
+#: ../../../../web/AccountC.class.php:468
+#: ../../../../inc/themes/classic/account.inc:394
+#: ../../../../inc/themes/material-blue/account.inc:430
+msgid "Modificar Clave de Cuenta"
+msgstr "Konto-Passwort ändern"
+
+#: ../../../../web/AccountsMgmtC.class.php:79
+#: ../../../../web/AccountsMgmtC.class.php:138
+#: ../../../../web/AccountsMgmtC.class.php:266
+#: ../../../../web/SearchC.class.php:277
+#: ../../../../web/UsersMgmtC.class.php:87
+#: ../../../../web/UsersMgmtC.class.php:187
+#: ../../../../web/UsersMgmtC.class.php:245
+#: ../../../../inc/themes/classic/account.inc:11
+#: ../../../../inc/themes/classic/categories.inc:8
+#: ../../../../inc/themes/classic/customers.inc:8
+#: ../../../../inc/themes/classic/customfields.inc:9
+#: ../../../../inc/themes/classic/editpass.inc:8
+#: ../../../../inc/themes/classic/groups.inc:8
+#: ../../../../inc/themes/classic/info.inc:25
+#: ../../../../inc/themes/classic/profiles.inc:8
+#: ../../../../inc/themes/classic/request.inc:6
+#: ../../../../inc/themes/classic/search.inc:34
+#: ../../../../inc/themes/classic/users.inc:8
+#: ../../../../inc/themes/material-blue/account.inc:15
+#: ../../../../inc/themes/material-blue/categories.inc:8
+#: ../../../../inc/themes/material-blue/customers.inc:8
+#: ../../../../inc/themes/material-blue/customfields.inc:8
+#: ../../../../inc/themes/material-blue/editpass.inc:9
+#: ../../../../inc/themes/material-blue/groups.inc:8
+#: ../../../../inc/themes/material-blue/info.inc:25
+#: ../../../../inc/themes/material-blue/profiles.inc:8
+#: ../../../../inc/themes/material-blue/request.inc:6
+#: ../../../../inc/themes/material-blue/search.inc:39
+#: ../../../../inc/themes/material-blue/users.inc:8
+msgid "Nombre"
+msgstr "Name"
+
+#: ../../../../web/AccountsMgmtC.class.php:115
+msgid "Gestión de Categorías"
+msgstr "Kategorienverwaltung"
+
+#: ../../../../web/AccountsMgmtC.class.php:172
+msgid "Gestión de Clientes"
+msgstr "Kundenverwaltung"
+
+#: ../../../../web/AccountsMgmtC.class.php:266
+#: ../../../../inc/themes/classic/customfields.inc:27
+#: ../../../../inc/themes/material-blue/customfields.inc:30
+msgid "Módulo"
+msgstr "Module"
+
+#: ../../../../web/AccountsMgmtC.class.php:287
+msgid "Eliminar Campo"
+msgstr "Feld löschen"
+
+#: ../../../../web/AccountsMgmtC.class.php:300
+#: ../../../../inc/themes/classic/profiles.inc:107
+#: ../../../../inc/themes/material-blue/profiles.inc:124
+msgid "Campos Personalizados"
+msgstr ""
+
+#: ../../../../web/ConfigC.class.php:185
+msgid "Último backup"
+msgstr "Letztes Backup"
+
+#: ../../../../web/ConfigC.class.php:185
+msgid "No se encontraron backups"
+msgstr "Es existieren keine Backups"
+
+#: ../../../../web/ConfigC.class.php:192
+msgid "Última exportación"
+msgstr "letzter Export"
+
+#: ../../../../web/ConfigC.class.php:192
+msgid "No se encontró archivo de exportación"
+msgstr ""
+
+#: ../../../../web/ConfigC.class.php:237
+msgid "Información"
+msgstr "Information"
+
+#: ../../../../web/EventlogC.class.php:93
+msgid "Registro de eventos vaciado"
+msgstr "Protokol gelöscht"
+
+#: ../../../../web/EventlogC.class.php:95
+msgid "Error al vaciar el registro de eventos"
+msgstr "Fehler beim Löschen des Protokols"
+
+#: ../../../../web/MainC.class.php:137
+#: ../../../../web/UsersMgmtC.class.php:100
+msgid "Admin Aplicación"
+msgstr "Anwendungs-Administrator"
+
+#: ../../../../web/MainC.class.php:155
+msgid "Buscar"
+msgstr "Suchen"
+
+#: ../../../../web/MainC.class.php:167
+#: ../../../../web/UsersMgmtC.class.php:163
+msgid "Gestión de Usuarios"
+msgstr "Benutzerverwaltung"
+
+#: ../../../../web/MainC.class.php:173
+msgid "Gestión de Clientes y Categorías"
+msgstr "Kunden- und Kategorienverwaltung"
+
+#: ../../../../web/MainC.class.php:185
+#: ../../../../inc/themes/classic/eventlog.inc:4
+#: ../../../../inc/themes/material-blue/eventlog.inc:3
+msgid "Registro de Eventos"
+msgstr "Protokol"
+
+#: ../../../../web/MainC.class.php:205
+msgid "Nuevo estilo visual basado en Material Design Lite by Google"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:206
+msgid "Usuarios en múltiples grupos"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:207
+msgid "Previsualización de imágenes"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:208
+msgid "Mostrar claves como imágenes"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:209
+msgid "Campos personalizados"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:210
+msgid "API de consultas"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:211
+#: ../../../../inc/themes/classic/2fa.inc:9
+#: ../../../../inc/themes/material-blue/2fa.inc:9
+#: ../../../../inc/themes/material-blue/security.inc:11
+msgid "Autentificación en 2 pasos"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:212
+msgid "Complejidad de generador de claves"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:213
+msgid "Consultas especiales"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:214
+msgid "Exportación a XML"
+msgstr "XML Export"
+
+#: ../../../../web/MainC.class.php:215
+msgid "Clave maestra temporal"
+msgstr "temporäres Master-Passwort"
+
+#: ../../../../web/MainC.class.php:216
+msgid "Importación de cuentas desde sysPass, KeePass, KeePassX y CSV"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:217
+msgid "Optimización del código y mayor rapidez de carga"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:218
+msgid "Mejoras de seguridad en XSS e inyección SQL"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:260
+msgid "La version de PHP es vulnerable al ataque NULL Byte (CVE-2006-7243)"
+msgstr "Die PHP-Version is verwundbar für 'NULL Byte attack (CVE-2006-7243)'"
+
+#: ../../../../web/MainC.class.php:261
+msgid "Actualice la versión de PHP para usar sysPass de forma segura"
+msgstr ""
+"Bitte aktualisieren Sie ihre PHP Installation, um sysPass sicher betreiben "
+"zu können."
+
+#: ../../../../web/MainC.class.php:268
+msgid "No se encuentra el generador de números aleatorios."
+msgstr "Zufallszahlengenerator konnte nicht gefunden werden"
+
+#: ../../../../web/MainC.class.php:269
+msgid ""
+"Sin esta función un atacante puede utilizar su cuenta al resetear la clave"
+msgstr ""
+"Ohne diese Funktion könnte an Angreifer Ihren Zugang oder Ihr Passwort "
+"zurücksetzen."
+
+#: ../../../../web/MainC.class.php:288
+msgid "Instalación finalizada"
+msgstr "Installation beendet"
+
+#: ../../../../web/MainC.class.php:289
+msgid "Pulse aquí para acceder"
+msgstr ""
+"Klicken Sie hier für den Zugriff"
+
+#: ../../../../web/MainC.class.php:384
+msgid "Descargar nueva versión"
+msgstr "Neu Version herunterladen"
+
+#: ../../../../web/MainC.class.php:395
+msgid "Avisos de sysPass"
+msgstr ""
+
+#: ../../../../web/SearchC.class.php:270
+msgid "Ordenar por Cliente"
+msgstr "Nach Kunde sortieren"
+
+#: ../../../../web/SearchC.class.php:276
+msgid "Ordenar por Nombre"
+msgstr "Nach Name sortieren"
+
+#: ../../../../web/SearchC.class.php:282
+msgid "Ordenar por Categoría"
+msgstr "Nach Kategorie sortieren"
+
+#: ../../../../web/SearchC.class.php:288
+msgid "Ordenar por Usuario"
+msgstr "Nach Benutzername sortieren"
+
+#: ../../../../web/SearchC.class.php:294
+msgid "Ordenar por URL / IP"
+msgstr "Nach URL/IP sortieren"
+
+#: ../../../../web/SearchC.class.php:295
+#: ../../../../inc/themes/classic/account.inc:58
+#: ../../../../inc/themes/classic/editpass.inc:16
+#: ../../../../inc/themes/classic/request.inc:13
+#: ../../../../inc/themes/classic/search.inc:57
+#: ../../../../inc/themes/material-blue/account.inc:66
+#: ../../../../inc/themes/material-blue/editpass.inc:17
+#: ../../../../inc/themes/material-blue/request.inc:15
+#: ../../../../inc/themes/material-blue/search.inc:62
+msgid "URL / IP"
+msgstr "URL/IP"
+
+#: ../../../../web/UsersMgmtC.class.php:91
+msgid "Propiedades"
+msgstr "Eigenschaften"
+
+#: ../../../../web/UsersMgmtC.class.php:104
+msgid "Admin Cuentas"
+msgstr "Konto-Administrator"
+
+#: ../../../../web/UsersMgmtC.class.php:108
+#: ../../../../inc/themes/classic/users.inc:28
+#: ../../../../inc/themes/material-blue/users.inc:34
+msgid "Usuario de LDAP"
+msgstr "LDAP-Benutzer"
+
+#: ../../../../web/UsersMgmtC.class.php:112
+#: ../../../../inc/themes/classic/users.inc:113
+#: ../../../../inc/themes/material-blue/users.inc:151
+#: ../../../../inc/themes/material-blue/users.inc:154
+msgid "Deshabilitado"
+msgstr "inaktiv"
+
+#: ../../../../web/UsersMgmtC.class.php:129
+msgid "Ver Detalles de Usuario"
+msgstr "Benutzerdetails anzeigen"
+
+#: ../../../../web/UsersMgmtC.class.php:143
+msgid "Cambiar Clave de Usuario"
+msgstr "Benutzerpasswort Ändern"
+
+#: ../../../../web/UsersMgmtC.class.php:222
+msgid "Gestión de Grupos"
+msgstr "Gruppenverwaltung"
+
+#: ../../../../web/UsersMgmtC.class.php:260
+msgid "Ver Detalles de Perfil"
+msgstr ""
+
+#: ../../../../web/UsersMgmtC.class.php:287
+msgid "Gestión de Perfiles"
+msgstr "Profilverwaltung"
+
+#: ../../../../web/UsersMgmtC.class.php:407
+msgid "Ver token de Autorización"
+msgstr ""
+
+#: ../../../../web/UsersMgmtC.class.php:434
+msgid "Gestión de Autorizaciones API"
+msgstr ""
+
+#: ../../../../web/UsersMgmtC.class.php:456
+msgid "Token de autorización visualizado"
+msgstr ""
+
+#: ../../../../web/UsersMgmtC.class.php:457
+msgid "Autorizaciones"
+msgstr ""
+
+#: ../../../../web/UsersPrefsC.class.php:84
+#: ../../../../inc/themes/classic/mail.inc:63
+#: ../../../../inc/themes/material-blue/mail.inc:86
+msgid "Seguridad"
+msgstr "Sicherheit"
+
+#: ../../../../inc/themes/classic/2fa.inc:14
+#: ../../../../inc/themes/material-blue/2fa.inc:14
+msgid "Introducir código"
+msgstr "Code eingeben"
+
+#: ../../../../inc/themes/classic/2fa.inc:26
+msgid "Verificar"
+msgstr "bestätigen"
+
+#: ../../../../inc/themes/classic/account.inc:14
+#: ../../../../inc/themes/material-blue/account.inc:21
+msgid "Nombre de cuenta"
+msgstr "Kontoname"
+
+#: ../../../../inc/themes/classic/account.inc:35
+msgid "Buscar en desplegable o introducir"
+msgstr "Weitersuchen"
+
+#: ../../../../inc/themes/classic/account.inc:61
+#: ../../../../inc/themes/material-blue/account.inc:72
+msgid "URL o IP de acceso"
+msgstr "Auf URL/IP zugreifen"
+
+#: ../../../../inc/themes/classic/account.inc:73
+#: ../../../../inc/themes/material-blue/account.inc:86
+msgid "Usuario de acceso"
+msgstr "Benutzer für Zugriff"
+
+#: ../../../../inc/themes/classic/account.inc:90
+#: ../../../../inc/themes/classic/editpass.inc:31
+#: ../../../../inc/themes/classic/users.inc:83
+#: ../../../../inc/themes/classic/userspass.inc:19
+#: ../../../../inc/themes/classic/userspass.inc:21
+#: ../../../../inc/themes/material-blue/account.inc:105
+#: ../../../../inc/themes/material-blue/editpass.inc:36
+#: ../../../../inc/themes/material-blue/install.inc:64
+#: ../../../../inc/themes/material-blue/users.inc:102
+#: ../../../../inc/themes/material-blue/users.inc:109
+#: ../../../../inc/themes/material-blue/userspass.inc:19
+#: ../../../../inc/themes/material-blue/userspass.inc:25
+msgid "Clave (repetir)"
+msgstr "Passwort (Wiederholung)"
+
+#: ../../../../inc/themes/classic/account.inc:97
+#: ../../../../inc/themes/classic/search.inc:73
+#: ../../../../inc/themes/classic/users.inc:91
+#: ../../../../inc/themes/material-blue/account.inc:116
+#: ../../../../inc/themes/material-blue/search.inc:82
+#: ../../../../inc/themes/material-blue/users.inc:116
+msgid "Notas"
+msgstr "Bemerkungen"
+
+#: ../../../../inc/themes/classic/account.inc:99
+#: ../../../../inc/themes/material-blue/account.inc:121
+#: ../../../../inc/themes/material-blue/users.inc:123
+msgid "Notas sobre la cuenta"
+msgstr "Bemerkungen zum Konto"
+
+#: ../../../../inc/themes/classic/account.inc:105
+#: ../../../../inc/themes/material-blue/account.inc:130
+#: ../../../../inc/themes/material-blue/search.inc:75
+msgid "Permisos"
+msgstr "Berechtigungen"
+
+#: ../../../../inc/themes/classic/account.inc:132
+#: ../../../../inc/themes/classic/account.inc:163
+#: ../../../../inc/themes/material-blue/account.inc:159
+#: ../../../../inc/themes/material-blue/account.inc:191
+msgid "Hablitar edición"
+msgstr "Erlaube Änderungen"
+
+#: ../../../../inc/themes/classic/account.inc:201
+#: ../../../../inc/themes/material-blue/account.inc:243
+msgid "Soltar archivos aquí (max. 5) o click para seleccionar"
+msgstr "Dateien hier fallen lassen (max. 5) oder zum selektieren anklicken"
+
+#: ../../../../inc/themes/classic/account.inc:201
+#: ../../../../inc/themes/classic/config.inc:193
+#: ../../../../inc/themes/material-blue/account.inc:243
+#: ../../../../inc/themes/material-blue/config.inc:272
+msgid "Tamaño máximo de archivo"
+msgstr "Maximale Dateigröße"
+
+#: ../../../../inc/themes/classic/account.inc:213
+#: ../../../../inc/themes/material-blue/account.inc:255
+msgid "Historial"
+msgstr "Protokol"
+
+#: ../../../../inc/themes/classic/account.inc:232
+#: ../../../../inc/themes/material-blue/account.inc:275
+msgid "Seleccionar fecha"
+msgstr "Datum auswählen"
+
+#: ../../../../inc/themes/classic/account.inc:241
+#: ../../../../inc/themes/classic/users.inc:164
+#: ../../../../inc/themes/material-blue/account.inc:284
+#: ../../../../inc/themes/material-blue/users.inc:208
+msgid "Última Modificación"
+msgstr "Letzte Änderung"
+
+#: ../../../../inc/themes/classic/account.inc:243
+#: ../../../../inc/themes/material-blue/account.inc:286
+msgid "por"
+msgstr "durch"
+
+#: ../../../../inc/themes/classic/account.inc:286
+#: ../../../../inc/themes/material-blue/account.inc:333
+msgid "Visitas"
+msgstr "Besuche"
+
+#: ../../../../inc/themes/classic/account.inc:290
+#: ../../../../inc/themes/material-blue/account.inc:337
+msgid "Fecha Alta"
+msgstr "Datum hinzugefügt"
+
+#: ../../../../inc/themes/classic/account.inc:294
+#: ../../../../inc/themes/material-blue/account.inc:341
+msgid "Creador"
+msgstr "Erzeuger"
+
+#: ../../../../inc/themes/classic/account.inc:298
+#: ../../../../inc/themes/material-blue/account.inc:200
+#: ../../../../inc/themes/material-blue/account.inc:345
+msgid "Grupo Principal"
+msgstr "Hauptgruppe"
+
+#: ../../../../inc/themes/classic/account.inc:303
+#: ../../../../inc/themes/material-blue/account.inc:350
+msgid "Usuarios Secundarios"
+msgstr "Unter-Benutzer"
+
+#: ../../../../inc/themes/classic/account.inc:322
+#: ../../../../inc/themes/material-blue/account.inc:369
+msgid "Grupos Secundarios"
+msgstr "Untergruppe"
+
+#: ../../../../inc/themes/classic/account.inc:342
+#: ../../../../inc/themes/material-blue/account.inc:389
+msgid "Fecha Edición"
+msgstr "Änderungsdatum"
+
+#: ../../../../inc/themes/classic/account.inc:346
+#: ../../../../inc/themes/material-blue/account.inc:393
+msgid "Editor"
+msgstr "Editor"
+
+#: ../../../../inc/themes/classic/account.inc:373
+#: ../../../../inc/themes/material-blue/account.inc:456
+msgid "Restaurar cuenta desde este punto"
+msgstr "Wiederherstellen Konto von diesem Punkt"
+
+#: ../../../../inc/themes/classic/account.inc:385
+#: ../../../../inc/themes/classic/account.inc:468
+#: ../../../../inc/themes/classic/search.inc:103
+#: ../../../../inc/themes/classic/search.inc:183
+#: ../../../../inc/themes/material-blue/account.inc:423
+#: ../../../../inc/themes/material-blue/account.inc:493
+#: ../../../../inc/themes/material-blue/search.inc:118
+#: ../../../../inc/themes/material-blue/search.inc:197
+msgid "Copiar Clave en Portapapeles"
+msgstr "Passwort in die Zwischenablage kopieren"
+
+#: ../../../../inc/themes/classic/account.inc:401
+#: ../../../../inc/themes/material-blue/account.inc:436
+msgid "Ver Actual"
+msgstr "Ansehen"
+
+#: ../../../../inc/themes/classic/account.inc:406
+#: ../../../../inc/themes/classic/editpass.inc:45
+#: ../../../../inc/themes/classic/passreset.inc:46
+#: ../../../../inc/themes/material-blue/passreset.inc:43
+msgid "Volver"
+msgstr "Zurück"
+
+#: ../../../../inc/themes/classic/account.inc:413
+#: ../../../../inc/themes/classic/search.inc:115
+#: ../../../../inc/themes/material-blue/account.inc:446
+#: ../../../../inc/themes/material-blue/search.inc:130
+msgid "Modificar Cuenta"
+msgstr "Konto ändern"
+
+#: ../../../../inc/themes/classic/account.inc:418
+#: ../../../../inc/themes/classic/search.inc:136
+#: ../../../../inc/themes/material-blue/account.inc:450
+#: ../../../../inc/themes/material-blue/search.inc:150
+msgid "Solicitar Modificación"
+msgstr "Änderung initiiert"
+
+#: ../../../../inc/themes/classic/account.inc:425
+#: ../../../../inc/themes/classic/categories.inc:62
+#: ../../../../inc/themes/classic/config.inc:275
+#: ../../../../inc/themes/classic/customers.inc:62
+#: ../../../../inc/themes/classic/customfields.inc:63
+#: ../../../../inc/themes/classic/editpass.inc:50
+#: ../../../../inc/themes/classic/encryption.inc:102
+#: ../../../../inc/themes/classic/groups.inc:77
+#: ../../../../inc/themes/classic/ldap.inc:229
+#: ../../../../inc/themes/classic/mail.inc:107
+#: ../../../../inc/themes/classic/profiles.inc:168
+#: ../../../../inc/themes/classic/security.inc:57
+#: ../../../../inc/themes/classic/tokens.inc:59
+#: ../../../../inc/themes/classic/users.inc:189
+#: ../../../../inc/themes/classic/userspass.inc:35
+#: ../../../../inc/themes/classic/wiki.inc:110
+#: ../../../../inc/themes/material-blue/account.inc:462
+#: ../../../../inc/themes/material-blue/categories.inc:72
+#: ../../../../inc/themes/material-blue/config.inc:388
+#: ../../../../inc/themes/material-blue/customers.inc:73
+#: ../../../../inc/themes/material-blue/customfields.inc:74
+#: ../../../../inc/themes/material-blue/editpass.inc:60
+#: ../../../../inc/themes/material-blue/groups.inc:88
+#: ../../../../inc/themes/material-blue/ldap.inc:257
+#: ../../../../inc/themes/material-blue/mail.inc:145
+#: ../../../../inc/themes/material-blue/profiles.inc:177
+#: ../../../../inc/themes/material-blue/security.inc:61
+#: ../../../../inc/themes/material-blue/tokens.inc:63
+#: ../../../../inc/themes/material-blue/users.inc:235
+#: ../../../../inc/themes/material-blue/userspass.inc:40
+#: ../../../../inc/themes/material-blue/wiki.inc:124
+msgid "Guardar"
+msgstr "Speichern"
+
+#: ../../../../inc/themes/classic/account.inc:435
+#: ../../../../inc/themes/material-blue/account.inc:472
+msgid "Seleccionar grupos secundarios"
+msgstr "Untergruppe auswählen"
+
+#: ../../../../inc/themes/classic/account.inc:439
+#: ../../../../inc/themes/material-blue/account.inc:475
+msgid "Seleccionar usuarios"
+msgstr "Benutzer auswählen"
+
+#: ../../../../inc/themes/classic/account.inc:472
+#: ../../../../inc/themes/classic/search.inc:187
+#: ../../../../inc/themes/material-blue/account.inc:497
+#: ../../../../inc/themes/material-blue/search.inc:201
+msgid "Clave Copiada al Portapapeles"
+msgstr "Passwort in die Zwischenablage kopiert"
+
+#: ../../../../inc/themes/classic/backup.inc:10
+#: ../../../../inc/themes/classic/backup.inc:67
+#: ../../../../inc/themes/material-blue/backup.inc:10
+#: ../../../../inc/themes/material-blue/backup.inc:71
+msgid "Resultado"
+msgstr "Ergebnis"
+
+#: ../../../../inc/themes/classic/backup.inc:18
+#: ../../../../inc/themes/classic/backup.inc:75
+#: ../../../../inc/themes/material-blue/backup.inc:18
+#: ../../../../inc/themes/material-blue/backup.inc:79
+msgid "Descargar Actual"
+msgstr "Herunterladen"
+
+#: ../../../../inc/themes/classic/backup.inc:31
+#: ../../../../inc/themes/material-blue/backup.inc:31
+msgid "No hay backups para descargar"
+msgstr "Es existieren keine Backups zum Herunterladen"
+
+#: ../../../../inc/themes/classic/backup.inc:45
+#: ../../../../inc/themes/classic/backup.inc:49
+#: ../../../../inc/themes/classic/backup.inc:113
+#: ../../../../inc/themes/classic/backup.inc:117
+#: ../../../../inc/themes/classic/encryption.inc:93
+#: ../../../../inc/themes/classic/encryption.inc:97
+#: ../../../../inc/themes/classic/encryption.inc:152
+#: ../../../../inc/themes/classic/encryption.inc:156
+#: ../../../../inc/themes/classic/import.inc:15
+#: ../../../../inc/themes/classic/import.inc:37
+#: ../../../../inc/themes/classic/import.inc:51
+#: ../../../../inc/themes/classic/import.inc:97
+#: ../../../../inc/themes/classic/import.inc:118
+#: ../../../../inc/themes/classic/import.inc:170
+#: ../../../../inc/themes/classic/import.inc:174
+#: ../../../../inc/themes/classic/js-common.inc:13
+#: ../../../../inc/themes/classic/ldap.inc:13
+#: ../../../../inc/themes/classic/ldap.inc:33
+#: ../../../../inc/themes/classic/ldap.inc:58
+#: ../../../../inc/themes/classic/ldap.inc:82
+#: ../../../../inc/themes/classic/ldap.inc:93
+#: ../../../../inc/themes/classic/ldap.inc:117
+#: ../../../../inc/themes/classic/ldap.inc:145
+#: ../../../../inc/themes/classic/ldap.inc:166
+#: ../../../../inc/themes/classic/ldap.inc:187
+#: ../../../../inc/themes/classic/wiki.inc:12
+#: ../../../../inc/themes/classic/wiki.inc:28
+#: ../../../../inc/themes/classic/wiki.inc:55
+#: ../../../../inc/themes/classic/wiki.inc:82
+#: ../../../../inc/themes/material-blue/backup.inc:47
+#: ../../../../inc/themes/material-blue/backup.inc:51
+#: ../../../../inc/themes/material-blue/backup.inc:129
+#: ../../../../inc/themes/material-blue/backup.inc:133
+#: ../../../../inc/themes/material-blue/encryption.inc:107
+#: ../../../../inc/themes/material-blue/encryption.inc:111
+#: ../../../../inc/themes/material-blue/encryption.inc:171
+#: ../../../../inc/themes/material-blue/encryption.inc:175
+#: ../../../../inc/themes/material-blue/import.inc:99
+#: ../../../../inc/themes/material-blue/import.inc:103
+#: ../../../../inc/themes/material-blue/js-common.inc:11
+msgid "Ayuda"
+msgstr "Hilfe"
+
+#: ../../../../inc/themes/classic/backup.inc:50
+#: ../../../../inc/themes/material-blue/backup.inc:52
+msgid ""
+"La copia de seguridad permite guardar y descargar tanto la base de datos de "
+"sysPass como los archivos de la aplicación y su configuración."
+msgstr ""
+
+#: ../../../../inc/themes/classic/backup.inc:52
+#: ../../../../inc/themes/material-blue/backup.inc:54
+msgid ""
+"Con este método es posible guardar todos los datos de sysPass en otro lugar "
+"o utilizarlos para hacer la aplicación portable."
+msgstr ""
+
+#: ../../../../inc/themes/classic/backup.inc:60
+#: ../../../../inc/themes/classic/backup.inc:126
+#: ../../../../inc/themes/material-blue/backup.inc:64
+msgid "Exportar Cuentas"
+msgstr ""
+
+#: ../../../../inc/themes/classic/backup.inc:84
+#: ../../../../inc/themes/material-blue/backup.inc:88
+msgid "No hay archivos XML para descargar"
+msgstr ""
+
+#: ../../../../inc/themes/classic/backup.inc:90
+#: ../../../../inc/themes/material-blue/backup.inc:94
+#: ../../../../inc/themes/material-blue/backup.inc:101
+msgid "Clave de Exportación"
+msgstr ""
+
+#: ../../../../inc/themes/classic/backup.inc:98
+#: ../../../../inc/themes/material-blue/backup.inc:107
+#: ../../../../inc/themes/material-blue/backup.inc:114
+msgid "Clave de Exportación (repetir)"
+msgstr ""
+
+#: ../../../../inc/themes/classic/backup.inc:118
+#: ../../../../inc/themes/material-blue/backup.inc:134
+msgid ""
+"La exportación de cuentas permite guardar las cuentas y sus datos en formato "
+"XML para posteriormente poder ser importados en otras instancias de sysPass."
+msgstr ""
+
+#: ../../../../inc/themes/classic/backup.inc:120
+#: ../../../../inc/themes/material-blue/backup.inc:136
+msgid "Los elementos exportados son cuentas, clientes y categorías."
+msgstr ""
+
+#: ../../../../inc/themes/classic/backup.inc:122
+#: ../../../../inc/themes/material-blue/backup.inc:138
+msgid ""
+"Las claves de las cuentas son exportadas de forma encriptada para mayor "
+"seguridad."
+msgstr ""
+
+#: ../../../../inc/themes/classic/backup.inc:124
+#: ../../../../inc/themes/material-blue/backup.inc:140
+msgid ""
+"Es posible establecer una clave de exportación para guardar todos los datos "
+"encriptados en el archivo XML."
+msgstr ""
+
+#: ../../../../inc/themes/classic/body.inc:4
+#: ../../../../inc/themes/material-blue/body.inc:4
+msgid "Javascript es necesario para el correcto funcionamiento"
+msgstr "Javascript muss eingeschaltet sein."
+
+#: ../../../../inc/themes/classic/categories.inc:10
+#: ../../../../inc/themes/material-blue/categories.inc:14
+msgid "Nombre de la categoría"
+msgstr "Kategoriename"
+
+#: ../../../../inc/themes/classic/categories.inc:18
+#: ../../../../inc/themes/material-blue/categories.inc:26
+msgid "Descripción de la categoría"
+msgstr "Beschreibung der Kategorie"
+
+#: ../../../../inc/themes/classic/config.inc:4
+#: ../../../../inc/themes/material-blue/config.inc:4
+msgid "Sitio"
+msgstr "Site"
+
+#: ../../../../inc/themes/classic/config.inc:10
+#: ../../../../inc/themes/material-blue/config.inc:11
+msgid "Idioma"
+msgstr "Sprache"
+
+#: ../../../../inc/themes/classic/config.inc:21
+#: ../../../../inc/themes/material-blue/config.inc:22
+msgid "Tema Visual"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:33
+#: ../../../../inc/themes/material-blue/config.inc:34
+#: ../../../../inc/themes/material-blue/config.inc:42
+msgid "Timeout de sesión (s)"
+msgstr "Ablauf der Sitzung (s)"
+
+#: ../../../../inc/themes/classic/config.inc:42
+#: ../../../../inc/themes/material-blue/config.inc:48
+msgid "Habilitar log de eventos"
+msgstr "Protokol einschalten"
+
+#: ../../../../inc/themes/classic/config.inc:46
+#: ../../../../inc/themes/material-blue/config.inc:52
+msgid "Guarda las acciones realizadas en la aplicación."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:58
+#: ../../../../inc/themes/material-blue/config.inc:66
+msgid "Habilitar depuración"
+msgstr "Debugging einschalten"
+
+#: ../../../../inc/themes/classic/config.inc:62
+#: ../../../../inc/themes/material-blue/config.inc:70
+msgid ""
+"Muestra información relativa a la configuración de la aplicación y "
+"rendimiento."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:74
+#: ../../../../inc/themes/material-blue/config.inc:84
+msgid "Modo mantenimiento"
+msgstr "Wartungsmodus"
+
+#: ../../../../inc/themes/classic/config.inc:78
+#: ../../../../inc/themes/material-blue/config.inc:88
+msgid ""
+"En este modo no se puede acceder a la aplicación. Para deshabilitarlo es "
+"necesario modificar el archivo de configuración."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:90
+#: ../../../../inc/themes/material-blue/config.inc:102
+msgid "Comprobar actualizaciones"
+msgstr "Nach Updates schauen"
+
+#: ../../../../inc/themes/classic/config.inc:94
+#: ../../../../inc/themes/material-blue/config.inc:106
+msgid ""
+"Comprobar actualizaciones de la aplicación (sólo para los usuarios "
+"administradores)."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:106
+#: ../../../../inc/themes/material-blue/config.inc:120
+msgid "Comprobar notificaciones"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:110
+#: ../../../../inc/themes/material-blue/config.inc:124
+msgid ""
+"Comprobar si existen notificaciones de seguridad o avisos de sysPass (sólo "
+"para los usuarios administradores)."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:122
+#: ../../../../inc/themes/material-blue/config.inc:145
+msgid "Nombre de cuenta como enlace"
+msgstr "Kontoname als Link"
+
+#: ../../../../inc/themes/classic/config.inc:126
+#: ../../../../inc/themes/material-blue/config.inc:149
+msgid ""
+"Habilita el nombre de la cuenta de la búsqueda, como enlace a los detalles "
+"de la cuenta."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:138
+#: ../../../../inc/themes/material-blue/config.inc:230
+msgid "Gestión de archivos"
+msgstr "Dateiverwaltung"
+
+#: ../../../../inc/themes/classic/config.inc:142
+#: ../../../../inc/themes/material-blue/config.inc:234
+msgid "Habilita la subida/descarga de archivos para las cuentas."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:154
+#: ../../../../inc/themes/material-blue/config.inc:163
+msgid "Búsquedas globales"
+msgstr "Globale Suchen"
+
+#: ../../../../inc/themes/classic/config.inc:158
+#: ../../../../inc/themes/material-blue/config.inc:167
+msgid ""
+"Permite que todos los usuarios puedan realizar búsquedas en todas las "
+"cuentas, pero no pueden ver el contenido de las que no tienen permisos."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:170
+#: ../../../../inc/themes/material-blue/config.inc:249
+msgid "Extensiones de archivos permitidas"
+msgstr "Erlaubte Dateiendungen"
+
+#: ../../../../inc/themes/classic/config.inc:174
+#: ../../../../inc/themes/material-blue/config.inc:253
+msgid "Extensiones permitidas para la subida de archivos."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:178
+#: ../../../../inc/themes/material-blue/config.inc:257
+msgid "Se permite un máximo de 4 caracteres."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:182
+#: ../../../../inc/themes/material-blue/config.inc:261
+msgid ""
+"Escribir extensión y pulsar intro para añadir. Es necesario guardar la "
+"configuración."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:197
+#: ../../../../inc/themes/material-blue/config.inc:276
+msgid "Establece el tamaño máximo para subir archivos."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:201
+#: ../../../../inc/themes/material-blue/config.inc:280
+msgid "El máximo absuluto es de 16MB."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:212
+#: ../../../../inc/themes/material-blue/config.inc:181
+msgid "Resultados por página"
+msgstr "Treffer pro Seite"
+
+#: ../../../../inc/themes/classic/config.inc:216
+#: ../../../../inc/themes/material-blue/config.inc:185
+msgid "Número de resultados por página a mostrar, al realizar una búsqueda."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:227
+msgid "Resultados en Tarjetas"
+msgstr "Results as Cards"
+
+#: ../../../../inc/themes/classic/config.inc:231
+msgid "Muestra los resultados de búsqueda de cuentas en formato tarjeta."
+msgstr "Zeigt die Ergebnisse einer Konten-Suche im Visitenkarten-Format an."
+
+#: ../../../../inc/themes/classic/config.inc:243
+#: ../../../../inc/themes/material-blue/config.inc:201
+msgid "Imagen para mostrar clave"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:247
+#: ../../../../inc/themes/material-blue/config.inc:205
+msgid "Generar una imagen con el texto de la clave de la cuenta."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:250
+#: ../../../../inc/themes/material-blue/config.inc:208
+msgid "Util para entornos donde copiar la clave supone un riesgo de seguridad."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:285
+#: ../../../../inc/themes/material-blue/config.inc:398
+msgid "Añadir extensión"
+msgstr "Endung hinzufügen"
+
+#: ../../../../inc/themes/classic/config.inc:286
+#: ../../../../inc/themes/material-blue/config.inc:399
+msgid "Eliminar extensión"
+msgstr "Endung löschen"
+
+#: ../../../../inc/themes/classic/customers.inc:10
+#: ../../../../inc/themes/material-blue/customers.inc:14
+msgid "Nombre del cliente"
+msgstr "Kundenname"
+
+#: ../../../../inc/themes/classic/customers.inc:18
+#: ../../../../inc/themes/material-blue/customers.inc:26
+msgid "Descripción del cliente"
+msgstr "Beschreibung des Kunden"
+
+#: ../../../../inc/themes/classic/customfields.inc:38
+#: ../../../../inc/themes/material-blue/customfields.inc:41
+msgid "Texto Ayuda"
+msgstr ""
+
+#: ../../../../inc/themes/classic/customfields.inc:44
+#: ../../../../inc/themes/material-blue/customfields.inc:52
+msgid "Obligatorio"
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:8
+#: ../../../../inc/themes/classic/install.inc:46
+#: ../../../../inc/themes/classic/install.inc:50
+#: ../../../../inc/themes/classic/install.inc:51
+#: ../../../../inc/themes/classic/login.inc:15
+#: ../../../../inc/themes/classic/login.inc:27
+#: ../../../../inc/themes/material-blue/encryption.inc:8
+#: ../../../../inc/themes/material-blue/install.inc:49
+#: ../../../../inc/themes/material-blue/install.inc:56
+#: ../../../../inc/themes/material-blue/login.inc:25
+#: ../../../../inc/themes/material-blue/login.inc:48
+msgid "Clave Maestra"
+msgstr "Master-Passwort"
+
+#: ../../../../inc/themes/classic/encryption.inc:16
+#: ../../../../inc/themes/classic/encryption.inc:116
+#: ../../../../inc/themes/material-blue/encryption.inc:16
+#: ../../../../inc/themes/material-blue/encryption.inc:131
+msgid "Último cambio"
+msgstr "Letzte Änderung"
+
+#: ../../../../inc/themes/classic/encryption.inc:25
+#: ../../../../inc/themes/material-blue/encryption.inc:25
+#: ../../../../inc/themes/material-blue/encryption.inc:31
+msgid "Clave Maestra actual"
+msgstr "Aktuelles Master-Passwort"
+
+#: ../../../../inc/themes/classic/encryption.inc:34
+#: ../../../../inc/themes/material-blue/encryption.inc:37
+#: ../../../../inc/themes/material-blue/encryption.inc:43
+msgid "Nueva Clave Maestra"
+msgstr "Neues Master-Passwort"
+
+#: ../../../../inc/themes/classic/encryption.inc:43
+#: ../../../../inc/themes/material-blue/encryption.inc:49
+#: ../../../../inc/themes/material-blue/encryption.inc:55
+msgid "Nueva Clave Maestra (repetir)"
+msgstr "Neues Master-Passwort (Wiederholung)"
+
+#: ../../../../inc/themes/classic/encryption.inc:51
+#: ../../../../inc/themes/material-blue/encryption.inc:61
+msgid "No modificar cuentas"
+msgstr "Konten nicht verändern"
+
+#: ../../../../inc/themes/classic/encryption.inc:56
+#: ../../../../inc/themes/material-blue/encryption.inc:66
+msgid "Establece una nueva clave maestra sin re-encriptar las cuentas"
+msgstr "Setze Master-Passwort ohne die Konten neu zu verschlüsseln"
+
+#: ../../../../inc/themes/classic/encryption.inc:67
+#: ../../../../inc/themes/material-blue/encryption.inc:79
+msgid "Confirmar cambio"
+msgstr "Änderung bestätigen"
+
+#: ../../../../inc/themes/classic/encryption.inc:70
+#: ../../../../inc/themes/classic/encryption.inc:73
+#: ../../../../inc/themes/classic/encryption.inc:76
+#: ../../../../inc/themes/classic/import.inc:67
+#: ../../../../inc/themes/classic/security.inc:43
+msgid "Atención"
+msgstr "Warnung"
+
+#: ../../../../inc/themes/classic/encryption.inc:71
+#: ../../../../inc/themes/material-blue/encryption.inc:83
+msgid "Guarde la nueva clave en un lugar seguro."
+msgstr "Sie sollten das neue Passwort an einem sicheren Ort aufbewahren"
+
+#: ../../../../inc/themes/classic/encryption.inc:74
+#: ../../../../inc/themes/material-blue/encryption.inc:86
+msgid "Se volverán a encriptar las claves de todas las cuentas."
+msgstr "Alle Passwörter der Konten werden neu verschlüsselt."
+
+#: ../../../../inc/themes/classic/encryption.inc:77
+#: ../../../../inc/themes/material-blue/encryption.inc:89
+msgid "Los usuarios deberán de introducir la nueva clave maestra."
+msgstr "All Benutzer müssen das neue Master-Passwort eingeben."
+
+#: ../../../../inc/themes/classic/encryption.inc:98
+#: ../../../../inc/themes/material-blue/encryption.inc:112
+msgid ""
+"La clave maestra es utilizada para encriptar las claves de las cuentas de "
+"sysPass para mantenerlas seguras."
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:100
+#: ../../../../inc/themes/material-blue/encryption.inc:114
+msgid ""
+"Es recomendable cambiarla cada cierto tiempo y utilizar una clave compleja "
+"que incluya números, letras y símbolos."
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:108
+#: ../../../../inc/themes/material-blue/encryption.inc:124
+msgid "Clave Temporal"
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:119
+#: ../../../../inc/themes/classic/encryption.inc:130
+#: ../../../../inc/themes/material-blue/encryption.inc:134
+#: ../../../../inc/themes/material-blue/encryption.inc:145
+msgid "No generada"
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:124
+#: ../../../../inc/themes/material-blue/encryption.inc:139
+msgid "Válido hasta"
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:136
+#: ../../../../inc/themes/material-blue/encryption.inc:151
+#: ../../../../inc/themes/material-blue/encryption.inc:157
+msgid "Validez (s)"
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:139
+msgid "Validez"
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:157
+#: ../../../../inc/themes/material-blue/encryption.inc:176
+msgid ""
+"La clave temporal es utilizada como clave maestra para los usuarios que "
+"necesitan introducirla al iniciar la sesión, así no es necesario facilitar "
+"la clave maestra original."
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:159
+#: ../../../../inc/themes/material-blue/encryption.inc:180
+msgid "Generar"
+msgstr ""
+
+#: ../../../../inc/themes/classic/eventlog.inc:8
+#: ../../../../inc/themes/classic/search.inc:3
+#: ../../../../inc/themes/material-blue/eventlog.inc:7
+#: ../../../../inc/themes/material-blue/search.inc:3
+msgid "No se encontraron registros"
+msgstr "Keine Datensätze gefunden"
+
+#: ../../../../inc/themes/classic/eventlog.inc:19
+#: ../../../../inc/themes/material-blue/eventlog.inc:18
+msgid "Fecha / Hora"
+msgstr "Datum/Zeit"
+
+#: ../../../../inc/themes/classic/eventlog.inc:22
+#: ../../../../inc/themes/material-blue/eventlog.inc:21
+msgid "Evento"
+msgstr "Ereignis"
+
+#: ../../../../inc/themes/classic/eventlog.inc:28
+#: ../../../../inc/themes/material-blue/eventlog.inc:27
+msgid "IP"
+msgstr "IP"
+
+#: ../../../../inc/themes/classic/eventlog.inc:86
+#: ../../../../inc/themes/classic/search.inc:159
+#: ../../../../inc/themes/material-blue/eventlog.inc:85
+#: ../../../../inc/themes/material-blue/search.inc:173
+msgid "Primera página"
+msgstr "Erste Seite"
+
+#: ../../../../inc/themes/classic/eventlog.inc:88
+#: ../../../../inc/themes/classic/search.inc:161
+#: ../../../../inc/themes/material-blue/eventlog.inc:87
+#: ../../../../inc/themes/material-blue/search.inc:175
+msgid "Página anterior"
+msgstr "Vorherige Seite"
+
+#: ../../../../inc/themes/classic/eventlog.inc:93
+#: ../../../../inc/themes/classic/search.inc:166
+#: ../../../../inc/themes/material-blue/eventlog.inc:92
+#: ../../../../inc/themes/material-blue/search.inc:180
+msgid "Página siguiente"
+msgstr "Nächste Seite"
+
+#: ../../../../inc/themes/classic/eventlog.inc:95
+#: ../../../../inc/themes/classic/search.inc:168
+#: ../../../../inc/themes/material-blue/eventlog.inc:94
+#: ../../../../inc/themes/material-blue/search.inc:182
+msgid "Última página"
+msgstr "Letzte Seite"
+
+#: ../../../../inc/themes/classic/files.inc:22
+#: ../../../../inc/themes/material-blue/files.inc:21
+msgid "Ver Archivo"
+msgstr "Datei ansehen"
+
+#: ../../../../inc/themes/classic/footer.inc:6
+#: ../../../../inc/themes/material-blue/footer.inc:27
+msgid "Indica si la conexión utiliza HTTPS."
+msgstr ""
+
+#: ../../../../inc/themes/classic/footer.inc:6
+#: ../../../../inc/themes/material-blue/footer.inc:27
+msgid ""
+"Las claves de formularios enviados se encriptan mediante PKI, el resto de "
+"datos no."
+msgstr ""
+
+#: ../../../../inc/themes/classic/footer.inc:6
+#: ../../../../inc/themes/material-blue/footer.inc:27
#, fuzzy
-#~ msgid "Clave de administrador de sysPass"
-#~ msgstr "sysPass administrator's password"
+msgid "Seguro"
+msgstr "Sicherheit"
+
+#: ../../../../inc/themes/classic/footer.inc:6
+#: ../../../../inc/themes/material-blue/footer.inc:27
+msgid "Inseguro"
+msgstr ""
+
+#: ../../../../inc/themes/classic/footer.inc:11
+#: ../../../../inc/themes/material-blue/footer.inc:18
+msgid "Ayuda :: FAQ :: Changelog"
+msgstr "Hilfe :: FAQ :: Changelog"
+
+#: ../../../../inc/themes/classic/footer.inc:14
+#: ../../../../inc/themes/material-blue/footer.inc:23
+msgid "Un proyecto de cygnux.org"
+msgstr "Ein cygnux.org Projekt"
+
+#: ../../../../inc/themes/classic/groups.inc:10
+#: ../../../../inc/themes/material-blue/groups.inc:14
+msgid "Nombre del grupo"
+msgstr "Gruppenname"
+
+#: ../../../../inc/themes/classic/groups.inc:18
+#: ../../../../inc/themes/material-blue/groups.inc:26
+msgid "Descripción del grupo"
+msgstr "Beschreibung der Gruppe"
+
+#: ../../../../inc/themes/classic/import.inc:7
+#: ../../../../inc/themes/material-blue/import.inc:121
+msgid "Importar phpPMS"
+msgstr "phpPMS Import"
+
+#: ../../../../inc/themes/classic/import.inc:14
+#: ../../../../inc/themes/classic/install.inc:63
+#: ../../../../inc/themes/classic/install.inc:64
+#: ../../../../inc/themes/material-blue/import.inc:128
+#: ../../../../inc/themes/material-blue/import.inc:140
+msgid "Usuario BBDD"
+msgstr "Datenbankbenutzer"
+
+#: ../../../../inc/themes/classic/import.inc:18
+#: ../../../../inc/themes/material-blue/import.inc:132
+msgid "Indicar el usuario de conexión a la base de datos de phpPMS."
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:28
+#: ../../../../inc/themes/classic/install.inc:71
+#: ../../../../inc/themes/classic/install.inc:73
+#: ../../../../inc/themes/material-blue/import.inc:146
+#: ../../../../inc/themes/material-blue/import.inc:152
+msgid "Clave BBDD"
+msgstr "Datenbank-Passwort"
+
+#: ../../../../inc/themes/classic/import.inc:36
+#: ../../../../inc/themes/classic/install.inc:78
+#: ../../../../inc/themes/classic/install.inc:79
+#: ../../../../inc/themes/material-blue/import.inc:158
+#: ../../../../inc/themes/material-blue/import.inc:170
+msgid "Nombre BBDD"
+msgstr "Datenbankname"
+
+#: ../../../../inc/themes/classic/import.inc:40
+#: ../../../../inc/themes/material-blue/import.inc:162
+msgid "Indicar el nombre de la base de datos de phpPMS."
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:50
+#: ../../../../inc/themes/classic/install.inc:87
+#: ../../../../inc/themes/classic/install.inc:88
+#: ../../../../inc/themes/material-blue/import.inc:176
+#: ../../../../inc/themes/material-blue/import.inc:188
+msgid "Servidor BBDD"
+msgstr "Datenbank-Server"
+
+#: ../../../../inc/themes/classic/import.inc:54
+#: ../../../../inc/themes/material-blue/import.inc:180
+msgid "Indicar el servidor de la base de datos de phpPMS."
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:64
+#: ../../../../inc/themes/material-blue/import.inc:194
+msgid "Confirmar"
+msgstr "Bestätigen"
+
+#: ../../../../inc/themes/classic/import.inc:68
+#: ../../../../inc/themes/material-blue/import.inc:198
+msgid "Los datos actuales serán borrados (excepto el usuario actual)"
+msgstr "Daten werden gelöscht (mit Ausnahme des aktuellen Benutzers)"
+
+#: ../../../../inc/themes/classic/import.inc:83
+msgid "Iniciar"
+msgstr "Start"
+
+#: ../../../../inc/themes/classic/import.inc:89
+#: ../../../../inc/themes/material-blue/import.inc:7
+msgid "Importar CSV/XML"
+msgstr "CSV/XML Import"
+
+#: ../../../../inc/themes/classic/import.inc:96
+#: ../../../../inc/themes/material-blue/import.inc:14
+msgid "Usuario por Defecto"
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:100
+#: ../../../../inc/themes/material-blue/import.inc:18
+msgid "Define el usuario por defecto para las cuentas importadas."
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:117
+#: ../../../../inc/themes/classic/ldap.inc:144
+#: ../../../../inc/themes/material-blue/import.inc:36
+#: ../../../../inc/themes/material-blue/ldap.inc:170
+msgid "Grupo por Defecto"
+msgstr "Standard-Gruppe"
+
+#: ../../../../inc/themes/classic/import.inc:121
+#: ../../../../inc/themes/material-blue/import.inc:40
+msgid "Define el grupo por defecto para las cuentas importadas."
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:138
+#: ../../../../inc/themes/material-blue/import.inc:58
+#: ../../../../inc/themes/material-blue/import.inc:64
+msgid "Clave de Importación"
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:146
+#: ../../../../inc/themes/material-blue/import.inc:70
+#: ../../../../inc/themes/material-blue/import.inc:76
+msgid "Delimitador CSV"
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:162
+#: ../../../../inc/themes/material-blue/import.inc:90
+msgid "Soltar archivo aquí o click para seleccionar"
+msgstr "Dateien hier fallen lassen oder zum selektieren anklicken"
+
+#: ../../../../inc/themes/classic/import.inc:175
+msgid ""
+"Permite realizar la importación de Cuentas, Categorías y Clientes desde "
+"arhcivos XML y CSV."
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:177
+#: ../../../../inc/themes/material-blue/import.inc:106
+msgid ""
+"Los formatos de archivos XML soportados son: sysPass, KeePass y KeePassX"
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:179
+#: ../../../../inc/themes/material-blue/import.inc:108
+msgid ""
+"Arrastar el archivo a importar a la zona indicada o hacer click sobre la "
+"flecha."
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:181
+#: ../../../../inc/themes/material-blue/import.inc:110
+msgid ""
+"Para archivos de KeePass o KeePassX, el nombre del cliente será igual a "
+"KeePass o KeePassX y la categoría igual al nombre de los grupos."
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:183
+#: ../../../../inc/themes/material-blue/import.inc:112
+msgid "La importación de archivos CSV se realiza con el siguiente formato:"
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:185
+#: ../../../../inc/themes/material-blue/import.inc:114
+msgid "nombre_de_cuenta;cliente;categoría;url;usuario;clave;notas"
+msgstr "konto_name;kunde;kategorie;url;benutzer;passwort;bemerkungen"
+
+#: ../../../../inc/themes/classic/import.inc:187
+#: ../../../../inc/themes/material-blue/import.inc:116
+msgid ""
+"En todos los casos, si el cliente o la categoría no están creados, se crean "
+"automáticamente."
+msgstr ""
+
+#: ../../../../inc/themes/classic/info.inc:4
+#: ../../../../inc/themes/material-blue/info.inc:4
+msgid "Información de la Aplicación"
+msgstr ""
+
+#: ../../../../inc/themes/classic/info.inc:10
+#: ../../../../inc/themes/material-blue/info.inc:10
+msgid "Versión sysPass"
+msgstr ""
+
+#: ../../../../inc/themes/classic/info.inc:18
+#: ../../../../inc/themes/material-blue/info.inc:18
+msgid "Base de Datos"
+msgstr ""
+
+#: ../../../../inc/themes/classic/info.inc:30
+#: ../../../../inc/themes/material-blue/info.inc:30
+msgid "PHP"
+msgstr "PHP"
+
+#: ../../../../inc/themes/classic/info.inc:35
+#: ../../../../inc/themes/material-blue/info.inc:35
+msgid "Extensiones"
+msgstr "Erweiterungen"
+
+#: ../../../../inc/themes/classic/info.inc:37
+#: ../../../../inc/themes/material-blue/info.inc:37
+msgid "Memoria Usada"
+msgstr ""
+
+#: ../../../../inc/themes/classic/info.inc:44
+#: ../../../../inc/themes/classic/ldap.inc:32
+#: ../../../../inc/themes/classic/mail.inc:21
+#: ../../../../inc/themes/material-blue/config.inc:316
+#: ../../../../inc/themes/material-blue/info.inc:44
+#: ../../../../inc/themes/material-blue/ldap.inc:35
+#: ../../../../inc/themes/material-blue/ldap.inc:58
+#: ../../../../inc/themes/material-blue/ldap.inc:86
+#: ../../../../inc/themes/material-blue/mail.inc:24
+#: ../../../../inc/themes/material-blue/mail.inc:30
+msgid "Servidor"
+msgstr "Server"
+
+#: ../../../../inc/themes/classic/install.inc:4
+#: ../../../../inc/themes/material-blue/install.inc:4
+msgid "Instalación "
+msgstr "Installation"
+
+#: ../../../../inc/themes/classic/install.inc:25
+#: ../../../../inc/themes/material-blue/install.inc:25
+msgid "Crear cuenta de admin de sysPass"
+msgstr "Administrator-Konto anlegen"
+
+#: ../../../../inc/themes/classic/install.inc:32
+#: ../../../../inc/themes/material-blue/install.inc:36
+msgid "Login del usuario administrador de sysPass"
+msgstr "sysPass Administrator Anmeldung"
+
+#: ../../../../inc/themes/classic/install.inc:58
+#: ../../../../inc/themes/material-blue/install.inc:69
+msgid "Configurar BBDD"
+msgstr "Datenbank-Konfiguration"
+
+#: ../../../../inc/themes/classic/install.inc:67
+msgid "Login de usuario con permisos de administrador de MySQL"
+msgstr "Benutzer-Anmeldung mit administrativen Datenbank-Rechten"
+
+#: ../../../../inc/themes/classic/install.inc:83
+#: ../../../../inc/themes/material-blue/install.inc:102
+msgid "Nombre de la base de datos para sysPass"
+msgstr "Name der sysPass-Datenbank"
+
+#: ../../../../inc/themes/classic/install.inc:91
+msgid "Nombre del servidor de la base de datos de sysPass"
+msgstr "Server der sysPass-Datenbank eingeben"
+
+#: ../../../../inc/themes/classic/install.inc:97
+#: ../../../../inc/themes/material-blue/install.inc:120
+msgid "Modo Hosting"
+msgstr "Hosting-Modus"
+
+#: ../../../../inc/themes/classic/install.inc:104
+#: ../../../../inc/themes/material-blue/install.inc:127
+msgid "No crea ni verifica los permisos del usuario sobre la BBDD"
+msgstr "Zugangsberechtigungen zur DB werden weder angelegt nocht überprüft"
+
+#: ../../../../inc/themes/classic/install.inc:108
+#: ../../../../inc/themes/material-blue/install.inc:134
+#: ../../../../inc/themes/material-blue/install.inc:135
+msgid "Instalar"
+msgstr "Installieren"
+
+#: ../../../../inc/themes/classic/ldap.inc:12
+#: ../../../../inc/themes/material-blue/ldap.inc:12
+msgid "Habilitar LDAP"
+msgstr "LDAP verwenden"
+
+#: ../../../../inc/themes/classic/ldap.inc:16
+#: ../../../../inc/themes/material-blue/ldap.inc:16
+msgid "Habilita de autentificación mediante servidor LDAP."
+msgstr ""
+
+#: ../../../../inc/themes/classic/ldap.inc:20
+#: ../../../../inc/themes/material-blue/ldap.inc:20
+msgid "Este método utilizará MySQL en caso de fallo."
+msgstr ""
+
+#: ../../../../inc/themes/classic/ldap.inc:36
+#: ../../../../inc/themes/material-blue/ldap.inc:39
+msgid "Nombre o dirección IP del servidor de LDAP."
+msgstr ""
+
+#: ../../../../inc/themes/classic/ldap.inc:40
+#: ../../../../inc/themes/classic/ldap.inc:65
+#: ../../../../inc/themes/classic/ldap.inc:100
+#: ../../../../inc/themes/classic/ldap.inc:128
+#: ../../../../inc/themes/classic/wiki.inc:89
+#: ../../../../inc/themes/material-blue/ldap.inc:43
+#: ../../../../inc/themes/material-blue/ldap.inc:72
+#: ../../../../inc/themes/material-blue/ldap.inc:119
+#: ../../../../inc/themes/material-blue/ldap.inc:151
+#: ../../../../inc/themes/material-blue/wiki.inc:101
+msgid "Ejemplos:"
+msgstr "Beispiele:"
+
+#: ../../../../inc/themes/classic/ldap.inc:57
+#: ../../../../inc/themes/material-blue/ldap.inc:64
+msgid "Usuario de conexión"
+msgstr "Benutzer für Bind"
+
+#: ../../../../inc/themes/classic/ldap.inc:61
+#: ../../../../inc/themes/material-blue/ldap.inc:68
+msgid "Usuario para conectar con el servicio de LDAP."
+msgstr ""
+
+#: ../../../../inc/themes/classic/ldap.inc:81
+#: ../../../../inc/themes/material-blue/ldap.inc:92
+msgid "Clave de conexión"
+msgstr "LDAP-Passwort"
+
+#: ../../../../inc/themes/classic/ldap.inc:92
+#: ../../../../inc/themes/material-blue/ldap.inc:111
+#: ../../../../inc/themes/material-blue/ldap.inc:133
+msgid "Base de búsqueda"
+msgstr "Suchpräfix"
+
+#: ../../../../inc/themes/classic/ldap.inc:96
+#: ../../../../inc/themes/material-blue/ldap.inc:115
+msgid "Base en la que realizar la búsqueda de usuarios de LDAP."
+msgstr ""
+
+#: ../../../../inc/themes/classic/ldap.inc:120
+#: ../../../../inc/themes/material-blue/ldap.inc:143
+msgid ""
+"Grupo de LDAP al que debe de pertenecer el usuario para permitir el acceso."
+msgstr ""
+
+#: ../../../../inc/themes/classic/ldap.inc:124
+#: ../../../../inc/themes/material-blue/ldap.inc:147
+msgid "Este grupo debe de estar ubicado en la base de búsquedas de LDAP."
+msgstr ""
+
+#: ../../../../inc/themes/classic/ldap.inc:148
+#: ../../../../inc/themes/material-blue/ldap.inc:174
+msgid ""
+"Define el grupo de usuarios por defecto para los nuevos usuarios de LDAP."
+msgstr "Legen Sie die Standard-Gruppe für neue LDAP-Benutzer fest"
+
+#: ../../../../inc/themes/classic/ldap.inc:165
+#: ../../../../inc/themes/material-blue/ldap.inc:190
+msgid "Perfil por Defecto"
+msgstr "Standard-Profil"
+
+#: ../../../../inc/themes/classic/ldap.inc:169
+#: ../../../../inc/themes/material-blue/ldap.inc:194
+msgid ""
+"Define el perfil de usuarios por defecto para los nuevos usuarios de LDAP."
+msgstr ""
+
+#: ../../../../inc/themes/classic/ldap.inc:186
+#: ../../../../inc/themes/material-blue/ldap.inc:210
+msgid "Active Directory"
+msgstr "Active Directory"
+
+#: ../../../../inc/themes/classic/ldap.inc:190
+#: ../../../../inc/themes/material-blue/ldap.inc:214
+msgid "Habilita el modo de conexión con LDAP de Active Directory."
+msgstr "Aktiviert den Active Directory LDAP Verbindungsmodus."
+
+#: ../../../../inc/themes/classic/ldap.inc:202
+#: ../../../../inc/themes/material-blue/ldap.inc:228
+msgid "Comprobar"
+msgstr "Überprüfung"
+
+#: ../../../../inc/themes/classic/ldap.inc:206
+#: ../../../../inc/themes/material-blue/ldap.inc:232
+msgid "Comprobar conexión con LDAP"
+msgstr "LDAP-Verbindung prüfen"
+
+#: ../../../../inc/themes/classic/login.inc:46
+#: ../../../../inc/themes/material-blue/login.inc:73
+msgid "¿Olvidó su clave?"
+msgstr "Passwort vergessen?"
+
+#: ../../../../inc/themes/classic/login.inc:59
+#: ../../../../inc/themes/material-blue/login.inc:85
+msgid "Aplicación actualizada correctamente"
+msgstr "Anwendung erfolgreich aktualisiert"
+
+#: ../../../../inc/themes/classic/login.inc:64
+#: ../../../../inc/themes/classic/login.inc:65
+#: ../../../../inc/themes/material-blue/login.inc:90
+#: ../../../../inc/themes/material-blue/login.inc:91
+#: ../../../../inc/themes/material-blue/login.inc:93
+msgid "Nuevas Características"
+msgstr "Neue Eigenschaften"
+
+#: ../../../../inc/themes/classic/mail.inc:11
+#: ../../../../inc/themes/material-blue/mail.inc:11
+msgid "Habilitar notificaciones de correo"
+msgstr "E-Mail-Benachrichtigung einschalten"
+
+#: ../../../../inc/themes/classic/mail.inc:29
+#: ../../../../inc/themes/material-blue/config.inc:330
+#: ../../../../inc/themes/material-blue/mail.inc:36
+#: ../../../../inc/themes/material-blue/mail.inc:43
+msgid "Puerto"
+msgstr "Port"
+
+#: ../../../../inc/themes/classic/mail.inc:37
+#: ../../../../inc/themes/material-blue/mail.inc:49
+msgid "Habilitar Autentificación"
+msgstr "aktivieren Sie Authentifizierung"
+
+#: ../../../../inc/themes/classic/mail.inc:68
+#: ../../../../inc/themes/material-blue/mail.inc:91
+msgid "Deshabilitada"
+msgstr "Inaktiv"
+
+#: ../../../../inc/themes/classic/mail.inc:77
+#: ../../../../inc/themes/material-blue/mail.inc:100
+#: ../../../../inc/themes/material-blue/mail.inc:107
+msgid "Dirección de correo de envío"
+msgstr "E-Mail-Adresse des Empfängers"
+
+#: ../../../../inc/themes/classic/mail.inc:85
+#: ../../../../inc/themes/material-blue/mail.inc:113
+msgid "Habilitar peticiones por correo"
+msgstr "Erlaube Anfragen per E-Mail"
+
+#: ../../../../inc/themes/classic/mgmttabs.inc:66
+#: ../../../../inc/themes/classic/search.inc:110
+#: ../../../../inc/themes/material-blue/search.inc:125
+msgid "Más Acciones"
+msgstr "Weitere Aktionen"
+
+#: ../../../../inc/themes/classic/passreset.inc:13
+#: ../../../../inc/themes/material-blue/passreset.inc:10
+msgid "Solicitud de Cambio de Clave"
+msgstr "Passwortänderung initiiert."
+
+#: ../../../../inc/themes/classic/passreset.inc:16
+msgid "Login del Usuario"
+msgstr "Benutzer-Anmeldung"
+
+#: ../../../../inc/themes/classic/passreset.inc:21
+#: ../../../../inc/themes/material-blue/passreset.inc:24
+msgid "Email del Usuario"
+msgstr "Benutzer-E-Mail"
+
+#: ../../../../inc/themes/classic/passreset.inc:22
+#: ../../../../inc/themes/classic/users.inc:61
+#: ../../../../inc/themes/material-blue/users.inc:71
+msgid "Email"
+msgstr "E-Mail"
+
+#: ../../../../inc/themes/classic/passreset.inc:27
+msgid "Nueva Clave"
+msgstr "Neues Passwort"
+
+#: ../../../../inc/themes/classic/passreset.inc:34
+msgid "Nueva Clave (Verificar)"
+msgstr "Neues Passwort (Wіederholung)"
+
+#: ../../../../inc/themes/classic/passreset.inc:35
+msgid "Clave (Verificar)"
+msgstr "Passwort (Wiederholung)"
+
+#: ../../../../inc/themes/classic/passreset.inc:46
+#: ../../../../inc/themes/material-blue/passreset.inc:42
+msgid "Volver a iniciar sesión"
+msgstr "Zurück zur Anmeldung"
+
+#: ../../../../inc/themes/classic/passreset.inc:48
+#: ../../../../inc/themes/material-blue/2fa.inc:27
+#: ../../../../inc/themes/material-blue/passreset.inc:48
+#: ../../../../inc/themes/material-blue/passreset.inc:49
+msgid "Solicitar"
+msgstr "Anfrage"
+
+#: ../../../../inc/themes/classic/passreset.inc:49
+msgid "Solicitar cambio de clave"
+msgstr "Starte Passwortänderung"
+
+#: ../../../../inc/themes/classic/passreset.inc:51
+#: ../../../../inc/themes/material-blue/passreset.inc:53
+#: ../../../../inc/themes/material-blue/passreset.inc:54
+msgid "Cambiar"
+msgstr "Ändern"
+
+#: ../../../../inc/themes/classic/passreset.inc:52
+msgid "Cambiar Clave"
+msgstr "Passwort ändern"
+
+#: ../../../../inc/themes/classic/profiles.inc:11
+#: ../../../../inc/themes/material-blue/profiles.inc:14
+msgid "Nombre del perfil"
+msgstr "Profilname"
+
+#: ../../../../inc/themes/classic/profiles.inc:19
+#: ../../../../inc/themes/material-blue/profiles.inc:30
+msgid "Ver detalles de cuenta"
+msgstr "Kontodetails anzeigen"
+
+#: ../../../../inc/themes/classic/profiles.inc:19
+#: ../../../../inc/themes/material-blue/profiles.inc:30
+msgid "Ver"
+msgstr "Ansehen"
+
+#: ../../../../inc/themes/classic/profiles.inc:23
+#: ../../../../inc/themes/material-blue/profiles.inc:35
+msgid "Ver clave de cuenta"
+msgstr "Passwort anzeigen"
+
+#: ../../../../inc/themes/classic/profiles.inc:28
+#: ../../../../inc/themes/material-blue/profiles.inc:40
+msgid "Ver historial de cuenta"
+msgstr "Konto-Historie anzeigen"
+
+#: ../../../../inc/themes/classic/profiles.inc:32
+#: ../../../../inc/themes/material-blue/profiles.inc:45
+msgid "Editar cuenta"
+msgstr "Konto ändern"
+
+#: ../../../../inc/themes/classic/profiles.inc:32
+#: ../../../../inc/themes/material-blue/profiles.inc:45
+msgid "Editar"
+msgstr "Ändern"
+
+#: ../../../../inc/themes/classic/profiles.inc:37
+#: ../../../../inc/themes/material-blue/profiles.inc:50
+msgid "Editar clave de cuenta"
+msgstr "Passwort des Kontos ändern"
+
+#: ../../../../inc/themes/classic/profiles.inc:37
+#: ../../../../inc/themes/material-blue/profiles.inc:50
+msgid "Editar Clave"
+msgstr "Passwort ändern"
+
+#: ../../../../inc/themes/classic/profiles.inc:41
+msgid "Añadir nueva cuenta"
+msgstr "Konto hinzufügen"
+
+#: ../../../../inc/themes/classic/profiles.inc:41
+msgid "Añadir"
+msgstr "Hinzufügen"
+
+#: ../../../../inc/themes/classic/profiles.inc:46
+msgid "Borrar cuenta"
+msgstr "Konto löschen"
+
+#: ../../../../inc/themes/classic/profiles.inc:46
+msgid "Borrar"
+msgstr "Löschen"
+
+#: ../../../../inc/themes/classic/profiles.inc:50
+msgid "Ver archivos de cuenta"
+msgstr "Dateien des Kontos anzeigen"
+
+#: ../../../../inc/themes/classic/profiles.inc:61
+#: ../../../../inc/themes/material-blue/profiles.inc:72
+msgid "Configuración general"
+msgstr "Allgemeine Konfiguration"
+
+#: ../../../../inc/themes/classic/profiles.inc:65
+msgid "Cambiar clave maestra"
+msgstr "Master-Passwort ändern"
+
+#: ../../../../inc/themes/classic/profiles.inc:70
+msgid "Realizar copia de seguridad"
+msgstr "Backup erstellen"
+
+#: ../../../../inc/themes/classic/profiles.inc:70
+#: ../../../../inc/themes/material-blue/profiles.inc:82
+msgid "Backup"
+msgstr "Sicherung"
+
+#: ../../../../inc/themes/classic/profiles.inc:74
+#: ../../../../inc/themes/material-blue/profiles.inc:87
+msgid "Realizar importación de cuentas"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:81
+#: ../../../../inc/themes/material-blue/profiles.inc:93
+msgid "Gestión"
+msgstr "Verwaltung"
+
+#: ../../../../inc/themes/classic/profiles.inc:85
+#: ../../../../inc/themes/material-blue/profiles.inc:99
+msgid "Gestión de usuarios"
+msgstr "Benutzerverwaltung"
+
+#: ../../../../inc/themes/classic/profiles.inc:89
+#: ../../../../inc/themes/material-blue/profiles.inc:104
+msgid "Gestión de grupos"
+msgstr "Gruppenverwaltung"
+
+#: ../../../../inc/themes/classic/profiles.inc:94
+#: ../../../../inc/themes/material-blue/profiles.inc:109
+msgid "Gestión de perfiles"
+msgstr "Profilverwaltung"
+
+#: ../../../../inc/themes/classic/profiles.inc:94
+#: ../../../../inc/themes/material-blue/profiles.inc:109
+msgid "Perfiles"
+msgstr "Profile"
+
+#: ../../../../inc/themes/classic/profiles.inc:98
+#: ../../../../inc/themes/material-blue/profiles.inc:114
+msgid "Gestión de categorías"
+msgstr "Kategorienverwaltung"
+
+#: ../../../../inc/themes/classic/profiles.inc:103
+#: ../../../../inc/themes/material-blue/profiles.inc:119
+msgid "Gestión de clientes"
+msgstr "Kundenverwaltung"
+
+#: ../../../../inc/themes/classic/profiles.inc:107
+#: ../../../../inc/themes/material-blue/profiles.inc:124
+msgid "Gestión de campos personalizados"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:112
+#: ../../../../inc/themes/material-blue/profiles.inc:129
+msgid "Gestión de autorizaciones API"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:112
+#: ../../../../inc/themes/material-blue/profiles.inc:129
+msgid "Autorizaciones API"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:120
+#: ../../../../inc/themes/material-blue/profiles.inc:135
+msgid "Otros"
+msgstr "Andere"
+
+#: ../../../../inc/themes/classic/profiles.inc:124
+#: ../../../../inc/themes/material-blue/profiles.inc:141
+msgid "Ver log de eventos"
+msgstr "Protokol anzeigen"
+
+#: ../../../../inc/themes/classic/profiles.inc:124
+#: ../../../../inc/themes/material-blue/profiles.inc:141
+msgid "Log de Eventos"
+msgstr "Protokol"
+
+#: ../../../../inc/themes/classic/profiles.inc:132
+#: ../../../../inc/themes/material-blue/profiles.inc:148
+msgid "Usado por"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:139
+#: ../../../../inc/themes/material-blue/profiles.inc:155
+msgid "No usado"
+msgstr ""
+
+#: ../../../../inc/themes/classic/request.inc:1
+#: ../../../../inc/themes/material-blue/request.inc:1
+msgid "Solicitar Modificación de Cuenta"
+msgstr "Kontoänderung initiiert"
+
+#: ../../../../inc/themes/classic/request.inc:22
+#: ../../../../inc/themes/material-blue/request.inc:25
+msgid "Petición"
+msgstr "Anfrage"
+
+#: ../../../../inc/themes/classic/request.inc:24
+#: ../../../../inc/themes/material-blue/request.inc:29
+msgid "Descripción de la petición"
+msgstr "Beschreibung der Anfrage"
+
+#: ../../../../inc/themes/classic/request.inc:33
+#: ../../../../inc/themes/material-blue/account.inc:440
+#: ../../../../inc/themes/material-blue/editpass.inc:55
+#: ../../../../inc/themes/material-blue/request.inc:42
+msgid "Atrás"
+msgstr "Zurück"
+
+#: ../../../../inc/themes/classic/request.inc:38
+#: ../../../../inc/themes/material-blue/request.inc:48
+msgid "Enviar"
+msgstr "Senden"
+
+#: ../../../../inc/themes/classic/search.inc:24
+#: ../../../../inc/themes/material-blue/search.inc:29
+msgid "Buscar en Wiki"
+msgstr "Im Wiki suchen"
+
+#: ../../../../inc/themes/classic/search.inc:60
+#: ../../../../inc/themes/material-blue/search.inc:65
+msgid "Abrir enlace a"
+msgstr "Öffne Verweis nach"
+
+#: ../../../../inc/themes/classic/search.inc:78
+#: ../../../../inc/themes/material-blue/search.inc:89
+msgid "Archivos adjuntos"
+msgstr "Anhänge"
+
+#: ../../../../inc/themes/classic/search.inc:85
+#: ../../../../inc/themes/material-blue/search.inc:98
+msgid "Enlace a Wiki"
+msgstr "Verweis zum Wiki"
+
+#: ../../../../inc/themes/classic/search.inc:149
+#: ../../../../inc/themes/material-blue/search.inc:163
+msgid "Filtro ON"
+msgstr "Filter Eingeschaltet"
+
+#: ../../../../inc/themes/classic/search.inc:153
+#: ../../../../inc/themes/material-blue/search.inc:167
+msgid "Global ON"
+msgstr "Global eingeschaltet"
+
+#: ../../../../inc/themes/classic/searchbox.inc:5
+#: ../../../../inc/themes/material-blue/searchbox.inc:5
+msgid "Limpiar"
+msgstr "Löschen"
+
+#: ../../../../inc/themes/classic/searchbox.inc:6
+#: ../../../../inc/themes/material-blue/searchbox.inc:10
+msgid "Texto a buscar"
+msgstr "Suchbegriff"
+
+#: ../../../../inc/themes/classic/searchbox.inc:10
+#: ../../../../inc/themes/material-blue/searchbox.inc:15
+msgid "Parámetros especiales:"
+msgstr "Spezialparameter"
+
+#: ../../../../inc/themes/classic/searchbox.inc:13
+#: ../../../../inc/themes/material-blue/searchbox.inc:18
+msgid "Buscar cuentas a las que 'login' tenga acceso"
+msgstr ""
+
+#: ../../../../inc/themes/classic/searchbox.inc:14
+#: ../../../../inc/themes/material-blue/searchbox.inc:19
+msgid "Buscar cuentas a las que 'group_name' tenga acceso"
+msgstr ""
+
+#: ../../../../inc/themes/classic/searchbox.inc:15
+#: ../../../../inc/themes/material-blue/searchbox.inc:20
+msgid "Buscar cuentas con archivos con el nombre 'file_name'"
+msgstr ""
+
+#: ../../../../inc/themes/classic/searchbox.inc:19
+#: ../../../../inc/themes/material-blue/searchbox.inc:25
+#: ../../../../inc/themes/material-blue/searchbox.inc:28
+msgid "Búsqueda global"
+msgstr "Globale Suche"
+
+#: ../../../../inc/themes/classic/searchbox.inc:42
+#: ../../../../inc/themes/material-blue/searchbox.inc:54
+msgid "CPP"
+msgstr "KPS"
+
+#: ../../../../inc/themes/classic/searchbox.inc:42
+#: ../../../../inc/themes/material-blue/searchbox.inc:54
+msgid "Cuentas por página"
+msgstr "Konten pro Seite"
+
+#: ../../../../inc/themes/classic/security.inc:4
+msgid "Autenticación"
+msgstr "Authentifizierung"
+
+#: ../../../../inc/themes/classic/security.inc:13
+msgid "Autenticación en 2 pasos"
+msgstr "Zwei Faktor Authentifizierung"
+
+#: ../../../../inc/themes/classic/security.inc:17
+#: ../../../../inc/themes/material-blue/security.inc:15
+msgid ""
+"Habilita la autentificación en 2 pasos que requiere de la introducción de un "
+"token generado por una aplicación como Google Authenticator."
+msgstr ""
+
+#: ../../../../inc/themes/classic/security.inc:21
+#: ../../../../inc/themes/material-blue/security.inc:19
+msgid ""
+"Escanee el código QR proporcionado y a continuación introduzca la clave de 6 "
+"dígitos."
+msgstr ""
+
+#: ../../../../inc/themes/classic/security.inc:29
+#: ../../../../inc/themes/material-blue/security.inc:27
+msgid "Activar"
+msgstr "Aktivieren"
+
+#: ../../../../inc/themes/classic/security.inc:34
+#: ../../../../inc/themes/material-blue/security.inc:33
+msgid "Error al obtener el código QR. Inténtelo de nuevo"
+msgstr ""
+
+#: ../../../../inc/themes/classic/security.inc:39
+#: ../../../../inc/themes/material-blue/security.inc:41
+msgid "Código"
+msgstr ""
+
+#: ../../../../inc/themes/classic/security.inc:44
+#: ../../../../inc/themes/material-blue/security.inc:46
+msgid ""
+"Una vez activada, sólo es posible acceder si se dispone del dispositivo "
+"generador de códigos asociado."
+msgstr ""
+
+#: ../../../../inc/themes/classic/sessionbar.inc:6
+#: ../../../../inc/themes/material-blue/footer.inc:7
+msgid "Cambiar clave de usuario"
+msgstr "Benutzerpasswort ändern"
+
+#: ../../../../inc/themes/classic/sessionbar.inc:9
+msgid "Preferencias"
+msgstr "Vorlieben"
+
+#: ../../../../inc/themes/classic/sessionbar.inc:15
+#: ../../../../inc/themes/material-blue/footer.inc:5
+msgid "Salir"
+msgstr "Abmelden"
+
+#: ../../../../inc/themes/classic/tokens.inc:34
+#: ../../../../inc/themes/classic/users.inc:98
+#: ../../../../inc/themes/material-blue/tokens.inc:34
+#: ../../../../inc/themes/material-blue/users.inc:132
+msgid "Opciones"
+msgstr "Optionen"
+
+#: ../../../../inc/themes/classic/tokens.inc:38
+#: ../../../../inc/themes/material-blue/tokens.inc:37
+#: ../../../../inc/themes/material-blue/tokens.inc:40
+msgid "Regenerar Autorización"
+msgstr ""
+
+#: ../../../../inc/themes/classic/tokens.inc:43
+#: ../../../../inc/themes/material-blue/tokens.inc:46
+msgid "Token"
+msgstr ""
+
+#: ../../../../inc/themes/classic/update.inc:18
+#: ../../../../inc/themes/material-blue/update.inc:20
+msgid "Actualizado"
+msgstr "Aktualisiert"
+
+#: ../../../../inc/themes/classic/update.inc:23
+#: ../../../../inc/themes/material-blue/update.inc:22
+msgid "Error al comprobar actualizaciones"
+msgstr ""
+
+#: ../../../../inc/themes/classic/upgrade.inc:8
+#: ../../../../inc/themes/material-blue/upgrade.inc:8
+msgid "Actualización de BBDD"
+msgstr "Datenbank-Update"
+
+#: ../../../../inc/themes/classic/upgrade.inc:10
+msgid "Introducir Código de Seguridad"
+msgstr "Sicherheitscode eingeben"
+
+#: ../../../../inc/themes/classic/upgrade.inc:11
+#: ../../../../inc/themes/material-blue/upgrade.inc:14
+msgid "Código de Seguridad"
+msgstr "Sicherheitscode"
+
+#: ../../../../inc/themes/classic/upgrade.inc:21
+#: ../../../../inc/themes/material-blue/upgrade.inc:25
+msgid "Iniciar Actualización"
+msgstr "Aktualisierung starten"
+
+#: ../../../../inc/themes/classic/users.inc:12
+#: ../../../../inc/themes/material-blue/users.inc:15
+msgid "Nombre de usuario completo"
+msgstr "Volständiger Benutzername"
+
+#: ../../../../inc/themes/classic/users.inc:25
+#: ../../../../inc/themes/material-blue/users.inc:31
+msgid "Login de inicio de sesión"
+msgstr "Sitzungs-Anmeldung"
+
+#: ../../../../inc/themes/classic/users.inc:64
+#: ../../../../inc/themes/material-blue/users.inc:78
+msgid "Dirección de correo"
+msgstr "E-Mail-Adresse"
+
+#: ../../../../inc/themes/classic/users.inc:103
+#: ../../../../inc/themes/material-blue/users.inc:136
+msgid "Administrador de la aplicación"
+msgstr "Anwendungs-Administrator"
+
+#: ../../../../inc/themes/classic/users.inc:103
+#: ../../../../inc/themes/material-blue/users.inc:139
+msgid "Admin. Aplicación"
+msgstr "Anwendungs-Administrator"
+
+#: ../../../../inc/themes/classic/users.inc:107
+#: ../../../../inc/themes/material-blue/users.inc:143
+msgid "Administrador de cuentas"
+msgstr "Anwendungs-Administrator"
+
+#: ../../../../inc/themes/classic/users.inc:107
+#: ../../../../inc/themes/material-blue/users.inc:146
+msgid "Admin. Cuentas"
+msgstr "Konto-Administrator"
+
+#: ../../../../inc/themes/classic/users.inc:117
+#: ../../../../inc/themes/material-blue/users.inc:158
+msgid "Forzar cambio de clave"
+msgstr "Erzwinge Passwortänderung"
+
+#: ../../../../inc/themes/classic/users.inc:154
+#: ../../../../inc/themes/material-blue/users.inc:198
+msgid "Entradas"
+msgstr "Einträge"
+
+#: ../../../../inc/themes/classic/users.inc:159
+#: ../../../../inc/themes/material-blue/users.inc:203
+msgid "Último Acceso"
+msgstr "Letzter Zugriff"
+
+#: ../../../../inc/themes/classic/users.inc:169
+#: ../../../../inc/themes/material-blue/users.inc:213
+msgid "Fecha Clave Maestra"
+msgstr "Datum des Master-Passworts"
+
+#: ../../../../inc/themes/classic/wiki.inc:11
+#: ../../../../inc/themes/material-blue/wiki.inc:11
+msgid "Habilitar enlaces Wiki"
+msgstr "Wike-Links einschalten"
+
+#: ../../../../inc/themes/classic/wiki.inc:15
+#: ../../../../inc/themes/material-blue/wiki.inc:15
+msgid ""
+"Habilita la opción de añadir un enlace a Wiki externa para los resultados de "
+"la búsqueda."
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:27
+#: ../../../../inc/themes/material-blue/wiki.inc:30
+#: ../../../../inc/themes/material-blue/wiki.inc:56
+msgid "URL de búsqueda Wiki"
+msgstr "Wiki Such-URL"
+
+#: ../../../../inc/themes/classic/wiki.inc:31
+#: ../../../../inc/themes/material-blue/wiki.inc:34
+msgid "URL que utiliza la wiki para realizar una búsqueda de una página."
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:35
+#: ../../../../inc/themes/material-blue/wiki.inc:38
+msgid "Como parámetro se utiliza el nombre del cliente."
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:39
+#: ../../../../inc/themes/classic/wiki.inc:66
+#: ../../../../inc/themes/material-blue/wiki.inc:42
+#: ../../../../inc/themes/material-blue/wiki.inc:74
+msgid "Ejemplo:"
+msgstr "Beispiel:"
+
+#: ../../../../inc/themes/classic/wiki.inc:54
+#: ../../../../inc/themes/material-blue/wiki.inc:62
+#: ../../../../inc/themes/material-blue/wiki.inc:87
+msgid "URL de página en Wiki"
+msgstr "Wiki URL"
+
+#: ../../../../inc/themes/classic/wiki.inc:58
+#: ../../../../inc/themes/material-blue/wiki.inc:66
+msgid "URL que utiliza la wiki para acceder a los detalles de una página."
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:62
+#: ../../../../inc/themes/material-blue/wiki.inc:70
+msgid ""
+"El nombre de la cuenta se utiliza como parámetro de la variable de búsqueda "
+"de la Wiki."
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:81
+#: ../../../../inc/themes/material-blue/wiki.inc:93
+msgid "Prefijo para nombre de cuenta"
+msgstr "Präfix eines Kontonamens"
+
+#: ../../../../inc/themes/classic/wiki.inc:85
+#: ../../../../inc/themes/material-blue/wiki.inc:97
+msgid ""
+"Prefijo para determinar qué cuentas tienen un enlace a una página de la Wiki."
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:121
+#: ../../../../inc/themes/material-blue/wiki.inc:135
+msgid "Añadir filtro"
+msgstr "Filter hinzufügen"
+
+#: ../../../../inc/themes/classic/wiki.inc:122
+#: ../../../../inc/themes/material-blue/wiki.inc:136
+msgid "Eliminar filtro"
+msgstr "Filter löschen"
+
+#: ../../../../inc/themes/material-blue/account.inc:4
+msgid "Histórico"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/account.inc:42
+msgid "Seleccionar o escribir para crear uno nuevo"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/account.inc:110
+msgid "Clave (Repetir)"
+msgstr "Passwort (wiederholen)"
+
+#: ../../../../inc/themes/material-blue/backup.inc:58
+#: ../../../../inc/themes/material-blue/backup.inc:144
+#: ../../../../inc/themes/material-blue/encryption.inc:118
+#: ../../../../inc/themes/material-blue/import.inc:217
+msgid "Realizar"
+msgstr "Ausführen"
+
+#: ../../../../inc/themes/material-blue/config.inc:195
+msgid "Número de resultados por página"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/config.inc:290
+msgid "Tamaño máximo de archivo en bytes"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/config.inc:297
+msgid "Proxy"
+msgstr "Proxy"
+
+#: ../../../../inc/themes/material-blue/config.inc:303
+msgid "Usar Proxy"
+msgstr "Proxy benutzen"
+
+#: ../../../../inc/themes/material-blue/config.inc:324
+msgid "Servidor proxy"
+msgstr "Proxyserver"
+
+#: ../../../../inc/themes/material-blue/config.inc:338
+msgid "Puerto del servidor proxy"
+msgstr "Proxyserver Port"
+
+#: ../../../../inc/themes/material-blue/config.inc:352
+msgid "Usuario del servidor proxy"
+msgstr "Proxyserver Benutzer"
+
+#: ../../../../inc/themes/material-blue/config.inc:366
+msgid "Clave del servidor proxy"
+msgstr "Proxyserver Passwort"
+
+#: ../../../../inc/themes/material-blue/customfields.inc:14
+msgid "Nombre del campo"
+msgstr "Feldname"
+
+#: ../../../../inc/themes/material-blue/customfields.inc:47
+msgid "Ayuda del campo"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/footer.inc:11
+msgid "Preferencias de usuario"
+msgstr "Benutzereinstellungen"
+
+#: ../../../../inc/themes/material-blue/import.inc:104
+msgid ""
+"Permite realizar la importación de Cuentas, Categorías y Clientes desde "
+"archivos XML y CSV."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/install.inc:31
+msgid "Usuario administrador de sysPass"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/install.inc:78
+msgid "Usuario acceso BBDD"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/install.inc:83
+msgid "Usuario con permisos de administrador de MySQL"
+msgstr "Benutzer mit MySQL Admin Rechte"
+
+#: ../../../../inc/themes/material-blue/install.inc:90
+msgid "Clave acceso BBDD"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/install.inc:97
+msgid "Nombre BBDD para sysPass"
+msgstr "sysPass Datenbankname"
+
+#: ../../../../inc/themes/material-blue/install.inc:109
+msgid "Servidor BBDD para sysPass"
+msgstr "sysPass Datenbankserver"
+
+#: ../../../../inc/themes/material-blue/install.inc:114
+msgid "Nombre del servidor para instalar la base de datos de sysPass"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/ldap.inc:96
+msgid "Clave del usuario de conexión a LDAP."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/mail.inc:118
+msgid ""
+"Habilita que los usuarios puedan solicitar modificaciones o acceso a las "
+"cuentas sin permisos."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/profiles.inc:25
+msgid "Crear nueva cuenta"
+msgstr "Neuen Account erstellen"
+
+#: ../../../../inc/themes/material-blue/profiles.inc:25
+msgid "Crear"
+msgstr "Erstellen"
+
+#: ../../../../inc/themes/material-blue/profiles.inc:55
+msgid "Eliminar cuenta"
+msgstr "Account löschen"
+
+#: ../../../../inc/themes/material-blue/profiles.inc:55
+msgid "Eliminar"
+msgstr "Löschen"
+
+#: ../../../../inc/themes/material-blue/profiles.inc:60
+msgid "Var archivos de cuenta"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/profiles.inc:77
+msgid "Opciones de encriptación"
+msgstr "Verschlüsselungsoptionen"
+
+#: ../../../../inc/themes/material-blue/profiles.inc:82
+msgid "Realizar copia de seguridad y exportar"
+msgstr "Backup erstellen und exportieren"
+
+#: ../../../../inc/themes/material-blue/security.inc:4
+msgid "Autentificación"
+msgstr "Authentifizierung"
diff --git a/inc/locales/en_US/LC_MESSAGES/messages.mo b/inc/locales/en_US/LC_MESSAGES/messages.mo
index 5abaa3c4..ea23fe2c 100644
Binary files a/inc/locales/en_US/LC_MESSAGES/messages.mo and b/inc/locales/en_US/LC_MESSAGES/messages.mo differ
diff --git a/inc/locales/en_US/LC_MESSAGES/messages.po b/inc/locales/en_US/LC_MESSAGES/messages.po
index 8803ca4a..f1e2f590 100644
--- a/inc/locales/en_US/LC_MESSAGES/messages.po
+++ b/inc/locales/en_US/LC_MESSAGES/messages.po
@@ -8,10 +8,10 @@ msgid ""
msgstr ""
"Project-Id-Version: sysPass\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-07-28 18:43+0100\n"
-"PO-Revision-Date: 2015-07-28 18:43+0100\n"
-"Last-Translator: nuxsmin \n"
-"Language-Team: \n"
+"POT-Creation-Date: 2015-09-23 12:58+0100\n"
+"PO-Revision-Date: 2015-09-23 12:59+0100\n"
+"Last-Translator: nuxsmin \n"
+"Language-Team: nuxsmin@syspass.org\n"
"Language: en_US\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -22,1800 +22,1912 @@ msgstr ""
"X-Generator: Poedit 1.6.10\n"
"X-Poedit-SearchPath-0: ../../../..\n"
-#: ../../../../ajax/ajax_accountSave.php:33
-#: ../../../../ajax/ajax_appMgmtSave.php:34
-#: ../../../../ajax/ajax_backup.php:32 ../../../../ajax/ajax_checkLdap.php:32
-#: ../../../../ajax/ajax_configSave.php:33 ../../../../ajax/ajax_import.php:1
-#: ../../../../ajax/ajax_migrate.php:1
-#: ../../../../ajax/ajax_sendRequest.php:32
-msgid "La sesión no se ha iniciado o ha caducado"
-msgstr "Session not started or timed out"
-
-#: ../../../../ajax/ajax_accountSave.php:39
-#: ../../../../ajax/ajax_appMgmtSave.php:40
-#: ../../../../ajax/ajax_backup.php:38 ../../../../ajax/ajax_checkLdap.php:38
-#: ../../../../ajax/ajax_configSave.php:39 ../../../../ajax/ajax_files.php:40
-#: ../../../../ajax/ajax_getFiles.php:43 ../../../../ajax/ajax_import.php:1
-#: ../../../../ajax/ajax_migrate.php:1 ../../../../ajax/ajax_passReset.php:34
-#: ../../../../ajax/ajax_search.php:38
-#: ../../../../ajax/ajax_sendRequest.php:38
+#: ../../../../ajax/ajax_2fa.php:35 ../../../../ajax/ajax_accountSave.php:41
+#: ../../../../ajax/ajax_appMgmtSave.php:42
+#: ../../../../ajax/ajax_backup.php:39 ../../../../ajax/ajax_checkLdap.php:41
+#: ../../../../ajax/ajax_configSave.php:41 ../../../../ajax/ajax_files.php:41
+#: ../../../../ajax/ajax_getFiles.php:46 ../../../../ajax/ajax_import.php:49
+#: ../../../../ajax/ajax_migrate.php:45 ../../../../ajax/ajax_passReset.php:37
+#: ../../../../ajax/ajax_search.php:41
+#: ../../../../ajax/ajax_sendRequest.php:41
+#: ../../../../ajax/ajax_userPrefsSave.php:42
msgid "CONSULTA INVÁLIDA"
msgstr "INVALID QUERY"
-#: ../../../../ajax/ajax_accountSave.php:67
-#: ../../../../ajax/ajax_accountSave.php:92
+#: ../../../../ajax/ajax_2fa.php:55
+msgid "Código correcto"
+msgstr "Verified code"
+
+#: ../../../../ajax/ajax_2fa.php:58 ../../../../ajax/ajax_userPrefsSave.php:66
+msgid "Código incorrecto"
+msgstr "Wrong code"
+
+#: ../../../../ajax/ajax_accountSave.php:35
+#: ../../../../ajax/ajax_appMgmtSave.php:36
+#: ../../../../ajax/ajax_backup.php:33 ../../../../ajax/ajax_checkLdap.php:35
+#: ../../../../ajax/ajax_configSave.php:35 ../../../../ajax/ajax_import.php:35
+#: ../../../../ajax/ajax_migrate.php:35
+#: ../../../../ajax/ajax_sendRequest.php:35
+#: ../../../../ajax/ajax_userPrefsSave.php:36
+#: ../../../../ajax/ajax_viewpass.php:36
+msgid "La sesión no se ha iniciado o ha caducado"
+msgstr "Session not started or timed out"
+
+#: ../../../../ajax/ajax_accountSave.php:75
+#: ../../../../ajax/ajax_accountSave.php:90
msgid "Es necesario un nombre de cuenta"
msgstr "An account name needed"
-#: ../../../../ajax/ajax_accountSave.php:71
+#: ../../../../ajax/ajax_accountSave.php:77
#: ../../../../ajax/ajax_accountSave.php:88
-#: ../../../../ajax/ajax_appMgmtSave.php:327
+#: ../../../../ajax/ajax_appMgmtSave.php:337
msgid "Es necesario un nombre de cliente"
msgstr "A customer name needed"
-#: ../../../../ajax/ajax_accountSave.php:75
-#: ../../../../ajax/ajax_accountSave.php:96
+#: ../../../../ajax/ajax_accountSave.php:79
+#: ../../../../ajax/ajax_accountSave.php:92
msgid "Es necesario un usuario"
msgstr "An username is needed"
-#: ../../../../ajax/ajax_accountSave.php:79
-msgid "Es necesario una clave"
-msgstr "A password is needed"
+#: ../../../../ajax/ajax_accountSave.php:81
+#: ../../../../ajax/ajax_accountSave.php:103
+msgid "Es necesaria una clave"
+msgstr "A key is needed"
#: ../../../../ajax/ajax_accountSave.php:83
-#: ../../../../ajax/ajax_accountSave.php:109
-#: ../../../../ajax/ajax_appMgmtSave.php:123
-#: ../../../../ajax/ajax_appMgmtSave.php:149
-msgid "Las claves no coinciden"
-msgstr "The passwords do not match"
+#: ../../../../ajax/ajax_accountSave.php:94
+msgid "Es necesario una categoría"
+msgstr "A category is needed"
-#: ../../../../ajax/ajax_accountSave.php:100
-#: ../../../../ajax/ajax_accountSave.php:113
+#: ../../../../ajax/ajax_accountSave.php:98
+#: ../../../../ajax/ajax_accountSave.php:107
msgid "Id inválido"
msgstr "Invalid Id"
-#: ../../../../ajax/ajax_accountSave.php:105
-#: ../../../../ajax/ajax_appMgmtSave.php:119
-#: ../../../../ajax/ajax_appMgmtSave.php:145
-msgid "La clave no puede estar en blanco"
-msgstr "Password cannot be blank"
-
-#: ../../../../ajax/ajax_accountSave.php:116
-#: ../../../../ajax/ajax_accountSave.php:264
-#: ../../../../ajax/ajax_appMgmtSave.php:179
-#: ../../../../ajax/ajax_appMgmtSave.php:240
-#: ../../../../ajax/ajax_appMgmtSave.php:318
-#: ../../../../ajax/ajax_appMgmtSave.php:369
-#: ../../../../ajax/ajax_appMgmtSave.php:418
-#: ../../../../ajax/ajax_configSave.php:239
+#: ../../../../ajax/ajax_accountSave.php:110
+#: ../../../../ajax/ajax_accountSave.php:263
+#: ../../../../ajax/ajax_appMgmtSave.php:543
+#: ../../../../ajax/ajax_configSave.php:297
+#: ../../../../ajax/ajax_userPrefsSave.php:79 ../../../../api.php:53
msgid "Acción Inválida"
msgstr "Invalid Action"
#: ../../../../ajax/ajax_accountSave.php:122
-#: ../../../../inc/import.class.php:240
-msgid "No se puede usar el módulo de encriptación"
-msgstr "Crypto module cannot be loaded"
+#: ../../../../ajax/ajax_appMgmtSave.php:111
+#: ../../../../ajax/ajax_appMgmtSave.php:155
+#: ../../../../ajax/ajax_backup.php:70
+msgid "Las claves no coinciden"
+msgstr "The passwords do not match"
-#: ../../../../ajax/ajax_accountSave.php:129
-#: ../../../../inc/import.class.php:247
-msgid "Error al generar datos cifrados"
-msgstr "Error on creating encryption data"
-
-#: ../../../../ajax/ajax_accountSave.php:144
-#: ../../../../ajax/ajax_accountSave.php:193
-msgid "Cliente duplicado"
-msgstr "Duplicated customer"
-
-#: ../../../../ajax/ajax_accountSave.php:148
-#: ../../../../ajax/ajax_accountSave.php:197
-#: ../../../../ajax/ajax_appMgmtSave.php:341
-msgid "Error al crear el cliente"
-msgstr "Error on creating customer"
-
-#: ../../../../ajax/ajax_accountSave.php:172
+#: ../../../../ajax/ajax_accountSave.php:173
msgid "Cuenta creada"
msgstr "Account added"
-#: ../../../../ajax/ajax_accountSave.php:174
+#: ../../../../ajax/ajax_accountSave.php:176
msgid "Error al crear la cuenta"
msgstr "Error on account creation"
-#: ../../../../ajax/ajax_accountSave.php:207
+#: ../../../../ajax/ajax_accountSave.php:211
msgid "Sin cambios"
msgstr "No changes"
-#: ../../../../ajax/ajax_accountSave.php:212
-#: ../../../../inc/account.class.php:369
+#: ../../../../ajax/ajax_accountSave.php:223
msgid "Cuenta actualizada"
msgstr "Account updated"
-#: ../../../../ajax/ajax_accountSave.php:214
+#: ../../../../ajax/ajax_accountSave.php:226
msgid "Error al modificar la cuenta"
msgstr "Error on updating account"
-#: ../../../../ajax/ajax_accountSave.php:221
+#: ../../../../ajax/ajax_accountSave.php:233
msgid "Cuenta eliminada"
msgstr "Account deleted"
-#: ../../../../ajax/ajax_accountSave.php:223
+#: ../../../../ajax/ajax_accountSave.php:236
msgid "Error al eliminar la cuenta"
msgstr "Error on account deletion"
-#: ../../../../ajax/ajax_accountSave.php:233
-#: ../../../../ajax/ajax_appMgmtSave.php:156
-#: ../../../../ajax/ajax_passReset.php:79
+#: ../../../../ajax/ajax_accountSave.php:246
+#: ../../../../ajax/ajax_appMgmtSave.php:161
+#: ../../../../ajax/ajax_passReset.php:74
msgid "Clave actualizada"
msgstr "Password updated"
-#: ../../../../ajax/ajax_accountSave.php:235
+#: ../../../../ajax/ajax_accountSave.php:249
msgid "Error al actualizar la clave"
msgstr "Error on updating password"
-#: ../../../../ajax/ajax_accountSave.php:258
+#: ../../../../ajax/ajax_accountSave.php:256
msgid "Cuenta restaurada"
msgstr "Account restored"
-#: ../../../../ajax/ajax_accountSave.php:261
+#: ../../../../ajax/ajax_accountSave.php:259
msgid "Error al restaurar cuenta"
msgstr "Error on restoring account"
-#: ../../../../ajax/ajax_appMgmtData.php:46
-#: ../../../../ajax/ajax_getContent.php:137
+#: ../../../../ajax/ajax_appMgmtData.php:54
+msgid "Ver Usuario"
+msgstr "View User"
+
+#: ../../../../ajax/ajax_appMgmtData.php:61
+#: ../../../../web/UsersMgmtC.class.php:136
msgid "Editar Usuario"
msgstr "Edit User"
-#: ../../../../ajax/ajax_appMgmtData.php:51
-#: ../../../../ajax/ajax_getContent.php:135
-#: ../../../../inc/users.class.php:816
+#: ../../../../ajax/ajax_appMgmtData.php:67
+#: ../../../../inc/UserBase.class.php:381
+#: ../../../../web/UsersMgmtC.class.php:121
msgid "Nuevo Usuario"
msgstr "New User"
-#: ../../../../ajax/ajax_appMgmtData.php:56
-#: ../../../../ajax/ajax_getContent.php:168
+#: ../../../../ajax/ajax_appMgmtData.php:73
+msgid "Ver Grupo"
+msgstr "View Group"
+
+#: ../../../../ajax/ajax_appMgmtData.php:80
+#: ../../../../web/UsersMgmtC.class.php:202
msgid "Editar Grupo"
msgstr "Edit Group"
-#: ../../../../ajax/ajax_appMgmtData.php:61
-#: ../../../../ajax/ajax_getContent.php:167
-#: ../../../../inc/groups.class.php:154
+#: ../../../../ajax/ajax_appMgmtData.php:86
+#: ../../../../inc/Groups.class.php:152 ../../../../inc/Groups.class.php:253
+#: ../../../../web/UsersMgmtC.class.php:194
msgid "Nuevo Grupo"
msgstr "New Group"
-#: ../../../../ajax/ajax_appMgmtData.php:66
-#: ../../../../ajax/ajax_getContent.php:200
+#: ../../../../ajax/ajax_appMgmtData.php:92
+msgid "Ver Perfil"
+msgstr "View Profile"
+
+#: ../../../../ajax/ajax_appMgmtData.php:99
+#: ../../../../web/UsersMgmtC.class.php:267
msgid "Editar Perfil"
msgstr "Edit Profile"
-#: ../../../../ajax/ajax_appMgmtData.php:71
-#: ../../../../ajax/ajax_getContent.php:199
-#: ../../../../inc/profiles.class.php:206
+#: ../../../../ajax/ajax_appMgmtData.php:105
+#: ../../../../inc/ProfileBase.class.php:512
+#: ../../../../web/UsersMgmtC.class.php:252
msgid "Nuevo Perfil"
msgstr "New Profile"
-#: ../../../../ajax/ajax_appMgmtData.php:76
-#: ../../../../ajax/ajax_getContent.php:285
+#: ../../../../ajax/ajax_appMgmtData.php:111
+msgid "Ver Cliente"
+msgstr "View Customer"
+
+#: ../../../../ajax/ajax_appMgmtData.php:118
+#: ../../../../web/AccountsMgmtC.class.php:152
msgid "Editar Cliente"
msgstr "Edit Customer"
-#: ../../../../ajax/ajax_appMgmtData.php:81
-#: ../../../../ajax/ajax_getContent.php:284
-#: ../../../../inc/customer.class.php:58
+#: ../../../../ajax/ajax_appMgmtData.php:124
+#: ../../../../inc/Customer.class.php:65
+#: ../../../../web/AccountsMgmtC.class.php:145
msgid "Nuevo Cliente"
msgstr "New Customer"
-#: ../../../../ajax/ajax_appMgmtData.php:86
-#: ../../../../ajax/ajax_getContent.php:253
+#: ../../../../ajax/ajax_appMgmtData.php:130
+msgid "Ver Categoría"
+msgstr "View Category"
+
+#: ../../../../ajax/ajax_appMgmtData.php:137
+#: ../../../../web/AccountsMgmtC.class.php:94
msgid "Editar Categoría"
msgstr "Edit Category"
-#: ../../../../ajax/ajax_appMgmtData.php:91
-#: ../../../../ajax/ajax_getContent.php:252
-#: ../../../../inc/category.class.php:79
+#: ../../../../ajax/ajax_appMgmtData.php:143
+#: ../../../../inc/Category.class.php:83
+#: ../../../../web/AccountsMgmtC.class.php:86
msgid "Nueva Categoría"
msgstr "New Category"
-#: ../../../../ajax/ajax_appMgmtSave.php:76
+#: ../../../../ajax/ajax_appMgmtData.php:149
+msgid "Ver Autorización"
+msgstr "View Authorization"
+
+#: ../../../../ajax/ajax_appMgmtData.php:156
+#: ../../../../inc/ApiTokens.class.php:189
+#: ../../../../web/UsersMgmtC.class.php:399
+msgid "Nueva Autorización"
+msgstr "New Authorization"
+
+#: ../../../../ajax/ajax_appMgmtData.php:162
+#: ../../../../web/UsersMgmtC.class.php:414
+msgid "Editar Autorización"
+msgstr "Edit authorization"
+
+#: ../../../../ajax/ajax_appMgmtData.php:168
+#: ../../../../web/AccountsMgmtC.class.php:273
+msgid "Nuevo Campo"
+msgstr "New Field"
+
+#: ../../../../ajax/ajax_appMgmtData.php:174
+#: ../../../../web/AccountsMgmtC.class.php:280
+msgid "Editar Campo"
+msgstr "Edit field"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:85
msgid "Es necesario un nombre de usuario"
msgstr "An username is needed"
-#: ../../../../ajax/ajax_appMgmtSave.php:80
+#: ../../../../ajax/ajax_appMgmtSave.php:87
msgid "Es necesario un login"
msgstr "A login is needed"
-#: ../../../../ajax/ajax_appMgmtSave.php:84
+#: ../../../../ajax/ajax_appMgmtSave.php:89
msgid "Es necesario un perfil"
msgstr "A profile is needed"
-#: ../../../../ajax/ajax_appMgmtSave.php:88
+#: ../../../../ajax/ajax_appMgmtSave.php:91
msgid "Es necesario un grupo"
msgstr "A group is needed"
-#: ../../../../ajax/ajax_appMgmtSave.php:92
+#: ../../../../ajax/ajax_appMgmtSave.php:93
msgid "Es necesario un email"
msgstr "An email is needed"
-#: ../../../../ajax/ajax_appMgmtSave.php:110
-msgid "Login de usuario duplicado"
-msgstr "Duplicated user login "
-
-#: ../../../../ajax/ajax_appMgmtSave.php:113
-msgid "Email de usuario duplicado"
-msgstr "Duplicated user email"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:127
-msgid "Usuario creado"
-msgstr "User added"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:130
-msgid "Error al crear el usuario"
-msgstr "Error on creating user"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:133
-#: ../../../../inc/users.class.php:228
-msgid "Usuario actualizado"
-msgstr "User updated"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:136
-msgid "Error al actualizar el usuario"
-msgstr "Error on user update"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:141
-#: ../../../../ajax/ajax_appMgmtSave.php:163
-#: ../../../../ajax/ajax_configSave.php:214 ../../../../ajax/ajax_import.php:1
-#: ../../../../ajax/ajax_migrate.php:1
+#: ../../../../ajax/ajax_appMgmtSave.php:95
+#: ../../../../ajax/ajax_appMgmtSave.php:144
+#: ../../../../ajax/ajax_appMgmtSave.php:168
+#: ../../../../ajax/ajax_configSave.php:272
+#: ../../../../ajax/ajax_import.php:39 ../../../../ajax/ajax_migrate.php:39
+#: ../../../../ajax/ajax_userPrefsSave.php:55
msgid "Ey, esto es una DEMO!!"
msgstr "Ey, this is a DEMO!!"
-#: ../../../../ajax/ajax_appMgmtSave.php:159
-#: ../../../../ajax/ajax_passReset.php:83
+#: ../../../../ajax/ajax_appMgmtSave.php:100
+msgid "Login de usuario duplicado"
+msgstr "Duplicated user login "
+
+#: ../../../../ajax/ajax_appMgmtSave.php:103
+msgid "Email de usuario duplicado"
+msgstr "Duplicated user email"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:109
+#: ../../../../ajax/ajax_appMgmtSave.php:146
+msgid "La clave no puede estar en blanco"
+msgstr "Password cannot be blank"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:122
+msgid "Usuario creado"
+msgstr "User added"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:125
+msgid "Error al crear el usuario"
+msgstr "Error on creating user"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:135
+#: ../../../../inc/UserUtil.class.php:103
+msgid "Usuario actualizado"
+msgstr "User updated"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:138
+msgid "Error al actualizar el usuario"
+msgstr "Error on user update"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:164
+#: ../../../../ajax/ajax_passReset.php:78
msgid "Error al modificar la clave"
msgstr "Error on updating password"
-#: ../../../../ajax/ajax_appMgmtSave.php:169
+#: ../../../../ajax/ajax_appMgmtSave.php:170
msgid "No es posible eliminar, usuario en uso"
msgstr "Unable to delete, user in use"
-#: ../../../../ajax/ajax_appMgmtSave.php:173
+#: ../../../../ajax/ajax_appMgmtSave.php:174
msgid "Usuario eliminado"
msgstr "User deleted"
-#: ../../../../ajax/ajax_appMgmtSave.php:176
+#: ../../../../ajax/ajax_appMgmtSave.php:177
msgid "Error al eliminar el usuario"
msgstr "Error on user deletion"
-#: ../../../../ajax/ajax_appMgmtSave.php:188
+#: ../../../../ajax/ajax_appMgmtSave.php:192
msgid "Es necesario un nombre de grupo"
msgstr "A group name is needed"
-#: ../../../../ajax/ajax_appMgmtSave.php:196
+#: ../../../../ajax/ajax_appMgmtSave.php:200
msgid "Nombre de grupo duplicado"
msgstr "Duplicated group name"
-#: ../../../../ajax/ajax_appMgmtSave.php:201
+#: ../../../../ajax/ajax_appMgmtSave.php:212
msgid "Grupo creado"
msgstr "Group added"
-#: ../../../../ajax/ajax_appMgmtSave.php:203
+#: ../../../../ajax/ajax_appMgmtSave.php:214
msgid "Error al crear el grupo"
msgstr "Error on group creation"
-#: ../../../../ajax/ajax_appMgmtSave.php:207
+#: ../../../../ajax/ajax_appMgmtSave.php:225
msgid "Grupo actualizado"
msgstr "Group updated"
-#: ../../../../ajax/ajax_appMgmtSave.php:210
+#: ../../../../ajax/ajax_appMgmtSave.php:228
msgid "Error al actualizar el grupo"
msgstr "Error on updating group"
-#: ../../../../ajax/ajax_appMgmtSave.php:221
-#: ../../../../ajax/ajax_appMgmtSave.php:298
-#: ../../../../inc/tpl/accounts.php:283 ../../../../inc/tpl/profiles.php:88
+#: ../../../../ajax/ajax_appMgmtSave.php:237
+#: ../../../../ajax/ajax_appMgmtSave.php:314
+#: ../../../../inc/CustomFieldsBase.class.php:83
+#: ../../../../inc/themes/classic/account.inc:109
+#: ../../../../inc/themes/classic/groups.inc:24
+#: ../../../../inc/themes/classic/profiles.inc:85
+#: ../../../../inc/themes/material-blue/account.inc:134
+#: ../../../../inc/themes/material-blue/groups.inc:32
+#: ../../../../inc/themes/material-blue/profiles.inc:99
msgid "Usuarios"
msgstr "Users"
-#: ../../../../ajax/ajax_appMgmtSave.php:225
-#: ../../../../ajax/ajax_appMgmtSave.php:356
-#: ../../../../inc/category.class.php:271 ../../../../inc/tpl/profiles.php:45
+#: ../../../../ajax/ajax_appMgmtSave.php:241
+#: ../../../../inc/Category.class.php:266
+#: ../../../../inc/CustomFieldsBase.class.php:80
+#: ../../../../inc/Customer.class.php:150
+#: ../../../../inc/themes/classic/profiles.inc:15
+#: ../../../../inc/themes/material-blue/config.inc:139
+#: ../../../../inc/themes/material-blue/profiles.inc:19
msgid "Cuentas"
msgstr "Accounts"
-#: ../../../../ajax/ajax_appMgmtSave.php:228
-#: ../../../../ajax/ajax_appMgmtSave.php:300
-#: ../../../../ajax/ajax_appMgmtSave.php:358
-#: ../../../../ajax/ajax_appMgmtSave.php:407
+#: ../../../../ajax/ajax_appMgmtSave.php:244
+#: ../../../../ajax/ajax_appMgmtSave.php:316
+#: ../../../../inc/Category.class.php:119
+#: ../../../../inc/Customer.class.php:150
msgid "No es posible eliminar"
msgstr "Unable to delete"
-#: ../../../../ajax/ajax_appMgmtSave.php:228
+#: ../../../../ajax/ajax_appMgmtSave.php:244
msgid "Grupo en uso por:"
msgstr "Group in use by:"
-#: ../../../../ajax/ajax_appMgmtSave.php:233
+#: ../../../../ajax/ajax_appMgmtSave.php:249
msgid "Grupo eliminado"
msgstr "Group deleted"
-#: ../../../../ajax/ajax_appMgmtSave.php:236
+#: ../../../../ajax/ajax_appMgmtSave.php:252
msgid "Error al eliminar el grupo"
msgstr "Error on group deletion"
-#: ../../../../ajax/ajax_appMgmtSave.php:270
+#: ../../../../ajax/ajax_appMgmtSave.php:291
msgid "Es necesario un nombre de perfil"
msgstr "A profile name is needed"
-#: ../../../../ajax/ajax_appMgmtSave.php:276
+#: ../../../../ajax/ajax_appMgmtSave.php:293
msgid "Nombre de perfil duplicado"
msgstr "Duplicated profile name"
-#: ../../../../ajax/ajax_appMgmtSave.php:281
+#: ../../../../ajax/ajax_appMgmtSave.php:298
msgid "Perfil creado"
msgstr "Profile added"
-#: ../../../../ajax/ajax_appMgmtSave.php:284
+#: ../../../../ajax/ajax_appMgmtSave.php:301
msgid "Error al crear el perfil"
msgstr "Error on creating profile"
-#: ../../../../ajax/ajax_appMgmtSave.php:287
+#: ../../../../ajax/ajax_appMgmtSave.php:304
msgid "Perfil actualizado"
msgstr "Profile updated"
-#: ../../../../ajax/ajax_appMgmtSave.php:290
+#: ../../../../ajax/ajax_appMgmtSave.php:307
msgid "Error al actualizar el perfil"
msgstr "Error on updating profile"
-#: ../../../../ajax/ajax_appMgmtSave.php:300
+#: ../../../../ajax/ajax_appMgmtSave.php:316
msgid "Perfil en uso por:"
msgstr "Profiles in use by:"
-#: ../../../../ajax/ajax_appMgmtSave.php:305
-#: ../../../../ajax/ajax_getContent.php:201
-msgid "Eliminar Perfil"
-msgstr "Delete Profile"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:306
-#: ../../../../ajax/ajax_doLogin.php:157
-#: ../../../../ajax/ajax_getContent.php:114
-#: ../../../../inc/profiles.class.php:207
-#: ../../../../inc/profiles.class.php:259 ../../../../inc/tpl/users.php:102
-msgid "Perfil"
-msgstr "Profile"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:311
+#: ../../../../ajax/ajax_appMgmtSave.php:319
msgid "Perfil eliminado"
msgstr "Profile deleted"
-#: ../../../../ajax/ajax_appMgmtSave.php:314
+#: ../../../../ajax/ajax_appMgmtSave.php:322
msgid "Error al eliminar el perfil"
msgstr "Error on profile deletion"
-#: ../../../../ajax/ajax_appMgmtSave.php:334
-msgid "Nombre de cliente duplicado"
-msgstr "Duplicated customer name"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:339
+#: ../../../../ajax/ajax_appMgmtSave.php:357
msgid "Cliente creado"
msgstr "Customer added"
-#: ../../../../ajax/ajax_appMgmtSave.php:345
+#: ../../../../ajax/ajax_appMgmtSave.php:372
msgid "Cliente actualizado"
msgstr "Customer updated"
-#: ../../../../ajax/ajax_appMgmtSave.php:348
-msgid "Error al actualizar el cliente"
-msgstr "Error on updating customer"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:358
-msgid "Cliente en uso por:"
-msgstr "Customer in use by:"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:362
+#: ../../../../ajax/ajax_appMgmtSave.php:382
msgid "Cliente eliminado"
msgstr "Customer deleted"
-#: ../../../../ajax/ajax_appMgmtSave.php:365
-msgid "Error al eliminar el cliente"
-msgstr "Error on customer deletion"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:378
+#: ../../../../ajax/ajax_appMgmtSave.php:396
msgid "Es necesario un nombre de categoría"
msgstr "A category name needed"
-#: ../../../../ajax/ajax_appMgmtSave.php:385
-msgid "Nombre de categoría duplicado"
-msgstr "Duplicated category name"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:390
+#: ../../../../ajax/ajax_appMgmtSave.php:416
msgid "Categoría creada"
msgstr "Category added"
-#: ../../../../ajax/ajax_appMgmtSave.php:392
-msgid "Error al crear la categoría"
-msgstr "Error on creating category"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:396
+#: ../../../../ajax/ajax_appMgmtSave.php:431
msgid "Categoría actualizada"
msgstr "Category updated"
-#: ../../../../ajax/ajax_appMgmtSave.php:399
-msgid "Error al actualizar la categoría"
-msgstr "Error on updating category"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:407
-msgid "Categoría en uso por:"
-msgstr "Category in use by:"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:411
+#: ../../../../ajax/ajax_appMgmtSave.php:442
msgid "Categoría eliminada"
msgstr "Category deleted"
-#: ../../../../ajax/ajax_appMgmtSave.php:414
-msgid "Error al eliminar la categoría"
-msgstr "Error on category deletion"
+#: ../../../../ajax/ajax_appMgmtSave.php:458
+msgid "Usuario o acción no indicado"
+msgstr "User or action not set"
-#: ../../../../ajax/ajax_backup.php:49
-msgid "Error al realizar el backup"
-msgstr "Error on doing backup"
+#: ../../../../ajax/ajax_appMgmtSave.php:468
+msgid "Autorización creada"
+msgstr "Authorization added"
-#: ../../../../ajax/ajax_backup.php:49 ../../../../ajax/ajax_checkLdap.php:54
-#: ../../../../inc/import.class.php:90 ../../../../inc/migrate.class.php:118
-msgid "Revise el registro de eventos para más detalles"
-msgstr "Please, check the event log for more details"
+#: ../../../../ajax/ajax_appMgmtSave.php:476
+msgid "Autorización actualizada"
+msgstr "Authorization Updated"
-#: ../../../../ajax/ajax_backup.php:52 ../../../../inc/tpl/backup.php:82
+#: ../../../../ajax/ajax_appMgmtSave.php:486
+msgid "Autorización eliminada"
+msgstr "Authorization deleted"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:503
+msgid "Nombre del campo no indicado"
+msgstr "Field name not set"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:505
+msgid "Tipo del campo no indicado"
+msgstr "Field type not set"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:507
+msgid "Módulo del campo no indicado"
+msgstr "Field module not set"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:521
+msgid "Campo creado"
+msgstr "Field added"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:530
+msgid "Campo actualizado"
+msgstr "Field updated"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:540
+msgid "Campo eliminado"
+msgstr "Field deleted"
+
+#: ../../../../ajax/ajax_backup.php:52 ../../../../ajax/ajax_backup.php:57
+#: ../../../../inc/themes/classic/backup.inc:54
msgid "Realizar Backup"
msgstr "Make Backup"
-#: ../../../../ajax/ajax_backup.php:53
+#: ../../../../ajax/ajax_backup.php:52 ../../../../ajax/ajax_backup.php:54
+msgid "Error al realizar el backup"
+msgstr "Error on doing backup"
+
+#: ../../../../ajax/ajax_backup.php:54 ../../../../ajax/ajax_backup.php:76
+#: ../../../../ajax/ajax_checkLdap.php:57 ../../../../inc/Import.class.php:128
+#: ../../../../inc/Migrate.class.php:93
+msgid "Revise el registro de eventos para más detalles"
+msgstr "Please, check the event log for more details"
+
+#: ../../../../ajax/ajax_backup.php:57
msgid "Copia de la aplicación y base de datos realizada correctamente"
msgstr "Application and database backup successfully done"
-#: ../../../../ajax/ajax_backup.php:58
+#: ../../../../ajax/ajax_backup.php:59
msgid "Proceso de backup finalizado"
msgstr "Backup process finished"
-#: ../../../../ajax/ajax_checkLdap.php:48 ../../../../inc/ldap.class.php:246
+#: ../../../../ajax/ajax_backup.php:66
+#: ../../../../ajax/ajax_configSave.php:244
+#: ../../../../ajax/ajax_doLogin.php:53 ../../../../ajax/ajax_import.php:56
+msgid "Error en clave RSA"
+msgstr "Error on RSA key"
+
+#: ../../../../ajax/ajax_backup.php:74 ../../../../ajax/ajax_backup.php:79
+msgid "Realizar Exportación"
+msgstr "Run Export"
+
+#: ../../../../ajax/ajax_backup.php:74
+msgid "Error al realizar la exportación de cuentas"
+msgstr "Error while exporting accounts"
+
+#: ../../../../ajax/ajax_backup.php:76
+msgid "Error al realizar la exportación"
+msgstr "Error doing export"
+
+#: ../../../../ajax/ajax_backup.php:79
+msgid "Exportación de cuentas realizada correctamente"
+msgstr "Export done successfully"
+
+#: ../../../../ajax/ajax_backup.php:81
+msgid "Proceso de exportación finalizado"
+msgstr "Export process finished"
+
+#: ../../../../ajax/ajax_checkLdap.php:51 ../../../../inc/Ldap.class.php:265
msgid "Los parámetros de LDAP no están configurados"
msgstr "LDAP parameters are not set"
-#: ../../../../ajax/ajax_checkLdap.php:54
+#: ../../../../ajax/ajax_checkLdap.php:57
msgid "Error de conexión a LDAP"
msgstr "Error on LDAP connection"
-#: ../../../../ajax/ajax_checkLdap.php:56
+#: ../../../../ajax/ajax_checkLdap.php:59
msgid "Conexión a LDAP correcta"
msgstr "LDAP connection OK"
-#: ../../../../ajax/ajax_checkLdap.php:56
+#: ../../../../ajax/ajax_checkLdap.php:59
msgid "Objetos encontrados"
msgstr "Objects found"
-#: ../../../../ajax/ajax_checkUpds.php:41
-msgid "Descargar nueva versión"
-msgstr "Download new version"
-
-#: ../../../../ajax/ajax_checkUpds.php:44
-msgid "Actualizado"
-msgstr "Updated"
-
-#: ../../../../ajax/ajax_configSave.php:96
-msgid "Faltan parámetros de Wiki"
-msgstr "Missing Wiki parameters"
-
-#: ../../../../ajax/ajax_configSave.php:107
-msgid "Faltan parámetros de LDAP"
-msgstr "Missing LDAP parameters"
-
-#: ../../../../ajax/ajax_configSave.php:123
-msgid "Faltan parámetros de Correo"
-msgstr "Missing Mail parameters"
-
-#: ../../../../ajax/ajax_configSave.php:144
-msgid "El tamaño máximo de archivo es de 16MB"
-msgstr "The maximum file upload size is 16MB"
-
-#: ../../../../ajax/ajax_configSave.php:161
+#: ../../../../ajax/ajax_configSave.php:55
msgid "Modificar Configuración"
msgstr "Edit Configuration"
-#: ../../../../ajax/ajax_configSave.php:169
+#: ../../../../ajax/ajax_configSave.php:100
+msgid "El tamaño máximo por archivo es de 16MB"
+msgstr "The maximum size per file is 16MB"
+
+#: ../../../../ajax/ajax_configSave.php:113
+msgid "Faltan parámetros de Proxy"
+msgstr "Missing proxy parameters "
+
+#: ../../../../ajax/ajax_configSave.php:124
+#: ../../../../web/ConfigC.class.php:126
+#: ../../../../inc/themes/classic/profiles.inc:61
+#: ../../../../inc/themes/material-blue/profiles.inc:72
+msgid "General"
+msgstr "General"
+
+#: ../../../../ajax/ajax_configSave.php:134
+msgid "Faltan parámetros de Wiki"
+msgstr "Missing Wiki parameters"
+
+#: ../../../../ajax/ajax_configSave.php:144
+#: ../../../../web/ConfigC.class.php:261
+#: ../../../../inc/themes/classic/wiki.inc:4
+#: ../../../../inc/themes/material-blue/wiki.inc:4
+msgid "Wiki"
+msgstr "Wiki"
+
+#: ../../../../ajax/ajax_configSave.php:159
+msgid "Faltan parámetros de LDAP"
+msgstr "Missing LDAP parameters"
+
+#: ../../../../ajax/ajax_configSave.php:174
+#: ../../../../web/ConfigC.class.php:293
+#: ../../../../inc/themes/classic/ldap.inc:4
+#: ../../../../inc/themes/material-blue/ldap.inc:4
+msgid "LDAP"
+msgstr "LDAP"
+
+#: ../../../../ajax/ajax_configSave.php:189
+msgid "Faltan parámetros de Correo"
+msgstr "Missing Mail parameters"
+
+#: ../../../../ajax/ajax_configSave.php:209
+#: ../../../../web/ConfigC.class.php:323
+#: ../../../../inc/themes/classic/mail.inc:4
+#: ../../../../inc/themes/material-blue/mail.inc:4
+msgid "Correo"
+msgstr "Mail"
+
+#: ../../../../ajax/ajax_configSave.php:221
msgid "Configuración actualizada"
msgstr "Configuration updated"
-#: ../../../../ajax/ajax_configSave.php:178
-#: ../../../../ajax/ajax_configSave.php:224
-#: ../../../../ajax/ajax_viewpass.php:68 ../../../../ajax/ajax_viewpass.php:70
-#: ../../../../inc/html.class.php:427
+#: ../../../../ajax/ajax_configSave.php:230
+#: ../../../../ajax/ajax_configSave.php:282
+#: ../../../../ajax/ajax_viewpass.php:60
+#: ../../../../inc/Controller.class.php:169
msgid "Clave maestra actualizada"
msgstr "Master Password updated"
-#: ../../../../ajax/ajax_configSave.php:178
-#: ../../../../ajax/ajax_viewpass.php:68 ../../../../ajax/ajax_viewpass.php:70
-#: ../../../../inc/html.class.php:427
+#: ../../../../ajax/ajax_configSave.php:230
+#: ../../../../ajax/ajax_viewpass.php:60
+#: ../../../../inc/Controller.class.php:169
msgid "Reinicie la sesión para cambiarla"
msgstr "Restart session to update"
-#: ../../../../ajax/ajax_configSave.php:182
+#: ../../../../ajax/ajax_configSave.php:232
msgid "Clave maestra no indicada"
msgstr "Master Password needed"
-#: ../../../../ajax/ajax_configSave.php:186
+#: ../../../../ajax/ajax_configSave.php:234
msgid "Se ha de confirmar el cambio de clave"
msgstr "The password update must be confirmed"
-#: ../../../../ajax/ajax_configSave.php:190
+#: ../../../../ajax/ajax_configSave.php:248
msgid "Las claves son idénticas"
msgstr "The passwords are the same"
-#: ../../../../ajax/ajax_configSave.php:194
+#: ../../../../ajax/ajax_configSave.php:250
msgid "Las claves maestras no coinciden"
msgstr "The master passwords do not match"
-#: ../../../../ajax/ajax_configSave.php:198
+#: ../../../../ajax/ajax_configSave.php:252
msgid "La clave maestra actual no coincide"
msgstr "The current master password does not match"
-#: ../../../../ajax/ajax_configSave.php:207
+#: ../../../../ajax/ajax_configSave.php:261
msgid "Errores al actualizar las claves de las cuentas"
msgstr "Error on updating accounts' passwords"
-#: ../../../../ajax/ajax_configSave.php:221
-#: ../../../../inc/account.class.php:749
+#: ../../../../ajax/ajax_configSave.php:267
+msgid "Errores al actualizar las claves de las cuentas del histórico"
+msgstr "Error while updating acounts passwords in history"
+
+#: ../../../../ajax/ajax_configSave.php:280
+#: ../../../../inc/Account.class.php:497
msgid "Actualizar Clave Maestra"
msgstr "Update Master Password"
-#: ../../../../ajax/ajax_configSave.php:227
+#: ../../../../ajax/ajax_configSave.php:284
msgid "Error al guardar el hash de la clave maestra"
msgstr "Error on saving master password's hash"
-#: ../../../../ajax/ajax_configSave.php:232
+#: ../../../../ajax/ajax_configSave.php:292
msgid "Generar Clave Temporal"
msgstr "Generate Temporary Password"
-#: ../../../../ajax/ajax_configSave.php:233
-#: ../../../../ajax/ajax_usrpass.php:53 ../../../../ajax/ajax_usrpass.php:56
-#: ../../../../ajax/ajax_viewpass.php:98 ../../../../inc/tpl/accounts.php:251
-#: ../../../../inc/tpl/config.php:462 ../../../../inc/tpl/editpass.php:57
-#: ../../../../inc/tpl/install.php:102 ../../../../inc/tpl/install.php:103
-#: ../../../../inc/tpl/login.php:37 ../../../../inc/tpl/login.php:45
-#: ../../../../inc/tpl/passreset.php:62 ../../../../inc/tpl/users.php:135
+#: ../../../../ajax/ajax_configSave.php:292
+#: ../../../../inc/themes/classic/account.inc:83
+#: ../../../../inc/themes/classic/editpass.inc:25
+#: ../../../../inc/themes/classic/install.inc:38
+#: ../../../../inc/themes/classic/install.inc:39
+#: ../../../../inc/themes/classic/login.inc:10
+#: ../../../../inc/themes/classic/login.inc:22
+#: ../../../../inc/themes/classic/mail.inc:55
+#: ../../../../inc/themes/classic/passreset.inc:29
+#: ../../../../inc/themes/classic/users.inc:75
+#: ../../../../inc/themes/classic/userspass.inc:8
+#: ../../../../inc/themes/classic/userspass.inc:11
+#: ../../../../inc/themes/material-blue/account.inc:95
+#: ../../../../inc/themes/material-blue/account.inc:100
+#: ../../../../inc/themes/material-blue/config.inc:358
+#: ../../../../inc/themes/material-blue/editpass.inc:26
+#: ../../../../inc/themes/material-blue/editpass.inc:31
+#: ../../../../inc/themes/material-blue/editpass.inc:41
+#: ../../../../inc/themes/material-blue/install.inc:44
+#: ../../../../inc/themes/material-blue/ldap.inc:105
+#: ../../../../inc/themes/material-blue/login.inc:17
+#: ../../../../inc/themes/material-blue/login.inc:40
+#: ../../../../inc/themes/material-blue/mail.inc:73
+#: ../../../../inc/themes/material-blue/mail.inc:80
+#: ../../../../inc/themes/material-blue/passreset.inc:31
+#: ../../../../inc/themes/material-blue/users.inc:89
+#: ../../../../inc/themes/material-blue/users.inc:96
+#: ../../../../inc/themes/material-blue/userspass.inc:8
+#: ../../../../inc/themes/material-blue/userspass.inc:13
msgid "Clave"
msgstr "Password"
-#: ../../../../ajax/ajax_configSave.php:236
+#: ../../../../ajax/ajax_configSave.php:294
msgid "Clave Temporal Generada"
msgstr "Temporary Password Generated"
-#: ../../../../ajax/ajax_doLogin.php:41
+#: ../../../../ajax/ajax_doLogin.php:46
msgid "Usuario/Clave no introducidos"
msgstr "User/Pass not entered"
-#: ../../../../ajax/ajax_doLogin.php:54 ../../../../ajax/ajax_doLogin.php:75
-#: ../../../../ajax/ajax_doLogin.php:82 ../../../../ajax/ajax_doLogin.php:89
-msgid "Inicio sesión (LDAP)"
-msgstr "Session start (LDAP)"
+#: ../../../../ajax/ajax_doLogin.php:65
+msgid "Inicio sesión"
+msgstr "Log in"
-#: ../../../../ajax/ajax_doLogin.php:60
+#: ../../../../ajax/ajax_doLogin.php:70
+msgid "Servidor Login"
+msgstr "Login Server"
+
+#: ../../../../ajax/ajax_doLogin.php:76
msgid "Error al guardar los datos de LDAP"
msgstr "Error on saving LDAP user data"
-#: ../../../../ajax/ajax_doLogin.php:63 ../../../../ajax/ajax_doLogin.php:71
-#: ../../../../ajax/ajax_doLogin.php:122 ../../../../inc/import.class.php:240
-#: ../../../../inc/import.class.php:247 ../../../../inc/import.class.php:266
+#: ../../../../ajax/ajax_doLogin.php:79 ../../../../ajax/ajax_doLogin.php:87
+#: ../../../../ajax/ajax_doLogin.php:139 ../../../../ajax/ajax_doLogin.php:185
+#: ../../../../inc/ApiTokens.class.php:140
+#: ../../../../inc/ApiTokens.class.php:186
+#: ../../../../inc/ApiTokens.class.php:217
+#: ../../../../inc/ApiTokens.class.php:243
+#: ../../../../inc/ApiTokens.class.php:262
+#: ../../../../inc/ApiTokens.class.php:304
+#: ../../../../inc/ApiTokens.class.php:328 ../../../../inc/Crypt.class.php:235
+#: ../../../../inc/Crypt.class.php:246
+#: ../../../../inc/XmlImportBase.class.php:74
msgid "Error interno"
msgstr "Internal error"
-#: ../../../../ajax/ajax_doLogin.php:68
+#: ../../../../ajax/ajax_doLogin.php:84
msgid "Error al actualizar la clave del usuario en la BBDD"
msgstr "Error on updating user password in BD"
-#: ../../../../ajax/ajax_doLogin.php:76 ../../../../ajax/ajax_doLogin.php:100
+#: ../../../../ajax/ajax_doLogin.php:92 ../../../../ajax/ajax_doLogin.php:117
msgid "Login incorrecto"
msgstr "Incorrect login"
-#: ../../../../ajax/ajax_doLogin.php:77 ../../../../ajax/ajax_doLogin.php:84
-#: ../../../../ajax/ajax_doLogin.php:91 ../../../../ajax/ajax_doLogin.php:101
-#: ../../../../ajax/ajax_doLogin.php:111 ../../../../ajax/ajax_doLogin.php:156
-#: ../../../../ajax/ajax_search.php:131 ../../../../ajax/ajax_search.php:250
-#: ../../../../ajax/ajax_viewpass.php:94 ../../../../inc/init.php:544
-#: ../../../../inc/tpl/accounts.php:234 ../../../../inc/tpl/config.php:453
-#: ../../../../inc/tpl/editpass.php:53 ../../../../inc/tpl/eventlog.php:62
-#: ../../../../inc/tpl/install.php:92 ../../../../inc/tpl/install.php:93
-#: ../../../../inc/tpl/login.php:35 ../../../../inc/tpl/login.php:44
-#: ../../../../inc/tpl/passreset.php:51 ../../../../inc/tpl/request.php:52
-#: ../../../../inc/users.class.php:817 ../../../../inc/users.class.php:859
-#: ../../../../res/test.php:64
+#: ../../../../ajax/ajax_doLogin.php:93 ../../../../ajax/ajax_doLogin.php:100
+#: ../../../../ajax/ajax_doLogin.php:107 ../../../../ajax/ajax_doLogin.php:118
+#: ../../../../ajax/ajax_doLogin.php:128 ../../../../ajax/ajax_doLogin.php:180
+#: ../../../../inc/ApiTokens.class.php:190
+#: ../../../../inc/ApiTokens.class.php:308 ../../../../inc/Auth.class.php:108
+#: ../../../../inc/Init.class.php:517 ../../../../inc/UserBase.class.php:382
+#: ../../../../inc/UserBase.class.php:526 ../../../../res/test.php:64
+#: ../../../../web/SearchC.class.php:289
+#: ../../../../web/UsersMgmtC.class.php:392
+#: ../../../../inc/themes/classic/account.inc:70
+#: ../../../../inc/themes/classic/editpass.inc:21
+#: ../../../../inc/themes/classic/eventlog.inc:25
+#: ../../../../inc/themes/classic/info.inc:39
+#: ../../../../inc/themes/classic/install.inc:27
+#: ../../../../inc/themes/classic/install.inc:28
+#: ../../../../inc/themes/classic/login.inc:7
+#: ../../../../inc/themes/classic/login.inc:20
+#: ../../../../inc/themes/classic/mail.inc:47
+#: ../../../../inc/themes/classic/passreset.inc:17
+#: ../../../../inc/themes/classic/request.inc:17
+#: ../../../../inc/themes/classic/search.inc:50
+#: ../../../../inc/themes/classic/tokens.inc:8
+#: ../../../../inc/themes/material-blue/account.inc:80
+#: ../../../../inc/themes/material-blue/config.inc:344
+#: ../../../../inc/themes/material-blue/editpass.inc:22
+#: ../../../../inc/themes/material-blue/eventlog.inc:24
+#: ../../../../inc/themes/material-blue/info.inc:39
+#: ../../../../inc/themes/material-blue/login.inc:10
+#: ../../../../inc/themes/material-blue/login.inc:33
+#: ../../../../inc/themes/material-blue/mail.inc:61
+#: ../../../../inc/themes/material-blue/mail.inc:67
+#: ../../../../inc/themes/material-blue/passreset.inc:17
+#: ../../../../inc/themes/material-blue/request.inc:20
+#: ../../../../inc/themes/material-blue/search.inc:55
+#: ../../../../inc/themes/material-blue/tokens.inc:8
msgid "Usuario"
msgstr "User"
-#: ../../../../ajax/ajax_doLogin.php:80 ../../../../ajax/ajax_doLogin.php:94
-#: ../../../../ajax/ajax_doLogin.php:104
+#: ../../../../ajax/ajax_doLogin.php:96 ../../../../ajax/ajax_doLogin.php:110
+#: ../../../../ajax/ajax_doLogin.php:121
msgid "Usuario/Clave incorrectos"
msgstr "Wrong user/pass"
-#: ../../../../ajax/ajax_doLogin.php:83 ../../../../ajax/ajax_doLogin.php:87
+#: ../../../../ajax/ajax_doLogin.php:99 ../../../../ajax/ajax_doLogin.php:103
msgid "Cuenta expirada"
msgstr "Account expired"
-#: ../../../../ajax/ajax_doLogin.php:90
+#: ../../../../ajax/ajax_doLogin.php:106
msgid "El usuario no tiene grupos asociados"
-msgstr "The user has not associated groups"
+msgstr "The user have no associated groups"
-#: ../../../../ajax/ajax_doLogin.php:96
-msgid "Inicio sesión (MySQL)"
-msgstr "Session start (MySQL)"
-
-#: ../../../../ajax/ajax_doLogin.php:110 ../../../../ajax/ajax_doLogin.php:114
+#: ../../../../ajax/ajax_doLogin.php:127 ../../../../ajax/ajax_doLogin.php:131
msgid "Usuario deshabilitado"
msgstr "User disabled"
-#: ../../../../ajax/ajax_doLogin.php:119
+#: ../../../../ajax/ajax_doLogin.php:136
msgid "Error al obtener los datos del usuario de la BBDD"
msgstr "Error on retrieving user data from DB"
-#: ../../../../ajax/ajax_doLogin.php:127
+#: ../../../../ajax/ajax_doLogin.php:146
msgid "La clave maestra no ha sido guardada o es incorrecta"
msgstr "The master password not saved or is wrong"
-#: ../../../../ajax/ajax_doLogin.php:134 ../../../../ajax/ajax_doLogin.php:137
+#: ../../../../ajax/ajax_doLogin.php:155 ../../../../ajax/ajax_doLogin.php:158
msgid "Clave maestra incorrecta"
msgstr "Invalid Master Password"
-#: ../../../../ajax/ajax_doLogin.php:158
-#: ../../../../ajax/ajax_getContent.php:115
-#: ../../../../inc/groups.class.php:155 ../../../../inc/groups.class.php:184
-#: ../../../../inc/groups.class.php:211 ../../../../inc/tpl/config.php:352
-#: ../../../../inc/tpl/users.php:109
+#: ../../../../ajax/ajax_doLogin.php:181
+#: ../../../../inc/ProfileBase.class.php:512
+#: ../../../../inc/ProfileBase.class.php:550
+#: ../../../../inc/ProfileBase.class.php:593
+#: ../../../../web/UsersMgmtC.class.php:89
+#: ../../../../inc/themes/classic/users.inc:37
+#: ../../../../inc/themes/material-blue/users.inc:43
+msgid "Perfil"
+msgstr "Profile"
+
+#: ../../../../ajax/ajax_doLogin.php:182 ../../../../inc/Groups.class.php:158
+#: ../../../../inc/Groups.class.php:259 ../../../../inc/Groups.class.php:375
+#: ../../../../web/UsersMgmtC.class.php:90
+#: ../../../../inc/themes/classic/ldap.inc:116
+#: ../../../../inc/themes/classic/users.inc:49
+#: ../../../../inc/themes/material-blue/ldap.inc:139
+#: ../../../../inc/themes/material-blue/ldap.inc:164
+#: ../../../../inc/themes/material-blue/users.inc:57
msgid "Grupo"
msgstr "Group"
-#: ../../../../ajax/ajax_eventlog.php:43
-msgid "Registro de eventos vaciado"
-msgstr "Event log cleared"
-
-#: ../../../../ajax/ajax_eventlog.php:45
-msgid "Error al vaciar el registro de eventos"
-msgstr "Error on clearing event log"
-
-#: ../../../../ajax/ajax_files.php:44 ../../../../ajax/ajax_getFiles.php:36
+#: ../../../../ajax/ajax_files.php:45 ../../../../ajax/ajax_getFiles.php:39
msgid "Gestión de archivos deshabilitada"
msgstr "Files management disabled"
-#: ../../../../ajax/ajax_files.php:63
-msgid "No hay extensiones permitidas"
-msgstr "There are no allowed extensions"
-
-#: ../../../../ajax/ajax_files.php:71 ../../../../inc/import.class.php:113
-msgid "Tipo de archivo no soportado"
-msgstr "File type not allowed"
-
-#: ../../../../ajax/ajax_files.php:74
-msgid "Archivo inválido"
-msgstr "Invalid file"
-
-#: ../../../../ajax/ajax_files.php:87 ../../../../ajax/ajax_files.php:99
-#: ../../../../ajax/ajax_files.php:103 ../../../../inc/import.class.php:124
-#: ../../../../inc/import.class.php:132
-msgid "Error interno al leer el archivo"
-msgstr "Internal error on reading file"
-
-#: ../../../../ajax/ajax_files.php:91
-msgid "El archivo es mayor de "
-msgstr "The file is bigger than"
-
-#: ../../../../ajax/ajax_files.php:98 ../../../../inc/files.class.php:52
+#: ../../../../ajax/ajax_files.php:59 ../../../../inc/Files.class.php:63
msgid "Subir Archivo"
msgstr "Upload File"
-#: ../../../../ajax/ajax_files.php:107
+#: ../../../../ajax/ajax_files.php:68
+msgid "No hay extensiones permitidas"
+msgstr "There are no allowed extensions"
+
+#: ../../../../ajax/ajax_files.php:79 ../../../../inc/FileImport.class.php:115
+msgid "Tipo de archivo no soportado"
+msgstr "File type not allowed"
+
+#: ../../../../ajax/ajax_files.php:85
+msgid "Archivo inválido"
+msgstr "Invalid file"
+
+#: ../../../../ajax/ajax_files.php:101 ../../../../ajax/ajax_files.php:118
+#: ../../../../inc/FileImport.class.php:131
+#: ../../../../inc/FileImport.class.php:149
+#: ../../../../inc/FileImport.class.php:167
+msgid "Error interno al leer el archivo"
+msgstr "Internal error on reading file"
+
+#: ../../../../ajax/ajax_files.php:108
+msgid "El archivo es mayor de "
+msgstr "The file is bigger than"
+
+#: ../../../../ajax/ajax_files.php:125
msgid "Archivo guardado"
msgstr "File saved"
-#: ../../../../ajax/ajax_files.php:109
+#: ../../../../ajax/ajax_files.php:130
msgid "No se pudo guardar el archivo"
msgstr "Error on saving file"
-#: ../../../../ajax/ajax_files.php:116 ../../../../ajax/ajax_files.php:174
+#: ../../../../ajax/ajax_files.php:140 ../../../../ajax/ajax_files.php:199
msgid "No es un ID de archivo válido"
msgstr "Invalid file ID"
-#: ../../../../ajax/ajax_files.php:124 ../../../../inc/files.class.php:143
+#: ../../../../ajax/ajax_files.php:148
msgid "El archivo no existe"
msgstr "The file does not exist"
-#: ../../../../ajax/ajax_files.php:133 ../../../../ajax/ajax_getFiles.php:67
+#: ../../../../ajax/ajax_files.php:157
+#: ../../../../inc/themes/classic/files.inc:19
+#: ../../../../inc/themes/material-blue/files.inc:19
msgid "Descargar Archivo"
msgstr "Download File"
-#: ../../../../ajax/ajax_files.php:134 ../../../../ajax/ajax_viewpass.php:81
-#: ../../../../inc/files.class.php:109 ../../../../inc/tpl/eventlog.php:53
+#: ../../../../ajax/ajax_files.php:158 ../../../../ajax/ajax_viewpass.php:69
+#: ../../../../inc/Files.class.php:112
+#: ../../../../inc/themes/classic/eventlog.inc:16
+#: ../../../../inc/themes/material-blue/eventlog.inc:15
msgid "ID"
msgstr "ID"
-#: ../../../../ajax/ajax_files.php:135 ../../../../inc/files.class.php:54
-#: ../../../../inc/files.class.php:110 ../../../../inc/tpl/migrate.php:110
+#: ../../../../ajax/ajax_files.php:159 ../../../../inc/Files.class.php:65
+#: ../../../../inc/Files.class.php:113
+#: ../../../../inc/themes/classic/import.inc:155
+#: ../../../../inc/themes/material-blue/import.inc:83
msgid "Archivo"
msgstr "File"
-#: ../../../../ajax/ajax_files.php:136 ../../../../inc/files.class.php:55
-#: ../../../../inc/files.class.php:111
+#: ../../../../ajax/ajax_files.php:160 ../../../../inc/Files.class.php:66
+#: ../../../../inc/Files.class.php:114
+#: ../../../../web/AccountsMgmtC.class.php:266
+#: ../../../../inc/themes/classic/customfields.inc:16
+#: ../../../../inc/themes/material-blue/customfields.inc:19
msgid "Tipo"
msgstr "Type"
-#: ../../../../ajax/ajax_files.php:137 ../../../../inc/files.class.php:56
-#: ../../../../inc/files.class.php:112
+#: ../../../../ajax/ajax_files.php:161 ../../../../inc/Files.class.php:67
+#: ../../../../inc/Files.class.php:115
msgid "Tamaño"
msgstr "Size"
-#: ../../../../ajax/ajax_files.php:178
+#: ../../../../ajax/ajax_files.php:203
msgid "Archivo eliminado"
msgstr "File deleted"
-#: ../../../../ajax/ajax_files.php:180
+#: ../../../../ajax/ajax_files.php:208
msgid "Error al eliminar el archivo"
msgstr "Error on file deletion"
-#: ../../../../ajax/ajax_getContent.php:42
+#: ../../../../ajax/ajax_getContent.php:41
+#: ../../../../inc/ApiRequest.class.php:55
+#: ../../../../inc/CustomFieldDef.class.php:38
+#: ../../../../inc/CustomFields.class.php:48
msgid "Parámetros incorrectos"
msgstr "Incorrect parameters"
-#: ../../../../ajax/ajax_getContent.php:100 ../../../../inc/tpl/main.php:54
-msgid "Gestión de Usuarios"
-msgstr "Users Management"
-
-#: ../../../../ajax/ajax_getContent.php:101
-msgid "Gestión de Grupos"
-msgstr "Groups Management"
-
-#: ../../../../ajax/ajax_getContent.php:102
-msgid "Gestión de Perfiles"
-msgstr "Profiles Management"
-
-#: ../../../../ajax/ajax_getContent.php:112
-#: ../../../../ajax/ajax_getContent.php:158
-#: ../../../../ajax/ajax_getContent.php:190
-#: ../../../../ajax/ajax_getContent.php:243
-#: ../../../../ajax/ajax_getContent.php:275
-#: ../../../../ajax/ajax_search.php:125 ../../../../ajax/ajax_search.php:238
-#: ../../../../inc/tpl/accounts.php:173 ../../../../inc/tpl/categories.php:40
-#: ../../../../inc/tpl/customers.php:40 ../../../../inc/tpl/editpass.php:40
-#: ../../../../inc/tpl/groups.php:39 ../../../../inc/tpl/profiles.php:39
-#: ../../../../inc/tpl/request.php:38 ../../../../inc/tpl/users.php:66
-msgid "Nombre"
-msgstr "Name"
-
-#: ../../../../ajax/ajax_getContent.php:113
-#: ../../../../ajax/ajax_passReset.php:74 ../../../../inc/tpl/users.php:83
-#: ../../../../inc/users.class.php:897 ../../../../inc/users.class.php:924
-msgid "Login"
-msgstr "Login"
-
-#: ../../../../ajax/ajax_getContent.php:116
-msgid "Propiedades"
-msgstr "Properties"
-
-#: ../../../../ajax/ajax_getContent.php:122 ../../../../inc/tpl/main.php:30
-msgid "Admin Aplicación"
-msgstr "Application Admin"
-
-#: ../../../../ajax/ajax_getContent.php:123
-msgid "Admin Cuentas"
-msgstr "Account Admin"
-
-#: ../../../../ajax/ajax_getContent.php:124 ../../../../inc/tpl/users.php:91
-msgid "Usuario de LDAP"
-msgstr "LDAP User"
-
-#: ../../../../ajax/ajax_getContent.php:125 ../../../../inc/tpl/users.php:171
-msgid "Deshabilitado"
-msgstr "Disabled"
-
-#: ../../../../ajax/ajax_getContent.php:136
-msgid "Ver Detalles de Usuario"
-msgstr "View User Details"
-
-#: ../../../../ajax/ajax_getContent.php:138
-#: ../../../../inc/users.class.php:923
-msgid "Eliminar Usuario"
-msgstr "Delete User"
-
-#: ../../../../ajax/ajax_getContent.php:139
-msgid "Cambiar Clave de Usuario"
-msgstr "Change User's Password"
-
-#: ../../../../ajax/ajax_getContent.php:158
-#: ../../../../ajax/ajax_getContent.php:243
-#: ../../../../ajax/ajax_getContent.php:275
-#: ../../../../ajax/ajax_sendRequest.php:62
-#: ../../../../inc/tpl/categories.php:48 ../../../../inc/tpl/customers.php:48
-#: ../../../../inc/tpl/eventlog.php:68 ../../../../inc/tpl/groups.php:46
-msgid "Descripción"
-msgstr "Description"
-
-#: ../../../../ajax/ajax_getContent.php:169
-#: ../../../../inc/groups.class.php:210
-msgid "Eliminar Grupo"
-msgstr "Delete Group"
-
-#: ../../../../ajax/ajax_getContent.php:233
-msgid "Gestión de Categorías"
-msgstr "Categories Management"
-
-#: ../../../../ajax/ajax_getContent.php:234
-msgid "Gestión de Clientes"
-msgstr "Customers Management"
-
-#: ../../../../ajax/ajax_getContent.php:254
-#: ../../../../inc/category.class.php:135
-msgid "Eliminar Categoría"
-msgstr "Delete Category"
-
-#: ../../../../ajax/ajax_getContent.php:286
-#: ../../../../inc/customer.class.php:131
-msgid "Eliminar Cliente"
-msgstr "Delete Customer"
-
-#: ../../../../ajax/ajax_getContent.php:319
-#: ../../../../inc/config.class.php:121 ../../../../inc/config.class.php:149
-#: ../../../../inc/tpl/main.php:56 ../../../../inc/tpl/profiles.php:71
-msgid "Configuración"
-msgstr "Configuration"
-
-#: ../../../../ajax/ajax_getContent.php:320
-#: ../../../../inc/tpl/install.php:112 ../../../../inc/tpl/install.php:117
-#: ../../../../inc/tpl/install.php:118 ../../../../inc/tpl/login.php:40
-#: ../../../../inc/tpl/login.php:48 ../../../../inc/tpl/profiles.php:76
-msgid "Clave Maestra"
-msgstr "Master Password"
-
-#: ../../../../ajax/ajax_getContent.php:321
-msgid "Copia de Seguridad"
-msgstr "Backup"
-
-#: ../../../../ajax/ajax_getContent.php:322
-msgid "Importar cuentas desde fuentes externas"
-msgstr "Import accounts from external sources"
-
-#: ../../../../ajax/ajax_getContent.php:322
-#: ../../../../inc/import.class.php:81 ../../../../inc/import.class.php:163
-#: ../../../../inc/migrate.class.php:402
-msgid "Importar Cuentas"
-msgstr "Import Accounts"
-
-#: ../../../../ajax/ajax_getFiles.php:63 ../../../../inc/files.class.php:108
-msgid "Eliminar Archivo"
-msgstr "Delete File"
-
-#: ../../../../ajax/ajax_getFiles.php:70
-msgid "Ver Archivo"
-msgstr "View File"
-
-#: ../../../../ajax/ajax_migrate.php:1
+#: ../../../../ajax/ajax_migrate.php:55
msgid "Confirmar la importación de cuentas"
msgstr "Confirm account import"
-#: ../../../../ajax/ajax_migrate.php:1
+#: ../../../../ajax/ajax_migrate.php:57
msgid "Es necesario un usuario de conexión"
msgstr "A connection username is needed"
-#: ../../../../ajax/ajax_migrate.php:1
+#: ../../../../ajax/ajax_migrate.php:59
msgid "Es necesaria una clave de conexión"
msgstr "The connection password is needed"
-#: ../../../../ajax/ajax_migrate.php:1
+#: ../../../../ajax/ajax_migrate.php:61
msgid "Es necesario el nombre de la BBDD"
msgstr "A database name is needed"
-#: ../../../../ajax/ajax_migrate.php:1
+#: ../../../../ajax/ajax_migrate.php:63
msgid "Es necesario un nombre de host"
msgstr "A host name is needed"
-#: ../../../../ajax/ajax_passReset.php:44
+#: ../../../../ajax/ajax_passReset.php:47
+#: ../../../../ajax/ajax_passReset.php:50
msgid "Recuperación de Clave"
msgstr "Password Recovery"
-#: ../../../../ajax/ajax_passReset.php:48
-#: ../../../../ajax/ajax_passReset.php:55
+#: ../../../../ajax/ajax_passReset.php:53
+#: ../../../../ajax/ajax_passReset.php:58
msgid "Solicitado para"
msgstr "Requested for"
-#: ../../../../ajax/ajax_passReset.php:52
-#: ../../../../ajax/ajax_sendRequest.php:71
+#: ../../../../ajax/ajax_passReset.php:55
+#: ../../../../ajax/ajax_sendRequest.php:75
msgid "Solicitud enviada"
msgstr "Request sent"
-#: ../../../../ajax/ajax_passReset.php:52
+#: ../../../../ajax/ajax_passReset.php:55
msgid "En breve recibirá un correo para completar la solicitud."
msgstr "You will receive an email to complete the request in short."
-#: ../../../../ajax/ajax_passReset.php:59
+#: ../../../../ajax/ajax_passReset.php:60
msgid "No se ha podido realizar la solicitud. Consulte con el administrador."
msgstr "The request cannot be done. Please contact to the administrator"
-#: ../../../../ajax/ajax_passReset.php:73 ../../../../inc/users.class.php:896
+#: ../../../../ajax/ajax_passReset.php:72
+#: ../../../../inc/UserBase.class.php:568
+#: ../../../../inc/UserUtil.class.php:664
msgid "Modificar Clave Usuario"
msgstr "Edit User Password"
-#: ../../../../ajax/ajax_passReset.php:85
+#: ../../../../ajax/ajax_passReset.php:72
+#: ../../../../inc/UserBase.class.php:568
+#: ../../../../inc/UserBase.class.php:592
+#: ../../../../inc/UserUtil.class.php:664
+#: ../../../../web/UsersMgmtC.class.php:88
+#: ../../../../inc/themes/classic/users.inc:21
+#: ../../../../inc/themes/material-blue/users.inc:24
+msgid "Login"
+msgstr "Login"
+
+#: ../../../../ajax/ajax_passReset.php:80
msgid "La clave es incorrecta o no coincide"
msgstr "The password is incorrect or do not match"
-#: ../../../../ajax/ajax_search.php:108 ../../../../inc/tpl/eventlog.php:42
-msgid "No se encontraron registros"
-msgstr "No records found"
-
-#: ../../../../ajax/ajax_search.php:122
-msgid "Ordenar por Cliente"
-msgstr "Sort by Customer"
-
-#: ../../../../ajax/ajax_search.php:122 ../../../../ajax/ajax_search.php:233
-#: ../../../../ajax/ajax_sendRequest.php:61
-#: ../../../../inc/account.class.php:370 ../../../../inc/account.class.php:580
-#: ../../../../inc/account.class.php:603 ../../../../inc/account.class.php:879
-#: ../../../../inc/customer.class.php:59
-#: ../../../../inc/customer.class.php:106
-#: ../../../../inc/customer.class.php:132 ../../../../inc/tpl/accounts.php:189
-#: ../../../../inc/tpl/editpass.php:44 ../../../../inc/tpl/request.php:42
-msgid "Cliente"
-msgstr "Customer"
-
-#: ../../../../ajax/ajax_search.php:125
-msgid "Ordenar por Nombre"
-msgstr "Sort by Name"
-
-#: ../../../../ajax/ajax_search.php:128
-msgid "Ordenar por Categoría"
-msgstr "Sort by Category"
-
-#: ../../../../ajax/ajax_search.php:128 ../../../../ajax/ajax_search.php:243
-#: ../../../../inc/category.class.php:80
-#: ../../../../inc/category.class.php:136
-#: ../../../../inc/category.class.php:184 ../../../../inc/tpl/accounts.php:206
-msgid "Categoría"
-msgstr "Category"
-
-#: ../../../../ajax/ajax_search.php:131
-msgid "Ordenar por Usuario"
-msgstr "Sort by Username"
-
-#: ../../../../ajax/ajax_search.php:134
-msgid "Ordenar por URL / IP"
-msgstr "Sort by URL / IP"
-
-#: ../../../../ajax/ajax_search.php:134 ../../../../ajax/ajax_search.php:255
-#: ../../../../inc/tpl/accounts.php:218 ../../../../inc/tpl/editpass.php:48
-#: ../../../../inc/tpl/request.php:47
-msgid "URL / IP"
-msgstr "URL / IP"
-
-#: ../../../../ajax/ajax_search.php:173
-msgid "Buscar en Wiki"
-msgstr "Search in Wiki"
-
-#: ../../../../ajax/ajax_search.php:181 ../../../../ajax/ajax_search.php:289
-#: ../../../../inc/tpl/accounts.php:80 ../../../../inc/tpl/accounts.php:91
-msgid "Detalles de Cuenta"
-msgstr "Account Details"
-
-#: ../../../../ajax/ajax_search.php:199 ../../../../ajax/ajax_search.php:201
-msgid "Abrir enlace a"
-msgstr "Open link to"
-
-#: ../../../../ajax/ajax_search.php:262 ../../../../inc/tpl/accounts.php:271
-#: ../../../../inc/tpl/users.php:154
-msgid "Notas"
-msgstr "Notes"
-
-#: ../../../../ajax/ajax_search.php:266
-msgid "Archivos adjuntos"
-msgstr "Attachments"
-
-#: ../../../../ajax/ajax_search.php:277
-msgid "Enlace a Wiki"
-msgstr "Link to Wiki"
-
-#: ../../../../ajax/ajax_search.php:293 ../../../../ajax/ajax_viewpass.php:80
-#: ../../../../inc/tpl/accounts.php:528 ../../../../inc/tpl/profiles.php:50
-msgid "Ver Clave"
-msgstr "View password"
-
-#: ../../../../ajax/ajax_search.php:294 ../../../../ajax/ajax_search.php:346
-#: ../../../../inc/tpl/accounts.php:533 ../../../../inc/tpl/accounts.php:624
-msgid "Copiar Clave en Portapapeles"
-msgstr "Copy Password to Clipboard"
-
-#: ../../../../ajax/ajax_search.php:298 ../../../../inc/html.class.php:545
-msgid "Más Acciones"
-msgstr "More Actions"
-
-#: ../../../../ajax/ajax_search.php:302 ../../../../inc/tpl/accounts.php:556
-msgid "Modificar Cuenta"
-msgstr "Edit Account"
-
-#: ../../../../ajax/ajax_search.php:306 ../../../../inc/tpl/accounts.php:53
-msgid "Copiar Cuenta"
-msgstr "Copy Account"
-
-#: ../../../../ajax/ajax_search.php:310 ../../../../inc/account.class.php:602
-#: ../../../../inc/tpl/accounts.php:73 ../../../../inc/tpl/accounts.php:568
-msgid "Eliminar Cuenta"
-msgstr "Delete Account"
-
-#: ../../../../ajax/ajax_search.php:317 ../../../../inc/tpl/accounts.php:561
-msgid "Solicitar Modificación"
-msgstr "Request Modification"
-
-#: ../../../../ajax/ajax_search.php:350 ../../../../inc/tpl/accounts.php:628
-msgid "Clave Copiada al Portapapeles"
-msgstr "Password Copied to Clipboard"
-
-#: ../../../../ajax/ajax_sendRequest.php:45
+#: ../../../../ajax/ajax_sendRequest.php:48
msgid "Es necesaria una descripción"
msgstr "A description is needed"
-#: ../../../../ajax/ajax_sendRequest.php:58
+#: ../../../../ajax/ajax_sendRequest.php:61
msgid "Solicitud de Modificación de Cuenta"
msgstr "Request for Account Modification"
-#: ../../../../ajax/ajax_sendRequest.php:59
+#: ../../../../ajax/ajax_sendRequest.php:62
msgid "Solicitante"
msgstr "Requester"
-#: ../../../../ajax/ajax_sendRequest.php:60
-#: ../../../../ajax/ajax_viewpass.php:82 ../../../../inc/account.class.php:371
-#: ../../../../inc/account.class.php:581 ../../../../inc/account.class.php:604
-#: ../../../../inc/account.class.php:880 ../../../../inc/files.class.php:53
+#: ../../../../ajax/ajax_sendRequest.php:63
+#: ../../../../ajax/ajax_viewpass.php:70 ../../../../inc/Account.class.php:165
+#: ../../../../inc/Account.class.php:219 ../../../../inc/Account.class.php:402
+#: ../../../../inc/Account.class.php:425 ../../../../inc/Account.class.php:667
+#: ../../../../inc/Files.class.php:64
msgid "Cuenta"
msgstr "Account"
-#: ../../../../ajax/ajax_sendRequest.php:74
+#: ../../../../ajax/ajax_sendRequest.php:64
+#: ../../../../inc/Account.class.php:164 ../../../../inc/Account.class.php:218
+#: ../../../../inc/Account.class.php:401 ../../../../inc/Account.class.php:424
+#: ../../../../inc/Account.class.php:666 ../../../../inc/Customer.class.php:65
+#: ../../../../inc/Customer.class.php:115
+#: ../../../../inc/Customer.class.php:163
+#: ../../../../web/SearchC.class.php:271
+#: ../../../../inc/themes/classic/account.inc:23
+#: ../../../../inc/themes/classic/editpass.inc:12
+#: ../../../../inc/themes/classic/request.inc:9
+#: ../../../../inc/themes/classic/search.inc:19
+#: ../../../../inc/themes/material-blue/account.inc:29
+#: ../../../../inc/themes/material-blue/editpass.inc:13
+#: ../../../../inc/themes/material-blue/request.inc:10
+#: ../../../../inc/themes/material-blue/search.inc:24
+msgid "Cliente"
+msgstr "Customer"
+
+#: ../../../../ajax/ajax_sendRequest.php:65
+#: ../../../../web/AccountsMgmtC.class.php:79
+#: ../../../../web/AccountsMgmtC.class.php:138
+#: ../../../../web/UsersMgmtC.class.php:187
+#: ../../../../inc/themes/classic/categories.inc:16
+#: ../../../../inc/themes/classic/customers.inc:16
+#: ../../../../inc/themes/classic/eventlog.inc:31
+#: ../../../../inc/themes/classic/groups.inc:16
+#: ../../../../inc/themes/material-blue/categories.inc:20
+#: ../../../../inc/themes/material-blue/customers.inc:20
+#: ../../../../inc/themes/material-blue/eventlog.inc:30
+#: ../../../../inc/themes/material-blue/groups.inc:20
+msgid "Descripción"
+msgstr "Description"
+
+#: ../../../../ajax/ajax_sendRequest.php:78
msgid "Error al enviar la solicitud"
msgstr "Error on sending request"
-#: ../../../../ajax/ajax_usrpass.php:41
-msgid "No tiene permisos para realizar esta operación"
-msgstr "You don't have permission to do this operation"
+#: ../../../../ajax/ajax_userPrefsSave.php:74
+msgid "Error al actualizar preferencias"
+msgstr "Error while updating preferences"
-#: ../../../../ajax/ajax_usrpass.php:48 ../../../../inc/auth.class.php:194
-#: ../../../../inc/tpl/users.php:175
-msgid "Cambio de Clave"
-msgstr "Password Change"
+#: ../../../../ajax/ajax_userPrefsSave.php:77
+msgid "Preferencias actualizadas"
+msgstr "Preferences updated"
-#: ../../../../ajax/ajax_usrpass.php:57 ../../../../inc/tpl/accounts.php:258
-#: ../../../../inc/tpl/editpass.php:64 ../../../../inc/tpl/users.php:139
-msgid "Generar clave aleatoria"
-msgstr "Generate random password"
-
-#: ../../../../ajax/ajax_usrpass.php:63 ../../../../ajax/ajax_usrpass.php:65
-#: ../../../../inc/tpl/accounts.php:263 ../../../../inc/tpl/editpass.php:69
-#: ../../../../inc/tpl/users.php:145
-msgid "Clave (repetir)"
-msgstr "Password (repeat)"
-
-#: ../../../../ajax/ajax_usrpass.php:66 ../../../../inc/tpl/accounts.php:266
-#: ../../../../inc/tpl/editpass.php:71 ../../../../inc/tpl/install.php:107
-#: ../../../../inc/tpl/install.php:122 ../../../../inc/tpl/masterpass.php:64
-#: ../../../../inc/tpl/passreset.php:65 ../../../../inc/tpl/passreset.php:73
-#: ../../../../inc/tpl/users.php:148
-msgid "Nivel de fortaleza de la clave"
-msgstr "Password strength level"
-
-#: ../../../../ajax/ajax_usrpass.php:82 ../../../../ajax/ajax_usrpass.php:83
-#: ../../../../inc/tpl/accounts.php:542 ../../../../inc/tpl/categories.php:68
-#: ../../../../inc/tpl/config.php:522 ../../../../inc/tpl/customers.php:68
-#: ../../../../inc/tpl/editpass.php:89 ../../../../inc/tpl/groups.php:64
-#: ../../../../inc/tpl/masterpass.php:114 ../../../../inc/tpl/profiles.php:138
-#: ../../../../inc/tpl/users.php:220
-msgid "Guardar"
-msgstr "Save"
-
-#: ../../../../ajax/ajax_viewpass.php:52 ../../../../ajax/ajax_viewpass.php:58
-#: ../../../../inc/html.class.php:425
-msgid "No tiene permisos para acceder a esta cuenta"
-msgstr "You don't have permission to access to this account"
-
-#: ../../../../ajax/ajax_viewpass.php:61
+#: ../../../../ajax/ajax_viewpass.php:54
msgid "La clave maestra no coincide"
msgstr "The master password does not match"
-#: ../../../../inc/account.class.php:26 ../../../../inc/acl.class.php:27
-#: ../../../../inc/auth.class.php:27 ../../../../inc/backup.class.php:26
-#: ../../../../inc/category.class.php:27 ../../../../inc/common.class.php:26
-#: ../../../../inc/config.class.php:26 ../../../../inc/crypt.class.php:26
-#: ../../../../inc/customer.class.php:27 ../../../../inc/db.class.php:27
-#: ../../../../inc/files.class.php:27 ../../../../inc/groups.class.php:27
-#: ../../../../inc/html.class.php:27 ../../../../inc/import.class.php:27
-#: ../../../../inc/init.php:26 ../../../../inc/installer.class.php:27
-#: ../../../../inc/keepassimport.class.php:27
-#: ../../../../inc/keepassximport.class.php:27
-#: ../../../../inc/ldap.class.php:27 ../../../../inc/log.class.php:26
-#: ../../../../inc/migrate.class.php:26 ../../../../inc/profiles.class.php:27
-#: ../../../../inc/tpl/accounts.php:26 ../../../../inc/tpl/backup.php:26
-#: ../../../../inc/tpl/categories.php:26 ../../../../inc/tpl/config.php:26
-#: ../../../../inc/tpl/customers.php:26 ../../../../inc/tpl/editpass.php:25
-#: ../../../../inc/tpl/eventlog.php:26 ../../../../inc/tpl/groups.php:26
-#: ../../../../inc/tpl/login.php:26 ../../../../inc/tpl/main.php:26
-#: ../../../../inc/tpl/masterpass.php:26 ../../../../inc/tpl/migrate.php:26
-#: ../../../../inc/tpl/profiles.php:26 ../../../../inc/tpl/request.php:25
-#: ../../../../inc/tpl/search.php:26 ../../../../inc/tpl/users.php:26
-#: ../../../../inc/upgrade.class.php:27 ../../../../inc/users.class.php:27
-#: ../../../../inc/util.class.php:26 ../../../../inc/util.class.php:293
+#: ../../../../ajax/ajax_viewpass.php:58
+#: ../../../../inc/Controller.class.php:166
+msgid "No tiene permisos para acceder a esta cuenta"
+msgstr "You don't have permission to access to this account"
+
+#: ../../../../ajax/ajax_viewpass.php:68 ../../../../inc/Acl.class.php:133
+#: ../../../../inc/themes/classic/account.inc:379
+#: ../../../../inc/themes/classic/profiles.inc:23
+#: ../../../../inc/themes/classic/search.inc:100
+#: ../../../../inc/themes/material-blue/account.inc:419
+#: ../../../../inc/themes/material-blue/profiles.inc:35
+#: ../../../../inc/themes/material-blue/search.inc:113
+msgid "Ver Clave"
+msgstr "View password"
+
+#: ../../../../ajax/ajax_viewpass.php:79
+msgid "Clave de Cuenta"
+msgstr "Account Password"
+
+#: ../../../../api.php:56
+msgid "Ayuda Parámetros"
+msgstr "Parameters help"
+
+#: ../../../../inc/Account.class.php:28
+#: ../../../../inc/AccountBase.class.php:28
+#: ../../../../inc/AccountHistory.class.php:28
+#: ../../../../inc/AccountInterface.class.php:28
+#: ../../../../inc/AccountSearch.class.php:28 ../../../../inc/Acl.class.php:29
+#: ../../../../inc/Api.class.php:30 ../../../../inc/ApiRequest.class.php:28
+#: ../../../../inc/ApiTokens.class.php:28 ../../../../inc/Auth.class.php:29
+#: ../../../../inc/Auth2FA.class.php:32 ../../../../inc/Backup.class.php:28
+#: ../../../../inc/Category.class.php:29 ../../../../inc/Common.class.php:28
+#: ../../../../inc/Config.class.php:28 ../../../../inc/Controller.class.php:31
+#: ../../../../inc/Crypt.class.php:28 ../../../../inc/CsvImport.class.php:28
+#: ../../../../inc/CsvImportBase.class.php:28
+#: ../../../../inc/Customer.class.php:29 ../../../../inc/DB.class.php:28
+#: ../../../../inc/DBConnectionFactory.class.php:30
+#: ../../../../inc/FileImport.class.php:28 ../../../../inc/Files.class.php:29
+#: ../../../../inc/Groups.class.php:29 ../../../../inc/Html.class.php:28
+#: ../../../../inc/ImageUtil.class.php:28 ../../../../inc/Import.class.php:29
+#: ../../../../inc/ImportBase.class.php:28 ../../../../inc/Init.class.php:30
+#: ../../../../inc/Installer.class.php:29
+#: ../../../../inc/KeepassImport.class.php:28
+#: ../../../../inc/KeepassXImport.class.php:28
+#: ../../../../inc/Ldap.class.php:29 ../../../../inc/LdapADS.class.php:28
+#: ../../../../inc/Log.class.php:28 ../../../../inc/Migrate.class.php:28
+#: ../../../../inc/Profile.class.php:29
+#: ../../../../inc/ProfileBase.class.php:28
+#: ../../../../inc/Request.class.php:111 ../../../../inc/Session.class.php:28
+#: ../../../../inc/SyspassImport.class.php:28
+#: ../../../../inc/Upgrade.class.php:29 ../../../../inc/User.class.php:28
+#: ../../../../inc/UserLdap.class.php:28
+#: ../../../../inc/UserPreferences.class.php:28
+#: ../../../../inc/UserUtil.class.php:28 ../../../../inc/Util.class.php:31
+#: ../../../../inc/XmlImport.class.php:28
+#: ../../../../inc/XmlImportBase.class.php:28
+#: ../../../../web/AccountC.class.php:38
+#: ../../../../web/AccountsMgmtC.class.php:32
+#: ../../../../web/ConfigC.class.php:31 ../../../../web/EventlogC.class.php:28
+#: ../../../../web/SearchC.class.php:30
+#: ../../../../web/UsersMgmtC.class.php:39
+#: ../../../../web/UsersPrefsC.class.php:32
msgid "No es posible acceder directamente a este archivo"
msgstr "Unable to access to this file directly"
-#: ../../../../inc/account.class.php:325 ../../../../inc/account.class.php:855
+#: ../../../../inc/Account.class.php:112 ../../../../inc/Account.class.php:185
+#: ../../../../inc/Account.class.php:636
msgid "Error al actualizar el historial"
msgstr "Error on updating history"
-#: ../../../../inc/account.class.php:331
+#: ../../../../inc/Account.class.php:117
msgid "Actualizar Cuenta"
msgstr "Update Account"
-#: ../../../../inc/account.class.php:334 ../../../../inc/account.class.php:562
+#: ../../../../inc/Account.class.php:120 ../../../../inc/Account.class.php:383
msgid "Error al actualizar los grupos secundarios"
msgstr "Error on updating secondary groups"
-#: ../../../../inc/account.class.php:340 ../../../../inc/account.class.php:570
+#: ../../../../inc/Account.class.php:126 ../../../../inc/Account.class.php:391
msgid "Error al actualizar los usuarios de la cuenta"
msgstr "Error on updating account's users"
-#: ../../../../inc/account.class.php:345
+#: ../../../../inc/Account.class.php:217
msgid "Restaurar Cuenta"
msgstr "Account Restore"
-#: ../../../../inc/account.class.php:579 ../../../../inc/tpl/accounts.php:47
-#: ../../../../inc/tpl/main.php:53
+#: ../../../../inc/Account.class.php:326
+#: ../../../../inc/AccountHistory.class.php:343
+#: ../../../../inc/AccountHistory.class.php:505
+msgid "No se pudieron obtener los datos de la cuenta"
+msgstr "Error while retrieving account data"
+
+#: ../../../../inc/Account.class.php:400 ../../../../inc/Acl.class.php:129
+#: ../../../../web/AccountC.class.php:147 ../../../../web/MainC.class.php:161
msgid "Nueva Cuenta"
msgstr "New Account"
-#: ../../../../inc/account.class.php:597
+#: ../../../../inc/Account.class.php:418
msgid "ERROR: Error en la operación."
msgstr "ERROR: Operation failed"
-#: ../../../../inc/account.class.php:614
+#: ../../../../inc/Account.class.php:423 ../../../../inc/Acl.class.php:134
+#: ../../../../web/AccountC.class.php:352
+#: ../../../../inc/themes/classic/account.inc:366
+#: ../../../../inc/themes/classic/search.inc:127
+#: ../../../../inc/themes/material-blue/account.inc:413
+#: ../../../../inc/themes/material-blue/search.inc:142
+msgid "Eliminar Cuenta"
+msgstr "Delete Account"
+
+#: ../../../../inc/Account.class.php:436
msgid "Error al eliminar grupos asociados a la cuenta"
msgstr "Error on deleting account's groups"
-#: ../../../../inc/account.class.php:618
+#: ../../../../inc/Account.class.php:440
msgid "Error al eliminar usuarios asociados a la cuenta"
msgstr "Error on deleting account's users"
-#: ../../../../inc/account.class.php:622
+#: ../../../../inc/Account.class.php:444
msgid "Error al eliminar archivos asociados a la cuenta"
msgstr "Error on deleting account's files"
-#: ../../../../inc/account.class.php:750 ../../../../inc/account.class.php:904
+#: ../../../../inc/Account.class.php:498
+#: ../../../../inc/AccountHistory.class.php:124
+#: ../../../../inc/XmlImport.class.php:62
msgid "Inicio"
msgstr "Start"
-#: ../../../../inc/account.class.php:758 ../../../../inc/account.class.php:912
+#: ../../../../inc/Account.class.php:503
+#: ../../../../inc/AccountHistory.class.php:130
msgid "Error en el módulo de encriptación"
msgstr "Error on encryption module"
-#: ../../../../inc/account.class.php:766 ../../../../inc/account.class.php:920
+#: ../../../../inc/Account.class.php:511
+#: ../../../../inc/AccountHistory.class.php:138
msgid "Error al obtener las claves de las cuentas"
msgstr "Error on retrieving accounts' passwords"
-#: ../../../../inc/account.class.php:792
+#: ../../../../inc/Account.class.php:527
+#: ../../../../inc/AccountHistory.class.php:160
+msgid "Clave de cuenta vacía"
+msgstr "Account password empty"
+
+#: ../../../../inc/Account.class.php:532
+#: ../../../../inc/AccountHistory.class.php:165
+msgid "IV de encriptación incorrecto"
+msgstr "Wrong encryption IV"
+
+#: ../../../../inc/Account.class.php:541
+#: ../../../../inc/AccountHistory.class.php:174
+msgid "No es posible desencriptar la clave de la cuenta"
+msgstr "Unable to decrypt account password"
+
+#: ../../../../inc/Account.class.php:547
msgid "Fallo al actualizar la clave de la cuenta"
msgstr "Error on updating account's password"
-#: ../../../../inc/account.class.php:804
-msgid "Cuentas actualizadas:"
-msgstr "Accounts updated:"
+#: ../../../../inc/Account.class.php:561
+msgid "Cuentas actualizadas"
+msgstr "Accounts updated"
-#: ../../../../inc/account.class.php:809 ../../../../inc/account.class.php:968
+#: ../../../../inc/Account.class.php:566
+#: ../../../../inc/AccountHistory.class.php:199
msgid "Fin"
msgstr "End"
-#: ../../../../inc/account.class.php:878
+#: ../../../../inc/Account.class.php:665
msgid "Modificar Clave"
msgstr "Update Password"
-#: ../../../../inc/account.class.php:903
+#: ../../../../inc/Account.class.php:700
+msgid "No se pudieron obtener los datos de las cuentas"
+msgstr "It was unable to retrieve accounts data"
+
+#: ../../../../inc/AccountHistory.class.php:123
msgid "Actualizar Clave Maestra (H)"
msgstr "Update Master Password (H)"
-#: ../../../../inc/account.class.php:934
+#: ../../../../inc/AccountHistory.class.php:155
msgid "La clave maestra del registro no coincide"
msgstr "The record's master password does not match"
-#: ../../../../inc/account.class.php:950
+#: ../../../../inc/AccountHistory.class.php:180
msgid "Fallo al actualizar la clave del histórico"
msgstr "Error on updating history's master password"
-#: ../../../../inc/account.class.php:963
-msgid "Registros actualizados:"
+#: ../../../../inc/AccountHistory.class.php:194
+msgid "Registros actualizados"
msgstr "Records updated"
-#: ../../../../inc/acl.class.php:104
+#: ../../../../inc/Acl.class.php:112
msgid "Denegado acceso a"
msgstr "Access denied to"
-#: ../../../../inc/auth.class.php:195
+#: ../../../../inc/Acl.class.php:126
+msgid "Buscar Cuentas"
+msgstr "Search Accounts"
+
+#: ../../../../inc/Acl.class.php:127
+msgid "Ver Cuenta"
+msgstr "View Account"
+
+#: ../../../../inc/Acl.class.php:128 ../../../../web/AccountC.class.php:259
+#: ../../../../inc/themes/classic/search.inc:121
+#: ../../../../inc/themes/material-blue/search.inc:136
+msgid "Copiar Cuenta"
+msgstr "Copy Account"
+
+#: ../../../../inc/Acl.class.php:130 ../../../../web/AccountC.class.php:323
+msgid "Editar Cuenta"
+msgstr "Edit Account"
+
+#: ../../../../inc/Acl.class.php:131
+msgid "Editar Clave de Cuenta"
+msgstr "Edit Account Password"
+
+#: ../../../../inc/Acl.class.php:132
+#: ../../../../inc/themes/classic/profiles.inc:28
+#: ../../../../inc/themes/material-blue/profiles.inc:40
+msgid "Ver Historial"
+msgstr "View History"
+
+#: ../../../../inc/Acl.class.php:135
+#: ../../../../inc/themes/classic/account.inc:188
+#: ../../../../inc/themes/classic/profiles.inc:50
+#: ../../../../inc/themes/material-blue/account.inc:230
+#: ../../../../inc/themes/material-blue/config.inc:224
+#: ../../../../inc/themes/material-blue/profiles.inc:60
+msgid "Archivos"
+msgstr "Files"
+
+#: ../../../../inc/Acl.class.php:136
+msgid "Peticiones"
+msgstr "Requests"
+
+#: ../../../../inc/Acl.class.php:137
+msgid "Gestión Aplicación"
+msgstr "Application Management"
+
+#: ../../../../inc/Acl.class.php:138
+msgid "Gestión Categorías"
+msgstr "Categories Management"
+
+#: ../../../../inc/Acl.class.php:139
+msgid "Gestión Clientes"
+msgstr "Customers Management"
+
+#: ../../../../inc/Acl.class.php:140
+msgid "Gestión Campos Personalizados"
+msgstr "Custom Fields Management"
+
+#: ../../../../inc/Acl.class.php:141
+msgid "Gestión Autorizaciones API"
+msgstr "API Authorizations Management"
+
+#: ../../../../inc/Acl.class.php:142 ../../../../inc/Acl.class.php:143
+msgid "Gestión Usuarios"
+msgstr "Users Management"
+
+#: ../../../../inc/Acl.class.php:144
+msgid "Gestión Grupos"
+msgstr "Groups Management"
+
+#: ../../../../inc/Acl.class.php:145
+msgid "Gestión Perfiles"
+msgstr "Profiles Management"
+
+#: ../../../../inc/Acl.class.php:146 ../../../../inc/Config.class.php:118
+#: ../../../../inc/Config.class.php:400 ../../../../web/MainC.class.php:179
+#: ../../../../inc/themes/classic/profiles.inc:57
+#: ../../../../inc/themes/material-blue/profiles.inc:66
+msgid "Configuración"
+msgstr "Configuration"
+
+#: ../../../../inc/Acl.class.php:147
+msgid "Configuración General"
+msgstr "General configuration"
+
+#: ../../../../inc/Acl.class.php:148 ../../../../web/ConfigC.class.php:149
+#: ../../../../inc/themes/classic/profiles.inc:65
+#: ../../../../inc/themes/material-blue/profiles.inc:77
+msgid "Encriptación"
+msgstr "Encryption"
+
+#: ../../../../inc/Acl.class.php:149 ../../../../web/ConfigC.class.php:194
+#: ../../../../inc/themes/classic/backup.inc:4
+#: ../../../../inc/themes/material-blue/backup.inc:4
+msgid "Copia de Seguridad"
+msgstr "Backup"
+
+#: ../../../../inc/Acl.class.php:150
+msgid "Exportar"
+msgstr "Export"
+
+#: ../../../../inc/Acl.class.php:151
+#: ../../../../inc/themes/classic/profiles.inc:74
+#: ../../../../inc/themes/material-blue/profiles.inc:87
+msgid "Importar"
+msgstr "Import"
+
+#: ../../../../inc/Api.class.php:65 ../../../../inc/Api.class.php:88
+#: ../../../../inc/Api.class.php:126
+msgid "Acceso no permitido"
+msgstr "Unauthorized access"
+
+#: ../../../../inc/Api.class.php:166
+msgid "Error de codificación"
+msgstr "Encoding error"
+
+#: ../../../../inc/ApiRequest.class.php:102
+msgid "Token de autorización"
+msgstr "Authorization Token"
+
+#: ../../../../inc/ApiRequest.class.php:103
+msgid "Acción a realizar"
+msgstr "Action"
+
+#: ../../../../inc/ApiRequest.class.php:104
+msgid "Clave de usuario (opcional)"
+msgstr "User's password (optional)"
+
+#: ../../../../inc/ApiRequest.class.php:105
+msgid "Cadena a buscar"
+msgstr "String to search for"
+
+#: ../../../../inc/ApiRequest.class.php:106
+msgid "Numero de cuentas a mostar en la búsqueda"
+msgstr "Number of results per page to show when doing searches."
+
+#: ../../../../inc/ApiRequest.class.php:107
+msgid "Item a devolver"
+msgstr "Item to return"
+
+#: ../../../../inc/ApiTokens.class.php:221
+msgid "La autorización ya existe"
+msgstr "The authorization already exist"
+
+#: ../../../../inc/ApiTokens.class.php:307
+msgid "Actualizar Autorización"
+msgstr "Update Athorization"
+
+#: ../../../../inc/ApiTokens.class.php:331
+#: ../../../../web/UsersMgmtC.class.php:421
+msgid "Eliminar Autorización"
+msgstr "Delete Authorization"
+
+#: ../../../../inc/Auth.class.php:107
+msgid "Usuario no pertenece al grupo"
+msgstr "The user doesn't belong to the group"
+
+#: ../../../../inc/Auth.class.php:187
+#: ../../../../inc/themes/classic/users.inc:117
+#: ../../../../inc/themes/classic/userspass.inc:2
+#: ../../../../inc/themes/material-blue/users.inc:161
+#: ../../../../inc/themes/material-blue/userspass.inc:2
+msgid "Cambio de Clave"
+msgstr "Password Change"
+
+#: ../../../../inc/Auth.class.php:189
msgid "Se ha solicitado el cambio de su clave de usuario."
msgstr "A request for changing your user password has been done."
-#: ../../../../inc/auth.class.php:197
+#: ../../../../inc/Auth.class.php:191
msgid "Para completar el proceso es necesario que acceda a la siguiente URL:"
msgstr "In order to complete the process, please go to this URL:"
-#: ../../../../inc/auth.class.php:201
+#: ../../../../inc/Auth.class.php:195
msgid "Si no ha solicitado esta acción, ignore este mensaje."
msgstr "If you have not requested this action, please dismiss this message."
-#: ../../../../inc/backup.class.php:159
+#: ../../../../inc/Backup.class.php:166
msgid "Esta operación sólo es posible en entornos Linux"
msgstr "This operation is only available on Linux environments"
-#: ../../../../inc/backup.class.php:163
+#: ../../../../inc/Backup.class.php:168
msgid "Error al realizar backup en modo compatibilidad"
msgstr "Error while doing backup in compatibility mode"
-#: ../../../../inc/backup.class.php:222
+#: ../../../../inc/Backup.class.php:222
+#: ../../../../inc/XmlExport.class.php:464
+msgid "No es posible crear el directorio de backups"
+msgstr "Unable to create backups directory"
+
+#: ../../../../inc/Backup.class.php:227
+#: ../../../../inc/XmlExport.class.php:469
msgid "Compruebe los permisos del directorio de backups"
msgstr "Check backup directory permissions"
-#: ../../../../inc/category.class.php:183
+#: ../../../../inc/Category.class.php:69
+#: ../../../../inc/Category.class.php:165
+msgid "Nombre de categoría duplicado"
+msgstr "Duplicated category name"
+
+#: ../../../../inc/Category.class.php:78
+msgid "Error al crear la categoría"
+msgstr "Error on creating category"
+
+#: ../../../../inc/Category.class.php:83
+#: ../../../../inc/Category.class.php:132
+#: ../../../../inc/Category.class.php:182
+#: ../../../../web/SearchC.class.php:283
+#: ../../../../inc/themes/classic/account.inc:42
+#: ../../../../inc/themes/classic/search.inc:44
+#: ../../../../inc/themes/material-blue/account.inc:50
+#: ../../../../inc/themes/material-blue/search.inc:49
+msgid "Categoría"
+msgstr "Category"
+
+#: ../../../../inc/Category.class.php:119
+msgid "Categoría en uso por:"
+msgstr "Category in use by:"
+
+#: ../../../../inc/Category.class.php:129
+msgid "Error al eliminar la categoría"
+msgstr "Error on category deletion"
+
+#: ../../../../inc/Category.class.php:132
+#: ../../../../web/AccountsMgmtC.class.php:101
+msgid "Eliminar Categoría"
+msgstr "Delete Category"
+
+#: ../../../../inc/Category.class.php:179
+msgid "Error al actualizar la categoría"
+msgstr "Error on updating category"
+
+#: ../../../../inc/Category.class.php:182
msgid "Modificar Categoría"
msgstr "Category Edit"
-#: ../../../../inc/common.class.php:61 ../../../../inc/users.class.php:108
-msgid "N/D"
-msgstr "N/A"
-
-#: ../../../../inc/common.class.php:62
-msgid "Acción"
-msgstr "Action"
-
-#: ../../../../inc/common.class.php:63
-msgid "Realizado por"
-msgstr "Performed by"
-
-#: ../../../../inc/common.class.php:81
-msgid "Correo enviado"
-msgstr "Email sent"
-
-#: ../../../../inc/common.class.php:83
-msgid "Error al enviar correo"
-msgstr "Error on sending email"
-
-#: ../../../../inc/common.class.php:88
-msgid "Destinatario"
-msgstr "Recipient"
-
-#: ../../../../inc/common.class.php:89
-msgid "CC"
-msgstr "CC"
-
-#: ../../../../inc/common.class.php:91
-msgid "Enviar Email"
-msgstr "Send Email"
-
-#: ../../../../inc/common.class.php:146
-msgid "Aviso"
-msgstr "Warning"
-
-#: ../../../../inc/common.class.php:210
-msgid "Indicar el usuario de conexión a la base de datos de phpPMS"
-msgstr "Enter phpPMS database connection user"
-
-#: ../../../../inc/common.class.php:211
-msgid "Indicar el nombre de la base de datos de phpPMS"
-msgstr "Enter phpPMS database name"
-
-#: ../../../../inc/common.class.php:212
-msgid "Indicar el servidor de la base de datos de phpPMS"
-msgstr "Enter phpPMS database server name"
-
-#: ../../../../inc/common.class.php:213
-msgid ""
-"Habilita el nombre de la cuenta de la búsqueda, como enlace a los detalles "
-"de la cuenta"
-msgstr ""
-"It enables account name as a link to the account details in search page"
-
-#: ../../../../inc/common.class.php:214
-msgid "Número de resultados por página a mostrar, al realizar una búsqueda"
-msgstr "Number of results that are shown per page when searching"
-
-#: ../../../../inc/common.class.php:215
-msgid "Habilita la subida/descarga de archivos para las cuentas"
-msgstr "It enables upload/download the accounts' files"
-
-#: ../../../../inc/common.class.php:216
-msgid "Establece el tamaño máximo para subir archivos"
-msgstr "Sets up the max upload file size."
-
-#: ../../../../inc/common.class.php:216
-msgid "El máximo absuluto es de 16MB"
-msgstr "The absolute maximum is 16MB."
-
-#: ../../../../inc/common.class.php:217
-msgid ""
-"Habilita la opción de añadir un enlace a Wiki externa para los resultados de "
-"la búsqueda"
-msgstr ""
-"It enables the option to add an external Wiki link for the accounts search "
-"results"
-
-#: ../../../../inc/common.class.php:218
-msgid ""
-"URL que utiliza la wiki para realizar una búsqueda de una página en esta"
-msgstr "URL that wiki uses to do a page search on it."
-
-#: ../../../../inc/common.class.php:218
-msgid "Como parámetro se utiliza el nombre del cliente"
-msgstr "It uses customer name as parameter."
-
-#: ../../../../inc/common.class.php:218 ../../../../inc/common.class.php:219
-#: ../../../../inc/common.class.php:222 ../../../../inc/common.class.php:223
-#: ../../../../inc/common.class.php:224
-msgid "Ejemplo"
-msgstr "Example"
-
-#: ../../../../inc/common.class.php:219
-msgid ""
-"URL que utiliza la wiki para acceder a los detalles de una página de ésta"
-msgstr "URL that wiki uses to access to page details on it."
-
-#: ../../../../inc/common.class.php:219
-msgid ""
-"El nombre de la cuenta se utiliza como parámetro de la variable de búsqueda "
-"de la Wiki"
-msgstr "The account name is used as wiki search variable parameter."
-
-#: ../../../../inc/common.class.php:220
-msgid ""
-"Prefijo para determinar qué cuentas tienen un enlace a una página de la Wiki"
-msgstr "Preffix to select what accounts have a wiki page link"
-
-#: ../../../../inc/common.class.php:220
-msgid "Ejemplos"
-msgstr "Examples"
-
-#: ../../../../inc/common.class.php:221
-msgid "Habilita de autentificación mediante servidor LDAP"
-msgstr "It enables LDAP authentication"
-
-#: ../../../../inc/common.class.php:221
-msgid "Este método utilizará MySQL en caso de fallo"
-msgstr "This method will switch to MySQL on failure"
-
-#: ../../../../inc/common.class.php:222
-msgid "Usuario para conectar con el servicio de LDAP"
-msgstr "User to connect LDAP server"
-
-#: ../../../../inc/common.class.php:223
-msgid "Base en la que realizar la búsqueda de usuarios de LDAP"
-msgstr "LDAP base to do users searches."
-
-#: ../../../../inc/common.class.php:224
-msgid ""
-"Grupo de LDAP al que debe de pertenecer el usuario para permitir el acceso"
-msgstr "LDAP group that users belong to for access permission"
-
-#: ../../../../inc/common.class.php:225
-msgid "Nombre o dirección IP del servidor de LDAP"
-msgstr "LDAP server hostname or IP address"
-
-#: ../../../../inc/common.class.php:226
-msgid "Establece una nueva clave maestra sin re-encriptar las cuentas"
-msgstr "Sets a new master password without re-encrypting the accounts."
-
-#: ../../../../inc/common.class.php:227
-msgid "Clave del usuario de conexión a LDAP"
-msgstr "LDAP bind user password"
-
-#: ../../../../inc/common.class.php:228
-msgid ""
-"En este modo no se puede acceder a la aplicación. Para deshabilitarlo es "
-"necesario modificar el archivo de configuración"
-msgstr ""
-"In this mode you cannot login to application. To disable it, you need to "
-"modify configuration file."
-
-#: ../../../../inc/common.class.php:229
-msgid ""
-"Muestra información relativa a la configuración de la aplicación y "
-"rendimiento"
-msgstr "Shows some information about application and performance."
-
-#: ../../../../inc/common.class.php:230
-msgid "Guarda las acciones realizadas en la aplicación"
-msgstr "It saves the actions done by the application."
-
-#: ../../../../inc/common.class.php:231
-msgid ""
-"Comprobar actualizaciones de la aplicación (sólo para los usuarios "
-"administradores)"
-msgstr "Check for application updates (only for administrators)."
-
-#: ../../../../inc/common.class.php:232
-msgid "Extensiones de máximo 4 caracteres."
-msgstr "Extensions max length is 4 characters."
-
-#: ../../../../inc/common.class.php:232
-msgid "Escribir extensión y pulsar intro para añadir."
-msgstr "Write extension and press enter to add."
-
-#: ../../../../inc/common.class.php:233
-msgid ""
-"Importar desde KeePass o KeePassX. El nombre del cliente será igual a "
-"KeePass o KeePassX"
-msgstr ""
-"Import from KeePass or KeePassX. The customer name will be KeePass or "
-"KeePassX."
-
-#: ../../../../inc/common.class.php:233
-msgid "Importar desde un archivo CSV con el formato"
-msgstr "Import form a CSV file with the format"
-
-#: ../../../../inc/common.class.php:233
-msgid "nombre_de_cuenta;cliente;categoría;url;usuario;clave;notas"
-msgstr "account_name;customer;category;url;user;password;notes"
-
-#: ../../../../inc/common.class.php:233
-msgid ""
-"Si el cliente o la categoría no están creados, se crean automáticamente."
-msgstr ""
-"If the customer or category are not created, they will be automatically "
-"created."
-
-#: ../../../../inc/common.class.php:234
-msgid ""
-"Permite que las cuentas sin acceso sean visibles sólo para las búsquedas."
-msgstr "Allows to show the non-permission accounts only for searches."
-
-#: ../../../../inc/common.class.php:235
-msgid "Muestra los resultados de búsqueda de cuentas en formato tarjeta."
-msgstr "Enables to show account's search results like a card format."
-
-#: ../../../../inc/common.class.php:236
-msgid "Habilita el modo de conexión con LDAP de Active Directory."
-msgstr "Enables Active Directory LDAP connection mode."
-
-#: ../../../../inc/common.class.php:237
-msgid ""
-"Define el grupo de usuarios por defecto para los nuevos usuarios de LDAP."
-msgstr "Define the default users group for new LDAP users"
-
-#: ../../../../inc/common.class.php:238
-msgid ""
-"Define el perfil de usuario por defecto para los nuevos usuarios de LDAP."
-msgstr "Define the default users profile for new LDAP users"
-
-#: ../../../../inc/config.class.php:122 ../../../../inc/config.class.php:150
+#: ../../../../inc/Config.class.php:118 ../../../../inc/Config.class.php:401
msgid "Modificar configuración"
msgstr "Update Configuration"
-#: ../../../../inc/config.class.php:151
-msgid "Parámetro"
-msgstr "Parameter"
-
-#: ../../../../inc/config.class.php:152
-msgid "Valor"
-msgstr "Value"
-
-#: ../../../../inc/config.class.php:310
+#: ../../../../inc/Config.class.php:276
msgid "No es posible escribir el archivo de configuración"
msgstr "Unable to write in configuration file"
-#: ../../../../inc/config.class.php:311
+#: ../../../../inc/Config.class.php:276
msgid "Compruebe los permisos del directorio \"config\""
msgstr "Please, check the \"config\" directory permissions"
-#: ../../../../inc/customer.class.php:105
-msgid "Actualizar Cliente"
-msgstr "Update Customer"
+#: ../../../../inc/Config.class.php:402
+msgid "Parámetro"
+msgstr "Parameter"
-#: ../../../../inc/db.class.php:95 ../../../../inc/db.class.php:109
-#: ../../../../inc/db.class.php:116 ../../../../inc/installer.class.php:214
-msgid "No es posible conectar con la BD"
-msgstr "Unable to connect to the DB"
+#: ../../../../inc/Config.class.php:403
+msgid "Valor"
+msgstr "Value"
-#: ../../../../inc/db.class.php:95 ../../../../inc/installer.class.php:215
-msgid "Compruebe los datos de conexión"
-msgstr "Please, check connection parameters"
-
-#: ../../../../inc/groups.class.php:183
-msgid "Modificar Grupo"
-msgstr "Edit Group"
-
-#: ../../../../inc/html.class.php:207
-msgid "Javascript es necesario para el correcto funcionamiento"
-msgstr "Javascript is needed in order to run correctly"
-
-#: ../../../../inc/html.class.php:231
-msgid "Ayuda :: FAQ :: Changelog"
-msgstr "Help :: FAQ :: Changelog"
-
-#: ../../../../inc/html.class.php:233
-msgid "Un proyecto de cygnux.org"
-msgstr "A cygnux.org project"
-
-#: ../../../../inc/html.class.php:277
-msgid "Filtro ON"
-msgstr "Filter ON"
-
-#: ../../../../inc/html.class.php:279
-msgid "Global ON"
-msgstr "Global ON"
-
-#: ../../../../inc/html.class.php:284 ../../../../inc/html.class.php:318
-msgid "Primera página"
-msgstr "First page"
-
-#: ../../../../inc/html.class.php:285 ../../../../inc/html.class.php:319
-msgid "Página anterior"
-msgstr "Previous page"
-
-#: ../../../../inc/html.class.php:292 ../../../../inc/html.class.php:326
-msgid "Página siguiente"
-msgstr "Next page"
-
-#: ../../../../inc/html.class.php:293 ../../../../inc/html.class.php:327
-msgid "Última página"
-msgstr "Last page"
-
-#: ../../../../inc/html.class.php:424
+#: ../../../../inc/Controller.class.php:165
msgid "Opción no disponible"
msgstr "Option unavailable"
-#: ../../../../inc/html.class.php:424 ../../../../inc/html.class.php:425
-#: ../../../../inc/html.class.php:426 ../../../../inc/init.php:630
+#: ../../../../inc/Controller.class.php:165
+#: ../../../../inc/Controller.class.php:166
+#: ../../../../inc/Controller.class.php:167
+#: ../../../../inc/Controller.class.php:168 ../../../../inc/Init.class.php:290
msgid "Consulte con el administrador"
msgstr "Please, contact to the administrator"
-#: ../../../../inc/html.class.php:426
+#: ../../../../inc/Controller.class.php:167
msgid "No tiene permisos para acceder a esta página"
msgstr "You don't have permission to access to this page"
-#: ../../../../inc/import.class.php:89 ../../../../inc/migrate.class.php:117
-msgid "Importación finalizada"
-msgstr "Import finished"
+#: ../../../../inc/Controller.class.php:168
+msgid "No tiene permisos para realizar esta operación"
+msgstr "You don't have permission to do this operation"
-#: ../../../../inc/import.class.php:105
-msgid "Archivo no subido correctamente"
-msgstr "File successfully uploaded"
+#: ../../../../inc/Crypt.class.php:236
+msgid "No se puede usar el módulo de encriptación"
+msgstr "Crypto module cannot be loaded"
-#: ../../../../inc/import.class.php:105
-msgid "Verifique los permisos del usuario del servidor web"
-msgstr "Please, check the web server's user permissions"
+#: ../../../../inc/Crypt.class.php:247
+msgid "Error al generar datos cifrados"
+msgstr "Error on creating encryption data"
-#: ../../../../inc/import.class.php:113
-msgid "Compruebe la extensión del archivo"
-msgstr "Please, check file extension"
+#: ../../../../inc/CryptPKI.class.php:44
+msgid "No es posible generar las claves RSA"
+msgstr "Unable to cgenerate the RSA keys"
-#: ../../../../inc/import.class.php:124
-msgid "Compruebe la configuración de PHP para subir archivos"
-msgstr "Please, check PHP configuration for upload files"
+#: ../../../../inc/CryptPKI.class.php:110
+#: ../../../../inc/CryptPKI.class.php:141
+msgid "El archivo de clave no existe"
+msgstr "The key file does not exist"
-#: ../../../../inc/import.class.php:132
-msgid "Compruebe los permisos del directorio temporal"
-msgstr "Please, check temporary directory permissions"
+#: ../../../../inc/CsvImportBase.class.php:109
+#, php-format
+msgid "El número de campos es incorrecto (%d)"
+msgstr "Wrong number of fields (%d)"
-#: ../../../../inc/import.class.php:141
-msgid "Tipo mime no soportado"
-msgstr "Mime type not supported"
+#: ../../../../inc/CsvImportBase.class.php:110
+#, php-format
+msgid "Compruebe el formato del archivo CSV en línea %s"
+msgstr "Please, check CSV format in line %s"
-#: ../../../../inc/import.class.php:141
-msgid "Compruebe el formato del archivo"
-msgstr "Please, check the file format"
+#: ../../../../inc/CsvImportBase.class.php:140
+#: ../../../../inc/CsvImportBase.class.php:145
+#: ../../../../inc/Import.class.php:118 ../../../../inc/Import.class.php:124
+#: ../../../../inc/Migrate.class.php:349
+#: ../../../../inc/XmlImport.class.php:62
+#: ../../../../inc/XmlImport.class.php:63
+#: ../../../../web/ConfigC.class.php:216
+msgid "Importar Cuentas"
+msgstr "Import Accounts"
-#: ../../../../inc/import.class.php:159
-msgid "El número de campos es incorrecto"
-msgstr "The number of fields is incorrect"
-
-#: ../../../../inc/import.class.php:159
-msgid "Compruebe el formato del archivo CSV"
-msgstr "Please, check the CSV file format"
-
-#: ../../../../inc/import.class.php:164
+#: ../../../../inc/CsvImportBase.class.php:141
msgid "Error importando cuenta"
msgstr "Error on importing account"
-#: ../../../../inc/import.class.php:266
-msgid "No es posible procesar el archivo XML"
-msgstr "Unable to process XML file"
+#: ../../../../inc/CsvImportBase.class.php:142
+#, php-format
+msgid "Error procesando línea %s"
+msgstr "Error while processing line %s"
-#: ../../../../inc/import.class.php:294
-msgid "Archivo XML no soportado"
-msgstr "XML file not supported"
+#: ../../../../inc/CsvImportBase.class.php:145
+#, php-format
+msgid "Cuenta importada: %s"
+msgstr "Account %s imported"
-#: ../../../../inc/import.class.php:294
-msgid "No es posible detectar la aplicación que exportó los datos"
-msgstr "Unable to detect the application the data was exported from"
+#: ../../../../inc/CustomFieldsBase.class.php:81
+#: ../../../../inc/themes/classic/profiles.inc:98
+#: ../../../../inc/themes/material-blue/profiles.inc:114
+msgid "Categorías"
+msgstr "Categories"
-#: ../../../../inc/init.php:136
+#: ../../../../inc/CustomFieldsBase.class.php:82
+#: ../../../../inc/themes/classic/profiles.inc:103
+#: ../../../../inc/themes/material-blue/profiles.inc:119
+msgid "Clientes"
+msgstr "Customers"
+
+#: ../../../../inc/CustomFieldsBase.class.php:84
+#: ../../../../inc/themes/classic/account.inc:140
+#: ../../../../inc/themes/classic/profiles.inc:89
+#: ../../../../inc/themes/material-blue/account.inc:166
+#: ../../../../inc/themes/material-blue/profiles.inc:104
+msgid "Grupos"
+msgstr "Groups"
+
+#: ../../../../inc/Customer.class.php:50 ../../../../inc/Customer.class.php:95
+msgid "Cliente duplicado"
+msgstr "Duplicated customer"
+
+#: ../../../../inc/Customer.class.php:60
+msgid "Error al crear el cliente"
+msgstr "Error on creating customer"
+
+#: ../../../../inc/Customer.class.php:112
+msgid "Error al actualizar el cliente"
+msgstr "Error on updating customer"
+
+#: ../../../../inc/Customer.class.php:115
+msgid "Actualizar Cliente"
+msgstr "Update Customer"
+
+#: ../../../../inc/Customer.class.php:150
+msgid "Cliente en uso por:"
+msgstr "Customer in use by:"
+
+#: ../../../../inc/Customer.class.php:160
+msgid "Error al eliminar el cliente"
+msgstr "Error on customer deletion"
+
+#: ../../../../inc/Customer.class.php:163
+#: ../../../../web/AccountsMgmtC.class.php:159
+msgid "Eliminar Cliente"
+msgstr "Delete Customer"
+
+#: ../../../../inc/DBConnectionFactory.class.php:87
+#: ../../../../inc/DBConnectionFactory.class.php:89
+#: ../../../../inc/DBConnectionFactory.class.php:103
+#: ../../../../inc/Installer.class.php:235
+#: ../../../../inc/Migrate.class.php:115
+msgid "No es posible conectar con la BD"
+msgstr "Unable to connect to the DB"
+
+#: ../../../../inc/DBConnectionFactory.class.php:87
+#: ../../../../inc/DBConnectionFactory.class.php:89
+#: ../../../../inc/Installer.class.php:236
+#: ../../../../inc/Migrate.class.php:116
+msgid "Compruebe los datos de conexión"
+msgstr "Please, check connection parameters"
+
+#: ../../../../inc/Email.class.php:59 ../../../../inc/UserUtil.class.php:567
+msgid "N/D"
+msgstr "N/A"
+
+#: ../../../../inc/Email.class.php:60 ../../../../web/UsersMgmtC.class.php:392
+#: ../../../../inc/themes/classic/tokens.inc:20
+#: ../../../../inc/themes/material-blue/tokens.inc:20
+msgid "Acción"
+msgstr "Action"
+
+#: ../../../../inc/Email.class.php:61
+msgid "Realizado por"
+msgstr "Performed by"
+
+#: ../../../../inc/Email.class.php:77
+msgid "Enviar Email"
+msgstr "Send Email"
+
+#: ../../../../inc/Email.class.php:81
+msgid "Correo enviado"
+msgstr "Email sent"
+
+#: ../../../../inc/Email.class.php:83
+msgid "Error al enviar correo"
+msgstr "Error on sending email"
+
+#: ../../../../inc/Email.class.php:87
+msgid "Destinatario"
+msgstr "Recipient"
+
+#: ../../../../inc/Email.class.php:90
+msgid "CC"
+msgstr "CC"
+
+#: ../../../../inc/Email.class.php:146
+msgid "Aviso"
+msgstr "Warning"
+
+#: ../../../../inc/FileImport.class.php:105
+msgid "Archivo no subido correctamente"
+msgstr "File successfully uploaded"
+
+#: ../../../../inc/FileImport.class.php:105
+msgid "Verifique los permisos del usuario del servidor web"
+msgstr "Please, check the web server's user permissions"
+
+#: ../../../../inc/FileImport.class.php:116
+msgid "Compruebe la extensión del archivo"
+msgstr "Please, check file extension"
+
+#: ../../../../inc/FileImport.class.php:132
+msgid "Compruebe la configuración de PHP para subir archivos"
+msgstr "Please, check PHP configuration for upload files"
+
+#: ../../../../inc/FileImport.class.php:150
+#: ../../../../inc/FileImport.class.php:168
+msgid "Compruebe los permisos del directorio temporal"
+msgstr "Please, check temporary directory permissions"
+
+#: ../../../../inc/Files.class.php:111
+#: ../../../../inc/themes/classic/files.inc:15
+#: ../../../../inc/themes/material-blue/files.inc:16
+msgid "Eliminar Archivo"
+msgstr "Delete File"
+
+#: ../../../../inc/Groups.class.php:155
+msgid "Error al añadir los usuarios del grupo"
+msgstr "Error while adding users to group"
+
+#: ../../../../inc/Groups.class.php:256
+msgid "Error al actualizar los usuarios del grupo"
+msgstr "Error while updating group users"
+
+#: ../../../../inc/Groups.class.php:369
+#: ../../../../web/UsersMgmtC.class.php:209
+msgid "Eliminar Grupo"
+msgstr "Delete Group"
+
+#: ../../../../inc/Groups.class.php:372
+msgid "Error al eliminar los usuarios del grupo"
+msgstr "Error while deleting group users"
+
+#: ../../../../inc/Import.class.php:109
+msgid "Tipo mime no soportado"
+msgstr "Mime type not supported"
+
+#: ../../../../inc/Import.class.php:110
+msgid "Compruebe el formato del archivo"
+msgstr "Please, check the file format"
+
+#: ../../../../inc/Import.class.php:124 ../../../../inc/Import.class.php:127
+#: ../../../../inc/Migrate.class.php:92
+msgid "Importación finalizada"
+msgstr "Import finished"
+
+#: ../../../../inc/Init.class.php:199
msgid "Error en la verificación de la base de datos"
msgstr "Error on checking database"
-#: ../../../../inc/init.php:343
-msgid "El directorio \"/config\" no existe"
-msgstr "The \"/config\" directory does not exist."
-
-#: ../../../../inc/init.php:348
-msgid "No es posible escribir en el directorio \"config\""
-msgstr "Unable to write into the \"/config\" directory"
-
-#: ../../../../inc/init.php:356
-msgid "Los permisos del directorio \"/config\" son incorrectos"
-msgstr "The \"/config\" directory permissions are incorrect"
-
-#: ../../../../inc/init.php:356
-msgid "Actual:"
-msgstr "Current:"
-
-#: ../../../../inc/init.php:356
-msgid "Necesario: 750"
-msgstr "Needed: 750"
-
-#: ../../../../inc/init.php:423
-msgid "Aplicación en mantenimiento"
-msgstr "Application in maintenance"
-
-#: ../../../../inc/init.php:423
-msgid "En breve estará operativa"
-msgstr "It will be running in short"
-
-#: ../../../../inc/init.php:455
-msgid "La aplicación necesita actualizarse"
-msgstr "The application needs to be updated"
-
-#: ../../../../inc/init.php:455
-msgid "Si es un administrador pulse en el enlace:"
-msgstr "If you are an administrator, click on the link:"
-
-#: ../../../../inc/init.php:455 ../../../../inc/tpl/upgrade.php:54
-msgid "Actualizar"
-msgstr "Update"
-
-#: ../../../../inc/init.php:484
-msgid "Actualización"
-msgstr "Update"
-
-#: ../../../../inc/init.php:485
-msgid "Actualización de versión realizada."
-msgstr "Version updating done."
-
-#: ../../../../inc/init.php:486
-msgid "Versión"
-msgstr "Version"
-
-#: ../../../../inc/init.php:543
-msgid "Finalizar sesión"
-msgstr "Logout session"
-
-#: ../../../../inc/init.php:545
-msgid "Tiempo inactivo"
-msgstr "Inactive time"
-
-#: ../../../../inc/init.php:546
-msgid "Tiempo total"
-msgstr "Total time"
-
-#: ../../../../inc/init.php:624
+#: ../../../../inc/Init.class.php:286
msgid "Sesion"
msgstr "Session"
-#: ../../../../inc/init.php:624 ../../../../inc/init.php:629
+#: ../../../../inc/Init.class.php:286 ../../../../inc/Init.class.php:290
msgid "La sesión no puede ser inicializada"
msgstr "Session cannot be initialized"
-#: ../../../../inc/installer.class.php:90
+#: ../../../../inc/Init.class.php:417
+msgid "El directorio \"/config\" no existe"
+msgstr "The \"/config\" directory does not exist."
+
+#: ../../../../inc/Init.class.php:422
+msgid "No es posible escribir en el directorio \"config\""
+msgstr "Unable to write into the \"/config\" directory"
+
+#: ../../../../inc/Init.class.php:430
+msgid "Los permisos del directorio \"/config\" son incorrectos"
+msgstr "The \"/config\" directory permissions are incorrect"
+
+#: ../../../../inc/Init.class.php:430
+msgid "Actual:"
+msgstr "Current:"
+
+#: ../../../../inc/Init.class.php:430
+msgid "Necesario: 750"
+msgstr "Needed: 750"
+
+#: ../../../../inc/Init.class.php:479
+msgid "Aplicación en mantenimiento"
+msgstr "Application in maintenance"
+
+#: ../../../../inc/Init.class.php:479
+msgid "En breve estará operativa"
+msgstr "It will be running in short"
+
+#: ../../../../inc/Init.class.php:516
+msgid "Finalizar sesión"
+msgstr "Logout session"
+
+#: ../../../../inc/Init.class.php:518
+msgid "Tiempo inactivo"
+msgstr "Inactive time"
+
+#: ../../../../inc/Init.class.php:519
+msgid "Tiempo total"
+msgstr "Total time"
+
+#: ../../../../inc/Init.class.php:558
+msgid "La aplicación necesita actualizarse"
+msgstr "The application needs to be updated"
+
+#: ../../../../inc/Init.class.php:558
+#, php-format
+msgid "Si es un administrador pulse en el enlace: %s"
+msgstr "If you are an administrator, click on the link: %s"
+
+#: ../../../../inc/Init.class.php:558
+#: ../../../../inc/themes/classic/upgrade.inc:20
+#: ../../../../inc/themes/material-blue/upgrade.inc:24
+msgid "Actualizar"
+msgstr "Update"
+
+#: ../../../../inc/Init.class.php:589
+msgid "Actualización"
+msgstr "Update"
+
+#: ../../../../inc/Init.class.php:590
+msgid "Actualización de versión realizada."
+msgstr "Version updating done."
+
+#: ../../../../inc/Init.class.php:591
+#: ../../../../inc/themes/classic/info.inc:33
+#: ../../../../inc/themes/material-blue/info.inc:33
+msgid "Versión"
+msgstr "Version"
+
+#: ../../../../inc/Installer.class.php:127
msgid "Indicar nombre de usuario admin"
msgstr "Enter the admin username"
-#: ../../../../inc/installer.class.php:91
+#: ../../../../inc/Installer.class.php:128
msgid "Usuario admin para acceso a la aplicación"
msgstr "Admin user to login to the application"
-#: ../../../../inc/installer.class.php:96
+#: ../../../../inc/Installer.class.php:132
msgid "Indicar la clave de admin"
msgstr "Enter the admin's password"
-#: ../../../../inc/installer.class.php:97
+#: ../../../../inc/Installer.class.php:133
msgid "Clave del usuario admin de la aplicación"
msgstr "Application administrator's password"
-#: ../../../../inc/installer.class.php:103
+#: ../../../../inc/Installer.class.php:137
msgid "Indicar la clave maestra"
msgstr "Enter the master password"
-#: ../../../../inc/installer.class.php:104
+#: ../../../../inc/Installer.class.php:138
msgid "Clave maestra para encriptar las claves"
msgstr "Master password to encrypt the passwords"
-#: ../../../../inc/installer.class.php:109
+#: ../../../../inc/Installer.class.php:142
msgid "Clave maestra muy corta"
msgstr "Master password too short"
-#: ../../../../inc/installer.class.php:110
+#: ../../../../inc/Installer.class.php:143
msgid "La longitud de la clave maestra ha de ser mayor de 11 caracteres"
msgstr "The master password length need to be at least 11 characters"
-#: ../../../../inc/installer.class.php:116
+#: ../../../../inc/Installer.class.php:147
msgid "Indicar el usuario de la BBDD"
msgstr "Enter the database user"
-#: ../../../../inc/installer.class.php:117
+#: ../../../../inc/Installer.class.php:148
msgid "Usuario con permisos de administrador de la Base de Datos"
msgstr "An user with database administrative rights"
-#: ../../../../inc/installer.class.php:122
+#: ../../../../inc/Installer.class.php:152
msgid "Indicar la clave de la BBDD"
msgstr "Enter the database password"
-#: ../../../../inc/installer.class.php:123
+#: ../../../../inc/Installer.class.php:153
msgid "Clave del usuario administrador de la Base de Datos"
msgstr "Database administartor's password"
-#: ../../../../inc/installer.class.php:128
+#: ../../../../inc/Installer.class.php:157
msgid "Indicar el nombre de la BBDD"
msgstr "Enter the database name"
-#: ../../../../inc/installer.class.php:129
+#: ../../../../inc/Installer.class.php:158
msgid "Nombre para la BBDD de la aplicación pej. syspass"
msgstr "Application database name. eg. syspass"
-#: ../../../../inc/installer.class.php:134
+#: ../../../../inc/Installer.class.php:162
msgid "El nombre de la BBDD no puede contener \".\""
msgstr "Database name cannot contain \".\""
-#: ../../../../inc/installer.class.php:135
+#: ../../../../inc/Installer.class.php:163
msgid "Elimine los puntos del nombre de la Base de Datos"
msgstr "Please, remove dots in database name"
-#: ../../../../inc/installer.class.php:141
+#: ../../../../inc/Installer.class.php:167
msgid "Indicar el servidor de la BBDD"
msgstr "Enter the database server"
-#: ../../../../inc/installer.class.php:142
+#: ../../../../inc/Installer.class.php:168
msgid "Servidor donde se instalará la Base de Datos"
msgstr "Server where the database will be installed"
-#: ../../../../inc/installer.class.php:260
-msgid "La BBDD ya existe"
-msgstr "The database already exist"
-
-#: ../../../../inc/installer.class.php:261
-msgid "Indique una nueva Base de Datos o elimine la existente"
-msgstr "Enter a new database or delete the existing one"
-
-#: ../../../../inc/installer.class.php:286
+#: ../../../../inc/Installer.class.php:313
msgid "El usuario de MySQL ya existe"
msgstr "The MySQL user already exist"
-#: ../../../../inc/installer.class.php:287
+#: ../../../../inc/Installer.class.php:314
msgid "Indique un nuevo usuario o elimine el existente"
msgstr "Enter a new username or delete the existing one"
-#: ../../../../inc/installer.class.php:304
-#: ../../../../inc/installer.class.php:382
+#: ../../../../inc/Installer.class.php:327
+msgid "La BBDD ya existe"
+msgstr "The database already exist"
+
+#: ../../../../inc/Installer.class.php:328
+msgid "Indique una nueva Base de Datos o elimine la existente"
+msgstr "Enter a new database or delete the existing one"
+
+#: ../../../../inc/Installer.class.php:337
+#: ../../../../inc/Installer.class.php:408
msgid "Error al crear la BBDD"
msgstr "Error on DB creation"
-#: ../../../../inc/installer.class.php:305
-#: ../../../../inc/installer.class.php:317
+#: ../../../../inc/Installer.class.php:338
+#: ../../../../inc/Installer.class.php:349
msgid "Verifique los permisos del usuario de la Base de Datos"
msgstr "Please, check database user permissions"
-#: ../../../../inc/installer.class.php:316
+#: ../../../../inc/Installer.class.php:348
msgid "Error al establecer permisos de la BBDD"
msgstr "Error on setting database permissions"
-#: ../../../../inc/installer.class.php:360
+#: ../../../../inc/Installer.class.php:381
msgid "El archivo de estructura de la BBDD no existe"
msgstr "The database structure file does not exist"
-#: ../../../../inc/installer.class.php:361
+#: ../../../../inc/Installer.class.php:382
msgid "No es posible crear la BBDD de la aplicación. Descárguela de nuevo."
msgstr "Unable to create the application database. Please, download it again."
-#: ../../../../inc/installer.class.php:367
+#: ../../../../inc/Installer.class.php:390
msgid "Error al seleccionar la BBDD"
msgstr "Error on selecting database."
-#: ../../../../inc/installer.class.php:368
+#: ../../../../inc/Installer.class.php:391
msgid ""
"No es posible usar la Base de Datos para crear la estructura. Compruebe los "
"permisos y que no exista."
@@ -1823,1314 +1935,2852 @@ msgstr ""
"Unable to use the database to create the structure. Check permissions and it "
"does not exist."
-#: ../../../../inc/installer.class.php:383
+#: ../../../../inc/Installer.class.php:409
msgid "Error al crear la estructura de la Base de Datos."
msgstr "Error on creating database structure."
-#: ../../../../inc/installer.class.php:409
+#: ../../../../inc/Installer.class.php:432
msgid "Error al crear el grupo \"admin\""
msgstr "Error on creating \"admin\" group"
-#: ../../../../inc/installer.class.php:410
-#: ../../../../inc/installer.class.php:441
-#: ../../../../inc/installer.class.php:459
-#: ../../../../inc/installer.class.php:474
+#: ../../../../inc/Installer.class.php:433
+#: ../../../../inc/Installer.class.php:466
+#: ../../../../inc/Installer.class.php:483
+#: ../../../../inc/Installer.class.php:496
msgid "Informe al desarrollador"
msgstr "Warn to developer"
-#: ../../../../inc/installer.class.php:440
+#: ../../../../inc/Installer.class.php:465
msgid "Error al crear el perfil \"admin\""
msgstr "Error on creating \"admin\" profile"
-#: ../../../../inc/installer.class.php:458
+#: ../../../../inc/Installer.class.php:482
msgid "Error al crear el usuario \"admin\""
msgstr "Error on creating \"admin\" user"
-#: ../../../../inc/installer.class.php:473
+#: ../../../../inc/Installer.class.php:495
msgid "Error al actualizar la clave maestra del usuario \"admin\""
msgstr "Error on updating master password for user \"admin\""
-#: ../../../../inc/ldap.class.php:100 ../../../../inc/ldap.class.php:105
+#: ../../../../inc/Ldap.class.php:127 ../../../../inc/Ldap.class.php:131
msgid "No es posible conectar con el servidor de LDAP"
msgstr "Unable to connect to the LDAP server"
-#: ../../../../inc/ldap.class.php:130 ../../../../inc/ldap.class.php:136
+#: ../../../../inc/Ldap.class.php:156 ../../../../inc/Ldap.class.php:161
msgid "Error al conectar (BIND)"
msgstr "Connection error (BIND)"
-#: ../../../../inc/ldap.class.php:159 ../../../../inc/ldap.class.php:165
+#: ../../../../inc/Ldap.class.php:184 ../../../../inc/Ldap.class.php:189
msgid "Error al buscar objetos en DN base"
msgstr "Error on searching objects in base DN"
-#: ../../../../inc/ldap.class.php:193 ../../../../inc/ldap.class.php:199
-#: ../../../../inc/ldap.class.php:206 ../../../../inc/ldap.class.php:211
-#: ../../../../inc/ldap.class.php:221 ../../../../inc/ldap.class.php:226
+#: ../../../../inc/Ldap.class.php:217 ../../../../inc/Ldap.class.php:222
+#: ../../../../inc/Ldap.class.php:229 ../../../../inc/Ldap.class.php:233
+#: ../../../../inc/Ldap.class.php:242 ../../../../inc/Ldap.class.php:246
msgid "Error al buscar RDN de grupo"
msgstr "Error on searching group RDN"
-#: ../../../../inc/ldap.class.php:214
-msgid "RDN de grupo encontrado"
-msgstr "Group RDN found"
-
-#: ../../../../inc/ldap.class.php:278 ../../../../inc/ldap.class.php:284
-#: ../../../../inc/ldap.class.php:299 ../../../../inc/ldap.class.php:304
+#: ../../../../inc/Ldap.class.php:295 ../../../../inc/Ldap.class.php:300
+#: ../../../../inc/Ldap.class.php:314 ../../../../inc/Ldap.class.php:318
msgid "Error al buscar el DN del usuario"
msgstr "Error on searching user DN"
-#: ../../../../inc/ldap.class.php:291 ../../../../inc/ldap.class.php:296
+#: ../../../../inc/Ldap.class.php:307 ../../../../inc/Ldap.class.php:311
msgid "Error al localizar el usuario en LDAP"
msgstr "Error on searching user on LDAP"
-#: ../../../../inc/ldap.class.php:380 ../../../../inc/ldap.class.php:386
+#: ../../../../inc/Ldap.class.php:392 ../../../../inc/Ldap.class.php:397
+#: ../../../../inc/LdapADS.class.php:99 ../../../../inc/LdapADS.class.php:104
msgid "Error al buscar el grupo de usuarios"
msgstr "Error on searching users group"
-#: ../../../../inc/ldap.class.php:392 ../../../../inc/ldap.class.php:398
-msgid "El usuario no pertenece al grupo"
-msgstr "The user has not associated groups"
+#: ../../../../inc/Ldap.class.php:404
+msgid "Usuario verificado en grupo"
+msgstr "User in group verified"
-#: ../../../../inc/log.class.php:82
+#: ../../../../inc/LdapADS.class.php:108 ../../../../inc/LdapADS.class.php:113
+msgid "No se encontró el grupo con ese nombre"
+msgstr "No group found with that name"
+
+#: ../../../../inc/Log.class.php:88
msgid "Vaciar Eventos"
msgstr "Clear Events"
-#: ../../../../inc/log.class.php:83 ../../../../inc/tpl/eventlog.php:129
+#: ../../../../inc/Log.class.php:88
+#: ../../../../inc/themes/classic/eventlog.inc:100
+#: ../../../../inc/themes/material-blue/eventlog.inc:100
msgid "Vaciar registro de eventos"
msgstr "Clear event log"
-#: ../../../../inc/migrate.class.php:81
+#: ../../../../inc/Migrate.class.php:52
msgid "Faltan parámetros"
msgstr "Missing parameters"
-#: ../../../../inc/migrate.class.php:140
-msgid "El usuario/clave de MySQL no es correcto"
-msgstr "Wrong MySQL user/pass"
-
-#: ../../../../inc/migrate.class.php:141
-msgid "Verifique el usuario de conexión con la Base de Datos"
-msgstr "Please, check database connection user"
-
-#: ../../../../inc/migrate.class.php:185
+#: ../../../../inc/Migrate.class.php:149
msgid "La versión no es compatible"
msgstr "Incompatible version"
-#: ../../../../inc/migrate.class.php:186
+#: ../../../../inc/Migrate.class.php:150
msgid "Actualice a la última versión de phpPMS"
msgstr "Please, update to the last version of phpPMS"
-#: ../../../../inc/migrate.class.php:205
+#: ../../../../inc/Migrate.class.php:168
msgid "Error al obtener la configuración"
msgstr "Error on retrieving configuration"
-#: ../../../../inc/migrate.class.php:256 ../../../../inc/migrate.class.php:270
+#: ../../../../inc/Migrate.class.php:211 ../../../../inc/Migrate.class.php:224
msgid "Error al vaciar tabla"
msgstr "Error on cleaning table"
-#: ../../../../inc/migrate.class.php:275
+#: ../../../../inc/Migrate.class.php:229
msgid "Usuario actual no es administrador de la aplicación"
msgstr "Current user is not application administrator"
-#: ../../../../inc/migrate.class.php:323
+#: ../../../../inc/Migrate.class.php:274
msgid "No es posible crear el cliente"
msgstr "Unable to create the customer"
-#: ../../../../inc/migrate.class.php:324
+#: ../../../../inc/Migrate.class.php:275
msgid "Contacte con el desarrollador"
msgstr "Please, contact to the developer"
-#: ../../../../inc/migrate.class.php:328
+#: ../../../../inc/Migrate.class.php:279
msgid "Importar Clientes"
msgstr "Import Customers"
-#: ../../../../inc/migrate.class.php:330 ../../../../inc/migrate.class.php:404
-#: ../../../../inc/migrate.class.php:493 ../../../../inc/migrate.class.php:567
-#: ../../../../inc/migrate.class.php:659 ../../../../inc/migrate.class.php:722
-#: ../../../../inc/migrate.class.php:798 ../../../../inc/migrate.class.php:877
-#: ../../../../inc/migrate.class.php:948
+#: ../../../../inc/Migrate.class.php:281 ../../../../inc/Migrate.class.php:351
+#: ../../../../inc/Migrate.class.php:452 ../../../../inc/Migrate.class.php:525
+#: ../../../../inc/Migrate.class.php:633 ../../../../inc/Migrate.class.php:698
+#: ../../../../inc/Migrate.class.php:772 ../../../../inc/Migrate.class.php:862
+#: ../../../../inc/Migrate.class.php:933
msgid "Registros"
msgstr "Records"
-#: ../../../../inc/migrate.class.php:350
+#: ../../../../inc/Migrate.class.php:303
msgid "Error al obtener los clientes"
msgstr "Error on retrieving customer"
-#: ../../../../inc/migrate.class.php:389
+#: ../../../../inc/Migrate.class.php:345
msgid "Error al obtener cuentas"
msgstr "Error on retrieving accounts"
-#: ../../../../inc/migrate.class.php:430
+#: ../../../../inc/Migrate.class.php:374
msgid "Cliente no encontrado"
msgstr "Customer not found"
-#: ../../../../inc/migrate.class.php:456
+#: ../../../../inc/Migrate.class.php:417
msgid "Error al migrar cuenta"
msgstr "Error on importing account"
-#: ../../../../inc/migrate.class.php:478
+#: ../../../../inc/Migrate.class.php:446
msgid "Error al obtener los grupos de cuentas"
msgstr "Error on retrieving accounts groups"
-#: ../../../../inc/migrate.class.php:491
+#: ../../../../inc/Migrate.class.php:450
msgid "Importar Grupos de Cuentas"
msgstr "Import Accounts Groups"
-#: ../../../../inc/migrate.class.php:514
+#: ../../../../inc/Migrate.class.php:472
msgid "Error al crear grupos de cuentas"
msgstr "Error on accounts groups creation"
-#: ../../../../inc/migrate.class.php:552
+#: ../../../../inc/Migrate.class.php:519
msgid "Error al obtener el historico de cuentas"
msgstr "Error on retrieving accounts history"
-#: ../../../../inc/migrate.class.php:565
+#: ../../../../inc/Migrate.class.php:523
msgid "Importar Histórico de Cuentas"
msgstr "Import Accounts History"
-#: ../../../../inc/migrate.class.php:618
+#: ../../../../inc/Migrate.class.php:592
msgid "Error al crear historico de cuentas"
msgstr "Error on creating accounts history"
-#: ../../../../inc/migrate.class.php:644
+#: ../../../../inc/Migrate.class.php:627
msgid "Error al obtener los archivos de cuentas"
msgstr "Error on retrieving accounts files"
-#: ../../../../inc/migrate.class.php:657
+#: ../../../../inc/Migrate.class.php:631
msgid "Importar Archivos de Cuentas"
msgstr "Import Accounts Files"
-#: ../../../../inc/migrate.class.php:685
+#: ../../../../inc/Migrate.class.php:663
msgid "Error al crear archivos de cuentas"
msgstr "Error on creating accounts files"
-#: ../../../../inc/migrate.class.php:707
+#: ../../../../inc/Migrate.class.php:692
msgid "Error al obtener las categorías de cuentas"
msgstr "Error on retrieving accounts categories"
-#: ../../../../inc/migrate.class.php:720
+#: ../../../../inc/Migrate.class.php:696
msgid "Importar Categorías de Cuentas"
msgstr "Import Accounts Categories"
-#: ../../../../inc/migrate.class.php:744
+#: ../../../../inc/Migrate.class.php:718
msgid "Error al crear categorías de cuentas"
msgstr "Error on retrieving accounts categories"
-#: ../../../../inc/migrate.class.php:783
+#: ../../../../inc/Migrate.class.php:766
msgid "Error al obtener los usuarios"
msgstr "Error on retrieving users"
-#: ../../../../inc/migrate.class.php:796
+#: ../../../../inc/Migrate.class.php:770
msgid "Importar Usuarios"
msgstr "Import Users"
-#: ../../../../inc/migrate.class.php:839
+#: ../../../../inc/Migrate.class.php:827
msgid "Error al crear usuarios"
msgstr "Error on creating users"
-#: ../../../../inc/migrate.class.php:862
+#: ../../../../inc/Migrate.class.php:856
msgid "Error al obtener los grupos de usuarios"
msgstr "Error on retrieving users groups"
-#: ../../../../inc/migrate.class.php:875
+#: ../../../../inc/Migrate.class.php:860
msgid "Importar Grupos de Usuarios"
msgstr "Import Users Groups"
-#: ../../../../inc/migrate.class.php:900
+#: ../../../../inc/Migrate.class.php:886
msgid "Error al crear los grupos de usuarios"
msgstr "Error on adding users groups"
-#: ../../../../inc/migrate.class.php:946
+#: ../../../../inc/Migrate.class.php:931
msgid "Importar Configuración"
msgstr "Import Configuration"
-#: ../../../../inc/profiles.class.php:258
+#: ../../../../inc/Profile.class.php:69 ../../../../inc/Profile.class.php:123
+#: ../../../../inc/Profile.class.php:128
+msgid "Migrar Perfiles"
+msgstr "Migrate Profiles"
+
+#: ../../../../inc/Profile.class.php:69
+msgid "Error al obtener perfiles"
+msgstr "Error while retrieving profiles"
+
+#: ../../../../inc/Profile.class.php:126
+msgid "Operación realizada correctamente"
+msgstr "Operation done successfully"
+
+#: ../../../../inc/Profile.class.php:128
+msgid "Fallo al realizar la operación"
+msgstr "Error while doing operation"
+
+#: ../../../../inc/ProfileBase.class.php:164
+msgid "Datos de perfil incorrectos"
+msgstr "Wrong profile data"
+
+#: ../../../../inc/ProfileBase.class.php:550
+#: ../../../../web/UsersMgmtC.class.php:274
+msgid "Eliminar Perfil"
+msgstr "Delete Profile"
+
+#: ../../../../inc/ProfileBase.class.php:593
msgid "Modificar Perfil"
msgstr "Edit Profile"
-#: ../../../../inc/tpl/accounts.php:63
-msgid "Editar Cuenta"
-msgstr "Edit Account"
-
-#: ../../../../inc/tpl/accounts.php:178
-msgid "Nombre de cuenta"
-msgstr "Account name"
-
-#: ../../../../inc/tpl/accounts.php:197
-msgid "Buscar en desplegable o introducir"
-msgstr "Search down or enter"
-
-#: ../../../../inc/tpl/accounts.php:223
-msgid "URL o IP de acceso"
-msgstr "Access URL or IP"
-
-#: ../../../../inc/tpl/accounts.php:239
-msgid "Usuario de acceso"
-msgstr "Access user"
-
-#: ../../../../inc/tpl/accounts.php:255 ../../../../inc/tpl/editpass.php:61
-msgid "La clave generada se mostrará aquí"
-msgstr "The generated password will be shown here"
-
-#: ../../../../inc/tpl/accounts.php:273
-msgid "Notas sobre la cuenta"
-msgstr "Notes about the account"
-
-#: ../../../../inc/tpl/accounts.php:279
-msgid "Permisos"
-msgstr "Permissions"
-
-#: ../../../../inc/tpl/accounts.php:306 ../../../../inc/tpl/accounts.php:337
-msgid "Hablitar edición"
-msgstr "Enable Edit"
-
-#: ../../../../inc/tpl/accounts.php:307 ../../../../inc/tpl/accounts.php:338
-#: ../../../../inc/tpl/accounts.php:601 ../../../../inc/tpl/masterpass.php:178
-#: ../../../../inc/tpl/migrate.php:132
-msgid "SI"
-msgstr "YES"
-
-#: ../../../../inc/tpl/accounts.php:307 ../../../../inc/tpl/accounts.php:338
-#: ../../../../inc/tpl/accounts.php:599 ../../../../inc/tpl/masterpass.php:81
-#: ../../../../inc/tpl/masterpass.php:100
-#: ../../../../inc/tpl/masterpass.php:176 ../../../../inc/tpl/migrate.php:81
-#: ../../../../inc/tpl/migrate.php:130
-msgid "NO"
-msgstr "NO"
-
-#: ../../../../inc/tpl/accounts.php:314 ../../../../inc/tpl/profiles.php:90
-msgid "Grupos"
-msgstr "Groups"
-
-#: ../../../../inc/tpl/accounts.php:360 ../../../../inc/tpl/profiles.php:65
-msgid "Archivos"
-msgstr "Files"
-
-#: ../../../../inc/tpl/accounts.php:373
-msgid "Soltar archivos aquí (max. 5) o click para seleccionar"
-msgstr "Drop files here (max. 5) or click to select"
-
-#: ../../../../inc/tpl/accounts.php:373 ../../../../inc/tpl/config.php:204
-msgid "Tamaño máximo de archivo"
-msgstr "Maximum file size"
-
-#: ../../../../inc/tpl/accounts.php:385
-msgid "Historial"
-msgstr "History"
-
-#: ../../../../inc/tpl/accounts.php:402
-msgid "Seleccionar fecha"
-msgstr "Select date"
-
-#: ../../../../inc/tpl/accounts.php:410 ../../../../inc/tpl/users.php:193
-msgid "Última Modificación"
-msgstr "Last Modification"
-
-#: ../../../../inc/tpl/accounts.php:412
-msgid "por"
-msgstr "by"
-
-#: ../../../../inc/tpl/accounts.php:422
-msgid "Visitas"
-msgstr "Visits"
-
-#: ../../../../inc/tpl/accounts.php:426
-msgid "Fecha Alta"
-msgstr "Date Added"
-
-#: ../../../../inc/tpl/accounts.php:430
-msgid "Creador"
-msgstr "Creator"
-
-#: ../../../../inc/tpl/accounts.php:434
-msgid "Grupo Principal"
-msgstr "Main Group"
-
-#: ../../../../inc/tpl/accounts.php:439
-msgid "Usuarios Secundarios"
-msgstr "Secondary Users"
-
-#: ../../../../inc/tpl/accounts.php:460
-msgid "Grupos Secundarios"
-msgstr "Secondary Groups"
-
-#: ../../../../inc/tpl/accounts.php:482
-msgid "Fecha Edición"
-msgstr "Date Modified"
-
-#: ../../../../inc/tpl/accounts.php:486
-msgid "Editor"
-msgstr "Editor"
-
-#: ../../../../inc/tpl/accounts.php:508
-msgid "Ver Actual"
-msgstr "View Current"
-
-#: ../../../../inc/tpl/accounts.php:513 ../../../../inc/tpl/editpass.php:85
-#: ../../../../inc/tpl/request.php:72
-msgid "Atrás"
-msgstr "Back"
-
-#: ../../../../inc/tpl/accounts.php:520
-msgid "Restaurar cuenta desde este punto"
-msgstr "Restore account from this point"
-
-#: ../../../../inc/tpl/accounts.php:549 ../../../../inc/tpl/editpass.php:35
-msgid "Modificar Clave de Cuenta"
-msgstr "Edit Account Password"
-
-#: ../../../../inc/tpl/accounts.php:578 ../../../../inc/tpl/search.php:89
-msgid "Seleccionar Cliente"
-msgstr "Select Customer"
-
-#: ../../../../inc/tpl/accounts.php:580 ../../../../inc/tpl/accounts.php:585
-#: ../../../../inc/tpl/config.php:601 ../../../../inc/tpl/config.php:606
-#: ../../../../inc/tpl/search.php:89 ../../../../inc/tpl/search.php:90
-#: ../../../../inc/tpl/users.php:231 ../../../../inc/tpl/users.php:236
-msgid "Sin resultados"
-msgstr "No results"
-
-#: ../../../../inc/tpl/accounts.php:583 ../../../../inc/tpl/search.php:90
-msgid "Seleccionar Categoría"
-msgstr "Select category"
-
-#: ../../../../inc/tpl/accounts.php:588
-msgid "Seleccionar grupos secundarios"
-msgstr "Select secondary groups"
-
-#: ../../../../inc/tpl/accounts.php:591
-msgid "Seleccionar usuarios"
-msgstr "Select users"
-
-#: ../../../../inc/tpl/backup.php:42
-msgid "Último backup"
-msgstr "Last backup"
-
-#: ../../../../inc/tpl/backup.php:42
-msgid "No se encontraron backups"
-msgstr "There are no backups available"
-
-#: ../../../../inc/tpl/backup.php:48
-msgid "Resultado"
-msgstr "Result"
-
-#: ../../../../inc/tpl/backup.php:56
-msgid "Descargar Actual"
-msgstr "Download Current"
-
-#: ../../../../inc/tpl/backup.php:64
-msgid "No hay backups para descargar"
-msgstr "There are no backups for download"
-
-#: ../../../../inc/tpl/categories.php:42
-msgid "Nombre de la categoría"
-msgstr "Category name"
-
-#: ../../../../inc/tpl/categories.php:50
-msgid "Descripción de la categoría"
-msgstr "Category description"
-
-#: ../../../../inc/tpl/config.php:87
-msgid "Sitio"
-msgstr "Site"
-
-#: ../../../../inc/tpl/config.php:95
-msgid "Idioma"
-msgstr "Language"
-
-#: ../../../../inc/tpl/config.php:109
-msgid "Timeout de sesión (s)"
-msgstr "Session timeout (s)"
-
-#: ../../../../inc/tpl/config.php:118
-msgid "Habilitar log de eventos"
-msgstr "Enable event log"
-
-#: ../../../../inc/tpl/config.php:129
-msgid "Habilitar depuración"
-msgstr "Enable debug"
-
-#: ../../../../inc/tpl/config.php:140
-msgid "Modo mantenimiento"
-msgstr "Maintenance mode"
-
-#: ../../../../inc/tpl/config.php:151
-msgid "Comprobar actualizaciones"
-msgstr "Check for updates"
-
-#: ../../../../inc/tpl/config.php:162
-msgid "Nombre de cuenta como enlace"
-msgstr "Account name as link"
-
-#: ../../../../inc/tpl/config.php:173
-msgid "Gestión de archivos"
-msgstr "Files management"
-
-#: ../../../../inc/tpl/config.php:184
-msgid "Búsquedas globales"
-msgstr "Global searches"
-
-#: ../../../../inc/tpl/config.php:195
-msgid "Extensiones de archivos permitidas"
-msgstr "Allowed file extensions"
-
-#: ../../../../inc/tpl/config.php:215
-msgid "Resultados por página"
-msgstr "Results per page"
-
-#: ../../../../inc/tpl/config.php:231
-msgid "Resultados en Tarjetas"
-msgstr "Results like Cards"
-
-#: ../../../../inc/tpl/config.php:244
-msgid "Wiki"
-msgstr "Wiki"
-
-#: ../../../../inc/tpl/config.php:250
-msgid "Habilitar enlaces Wiki"
-msgstr "Enable Wiki links"
-
-#: ../../../../inc/tpl/config.php:261
-msgid "URL de búsqueda Wiki"
-msgstr "Wiki search URL"
-
-#: ../../../../inc/tpl/config.php:271
-msgid "URL de página en Wiki"
-msgstr "Wiki page URL"
-
-#: ../../../../inc/tpl/config.php:281
-msgid "Prefijo para nombre de cuenta"
-msgstr "Account name preffix"
-
-#: ../../../../inc/tpl/config.php:294
-msgid "LDAP"
-msgstr "LDAP"
-
-#: ../../../../inc/tpl/config.php:301
-msgid "Habilitar LDAP"
-msgstr "Enable LDAP"
-
-#: ../../../../inc/tpl/config.php:312 ../../../../inc/tpl/config.php:425
-msgid "Servidor"
-msgstr "Server"
-
-#: ../../../../inc/tpl/config.php:322
-msgid "Usuario de conexión"
-msgstr "Bind User"
-
-#: ../../../../inc/tpl/config.php:332
-msgid "Clave de conexión"
-msgstr "Bind Password"
-
-#: ../../../../inc/tpl/config.php:342
-msgid "Base de búsqueda"
-msgstr "Search base"
-
-#: ../../../../inc/tpl/config.php:362
-msgid "Grupo por Defecto"
-msgstr "Default Group"
-
-#: ../../../../inc/tpl/config.php:371
-msgid "Perfil por Defecto"
-msgstr "Default Profile"
-
-#: ../../../../inc/tpl/config.php:380
-msgid "Active Directory"
-msgstr "Active Directory"
-
-#: ../../../../inc/tpl/config.php:391
-msgid "Comprobar"
-msgstr "Check"
-
-#: ../../../../inc/tpl/config.php:394
-msgid "Comprobar conexión con LDAP"
-msgstr "Check LDAP connection"
-
-#: ../../../../inc/tpl/config.php:401 ../../../../inc/util.class.php:141
+#: ../../../../inc/SyspassImport.class.php:111
+#: ../../../../inc/SyspassImport.class.php:136
+#: ../../../../inc/SyspassImport.class.php:161
+msgid "Formato de XML inválido"
+msgstr "Invalid XML format"
+
+#: ../../../../inc/SyspassImport.class.php:111
+msgid "No hay categorías para importar"
+msgstr "There is no categories to import"
+
+#: ../../../../inc/SyspassImport.class.php:136
+msgid "No hay clientes para importar"
+msgstr "There is no customers to import"
+
+#: ../../../../inc/SyspassImport.class.php:161
+msgid "No hay cuentas para importar"
+msgstr "There is no accounts to import"
+
+#: ../../../../inc/Upgrade.class.php:51
+msgid "Error al aplicar la actualización de la Base de Datos"
+msgstr "Error on updating database"
+
+#: ../../../../inc/Upgrade.class.php:52 ../../../../inc/Upgrade.class.php:58
+msgid "Compruebe el registro de eventos para más detalles"
+msgstr "Please, check the event log for more details"
+
+#: ../../../../inc/Upgrade.class.php:52 ../../../../inc/Upgrade.class.php:58
+#: ../../../../inc/themes/classic/login.inc:32
+#: ../../../../inc/themes/material-blue/2fa.inc:26
+#: ../../../../inc/themes/material-blue/login.inc:64
+msgid "Acceder"
+msgstr "Sign in"
+
+#: ../../../../inc/Upgrade.class.php:57
+msgid "Error al aplicar la actualización auxiliar"
+msgstr "Error while applying auxiliary update"
+
+#: ../../../../inc/Upgrade.class.php:74
+msgid "Actualizar BBDD"
+msgstr "Update DB"
+
+#: ../../../../inc/Upgrade.class.php:121
+msgid "No es necesario actualizar la Base de Datos."
+msgstr "Database update not needed."
+
+#: ../../../../inc/Upgrade.class.php:129
+msgid "Error al aplicar la actualización de la Base de Datos."
+msgstr "Error on updating database."
+
+#: ../../../../inc/Upgrade.class.php:138
+msgid "Actualización de la Base de Datos realizada correctamente."
+msgstr "Database updating was done successfully."
+
+#: ../../../../inc/Upgrade.class.php:215
+msgid "Actualizar Configuración"
+msgstr "Update Configuration"
+
+#: ../../../../inc/Upgrade.class.php:215
+msgid "Actualización de la Configuración realizada correctamente."
+msgstr "Configuration updating was done successfully."
+
+#: ../../../../inc/UserBase.class.php:386
+#: ../../../../inc/UserBase.class.php:530
+msgid "No se pudo realizar la petición de cambio de clave."
+msgstr "Could not perform the password change request."
+
+#: ../../../../inc/UserBase.class.php:525
+msgid "Modificar Usuario"
+msgstr "Edit User"
+
+#: ../../../../inc/UserBase.class.php:592
+#: ../../../../web/UsersMgmtC.class.php:150
+msgid "Eliminar Usuario"
+msgstr "Delete User"
+
+#: ../../../../inc/UserLdap.class.php:78
+msgid "Activación Cuenta"
+msgstr "Account Activation"
+
+#: ../../../../inc/UserLdap.class.php:79
+msgid "Su cuenta está pendiente de activación."
+msgstr "Your account activation is pending."
+
+#: ../../../../inc/UserLdap.class.php:80
+msgid "En breve recibirá un email de confirmación."
+msgstr "You will receive a confirmation email in short."
+
+#: ../../../../inc/UserLdap.class.php:86
+msgid "Nuevo usuario de LDAP"
+msgstr "New LDAP user"
+
+#: ../../../../inc/UserUtil.class.php:705
+msgid "Migrar Grupos"
+msgstr "Migrate Groups"
+
+#: ../../../../inc/UserUtil.class.php:705
+msgid "Error al migrar grupo del usuario"
+msgstr "Error while migrating user group"
+
+#: ../../../../inc/Util.class.php:123
+msgid "Versión de PHP requerida >= "
+msgstr "Required PHP version >="
+
+#: ../../../../inc/Util.class.php:124
+msgid ""
+"Actualice la versión de PHP para que la aplicación funcione correctamente"
+msgstr "Please update the PHP version to run sysPass"
+
+#: ../../../../inc/Util.class.php:160
+#: ../../../../inc/themes/classic/ldap.inc:212
+#: ../../../../inc/themes/material-blue/ldap.inc:238
msgid "Módulo no disponible"
msgstr "Module unavilable"
-#: ../../../../inc/tpl/config.php:409
-msgid "Correo"
-msgstr "Mail"
+#: ../../../../inc/Util.class.php:161
+msgid "Sin este módulo la aplicación puede no funcionar correctamente."
+msgstr "Without this module the application could not run correctly"
-#: ../../../../inc/tpl/config.php:415
-msgid "Habilitar notificaciones de correo"
-msgstr "Enable email notifications"
+#: ../../../../inc/XmlExport.class.php:124
+msgid "Exportar XML"
+msgstr "XML Export"
-#: ../../../../inc/tpl/config.php:434
-msgid "Puerto"
-msgstr "Port"
+#: ../../../../inc/XmlExport.class.php:409
+msgid "Error al crear el archivo XML"
+msgstr "Error while creating XML file"
-#: ../../../../inc/tpl/config.php:443
-msgid "Habilitar Autentificación"
-msgstr "Enable Authentication"
+#: ../../../../inc/XmlImport.class.php:63
+msgid "Formato detectado"
+msgstr "Detected format"
-#: ../../../../inc/tpl/config.php:471
-msgid "Seguridad"
-msgstr "Security"
+#: ../../../../inc/XmlImportBase.class.php:75
+msgid "No es posible procesar el archivo XML"
+msgstr "Unable to process XML file"
-#: ../../../../inc/tpl/config.php:477
-msgid "Deshabilitada"
-msgstr "Disabled"
+#: ../../../../inc/XmlImportBase.class.php:103
+msgid "Archivo XML no soportado"
+msgstr "XML file not supported"
-#: ../../../../inc/tpl/config.php:488
-msgid "Dirección de correo de envío"
-msgstr "Recipient email address"
+#: ../../../../inc/XmlImportBase.class.php:104
+msgid "No es posible detectar la aplicación que exportó los datos"
+msgstr "Unable to detect the application the data was exported from"
-#: ../../../../inc/tpl/config.php:497
-msgid "Habilitar peticiones por correo"
-msgstr "Enable requests by email"
+#: ../../../../js/strings.js.php:27
+msgid "Error en la consulta"
+msgstr "Error on query"
-#: ../../../../inc/tpl/config.php:541
-msgid "Añadir extensión"
-msgstr "Add extension"
+#: ../../../../js/strings.js.php:28
+msgid "Ha ocurrido un error"
+msgstr "There was an error"
-#: ../../../../inc/tpl/config.php:542
-msgid "Eliminar extensión"
-msgstr "Delete extension"
+#: ../../../../js/strings.js.php:29
+#: ../../../../inc/themes/classic/login.inc:52
+#: ../../../../inc/themes/material-blue/login.inc:77
+msgid "Sesión finalizada"
+msgstr "Session finished"
-#: ../../../../inc/tpl/config.php:570
-msgid "Añadir filtro"
-msgstr "Add filter"
+#: ../../../../js/strings.js.php:30
+msgid "Borrar la cuenta?"
+msgstr "Delete account?"
-#: ../../../../inc/tpl/config.php:571
-msgid "Eliminar filtro"
-msgstr "Delete filter"
+#: ../../../../js/strings.js.php:31
+msgid "Borrar el usuario?"
+msgstr "Delete user?"
-#: ../../../../inc/tpl/config.php:599 ../../../../inc/tpl/users.php:234
+#: ../../../../js/strings.js.php:32
+msgid "Guarde la configuración para que sea efectiva"
+msgstr "You should save configuration in order to take effect"
+
+#: ../../../../js/strings.js.php:33
+msgid "Clave Generada"
+msgstr "Generated Password"
+
+#: ../../../../js/strings.js.php:34
+msgid "Nivel alto"
+msgstr "High level"
+
+#: ../../../../js/strings.js.php:35
+msgid "Nivel medio"
+msgstr "Average level"
+
+#: ../../../../js/strings.js.php:36
+msgid "Nivel bajo"
+msgstr "Low level"
+
+#: ../../../../js/strings.js.php:37
+msgid "Nivel muy alto"
+msgstr "Very high level"
+
+#: ../../../../js/strings.js.php:38
+msgid "Utilizar al menos 8 caracteres"
+msgstr "You should use at least 8 characters"
+
+#: ../../../../js/strings.js.php:39
+msgid "Borrar elemento?"
+msgstr "Delete item?"
+
+#: ../../../../js/strings.js.php:40
+msgid "Página no encontrada"
+msgstr "Page not found"
+
+#: ../../../../js/strings.js.php:41
+msgid "Archivo no soportado para visualizar"
+msgstr "File not supported for preview"
+
+#: ../../../../js/strings.js.php:42
+msgid "Eliminar archivo?"
+msgstr "Delete file?"
+
+#: ../../../../js/strings.js.php:43
+msgid "Su navegador no soporta subir archivos con HTML5"
+msgstr "Your browser does not support HTML5 file uploads"
+
+#: ../../../../js/strings.js.php:44
+msgid "Demasiados archivos"
+msgstr "Too many files"
+
+#: ../../../../js/strings.js.php:45
+#, php-format
+msgid "No es posible guardar el archivo.%sTamaño máximo:"
+msgstr "Unable to save file %s. Maximum allowed size:"
+
+#: ../../../../js/strings.js.php:46
+msgid "Extensión no permitida"
+msgstr "Extension not allowed"
+
+#: ../../../../js/strings.js.php:47
+msgid "Vaciar el registro de eventos?"
+msgstr "Clear event log?"
+
+#: ../../../../js/strings.js.php:48
msgid "Seleccionar Grupo"
msgstr "Select Group"
-#: ../../../../inc/tpl/config.php:604 ../../../../inc/tpl/users.php:229
+#: ../../../../js/strings.js.php:49
+msgid "Seleccionar Usuario"
+msgstr "Select User"
+
+#: ../../../../js/strings.js.php:50
msgid "Seleccionar Perfil"
msgstr "Select Profile"
-#: ../../../../inc/tpl/customers.php:42
-msgid "Nombre del cliente"
-msgstr "Customer name"
+#: ../../../../js/strings.js.php:51
+msgid "Seleccionar Cliente"
+msgstr "Select Customer"
-#: ../../../../inc/tpl/customers.php:50
-msgid "Descripción del cliente"
-msgstr "Customer description"
+#: ../../../../js/strings.js.php:52
+msgid "Seleccionar Categoría"
+msgstr "Select category"
-#: ../../../../inc/tpl/eventlog.php:37 ../../../../inc/tpl/main.php:57
+#: ../../../../js/strings.js.php:53
+msgid "Sin resultados"
+msgstr "No results"
+
+#: ../../../../js/strings.js.php:54
+msgid "Opciones de clave"
+msgstr "Password options"
+
+#: ../../../../js/strings.js.php:55
+msgid "Generar clave aleatoria"
+msgstr "Generate random password"
+
+#: ../../../../js/strings.js.php:56
+msgid "Complejidad"
+msgstr "Complexity"
+
+#: ../../../../js/strings.js.php:57
+msgid "Reset"
+msgstr "Restablecer"
+
+#: ../../../../js/strings.js.php:58
+#: ../../../../inc/themes/classic/editpass.inc:33
+msgid "Nivel de fortaleza de la clave"
+msgstr "Password strength level"
+
+#: ../../../../js/strings.js.php:59
+msgid "Mostrar Clave"
+msgstr "Show Password"
+
+#: ../../../../js/strings.js.php:60
+msgid "Copiar Usuario"
+msgstr "Copy Username"
+
+#: ../../../../js/strings.js.php:61
+msgid "Copiar Clave"
+msgstr "Copy Password"
+
+#: ../../../../js/strings.js.php:62
+msgid "Incluir Números"
+msgstr "Include Numbers"
+
+#: ../../../../js/strings.js.php:63
+msgid "Incluir Mayúsculas"
+msgstr "Include Uppercase"
+
+#: ../../../../js/strings.js.php:64
+msgid "Incluir Símbolos"
+msgstr "Include Symbols"
+
+#: ../../../../js/strings.js.php:65
+msgid "Longitud"
+msgstr "Length"
+
+#: ../../../../js/strings.js.php:66
+msgid "Seleccionar Acción"
+msgstr "Select Action"
+
+#: ../../../../js/strings.js.php:67
+#: ../../../../inc/themes/classic/account.inc:133
+#: ../../../../inc/themes/classic/account.inc:164
+#: ../../../../inc/themes/classic/account.inc:449
+#: ../../../../inc/themes/classic/install.inc:99
+msgid "SI"
+msgstr "YES"
+
+#: ../../../../js/strings.js.php:68
+#: ../../../../inc/themes/classic/account.inc:133
+#: ../../../../inc/themes/classic/account.inc:164
+#: ../../../../inc/themes/classic/account.inc:447
+#: ../../../../inc/themes/classic/encryption.inc:61
+#: ../../../../inc/themes/classic/encryption.inc:80
+#: ../../../../inc/themes/classic/import.inc:70
+#: ../../../../inc/themes/classic/install.inc:99
+#: ../../../../inc/themes/classic/tokens.inc:36
+msgid "NO"
+msgstr "NO"
+
+#: ../../../../js/strings.js.php:69
+msgid "Aceptar"
+msgstr "Accept"
+
+#: ../../../../js/strings.js.php:70
+msgid "Cancelar"
+msgstr "Cancel"
+
+#: ../../../../web/AccountC.class.php:380
+#: ../../../../web/AccountC.class.php:411
+#: ../../../../inc/themes/classic/search.inc:36
+#: ../../../../inc/themes/classic/search.inc:95
+#: ../../../../inc/themes/material-blue/search.inc:41
+#: ../../../../inc/themes/material-blue/search.inc:108
+msgid "Detalles de Cuenta"
+msgstr "Account Details"
+
+#: ../../../../web/AccountC.class.php:468
+#: ../../../../inc/themes/classic/account.inc:394
+#: ../../../../inc/themes/material-blue/account.inc:430
+msgid "Modificar Clave de Cuenta"
+msgstr "Edit Account Password"
+
+#: ../../../../web/AccountsMgmtC.class.php:79
+#: ../../../../web/AccountsMgmtC.class.php:138
+#: ../../../../web/AccountsMgmtC.class.php:266
+#: ../../../../web/SearchC.class.php:277
+#: ../../../../web/UsersMgmtC.class.php:87
+#: ../../../../web/UsersMgmtC.class.php:187
+#: ../../../../web/UsersMgmtC.class.php:245
+#: ../../../../inc/themes/classic/account.inc:11
+#: ../../../../inc/themes/classic/categories.inc:8
+#: ../../../../inc/themes/classic/customers.inc:8
+#: ../../../../inc/themes/classic/customfields.inc:9
+#: ../../../../inc/themes/classic/editpass.inc:8
+#: ../../../../inc/themes/classic/groups.inc:8
+#: ../../../../inc/themes/classic/info.inc:25
+#: ../../../../inc/themes/classic/profiles.inc:8
+#: ../../../../inc/themes/classic/request.inc:6
+#: ../../../../inc/themes/classic/search.inc:34
+#: ../../../../inc/themes/classic/users.inc:8
+#: ../../../../inc/themes/material-blue/account.inc:15
+#: ../../../../inc/themes/material-blue/categories.inc:8
+#: ../../../../inc/themes/material-blue/customers.inc:8
+#: ../../../../inc/themes/material-blue/customfields.inc:8
+#: ../../../../inc/themes/material-blue/editpass.inc:9
+#: ../../../../inc/themes/material-blue/groups.inc:8
+#: ../../../../inc/themes/material-blue/info.inc:25
+#: ../../../../inc/themes/material-blue/profiles.inc:8
+#: ../../../../inc/themes/material-blue/request.inc:6
+#: ../../../../inc/themes/material-blue/search.inc:39
+#: ../../../../inc/themes/material-blue/users.inc:8
+msgid "Nombre"
+msgstr "Name"
+
+#: ../../../../web/AccountsMgmtC.class.php:115
+msgid "Gestión de Categorías"
+msgstr "Categories Management"
+
+#: ../../../../web/AccountsMgmtC.class.php:172
+msgid "Gestión de Clientes"
+msgstr "Customers Management"
+
+#: ../../../../web/AccountsMgmtC.class.php:266
+#: ../../../../inc/themes/classic/customfields.inc:27
+#: ../../../../inc/themes/material-blue/customfields.inc:30
+msgid "Módulo"
+msgstr "Module"
+
+#: ../../../../web/AccountsMgmtC.class.php:287
+msgid "Eliminar Campo"
+msgstr "Delete Field"
+
+#: ../../../../web/AccountsMgmtC.class.php:300
+#: ../../../../inc/themes/classic/profiles.inc:107
+#: ../../../../inc/themes/material-blue/profiles.inc:124
+msgid "Campos Personalizados"
+msgstr "Custom Fields"
+
+#: ../../../../web/ConfigC.class.php:185
+msgid "Último backup"
+msgstr "Last backup"
+
+#: ../../../../web/ConfigC.class.php:185
+msgid "No se encontraron backups"
+msgstr "There are no backups available"
+
+#: ../../../../web/ConfigC.class.php:192
+msgid "Última exportación"
+msgstr "Last export"
+
+#: ../../../../web/ConfigC.class.php:192
+msgid "No se encontró archivo de exportación"
+msgstr "No export file found"
+
+#: ../../../../web/ConfigC.class.php:237
+msgid "Información"
+msgstr "Information"
+
+#: ../../../../web/EventlogC.class.php:93
+msgid "Registro de eventos vaciado"
+msgstr "Event log cleared"
+
+#: ../../../../web/EventlogC.class.php:95
+msgid "Error al vaciar el registro de eventos"
+msgstr "Error on clearing event log"
+
+#: ../../../../web/MainC.class.php:137
+#: ../../../../web/UsersMgmtC.class.php:100
+msgid "Admin Aplicación"
+msgstr "Application Admin"
+
+#: ../../../../web/MainC.class.php:155
+msgid "Buscar"
+msgstr "Search"
+
+#: ../../../../web/MainC.class.php:167
+#: ../../../../web/UsersMgmtC.class.php:163
+msgid "Gestión de Usuarios"
+msgstr "Users Management"
+
+#: ../../../../web/MainC.class.php:173
+msgid "Gestión de Clientes y Categorías"
+msgstr "Customer and Categories management"
+
+#: ../../../../web/MainC.class.php:185
+#: ../../../../inc/themes/classic/eventlog.inc:4
+#: ../../../../inc/themes/material-blue/eventlog.inc:3
msgid "Registro de Eventos"
msgstr "Event Log"
-#: ../../../../inc/tpl/eventlog.php:56
-msgid "Fecha / Hora"
-msgstr "Date / Time"
+#: ../../../../web/MainC.class.php:205
+msgid "Nuevo estilo visual basado en Material Design Lite by Google"
+msgstr "New visual design based on Material Design by Google"
-#: ../../../../inc/tpl/eventlog.php:59
-msgid "Evento"
-msgstr "Event"
+#: ../../../../web/MainC.class.php:206
+msgid "Usuarios en múltiples grupos"
+msgstr "Users can belong to multiple groups"
-#: ../../../../inc/tpl/eventlog.php:65
-msgid "IP"
-msgstr "IP"
+#: ../../../../web/MainC.class.php:207
+msgid "Previsualización de imágenes"
+msgstr "Images previsualization"
-#: ../../../../inc/tpl/groups.php:41
-msgid "Nombre del grupo"
-msgstr "Group name"
+#: ../../../../web/MainC.class.php:208
+msgid "Mostrar claves como imágenes"
+msgstr "Show passwords as images"
-#: ../../../../inc/tpl/groups.php:47
-msgid "Descripción del grupo"
-msgstr "Group description"
+#: ../../../../web/MainC.class.php:209
+msgid "Campos personalizados"
+msgstr "Custom Fields"
-#: ../../../../inc/tpl/install.php:36
-msgid "Instalación finalizada"
-msgstr "Installation finished"
+#: ../../../../web/MainC.class.php:210
+msgid "API de consultas"
+msgstr "API queries"
-#: ../../../../inc/tpl/install.php:37
-msgid "Pulse aquí para acceder"
-msgstr "Click here to sign in"
+#: ../../../../web/MainC.class.php:211
+#: ../../../../inc/themes/classic/2fa.inc:9
+#: ../../../../inc/themes/material-blue/2fa.inc:9
+#: ../../../../inc/themes/material-blue/security.inc:11
+msgid "Autentificación en 2 pasos"
+msgstr "Two factor authentication"
-#: ../../../../inc/tpl/install.php:47
-msgid "Instalación "
-msgstr "Installation"
+#: ../../../../web/MainC.class.php:212
+msgid "Complejidad de generador de claves"
+msgstr "Random number generator with complexity configuration"
-#: ../../../../inc/tpl/install.php:55
+#: ../../../../web/MainC.class.php:213
+msgid "Consultas especiales"
+msgstr "Special queries"
+
+#: ../../../../web/MainC.class.php:214
+msgid "Exportación a XML"
+msgstr "XML Export"
+
+#: ../../../../web/MainC.class.php:215
+msgid "Clave maestra temporal"
+msgstr "Temporary master password"
+
+#: ../../../../web/MainC.class.php:216
+msgid "Importación de cuentas desde sysPass, KeePass, KeePassX y CSV"
+msgstr "Accounts import from KeePass, KeePassX and CSV"
+
+#: ../../../../web/MainC.class.php:217
+msgid "Optimización del código y mayor rapidez de carga"
+msgstr "Code optimization and faster loading"
+
+#: ../../../../web/MainC.class.php:218
+msgid "Mejoras de seguridad en XSS e inyección SQL"
+msgstr "Improved security to prevent XSS and SQL injection"
+
+#: ../../../../web/MainC.class.php:260
msgid "La version de PHP es vulnerable al ataque NULL Byte (CVE-2006-7243)"
msgstr "This PHP version is vulnerable to NULL Byte attack CVE-2006-7243)"
-#: ../../../../inc/tpl/install.php:56
+#: ../../../../web/MainC.class.php:261
msgid "Actualice la versión de PHP para usar sysPass de forma segura"
msgstr "Please update PHP version to run sysPass in a secure way"
-#: ../../../../inc/tpl/install.php:60
+#: ../../../../web/MainC.class.php:268
msgid "No se encuentra el generador de números aleatorios."
msgstr "Cannot find random number generator."
-#: ../../../../inc/tpl/install.php:61
+#: ../../../../web/MainC.class.php:269
msgid ""
"Sin esta función un atacante puede utilizar su cuenta al resetear la clave"
msgstr ""
"Without this function, an attacker could take your account on password reset."
-#: ../../../../inc/tpl/install.php:88
-msgid "Crear cuenta de admin de sysPass"
-msgstr "Create sysPass admin account"
-
-#: ../../../../inc/tpl/install.php:91
-msgid "Login del usuario administrador de sysPass"
-msgstr "sysPass administrator's login"
-
-#: ../../../../inc/tpl/install.php:99 ../../../../inc/tpl/install.php:100
-#: ../../../../inc/tpl/install.php:114 ../../../../inc/tpl/install.php:115
-#: ../../../../inc/tpl/install.php:140 ../../../../inc/tpl/install.php:141
-msgid "Mostrar Clave"
-msgstr "Show Password"
-
-#: ../../../../inc/tpl/install.php:127
-msgid "Configurar BBDD"
-msgstr "DB Configuration"
-
-#: ../../../../inc/tpl/install.php:133
-msgid "Login de usuario con permisos de administrador de MySQL"
-msgstr "User login with with database administrative rights"
-
-#: ../../../../inc/tpl/install.php:134 ../../../../inc/tpl/install.php:135
-#: ../../../../inc/tpl/migrate.php:40
-msgid "Usuario BBDD"
-msgstr "DB Username"
-
-#: ../../../../inc/tpl/install.php:142 ../../../../inc/tpl/install.php:143
-#: ../../../../inc/tpl/migrate.php:49
-msgid "Clave BBDD"
-msgstr "DB Password"
-
-#: ../../../../inc/tpl/install.php:149
-msgid "Nombre de la base de datos para sysPass"
-msgstr "sysPass database name"
-
-#: ../../../../inc/tpl/install.php:150 ../../../../inc/tpl/install.php:151
-#: ../../../../inc/tpl/migrate.php:57
-msgid "Nombre BBDD"
-msgstr "DB Name"
-
-#: ../../../../inc/tpl/install.php:158
-msgid "Nombre del servidor de la base de datos de sysPass"
-msgstr "sysPass database server name"
-
-#: ../../../../inc/tpl/install.php:159 ../../../../inc/tpl/install.php:160
-#: ../../../../inc/tpl/migrate.php:66
-msgid "Servidor BBDD"
-msgstr "DB Server"
-
-#: ../../../../inc/tpl/install.php:168
-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"
-
-#: ../../../../inc/tpl/install.php:170 ../../../../inc/tpl/install.php:191
-#: ../../../../inc/tpl/install.php:194
-msgid "Modo Hosting"
-msgstr "Hosting Mode"
-
-#: ../../../../inc/tpl/install.php:177
-msgid "Instalar"
-msgstr "Install"
-
-#: ../../../../inc/tpl/login.php:51 ../../../../inc/upgrade.class.php:50
-msgid "Acceder"
-msgstr "Sign in"
-
-#: ../../../../inc/tpl/login.php:65
-msgid "¿Olvidó su clave?"
-msgstr "Lost your password?"
-
-#: ../../../../inc/tpl/login.php:71 ../../../../js/js.php:47
-msgid "Sesión finalizada"
-msgstr "Session finished"
-
-#: ../../../../inc/tpl/login.php:78
-msgid "Aplicación actualizada correctamente"
-msgstr "Application successfully updated"
-
-#: ../../../../inc/tpl/login.php:84
-msgid "Nuevo interface de búsqueda con estilo de lista o tipo tarjeta"
-msgstr "New search interface with list or card like styles"
-
-#: ../../../../inc/tpl/login.php:85
-msgid "Selección de grupos y usuarios de acceso a cuentas"
-msgstr "Users and groups selection for account access"
-
-#: ../../../../inc/tpl/login.php:86
-msgid "Drag&Drop para subida de archivos"
-msgstr "Drag&Drop for files uploading"
-
-#: ../../../../inc/tpl/login.php:87
-msgid "Copiar clave al portapapeles"
-msgstr "Copy password to clipboard"
-
-#: ../../../../inc/tpl/login.php:88
-msgid "Historial de cuentas y restauración"
-msgstr "Accounts history and restore points"
-
-#: ../../../../inc/tpl/login.php:89
-msgid "Nueva gestión de categorías y clientes"
-msgstr "New categories and customers management"
-
-#: ../../../../inc/tpl/login.php:90
-msgid "Función de olvido de claves para usuarios"
-msgstr "Reset password function for users"
-
-#: ../../../../inc/tpl/login.php:91
-msgid "Integración con Active Directory y LDAP mejorada"
-msgstr "Improved Active Directory and LDAP integration"
-
-#: ../../../../inc/tpl/login.php:92
-msgid "Autentificación para notificaciones por correo"
-msgstr "Email notifications with authentication"
-
-#: ../../../../inc/tpl/login.php:93
-msgid "Búsqueda global de cuentas para usuarios sin permisos"
-msgstr "Global account searching for unprivileged users"
-
-#: ../../../../inc/tpl/login.php:94
-msgid "Solicitudes de modificación de cuentas para usuarios sin permisos"
-msgstr "Requests for account modification for unprivileged users"
-
-#: ../../../../inc/tpl/login.php:95
-msgid "Importación de cuentas desde KeePass, KeePassX y CSV"
-msgstr "Accounts import from KeePass, KeePassX and CSV"
-
-#: ../../../../inc/tpl/login.php:96
-msgid "Función de copiar cuentas"
-msgstr "Clone account function"
-
-#: ../../../../inc/tpl/login.php:97
-msgid "Optimización del código y mayor rapidez de carga"
-msgstr "Code optimization and faster loading"
-
-#: ../../../../inc/tpl/login.php:98
-msgid "Mejoras de seguridad en XSS e inyección SQL"
-msgstr "Improved security to prevent XSS and SQL injection"
-
-#: ../../../../inc/tpl/login.php:101 ../../../../inc/tpl/login.php:102
-msgid "Nuevas Características"
-msgstr "New Features"
-
-#: ../../../../inc/tpl/main.php:37
-msgid "Cambiar clave de usuario"
-msgstr "Change user password"
-
-#: ../../../../inc/tpl/main.php:44
-msgid "Salir"
-msgstr "Sign out"
-
-#: ../../../../inc/tpl/main.php:52
-msgid "Buscar"
-msgstr "Search"
-
-#: ../../../../inc/tpl/main.php:55
-msgid "Gestión de Clientes y Categorías"
-msgstr "Customer and Categories management"
-
-#: ../../../../inc/tpl/masterpass.php:43
-#: ../../../../inc/tpl/masterpass.php:128
-msgid "Último cambio"
-msgstr "Last Change"
-
-#: ../../../../inc/tpl/masterpass.php:52
-msgid "Clave Maestra actual"
-msgstr "Current Master Password"
-
-#: ../../../../inc/tpl/masterpass.php:60
-msgid "Nueva Clave Maestra"
-msgstr "New Master Password"
-
-#: ../../../../inc/tpl/masterpass.php:69
-msgid "Nueva Clave Maestra (repetir)"
-msgstr "New Master Password (repeat)"
-
-#: ../../../../inc/tpl/masterpass.php:77
-msgid "No modificar cuentas"
-msgstr "Do not modify accounts"
-
-#: ../../../../inc/tpl/masterpass.php:87
-msgid "Confirmar cambio"
-msgstr "Confirm Change"
-
-#: ../../../../inc/tpl/masterpass.php:90 ../../../../inc/tpl/masterpass.php:93
-#: ../../../../inc/tpl/masterpass.php:96 ../../../../inc/tpl/migrate.php:78
-msgid "Atención"
-msgstr "Warning"
-
-#: ../../../../inc/tpl/masterpass.php:91
-msgid "Guarde la nueva clave en un lugar seguro."
-msgstr "You should save the new password on a secure place"
-
-#: ../../../../inc/tpl/masterpass.php:94
-msgid "Se volverán a encriptar las claves de todas las cuentas."
-msgstr "All accounts passwords will be encrypted again."
-
-#: ../../../../inc/tpl/masterpass.php:97
-msgid "Los usuarios deberán de introducir la nueva clave maestra."
-msgstr "Users will need to enter the new master key."
-
-#: ../../../../inc/tpl/masterpass.php:121
-msgid "Clave Temporal"
-msgstr "Temporary Password"
-
-#: ../../../../inc/tpl/masterpass.php:135
-#: ../../../../inc/tpl/masterpass.php:149
-msgid "No generada"
-msgstr "Not generated"
-
-#: ../../../../inc/tpl/masterpass.php:142
-msgid "Válido hasta"
-msgstr "Valid until"
-
-#: ../../../../inc/tpl/masterpass.php:164
-msgid "Generar"
-msgstr "Generate"
-
-#: ../../../../inc/tpl/migrate.php:33
-msgid "Importar phpPMS"
-msgstr "phpPMS Import"
-
-#: ../../../../inc/tpl/migrate.php:75
-msgid "Confirmar"
-msgstr "Confirm"
-
-#: ../../../../inc/tpl/migrate.php:79
-msgid "Los datos actuales serán borrados (excepto el usuario actual)"
-msgstr "Current data will be removed (except current user)"
-
-#: ../../../../inc/tpl/migrate.php:97
-msgid "Iniciar"
-msgstr "Start"
-
-#: ../../../../inc/tpl/migrate.php:103
-msgid "Importar CSV/XML"
-msgstr "CSV/XML Import"
-
-#: ../../../../inc/tpl/migrate.php:117
-msgid "Soltar archivo aquí o click para seleccionar"
-msgstr "Drop files here or click to select"
-
-#: ../../../../inc/tpl/passreset.php:47
-msgid "Solicitud de Cambio de Clave"
-msgstr "Request Password Change"
-
-#: ../../../../inc/tpl/passreset.php:50
-msgid "Login del Usuario"
-msgstr "User login"
-
-#: ../../../../inc/tpl/passreset.php:55
-msgid "Email del Usuario"
-msgstr "User's Email"
-
-#: ../../../../inc/tpl/passreset.php:56 ../../../../inc/tpl/users.php:116
-msgid "Email"
-msgstr "Email"
-
-#: ../../../../inc/tpl/passreset.php:61
-msgid "Nueva Clave"
-msgstr "New Password"
-
-#: ../../../../inc/tpl/passreset.php:69
-msgid "Nueva Clave (Verificar)"
-msgstr "New Password (Verify)"
-
-#: ../../../../inc/tpl/passreset.php:70
-msgid "Clave (Verificar)"
-msgstr "Password (Verify)"
-
-#: ../../../../inc/tpl/passreset.php:83
+#: ../../../../web/MainC.class.php:288
+msgid "Instalación finalizada"
+msgstr "Installation finished"
+
+#: ../../../../web/MainC.class.php:289
+msgid "Pulse aquí para acceder"
+msgstr "Click here to sign in"
+
+#: ../../../../web/MainC.class.php:384
+msgid "Descargar nueva versión"
+msgstr "Download new version"
+
+#: ../../../../web/MainC.class.php:395
+msgid "Avisos de sysPass"
+msgstr "sysPass Notices"
+
+#: ../../../../web/SearchC.class.php:270
+msgid "Ordenar por Cliente"
+msgstr "Sort by Customer"
+
+#: ../../../../web/SearchC.class.php:276
+msgid "Ordenar por Nombre"
+msgstr "Sort by Name"
+
+#: ../../../../web/SearchC.class.php:282
+msgid "Ordenar por Categoría"
+msgstr "Sort by Category"
+
+#: ../../../../web/SearchC.class.php:288
+msgid "Ordenar por Usuario"
+msgstr "Sort by Username"
+
+#: ../../../../web/SearchC.class.php:294
+msgid "Ordenar por URL / IP"
+msgstr "Sort by URL / IP"
+
+#: ../../../../web/SearchC.class.php:295
+#: ../../../../inc/themes/classic/account.inc:58
+#: ../../../../inc/themes/classic/editpass.inc:16
+#: ../../../../inc/themes/classic/request.inc:13
+#: ../../../../inc/themes/classic/search.inc:57
+#: ../../../../inc/themes/material-blue/account.inc:66
+#: ../../../../inc/themes/material-blue/editpass.inc:17
+#: ../../../../inc/themes/material-blue/request.inc:15
+#: ../../../../inc/themes/material-blue/search.inc:62
+msgid "URL / IP"
+msgstr "URL / IP"
+
+#: ../../../../web/UsersMgmtC.class.php:91
+msgid "Propiedades"
+msgstr "Properties"
+
+#: ../../../../web/UsersMgmtC.class.php:104
+msgid "Admin Cuentas"
+msgstr "Account Admin"
+
+#: ../../../../web/UsersMgmtC.class.php:108
+#: ../../../../inc/themes/classic/users.inc:28
+#: ../../../../inc/themes/material-blue/users.inc:34
+msgid "Usuario de LDAP"
+msgstr "LDAP User"
+
+#: ../../../../web/UsersMgmtC.class.php:112
+#: ../../../../inc/themes/classic/users.inc:113
+#: ../../../../inc/themes/material-blue/users.inc:151
+#: ../../../../inc/themes/material-blue/users.inc:154
+msgid "Deshabilitado"
+msgstr "Disabled"
+
+#: ../../../../web/UsersMgmtC.class.php:129
+msgid "Ver Detalles de Usuario"
+msgstr "View User Details"
+
+#: ../../../../web/UsersMgmtC.class.php:143
+msgid "Cambiar Clave de Usuario"
+msgstr "Change User's Password"
+
+#: ../../../../web/UsersMgmtC.class.php:222
+msgid "Gestión de Grupos"
+msgstr "Groups Management"
+
+#: ../../../../web/UsersMgmtC.class.php:260
+msgid "Ver Detalles de Perfil"
+msgstr "View Profile Details"
+
+#: ../../../../web/UsersMgmtC.class.php:287
+msgid "Gestión de Perfiles"
+msgstr "Profiles Management"
+
+#: ../../../../web/UsersMgmtC.class.php:407
+msgid "Ver token de Autorización"
+msgstr "View Authorization token"
+
+#: ../../../../web/UsersMgmtC.class.php:434
+msgid "Gestión de Autorizaciones API"
+msgstr "API Authorizations Management"
+
+#: ../../../../web/UsersMgmtC.class.php:456
+msgid "Token de autorización visualizado"
+msgstr "Authorization token viewed"
+
+#: ../../../../web/UsersMgmtC.class.php:457
+msgid "Autorizaciones"
+msgstr "Authorizations"
+
+#: ../../../../web/UsersPrefsC.class.php:84
+#: ../../../../inc/themes/classic/mail.inc:63
+#: ../../../../inc/themes/material-blue/mail.inc:86
+msgid "Seguridad"
+msgstr "Security"
+
+#: ../../../../inc/themes/classic/2fa.inc:14
+#: ../../../../inc/themes/material-blue/2fa.inc:14
+msgid "Introducir código"
+msgstr "Enter code"
+
+#: ../../../../inc/themes/classic/2fa.inc:26
+msgid "Verificar"
+msgstr "Verify"
+
+#: ../../../../inc/themes/classic/account.inc:14
+#: ../../../../inc/themes/material-blue/account.inc:21
+msgid "Nombre de cuenta"
+msgstr "Account name"
+
+#: ../../../../inc/themes/classic/account.inc:35
+msgid "Buscar en desplegable o introducir"
+msgstr "Search down or enter"
+
+#: ../../../../inc/themes/classic/account.inc:61
+#: ../../../../inc/themes/material-blue/account.inc:72
+msgid "URL o IP de acceso"
+msgstr "Access URL or IP"
+
+#: ../../../../inc/themes/classic/account.inc:73
+#: ../../../../inc/themes/material-blue/account.inc:86
+msgid "Usuario de acceso"
+msgstr "Access user"
+
+#: ../../../../inc/themes/classic/account.inc:90
+#: ../../../../inc/themes/classic/editpass.inc:31
+#: ../../../../inc/themes/classic/users.inc:83
+#: ../../../../inc/themes/classic/userspass.inc:19
+#: ../../../../inc/themes/classic/userspass.inc:21
+#: ../../../../inc/themes/material-blue/account.inc:105
+#: ../../../../inc/themes/material-blue/editpass.inc:36
+#: ../../../../inc/themes/material-blue/install.inc:64
+#: ../../../../inc/themes/material-blue/users.inc:102
+#: ../../../../inc/themes/material-blue/users.inc:109
+#: ../../../../inc/themes/material-blue/userspass.inc:19
+#: ../../../../inc/themes/material-blue/userspass.inc:25
+msgid "Clave (repetir)"
+msgstr "Password (repeat)"
+
+#: ../../../../inc/themes/classic/account.inc:97
+#: ../../../../inc/themes/classic/search.inc:73
+#: ../../../../inc/themes/classic/users.inc:91
+#: ../../../../inc/themes/material-blue/account.inc:116
+#: ../../../../inc/themes/material-blue/search.inc:82
+#: ../../../../inc/themes/material-blue/users.inc:116
+msgid "Notas"
+msgstr "Notes"
+
+#: ../../../../inc/themes/classic/account.inc:99
+#: ../../../../inc/themes/material-blue/account.inc:121
+#: ../../../../inc/themes/material-blue/users.inc:123
+msgid "Notas sobre la cuenta"
+msgstr "Notes about the account"
+
+#: ../../../../inc/themes/classic/account.inc:105
+#: ../../../../inc/themes/material-blue/account.inc:130
+#: ../../../../inc/themes/material-blue/search.inc:75
+msgid "Permisos"
+msgstr "Permissions"
+
+#: ../../../../inc/themes/classic/account.inc:132
+#: ../../../../inc/themes/classic/account.inc:163
+#: ../../../../inc/themes/material-blue/account.inc:159
+#: ../../../../inc/themes/material-blue/account.inc:191
+msgid "Hablitar edición"
+msgstr "Enable Edit"
+
+#: ../../../../inc/themes/classic/account.inc:201
+#: ../../../../inc/themes/material-blue/account.inc:243
+msgid "Soltar archivos aquí (max. 5) o click para seleccionar"
+msgstr "Drop files here (max. 5) or click to select"
+
+#: ../../../../inc/themes/classic/account.inc:201
+#: ../../../../inc/themes/classic/config.inc:193
+#: ../../../../inc/themes/material-blue/account.inc:243
+#: ../../../../inc/themes/material-blue/config.inc:272
+msgid "Tamaño máximo de archivo"
+msgstr "Maximum file size"
+
+#: ../../../../inc/themes/classic/account.inc:213
+#: ../../../../inc/themes/material-blue/account.inc:255
+msgid "Historial"
+msgstr "History"
+
+#: ../../../../inc/themes/classic/account.inc:232
+#: ../../../../inc/themes/material-blue/account.inc:275
+msgid "Seleccionar fecha"
+msgstr "Select date"
+
+#: ../../../../inc/themes/classic/account.inc:241
+#: ../../../../inc/themes/classic/users.inc:164
+#: ../../../../inc/themes/material-blue/account.inc:284
+#: ../../../../inc/themes/material-blue/users.inc:208
+msgid "Última Modificación"
+msgstr "Last Modification"
+
+#: ../../../../inc/themes/classic/account.inc:243
+#: ../../../../inc/themes/material-blue/account.inc:286
+msgid "por"
+msgstr "by"
+
+#: ../../../../inc/themes/classic/account.inc:286
+#: ../../../../inc/themes/material-blue/account.inc:333
+msgid "Visitas"
+msgstr "Visits"
+
+#: ../../../../inc/themes/classic/account.inc:290
+#: ../../../../inc/themes/material-blue/account.inc:337
+msgid "Fecha Alta"
+msgstr "Date Added"
+
+#: ../../../../inc/themes/classic/account.inc:294
+#: ../../../../inc/themes/material-blue/account.inc:341
+msgid "Creador"
+msgstr "Creator"
+
+#: ../../../../inc/themes/classic/account.inc:298
+#: ../../../../inc/themes/material-blue/account.inc:200
+#: ../../../../inc/themes/material-blue/account.inc:345
+msgid "Grupo Principal"
+msgstr "Main Group"
+
+#: ../../../../inc/themes/classic/account.inc:303
+#: ../../../../inc/themes/material-blue/account.inc:350
+msgid "Usuarios Secundarios"
+msgstr "Secondary Users"
+
+#: ../../../../inc/themes/classic/account.inc:322
+#: ../../../../inc/themes/material-blue/account.inc:369
+msgid "Grupos Secundarios"
+msgstr "Secondary Groups"
+
+#: ../../../../inc/themes/classic/account.inc:342
+#: ../../../../inc/themes/material-blue/account.inc:389
+msgid "Fecha Edición"
+msgstr "Date Modified"
+
+#: ../../../../inc/themes/classic/account.inc:346
+#: ../../../../inc/themes/material-blue/account.inc:393
+msgid "Editor"
+msgstr "Editor"
+
+#: ../../../../inc/themes/classic/account.inc:373
+#: ../../../../inc/themes/material-blue/account.inc:456
+msgid "Restaurar cuenta desde este punto"
+msgstr "Restore account from this point"
+
+#: ../../../../inc/themes/classic/account.inc:385
+#: ../../../../inc/themes/classic/account.inc:468
+#: ../../../../inc/themes/classic/search.inc:103
+#: ../../../../inc/themes/classic/search.inc:183
+#: ../../../../inc/themes/material-blue/account.inc:423
+#: ../../../../inc/themes/material-blue/account.inc:493
+#: ../../../../inc/themes/material-blue/search.inc:118
+#: ../../../../inc/themes/material-blue/search.inc:197
+msgid "Copiar Clave en Portapapeles"
+msgstr "Copy Password to Clipboard"
+
+#: ../../../../inc/themes/classic/account.inc:401
+#: ../../../../inc/themes/material-blue/account.inc:436
+msgid "Ver Actual"
+msgstr "View Current"
+
+#: ../../../../inc/themes/classic/account.inc:406
+#: ../../../../inc/themes/classic/editpass.inc:45
+#: ../../../../inc/themes/classic/passreset.inc:46
+#: ../../../../inc/themes/material-blue/passreset.inc:43
msgid "Volver"
msgstr "Back"
-#: ../../../../inc/tpl/passreset.php:83
+#: ../../../../inc/themes/classic/account.inc:413
+#: ../../../../inc/themes/classic/search.inc:115
+#: ../../../../inc/themes/material-blue/account.inc:446
+#: ../../../../inc/themes/material-blue/search.inc:130
+msgid "Modificar Cuenta"
+msgstr "Edit Account"
+
+#: ../../../../inc/themes/classic/account.inc:418
+#: ../../../../inc/themes/classic/search.inc:136
+#: ../../../../inc/themes/material-blue/account.inc:450
+#: ../../../../inc/themes/material-blue/search.inc:150
+msgid "Solicitar Modificación"
+msgstr "Request Modification"
+
+#: ../../../../inc/themes/classic/account.inc:425
+#: ../../../../inc/themes/classic/categories.inc:62
+#: ../../../../inc/themes/classic/config.inc:275
+#: ../../../../inc/themes/classic/customers.inc:62
+#: ../../../../inc/themes/classic/customfields.inc:63
+#: ../../../../inc/themes/classic/editpass.inc:50
+#: ../../../../inc/themes/classic/encryption.inc:102
+#: ../../../../inc/themes/classic/groups.inc:77
+#: ../../../../inc/themes/classic/ldap.inc:229
+#: ../../../../inc/themes/classic/mail.inc:107
+#: ../../../../inc/themes/classic/profiles.inc:168
+#: ../../../../inc/themes/classic/security.inc:57
+#: ../../../../inc/themes/classic/tokens.inc:59
+#: ../../../../inc/themes/classic/users.inc:189
+#: ../../../../inc/themes/classic/userspass.inc:35
+#: ../../../../inc/themes/classic/wiki.inc:110
+#: ../../../../inc/themes/material-blue/account.inc:462
+#: ../../../../inc/themes/material-blue/categories.inc:72
+#: ../../../../inc/themes/material-blue/config.inc:388
+#: ../../../../inc/themes/material-blue/customers.inc:73
+#: ../../../../inc/themes/material-blue/customfields.inc:74
+#: ../../../../inc/themes/material-blue/editpass.inc:60
+#: ../../../../inc/themes/material-blue/groups.inc:88
+#: ../../../../inc/themes/material-blue/ldap.inc:257
+#: ../../../../inc/themes/material-blue/mail.inc:145
+#: ../../../../inc/themes/material-blue/profiles.inc:177
+#: ../../../../inc/themes/material-blue/security.inc:61
+#: ../../../../inc/themes/material-blue/tokens.inc:63
+#: ../../../../inc/themes/material-blue/users.inc:235
+#: ../../../../inc/themes/material-blue/userspass.inc:40
+#: ../../../../inc/themes/material-blue/wiki.inc:124
+msgid "Guardar"
+msgstr "Save"
+
+#: ../../../../inc/themes/classic/account.inc:435
+#: ../../../../inc/themes/material-blue/account.inc:472
+msgid "Seleccionar grupos secundarios"
+msgstr "Select secondary groups"
+
+#: ../../../../inc/themes/classic/account.inc:439
+#: ../../../../inc/themes/material-blue/account.inc:475
+msgid "Seleccionar usuarios"
+msgstr "Select users"
+
+#: ../../../../inc/themes/classic/account.inc:472
+#: ../../../../inc/themes/classic/search.inc:187
+#: ../../../../inc/themes/material-blue/account.inc:497
+#: ../../../../inc/themes/material-blue/search.inc:201
+msgid "Clave Copiada al Portapapeles"
+msgstr "Password Copied to Clipboard"
+
+#: ../../../../inc/themes/classic/backup.inc:10
+#: ../../../../inc/themes/classic/backup.inc:67
+#: ../../../../inc/themes/material-blue/backup.inc:10
+#: ../../../../inc/themes/material-blue/backup.inc:71
+msgid "Resultado"
+msgstr "Result"
+
+#: ../../../../inc/themes/classic/backup.inc:18
+#: ../../../../inc/themes/classic/backup.inc:75
+#: ../../../../inc/themes/material-blue/backup.inc:18
+#: ../../../../inc/themes/material-blue/backup.inc:79
+msgid "Descargar Actual"
+msgstr "Download Current"
+
+#: ../../../../inc/themes/classic/backup.inc:31
+#: ../../../../inc/themes/material-blue/backup.inc:31
+msgid "No hay backups para descargar"
+msgstr "There are no backups for download"
+
+#: ../../../../inc/themes/classic/backup.inc:45
+#: ../../../../inc/themes/classic/backup.inc:49
+#: ../../../../inc/themes/classic/backup.inc:113
+#: ../../../../inc/themes/classic/backup.inc:117
+#: ../../../../inc/themes/classic/encryption.inc:93
+#: ../../../../inc/themes/classic/encryption.inc:97
+#: ../../../../inc/themes/classic/encryption.inc:152
+#: ../../../../inc/themes/classic/encryption.inc:156
+#: ../../../../inc/themes/classic/import.inc:15
+#: ../../../../inc/themes/classic/import.inc:37
+#: ../../../../inc/themes/classic/import.inc:51
+#: ../../../../inc/themes/classic/import.inc:97
+#: ../../../../inc/themes/classic/import.inc:118
+#: ../../../../inc/themes/classic/import.inc:170
+#: ../../../../inc/themes/classic/import.inc:174
+#: ../../../../inc/themes/classic/js-common.inc:13
+#: ../../../../inc/themes/classic/ldap.inc:13
+#: ../../../../inc/themes/classic/ldap.inc:33
+#: ../../../../inc/themes/classic/ldap.inc:58
+#: ../../../../inc/themes/classic/ldap.inc:82
+#: ../../../../inc/themes/classic/ldap.inc:93
+#: ../../../../inc/themes/classic/ldap.inc:117
+#: ../../../../inc/themes/classic/ldap.inc:145
+#: ../../../../inc/themes/classic/ldap.inc:166
+#: ../../../../inc/themes/classic/ldap.inc:187
+#: ../../../../inc/themes/classic/wiki.inc:12
+#: ../../../../inc/themes/classic/wiki.inc:28
+#: ../../../../inc/themes/classic/wiki.inc:55
+#: ../../../../inc/themes/classic/wiki.inc:82
+#: ../../../../inc/themes/material-blue/backup.inc:47
+#: ../../../../inc/themes/material-blue/backup.inc:51
+#: ../../../../inc/themes/material-blue/backup.inc:129
+#: ../../../../inc/themes/material-blue/backup.inc:133
+#: ../../../../inc/themes/material-blue/encryption.inc:107
+#: ../../../../inc/themes/material-blue/encryption.inc:111
+#: ../../../../inc/themes/material-blue/encryption.inc:171
+#: ../../../../inc/themes/material-blue/encryption.inc:175
+#: ../../../../inc/themes/material-blue/import.inc:99
+#: ../../../../inc/themes/material-blue/import.inc:103
+#: ../../../../inc/themes/material-blue/js-common.inc:11
+msgid "Ayuda"
+msgstr "Help"
+
+#: ../../../../inc/themes/classic/backup.inc:50
+#: ../../../../inc/themes/material-blue/backup.inc:52
+msgid ""
+"La copia de seguridad permite guardar y descargar tanto la base de datos de "
+"sysPass como los archivos de la aplicación y su configuración."
+msgstr ""
+"The backup allows to save and download either sysPass database or "
+"application files and its configuracion."
+
+#: ../../../../inc/themes/classic/backup.inc:52
+#: ../../../../inc/themes/material-blue/backup.inc:54
+msgid ""
+"Con este método es posible guardar todos los datos de sysPass en otro lugar "
+"o utilizarlos para hacer la aplicación portable."
+msgstr ""
+"With this method it's possible to save all sysPass data in another place or "
+"use it to make a portable application."
+
+#: ../../../../inc/themes/classic/backup.inc:60
+#: ../../../../inc/themes/classic/backup.inc:126
+#: ../../../../inc/themes/material-blue/backup.inc:64
+msgid "Exportar Cuentas"
+msgstr "Export Accounts"
+
+#: ../../../../inc/themes/classic/backup.inc:84
+#: ../../../../inc/themes/material-blue/backup.inc:88
+msgid "No hay archivos XML para descargar"
+msgstr "There is no files for download"
+
+#: ../../../../inc/themes/classic/backup.inc:90
+#: ../../../../inc/themes/material-blue/backup.inc:94
+#: ../../../../inc/themes/material-blue/backup.inc:101
+msgid "Clave de Exportación"
+msgstr "Export Password"
+
+#: ../../../../inc/themes/classic/backup.inc:98
+#: ../../../../inc/themes/material-blue/backup.inc:107
+#: ../../../../inc/themes/material-blue/backup.inc:114
+msgid "Clave de Exportación (repetir)"
+msgstr "Export Password (repeat)"
+
+#: ../../../../inc/themes/classic/backup.inc:118
+#: ../../../../inc/themes/material-blue/backup.inc:134
+msgid ""
+"La exportación de cuentas permite guardar las cuentas y sus datos en formato "
+"XML para posteriormente poder ser importados en otras instancias de sysPass."
+msgstr ""
+"The accounts export allows to save the accounts and their data in XML format "
+"to be imported in another sysPass intances."
+
+#: ../../../../inc/themes/classic/backup.inc:120
+#: ../../../../inc/themes/material-blue/backup.inc:136
+msgid "Los elementos exportados son cuentas, clientes y categorías."
+msgstr "The exported items are accounts, customers and categories."
+
+#: ../../../../inc/themes/classic/backup.inc:122
+#: ../../../../inc/themes/material-blue/backup.inc:138
+msgid ""
+"Las claves de las cuentas son exportadas de forma encriptada para mayor "
+"seguridad."
+msgstr ""
+"The accounts passwords are exported in an excrypted way for better security."
+
+#: ../../../../inc/themes/classic/backup.inc:124
+#: ../../../../inc/themes/material-blue/backup.inc:140
+msgid ""
+"Es posible establecer una clave de exportación para guardar todos los datos "
+"encriptados en el archivo XML."
+msgstr ""
+"It's possible to set an export password to save whole data encrypted in the "
+"XML file."
+
+#: ../../../../inc/themes/classic/body.inc:4
+#: ../../../../inc/themes/material-blue/body.inc:4
+msgid "Javascript es necesario para el correcto funcionamiento"
+msgstr "Javascript is needed in order to run correctly"
+
+#: ../../../../inc/themes/classic/categories.inc:10
+#: ../../../../inc/themes/material-blue/categories.inc:14
+msgid "Nombre de la categoría"
+msgstr "Category name"
+
+#: ../../../../inc/themes/classic/categories.inc:18
+#: ../../../../inc/themes/material-blue/categories.inc:26
+msgid "Descripción de la categoría"
+msgstr "Category description"
+
+#: ../../../../inc/themes/classic/config.inc:4
+#: ../../../../inc/themes/material-blue/config.inc:4
+msgid "Sitio"
+msgstr "Site"
+
+#: ../../../../inc/themes/classic/config.inc:10
+#: ../../../../inc/themes/material-blue/config.inc:11
+msgid "Idioma"
+msgstr "Language"
+
+#: ../../../../inc/themes/classic/config.inc:21
+#: ../../../../inc/themes/material-blue/config.inc:22
+msgid "Tema Visual"
+msgstr "Visual Theme"
+
+#: ../../../../inc/themes/classic/config.inc:33
+#: ../../../../inc/themes/material-blue/config.inc:34
+#: ../../../../inc/themes/material-blue/config.inc:42
+msgid "Timeout de sesión (s)"
+msgstr "Session timeout (s)"
+
+#: ../../../../inc/themes/classic/config.inc:42
+#: ../../../../inc/themes/material-blue/config.inc:48
+msgid "Habilitar log de eventos"
+msgstr "Enable event log"
+
+#: ../../../../inc/themes/classic/config.inc:46
+#: ../../../../inc/themes/material-blue/config.inc:52
+msgid "Guarda las acciones realizadas en la aplicación."
+msgstr "Saves the actions done by the application."
+
+#: ../../../../inc/themes/classic/config.inc:58
+#: ../../../../inc/themes/material-blue/config.inc:66
+msgid "Habilitar depuración"
+msgstr "Enable debug"
+
+#: ../../../../inc/themes/classic/config.inc:62
+#: ../../../../inc/themes/material-blue/config.inc:70
+msgid ""
+"Muestra información relativa a la configuración de la aplicación y "
+"rendimiento."
+msgstr ""
+"Shows some information about application configuration and performance."
+
+#: ../../../../inc/themes/classic/config.inc:74
+#: ../../../../inc/themes/material-blue/config.inc:84
+msgid "Modo mantenimiento"
+msgstr "Maintenance mode"
+
+#: ../../../../inc/themes/classic/config.inc:78
+#: ../../../../inc/themes/material-blue/config.inc:88
+msgid ""
+"En este modo no se puede acceder a la aplicación. Para deshabilitarlo es "
+"necesario modificar el archivo de configuración."
+msgstr ""
+"In this mode nobody can login to the application. To disable it, you need to "
+"modify the configuration file."
+
+#: ../../../../inc/themes/classic/config.inc:90
+#: ../../../../inc/themes/material-blue/config.inc:102
+msgid "Comprobar actualizaciones"
+msgstr "Check for updates"
+
+#: ../../../../inc/themes/classic/config.inc:94
+#: ../../../../inc/themes/material-blue/config.inc:106
+msgid ""
+"Comprobar actualizaciones de la aplicación (sólo para los usuarios "
+"administradores)."
+msgstr "Check for application updates (only for administrators)."
+
+#: ../../../../inc/themes/classic/config.inc:106
+#: ../../../../inc/themes/material-blue/config.inc:120
+msgid "Comprobar notificaciones"
+msgstr "Check for notices"
+
+#: ../../../../inc/themes/classic/config.inc:110
+#: ../../../../inc/themes/material-blue/config.inc:124
+msgid ""
+"Comprobar si existen notificaciones de seguridad o avisos de sysPass (sólo "
+"para los usuarios administradores)."
+msgstr ""
+"Check if there are sysPass security or warning notices (only for "
+"administrators)."
+
+#: ../../../../inc/themes/classic/config.inc:122
+#: ../../../../inc/themes/material-blue/config.inc:145
+msgid "Nombre de cuenta como enlace"
+msgstr "Account name as link"
+
+#: ../../../../inc/themes/classic/config.inc:126
+#: ../../../../inc/themes/material-blue/config.inc:149
+msgid ""
+"Habilita el nombre de la cuenta de la búsqueda, como enlace a los detalles "
+"de la cuenta."
+msgstr "Enables the account name as a link to account details."
+
+#: ../../../../inc/themes/classic/config.inc:138
+#: ../../../../inc/themes/material-blue/config.inc:230
+msgid "Gestión de archivos"
+msgstr "Files management"
+
+#: ../../../../inc/themes/classic/config.inc:142
+#: ../../../../inc/themes/material-blue/config.inc:234
+msgid "Habilita la subida/descarga de archivos para las cuentas."
+msgstr "Enables the uploads/downloads of account files."
+
+#: ../../../../inc/themes/classic/config.inc:154
+#: ../../../../inc/themes/material-blue/config.inc:163
+msgid "Búsquedas globales"
+msgstr "Global searches"
+
+#: ../../../../inc/themes/classic/config.inc:158
+#: ../../../../inc/themes/material-blue/config.inc:167
+msgid ""
+"Permite que todos los usuarios puedan realizar búsquedas en todas las "
+"cuentas, pero no pueden ver el contenido de las que no tienen permisos."
+msgstr ""
+"Allows to the users to do searches that includes all account, even if they "
+"don't have permissions, but they can't view the accounts details."
+
+#: ../../../../inc/themes/classic/config.inc:170
+#: ../../../../inc/themes/material-blue/config.inc:249
+msgid "Extensiones de archivos permitidas"
+msgstr "Allowed file extensions"
+
+#: ../../../../inc/themes/classic/config.inc:174
+#: ../../../../inc/themes/material-blue/config.inc:253
+msgid "Extensiones permitidas para la subida de archivos."
+msgstr "Allowed file extensions for file uploading."
+
+#: ../../../../inc/themes/classic/config.inc:178
+#: ../../../../inc/themes/material-blue/config.inc:257
+msgid "Se permite un máximo de 4 caracteres."
+msgstr "Max 4 characters allowed."
+
+#: ../../../../inc/themes/classic/config.inc:182
+#: ../../../../inc/themes/material-blue/config.inc:261
+msgid ""
+"Escribir extensión y pulsar intro para añadir. Es necesario guardar la "
+"configuración."
+msgstr ""
+"Write the extension and press enter to add. You need to save the "
+"configuration."
+
+#: ../../../../inc/themes/classic/config.inc:197
+#: ../../../../inc/themes/material-blue/config.inc:276
+msgid "Establece el tamaño máximo para subir archivos."
+msgstr "Set the maximum file size for uploading."
+
+#: ../../../../inc/themes/classic/config.inc:201
+#: ../../../../inc/themes/material-blue/config.inc:280
+msgid "El máximo absuluto es de 16MB."
+msgstr "The absolute maximum is 16MB."
+
+#: ../../../../inc/themes/classic/config.inc:212
+#: ../../../../inc/themes/material-blue/config.inc:181
+msgid "Resultados por página"
+msgstr "Results per page"
+
+#: ../../../../inc/themes/classic/config.inc:216
+#: ../../../../inc/themes/material-blue/config.inc:185
+msgid "Número de resultados por página a mostrar, al realizar una búsqueda."
+msgstr "Number of results per page to show when doing searches."
+
+#: ../../../../inc/themes/classic/config.inc:227
+msgid "Resultados en Tarjetas"
+msgstr "Results like Cards"
+
+#: ../../../../inc/themes/classic/config.inc:231
+msgid "Muestra los resultados de búsqueda de cuentas en formato tarjeta."
+msgstr "Enables to show account's search results like a card format."
+
+#: ../../../../inc/themes/classic/config.inc:243
+#: ../../../../inc/themes/material-blue/config.inc:201
+msgid "Imagen para mostrar clave"
+msgstr "Image to show password"
+
+#: ../../../../inc/themes/classic/config.inc:247
+#: ../../../../inc/themes/material-blue/config.inc:205
+msgid "Generar una imagen con el texto de la clave de la cuenta."
+msgstr "Generate an image with a text of the account password."
+
+#: ../../../../inc/themes/classic/config.inc:250
+#: ../../../../inc/themes/material-blue/config.inc:208
+msgid "Util para entornos donde copiar la clave supone un riesgo de seguridad."
+msgstr ""
+"Useful for environments where copy password to clipboard is a security risk."
+
+#: ../../../../inc/themes/classic/config.inc:285
+#: ../../../../inc/themes/material-blue/config.inc:398
+msgid "Añadir extensión"
+msgstr "Add extension"
+
+#: ../../../../inc/themes/classic/config.inc:286
+#: ../../../../inc/themes/material-blue/config.inc:399
+msgid "Eliminar extensión"
+msgstr "Delete extension"
+
+#: ../../../../inc/themes/classic/customers.inc:10
+#: ../../../../inc/themes/material-blue/customers.inc:14
+msgid "Nombre del cliente"
+msgstr "Customer name"
+
+#: ../../../../inc/themes/classic/customers.inc:18
+#: ../../../../inc/themes/material-blue/customers.inc:26
+msgid "Descripción del cliente"
+msgstr "Customer description"
+
+#: ../../../../inc/themes/classic/customfields.inc:38
+#: ../../../../inc/themes/material-blue/customfields.inc:41
+msgid "Texto Ayuda"
+msgstr "Help Text"
+
+#: ../../../../inc/themes/classic/customfields.inc:44
+#: ../../../../inc/themes/material-blue/customfields.inc:52
+msgid "Obligatorio"
+msgstr "Required"
+
+#: ../../../../inc/themes/classic/encryption.inc:8
+#: ../../../../inc/themes/classic/install.inc:46
+#: ../../../../inc/themes/classic/install.inc:50
+#: ../../../../inc/themes/classic/install.inc:51
+#: ../../../../inc/themes/classic/login.inc:15
+#: ../../../../inc/themes/classic/login.inc:27
+#: ../../../../inc/themes/material-blue/encryption.inc:8
+#: ../../../../inc/themes/material-blue/install.inc:49
+#: ../../../../inc/themes/material-blue/install.inc:56
+#: ../../../../inc/themes/material-blue/login.inc:25
+#: ../../../../inc/themes/material-blue/login.inc:48
+msgid "Clave Maestra"
+msgstr "Master Password"
+
+#: ../../../../inc/themes/classic/encryption.inc:16
+#: ../../../../inc/themes/classic/encryption.inc:116
+#: ../../../../inc/themes/material-blue/encryption.inc:16
+#: ../../../../inc/themes/material-blue/encryption.inc:131
+msgid "Último cambio"
+msgstr "Last Change"
+
+#: ../../../../inc/themes/classic/encryption.inc:25
+#: ../../../../inc/themes/material-blue/encryption.inc:25
+#: ../../../../inc/themes/material-blue/encryption.inc:31
+msgid "Clave Maestra actual"
+msgstr "Current Master Password"
+
+#: ../../../../inc/themes/classic/encryption.inc:34
+#: ../../../../inc/themes/material-blue/encryption.inc:37
+#: ../../../../inc/themes/material-blue/encryption.inc:43
+msgid "Nueva Clave Maestra"
+msgstr "New Master Password"
+
+#: ../../../../inc/themes/classic/encryption.inc:43
+#: ../../../../inc/themes/material-blue/encryption.inc:49
+#: ../../../../inc/themes/material-blue/encryption.inc:55
+msgid "Nueva Clave Maestra (repetir)"
+msgstr "New Master Password (repeat)"
+
+#: ../../../../inc/themes/classic/encryption.inc:51
+#: ../../../../inc/themes/material-blue/encryption.inc:61
+msgid "No modificar cuentas"
+msgstr "Do not modify accounts"
+
+#: ../../../../inc/themes/classic/encryption.inc:56
+#: ../../../../inc/themes/material-blue/encryption.inc:66
+msgid "Establece una nueva clave maestra sin re-encriptar las cuentas"
+msgstr "Sets a new master password without re-encrypting the accounts."
+
+#: ../../../../inc/themes/classic/encryption.inc:67
+#: ../../../../inc/themes/material-blue/encryption.inc:79
+msgid "Confirmar cambio"
+msgstr "Confirm Change"
+
+#: ../../../../inc/themes/classic/encryption.inc:70
+#: ../../../../inc/themes/classic/encryption.inc:73
+#: ../../../../inc/themes/classic/encryption.inc:76
+#: ../../../../inc/themes/classic/import.inc:67
+#: ../../../../inc/themes/classic/security.inc:43
+msgid "Atención"
+msgstr "Warning"
+
+#: ../../../../inc/themes/classic/encryption.inc:71
+#: ../../../../inc/themes/material-blue/encryption.inc:83
+msgid "Guarde la nueva clave en un lugar seguro."
+msgstr "You should save the new password on a secure place"
+
+#: ../../../../inc/themes/classic/encryption.inc:74
+#: ../../../../inc/themes/material-blue/encryption.inc:86
+msgid "Se volverán a encriptar las claves de todas las cuentas."
+msgstr "All accounts passwords will be encrypted again."
+
+#: ../../../../inc/themes/classic/encryption.inc:77
+#: ../../../../inc/themes/material-blue/encryption.inc:89
+msgid "Los usuarios deberán de introducir la nueva clave maestra."
+msgstr "Users will need to enter the new master key."
+
+#: ../../../../inc/themes/classic/encryption.inc:98
+#: ../../../../inc/themes/material-blue/encryption.inc:112
+msgid ""
+"La clave maestra es utilizada para encriptar las claves de las cuentas de "
+"sysPass para mantenerlas seguras."
+msgstr ""
+"The master password is used to encryt sysPass accounts passwords and keep "
+"them safe."
+
+#: ../../../../inc/themes/classic/encryption.inc:100
+#: ../../../../inc/themes/material-blue/encryption.inc:114
+msgid ""
+"Es recomendable cambiarla cada cierto tiempo y utilizar una clave compleja "
+"que incluya números, letras y símbolos."
+msgstr ""
+"It's advisable to change it from time to time and use a complex password "
+"that includes numbers, letters and symbols."
+
+#: ../../../../inc/themes/classic/encryption.inc:108
+#: ../../../../inc/themes/material-blue/encryption.inc:124
+msgid "Clave Temporal"
+msgstr "Temporary Password"
+
+#: ../../../../inc/themes/classic/encryption.inc:119
+#: ../../../../inc/themes/classic/encryption.inc:130
+#: ../../../../inc/themes/material-blue/encryption.inc:134
+#: ../../../../inc/themes/material-blue/encryption.inc:145
+msgid "No generada"
+msgstr "Not generated"
+
+#: ../../../../inc/themes/classic/encryption.inc:124
+#: ../../../../inc/themes/material-blue/encryption.inc:139
+msgid "Válido hasta"
+msgstr "Valid until"
+
+#: ../../../../inc/themes/classic/encryption.inc:136
+#: ../../../../inc/themes/material-blue/encryption.inc:151
+#: ../../../../inc/themes/material-blue/encryption.inc:157
+msgid "Validez (s)"
+msgstr "Life (s)"
+
+#: ../../../../inc/themes/classic/encryption.inc:139
+msgid "Validez"
+msgstr "Life"
+
+#: ../../../../inc/themes/classic/encryption.inc:157
+#: ../../../../inc/themes/material-blue/encryption.inc:176
+msgid ""
+"La clave temporal es utilizada como clave maestra para los usuarios que "
+"necesitan introducirla al iniciar la sesión, así no es necesario facilitar "
+"la clave maestra original."
+msgstr ""
+"The temporary password is used as a master password for the users that need "
+"to enter when login, so there is no need to tell the real master password."
+
+#: ../../../../inc/themes/classic/encryption.inc:159
+#: ../../../../inc/themes/material-blue/encryption.inc:180
+msgid "Generar"
+msgstr "Generate"
+
+#: ../../../../inc/themes/classic/eventlog.inc:8
+#: ../../../../inc/themes/classic/search.inc:3
+#: ../../../../inc/themes/material-blue/eventlog.inc:7
+#: ../../../../inc/themes/material-blue/search.inc:3
+msgid "No se encontraron registros"
+msgstr "No records found"
+
+#: ../../../../inc/themes/classic/eventlog.inc:19
+#: ../../../../inc/themes/material-blue/eventlog.inc:18
+msgid "Fecha / Hora"
+msgstr "Date / Time"
+
+#: ../../../../inc/themes/classic/eventlog.inc:22
+#: ../../../../inc/themes/material-blue/eventlog.inc:21
+msgid "Evento"
+msgstr "Event"
+
+#: ../../../../inc/themes/classic/eventlog.inc:28
+#: ../../../../inc/themes/material-blue/eventlog.inc:27
+msgid "IP"
+msgstr "IP"
+
+#: ../../../../inc/themes/classic/eventlog.inc:86
+#: ../../../../inc/themes/classic/search.inc:159
+#: ../../../../inc/themes/material-blue/eventlog.inc:85
+#: ../../../../inc/themes/material-blue/search.inc:173
+msgid "Primera página"
+msgstr "First page"
+
+#: ../../../../inc/themes/classic/eventlog.inc:88
+#: ../../../../inc/themes/classic/search.inc:161
+#: ../../../../inc/themes/material-blue/eventlog.inc:87
+#: ../../../../inc/themes/material-blue/search.inc:175
+msgid "Página anterior"
+msgstr "Previous page"
+
+#: ../../../../inc/themes/classic/eventlog.inc:93
+#: ../../../../inc/themes/classic/search.inc:166
+#: ../../../../inc/themes/material-blue/eventlog.inc:92
+#: ../../../../inc/themes/material-blue/search.inc:180
+msgid "Página siguiente"
+msgstr "Next page"
+
+#: ../../../../inc/themes/classic/eventlog.inc:95
+#: ../../../../inc/themes/classic/search.inc:168
+#: ../../../../inc/themes/material-blue/eventlog.inc:94
+#: ../../../../inc/themes/material-blue/search.inc:182
+msgid "Última página"
+msgstr "Last page"
+
+#: ../../../../inc/themes/classic/files.inc:22
+#: ../../../../inc/themes/material-blue/files.inc:21
+msgid "Ver Archivo"
+msgstr "View File"
+
+#: ../../../../inc/themes/classic/footer.inc:6
+#: ../../../../inc/themes/material-blue/footer.inc:27
+msgid "Indica si la conexión utiliza HTTPS."
+msgstr "It tells if the connection uses HTTPS"
+
+#: ../../../../inc/themes/classic/footer.inc:6
+#: ../../../../inc/themes/material-blue/footer.inc:27
+msgid ""
+"Las claves de formularios enviados se encriptan mediante PKI, el resto de "
+"datos no."
+msgstr ""
+"The passwords sent from the forms are encrypted with PKI, the other data not."
+
+#: ../../../../inc/themes/classic/footer.inc:6
+#: ../../../../inc/themes/material-blue/footer.inc:27
+msgid "Seguro"
+msgstr "Secure"
+
+#: ../../../../inc/themes/classic/footer.inc:6
+#: ../../../../inc/themes/material-blue/footer.inc:27
+msgid "Inseguro"
+msgstr "Insecure"
+
+#: ../../../../inc/themes/classic/footer.inc:11
+#: ../../../../inc/themes/material-blue/footer.inc:18
+msgid "Ayuda :: FAQ :: Changelog"
+msgstr "Help :: FAQ :: Changelog"
+
+#: ../../../../inc/themes/classic/footer.inc:14
+#: ../../../../inc/themes/material-blue/footer.inc:23
+msgid "Un proyecto de cygnux.org"
+msgstr "A cygnux.org project"
+
+#: ../../../../inc/themes/classic/groups.inc:10
+#: ../../../../inc/themes/material-blue/groups.inc:14
+msgid "Nombre del grupo"
+msgstr "Group name"
+
+#: ../../../../inc/themes/classic/groups.inc:18
+#: ../../../../inc/themes/material-blue/groups.inc:26
+msgid "Descripción del grupo"
+msgstr "Group description"
+
+#: ../../../../inc/themes/classic/import.inc:7
+#: ../../../../inc/themes/material-blue/import.inc:121
+msgid "Importar phpPMS"
+msgstr "phpPMS Import"
+
+#: ../../../../inc/themes/classic/import.inc:14
+#: ../../../../inc/themes/classic/install.inc:63
+#: ../../../../inc/themes/classic/install.inc:64
+#: ../../../../inc/themes/material-blue/import.inc:128
+#: ../../../../inc/themes/material-blue/import.inc:140
+msgid "Usuario BBDD"
+msgstr "DB Username"
+
+#: ../../../../inc/themes/classic/import.inc:18
+#: ../../../../inc/themes/material-blue/import.inc:132
+msgid "Indicar el usuario de conexión a la base de datos de phpPMS."
+msgstr "Provide the phpPMS database connection user."
+
+#: ../../../../inc/themes/classic/import.inc:28
+#: ../../../../inc/themes/classic/install.inc:71
+#: ../../../../inc/themes/classic/install.inc:73
+#: ../../../../inc/themes/material-blue/import.inc:146
+#: ../../../../inc/themes/material-blue/import.inc:152
+msgid "Clave BBDD"
+msgstr "DB Password"
+
+#: ../../../../inc/themes/classic/import.inc:36
+#: ../../../../inc/themes/classic/install.inc:78
+#: ../../../../inc/themes/classic/install.inc:79
+#: ../../../../inc/themes/material-blue/import.inc:158
+#: ../../../../inc/themes/material-blue/import.inc:170
+msgid "Nombre BBDD"
+msgstr "DB Name"
+
+#: ../../../../inc/themes/classic/import.inc:40
+#: ../../../../inc/themes/material-blue/import.inc:162
+msgid "Indicar el nombre de la base de datos de phpPMS."
+msgstr "Provide the phpPMS database name."
+
+#: ../../../../inc/themes/classic/import.inc:50
+#: ../../../../inc/themes/classic/install.inc:87
+#: ../../../../inc/themes/classic/install.inc:88
+#: ../../../../inc/themes/material-blue/import.inc:176
+#: ../../../../inc/themes/material-blue/import.inc:188
+msgid "Servidor BBDD"
+msgstr "DB Server"
+
+#: ../../../../inc/themes/classic/import.inc:54
+#: ../../../../inc/themes/material-blue/import.inc:180
+msgid "Indicar el servidor de la base de datos de phpPMS."
+msgstr "Provide the phpPMS database server."
+
+#: ../../../../inc/themes/classic/import.inc:64
+#: ../../../../inc/themes/material-blue/import.inc:194
+msgid "Confirmar"
+msgstr "Confirm"
+
+#: ../../../../inc/themes/classic/import.inc:68
+#: ../../../../inc/themes/material-blue/import.inc:198
+msgid "Los datos actuales serán borrados (excepto el usuario actual)"
+msgstr "Current data will be removed (except current user)"
+
+#: ../../../../inc/themes/classic/import.inc:83
+msgid "Iniciar"
+msgstr "Start"
+
+#: ../../../../inc/themes/classic/import.inc:89
+#: ../../../../inc/themes/material-blue/import.inc:7
+msgid "Importar CSV/XML"
+msgstr "CSV/XML Import"
+
+#: ../../../../inc/themes/classic/import.inc:96
+#: ../../../../inc/themes/material-blue/import.inc:14
+msgid "Usuario por Defecto"
+msgstr "Default User"
+
+#: ../../../../inc/themes/classic/import.inc:100
+#: ../../../../inc/themes/material-blue/import.inc:18
+msgid "Define el usuario por defecto para las cuentas importadas."
+msgstr "Defines the default user for the accounts imported."
+
+#: ../../../../inc/themes/classic/import.inc:117
+#: ../../../../inc/themes/classic/ldap.inc:144
+#: ../../../../inc/themes/material-blue/import.inc:36
+#: ../../../../inc/themes/material-blue/ldap.inc:170
+msgid "Grupo por Defecto"
+msgstr "Default Group"
+
+#: ../../../../inc/themes/classic/import.inc:121
+#: ../../../../inc/themes/material-blue/import.inc:40
+msgid "Define el grupo por defecto para las cuentas importadas."
+msgstr "Defines the default group for the accounts imported."
+
+#: ../../../../inc/themes/classic/import.inc:138
+#: ../../../../inc/themes/material-blue/import.inc:58
+#: ../../../../inc/themes/material-blue/import.inc:64
+msgid "Clave de Importación"
+msgstr "Import Password"
+
+#: ../../../../inc/themes/classic/import.inc:146
+#: ../../../../inc/themes/material-blue/import.inc:70
+#: ../../../../inc/themes/material-blue/import.inc:76
+msgid "Delimitador CSV"
+msgstr "CVS delimiter"
+
+#: ../../../../inc/themes/classic/import.inc:162
+#: ../../../../inc/themes/material-blue/import.inc:90
+msgid "Soltar archivo aquí o click para seleccionar"
+msgstr "Drop files here or click to select"
+
+#: ../../../../inc/themes/classic/import.inc:175
+msgid ""
+"Permite realizar la importación de Cuentas, Categorías y Clientes desde "
+"arhcivos XML y CSV."
+msgstr ""
+"Allows to make the Accounts, Categories and Customers import from XML or CSV "
+"files."
+
+#: ../../../../inc/themes/classic/import.inc:177
+#: ../../../../inc/themes/material-blue/import.inc:106
+msgid ""
+"Los formatos de archivos XML soportados son: sysPass, KeePass y KeePassX"
+msgstr "The supported XML file formats are: sysPass, KeePass and KeePassX"
+
+#: ../../../../inc/themes/classic/import.inc:179
+#: ../../../../inc/themes/material-blue/import.inc:108
+msgid ""
+"Arrastar el archivo a importar a la zona indicada o hacer click sobre la "
+"flecha."
+msgstr "Drag&Drop the file to the import zone or click over the arrow."
+
+#: ../../../../inc/themes/classic/import.inc:181
+#: ../../../../inc/themes/material-blue/import.inc:110
+msgid ""
+"Para archivos de KeePass o KeePassX, el nombre del cliente será igual a "
+"KeePass o KeePassX y la categoría igual al nombre de los grupos."
+msgstr ""
+"For KeePass or KeePassX files, the customer name will be KeePass or KeePassX "
+"and the category name like groups names."
+
+#: ../../../../inc/themes/classic/import.inc:183
+#: ../../../../inc/themes/material-blue/import.inc:112
+msgid "La importación de archivos CSV se realiza con el siguiente formato:"
+msgstr "The CSV file import is done with the following format:"
+
+#: ../../../../inc/themes/classic/import.inc:185
+#: ../../../../inc/themes/material-blue/import.inc:114
+msgid "nombre_de_cuenta;cliente;categoría;url;usuario;clave;notas"
+msgstr "account_name;customer;category;url;user;password;notes"
+
+#: ../../../../inc/themes/classic/import.inc:187
+#: ../../../../inc/themes/material-blue/import.inc:116
+msgid ""
+"En todos los casos, si el cliente o la categoría no están creados, se crean "
+"automáticamente."
+msgstr ""
+"In all cases, if the customer o category aren't created, they are "
+"automatically created."
+
+#: ../../../../inc/themes/classic/info.inc:4
+#: ../../../../inc/themes/material-blue/info.inc:4
+msgid "Información de la Aplicación"
+msgstr "Application Information"
+
+#: ../../../../inc/themes/classic/info.inc:10
+#: ../../../../inc/themes/material-blue/info.inc:10
+msgid "Versión sysPass"
+msgstr "sysPass version"
+
+#: ../../../../inc/themes/classic/info.inc:18
+#: ../../../../inc/themes/material-blue/info.inc:18
+msgid "Base de Datos"
+msgstr "Database"
+
+#: ../../../../inc/themes/classic/info.inc:30
+#: ../../../../inc/themes/material-blue/info.inc:30
+msgid "PHP"
+msgstr "PHP"
+
+#: ../../../../inc/themes/classic/info.inc:35
+#: ../../../../inc/themes/material-blue/info.inc:35
+msgid "Extensiones"
+msgstr "Extensions"
+
+#: ../../../../inc/themes/classic/info.inc:37
+#: ../../../../inc/themes/material-blue/info.inc:37
+msgid "Memoria Usada"
+msgstr "Used Memory"
+
+#: ../../../../inc/themes/classic/info.inc:44
+#: ../../../../inc/themes/classic/ldap.inc:32
+#: ../../../../inc/themes/classic/mail.inc:21
+#: ../../../../inc/themes/material-blue/config.inc:316
+#: ../../../../inc/themes/material-blue/info.inc:44
+#: ../../../../inc/themes/material-blue/ldap.inc:35
+#: ../../../../inc/themes/material-blue/ldap.inc:58
+#: ../../../../inc/themes/material-blue/ldap.inc:86
+#: ../../../../inc/themes/material-blue/mail.inc:24
+#: ../../../../inc/themes/material-blue/mail.inc:30
+msgid "Servidor"
+msgstr "Server"
+
+#: ../../../../inc/themes/classic/install.inc:4
+#: ../../../../inc/themes/material-blue/install.inc:4
+msgid "Instalación "
+msgstr "Installation"
+
+#: ../../../../inc/themes/classic/install.inc:25
+#: ../../../../inc/themes/material-blue/install.inc:25
+msgid "Crear cuenta de admin de sysPass"
+msgstr "Create sysPass admin account"
+
+#: ../../../../inc/themes/classic/install.inc:32
+#: ../../../../inc/themes/material-blue/install.inc:36
+msgid "Login del usuario administrador de sysPass"
+msgstr "sysPass administrator's login"
+
+#: ../../../../inc/themes/classic/install.inc:58
+#: ../../../../inc/themes/material-blue/install.inc:69
+msgid "Configurar BBDD"
+msgstr "DB Configuration"
+
+#: ../../../../inc/themes/classic/install.inc:67
+msgid "Login de usuario con permisos de administrador de MySQL"
+msgstr "User login with with database administrative rights"
+
+#: ../../../../inc/themes/classic/install.inc:83
+#: ../../../../inc/themes/material-blue/install.inc:102
+msgid "Nombre de la base de datos para sysPass"
+msgstr "sysPass database name"
+
+#: ../../../../inc/themes/classic/install.inc:91
+msgid "Nombre del servidor de la base de datos de sysPass"
+msgstr "sysPass database server name"
+
+#: ../../../../inc/themes/classic/install.inc:97
+#: ../../../../inc/themes/material-blue/install.inc:120
+msgid "Modo Hosting"
+msgstr "Hosting Mode"
+
+#: ../../../../inc/themes/classic/install.inc:104
+#: ../../../../inc/themes/material-blue/install.inc:127
+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"
+
+#: ../../../../inc/themes/classic/install.inc:108
+#: ../../../../inc/themes/material-blue/install.inc:134
+#: ../../../../inc/themes/material-blue/install.inc:135
+msgid "Instalar"
+msgstr "Install"
+
+#: ../../../../inc/themes/classic/ldap.inc:12
+#: ../../../../inc/themes/material-blue/ldap.inc:12
+msgid "Habilitar LDAP"
+msgstr "Enable LDAP"
+
+#: ../../../../inc/themes/classic/ldap.inc:16
+#: ../../../../inc/themes/material-blue/ldap.inc:16
+msgid "Habilita de autentificación mediante servidor LDAP."
+msgstr "Enables the authentication aganist an LDAP server."
+
+#: ../../../../inc/themes/classic/ldap.inc:20
+#: ../../../../inc/themes/material-blue/ldap.inc:20
+msgid "Este método utilizará MySQL en caso de fallo."
+msgstr "This method will use MySQL as fallback."
+
+#: ../../../../inc/themes/classic/ldap.inc:36
+#: ../../../../inc/themes/material-blue/ldap.inc:39
+msgid "Nombre o dirección IP del servidor de LDAP."
+msgstr "Hostname or IP address of LDAP server."
+
+#: ../../../../inc/themes/classic/ldap.inc:40
+#: ../../../../inc/themes/classic/ldap.inc:65
+#: ../../../../inc/themes/classic/ldap.inc:100
+#: ../../../../inc/themes/classic/ldap.inc:128
+#: ../../../../inc/themes/classic/wiki.inc:89
+#: ../../../../inc/themes/material-blue/ldap.inc:43
+#: ../../../../inc/themes/material-blue/ldap.inc:72
+#: ../../../../inc/themes/material-blue/ldap.inc:119
+#: ../../../../inc/themes/material-blue/ldap.inc:151
+#: ../../../../inc/themes/material-blue/wiki.inc:101
+msgid "Ejemplos:"
+msgstr "Examples:"
+
+#: ../../../../inc/themes/classic/ldap.inc:57
+#: ../../../../inc/themes/material-blue/ldap.inc:64
+msgid "Usuario de conexión"
+msgstr "Bind User"
+
+#: ../../../../inc/themes/classic/ldap.inc:61
+#: ../../../../inc/themes/material-blue/ldap.inc:68
+msgid "Usuario para conectar con el servicio de LDAP."
+msgstr "User to connect to the LDAP service."
+
+#: ../../../../inc/themes/classic/ldap.inc:81
+#: ../../../../inc/themes/material-blue/ldap.inc:92
+msgid "Clave de conexión"
+msgstr "Bind Password"
+
+#: ../../../../inc/themes/classic/ldap.inc:92
+#: ../../../../inc/themes/material-blue/ldap.inc:111
+#: ../../../../inc/themes/material-blue/ldap.inc:133
+msgid "Base de búsqueda"
+msgstr "Search base"
+
+#: ../../../../inc/themes/classic/ldap.inc:96
+#: ../../../../inc/themes/material-blue/ldap.inc:115
+msgid "Base en la que realizar la búsqueda de usuarios de LDAP."
+msgstr "LDAP base to do the LDAP users searches."
+
+#: ../../../../inc/themes/classic/ldap.inc:120
+#: ../../../../inc/themes/material-blue/ldap.inc:143
+msgid ""
+"Grupo de LDAP al que debe de pertenecer el usuario para permitir el acceso."
+msgstr "LDAP group that the user must belong to allow it to login."
+
+#: ../../../../inc/themes/classic/ldap.inc:124
+#: ../../../../inc/themes/material-blue/ldap.inc:147
+msgid "Este grupo debe de estar ubicado en la base de búsquedas de LDAP."
+msgstr "This group needs to be placed in the LDAP search base."
+
+#: ../../../../inc/themes/classic/ldap.inc:148
+#: ../../../../inc/themes/material-blue/ldap.inc:174
+msgid ""
+"Define el grupo de usuarios por defecto para los nuevos usuarios de LDAP."
+msgstr "Define the default users group for new LDAP users"
+
+#: ../../../../inc/themes/classic/ldap.inc:165
+#: ../../../../inc/themes/material-blue/ldap.inc:190
+msgid "Perfil por Defecto"
+msgstr "Default Profile"
+
+#: ../../../../inc/themes/classic/ldap.inc:169
+#: ../../../../inc/themes/material-blue/ldap.inc:194
+msgid ""
+"Define el perfil de usuarios por defecto para los nuevos usuarios de LDAP."
+msgstr "Defines the default profile for the newly created LDAP users."
+
+#: ../../../../inc/themes/classic/ldap.inc:186
+#: ../../../../inc/themes/material-blue/ldap.inc:210
+msgid "Active Directory"
+msgstr "Active Directory"
+
+#: ../../../../inc/themes/classic/ldap.inc:190
+#: ../../../../inc/themes/material-blue/ldap.inc:214
+msgid "Habilita el modo de conexión con LDAP de Active Directory."
+msgstr "Enables Active Directory LDAP connection mode."
+
+#: ../../../../inc/themes/classic/ldap.inc:202
+#: ../../../../inc/themes/material-blue/ldap.inc:228
+msgid "Comprobar"
+msgstr "Check"
+
+#: ../../../../inc/themes/classic/ldap.inc:206
+#: ../../../../inc/themes/material-blue/ldap.inc:232
+msgid "Comprobar conexión con LDAP"
+msgstr "Check LDAP connection"
+
+#: ../../../../inc/themes/classic/login.inc:46
+#: ../../../../inc/themes/material-blue/login.inc:73
+msgid "¿Olvidó su clave?"
+msgstr "Lost your password?"
+
+#: ../../../../inc/themes/classic/login.inc:59
+#: ../../../../inc/themes/material-blue/login.inc:85
+msgid "Aplicación actualizada correctamente"
+msgstr "Application successfully updated"
+
+#: ../../../../inc/themes/classic/login.inc:64
+#: ../../../../inc/themes/classic/login.inc:65
+#: ../../../../inc/themes/material-blue/login.inc:90
+#: ../../../../inc/themes/material-blue/login.inc:91
+#: ../../../../inc/themes/material-blue/login.inc:93
+msgid "Nuevas Características"
+msgstr "New Features"
+
+#: ../../../../inc/themes/classic/mail.inc:11
+#: ../../../../inc/themes/material-blue/mail.inc:11
+msgid "Habilitar notificaciones de correo"
+msgstr "Enable email notifications"
+
+#: ../../../../inc/themes/classic/mail.inc:29
+#: ../../../../inc/themes/material-blue/config.inc:330
+#: ../../../../inc/themes/material-blue/mail.inc:36
+#: ../../../../inc/themes/material-blue/mail.inc:43
+msgid "Puerto"
+msgstr "Port"
+
+#: ../../../../inc/themes/classic/mail.inc:37
+#: ../../../../inc/themes/material-blue/mail.inc:49
+msgid "Habilitar Autentificación"
+msgstr "Enable Authentication"
+
+#: ../../../../inc/themes/classic/mail.inc:68
+#: ../../../../inc/themes/material-blue/mail.inc:91
+msgid "Deshabilitada"
+msgstr "Disabled"
+
+#: ../../../../inc/themes/classic/mail.inc:77
+#: ../../../../inc/themes/material-blue/mail.inc:100
+#: ../../../../inc/themes/material-blue/mail.inc:107
+msgid "Dirección de correo de envío"
+msgstr "Recipient email address"
+
+#: ../../../../inc/themes/classic/mail.inc:85
+#: ../../../../inc/themes/material-blue/mail.inc:113
+msgid "Habilitar peticiones por correo"
+msgstr "Enable requests by email"
+
+#: ../../../../inc/themes/classic/mgmttabs.inc:66
+#: ../../../../inc/themes/classic/search.inc:110
+#: ../../../../inc/themes/material-blue/search.inc:125
+msgid "Más Acciones"
+msgstr "More Actions"
+
+#: ../../../../inc/themes/classic/passreset.inc:13
+#: ../../../../inc/themes/material-blue/passreset.inc:10
+msgid "Solicitud de Cambio de Clave"
+msgstr "Request Password Change"
+
+#: ../../../../inc/themes/classic/passreset.inc:16
+msgid "Login del Usuario"
+msgstr "User login"
+
+#: ../../../../inc/themes/classic/passreset.inc:21
+#: ../../../../inc/themes/material-blue/passreset.inc:24
+msgid "Email del Usuario"
+msgstr "User's Email"
+
+#: ../../../../inc/themes/classic/passreset.inc:22
+#: ../../../../inc/themes/classic/users.inc:61
+#: ../../../../inc/themes/material-blue/users.inc:71
+msgid "Email"
+msgstr "Email"
+
+#: ../../../../inc/themes/classic/passreset.inc:27
+msgid "Nueva Clave"
+msgstr "New Password"
+
+#: ../../../../inc/themes/classic/passreset.inc:34
+msgid "Nueva Clave (Verificar)"
+msgstr "New Password (Verify)"
+
+#: ../../../../inc/themes/classic/passreset.inc:35
+msgid "Clave (Verificar)"
+msgstr "Password (Verify)"
+
+#: ../../../../inc/themes/classic/passreset.inc:46
+#: ../../../../inc/themes/material-blue/passreset.inc:42
msgid "Volver a iniciar sesión"
msgstr "Go back to login"
-#: ../../../../inc/tpl/passreset.php:85
+#: ../../../../inc/themes/classic/passreset.inc:48
+#: ../../../../inc/themes/material-blue/2fa.inc:27
+#: ../../../../inc/themes/material-blue/passreset.inc:48
+#: ../../../../inc/themes/material-blue/passreset.inc:49
msgid "Solicitar"
msgstr "Request"
-#: ../../../../inc/tpl/passreset.php:86
+#: ../../../../inc/themes/classic/passreset.inc:49
msgid "Solicitar cambio de clave"
msgstr "Request password change"
-#: ../../../../inc/tpl/passreset.php:88
+#: ../../../../inc/themes/classic/passreset.inc:51
+#: ../../../../inc/themes/material-blue/passreset.inc:53
+#: ../../../../inc/themes/material-blue/passreset.inc:54
msgid "Cambiar"
msgstr "Change"
-#: ../../../../inc/tpl/passreset.php:89
+#: ../../../../inc/themes/classic/passreset.inc:52
msgid "Cambiar Clave"
msgstr "Change password"
-#: ../../../../inc/tpl/profiles.php:41
+#: ../../../../inc/themes/classic/profiles.inc:11
+#: ../../../../inc/themes/material-blue/profiles.inc:14
msgid "Nombre del perfil"
msgstr "Profile name"
-#: ../../../../inc/tpl/profiles.php:48
+#: ../../../../inc/themes/classic/profiles.inc:19
+#: ../../../../inc/themes/material-blue/profiles.inc:30
msgid "Ver detalles de cuenta"
msgstr "View account details"
-#: ../../../../inc/tpl/profiles.php:48
+#: ../../../../inc/themes/classic/profiles.inc:19
+#: ../../../../inc/themes/material-blue/profiles.inc:30
msgid "Ver"
msgstr "View"
-#: ../../../../inc/tpl/profiles.php:50
+#: ../../../../inc/themes/classic/profiles.inc:23
+#: ../../../../inc/themes/material-blue/profiles.inc:35
msgid "Ver clave de cuenta"
msgstr "View account password"
-#: ../../../../inc/tpl/profiles.php:53
+#: ../../../../inc/themes/classic/profiles.inc:28
+#: ../../../../inc/themes/material-blue/profiles.inc:40
msgid "Ver historial de cuenta"
msgstr "View account history"
-#: ../../../../inc/tpl/profiles.php:53
-msgid "Ver Historial"
-msgstr "View History"
-
-#: ../../../../inc/tpl/profiles.php:55
+#: ../../../../inc/themes/classic/profiles.inc:32
+#: ../../../../inc/themes/material-blue/profiles.inc:45
msgid "Editar cuenta"
msgstr "Edit account"
-#: ../../../../inc/tpl/profiles.php:55
+#: ../../../../inc/themes/classic/profiles.inc:32
+#: ../../../../inc/themes/material-blue/profiles.inc:45
msgid "Editar"
msgstr "Edit"
-#: ../../../../inc/tpl/profiles.php:58
+#: ../../../../inc/themes/classic/profiles.inc:37
+#: ../../../../inc/themes/material-blue/profiles.inc:50
msgid "Editar clave de cuenta"
msgstr "Edit account password"
-#: ../../../../inc/tpl/profiles.php:58
+#: ../../../../inc/themes/classic/profiles.inc:37
+#: ../../../../inc/themes/material-blue/profiles.inc:50
msgid "Editar Clave"
msgstr "Edit Password"
-#: ../../../../inc/tpl/profiles.php:60
+#: ../../../../inc/themes/classic/profiles.inc:41
msgid "Añadir nueva cuenta"
msgstr "Add new account"
-#: ../../../../inc/tpl/profiles.php:60
+#: ../../../../inc/themes/classic/profiles.inc:41
msgid "Añadir"
msgstr "Add"
-#: ../../../../inc/tpl/profiles.php:63
+#: ../../../../inc/themes/classic/profiles.inc:46
msgid "Borrar cuenta"
msgstr "Delete account"
-#: ../../../../inc/tpl/profiles.php:63
+#: ../../../../inc/themes/classic/profiles.inc:46
msgid "Borrar"
msgstr "Delete"
-#: ../../../../inc/tpl/profiles.php:65
+#: ../../../../inc/themes/classic/profiles.inc:50
msgid "Ver archivos de cuenta"
msgstr "View account files"
-#: ../../../../inc/tpl/profiles.php:74
+#: ../../../../inc/themes/classic/profiles.inc:61
+#: ../../../../inc/themes/material-blue/profiles.inc:72
msgid "Configuración general"
msgstr "General configuration"
-#: ../../../../inc/tpl/profiles.php:74
-msgid "General"
-msgstr "General"
-
-#: ../../../../inc/tpl/profiles.php:76
+#: ../../../../inc/themes/classic/profiles.inc:65
msgid "Cambiar clave maestra"
msgstr "Change master password"
-#: ../../../../inc/tpl/profiles.php:79
+#: ../../../../inc/themes/classic/profiles.inc:70
msgid "Realizar copia de seguridad"
msgstr "Perform backup"
-#: ../../../../inc/tpl/profiles.php:79
+#: ../../../../inc/themes/classic/profiles.inc:70
+#: ../../../../inc/themes/material-blue/profiles.inc:82
msgid "Backup"
msgstr "Backup"
-#: ../../../../inc/tpl/profiles.php:85
+#: ../../../../inc/themes/classic/profiles.inc:74
+#: ../../../../inc/themes/material-blue/profiles.inc:87
+msgid "Realizar importación de cuentas"
+msgstr "Make accounts import"
+
+#: ../../../../inc/themes/classic/profiles.inc:81
+#: ../../../../inc/themes/material-blue/profiles.inc:93
msgid "Gestión"
msgstr "Management"
-#: ../../../../inc/tpl/profiles.php:88
+#: ../../../../inc/themes/classic/profiles.inc:85
+#: ../../../../inc/themes/material-blue/profiles.inc:99
msgid "Gestión de usuarios"
msgstr "Users management"
-#: ../../../../inc/tpl/profiles.php:90
+#: ../../../../inc/themes/classic/profiles.inc:89
+#: ../../../../inc/themes/material-blue/profiles.inc:104
msgid "Gestión de grupos"
msgstr "Groups management"
-#: ../../../../inc/tpl/profiles.php:93
+#: ../../../../inc/themes/classic/profiles.inc:94
+#: ../../../../inc/themes/material-blue/profiles.inc:109
msgid "Gestión de perfiles"
msgstr "Profiles management"
-#: ../../../../inc/tpl/profiles.php:93
+#: ../../../../inc/themes/classic/profiles.inc:94
+#: ../../../../inc/themes/material-blue/profiles.inc:109
msgid "Perfiles"
msgstr "Profiles"
-#: ../../../../inc/tpl/profiles.php:96
+#: ../../../../inc/themes/classic/profiles.inc:98
+#: ../../../../inc/themes/material-blue/profiles.inc:114
msgid "Gestión de categorías"
msgstr "Categories management"
-#: ../../../../inc/tpl/profiles.php:96
-msgid "Categorías"
-msgstr "Categories"
-
-#: ../../../../inc/tpl/profiles.php:101
+#: ../../../../inc/themes/classic/profiles.inc:103
+#: ../../../../inc/themes/material-blue/profiles.inc:119
msgid "Gestión de clientes"
msgstr "Customers management"
-#: ../../../../inc/tpl/profiles.php:101
-msgid "Clientes"
-msgstr "Customers"
+#: ../../../../inc/themes/classic/profiles.inc:107
+#: ../../../../inc/themes/material-blue/profiles.inc:124
+msgid "Gestión de campos personalizados"
+msgstr "Custom fields management"
-#: ../../../../inc/tpl/profiles.php:108
+#: ../../../../inc/themes/classic/profiles.inc:112
+#: ../../../../inc/themes/material-blue/profiles.inc:129
+msgid "Gestión de autorizaciones API"
+msgstr "API authorizations management"
+
+#: ../../../../inc/themes/classic/profiles.inc:112
+#: ../../../../inc/themes/material-blue/profiles.inc:129
+msgid "Autorizaciones API"
+msgstr "API Authorizations"
+
+#: ../../../../inc/themes/classic/profiles.inc:120
+#: ../../../../inc/themes/material-blue/profiles.inc:135
msgid "Otros"
msgstr "Others"
-#: ../../../../inc/tpl/profiles.php:111
+#: ../../../../inc/themes/classic/profiles.inc:124
+#: ../../../../inc/themes/material-blue/profiles.inc:141
msgid "Ver log de eventos"
msgstr "View event log"
-#: ../../../../inc/tpl/profiles.php:111
+#: ../../../../inc/themes/classic/profiles.inc:124
+#: ../../../../inc/themes/material-blue/profiles.inc:141
msgid "Log de Eventos"
msgstr "Event Log"
-#: ../../../../inc/tpl/request.php:33
+#: ../../../../inc/themes/classic/profiles.inc:132
+#: ../../../../inc/themes/material-blue/profiles.inc:148
+msgid "Usado por"
+msgstr "Used by"
+
+#: ../../../../inc/themes/classic/profiles.inc:139
+#: ../../../../inc/themes/material-blue/profiles.inc:155
+msgid "No usado"
+msgstr "Not used"
+
+#: ../../../../inc/themes/classic/request.inc:1
+#: ../../../../inc/themes/material-blue/request.inc:1
msgid "Solicitar Modificación de Cuenta"
msgstr "Request Account Modification"
-#: ../../../../inc/tpl/request.php:57
+#: ../../../../inc/themes/classic/request.inc:22
+#: ../../../../inc/themes/material-blue/request.inc:25
msgid "Petición"
msgstr "Request"
-#: ../../../../inc/tpl/request.php:60
+#: ../../../../inc/themes/classic/request.inc:24
+#: ../../../../inc/themes/material-blue/request.inc:29
msgid "Descripción de la petición"
msgstr "Request description"
-#: ../../../../inc/tpl/request.php:76
+#: ../../../../inc/themes/classic/request.inc:33
+#: ../../../../inc/themes/material-blue/account.inc:440
+#: ../../../../inc/themes/material-blue/editpass.inc:55
+#: ../../../../inc/themes/material-blue/request.inc:42
+msgid "Atrás"
+msgstr "Back"
+
+#: ../../../../inc/themes/classic/request.inc:38
+#: ../../../../inc/themes/material-blue/request.inc:48
msgid "Enviar"
msgstr "Send"
-#: ../../../../inc/tpl/search.php:59
+#: ../../../../inc/themes/classic/search.inc:24
+#: ../../../../inc/themes/material-blue/search.inc:29
+msgid "Buscar en Wiki"
+msgstr "Search in Wiki"
+
+#: ../../../../inc/themes/classic/search.inc:60
+#: ../../../../inc/themes/material-blue/search.inc:65
+msgid "Abrir enlace a"
+msgstr "Open link to"
+
+#: ../../../../inc/themes/classic/search.inc:78
+#: ../../../../inc/themes/material-blue/search.inc:89
+msgid "Archivos adjuntos"
+msgstr "Attachments"
+
+#: ../../../../inc/themes/classic/search.inc:85
+#: ../../../../inc/themes/material-blue/search.inc:98
+msgid "Enlace a Wiki"
+msgstr "Link to Wiki"
+
+#: ../../../../inc/themes/classic/search.inc:149
+#: ../../../../inc/themes/material-blue/search.inc:163
+msgid "Filtro ON"
+msgstr "Filter ON"
+
+#: ../../../../inc/themes/classic/search.inc:153
+#: ../../../../inc/themes/material-blue/search.inc:167
+msgid "Global ON"
+msgstr "Global ON"
+
+#: ../../../../inc/themes/classic/searchbox.inc:5
+#: ../../../../inc/themes/material-blue/searchbox.inc:5
msgid "Limpiar"
msgstr "Clear"
-#: ../../../../inc/tpl/search.php:63
+#: ../../../../inc/themes/classic/searchbox.inc:6
+#: ../../../../inc/themes/material-blue/searchbox.inc:10
msgid "Texto a buscar"
msgstr "Text to search"
-#: ../../../../inc/tpl/search.php:68
+#: ../../../../inc/themes/classic/searchbox.inc:10
+#: ../../../../inc/themes/material-blue/searchbox.inc:15
+msgid "Parámetros especiales:"
+msgstr "Special parameters"
+
+#: ../../../../inc/themes/classic/searchbox.inc:13
+#: ../../../../inc/themes/material-blue/searchbox.inc:18
+msgid "Buscar cuentas a las que 'login' tenga acceso"
+msgstr "Search accounts for which 'login' has access rights"
+
+#: ../../../../inc/themes/classic/searchbox.inc:14
+#: ../../../../inc/themes/material-blue/searchbox.inc:19
+msgid "Buscar cuentas a las que 'group_name' tenga acceso"
+msgstr "Search accounts for which 'group_name' has access rights"
+
+#: ../../../../inc/themes/classic/searchbox.inc:15
+#: ../../../../inc/themes/material-blue/searchbox.inc:20
+msgid "Buscar cuentas con archivos con el nombre 'file_name'"
+msgstr "Search for accounts which contains a file with the name 'file_name'"
+
+#: ../../../../inc/themes/classic/searchbox.inc:19
+#: ../../../../inc/themes/material-blue/searchbox.inc:25
+#: ../../../../inc/themes/material-blue/searchbox.inc:28
msgid "Búsqueda global"
msgstr "Global search"
-#: ../../../../inc/tpl/search.php:82
+#: ../../../../inc/themes/classic/searchbox.inc:42
+#: ../../../../inc/themes/material-blue/searchbox.inc:54
msgid "CPP"
msgstr "APP"
-#: ../../../../inc/tpl/search.php:82
+#: ../../../../inc/themes/classic/searchbox.inc:42
+#: ../../../../inc/themes/material-blue/searchbox.inc:54
msgid "Cuentas por página"
msgstr "Accounts per page"
-#: ../../../../inc/tpl/upgrade.php:42
-msgid "Actualización de BBDD"
-msgstr "DB Update"
+#: ../../../../inc/themes/classic/security.inc:4
+msgid "Autenticación"
+msgstr "Authentication"
-#: ../../../../inc/tpl/upgrade.php:44
-msgid "Introducir Código de Seguridad"
-msgstr "Enter Security Code"
+#: ../../../../inc/themes/classic/security.inc:13
+msgid "Autenticación en 2 pasos"
+msgstr "Two factor authentication"
-#: ../../../../inc/tpl/upgrade.php:45
-msgid "Código de Seguridad"
-msgstr "Security Code"
+#: ../../../../inc/themes/classic/security.inc:17
+#: ../../../../inc/themes/material-blue/security.inc:15
+msgid ""
+"Habilita la autentificación en 2 pasos que requiere de la introducción de un "
+"token generado por una aplicación como Google Authenticator."
+msgstr ""
+"Enables two factor authentication that requires to enter a token that is "
+"generated by an application like Google Authenticator."
-#: ../../../../inc/tpl/upgrade.php:55
-msgid "Iniciar Actualización"
-msgstr "Start Update"
+#: ../../../../inc/themes/classic/security.inc:21
+#: ../../../../inc/themes/material-blue/security.inc:19
+msgid ""
+"Escanee el código QR proporcionado y a continuación introduzca la clave de 6 "
+"dígitos."
+msgstr "Scan the provided QR code and then enter the 6 digits code."
-#: ../../../../inc/tpl/users.php:72
-msgid "Nombre de usuario completo"
-msgstr "Full username"
+#: ../../../../inc/themes/classic/security.inc:29
+#: ../../../../inc/themes/material-blue/security.inc:27
+msgid "Activar"
+msgstr "Activate"
-#: ../../../../inc/tpl/users.php:88
-msgid "Login de inicio de sesión"
-msgstr "Session login"
+#: ../../../../inc/themes/classic/security.inc:34
+#: ../../../../inc/themes/material-blue/security.inc:33
+msgid "Error al obtener el código QR. Inténtelo de nuevo"
+msgstr "Error while retrieving the QR code. Please, try again."
-#: ../../../../inc/tpl/users.php:122
-msgid "Dirección de correo"
-msgstr "Email address"
+#: ../../../../inc/themes/classic/security.inc:39
+#: ../../../../inc/themes/material-blue/security.inc:41
+msgid "Código"
+msgstr "Code"
-#: ../../../../inc/tpl/users.php:161
+#: ../../../../inc/themes/classic/security.inc:44
+#: ../../../../inc/themes/material-blue/security.inc:46
+msgid ""
+"Una vez activada, sólo es posible acceder si se dispone del dispositivo "
+"generador de códigos asociado."
+msgstr ""
+"Once enabled, you can only access if you have the device that generates the "
+"code."
+
+#: ../../../../inc/themes/classic/sessionbar.inc:6
+#: ../../../../inc/themes/material-blue/footer.inc:7
+msgid "Cambiar clave de usuario"
+msgstr "Change user password"
+
+#: ../../../../inc/themes/classic/sessionbar.inc:9
+msgid "Preferencias"
+msgstr "Preferences"
+
+#: ../../../../inc/themes/classic/sessionbar.inc:15
+#: ../../../../inc/themes/material-blue/footer.inc:5
+msgid "Salir"
+msgstr "Sign out"
+
+#: ../../../../inc/themes/classic/tokens.inc:34
+#: ../../../../inc/themes/classic/users.inc:98
+#: ../../../../inc/themes/material-blue/tokens.inc:34
+#: ../../../../inc/themes/material-blue/users.inc:132
msgid "Opciones"
msgstr "Options"
-#: ../../../../inc/tpl/users.php:165
+#: ../../../../inc/themes/classic/tokens.inc:38
+#: ../../../../inc/themes/material-blue/tokens.inc:37
+#: ../../../../inc/themes/material-blue/tokens.inc:40
+msgid "Regenerar Autorización"
+msgstr "Refresh Authorization"
+
+#: ../../../../inc/themes/classic/tokens.inc:43
+#: ../../../../inc/themes/material-blue/tokens.inc:46
+msgid "Token"
+msgstr "Token"
+
+#: ../../../../inc/themes/classic/update.inc:18
+#: ../../../../inc/themes/material-blue/update.inc:20
+msgid "Actualizado"
+msgstr "Updated"
+
+#: ../../../../inc/themes/classic/update.inc:23
+#: ../../../../inc/themes/material-blue/update.inc:22
+msgid "Error al comprobar actualizaciones"
+msgstr "Error while checking for updates"
+
+#: ../../../../inc/themes/classic/upgrade.inc:8
+#: ../../../../inc/themes/material-blue/upgrade.inc:8
+msgid "Actualización de BBDD"
+msgstr "DB Update"
+
+#: ../../../../inc/themes/classic/upgrade.inc:10
+msgid "Introducir Código de Seguridad"
+msgstr "Enter Security Code"
+
+#: ../../../../inc/themes/classic/upgrade.inc:11
+#: ../../../../inc/themes/material-blue/upgrade.inc:14
+msgid "Código de Seguridad"
+msgstr "Security Code"
+
+#: ../../../../inc/themes/classic/upgrade.inc:21
+#: ../../../../inc/themes/material-blue/upgrade.inc:25
+msgid "Iniciar Actualización"
+msgstr "Start Update"
+
+#: ../../../../inc/themes/classic/users.inc:12
+#: ../../../../inc/themes/material-blue/users.inc:15
+msgid "Nombre de usuario completo"
+msgstr "Full username"
+
+#: ../../../../inc/themes/classic/users.inc:25
+#: ../../../../inc/themes/material-blue/users.inc:31
+msgid "Login de inicio de sesión"
+msgstr "Session login"
+
+#: ../../../../inc/themes/classic/users.inc:64
+#: ../../../../inc/themes/material-blue/users.inc:78
+msgid "Dirección de correo"
+msgstr "Email address"
+
+#: ../../../../inc/themes/classic/users.inc:103
+#: ../../../../inc/themes/material-blue/users.inc:136
msgid "Administrador de la aplicación"
msgstr "Application administrator"
-#: ../../../../inc/tpl/users.php:165
+#: ../../../../inc/themes/classic/users.inc:103
+#: ../../../../inc/themes/material-blue/users.inc:139
msgid "Admin. Aplicación"
msgstr "Application Admin"
-#: ../../../../inc/tpl/users.php:167
+#: ../../../../inc/themes/classic/users.inc:107
+#: ../../../../inc/themes/material-blue/users.inc:143
msgid "Administrador de cuentas"
msgstr "Accounts administrator"
-#: ../../../../inc/tpl/users.php:167
+#: ../../../../inc/themes/classic/users.inc:107
+#: ../../../../inc/themes/material-blue/users.inc:146
msgid "Admin. Cuentas"
msgstr "Accounts Admin"
-#: ../../../../inc/tpl/users.php:175
+#: ../../../../inc/themes/classic/users.inc:117
+#: ../../../../inc/themes/material-blue/users.inc:158
msgid "Forzar cambio de clave"
msgstr "Force password change"
-#: ../../../../inc/tpl/users.php:183
+#: ../../../../inc/themes/classic/users.inc:154
+#: ../../../../inc/themes/material-blue/users.inc:198
msgid "Entradas"
msgstr "Entries"
-#: ../../../../inc/tpl/users.php:188
+#: ../../../../inc/themes/classic/users.inc:159
+#: ../../../../inc/themes/material-blue/users.inc:203
msgid "Último Acceso"
msgstr "Last Access"
-#: ../../../../inc/tpl/users.php:198
+#: ../../../../inc/themes/classic/users.inc:169
+#: ../../../../inc/themes/material-blue/users.inc:213
msgid "Fecha Clave Maestra"
msgstr "Master Password Date"
-#: ../../../../inc/upgrade.class.php:49
-msgid "Error al aplicar la actualización de la Base de Datos"
-msgstr "Error on updating database"
+#: ../../../../inc/themes/classic/wiki.inc:11
+#: ../../../../inc/themes/material-blue/wiki.inc:11
+msgid "Habilitar enlaces Wiki"
+msgstr "Enable Wiki links"
-#: ../../../../inc/upgrade.class.php:50
-msgid "Compruebe el registro de eventos para más detalles"
-msgstr "Please, check the event log for more details"
-
-#: ../../../../inc/upgrade.class.php:66
-msgid "Actualizar BBDD"
-msgstr "Update DB"
-
-#: ../../../../inc/upgrade.class.php:97
-msgid "No es necesario actualizar la Base de Datos."
-msgstr "Database update not needed."
-
-#: ../../../../inc/upgrade.class.php:103
-msgid "Error al aplicar la actualización de la Base de Datos."
-msgstr "Error on updating database."
-
-#: ../../../../inc/upgrade.class.php:110
-msgid "Actualización de la Base de Datos realizada correctamente."
-msgstr "Database updating was done successfully."
-
-#: ../../../../inc/upgrade.class.php:185
-msgid "Actualizar Configuración"
-msgstr "Update Configuration"
-
-#: ../../../../inc/upgrade.class.php:186
-msgid "Actualización de la Configuración realizada correctamente."
-msgstr "Configuration updating was done successfully."
-
-#: ../../../../inc/users.class.php:774
-msgid "Activación Cuenta"
-msgstr "Account Activation"
-
-#: ../../../../inc/users.class.php:775
-msgid "Su cuenta está pendiente de activación."
-msgstr "Your account activation is pending."
-
-#: ../../../../inc/users.class.php:776
-msgid "En breve recibirá un email de confirmación."
-msgstr "You will receive a confirmation email in short."
-
-#: ../../../../inc/users.class.php:821 ../../../../inc/users.class.php:863
-msgid "No se pudo realizar la petición de cambio de clave."
-msgstr "Could not perform the password change request."
-
-#: ../../../../inc/users.class.php:858
-msgid "Modificar Usuario"
-msgstr "Edit User"
-
-#: ../../../../inc/util.class.php:119
-msgid "Versión de PHP requerida >= 5.1"
-msgstr "Required PHP version >= 5.1"
-
-#: ../../../../inc/util.class.php:120
+#: ../../../../inc/themes/classic/wiki.inc:15
+#: ../../../../inc/themes/material-blue/wiki.inc:15
msgid ""
-"Actualice la versión de PHP para que la aplicación funcione correctamente"
-msgstr "Please update the PHP version to run sysPass"
+"Habilita la opción de añadir un enlace a Wiki externa para los resultados de "
+"la búsqueda."
+msgstr ""
+"Enables the option to add a link for search results to an external Wiki."
-#: ../../../../inc/util.class.php:142
-msgid "Sin este módulo la aplicación puede no funcionar correctamente."
-msgstr "Without this module the application could not run correctly"
+#: ../../../../inc/themes/classic/wiki.inc:27
+#: ../../../../inc/themes/material-blue/wiki.inc:30
+#: ../../../../inc/themes/material-blue/wiki.inc:56
+msgid "URL de búsqueda Wiki"
+msgstr "Wiki search URL"
-#: ../../../../js/js.php:45
-msgid "Error en la consulta"
-msgstr "Error on query"
+#: ../../../../inc/themes/classic/wiki.inc:31
+#: ../../../../inc/themes/material-blue/wiki.inc:34
+msgid "URL que utiliza la wiki para realizar una búsqueda de una página."
+msgstr "URL that the Wiki uses to make an entry search."
-#: ../../../../js/js.php:46
-msgid "Ha ocurrido un error"
-msgstr "There was an error"
+#: ../../../../inc/themes/classic/wiki.inc:35
+#: ../../../../inc/themes/material-blue/wiki.inc:38
+msgid "Como parámetro se utiliza el nombre del cliente."
+msgstr "The customer name is used as parameter."
-#: ../../../../js/js.php:48
-msgid "Borrar la cuenta?"
-msgstr "Delete account?"
+#: ../../../../inc/themes/classic/wiki.inc:39
+#: ../../../../inc/themes/classic/wiki.inc:66
+#: ../../../../inc/themes/material-blue/wiki.inc:42
+#: ../../../../inc/themes/material-blue/wiki.inc:74
+msgid "Ejemplo:"
+msgstr "Example:"
-#: ../../../../js/js.php:49
-msgid "Borrar el usuario?"
-msgstr "Delete user?"
+#: ../../../../inc/themes/classic/wiki.inc:54
+#: ../../../../inc/themes/material-blue/wiki.inc:62
+#: ../../../../inc/themes/material-blue/wiki.inc:87
+msgid "URL de página en Wiki"
+msgstr "Wiki page URL"
-#: ../../../../js/js.php:50
-msgid "Guarde la configuración para que sea efectiva"
-msgstr "You should save configuration in order to take effect"
+#: ../../../../inc/themes/classic/wiki.inc:58
+#: ../../../../inc/themes/material-blue/wiki.inc:66
+msgid "URL que utiliza la wiki para acceder a los detalles de una página."
+msgstr "URL that the Wiki uses to access to the entry details."
-#: ../../../../js/js.php:51
-msgid "Clave Generada"
-msgstr "Generated Password"
+#: ../../../../inc/themes/classic/wiki.inc:62
+#: ../../../../inc/themes/material-blue/wiki.inc:70
+msgid ""
+"El nombre de la cuenta se utiliza como parámetro de la variable de búsqueda "
+"de la Wiki."
+msgstr "The account name is used as parameter of Wiki search variable."
-#: ../../../../js/js.php:52
-msgid "Nivel alto"
-msgstr "High level"
+#: ../../../../inc/themes/classic/wiki.inc:81
+#: ../../../../inc/themes/material-blue/wiki.inc:93
+msgid "Prefijo para nombre de cuenta"
+msgstr "Account name preffix"
-#: ../../../../js/js.php:53
-msgid "Nivel medio"
-msgstr "Average level"
+#: ../../../../inc/themes/classic/wiki.inc:85
+#: ../../../../inc/themes/material-blue/wiki.inc:97
+msgid ""
+"Prefijo para determinar qué cuentas tienen un enlace a una página de la Wiki."
+msgstr "Preffix to determine which accounts have a link to the Wiki."
-#: ../../../../js/js.php:54
-msgid "Nivel bajo"
-msgstr "Low level"
+#: ../../../../inc/themes/classic/wiki.inc:121
+#: ../../../../inc/themes/material-blue/wiki.inc:135
+msgid "Añadir filtro"
+msgstr "Add filter"
-#: ../../../../js/js.php:55
-msgid "Nivel muy alto"
-msgstr "Very high level"
+#: ../../../../inc/themes/classic/wiki.inc:122
+#: ../../../../inc/themes/material-blue/wiki.inc:136
+msgid "Eliminar filtro"
+msgstr "Delete filter"
-#: ../../../../js/js.php:56
-msgid "Utilizar al menos 8 caracteres"
-msgstr "You should use at least 8 characters"
+#: ../../../../inc/themes/material-blue/account.inc:4
+msgid "Histórico"
+msgstr "History"
-#: ../../../../js/js.php:57
-msgid "Borrar elemento?"
-msgstr "Delete item?"
+#: ../../../../inc/themes/material-blue/account.inc:42
+msgid "Seleccionar o escribir para crear uno nuevo"
+msgstr "Select or write to create a new one"
-#: ../../../../js/js.php:58
-msgid "Página no encontrada"
-msgstr "Page not found"
+#: ../../../../inc/themes/material-blue/account.inc:110
+msgid "Clave (Repetir)"
+msgstr "Password (Repeat)"
-#: ../../../../js/js.php:59
-msgid "Archivo no soportado para visualizar"
-msgstr "File not supported for preview"
+#: ../../../../inc/themes/material-blue/backup.inc:58
+#: ../../../../inc/themes/material-blue/backup.inc:144
+#: ../../../../inc/themes/material-blue/encryption.inc:118
+#: ../../../../inc/themes/material-blue/import.inc:217
+msgid "Realizar"
+msgstr "Perform"
-#: ../../../../js/js.php:60
-msgid "Eliminar archivo?"
-msgstr "Delete file?"
+#: ../../../../inc/themes/material-blue/config.inc:195
+msgid "Número de resultados por página"
+msgstr "Results per page"
-#: ../../../../js/js.php:61
-msgid "Su navegador no soporta subir archivos con HTML5"
-msgstr "Your browser does not support HTML5 file uploads"
+#: ../../../../inc/themes/material-blue/config.inc:290
+msgid "Tamaño máximo de archivo en bytes"
+msgstr "Maximum file size in bytes"
-#: ../../../../js/js.php:62
-msgid "Demasiados archivos"
-msgstr "Too many files"
+#: ../../../../inc/themes/material-blue/config.inc:297
+msgid "Proxy"
+msgstr "Proxy"
-#: ../../../../js/js.php:63
-msgid "No es posible guardar el archivo. Tamaño máximo:"
-msgstr "Unable to save the file. Max file size:"
+#: ../../../../inc/themes/material-blue/config.inc:303
+msgid "Usar Proxy"
+msgstr "Use Proxy"
-#: ../../../../js/js.php:64
-msgid "Extensión no permitida"
-msgstr "Extension not allowed"
+#: ../../../../inc/themes/material-blue/config.inc:324
+msgid "Servidor proxy"
+msgstr "Proxy server"
-#: ../../../../js/js.php:65
-msgid "Vaciar el registro de eventos?"
-msgstr "Clear event log?"
+#: ../../../../inc/themes/material-blue/config.inc:338
+msgid "Puerto del servidor proxy"
+msgstr "Proxy server port"
-#~ msgid "No se encontró el grupo con ese nombre"
-#~ msgstr "No group found with that name"
+#: ../../../../inc/themes/material-blue/config.inc:352
+msgid "Usuario del servidor proxy"
+msgstr "Proxy server user"
+
+#: ../../../../inc/themes/material-blue/config.inc:366
+msgid "Clave del servidor proxy"
+msgstr "Proxy server password"
+
+#: ../../../../inc/themes/material-blue/customfields.inc:14
+msgid "Nombre del campo"
+msgstr "Field name"
+
+#: ../../../../inc/themes/material-blue/customfields.inc:47
+msgid "Ayuda del campo"
+msgstr "Field help"
+
+#: ../../../../inc/themes/material-blue/footer.inc:11
+msgid "Preferencias de usuario"
+msgstr "User preferences"
+
+#: ../../../../inc/themes/material-blue/import.inc:104
+msgid ""
+"Permite realizar la importación de Cuentas, Categorías y Clientes desde "
+"archivos XML y CSV."
+msgstr ""
+"Allows to do the Accounts, Categories and Customers import form XML and CSV "
+"files."
+
+#: ../../../../inc/themes/material-blue/install.inc:31
+msgid "Usuario administrador de sysPass"
+msgstr "sysPass admin user"
+
+#: ../../../../inc/themes/material-blue/install.inc:78
+msgid "Usuario acceso BBDD"
+msgstr "DB access user"
+
+#: ../../../../inc/themes/material-blue/install.inc:83
+msgid "Usuario con permisos de administrador de MySQL"
+msgstr "An user with MySQL admin rights"
+
+#: ../../../../inc/themes/material-blue/install.inc:90
+msgid "Clave acceso BBDD"
+msgstr "DB access password"
+
+#: ../../../../inc/themes/material-blue/install.inc:97
+msgid "Nombre BBDD para sysPass"
+msgstr "sysPass database name"
+
+#: ../../../../inc/themes/material-blue/install.inc:109
+msgid "Servidor BBDD para sysPass"
+msgstr "sysPass database server"
+
+#: ../../../../inc/themes/material-blue/install.inc:114
+msgid "Nombre del servidor para instalar la base de datos de sysPass"
+msgstr "Server name to install the sysPass database"
+
+#: ../../../../inc/themes/material-blue/ldap.inc:96
+msgid "Clave del usuario de conexión a LDAP."
+msgstr "LDAP connection user password"
+
+#: ../../../../inc/themes/material-blue/mail.inc:118
+msgid ""
+"Habilita que los usuarios puedan solicitar modificaciones o acceso a las "
+"cuentas sin permisos."
+msgstr ""
+"Allows that users can request for modifications or access to accounts in "
+"which they havenn't rights."
+
+#: ../../../../inc/themes/material-blue/profiles.inc:25
+msgid "Crear nueva cuenta"
+msgstr "Create a new account"
+
+#: ../../../../inc/themes/material-blue/profiles.inc:25
+msgid "Crear"
+msgstr "Create"
+
+#: ../../../../inc/themes/material-blue/profiles.inc:55
+msgid "Eliminar cuenta"
+msgstr "Delete account"
+
+#: ../../../../inc/themes/material-blue/profiles.inc:55
+msgid "Eliminar"
+msgstr "Delete"
+
+#: ../../../../inc/themes/material-blue/profiles.inc:60
+msgid "Var archivos de cuenta"
+msgstr "View account files"
+
+#: ../../../../inc/themes/material-blue/profiles.inc:77
+msgid "Opciones de encriptación"
+msgstr "Encryption options"
+
+#: ../../../../inc/themes/material-blue/profiles.inc:82
+msgid "Realizar copia de seguridad y exportar"
+msgstr "Make a backup and export"
+
+#: ../../../../inc/themes/material-blue/security.inc:4
+msgid "Autentificación"
+msgstr "Authentication"
diff --git a/inc/locales/fr_FR/LC_MESSAGES/messages.mo b/inc/locales/fr_FR/LC_MESSAGES/messages.mo
index 0018b4ac..afb71f7a 100644
Binary files a/inc/locales/fr_FR/LC_MESSAGES/messages.mo and b/inc/locales/fr_FR/LC_MESSAGES/messages.mo differ
diff --git a/inc/locales/fr_FR/LC_MESSAGES/messages.po b/inc/locales/fr_FR/LC_MESSAGES/messages.po
index 27be7dc4..d5a29354 100644
--- a/inc/locales/fr_FR/LC_MESSAGES/messages.po
+++ b/inc/locales/fr_FR/LC_MESSAGES/messages.po
@@ -2,10 +2,10 @@ msgid ""
msgstr ""
"Project-Id-Version: sysPass\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-07-28 18:34+0100\n"
-"PO-Revision-Date: 2015-07-28 18:36+0100\n"
-"Last-Translator: nuxsmin \n"
-"Language-Team: \n"
+"POT-Creation-Date: 2015-09-23 12:59+0100\n"
+"PO-Revision-Date: 2015-09-23 12:59+0100\n"
+"Last-Translator: nuxsmin \n"
+"Language-Team: \n"
"Language: fr_FR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -16,2216 +16,1927 @@ msgstr ""
"X-Generator: Poedit 1.6.10\n"
"X-Poedit-SearchPath-0: ../../../..\n"
-# "Session not started or timed out"
-#: ../../../../ajax/ajax_accountSave.php:33
-#: ../../../../ajax/ajax_appMgmtSave.php:34
-#: ../../../../ajax/ajax_backup.php:32 ../../../../ajax/ajax_checkLdap.php:32
-#: ../../../../ajax/ajax_configSave.php:33 ../../../../ajax/ajax_import.php:1
-#: ../../../../ajax/ajax_migrate.php:1
-#: ../../../../ajax/ajax_sendRequest.php:32
-msgid "La sesión no se ha iniciado o ha caducado"
-msgstr "Session non démarrée ou expirée"
-
-# "INVALID QUERY"
-#: ../../../../ajax/ajax_accountSave.php:39
-#: ../../../../ajax/ajax_appMgmtSave.php:40
-#: ../../../../ajax/ajax_backup.php:38 ../../../../ajax/ajax_checkLdap.php:38
-#: ../../../../ajax/ajax_configSave.php:39 ../../../../ajax/ajax_files.php:40
-#: ../../../../ajax/ajax_getFiles.php:43 ../../../../ajax/ajax_import.php:1
-#: ../../../../ajax/ajax_migrate.php:1 ../../../../ajax/ajax_passReset.php:34
-#: ../../../../ajax/ajax_search.php:38
-#: ../../../../ajax/ajax_sendRequest.php:38
+#: ../../../../ajax/ajax_2fa.php:35 ../../../../ajax/ajax_accountSave.php:41
+#: ../../../../ajax/ajax_appMgmtSave.php:42
+#: ../../../../ajax/ajax_backup.php:39 ../../../../ajax/ajax_checkLdap.php:41
+#: ../../../../ajax/ajax_configSave.php:41 ../../../../ajax/ajax_files.php:41
+#: ../../../../ajax/ajax_getFiles.php:46 ../../../../ajax/ajax_import.php:49
+#: ../../../../ajax/ajax_migrate.php:45 ../../../../ajax/ajax_passReset.php:37
+#: ../../../../ajax/ajax_search.php:41
+#: ../../../../ajax/ajax_sendRequest.php:41
+#: ../../../../ajax/ajax_userPrefsSave.php:42
msgid "CONSULTA INVÁLIDA"
msgstr "REQUETE INVALIDE"
-# "An account name needed"
-#: ../../../../ajax/ajax_accountSave.php:67
-#: ../../../../ajax/ajax_accountSave.php:92
+#: ../../../../ajax/ajax_2fa.php:55
+msgid "Código correcto"
+msgstr "Code vérifié"
+
+#: ../../../../ajax/ajax_2fa.php:58 ../../../../ajax/ajax_userPrefsSave.php:66
+msgid "Código incorrecto"
+msgstr "Code Invalide"
+
+#: ../../../../ajax/ajax_accountSave.php:35
+#: ../../../../ajax/ajax_appMgmtSave.php:36
+#: ../../../../ajax/ajax_backup.php:33 ../../../../ajax/ajax_checkLdap.php:35
+#: ../../../../ajax/ajax_configSave.php:35 ../../../../ajax/ajax_import.php:35
+#: ../../../../ajax/ajax_migrate.php:35
+#: ../../../../ajax/ajax_sendRequest.php:35
+#: ../../../../ajax/ajax_userPrefsSave.php:36
+#: ../../../../ajax/ajax_viewpass.php:36
+msgid "La sesión no se ha iniciado o ha caducado"
+msgstr "Session non démarrée ou expirée"
+
+#: ../../../../ajax/ajax_accountSave.php:75
+#: ../../../../ajax/ajax_accountSave.php:90
msgid "Es necesario un nombre de cuenta"
msgstr "Nom de compte requis"
-# "A customer name needed"
-#: ../../../../ajax/ajax_accountSave.php:71
+#: ../../../../ajax/ajax_accountSave.php:77
#: ../../../../ajax/ajax_accountSave.php:88
-#: ../../../../ajax/ajax_appMgmtSave.php:327
+#: ../../../../ajax/ajax_appMgmtSave.php:337
msgid "Es necesario un nombre de cliente"
msgstr "Nom de client requis"
-# "An username is needed"
-#: ../../../../ajax/ajax_accountSave.php:75
-#: ../../../../ajax/ajax_accountSave.php:96
+#: ../../../../ajax/ajax_accountSave.php:79
+#: ../../../../ajax/ajax_accountSave.php:92
msgid "Es necesario un usuario"
msgstr "Nom d'utilisateur requis"
-# "A password is needed"
-#: ../../../../ajax/ajax_accountSave.php:79
-msgid "Es necesario una clave"
+#: ../../../../ajax/ajax_accountSave.php:81
+#: ../../../../ajax/ajax_accountSave.php:103
+#, fuzzy
+msgid "Es necesaria una clave"
msgstr "Mot de passe requis"
-# "The passwords do not match"
#: ../../../../ajax/ajax_accountSave.php:83
-#: ../../../../ajax/ajax_accountSave.php:109
-#: ../../../../ajax/ajax_appMgmtSave.php:123
-#: ../../../../ajax/ajax_appMgmtSave.php:149
-msgid "Las claves no coinciden"
-msgstr "Les mots de passe ne correspondent pas"
+#: ../../../../ajax/ajax_accountSave.php:94
+msgid "Es necesario una categoría"
+msgstr "Une catégorie est requise"
-# "Invalid Id"
-#: ../../../../ajax/ajax_accountSave.php:100
-#: ../../../../ajax/ajax_accountSave.php:113
+#: ../../../../ajax/ajax_accountSave.php:98
+#: ../../../../ajax/ajax_accountSave.php:107
msgid "Id inválido"
msgstr "Id Invalide"
-# "Password cannot be blank"
-#: ../../../../ajax/ajax_accountSave.php:105
-#: ../../../../ajax/ajax_appMgmtSave.php:119
-#: ../../../../ajax/ajax_appMgmtSave.php:145
-msgid "La clave no puede estar en blanco"
-msgstr "Le mot de passe ne peut pas être blanc"
-
-# "Invalid Action"
-#: ../../../../ajax/ajax_accountSave.php:116
-#: ../../../../ajax/ajax_accountSave.php:264
-#: ../../../../ajax/ajax_appMgmtSave.php:179
-#: ../../../../ajax/ajax_appMgmtSave.php:240
-#: ../../../../ajax/ajax_appMgmtSave.php:318
-#: ../../../../ajax/ajax_appMgmtSave.php:369
-#: ../../../../ajax/ajax_appMgmtSave.php:418
-#: ../../../../ajax/ajax_configSave.php:239
+#: ../../../../ajax/ajax_accountSave.php:110
+#: ../../../../ajax/ajax_accountSave.php:263
+#: ../../../../ajax/ajax_appMgmtSave.php:543
+#: ../../../../ajax/ajax_configSave.php:297
+#: ../../../../ajax/ajax_userPrefsSave.php:79 ../../../../api.php:53
msgid "Acción Inválida"
msgstr "Action Invalide"
-# "Crypto module cannot be loaded"
#: ../../../../ajax/ajax_accountSave.php:122
-#: ../../../../inc/import.class.php:240
-msgid "No se puede usar el módulo de encriptación"
-msgstr "Le module d'encryption ne peut pas être chargé"
+#: ../../../../ajax/ajax_appMgmtSave.php:111
+#: ../../../../ajax/ajax_appMgmtSave.php:155
+#: ../../../../ajax/ajax_backup.php:70
+msgid "Las claves no coinciden"
+msgstr "Les mots de passe ne correspondent pas"
-# "Error on creating encryption data"
-#: ../../../../ajax/ajax_accountSave.php:129
-#: ../../../../inc/import.class.php:247
-msgid "Error al generar datos cifrados"
-msgstr "Erreur pendant la création des données d'encryption"
-
-# "Duplicated customer"
-#: ../../../../ajax/ajax_accountSave.php:144
-#: ../../../../ajax/ajax_accountSave.php:193
-msgid "Cliente duplicado"
-msgstr "Client dupliqué"
-
-# "Error on creating customer"
-#: ../../../../ajax/ajax_accountSave.php:148
-#: ../../../../ajax/ajax_accountSave.php:197
-#: ../../../../ajax/ajax_appMgmtSave.php:341
-msgid "Error al crear el cliente"
-msgstr "Erreur pendant la création du client"
-
-# "Account added"
-#: ../../../../ajax/ajax_accountSave.php:172
+#: ../../../../ajax/ajax_accountSave.php:173
msgid "Cuenta creada"
msgstr "Compte ajouté"
-# "Error on account creation"
-#: ../../../../ajax/ajax_accountSave.php:174
+#: ../../../../ajax/ajax_accountSave.php:176
msgid "Error al crear la cuenta"
msgstr "Erreur pendant la création de compte"
-# "No changes"
-#: ../../../../ajax/ajax_accountSave.php:207
+#: ../../../../ajax/ajax_accountSave.php:211
msgid "Sin cambios"
msgstr "Aucun changement"
-# "Account updated"
-#: ../../../../ajax/ajax_accountSave.php:212
-#: ../../../../inc/account.class.php:369
+#: ../../../../ajax/ajax_accountSave.php:223
msgid "Cuenta actualizada"
msgstr "Compte actualisé"
-# "Error on updating account"
-#: ../../../../ajax/ajax_accountSave.php:214
+#: ../../../../ajax/ajax_accountSave.php:226
msgid "Error al modificar la cuenta"
msgstr "Erreur pendant la modification du compte"
-# "Account deleted"
-#: ../../../../ajax/ajax_accountSave.php:221
+#: ../../../../ajax/ajax_accountSave.php:233
msgid "Cuenta eliminada"
msgstr "Compte supprimé"
-# "Error on account deletion"
-#: ../../../../ajax/ajax_accountSave.php:223
+#: ../../../../ajax/ajax_accountSave.php:236
msgid "Error al eliminar la cuenta"
msgstr "Erreur pendant la suppression du compte"
-# "Password updated"
-#: ../../../../ajax/ajax_accountSave.php:233
-#: ../../../../ajax/ajax_appMgmtSave.php:156
-#: ../../../../ajax/ajax_passReset.php:79
+#: ../../../../ajax/ajax_accountSave.php:246
+#: ../../../../ajax/ajax_appMgmtSave.php:161
+#: ../../../../ajax/ajax_passReset.php:74
msgid "Clave actualizada"
msgstr "Mot de passe actualisé"
-# "Error on updating password"
-#: ../../../../ajax/ajax_accountSave.php:235
+#: ../../../../ajax/ajax_accountSave.php:249
msgid "Error al actualizar la clave"
msgstr "Erreur pendant l'actualisation du mot de passe"
-# "Account restored"
-#: ../../../../ajax/ajax_accountSave.php:258
+#: ../../../../ajax/ajax_accountSave.php:256
msgid "Cuenta restaurada"
msgstr "Compte restauré"
-# "Error on restoring account"
-#: ../../../../ajax/ajax_accountSave.php:261
+#: ../../../../ajax/ajax_accountSave.php:259
msgid "Error al restaurar cuenta"
msgstr "Erreur pendant la restauration du compte"
-# "Edit User"
-#: ../../../../ajax/ajax_appMgmtData.php:46
-#: ../../../../ajax/ajax_getContent.php:137
+#: ../../../../ajax/ajax_appMgmtData.php:54
+msgid "Ver Usuario"
+msgstr "Détails Utilisateur"
+
+#: ../../../../ajax/ajax_appMgmtData.php:61
+#: ../../../../web/UsersMgmtC.class.php:136
msgid "Editar Usuario"
msgstr "Editer Utilisateur"
-# "New User"
-#: ../../../../ajax/ajax_appMgmtData.php:51
-#: ../../../../ajax/ajax_getContent.php:135
-#: ../../../../inc/users.class.php:816
+#: ../../../../ajax/ajax_appMgmtData.php:67
+#: ../../../../inc/UserBase.class.php:381
+#: ../../../../web/UsersMgmtC.class.php:121
msgid "Nuevo Usuario"
msgstr "Nouvel Utilisateur"
-# "Edit Group"
-#: ../../../../ajax/ajax_appMgmtData.php:56
-#: ../../../../ajax/ajax_getContent.php:168
+#: ../../../../ajax/ajax_appMgmtData.php:73
+msgid "Ver Grupo"
+msgstr "Détail Groupe"
+
+#: ../../../../ajax/ajax_appMgmtData.php:80
+#: ../../../../web/UsersMgmtC.class.php:202
msgid "Editar Grupo"
msgstr "Editer Groupe"
-# "New Group"
-#: ../../../../ajax/ajax_appMgmtData.php:61
-#: ../../../../ajax/ajax_getContent.php:167
-#: ../../../../inc/groups.class.php:154
+#: ../../../../ajax/ajax_appMgmtData.php:86
+#: ../../../../inc/Groups.class.php:152 ../../../../inc/Groups.class.php:253
+#: ../../../../web/UsersMgmtC.class.php:194
msgid "Nuevo Grupo"
msgstr "Nouveau Groupe"
-# "Edit Profile"
-#: ../../../../ajax/ajax_appMgmtData.php:66
-#: ../../../../ajax/ajax_getContent.php:200
+#: ../../../../ajax/ajax_appMgmtData.php:92
+msgid "Ver Perfil"
+msgstr "Détail Profil"
+
+#: ../../../../ajax/ajax_appMgmtData.php:99
+#: ../../../../web/UsersMgmtC.class.php:267
msgid "Editar Perfil"
msgstr "Editer Profil"
-# "New Profile"
-#: ../../../../ajax/ajax_appMgmtData.php:71
-#: ../../../../ajax/ajax_getContent.php:199
-#: ../../../../inc/profiles.class.php:206
+#: ../../../../ajax/ajax_appMgmtData.php:105
+#: ../../../../inc/ProfileBase.class.php:512
+#: ../../../../web/UsersMgmtC.class.php:252
msgid "Nuevo Perfil"
msgstr "Nouveau Profil"
-# "Edit Customer"
-#: ../../../../ajax/ajax_appMgmtData.php:76
-#: ../../../../ajax/ajax_getContent.php:285
+#: ../../../../ajax/ajax_appMgmtData.php:111
+msgid "Ver Cliente"
+msgstr "Détails Client"
+
+#: ../../../../ajax/ajax_appMgmtData.php:118
+#: ../../../../web/AccountsMgmtC.class.php:152
msgid "Editar Cliente"
msgstr "Editer Client"
-# "New Customer"
-#: ../../../../ajax/ajax_appMgmtData.php:81
-#: ../../../../ajax/ajax_getContent.php:284
-#: ../../../../inc/customer.class.php:58
+#: ../../../../ajax/ajax_appMgmtData.php:124
+#: ../../../../inc/Customer.class.php:65
+#: ../../../../web/AccountsMgmtC.class.php:145
msgid "Nuevo Cliente"
msgstr "Nouveau Client"
-# "Edit Category"
-#: ../../../../ajax/ajax_appMgmtData.php:86
-#: ../../../../ajax/ajax_getContent.php:253
+#: ../../../../ajax/ajax_appMgmtData.php:130
+msgid "Ver Categoría"
+msgstr "Détails Catégorie"
+
+#: ../../../../ajax/ajax_appMgmtData.php:137
+#: ../../../../web/AccountsMgmtC.class.php:94
msgid "Editar Categoría"
msgstr "Editer Catégorie"
-# "New Category"
-#: ../../../../ajax/ajax_appMgmtData.php:91
-#: ../../../../ajax/ajax_getContent.php:252
-#: ../../../../inc/category.class.php:79
+#: ../../../../ajax/ajax_appMgmtData.php:143
+#: ../../../../inc/Category.class.php:83
+#: ../../../../web/AccountsMgmtC.class.php:86
msgid "Nueva Categoría"
msgstr "Nouvelle Catégorie"
-# "An username is needed"
-#: ../../../../ajax/ajax_appMgmtSave.php:76
+#: ../../../../ajax/ajax_appMgmtData.php:149
+msgid "Ver Autorización"
+msgstr "Voir les autorisations"
+
+#: ../../../../ajax/ajax_appMgmtData.php:156
+#: ../../../../inc/ApiTokens.class.php:189
+#: ../../../../web/UsersMgmtC.class.php:399
+msgid "Nueva Autorización"
+msgstr "Nouvelle autorisation"
+
+#: ../../../../ajax/ajax_appMgmtData.php:162
+#: ../../../../web/UsersMgmtC.class.php:414
+msgid "Editar Autorización"
+msgstr "Editer l'autorisation"
+
+#: ../../../../ajax/ajax_appMgmtData.php:168
+#: ../../../../web/AccountsMgmtC.class.php:273
+msgid "Nuevo Campo"
+msgstr "Nouveau Champ"
+
+#: ../../../../ajax/ajax_appMgmtData.php:174
+#: ../../../../web/AccountsMgmtC.class.php:280
+msgid "Editar Campo"
+msgstr "Editer Champ"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:85
msgid "Es necesario un nombre de usuario"
msgstr "Nom d'utilisateur requis"
-# "A login is needed"
-#: ../../../../ajax/ajax_appMgmtSave.php:80
+#: ../../../../ajax/ajax_appMgmtSave.php:87
msgid "Es necesario un login"
msgstr "Login requis"
-# "A profile is needed"
-#: ../../../../ajax/ajax_appMgmtSave.php:84
+#: ../../../../ajax/ajax_appMgmtSave.php:89
msgid "Es necesario un perfil"
msgstr "Profil requis"
-# "A group is needed"
-#: ../../../../ajax/ajax_appMgmtSave.php:88
+#: ../../../../ajax/ajax_appMgmtSave.php:91
msgid "Es necesario un grupo"
msgstr "Groupe requis"
-# "An email is needed"
-#: ../../../../ajax/ajax_appMgmtSave.php:92
+#: ../../../../ajax/ajax_appMgmtSave.php:93
msgid "Es necesario un email"
msgstr "Courriel requis"
-# "Duplicated user login "
-#: ../../../../ajax/ajax_appMgmtSave.php:110
-msgid "Login de usuario duplicado"
-msgstr "Login utilisateur dupliqué"
-
-# "Duplicated user email"
-#: ../../../../ajax/ajax_appMgmtSave.php:113
-msgid "Email de usuario duplicado"
-msgstr "Courriel de l'utilisateur dupliqué"
-
-# "User added"
-#: ../../../../ajax/ajax_appMgmtSave.php:127
-msgid "Usuario creado"
-msgstr "Utilisateur ajouté"
-
-# "Error on creating user"
-#: ../../../../ajax/ajax_appMgmtSave.php:130
-msgid "Error al crear el usuario"
-msgstr "Erreur pendant la création d'utilisateur"
-
-# "User updated"
-#: ../../../../ajax/ajax_appMgmtSave.php:133
-#: ../../../../inc/users.class.php:228
-msgid "Usuario actualizado"
-msgstr "Utilisateur actualisé"
-
-# "Error on user update"
-#: ../../../../ajax/ajax_appMgmtSave.php:136
-msgid "Error al actualizar el usuario"
-msgstr "Erreur pendant l'actualisation de l'utilisateur"
-
-# "Ey, this is a DEMO!!"
-#: ../../../../ajax/ajax_appMgmtSave.php:141
-#: ../../../../ajax/ajax_appMgmtSave.php:163
-#: ../../../../ajax/ajax_configSave.php:214 ../../../../ajax/ajax_import.php:1
-#: ../../../../ajax/ajax_migrate.php:1
+#: ../../../../ajax/ajax_appMgmtSave.php:95
+#: ../../../../ajax/ajax_appMgmtSave.php:144
+#: ../../../../ajax/ajax_appMgmtSave.php:168
+#: ../../../../ajax/ajax_configSave.php:272
+#: ../../../../ajax/ajax_import.php:39 ../../../../ajax/ajax_migrate.php:39
+#: ../../../../ajax/ajax_userPrefsSave.php:55
msgid "Ey, esto es una DEMO!!"
msgstr "Hey, ceci est une DEMO"
-# "Error on updating password"
-#: ../../../../ajax/ajax_appMgmtSave.php:159
-#: ../../../../ajax/ajax_passReset.php:83
+#: ../../../../ajax/ajax_appMgmtSave.php:100
+msgid "Login de usuario duplicado"
+msgstr "Login utilisateur dupliqué"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:103
+msgid "Email de usuario duplicado"
+msgstr "Courriel de l'utilisateur dupliqué"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:109
+#: ../../../../ajax/ajax_appMgmtSave.php:146
+msgid "La clave no puede estar en blanco"
+msgstr "Le mot de passe ne peut pas être blanc"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:122
+msgid "Usuario creado"
+msgstr "Utilisateur ajouté"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:125
+msgid "Error al crear el usuario"
+msgstr "Erreur pendant la création d'utilisateur"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:135
+#: ../../../../inc/UserUtil.class.php:103
+msgid "Usuario actualizado"
+msgstr "Utilisateur actualisé"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:138
+msgid "Error al actualizar el usuario"
+msgstr "Erreur pendant l'actualisation de l'utilisateur"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:164
+#: ../../../../ajax/ajax_passReset.php:78
msgid "Error al modificar la clave"
msgstr "Erreur pendant la modification du mot de passe"
-# "Unable to delete, user in use"
-#: ../../../../ajax/ajax_appMgmtSave.php:169
+#: ../../../../ajax/ajax_appMgmtSave.php:170
msgid "No es posible eliminar, usuario en uso"
msgstr "Impossible à supprimer, utilisateur en activité"
-# "User deleted"
-#: ../../../../ajax/ajax_appMgmtSave.php:173
+#: ../../../../ajax/ajax_appMgmtSave.php:174
msgid "Usuario eliminado"
msgstr "Utilisateur supprimé"
-# "Error on user deletion"
-#: ../../../../ajax/ajax_appMgmtSave.php:176
+#: ../../../../ajax/ajax_appMgmtSave.php:177
msgid "Error al eliminar el usuario"
msgstr "Erreur pendant la suppression de l'utilisateur"
-# "A group name is needed"
-#: ../../../../ajax/ajax_appMgmtSave.php:188
+#: ../../../../ajax/ajax_appMgmtSave.php:192
msgid "Es necesario un nombre de grupo"
msgstr "Nom de groupe requis"
-# "Duplicated group name"
-#: ../../../../ajax/ajax_appMgmtSave.php:196
+#: ../../../../ajax/ajax_appMgmtSave.php:200
msgid "Nombre de grupo duplicado"
msgstr "Nom de groupe dupliqué"
-# "Group added"
-#: ../../../../ajax/ajax_appMgmtSave.php:201
+#: ../../../../ajax/ajax_appMgmtSave.php:212
msgid "Grupo creado"
msgstr "Groupe ajouté"
-# "Error on group creation"
-#: ../../../../ajax/ajax_appMgmtSave.php:203
+#: ../../../../ajax/ajax_appMgmtSave.php:214
msgid "Error al crear el grupo"
msgstr "Erreur pendant la création de groupe"
-# "Group updated"
-#: ../../../../ajax/ajax_appMgmtSave.php:207
+#: ../../../../ajax/ajax_appMgmtSave.php:225
msgid "Grupo actualizado"
msgstr "Gropue actualisé"
-# "Error on updating group"
-#: ../../../../ajax/ajax_appMgmtSave.php:210
+#: ../../../../ajax/ajax_appMgmtSave.php:228
msgid "Error al actualizar el grupo"
msgstr "Erreur pendant l'actualisation du groupe"
-# "Users"
-#: ../../../../ajax/ajax_appMgmtSave.php:221
-#: ../../../../ajax/ajax_appMgmtSave.php:298
-#: ../../../../inc/tpl/accounts.php:283 ../../../../inc/tpl/profiles.php:88
+#: ../../../../ajax/ajax_appMgmtSave.php:237
+#: ../../../../ajax/ajax_appMgmtSave.php:314
+#: ../../../../inc/CustomFieldsBase.class.php:83
+#: ../../../../inc/themes/classic/account.inc:109
+#: ../../../../inc/themes/classic/groups.inc:24
+#: ../../../../inc/themes/classic/profiles.inc:85
+#: ../../../../inc/themes/material-blue/account.inc:134
+#: ../../../../inc/themes/material-blue/groups.inc:32
+#: ../../../../inc/themes/material-blue/profiles.inc:99
msgid "Usuarios"
msgstr "Utilisateurs"
-# "Accounts"
-#: ../../../../ajax/ajax_appMgmtSave.php:225
-#: ../../../../ajax/ajax_appMgmtSave.php:356
-#: ../../../../inc/category.class.php:271 ../../../../inc/tpl/profiles.php:45
+#: ../../../../ajax/ajax_appMgmtSave.php:241
+#: ../../../../inc/Category.class.php:266
+#: ../../../../inc/CustomFieldsBase.class.php:80
+#: ../../../../inc/Customer.class.php:150
+#: ../../../../inc/themes/classic/profiles.inc:15
+#: ../../../../inc/themes/material-blue/config.inc:139
+#: ../../../../inc/themes/material-blue/profiles.inc:19
msgid "Cuentas"
msgstr "Comptes"
-# "Unable to delete"
-#: ../../../../ajax/ajax_appMgmtSave.php:228
-#: ../../../../ajax/ajax_appMgmtSave.php:300
-#: ../../../../ajax/ajax_appMgmtSave.php:358
-#: ../../../../ajax/ajax_appMgmtSave.php:407
+#: ../../../../ajax/ajax_appMgmtSave.php:244
+#: ../../../../ajax/ajax_appMgmtSave.php:316
+#: ../../../../inc/Category.class.php:119
+#: ../../../../inc/Customer.class.php:150
msgid "No es posible eliminar"
msgstr "Impossible de supprimer"
-# "Group in use by:"
-#: ../../../../ajax/ajax_appMgmtSave.php:228
+#: ../../../../ajax/ajax_appMgmtSave.php:244
msgid "Grupo en uso por:"
msgstr "Groupe utilisé par:"
-# "Group deleted"
-#: ../../../../ajax/ajax_appMgmtSave.php:233
+#: ../../../../ajax/ajax_appMgmtSave.php:249
msgid "Grupo eliminado"
msgstr "Groupe supprimé"
-# "Error on group deletion"
-#: ../../../../ajax/ajax_appMgmtSave.php:236
+#: ../../../../ajax/ajax_appMgmtSave.php:252
msgid "Error al eliminar el grupo"
msgstr "Erreur pendant la supression du groupe"
-# "A profile name is needed"
-#: ../../../../ajax/ajax_appMgmtSave.php:270
+#: ../../../../ajax/ajax_appMgmtSave.php:291
msgid "Es necesario un nombre de perfil"
msgstr "Nom de profil requis"
-# "Duplicated profile name"
-#: ../../../../ajax/ajax_appMgmtSave.php:276
+#: ../../../../ajax/ajax_appMgmtSave.php:293
msgid "Nombre de perfil duplicado"
msgstr "Nom de profil dupliqué"
-# "Profile added"
-#: ../../../../ajax/ajax_appMgmtSave.php:281
+#: ../../../../ajax/ajax_appMgmtSave.php:298
msgid "Perfil creado"
msgstr "Profil ajouté"
-# "Error on creating profile"
-#: ../../../../ajax/ajax_appMgmtSave.php:284
+#: ../../../../ajax/ajax_appMgmtSave.php:301
msgid "Error al crear el perfil"
msgstr "Erreur pendant la création de profil"
-# "Profile updated"
-#: ../../../../ajax/ajax_appMgmtSave.php:287
+#: ../../../../ajax/ajax_appMgmtSave.php:304
msgid "Perfil actualizado"
msgstr "Profil actualisé"
-# "Error on updating profile"
-#: ../../../../ajax/ajax_appMgmtSave.php:290
+#: ../../../../ajax/ajax_appMgmtSave.php:307
msgid "Error al actualizar el perfil"
msgstr "Erreur pendant l'actualisation du profil"
-# "Profiles in use by:"
-#: ../../../../ajax/ajax_appMgmtSave.php:300
+#: ../../../../ajax/ajax_appMgmtSave.php:316
msgid "Perfil en uso por:"
msgstr "Profil utilisé par:"
-# "Delete Profile"
-#: ../../../../ajax/ajax_appMgmtSave.php:305
-#: ../../../../ajax/ajax_getContent.php:201
-msgid "Eliminar Perfil"
-msgstr "Supprimer Profil"
-
-# "Profile"
-#: ../../../../ajax/ajax_appMgmtSave.php:306
-#: ../../../../ajax/ajax_doLogin.php:157
-#: ../../../../ajax/ajax_getContent.php:114
-#: ../../../../inc/profiles.class.php:207
-#: ../../../../inc/profiles.class.php:259 ../../../../inc/tpl/users.php:102
-msgid "Perfil"
-msgstr "Profil"
-
-# "Profile deleted"
-#: ../../../../ajax/ajax_appMgmtSave.php:311
+#: ../../../../ajax/ajax_appMgmtSave.php:319
msgid "Perfil eliminado"
msgstr "Profil supprimé"
-# "Error on profile deletion"
-#: ../../../../ajax/ajax_appMgmtSave.php:314
+#: ../../../../ajax/ajax_appMgmtSave.php:322
msgid "Error al eliminar el perfil"
msgstr "Erreur pendant la suppression du profil"
-# "Duplicated customer name"
-#: ../../../../ajax/ajax_appMgmtSave.php:334
-msgid "Nombre de cliente duplicado"
-msgstr "Nom de client dupliqué"
-
-# "Customer added"
-#: ../../../../ajax/ajax_appMgmtSave.php:339
+#: ../../../../ajax/ajax_appMgmtSave.php:357
msgid "Cliente creado"
msgstr "Client ajouté"
-# "Customer updated"
-#: ../../../../ajax/ajax_appMgmtSave.php:345
+#: ../../../../ajax/ajax_appMgmtSave.php:372
msgid "Cliente actualizado"
msgstr "Compte actualisé"
-# "Error on updating customer"
-#: ../../../../ajax/ajax_appMgmtSave.php:348
-msgid "Error al actualizar el cliente"
-msgstr "Erreur pendant l'actualisation du client"
-
-# "Customer in use by:"
-#: ../../../../ajax/ajax_appMgmtSave.php:358
-msgid "Cliente en uso por:"
-msgstr "Client utilisé par:"
-
-# "Customer deleted"
-#: ../../../../ajax/ajax_appMgmtSave.php:362
+#: ../../../../ajax/ajax_appMgmtSave.php:382
msgid "Cliente eliminado"
msgstr "Client supprimé"
-# "Error on customer deletion"
-#: ../../../../ajax/ajax_appMgmtSave.php:365
-msgid "Error al eliminar el cliente"
-msgstr "Erreur pendant la suppression du client"
-
-# "A category name needed"
-#: ../../../../ajax/ajax_appMgmtSave.php:378
+#: ../../../../ajax/ajax_appMgmtSave.php:396
msgid "Es necesario un nombre de categoría"
msgstr "Nom de catégorie requis"
-# "Duplicated category name"
-#: ../../../../ajax/ajax_appMgmtSave.php:385
-msgid "Nombre de categoría duplicado"
-msgstr "Nom de catégorie dupliqué"
-
-# "Category added"
-#: ../../../../ajax/ajax_appMgmtSave.php:390
+#: ../../../../ajax/ajax_appMgmtSave.php:416
msgid "Categoría creada"
msgstr "Catégorie ajoutée"
-# "Error on creating category"
-#: ../../../../ajax/ajax_appMgmtSave.php:392
-msgid "Error al crear la categoría"
-msgstr "Erreur pendant la création de la catégorie"
-
-# "Category updated"
-#: ../../../../ajax/ajax_appMgmtSave.php:396
+#: ../../../../ajax/ajax_appMgmtSave.php:431
msgid "Categoría actualizada"
msgstr "Catégorie actualisée"
-# "Error on updating category"
-#: ../../../../ajax/ajax_appMgmtSave.php:399
-msgid "Error al actualizar la categoría"
-msgstr "Erreur pendant l'actualisation de la categorie"
-
-# "Category in use by:"
-#: ../../../../ajax/ajax_appMgmtSave.php:407
-msgid "Categoría en uso por:"
-msgstr "Catégorie utilisée par:"
-
-# "Category deleted"
-#: ../../../../ajax/ajax_appMgmtSave.php:411
+#: ../../../../ajax/ajax_appMgmtSave.php:442
msgid "Categoría eliminada"
-msgstr "Catégorie supprimée"
+msgstr "Catégorie supprimé"
-# "Error on category deletion"
-#: ../../../../ajax/ajax_appMgmtSave.php:414
-msgid "Error al eliminar la categoría"
-msgstr "Erreur pendant la suppression de la catégorie"
+#: ../../../../ajax/ajax_appMgmtSave.php:458
+msgid "Usuario o acción no indicado"
+msgstr ""
-# "Error on doing backup"
-#: ../../../../ajax/ajax_backup.php:49
-msgid "Error al realizar el backup"
-msgstr "Erreur pendant la sauvegarde"
+#: ../../../../ajax/ajax_appMgmtSave.php:468
+msgid "Autorización creada"
+msgstr "Autorisation ajoutée"
-# "Please, check the event log for more details"
-#: ../../../../ajax/ajax_backup.php:49 ../../../../ajax/ajax_checkLdap.php:54
-#: ../../../../inc/import.class.php:90 ../../../../inc/migrate.class.php:118
-msgid "Revise el registro de eventos para más detalles"
-msgstr "Veuillez consulter le journal des évènements pour plus de détail"
+#: ../../../../ajax/ajax_appMgmtSave.php:476
+msgid "Autorización actualizada"
+msgstr "Autorisation mise à jour"
-# "Make Backup"
-#: ../../../../ajax/ajax_backup.php:52 ../../../../inc/tpl/backup.php:82
+#: ../../../../ajax/ajax_appMgmtSave.php:486
+msgid "Autorización eliminada"
+msgstr "Autorisation supprimée"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:503
+msgid "Nombre del campo no indicado"
+msgstr "Nom de champ pas configurer"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:505
+msgid "Tipo del campo no indicado"
+msgstr "Type de champ pas configurer"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:507
+msgid "Módulo del campo no indicado"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:521
+msgid "Campo creado"
+msgstr "Champ ajouté"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:530
+msgid "Campo actualizado"
+msgstr "Champ mis à jour"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:540
+msgid "Campo eliminado"
+msgstr "Champ supprimé"
+
+#: ../../../../ajax/ajax_backup.php:52 ../../../../ajax/ajax_backup.php:57
+#: ../../../../inc/themes/classic/backup.inc:54
msgid "Realizar Backup"
msgstr "Effectuer une sauvegarde"
-# "Application and database backup successfully done"
-#: ../../../../ajax/ajax_backup.php:53
+#: ../../../../ajax/ajax_backup.php:52 ../../../../ajax/ajax_backup.php:54
+msgid "Error al realizar el backup"
+msgstr "Erreur pendant la sauvegarde"
+
+#: ../../../../ajax/ajax_backup.php:54 ../../../../ajax/ajax_backup.php:76
+#: ../../../../ajax/ajax_checkLdap.php:57 ../../../../inc/Import.class.php:128
+#: ../../../../inc/Migrate.class.php:93
+msgid "Revise el registro de eventos para más detalles"
+msgstr "Veuillez consulter le journal des évènements pour plus de détail"
+
+#: ../../../../ajax/ajax_backup.php:57
msgid "Copia de la aplicación y base de datos realizada correctamente"
msgstr ""
"Sauvegarde de l'application et de la base de données effectuée correctement"
-# "Backup process finished"
-#: ../../../../ajax/ajax_backup.php:58
+#: ../../../../ajax/ajax_backup.php:59
msgid "Proceso de backup finalizado"
msgstr "Processus de sauvegarde terminé"
-# "LDAP parameters are not set"
-#: ../../../../ajax/ajax_checkLdap.php:48 ../../../../inc/ldap.class.php:246
+#: ../../../../ajax/ajax_backup.php:66
+#: ../../../../ajax/ajax_configSave.php:244
+#: ../../../../ajax/ajax_doLogin.php:53 ../../../../ajax/ajax_import.php:56
+#, fuzzy
+msgid "Error en clave RSA"
+msgstr "Erreur pendant la requête"
+
+#: ../../../../ajax/ajax_backup.php:74 ../../../../ajax/ajax_backup.php:79
+msgid "Realizar Exportación"
+msgstr "Exporter"
+
+#: ../../../../ajax/ajax_backup.php:74
+msgid "Error al realizar la exportación de cuentas"
+msgstr "Erreur pendant l'exportation de comptes"
+
+#: ../../../../ajax/ajax_backup.php:76
+msgid "Error al realizar la exportación"
+msgstr "Problème durant l'export"
+
+#: ../../../../ajax/ajax_backup.php:79
+msgid "Exportación de cuentas realizada correctamente"
+msgstr "Export réalisé avec succès"
+
+#: ../../../../ajax/ajax_backup.php:81
+msgid "Proceso de exportación finalizado"
+msgstr "Processus d'export terminé"
+
+#: ../../../../ajax/ajax_checkLdap.php:51 ../../../../inc/Ldap.class.php:265
msgid "Los parámetros de LDAP no están configurados"
msgstr "Les paramètres LDAP ne sont pas définis"
-# "Error on LDAP connection"
-#: ../../../../ajax/ajax_checkLdap.php:54
+#: ../../../../ajax/ajax_checkLdap.php:57
msgid "Error de conexión a LDAP"
msgstr "Erreur de connexion LDAP"
-# "LDAP connection OK"
-#: ../../../../ajax/ajax_checkLdap.php:56
+#: ../../../../ajax/ajax_checkLdap.php:59
msgid "Conexión a LDAP correcta"
msgstr "Connexion LDAP OK"
-# "Objects found"
-#: ../../../../ajax/ajax_checkLdap.php:56
+#: ../../../../ajax/ajax_checkLdap.php:59
msgid "Objetos encontrados"
msgstr "Objet trouvé"
-# "Download new version"
-#: ../../../../ajax/ajax_checkUpds.php:41
-msgid "Descargar nueva versión"
-msgstr "Télécharger nouvelle version"
-
-# "Updated"
-#: ../../../../ajax/ajax_checkUpds.php:44
-msgid "Actualizado"
-msgstr "Mis à jour"
-
-# "Missing Wiki parameters"
-#: ../../../../ajax/ajax_configSave.php:96
-msgid "Faltan parámetros de Wiki"
-msgstr "Paramètres Wiki manquants"
-
-# "Missing LDAP parameters"
-#: ../../../../ajax/ajax_configSave.php:107
-msgid "Faltan parámetros de LDAP"
-msgstr "Paramètres LDAP manquants"
-
-# "Missing Mail parameters"
-#: ../../../../ajax/ajax_configSave.php:123
-msgid "Faltan parámetros de Correo"
-msgstr "Paramètres de courriel manquants"
-
-# "The maximum file upload size is 16MB"
-#: ../../../../ajax/ajax_configSave.php:144
-msgid "El tamaño máximo de archivo es de 16MB"
-msgstr "La taille maximum pour le chargement de fichier est de 16Mo"
-
-# "Edit Configuration"
-#: ../../../../ajax/ajax_configSave.php:161
+#: ../../../../ajax/ajax_configSave.php:55
msgid "Modificar Configuración"
msgstr "Modifier Configuration"
-# "Configuration updated"
-#: ../../../../ajax/ajax_configSave.php:169
+#: ../../../../ajax/ajax_configSave.php:100
+msgid "El tamaño máximo por archivo es de 16MB"
+msgstr "La taille maximale par fichier est de 16 MB"
+
+#: ../../../../ajax/ajax_configSave.php:113
+msgid "Faltan parámetros de Proxy"
+msgstr "Paramètres Proxy manquant"
+
+#: ../../../../ajax/ajax_configSave.php:124
+#: ../../../../web/ConfigC.class.php:126
+#: ../../../../inc/themes/classic/profiles.inc:61
+#: ../../../../inc/themes/material-blue/profiles.inc:72
+msgid "General"
+msgstr "Générale"
+
+#: ../../../../ajax/ajax_configSave.php:134
+msgid "Faltan parámetros de Wiki"
+msgstr "Paramètres Wiki manquants"
+
+#: ../../../../ajax/ajax_configSave.php:144
+#: ../../../../web/ConfigC.class.php:261
+#: ../../../../inc/themes/classic/wiki.inc:4
+#: ../../../../inc/themes/material-blue/wiki.inc:4
+msgid "Wiki"
+msgstr "Wiki"
+
+#: ../../../../ajax/ajax_configSave.php:159
+msgid "Faltan parámetros de LDAP"
+msgstr "Paramètres LDAP manquants"
+
+#: ../../../../ajax/ajax_configSave.php:174
+#: ../../../../web/ConfigC.class.php:293
+#: ../../../../inc/themes/classic/ldap.inc:4
+#: ../../../../inc/themes/material-blue/ldap.inc:4
+msgid "LDAP"
+msgstr "LDAP"
+
+#: ../../../../ajax/ajax_configSave.php:189
+msgid "Faltan parámetros de Correo"
+msgstr "Paramètres de courriel manquants"
+
+#: ../../../../ajax/ajax_configSave.php:209
+#: ../../../../web/ConfigC.class.php:323
+#: ../../../../inc/themes/classic/mail.inc:4
+#: ../../../../inc/themes/material-blue/mail.inc:4
+msgid "Correo"
+msgstr "Courriel"
+
+#: ../../../../ajax/ajax_configSave.php:221
msgid "Configuración actualizada"
msgstr "Configuration actualisée"
-# "Master Password updated"
-#: ../../../../ajax/ajax_configSave.php:178
-#: ../../../../ajax/ajax_configSave.php:224
-#: ../../../../ajax/ajax_viewpass.php:68 ../../../../ajax/ajax_viewpass.php:70
-#: ../../../../inc/html.class.php:427
+#: ../../../../ajax/ajax_configSave.php:230
+#: ../../../../ajax/ajax_configSave.php:282
+#: ../../../../ajax/ajax_viewpass.php:60
+#: ../../../../inc/Controller.class.php:169
msgid "Clave maestra actualizada"
msgstr "Mot de passe maître actualisé"
-# "Restart session to update"
-#: ../../../../ajax/ajax_configSave.php:178
-#: ../../../../ajax/ajax_viewpass.php:68 ../../../../ajax/ajax_viewpass.php:70
-#: ../../../../inc/html.class.php:427
+#: ../../../../ajax/ajax_configSave.php:230
+#: ../../../../ajax/ajax_viewpass.php:60
+#: ../../../../inc/Controller.class.php:169
msgid "Reinicie la sesión para cambiarla"
msgstr "Redémarrez la session pour mettre à jour"
-# "Master Password needed"
-#: ../../../../ajax/ajax_configSave.php:182
+#: ../../../../ajax/ajax_configSave.php:232
msgid "Clave maestra no indicada"
msgstr "Mot de passe maître requis"
-# "The password update must be confirmed"
-#: ../../../../ajax/ajax_configSave.php:186
+#: ../../../../ajax/ajax_configSave.php:234
msgid "Se ha de confirmar el cambio de clave"
msgstr "Le changement de mot de passe doit être confirmé"
-# "The passwords are the same"
-#: ../../../../ajax/ajax_configSave.php:190
+#: ../../../../ajax/ajax_configSave.php:248
msgid "Las claves son idénticas"
msgstr "Les mots de passe sont identiques"
-# "The master passwords do not match"
-#: ../../../../ajax/ajax_configSave.php:194
+#: ../../../../ajax/ajax_configSave.php:250
msgid "Las claves maestras no coinciden"
msgstr "Les mots de passe maîtres ne correspondent pas"
-# "The current master password does not match"
-#: ../../../../ajax/ajax_configSave.php:198
+#: ../../../../ajax/ajax_configSave.php:252
msgid "La clave maestra actual no coincide"
msgstr "Le mot de passe maître actuel ne correspond pas"
-# "Error on updating accounts' passwords"
-#: ../../../../ajax/ajax_configSave.php:207
+#: ../../../../ajax/ajax_configSave.php:261
msgid "Errores al actualizar las claves de las cuentas"
msgstr "Erreur pendant la modification des mots de passe des comptes"
-# "Update Master Password"
-#: ../../../../ajax/ajax_configSave.php:221
-#: ../../../../inc/account.class.php:749
+#: ../../../../ajax/ajax_configSave.php:267
+msgid "Errores al actualizar las claves de las cuentas del histórico"
+msgstr "Erreur lors de la mise à jour des mots de passe dans l'historique"
+
+#: ../../../../ajax/ajax_configSave.php:280
+#: ../../../../inc/Account.class.php:497
msgid "Actualizar Clave Maestra"
msgstr "Mettre à jour le Mot de passe Maître"
-# "Error on saving master password's hash"
-#: ../../../../ajax/ajax_configSave.php:227
+#: ../../../../ajax/ajax_configSave.php:284
msgid "Error al guardar el hash de la clave maestra"
msgstr "Erreur pendant la sauvegarde du hash du mot de passe maître"
-# Generate Temporary Password
-#: ../../../../ajax/ajax_configSave.php:232
-#, fuzzy
+#: ../../../../ajax/ajax_configSave.php:292
msgid "Generar Clave Temporal"
-msgstr "Generate Temporary Password"
+msgstr "Générer un mot de passe temporaire"
-# "Password"
-#: ../../../../ajax/ajax_configSave.php:233
-#: ../../../../ajax/ajax_usrpass.php:53 ../../../../ajax/ajax_usrpass.php:56
-#: ../../../../ajax/ajax_viewpass.php:98 ../../../../inc/tpl/accounts.php:251
-#: ../../../../inc/tpl/config.php:462 ../../../../inc/tpl/editpass.php:57
-#: ../../../../inc/tpl/install.php:102 ../../../../inc/tpl/install.php:103
-#: ../../../../inc/tpl/login.php:37 ../../../../inc/tpl/login.php:45
-#: ../../../../inc/tpl/passreset.php:62 ../../../../inc/tpl/users.php:135
+#: ../../../../ajax/ajax_configSave.php:292
+#: ../../../../inc/themes/classic/account.inc:83
+#: ../../../../inc/themes/classic/editpass.inc:25
+#: ../../../../inc/themes/classic/install.inc:38
+#: ../../../../inc/themes/classic/install.inc:39
+#: ../../../../inc/themes/classic/login.inc:10
+#: ../../../../inc/themes/classic/login.inc:22
+#: ../../../../inc/themes/classic/mail.inc:55
+#: ../../../../inc/themes/classic/passreset.inc:29
+#: ../../../../inc/themes/classic/users.inc:75
+#: ../../../../inc/themes/classic/userspass.inc:8
+#: ../../../../inc/themes/classic/userspass.inc:11
+#: ../../../../inc/themes/material-blue/account.inc:95
+#: ../../../../inc/themes/material-blue/account.inc:100
+#: ../../../../inc/themes/material-blue/config.inc:358
+#: ../../../../inc/themes/material-blue/editpass.inc:26
+#: ../../../../inc/themes/material-blue/editpass.inc:31
+#: ../../../../inc/themes/material-blue/editpass.inc:41
+#: ../../../../inc/themes/material-blue/install.inc:44
+#: ../../../../inc/themes/material-blue/ldap.inc:105
+#: ../../../../inc/themes/material-blue/login.inc:17
+#: ../../../../inc/themes/material-blue/login.inc:40
+#: ../../../../inc/themes/material-blue/mail.inc:73
+#: ../../../../inc/themes/material-blue/mail.inc:80
+#: ../../../../inc/themes/material-blue/passreset.inc:31
+#: ../../../../inc/themes/material-blue/users.inc:89
+#: ../../../../inc/themes/material-blue/users.inc:96
+#: ../../../../inc/themes/material-blue/userspass.inc:8
+#: ../../../../inc/themes/material-blue/userspass.inc:13
msgid "Clave"
msgstr "Mot de passe"
-# Temporary Password Generated
-#: ../../../../ajax/ajax_configSave.php:236
-#, fuzzy
+#: ../../../../ajax/ajax_configSave.php:294
msgid "Clave Temporal Generada"
-msgstr "Temporary Password Generated"
+msgstr "Mot de passe temporel generé"
-# "User/Pass not entered"
-#: ../../../../ajax/ajax_doLogin.php:41
+#: ../../../../ajax/ajax_doLogin.php:46
msgid "Usuario/Clave no introducidos"
msgstr "Utilisateur/Mot de passe non saisi"
-# "Session start (LDAP)"
-#: ../../../../ajax/ajax_doLogin.php:54 ../../../../ajax/ajax_doLogin.php:75
-#: ../../../../ajax/ajax_doLogin.php:82 ../../../../ajax/ajax_doLogin.php:89
-msgid "Inicio sesión (LDAP)"
-msgstr "Début de session (LDAP)"
+#: ../../../../ajax/ajax_doLogin.php:65
+msgid "Inicio sesión"
+msgstr "Se connecter"
-# "Error on saving LDAP user data"
-#: ../../../../ajax/ajax_doLogin.php:60
+#: ../../../../ajax/ajax_doLogin.php:70
+msgid "Servidor Login"
+msgstr "Connexion au serveur"
+
+#: ../../../../ajax/ajax_doLogin.php:76
msgid "Error al guardar los datos de LDAP"
msgstr "Erreur pendant la sauvegarde des données utilisateur LDAP"
-# "Internal error"
-#: ../../../../ajax/ajax_doLogin.php:63 ../../../../ajax/ajax_doLogin.php:71
-#: ../../../../ajax/ajax_doLogin.php:122 ../../../../inc/import.class.php:240
-#: ../../../../inc/import.class.php:247 ../../../../inc/import.class.php:266
+#: ../../../../ajax/ajax_doLogin.php:79 ../../../../ajax/ajax_doLogin.php:87
+#: ../../../../ajax/ajax_doLogin.php:139 ../../../../ajax/ajax_doLogin.php:185
+#: ../../../../inc/ApiTokens.class.php:140
+#: ../../../../inc/ApiTokens.class.php:186
+#: ../../../../inc/ApiTokens.class.php:217
+#: ../../../../inc/ApiTokens.class.php:243
+#: ../../../../inc/ApiTokens.class.php:262
+#: ../../../../inc/ApiTokens.class.php:304
+#: ../../../../inc/ApiTokens.class.php:328 ../../../../inc/Crypt.class.php:235
+#: ../../../../inc/Crypt.class.php:246
+#: ../../../../inc/XmlImportBase.class.php:74
msgid "Error interno"
msgstr "Erreur Interne"
-# "Error on updating user password in BD"
-#: ../../../../ajax/ajax_doLogin.php:68
+#: ../../../../ajax/ajax_doLogin.php:84
msgid "Error al actualizar la clave del usuario en la BBDD"
msgstr ""
"Erreur pendant l'actualisation du mot de passe utilisateur dans la base de "
"données"
-# "Incorrect login"
-#: ../../../../ajax/ajax_doLogin.php:76 ../../../../ajax/ajax_doLogin.php:100
+#: ../../../../ajax/ajax_doLogin.php:92 ../../../../ajax/ajax_doLogin.php:117
msgid "Login incorrecto"
msgstr "Login incorrecte"
-# "User"
-#: ../../../../ajax/ajax_doLogin.php:77 ../../../../ajax/ajax_doLogin.php:84
-#: ../../../../ajax/ajax_doLogin.php:91 ../../../../ajax/ajax_doLogin.php:101
-#: ../../../../ajax/ajax_doLogin.php:111 ../../../../ajax/ajax_doLogin.php:156
-#: ../../../../ajax/ajax_search.php:131 ../../../../ajax/ajax_search.php:250
-#: ../../../../ajax/ajax_viewpass.php:94 ../../../../inc/init.php:544
-#: ../../../../inc/tpl/accounts.php:234 ../../../../inc/tpl/config.php:453
-#: ../../../../inc/tpl/editpass.php:53 ../../../../inc/tpl/eventlog.php:62
-#: ../../../../inc/tpl/install.php:92 ../../../../inc/tpl/install.php:93
-#: ../../../../inc/tpl/login.php:35 ../../../../inc/tpl/login.php:44
-#: ../../../../inc/tpl/passreset.php:51 ../../../../inc/tpl/request.php:52
-#: ../../../../inc/users.class.php:817 ../../../../inc/users.class.php:859
-#: ../../../../res/test.php:64
+#: ../../../../ajax/ajax_doLogin.php:93 ../../../../ajax/ajax_doLogin.php:100
+#: ../../../../ajax/ajax_doLogin.php:107 ../../../../ajax/ajax_doLogin.php:118
+#: ../../../../ajax/ajax_doLogin.php:128 ../../../../ajax/ajax_doLogin.php:180
+#: ../../../../inc/ApiTokens.class.php:190
+#: ../../../../inc/ApiTokens.class.php:308 ../../../../inc/Auth.class.php:108
+#: ../../../../inc/Init.class.php:517 ../../../../inc/UserBase.class.php:382
+#: ../../../../inc/UserBase.class.php:526 ../../../../res/test.php:64
+#: ../../../../web/SearchC.class.php:289
+#: ../../../../web/UsersMgmtC.class.php:392
+#: ../../../../inc/themes/classic/account.inc:70
+#: ../../../../inc/themes/classic/editpass.inc:21
+#: ../../../../inc/themes/classic/eventlog.inc:25
+#: ../../../../inc/themes/classic/info.inc:39
+#: ../../../../inc/themes/classic/install.inc:27
+#: ../../../../inc/themes/classic/install.inc:28
+#: ../../../../inc/themes/classic/login.inc:7
+#: ../../../../inc/themes/classic/login.inc:20
+#: ../../../../inc/themes/classic/mail.inc:47
+#: ../../../../inc/themes/classic/passreset.inc:17
+#: ../../../../inc/themes/classic/request.inc:17
+#: ../../../../inc/themes/classic/search.inc:50
+#: ../../../../inc/themes/classic/tokens.inc:8
+#: ../../../../inc/themes/material-blue/account.inc:80
+#: ../../../../inc/themes/material-blue/config.inc:344
+#: ../../../../inc/themes/material-blue/editpass.inc:22
+#: ../../../../inc/themes/material-blue/eventlog.inc:24
+#: ../../../../inc/themes/material-blue/info.inc:39
+#: ../../../../inc/themes/material-blue/login.inc:10
+#: ../../../../inc/themes/material-blue/login.inc:33
+#: ../../../../inc/themes/material-blue/mail.inc:61
+#: ../../../../inc/themes/material-blue/mail.inc:67
+#: ../../../../inc/themes/material-blue/passreset.inc:17
+#: ../../../../inc/themes/material-blue/request.inc:20
+#: ../../../../inc/themes/material-blue/search.inc:55
+#: ../../../../inc/themes/material-blue/tokens.inc:8
msgid "Usuario"
msgstr "Utilisateur"
-# "Wrong user/pass"
-#: ../../../../ajax/ajax_doLogin.php:80 ../../../../ajax/ajax_doLogin.php:94
-#: ../../../../ajax/ajax_doLogin.php:104
+#: ../../../../ajax/ajax_doLogin.php:96 ../../../../ajax/ajax_doLogin.php:110
+#: ../../../../ajax/ajax_doLogin.php:121
msgid "Usuario/Clave incorrectos"
msgstr "Utilisateur/Mot de passe incorrecte"
-# "Account expired"
-#: ../../../../ajax/ajax_doLogin.php:83 ../../../../ajax/ajax_doLogin.php:87
+#: ../../../../ajax/ajax_doLogin.php:99 ../../../../ajax/ajax_doLogin.php:103
msgid "Cuenta expirada"
msgstr "Compte expiré"
-# "The user have no associated groups"
-#: ../../../../ajax/ajax_doLogin.php:90
+#: ../../../../ajax/ajax_doLogin.php:106
msgid "El usuario no tiene grupos asociados"
msgstr "L'utilisateur n'a pas de groupe associé"
-# "Session start (MySQL)"
-#: ../../../../ajax/ajax_doLogin.php:96
-msgid "Inicio sesión (MySQL)"
-msgstr "Début de session (MySQL)"
-
-# "User disabled"
-#: ../../../../ajax/ajax_doLogin.php:110 ../../../../ajax/ajax_doLogin.php:114
+#: ../../../../ajax/ajax_doLogin.php:127 ../../../../ajax/ajax_doLogin.php:131
msgid "Usuario deshabilitado"
msgstr "Utilisateur désactivé"
-# "Error on retrieving user data from DB"
-#: ../../../../ajax/ajax_doLogin.php:119
+#: ../../../../ajax/ajax_doLogin.php:136
msgid "Error al obtener los datos del usuario de la BBDD"
msgstr ""
"Erreur pendant la récupération des données utilisateur à partir de la BDD"
-# "The master password not saved or is wrong"
-#: ../../../../ajax/ajax_doLogin.php:127
+#: ../../../../ajax/ajax_doLogin.php:146
msgid "La clave maestra no ha sido guardada o es incorrecta"
msgstr "Mot de passe maître non sauvegardé ou incorrecte"
-# "Invalid Master Password"
-#: ../../../../ajax/ajax_doLogin.php:134 ../../../../ajax/ajax_doLogin.php:137
+#: ../../../../ajax/ajax_doLogin.php:155 ../../../../ajax/ajax_doLogin.php:158
msgid "Clave maestra incorrecta"
msgstr "Mot de passe maître invalide"
-# "Group"
-#: ../../../../ajax/ajax_doLogin.php:158
-#: ../../../../ajax/ajax_getContent.php:115
-#: ../../../../inc/groups.class.php:155 ../../../../inc/groups.class.php:184
-#: ../../../../inc/groups.class.php:211 ../../../../inc/tpl/config.php:352
-#: ../../../../inc/tpl/users.php:109
+#: ../../../../ajax/ajax_doLogin.php:181
+#: ../../../../inc/ProfileBase.class.php:512
+#: ../../../../inc/ProfileBase.class.php:550
+#: ../../../../inc/ProfileBase.class.php:593
+#: ../../../../web/UsersMgmtC.class.php:89
+#: ../../../../inc/themes/classic/users.inc:37
+#: ../../../../inc/themes/material-blue/users.inc:43
+msgid "Perfil"
+msgstr "Profil"
+
+#: ../../../../ajax/ajax_doLogin.php:182 ../../../../inc/Groups.class.php:158
+#: ../../../../inc/Groups.class.php:259 ../../../../inc/Groups.class.php:375
+#: ../../../../web/UsersMgmtC.class.php:90
+#: ../../../../inc/themes/classic/ldap.inc:116
+#: ../../../../inc/themes/classic/users.inc:49
+#: ../../../../inc/themes/material-blue/ldap.inc:139
+#: ../../../../inc/themes/material-blue/ldap.inc:164
+#: ../../../../inc/themes/material-blue/users.inc:57
msgid "Grupo"
msgstr "Groupe"
-# "Event log cleared"
-#: ../../../../ajax/ajax_eventlog.php:43
-msgid "Registro de eventos vaciado"
-msgstr "Journal d'évènements nettoyé"
-
-# "Error on clearing event log"
-#: ../../../../ajax/ajax_eventlog.php:45
-msgid "Error al vaciar el registro de eventos"
-msgstr "Erreur pendant le nettoyage du journal d'évènements"
-
-# "Files management disabled"
-#: ../../../../ajax/ajax_files.php:44 ../../../../ajax/ajax_getFiles.php:36
+#: ../../../../ajax/ajax_files.php:45 ../../../../ajax/ajax_getFiles.php:39
msgid "Gestión de archivos deshabilitada"
msgstr "Gestion des fichiers désactivé"
-# "There are no allowed extensions"
-#: ../../../../ajax/ajax_files.php:63
-msgid "No hay extensiones permitidas"
-msgstr "Il n'y a pas d'extension permise"
-
-# "File type not allowed"
-#: ../../../../ajax/ajax_files.php:71 ../../../../inc/import.class.php:113
-msgid "Tipo de archivo no soportado"
-msgstr "Types de fichiers non supportés"
-
-# "Invalid file"
-#: ../../../../ajax/ajax_files.php:74
-msgid "Archivo inválido"
-msgstr "Fichier invalide"
-
-# "Internal error on reading file"
-#: ../../../../ajax/ajax_files.php:87 ../../../../ajax/ajax_files.php:99
-#: ../../../../ajax/ajax_files.php:103 ../../../../inc/import.class.php:124
-#: ../../../../inc/import.class.php:132
-msgid "Error interno al leer el archivo"
-msgstr "Erreur interne à la lecture du fichier"
-
-# "The file is bigger than"
-#: ../../../../ajax/ajax_files.php:91
-msgid "El archivo es mayor de "
-msgstr "Fichier plus gros que"
-
-# "Upload File"
-#: ../../../../ajax/ajax_files.php:98 ../../../../inc/files.class.php:52
+#: ../../../../ajax/ajax_files.php:59 ../../../../inc/Files.class.php:63
msgid "Subir Archivo"
msgstr "Charger Fichier"
-# "File saved"
-#: ../../../../ajax/ajax_files.php:107
+#: ../../../../ajax/ajax_files.php:68
+msgid "No hay extensiones permitidas"
+msgstr "Il n'y a pas d'extension permise"
+
+#: ../../../../ajax/ajax_files.php:79 ../../../../inc/FileImport.class.php:115
+msgid "Tipo de archivo no soportado"
+msgstr "Types de fichiers non supportés"
+
+#: ../../../../ajax/ajax_files.php:85
+msgid "Archivo inválido"
+msgstr "Fichier invalide"
+
+#: ../../../../ajax/ajax_files.php:101 ../../../../ajax/ajax_files.php:118
+#: ../../../../inc/FileImport.class.php:131
+#: ../../../../inc/FileImport.class.php:149
+#: ../../../../inc/FileImport.class.php:167
+msgid "Error interno al leer el archivo"
+msgstr "Erreur interne à la lecture du fichier"
+
+#: ../../../../ajax/ajax_files.php:108
+msgid "El archivo es mayor de "
+msgstr "Fichier plus gros que"
+
+#: ../../../../ajax/ajax_files.php:125
msgid "Archivo guardado"
msgstr "Fichier sauvegardé"
-# "Error on saving file"
-#: ../../../../ajax/ajax_files.php:109
+#: ../../../../ajax/ajax_files.php:130
msgid "No se pudo guardar el archivo"
msgstr "Erreur pendant la sauvegarde de fichier"
-# "Invalid file ID"
-#: ../../../../ajax/ajax_files.php:116 ../../../../ajax/ajax_files.php:174
+#: ../../../../ajax/ajax_files.php:140 ../../../../ajax/ajax_files.php:199
msgid "No es un ID de archivo válido"
msgstr "ID de fichier invalide"
-# "The file does not exist"
-#: ../../../../ajax/ajax_files.php:124 ../../../../inc/files.class.php:143
+#: ../../../../ajax/ajax_files.php:148
msgid "El archivo no existe"
msgstr "Fichier inexistant"
-# "Download File"
-#: ../../../../ajax/ajax_files.php:133 ../../../../ajax/ajax_getFiles.php:67
+#: ../../../../ajax/ajax_files.php:157
+#: ../../../../inc/themes/classic/files.inc:19
+#: ../../../../inc/themes/material-blue/files.inc:19
msgid "Descargar Archivo"
msgstr "Télécharger Fichier"
-# "ID"
-#: ../../../../ajax/ajax_files.php:134 ../../../../ajax/ajax_viewpass.php:81
-#: ../../../../inc/files.class.php:109 ../../../../inc/tpl/eventlog.php:53
+#: ../../../../ajax/ajax_files.php:158 ../../../../ajax/ajax_viewpass.php:69
+#: ../../../../inc/Files.class.php:112
+#: ../../../../inc/themes/classic/eventlog.inc:16
+#: ../../../../inc/themes/material-blue/eventlog.inc:15
msgid "ID"
msgstr "ID"
-# "File"
-#: ../../../../ajax/ajax_files.php:135 ../../../../inc/files.class.php:54
-#: ../../../../inc/files.class.php:110 ../../../../inc/tpl/migrate.php:110
+#: ../../../../ajax/ajax_files.php:159 ../../../../inc/Files.class.php:65
+#: ../../../../inc/Files.class.php:113
+#: ../../../../inc/themes/classic/import.inc:155
+#: ../../../../inc/themes/material-blue/import.inc:83
msgid "Archivo"
msgstr "Fichier"
-# "Type"
-#: ../../../../ajax/ajax_files.php:136 ../../../../inc/files.class.php:55
-#: ../../../../inc/files.class.php:111
+#: ../../../../ajax/ajax_files.php:160 ../../../../inc/Files.class.php:66
+#: ../../../../inc/Files.class.php:114
+#: ../../../../web/AccountsMgmtC.class.php:266
+#: ../../../../inc/themes/classic/customfields.inc:16
+#: ../../../../inc/themes/material-blue/customfields.inc:19
msgid "Tipo"
msgstr "Type"
-# "Size"
-#: ../../../../ajax/ajax_files.php:137 ../../../../inc/files.class.php:56
-#: ../../../../inc/files.class.php:112
+#: ../../../../ajax/ajax_files.php:161 ../../../../inc/Files.class.php:67
+#: ../../../../inc/Files.class.php:115
msgid "Tamaño"
msgstr "Taille"
-# "File deleted"
-#: ../../../../ajax/ajax_files.php:178
+#: ../../../../ajax/ajax_files.php:203
msgid "Archivo eliminado"
msgstr "Fichier supprimé"
-# "Error on file deletion"
-#: ../../../../ajax/ajax_files.php:180
+#: ../../../../ajax/ajax_files.php:208
msgid "Error al eliminar el archivo"
msgstr "Erreur pendant la supression du fichier"
-# "Incorrect parameters"
-#: ../../../../ajax/ajax_getContent.php:42
+#: ../../../../ajax/ajax_getContent.php:41
+#: ../../../../inc/ApiRequest.class.php:55
+#: ../../../../inc/CustomFieldDef.class.php:38
+#: ../../../../inc/CustomFields.class.php:48
msgid "Parámetros incorrectos"
msgstr "Paramètres Incorrects"
-# "Users Management"
-#: ../../../../ajax/ajax_getContent.php:100 ../../../../inc/tpl/main.php:54
-msgid "Gestión de Usuarios"
-msgstr "Gestion des Utilisateurs"
-
-# "Groups Management"
-#: ../../../../ajax/ajax_getContent.php:101
-msgid "Gestión de Grupos"
-msgstr "Gestion des Groupes"
-
-# "Profiles Management"
-#: ../../../../ajax/ajax_getContent.php:102
-msgid "Gestión de Perfiles"
-msgstr "Gestion des Profils"
-
-# "Name"
-#: ../../../../ajax/ajax_getContent.php:112
-#: ../../../../ajax/ajax_getContent.php:158
-#: ../../../../ajax/ajax_getContent.php:190
-#: ../../../../ajax/ajax_getContent.php:243
-#: ../../../../ajax/ajax_getContent.php:275
-#: ../../../../ajax/ajax_search.php:125 ../../../../ajax/ajax_search.php:238
-#: ../../../../inc/tpl/accounts.php:173 ../../../../inc/tpl/categories.php:40
-#: ../../../../inc/tpl/customers.php:40 ../../../../inc/tpl/editpass.php:40
-#: ../../../../inc/tpl/groups.php:39 ../../../../inc/tpl/profiles.php:39
-#: ../../../../inc/tpl/request.php:38 ../../../../inc/tpl/users.php:66
-msgid "Nombre"
-msgstr "Nom"
-
-# "Login"
-#: ../../../../ajax/ajax_getContent.php:113
-#: ../../../../ajax/ajax_passReset.php:74 ../../../../inc/tpl/users.php:83
-#: ../../../../inc/users.class.php:897 ../../../../inc/users.class.php:924
-msgid "Login"
-msgstr "Login"
-
-# "Properties"
-#: ../../../../ajax/ajax_getContent.php:116
-msgid "Propiedades"
-msgstr "Propriétés"
-
-# "Application Admin"
-#: ../../../../ajax/ajax_getContent.php:122 ../../../../inc/tpl/main.php:30
-msgid "Admin Aplicación"
-msgstr "Admin Application"
-
-# "Account Admin"
-#: ../../../../ajax/ajax_getContent.php:123
-msgid "Admin Cuentas"
-msgstr "Admin Comptes"
-
-# "LDAP User"
-#: ../../../../ajax/ajax_getContent.php:124 ../../../../inc/tpl/users.php:91
-msgid "Usuario de LDAP"
-msgstr "Utilisateur LDAP"
-
-# "Disabled"
-#: ../../../../ajax/ajax_getContent.php:125 ../../../../inc/tpl/users.php:171
-msgid "Deshabilitado"
-msgstr "Désactivé"
-
-# "View User Details"
-#: ../../../../ajax/ajax_getContent.php:136
-msgid "Ver Detalles de Usuario"
-msgstr "Voir détails du compte"
-
-# "Delete User"
-#: ../../../../ajax/ajax_getContent.php:138
-#: ../../../../inc/users.class.php:923
-msgid "Eliminar Usuario"
-msgstr "Supprimer Utilisateur"
-
-# "Change User's Password"
-#: ../../../../ajax/ajax_getContent.php:139
-msgid "Cambiar Clave de Usuario"
-msgstr "Changer mot de passe utilisateur"
-
-# "Description"
-#: ../../../../ajax/ajax_getContent.php:158
-#: ../../../../ajax/ajax_getContent.php:243
-#: ../../../../ajax/ajax_getContent.php:275
-#: ../../../../ajax/ajax_sendRequest.php:62
-#: ../../../../inc/tpl/categories.php:48 ../../../../inc/tpl/customers.php:48
-#: ../../../../inc/tpl/eventlog.php:68 ../../../../inc/tpl/groups.php:46
-msgid "Descripción"
-msgstr "Description"
-
-# "Delete Group"
-#: ../../../../ajax/ajax_getContent.php:169
-#: ../../../../inc/groups.class.php:210
-msgid "Eliminar Grupo"
-msgstr "Supprimer Groupe"
-
-# "Categories Management"
-#: ../../../../ajax/ajax_getContent.php:233
-msgid "Gestión de Categorías"
-msgstr "Gestion des catégories"
-
-# "Customers Management"
-#: ../../../../ajax/ajax_getContent.php:234
-msgid "Gestión de Clientes"
-msgstr "Gestion des Clients"
-
-# "Delete Category"
-#: ../../../../ajax/ajax_getContent.php:254
-#: ../../../../inc/category.class.php:135
-msgid "Eliminar Categoría"
-msgstr "Supprimer Catégorie"
-
-# "Delete Customer"
-#: ../../../../ajax/ajax_getContent.php:286
-#: ../../../../inc/customer.class.php:131
-msgid "Eliminar Cliente"
-msgstr "Supprimer Client"
-
-# "Configuration"
-#: ../../../../ajax/ajax_getContent.php:319
-#: ../../../../inc/config.class.php:121 ../../../../inc/config.class.php:149
-#: ../../../../inc/tpl/main.php:56 ../../../../inc/tpl/profiles.php:71
-msgid "Configuración"
-msgstr "Configuration"
-
-# "Master Password"
-#: ../../../../ajax/ajax_getContent.php:320
-#: ../../../../inc/tpl/install.php:112 ../../../../inc/tpl/install.php:117
-#: ../../../../inc/tpl/install.php:118 ../../../../inc/tpl/login.php:40
-#: ../../../../inc/tpl/login.php:48 ../../../../inc/tpl/profiles.php:76
-msgid "Clave Maestra"
-msgstr "Mot de passe Maître"
-
-# "Backup"
-#: ../../../../ajax/ajax_getContent.php:321
-msgid "Copia de Seguridad"
-msgstr "Sauvegarde de sécurité"
-
-# "Import accounts from external sources"
-#: ../../../../ajax/ajax_getContent.php:322
-msgid "Importar cuentas desde fuentes externas"
-msgstr "Importer les comptes à partir d'une source externe"
-
-# "Import Accounts"
-#: ../../../../ajax/ajax_getContent.php:322
-#: ../../../../inc/import.class.php:81 ../../../../inc/import.class.php:163
-#: ../../../../inc/migrate.class.php:402
-msgid "Importar Cuentas"
-msgstr "Importer Comptes"
-
-# "Delete File"
-#: ../../../../ajax/ajax_getFiles.php:63 ../../../../inc/files.class.php:108
-msgid "Eliminar Archivo"
-msgstr "Supprimer Fichier"
-
-# "View File"
-#: ../../../../ajax/ajax_getFiles.php:70
-msgid "Ver Archivo"
-msgstr "Voir Fichier"
-
-# "Confirm account import"
-#: ../../../../ajax/ajax_migrate.php:1
+#: ../../../../ajax/ajax_migrate.php:55
msgid "Confirmar la importación de cuentas"
msgstr "Confirmer l'importation des comptes"
-# "A connection username is needed"
-#: ../../../../ajax/ajax_migrate.php:1
+#: ../../../../ajax/ajax_migrate.php:57
msgid "Es necesario un usuario de conexión"
msgstr "Nom d'utilisateur de connexion requis"
-# "The connection password is needed"
-#: ../../../../ajax/ajax_migrate.php:1
+#: ../../../../ajax/ajax_migrate.php:59
msgid "Es necesaria una clave de conexión"
msgstr "Mot de passe de connexion requis"
-# "A database name is needed"
-#: ../../../../ajax/ajax_migrate.php:1
+#: ../../../../ajax/ajax_migrate.php:61
msgid "Es necesario el nombre de la BBDD"
msgstr "Nom de base de données requis"
-# "A host name is needed"
-#: ../../../../ajax/ajax_migrate.php:1
+#: ../../../../ajax/ajax_migrate.php:63
msgid "Es necesario un nombre de host"
msgstr "Nom d'hôte requis"
-# "Password Recovery"
-#: ../../../../ajax/ajax_passReset.php:44
+#: ../../../../ajax/ajax_passReset.php:47
+#: ../../../../ajax/ajax_passReset.php:50
msgid "Recuperación de Clave"
msgstr "Recupération de Mot de passe"
-# "Requested for"
-#: ../../../../ajax/ajax_passReset.php:48
-#: ../../../../ajax/ajax_passReset.php:55
+#: ../../../../ajax/ajax_passReset.php:53
+#: ../../../../ajax/ajax_passReset.php:58
msgid "Solicitado para"
msgstr "Requis pour"
-# "Request sent"
-#: ../../../../ajax/ajax_passReset.php:52
-#: ../../../../ajax/ajax_sendRequest.php:71
+#: ../../../../ajax/ajax_passReset.php:55
+#: ../../../../ajax/ajax_sendRequest.php:75
msgid "Solicitud enviada"
msgstr "Requête envoyée"
-# "You will receive an email to complete the request in short."
-#: ../../../../ajax/ajax_passReset.php:52
+#: ../../../../ajax/ajax_passReset.php:55
msgid "En breve recibirá un correo para completar la solicitud."
msgstr "Vous recevrez un courriel de confirmation sous peu."
-# "The request cannot be done. Please contact to the administrator"
-#: ../../../../ajax/ajax_passReset.php:59
+#: ../../../../ajax/ajax_passReset.php:60
msgid "No se ha podido realizar la solicitud. Consulte con el administrador."
msgstr "La requête ne peut aboutir. Veuillez contacter l'administrateur"
-# "Edit User Password"
-#: ../../../../ajax/ajax_passReset.php:73 ../../../../inc/users.class.php:896
+#: ../../../../ajax/ajax_passReset.php:72
+#: ../../../../inc/UserBase.class.php:568
+#: ../../../../inc/UserUtil.class.php:664
msgid "Modificar Clave Usuario"
msgstr "Modifier Mot de passe Utilisateur"
-# "The password is incorrect or do not match"
-#: ../../../../ajax/ajax_passReset.php:85
+#: ../../../../ajax/ajax_passReset.php:72
+#: ../../../../inc/UserBase.class.php:568
+#: ../../../../inc/UserBase.class.php:592
+#: ../../../../inc/UserUtil.class.php:664
+#: ../../../../web/UsersMgmtC.class.php:88
+#: ../../../../inc/themes/classic/users.inc:21
+#: ../../../../inc/themes/material-blue/users.inc:24
+msgid "Login"
+msgstr "Login"
+
+#: ../../../../ajax/ajax_passReset.php:80
msgid "La clave es incorrecta o no coincide"
msgstr "Le mot de passe est incorrect ou ne correspond pas"
-# "No records found"
-#: ../../../../ajax/ajax_search.php:108 ../../../../inc/tpl/eventlog.php:42
-msgid "No se encontraron registros"
-msgstr "Aucun enregistrement trouvé"
-
-# "Sort by Customer"
-#: ../../../../ajax/ajax_search.php:122
-msgid "Ordenar por Cliente"
-msgstr "Trié par Client"
-
-# "Customer"
-#: ../../../../ajax/ajax_search.php:122 ../../../../ajax/ajax_search.php:233
-#: ../../../../ajax/ajax_sendRequest.php:61
-#: ../../../../inc/account.class.php:370 ../../../../inc/account.class.php:580
-#: ../../../../inc/account.class.php:603 ../../../../inc/account.class.php:879
-#: ../../../../inc/customer.class.php:59
-#: ../../../../inc/customer.class.php:106
-#: ../../../../inc/customer.class.php:132 ../../../../inc/tpl/accounts.php:189
-#: ../../../../inc/tpl/editpass.php:44 ../../../../inc/tpl/request.php:42
-msgid "Cliente"
-msgstr "Client"
-
-# "Sort by Name"
-#: ../../../../ajax/ajax_search.php:125
-msgid "Ordenar por Nombre"
-msgstr "Trié par Nom"
-
-# "Sort by Category"
-#: ../../../../ajax/ajax_search.php:128
-msgid "Ordenar por Categoría"
-msgstr "Trié par Catégorie"
-
-# "Category"
-#: ../../../../ajax/ajax_search.php:128 ../../../../ajax/ajax_search.php:243
-#: ../../../../inc/category.class.php:80
-#: ../../../../inc/category.class.php:136
-#: ../../../../inc/category.class.php:184 ../../../../inc/tpl/accounts.php:206
-msgid "Categoría"
-msgstr "Catégorie"
-
-# "Sort by Username"
-#: ../../../../ajax/ajax_search.php:131
-msgid "Ordenar por Usuario"
-msgstr "Trié par Nom d'utilisateur"
-
-# "Sort by URL / IP"
-#: ../../../../ajax/ajax_search.php:134
-msgid "Ordenar por URL / IP"
-msgstr "Trié par URL / IP"
-
-# "URL / IP"
-#: ../../../../ajax/ajax_search.php:134 ../../../../ajax/ajax_search.php:255
-#: ../../../../inc/tpl/accounts.php:218 ../../../../inc/tpl/editpass.php:48
-#: ../../../../inc/tpl/request.php:47
-msgid "URL / IP"
-msgstr "URL / IP"
-
-# "Search in Wiki"
-#: ../../../../ajax/ajax_search.php:173
-msgid "Buscar en Wiki"
-msgstr "Chercher dans Wiki"
-
-# "Account Details"
-#: ../../../../ajax/ajax_search.php:181 ../../../../ajax/ajax_search.php:289
-#: ../../../../inc/tpl/accounts.php:80 ../../../../inc/tpl/accounts.php:91
-msgid "Detalles de Cuenta"
-msgstr "Détails du Compte"
-
-# "Open link to"
-#: ../../../../ajax/ajax_search.php:199 ../../../../ajax/ajax_search.php:201
-msgid "Abrir enlace a"
-msgstr "Ouvrir le lien vers"
-
-# "Notes"
-#: ../../../../ajax/ajax_search.php:262 ../../../../inc/tpl/accounts.php:271
-#: ../../../../inc/tpl/users.php:154
-msgid "Notas"
-msgstr "Notes"
-
-# "Attachments"
-#: ../../../../ajax/ajax_search.php:266
-msgid "Archivos adjuntos"
-msgstr "Fichiers joints"
-
-# "Link to Wiki"
-#: ../../../../ajax/ajax_search.php:277
-msgid "Enlace a Wiki"
-msgstr "Lien vers Wiki"
-
-# "View password"
-#: ../../../../ajax/ajax_search.php:293 ../../../../ajax/ajax_viewpass.php:80
-#: ../../../../inc/tpl/accounts.php:528 ../../../../inc/tpl/profiles.php:50
-msgid "Ver Clave"
-msgstr "Voir Mot de passe"
-
-# "Copy Password to Clipboard"
-#: ../../../../ajax/ajax_search.php:294 ../../../../ajax/ajax_search.php:346
-#: ../../../../inc/tpl/accounts.php:533 ../../../../inc/tpl/accounts.php:624
-msgid "Copiar Clave en Portapapeles"
-msgstr "Copier le mot de passe dans le presse papier"
-
-# "More Actions"
-#: ../../../../ajax/ajax_search.php:298 ../../../../inc/html.class.php:545
-msgid "Más Acciones"
-msgstr "Plus d'Actions"
-
-# "Edit Account"
-#: ../../../../ajax/ajax_search.php:302 ../../../../inc/tpl/accounts.php:556
-msgid "Modificar Cuenta"
-msgstr "Modifier Compte"
-
-# "Copy Account"
-#: ../../../../ajax/ajax_search.php:306 ../../../../inc/tpl/accounts.php:53
-msgid "Copiar Cuenta"
-msgstr "Copier Compte"
-
-# "Delete Account"
-#: ../../../../ajax/ajax_search.php:310 ../../../../inc/account.class.php:602
-#: ../../../../inc/tpl/accounts.php:73 ../../../../inc/tpl/accounts.php:568
-msgid "Eliminar Cuenta"
-msgstr "Supprimer Compte"
-
-# "Request Modification"
-#: ../../../../ajax/ajax_search.php:317 ../../../../inc/tpl/accounts.php:561
-msgid "Solicitar Modificación"
-msgstr "Demande Modification"
-
-# "Password Copied to Clipboard"
-#: ../../../../ajax/ajax_search.php:350 ../../../../inc/tpl/accounts.php:628
-msgid "Clave Copiada al Portapapeles"
-msgstr "Mot de passe copié dans le presse papier"
-
-# "A description is needed"
-#: ../../../../ajax/ajax_sendRequest.php:45
+#: ../../../../ajax/ajax_sendRequest.php:48
msgid "Es necesaria una descripción"
msgstr "Description requise"
-# "Request for Account Modification"
-#: ../../../../ajax/ajax_sendRequest.php:58
+#: ../../../../ajax/ajax_sendRequest.php:61
msgid "Solicitud de Modificación de Cuenta"
msgstr "Demande de modification de Compte"
-# "Requester"
-#: ../../../../ajax/ajax_sendRequest.php:59
+#: ../../../../ajax/ajax_sendRequest.php:62
msgid "Solicitante"
msgstr "Demandeur"
-# "Account"
-#: ../../../../ajax/ajax_sendRequest.php:60
-#: ../../../../ajax/ajax_viewpass.php:82 ../../../../inc/account.class.php:371
-#: ../../../../inc/account.class.php:581 ../../../../inc/account.class.php:604
-#: ../../../../inc/account.class.php:880 ../../../../inc/files.class.php:53
+#: ../../../../ajax/ajax_sendRequest.php:63
+#: ../../../../ajax/ajax_viewpass.php:70 ../../../../inc/Account.class.php:165
+#: ../../../../inc/Account.class.php:219 ../../../../inc/Account.class.php:402
+#: ../../../../inc/Account.class.php:425 ../../../../inc/Account.class.php:667
+#: ../../../../inc/Files.class.php:64
msgid "Cuenta"
msgstr "Compte"
-# "Error on sending request"
-#: ../../../../ajax/ajax_sendRequest.php:74
+#: ../../../../ajax/ajax_sendRequest.php:64
+#: ../../../../inc/Account.class.php:164 ../../../../inc/Account.class.php:218
+#: ../../../../inc/Account.class.php:401 ../../../../inc/Account.class.php:424
+#: ../../../../inc/Account.class.php:666 ../../../../inc/Customer.class.php:65
+#: ../../../../inc/Customer.class.php:115
+#: ../../../../inc/Customer.class.php:163
+#: ../../../../web/SearchC.class.php:271
+#: ../../../../inc/themes/classic/account.inc:23
+#: ../../../../inc/themes/classic/editpass.inc:12
+#: ../../../../inc/themes/classic/request.inc:9
+#: ../../../../inc/themes/classic/search.inc:19
+#: ../../../../inc/themes/material-blue/account.inc:29
+#: ../../../../inc/themes/material-blue/editpass.inc:13
+#: ../../../../inc/themes/material-blue/request.inc:10
+#: ../../../../inc/themes/material-blue/search.inc:24
+msgid "Cliente"
+msgstr "Client"
+
+#: ../../../../ajax/ajax_sendRequest.php:65
+#: ../../../../web/AccountsMgmtC.class.php:79
+#: ../../../../web/AccountsMgmtC.class.php:138
+#: ../../../../web/UsersMgmtC.class.php:187
+#: ../../../../inc/themes/classic/categories.inc:16
+#: ../../../../inc/themes/classic/customers.inc:16
+#: ../../../../inc/themes/classic/eventlog.inc:31
+#: ../../../../inc/themes/classic/groups.inc:16
+#: ../../../../inc/themes/material-blue/categories.inc:20
+#: ../../../../inc/themes/material-blue/customers.inc:20
+#: ../../../../inc/themes/material-blue/eventlog.inc:30
+#: ../../../../inc/themes/material-blue/groups.inc:20
+msgid "Descripción"
+msgstr "Description"
+
+#: ../../../../ajax/ajax_sendRequest.php:78
msgid "Error al enviar la solicitud"
msgstr "Erreur à l'envoie de la demande"
-# "You don't have permission to do this operation"
-#: ../../../../ajax/ajax_usrpass.php:41
-msgid "No tiene permisos para realizar esta operación"
-msgstr "Vous n'avez pas les permissions pour effectuer cette opération"
+#: ../../../../ajax/ajax_userPrefsSave.php:74
+msgid "Error al actualizar preferencias"
+msgstr ""
-# "Password Change"
-#: ../../../../ajax/ajax_usrpass.php:48 ../../../../inc/auth.class.php:194
-#: ../../../../inc/tpl/users.php:175
-msgid "Cambio de Clave"
-msgstr "Changement de Mot de passe"
+#: ../../../../ajax/ajax_userPrefsSave.php:77
+msgid "Preferencias actualizadas"
+msgstr "Préférences mises à jour"
-# "Generate random password"
-#: ../../../../ajax/ajax_usrpass.php:57 ../../../../inc/tpl/accounts.php:258
-#: ../../../../inc/tpl/editpass.php:64 ../../../../inc/tpl/users.php:139
-msgid "Generar clave aleatoria"
-msgstr "Générer un mot de passe aléatoire"
-
-# "Password (repeat)"
-#: ../../../../ajax/ajax_usrpass.php:63 ../../../../ajax/ajax_usrpass.php:65
-#: ../../../../inc/tpl/accounts.php:263 ../../../../inc/tpl/editpass.php:69
-#: ../../../../inc/tpl/users.php:145
-msgid "Clave (repetir)"
-msgstr "Mot de passe (répéter)"
-
-# "Password strength level"
-#: ../../../../ajax/ajax_usrpass.php:66 ../../../../inc/tpl/accounts.php:266
-#: ../../../../inc/tpl/editpass.php:71 ../../../../inc/tpl/install.php:107
-#: ../../../../inc/tpl/install.php:122 ../../../../inc/tpl/masterpass.php:64
-#: ../../../../inc/tpl/passreset.php:65 ../../../../inc/tpl/passreset.php:73
-#: ../../../../inc/tpl/users.php:148
-msgid "Nivel de fortaleza de la clave"
-msgstr "Niveau de sécurité du mot de passe"
-
-# "Save"
-#: ../../../../ajax/ajax_usrpass.php:82 ../../../../ajax/ajax_usrpass.php:83
-#: ../../../../inc/tpl/accounts.php:542 ../../../../inc/tpl/categories.php:68
-#: ../../../../inc/tpl/config.php:522 ../../../../inc/tpl/customers.php:68
-#: ../../../../inc/tpl/editpass.php:89 ../../../../inc/tpl/groups.php:64
-#: ../../../../inc/tpl/masterpass.php:114 ../../../../inc/tpl/profiles.php:138
-#: ../../../../inc/tpl/users.php:220
-msgid "Guardar"
-msgstr "Sauver"
-
-# "You don't have permission to access to this account"
-#: ../../../../ajax/ajax_viewpass.php:52 ../../../../ajax/ajax_viewpass.php:58
-#: ../../../../inc/html.class.php:425
-msgid "No tiene permisos para acceder a esta cuenta"
-msgstr "Vous n'avez pas les permissions pour accéder à ce compte"
-
-# "The master password does not match"
-#: ../../../../ajax/ajax_viewpass.php:61
+#: ../../../../ajax/ajax_viewpass.php:54
msgid "La clave maestra no coincide"
msgstr "Le mot de passe maître ne correspond pas"
-# "Unable to access to this file directly"
-#: ../../../../inc/account.class.php:26 ../../../../inc/acl.class.php:27
-#: ../../../../inc/auth.class.php:27 ../../../../inc/backup.class.php:26
-#: ../../../../inc/category.class.php:27 ../../../../inc/common.class.php:26
-#: ../../../../inc/config.class.php:26 ../../../../inc/crypt.class.php:26
-#: ../../../../inc/customer.class.php:27 ../../../../inc/db.class.php:27
-#: ../../../../inc/files.class.php:27 ../../../../inc/groups.class.php:27
-#: ../../../../inc/html.class.php:27 ../../../../inc/import.class.php:27
-#: ../../../../inc/init.php:26 ../../../../inc/installer.class.php:27
-#: ../../../../inc/keepassimport.class.php:27
-#: ../../../../inc/keepassximport.class.php:27
-#: ../../../../inc/ldap.class.php:27 ../../../../inc/log.class.php:26
-#: ../../../../inc/migrate.class.php:26 ../../../../inc/profiles.class.php:27
-#: ../../../../inc/tpl/accounts.php:26 ../../../../inc/tpl/backup.php:26
-#: ../../../../inc/tpl/categories.php:26 ../../../../inc/tpl/config.php:26
-#: ../../../../inc/tpl/customers.php:26 ../../../../inc/tpl/editpass.php:25
-#: ../../../../inc/tpl/eventlog.php:26 ../../../../inc/tpl/groups.php:26
-#: ../../../../inc/tpl/login.php:26 ../../../../inc/tpl/main.php:26
-#: ../../../../inc/tpl/masterpass.php:26 ../../../../inc/tpl/migrate.php:26
-#: ../../../../inc/tpl/profiles.php:26 ../../../../inc/tpl/request.php:25
-#: ../../../../inc/tpl/search.php:26 ../../../../inc/tpl/users.php:26
-#: ../../../../inc/upgrade.class.php:27 ../../../../inc/users.class.php:27
-#: ../../../../inc/util.class.php:26 ../../../../inc/util.class.php:293
+#: ../../../../ajax/ajax_viewpass.php:58
+#: ../../../../inc/Controller.class.php:166
+msgid "No tiene permisos para acceder a esta cuenta"
+msgstr "Vous n'avez pas les permissions pour accéder à ce compte"
+
+#: ../../../../ajax/ajax_viewpass.php:68 ../../../../inc/Acl.class.php:133
+#: ../../../../inc/themes/classic/account.inc:379
+#: ../../../../inc/themes/classic/profiles.inc:23
+#: ../../../../inc/themes/classic/search.inc:100
+#: ../../../../inc/themes/material-blue/account.inc:419
+#: ../../../../inc/themes/material-blue/profiles.inc:35
+#: ../../../../inc/themes/material-blue/search.inc:113
+msgid "Ver Clave"
+msgstr "Voir Mot de passe"
+
+#: ../../../../ajax/ajax_viewpass.php:79
+msgid "Clave de Cuenta"
+msgstr "Mot de passe du compte"
+
+#: ../../../../api.php:56
+msgid "Ayuda Parámetros"
+msgstr ""
+
+#: ../../../../inc/Account.class.php:28
+#: ../../../../inc/AccountBase.class.php:28
+#: ../../../../inc/AccountHistory.class.php:28
+#: ../../../../inc/AccountInterface.class.php:28
+#: ../../../../inc/AccountSearch.class.php:28 ../../../../inc/Acl.class.php:29
+#: ../../../../inc/Api.class.php:30 ../../../../inc/ApiRequest.class.php:28
+#: ../../../../inc/ApiTokens.class.php:28 ../../../../inc/Auth.class.php:29
+#: ../../../../inc/Auth2FA.class.php:32 ../../../../inc/Backup.class.php:28
+#: ../../../../inc/Category.class.php:29 ../../../../inc/Common.class.php:28
+#: ../../../../inc/Config.class.php:28 ../../../../inc/Controller.class.php:31
+#: ../../../../inc/Crypt.class.php:28 ../../../../inc/CsvImport.class.php:28
+#: ../../../../inc/CsvImportBase.class.php:28
+#: ../../../../inc/Customer.class.php:29 ../../../../inc/DB.class.php:28
+#: ../../../../inc/DBConnectionFactory.class.php:30
+#: ../../../../inc/FileImport.class.php:28 ../../../../inc/Files.class.php:29
+#: ../../../../inc/Groups.class.php:29 ../../../../inc/Html.class.php:28
+#: ../../../../inc/ImageUtil.class.php:28 ../../../../inc/Import.class.php:29
+#: ../../../../inc/ImportBase.class.php:28 ../../../../inc/Init.class.php:30
+#: ../../../../inc/Installer.class.php:29
+#: ../../../../inc/KeepassImport.class.php:28
+#: ../../../../inc/KeepassXImport.class.php:28
+#: ../../../../inc/Ldap.class.php:29 ../../../../inc/LdapADS.class.php:28
+#: ../../../../inc/Log.class.php:28 ../../../../inc/Migrate.class.php:28
+#: ../../../../inc/Profile.class.php:29
+#: ../../../../inc/ProfileBase.class.php:28
+#: ../../../../inc/Request.class.php:111 ../../../../inc/Session.class.php:28
+#: ../../../../inc/SyspassImport.class.php:28
+#: ../../../../inc/Upgrade.class.php:29 ../../../../inc/User.class.php:28
+#: ../../../../inc/UserLdap.class.php:28
+#: ../../../../inc/UserPreferences.class.php:28
+#: ../../../../inc/UserUtil.class.php:28 ../../../../inc/Util.class.php:31
+#: ../../../../inc/XmlImport.class.php:28
+#: ../../../../inc/XmlImportBase.class.php:28
+#: ../../../../web/AccountC.class.php:38
+#: ../../../../web/AccountsMgmtC.class.php:32
+#: ../../../../web/ConfigC.class.php:31 ../../../../web/EventlogC.class.php:28
+#: ../../../../web/SearchC.class.php:30
+#: ../../../../web/UsersMgmtC.class.php:39
+#: ../../../../web/UsersPrefsC.class.php:32
msgid "No es posible acceder directamente a este archivo"
msgstr "Impossible d'accéder directement à ce fichier"
-# "Error on updating history"
-#: ../../../../inc/account.class.php:325 ../../../../inc/account.class.php:855
+#: ../../../../inc/Account.class.php:112 ../../../../inc/Account.class.php:185
+#: ../../../../inc/Account.class.php:636
msgid "Error al actualizar el historial"
msgstr "Erreur pendant l'actualisation de l'historique"
-# "Update Account"
-#: ../../../../inc/account.class.php:331
+#: ../../../../inc/Account.class.php:117
msgid "Actualizar Cuenta"
msgstr "Actualiser Compte"
-# "Error on updating secondary groups"
-#: ../../../../inc/account.class.php:334 ../../../../inc/account.class.php:562
+#: ../../../../inc/Account.class.php:120 ../../../../inc/Account.class.php:383
msgid "Error al actualizar los grupos secundarios"
msgstr "Erreur pendant l'actualisation des groupes secondaires"
-# "Error on updating account's users"
-#: ../../../../inc/account.class.php:340 ../../../../inc/account.class.php:570
+#: ../../../../inc/Account.class.php:126 ../../../../inc/Account.class.php:391
msgid "Error al actualizar los usuarios de la cuenta"
msgstr "Erreur pendant la modification des comptes utilisateurs"
-# "Account Restore"
-#: ../../../../inc/account.class.php:345
+#: ../../../../inc/Account.class.php:217
msgid "Restaurar Cuenta"
msgstr "Restaurer Compte"
-# "New Account"
-#: ../../../../inc/account.class.php:579 ../../../../inc/tpl/accounts.php:47
-#: ../../../../inc/tpl/main.php:53
+#: ../../../../inc/Account.class.php:326
+#: ../../../../inc/AccountHistory.class.php:343
+#: ../../../../inc/AccountHistory.class.php:505
+msgid "No se pudieron obtener los datos de la cuenta"
+msgstr "Erreur lors de la récupération des données du compte"
+
+#: ../../../../inc/Account.class.php:400 ../../../../inc/Acl.class.php:129
+#: ../../../../web/AccountC.class.php:147 ../../../../web/MainC.class.php:161
msgid "Nueva Cuenta"
msgstr "Nouveau Compte"
-# "ERROR: Operation failed"
-#: ../../../../inc/account.class.php:597
+#: ../../../../inc/Account.class.php:418
msgid "ERROR: Error en la operación."
msgstr "ERREUR: Echec de l'opération"
-# "Error on deleting account's groups"
-#: ../../../../inc/account.class.php:614
+#: ../../../../inc/Account.class.php:423 ../../../../inc/Acl.class.php:134
+#: ../../../../web/AccountC.class.php:352
+#: ../../../../inc/themes/classic/account.inc:366
+#: ../../../../inc/themes/classic/search.inc:127
+#: ../../../../inc/themes/material-blue/account.inc:413
+#: ../../../../inc/themes/material-blue/search.inc:142
+msgid "Eliminar Cuenta"
+msgstr "Supprimer Compte"
+
+#: ../../../../inc/Account.class.php:436
msgid "Error al eliminar grupos asociados a la cuenta"
msgstr "Erreur pendant la suppression du groupe du compte"
-# "Error on deleting account's users"
-#: ../../../../inc/account.class.php:618
+#: ../../../../inc/Account.class.php:440
msgid "Error al eliminar usuarios asociados a la cuenta"
msgstr "Erreur pendant la suppression des utilisateurs du compte"
-# "Error on deleting account's files"
-#: ../../../../inc/account.class.php:622
+#: ../../../../inc/Account.class.php:444
msgid "Error al eliminar archivos asociados a la cuenta"
msgstr "Erreur pendant la supression des fichiers du compte"
-# "Start"
-#: ../../../../inc/account.class.php:750 ../../../../inc/account.class.php:904
+#: ../../../../inc/Account.class.php:498
+#: ../../../../inc/AccountHistory.class.php:124
+#: ../../../../inc/XmlImport.class.php:62
msgid "Inicio"
msgstr "Début"
-# "Error on encryption module"
-#: ../../../../inc/account.class.php:758 ../../../../inc/account.class.php:912
+#: ../../../../inc/Account.class.php:503
+#: ../../../../inc/AccountHistory.class.php:130
msgid "Error en el módulo de encriptación"
msgstr "Erreur dans le module d'encryption"
-# "Error on retrieving accounts' passwords"
-#: ../../../../inc/account.class.php:766 ../../../../inc/account.class.php:920
+#: ../../../../inc/Account.class.php:511
+#: ../../../../inc/AccountHistory.class.php:138
msgid "Error al obtener las claves de las cuentas"
msgstr "Erreur pendant la récupération des mot de passe des comptes"
-# "Error on updating account's password"
-#: ../../../../inc/account.class.php:792
+#: ../../../../inc/Account.class.php:527
+#: ../../../../inc/AccountHistory.class.php:160
+msgid "Clave de cuenta vacía"
+msgstr "Le mot du passe du compte est vide"
+
+#: ../../../../inc/Account.class.php:532
+#: ../../../../inc/AccountHistory.class.php:165
+msgid "IV de encriptación incorrecto"
+msgstr ""
+
+#: ../../../../inc/Account.class.php:541
+#: ../../../../inc/AccountHistory.class.php:174
+msgid "No es posible desencriptar la clave de la cuenta"
+msgstr "Impossible de décrypter le mot de passe du compte"
+
+#: ../../../../inc/Account.class.php:547
msgid "Fallo al actualizar la clave de la cuenta"
msgstr "Erreur à la mise à jour des mots de passe des comptes"
-# "Accounts updated:"
-#: ../../../../inc/account.class.php:804
-msgid "Cuentas actualizadas:"
-msgstr "Comptes actualisés:"
+#: ../../../../inc/Account.class.php:561
+msgid "Cuentas actualizadas"
+msgstr "Comptes à jour"
-# "End"
-#: ../../../../inc/account.class.php:809 ../../../../inc/account.class.php:968
+#: ../../../../inc/Account.class.php:566
+#: ../../../../inc/AccountHistory.class.php:199
msgid "Fin"
msgstr "Fin"
-# "Update Password"
-#: ../../../../inc/account.class.php:878
+#: ../../../../inc/Account.class.php:665
msgid "Modificar Clave"
msgstr "Modifier Mot de passe"
-# "Update Master Password (H)"
-#: ../../../../inc/account.class.php:903
+#: ../../../../inc/Account.class.php:700
+msgid "No se pudieron obtener los datos de las cuentas"
+msgstr "Il n'était pas possible de récupérer les données des comptes"
+
+#: ../../../../inc/AccountHistory.class.php:123
msgid "Actualizar Clave Maestra (H)"
msgstr "Mettre à jour le Mot de Passe Maître (H)"
-# "The record's master password does not match"
-#: ../../../../inc/account.class.php:934
+#: ../../../../inc/AccountHistory.class.php:155
msgid "La clave maestra del registro no coincide"
msgstr "Le mot de passe maître de l'enregistrement ne correspond pas"
-# "Error on updating history's master password"
-#: ../../../../inc/account.class.php:950
+#: ../../../../inc/AccountHistory.class.php:180
msgid "Fallo al actualizar la clave del histórico"
msgstr "Erreur pendant la mise à jour du mot de passe maître de l'historique"
-# "Records updated"
-#: ../../../../inc/account.class.php:963
-msgid "Registros actualizados:"
-msgstr "Enregistrements actualisés"
+#: ../../../../inc/AccountHistory.class.php:194
+msgid "Registros actualizados"
+msgstr "Enregistrements à jour"
-# "Access denied to"
-#: ../../../../inc/acl.class.php:104
+#: ../../../../inc/Acl.class.php:112
msgid "Denegado acceso a"
msgstr "Accès refusé pour"
-# "A request for changing your user password has been done."
-#: ../../../../inc/auth.class.php:195
+#: ../../../../inc/Acl.class.php:126
+msgid "Buscar Cuentas"
+msgstr "Rechercher des comptes"
+
+#: ../../../../inc/Acl.class.php:127
+msgid "Ver Cuenta"
+msgstr "Voir un compte"
+
+#: ../../../../inc/Acl.class.php:128 ../../../../web/AccountC.class.php:259
+#: ../../../../inc/themes/classic/search.inc:121
+#: ../../../../inc/themes/material-blue/search.inc:136
+msgid "Copiar Cuenta"
+msgstr "Copier Compte"
+
+#: ../../../../inc/Acl.class.php:130 ../../../../web/AccountC.class.php:323
+msgid "Editar Cuenta"
+msgstr "Editer Compte"
+
+#: ../../../../inc/Acl.class.php:131
+msgid "Editar Clave de Cuenta"
+msgstr "Editer le mot de passe du compte"
+
+#: ../../../../inc/Acl.class.php:132
+#: ../../../../inc/themes/classic/profiles.inc:28
+#: ../../../../inc/themes/material-blue/profiles.inc:40
+msgid "Ver Historial"
+msgstr "Voir Historique"
+
+#: ../../../../inc/Acl.class.php:135
+#: ../../../../inc/themes/classic/account.inc:188
+#: ../../../../inc/themes/classic/profiles.inc:50
+#: ../../../../inc/themes/material-blue/account.inc:230
+#: ../../../../inc/themes/material-blue/config.inc:224
+#: ../../../../inc/themes/material-blue/profiles.inc:60
+msgid "Archivos"
+msgstr "Fichiers"
+
+#: ../../../../inc/Acl.class.php:136
+msgid "Peticiones"
+msgstr "Requêtes"
+
+#: ../../../../inc/Acl.class.php:137
+msgid "Gestión Aplicación"
+msgstr "Gérer les applications"
+
+#: ../../../../inc/Acl.class.php:138
+msgid "Gestión Categorías"
+msgstr "Gérer les catégories"
+
+#: ../../../../inc/Acl.class.php:139
+msgid "Gestión Clientes"
+msgstr "Gérer les clients"
+
+#: ../../../../inc/Acl.class.php:140
+msgid "Gestión Campos Personalizados"
+msgstr "Gestion des champs personnalisés"
+
+#: ../../../../inc/Acl.class.php:141
+msgid "Gestión Autorizaciones API"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:142 ../../../../inc/Acl.class.php:143
+msgid "Gestión Usuarios"
+msgstr "Gérer les utilisateurs"
+
+#: ../../../../inc/Acl.class.php:144
+msgid "Gestión Grupos"
+msgstr "Gérer les groupes"
+
+#: ../../../../inc/Acl.class.php:145
+msgid "Gestión Perfiles"
+msgstr "Gérer les profiles"
+
+#: ../../../../inc/Acl.class.php:146 ../../../../inc/Config.class.php:118
+#: ../../../../inc/Config.class.php:400 ../../../../web/MainC.class.php:179
+#: ../../../../inc/themes/classic/profiles.inc:57
+#: ../../../../inc/themes/material-blue/profiles.inc:66
+msgid "Configuración"
+msgstr "Configuration"
+
+#: ../../../../inc/Acl.class.php:147
+msgid "Configuración General"
+msgstr "Configuration générale"
+
+#: ../../../../inc/Acl.class.php:148 ../../../../web/ConfigC.class.php:149
+#: ../../../../inc/themes/classic/profiles.inc:65
+#: ../../../../inc/themes/material-blue/profiles.inc:77
+msgid "Encriptación"
+msgstr "Chiffrement"
+
+#: ../../../../inc/Acl.class.php:149 ../../../../web/ConfigC.class.php:194
+#: ../../../../inc/themes/classic/backup.inc:4
+#: ../../../../inc/themes/material-blue/backup.inc:4
+msgid "Copia de Seguridad"
+msgstr "Sauvegarde de sécurité"
+
+#: ../../../../inc/Acl.class.php:150
+msgid "Exportar"
+msgstr "Exporter"
+
+#: ../../../../inc/Acl.class.php:151
+#: ../../../../inc/themes/classic/profiles.inc:74
+#: ../../../../inc/themes/material-blue/profiles.inc:87
+msgid "Importar"
+msgstr "Importer"
+
+#: ../../../../inc/Api.class.php:65 ../../../../inc/Api.class.php:88
+#: ../../../../inc/Api.class.php:126
+msgid "Acceso no permitido"
+msgstr "Accès non autorisé"
+
+#: ../../../../inc/Api.class.php:166
+msgid "Error de codificación"
+msgstr "Erreur d'encodage"
+
+#: ../../../../inc/ApiRequest.class.php:102
+msgid "Token de autorización"
+msgstr ""
+
+#: ../../../../inc/ApiRequest.class.php:103
+msgid "Acción a realizar"
+msgstr "Action"
+
+#: ../../../../inc/ApiRequest.class.php:104
+msgid "Clave de usuario (opcional)"
+msgstr "Mot de passe de l'utilisateur (facultatif)"
+
+#: ../../../../inc/ApiRequest.class.php:105
+msgid "Cadena a buscar"
+msgstr "Eléments à rechercher"
+
+#: ../../../../inc/ApiRequest.class.php:106
+msgid "Numero de cuentas a mostar en la búsqueda"
+msgstr "Nombre de résultats par page à afficher durant une recherche"
+
+#: ../../../../inc/ApiRequest.class.php:107
+msgid "Item a devolver"
+msgstr ""
+
+#: ../../../../inc/ApiTokens.class.php:221
+msgid "La autorización ya existe"
+msgstr "L'autorisation existe déjà"
+
+#: ../../../../inc/ApiTokens.class.php:307
+msgid "Actualizar Autorización"
+msgstr "Mise à jour de l'autorisation"
+
+#: ../../../../inc/ApiTokens.class.php:331
+#: ../../../../web/UsersMgmtC.class.php:421
+msgid "Eliminar Autorización"
+msgstr "Supprimer l'autorisation"
+
+#: ../../../../inc/Auth.class.php:107
+msgid "Usuario no pertenece al grupo"
+msgstr "L'utilisateur ne fait pas partie du groupe"
+
+#: ../../../../inc/Auth.class.php:187
+#: ../../../../inc/themes/classic/users.inc:117
+#: ../../../../inc/themes/classic/userspass.inc:2
+#: ../../../../inc/themes/material-blue/users.inc:161
+#: ../../../../inc/themes/material-blue/userspass.inc:2
+msgid "Cambio de Clave"
+msgstr "Changement de Mot de passe"
+
+#: ../../../../inc/Auth.class.php:189
msgid "Se ha solicitado el cambio de su clave de usuario."
msgstr ""
"Une demande de changement de mot de passe pour votre utilisateur a été faite"
-# "In order to complete the process, please go to this URL:"
-#: ../../../../inc/auth.class.php:197
+#: ../../../../inc/Auth.class.php:191
msgid "Para completar el proceso es necesario que acceda a la siguiente URL:"
msgstr "Afin de terminer le traitement, veuillez aller sur cet URL:"
-# "If you have not requested this action, please dismiss this message."
-#: ../../../../inc/auth.class.php:201
+#: ../../../../inc/Auth.class.php:195
msgid "Si no ha solicitado esta acción, ignore este mensaje."
msgstr ""
"Si vous n'êtes pas à l'origine de cette demande, ne tenez pas compte de ce "
"message."
-# "This operation is only available on Linux environments"
-#: ../../../../inc/backup.class.php:159
+#: ../../../../inc/Backup.class.php:166
msgid "Esta operación sólo es posible en entornos Linux"
msgstr "Cette opération est uniquement possible en environnement Linux"
-# "Error while doing backup in compatibility mode"
-#: ../../../../inc/backup.class.php:163
+#: ../../../../inc/Backup.class.php:168
msgid "Error al realizar backup en modo compatibilidad"
msgstr "Erreur pendant la sauvegarde en mode compatibilité"
-# "Check backup directory permissions"
-#: ../../../../inc/backup.class.php:222
+#: ../../../../inc/Backup.class.php:222
+#: ../../../../inc/XmlExport.class.php:464
+msgid "No es posible crear el directorio de backups"
+msgstr "Impossible de créer le dossier de sauvegarde"
+
+#: ../../../../inc/Backup.class.php:227
+#: ../../../../inc/XmlExport.class.php:469
msgid "Compruebe los permisos del directorio de backups"
msgstr "Vérifiez les permissions du dossier de sauvegarde"
-# "Category Edit"
-#: ../../../../inc/category.class.php:183
+#: ../../../../inc/Category.class.php:69
+#: ../../../../inc/Category.class.php:165
+msgid "Nombre de categoría duplicado"
+msgstr "Nom de catégorie dupliqué"
+
+#: ../../../../inc/Category.class.php:78
+msgid "Error al crear la categoría"
+msgstr "Erreur pendant la création de la catégorie"
+
+#: ../../../../inc/Category.class.php:83
+#: ../../../../inc/Category.class.php:132
+#: ../../../../inc/Category.class.php:182
+#: ../../../../web/SearchC.class.php:283
+#: ../../../../inc/themes/classic/account.inc:42
+#: ../../../../inc/themes/classic/search.inc:44
+#: ../../../../inc/themes/material-blue/account.inc:50
+#: ../../../../inc/themes/material-blue/search.inc:49
+msgid "Categoría"
+msgstr "Catégorie"
+
+#: ../../../../inc/Category.class.php:119
+msgid "Categoría en uso por:"
+msgstr "Catégorie utilisée par:"
+
+#: ../../../../inc/Category.class.php:129
+msgid "Error al eliminar la categoría"
+msgstr "Erreur pendant la suppression de la catégorie"
+
+#: ../../../../inc/Category.class.php:132
+#: ../../../../web/AccountsMgmtC.class.php:101
+msgid "Eliminar Categoría"
+msgstr "Supprimer Catégorie"
+
+#: ../../../../inc/Category.class.php:179
+msgid "Error al actualizar la categoría"
+msgstr "Erreur pendant l'actualisation de la categorie"
+
+#: ../../../../inc/Category.class.php:182
msgid "Modificar Categoría"
msgstr "Modifier Catégorie"
-# "N/A"
-#: ../../../../inc/common.class.php:61 ../../../../inc/users.class.php:108
-msgid "N/D"
-msgstr "N/A"
-
-# "Action"
-#: ../../../../inc/common.class.php:62
-msgid "Acción"
-msgstr "Action"
-
-# "Performed by"
-#: ../../../../inc/common.class.php:63
-msgid "Realizado por"
-msgstr "Réalisé par"
-
-# "Email sent"
-#: ../../../../inc/common.class.php:81
-msgid "Correo enviado"
-msgstr "Courriel envoyé"
-
-# "Error on sending email"
-#: ../../../../inc/common.class.php:83
-msgid "Error al enviar correo"
-msgstr "Erreur pendant l'envoi du courriel"
-
-# "Recipient"
-#: ../../../../inc/common.class.php:88
-msgid "Destinatario"
-msgstr "Destinataire"
-
-# "CC"
-#: ../../../../inc/common.class.php:89
-msgid "CC"
-msgstr "CC"
-
-# "Send Email"
-#: ../../../../inc/common.class.php:91
-msgid "Enviar Email"
-msgstr "Envoyer Courriel"
-
-# "Warning"
-#: ../../../../inc/common.class.php:146
-msgid "Aviso"
-msgstr "Avertissement"
-
-# "Enter phpPMS database connection user"
-#: ../../../../inc/common.class.php:210
-msgid "Indicar el usuario de conexión a la base de datos de phpPMS"
-msgstr "Saisir l'identifiant de connexion à la base de données phpPMS"
-
-# "Enter phpPMS database name"
-#: ../../../../inc/common.class.php:211
-msgid "Indicar el nombre de la base de datos de phpPMS"
-msgstr "Saisir le nom de la base de données phpPMS"
-
-# "Enter phpPMS database server name"
-#: ../../../../inc/common.class.php:212
-msgid "Indicar el servidor de la base de datos de phpPMS"
-msgstr "Saisir le nom du serveur de base de données phpPMS"
-
-# ""
-#: ../../../../inc/common.class.php:213
-msgid ""
-"Habilita el nombre de la cuenta de la búsqueda, como enlace a los detalles "
-"de la cuenta"
-msgstr ""
-"Active le nom du compte comme lien pour les détails du compte dans la page "
-"de recherche"
-
-# "Number of results that are shown per page when searching"
-#: ../../../../inc/common.class.php:214
-msgid "Número de resultados por página a mostrar, al realizar una búsqueda"
-msgstr "Nombre de résultats affichés par page lors d'une recherche"
-
-# "It enables upload/download the accounts' files"
-#: ../../../../inc/common.class.php:215
-msgid "Habilita la subida/descarga de archivos para las cuentas"
-msgstr "Active le Chargement/Téléchargement des fichiers de comptes"
-
-# "Sets up the max upload file size."
-#: ../../../../inc/common.class.php:216
-msgid "Establece el tamaño máximo para subir archivos"
-msgstr "Définir la taille maximale pour le chargement de fichier"
-
-# "The absolute maximum is 16MB."
-#: ../../../../inc/common.class.php:216
-msgid "El máximo absuluto es de 16MB"
-msgstr "Le maximum absolue est de 16Mo."
-
-# ""
-#: ../../../../inc/common.class.php:217
-msgid ""
-"Habilita la opción de añadir un enlace a Wiki externa para los resultados de "
-"la búsqueda"
-msgstr ""
-"Active l'option d'ajout de liens externes Wiki pour le résultat des "
-"recherches"
-
-# "URL that wiki uses to do a page search on it."
-#: ../../../../inc/common.class.php:218
-msgid ""
-"URL que utiliza la wiki para realizar una búsqueda de una página en esta"
-msgstr "URL utilisé par wiki pour effectuer une recherche sur une page"
-
-# "It uses customer name as parameter."
-#: ../../../../inc/common.class.php:218
-msgid "Como parámetro se utiliza el nombre del cliente"
-msgstr "Utilise le nom d'utilsateur comme paramètre"
-
-# "Example"
-#: ../../../../inc/common.class.php:218 ../../../../inc/common.class.php:219
-#: ../../../../inc/common.class.php:222 ../../../../inc/common.class.php:223
-#: ../../../../inc/common.class.php:224
-msgid "Ejemplo"
-msgstr "Example"
-
-# "URL that wiki uses to access to page details on it."
-#: ../../../../inc/common.class.php:219
-msgid ""
-"URL que utiliza la wiki para acceder a los detalles de una página de ésta"
-msgstr "URL que Wiki utilise pour accéder aux détails d'un page sur celui-ci"
-
-# "The account name is used as wiki search variable parameter."
-#: ../../../../inc/common.class.php:219
-msgid ""
-"El nombre de la cuenta se utiliza como parámetro de la variable de búsqueda "
-"de la Wiki"
-msgstr ""
-"Le nom du compte est utilisé comme paramètre pour la variable de recherche "
-"wiki"
-
-# "Preffix to select what accounts have a wiki page link"
-#: ../../../../inc/common.class.php:220
-msgid ""
-"Prefijo para determinar qué cuentas tienen un enlace a una página de la Wiki"
-msgstr "Préfix pour déterminer quels comptes aurront un lien Wiki."
-
-# "Examples"
-#: ../../../../inc/common.class.php:220
-msgid "Ejemplos"
-msgstr "Examples"
-
-# "It enables LDAP authentication"
-#: ../../../../inc/common.class.php:221
-msgid "Habilita de autentificación mediante servidor LDAP"
-msgstr "Active l'authentification LDAP"
-
-# "This method will switch to MySQL on failure"
-#: ../../../../inc/common.class.php:221
-msgid "Este método utilizará MySQL en caso de fallo"
-msgstr "Cette méthode basculera sur MySQL en cas d'échec"
-
-# "User to connect LDAP server"
-#: ../../../../inc/common.class.php:222
-msgid "Usuario para conectar con el servicio de LDAP"
-msgstr "Utilisateur pour se connecter au serveur LDAP"
-
-# "LDAP base to do users searches."
-#: ../../../../inc/common.class.php:223
-msgid "Base en la que realizar la búsqueda de usuarios de LDAP"
-msgstr "Base LDAP de recherche des utilisateurs"
-
-# "LDAP group that users belong to for access permission"
-#: ../../../../inc/common.class.php:224
-msgid ""
-"Grupo de LDAP al que debe de pertenecer el usuario para permitir el acceso"
-msgstr ""
-"Groupe LDAP auquel doivent apartenir les utilisateurs afin d'avoir les "
-"permissions d'accès"
-
-# "LDAP server hostname or IP address"
-#: ../../../../inc/common.class.php:225
-msgid "Nombre o dirección IP del servidor de LDAP"
-msgstr "Nom ou adresse IP du serveur LDAP"
-
-# "Sets a new master password without re-encrypting the accounts."
-#: ../../../../inc/common.class.php:226
-msgid "Establece una nueva clave maestra sin re-encriptar las cuentas"
-msgstr "Définir un nouveau mot de passe maître sans ré-encrypter les comptes"
-
-# "LDAP bind user password"
-#: ../../../../inc/common.class.php:227
-msgid "Clave del usuario de conexión a LDAP"
-msgstr "Mot de passe utilisateur de connexion LDAP"
-
-# ""
-#: ../../../../inc/common.class.php:228
-msgid ""
-"En este modo no se puede acceder a la aplicación. Para deshabilitarlo es "
-"necesario modificar el archivo de configuración"
-msgstr ""
-"Dans ce mode, vous ne pouvez pas accéder à l'application. Pour pouvoir le "
-"faire, vous devez modifier le fichier de configuration."
-
-# "Shows some information about application and performance."
-#: ../../../../inc/common.class.php:229
-msgid ""
-"Muestra información relativa a la configuración de la aplicación y "
-"rendimiento"
-msgstr ""
-"Affiche quelques informations à propos de l'application et de ces "
-"performances"
-
-# "It saves the actions done by the application."
-#: ../../../../inc/common.class.php:230
-msgid "Guarda las acciones realizadas en la aplicación"
-msgstr "Sauvegarde les actions effectuées par l'application"
-
-# "Check for application updates (only for administrators)."
-#: ../../../../inc/common.class.php:231
-msgid ""
-"Comprobar actualizaciones de la aplicación (sólo para los usuarios "
-"administradores)"
-msgstr "Vérifier les mises à jour de l'application (Administrateurs seulement)"
-
-# "Extensions max length is 4 characters."
-#: ../../../../inc/common.class.php:232
-msgid "Extensiones de máximo 4 caracteres."
-msgstr "Extensions de 4 caractères maxi"
-
-# "Write extension and press enter to add."
-#: ../../../../inc/common.class.php:232
-msgid "Escribir extensión y pulsar intro para añadir."
-msgstr "Ecrire l'extension puis pressez Entrée pour ajouter."
-
-# ""
-#: ../../../../inc/common.class.php:233
-msgid ""
-"Importar desde KeePass o KeePassX. El nombre del cliente será igual a "
-"KeePass o KeePassX"
-msgstr ""
-"Importer depuis KeePass ou KeePassX. Le nombre de clients sera égale à ceux "
-"de KeePass ou KeePassX"
-
-# "Import form a CSV file with the format"
-#: ../../../../inc/common.class.php:233
-msgid "Importar desde un archivo CSV con el formato"
-msgstr "Importer depuis un fichier CSV avec le format"
-
-# "account_name
-#: ../../../../inc/common.class.php:233
-msgid "nombre_de_cuenta;cliente;categoría;url;usuario;clave;notas"
-msgstr "nom_de_compte;client;categorie;url;utilisateur;mot_de_passe;notes"
-
-# ""
-#: ../../../../inc/common.class.php:233
-msgid ""
-"Si el cliente o la categoría no están creados, se crean automáticamente."
-msgstr ""
-"Si le client ou la catégorie ne sont pas créés, ils se créeront "
-"automatiquement."
-
-# "Allows to show the non-permission accounts only for searches."
-#: ../../../../inc/common.class.php:234
-msgid ""
-"Permite que las cuentas sin acceso sean visibles sólo para las búsquedas."
-msgstr ""
-"Permet l'affichage des comptes non autorisés pour la recherche uniquement"
-
-# "Enables to show account's search results like a card format."
-#: ../../../../inc/common.class.php:235
-msgid "Muestra los resultados de búsqueda de cuentas en formato tarjeta."
-msgstr "Active l'affichage des résultats de recherche comme format carte."
-
-# "Enables Active Directory LDAP connection mode."
-#: ../../../../inc/common.class.php:236
-msgid "Habilita el modo de conexión con LDAP de Active Directory."
-msgstr "Permet le mode de connexion actif avec l'annuaire LDAP"
-
-# "Define the default users group for new LDAP users"
-#: ../../../../inc/common.class.php:237
-msgid ""
-"Define el grupo de usuarios por defecto para los nuevos usuarios de LDAP."
-msgstr ""
-"Défini le groupe d'utilisateur par défaut pour les nouveaux utilisateurs LDAP"
-
-# "Define the default users profile for new LDAP users"
-#: ../../../../inc/common.class.php:238
-msgid ""
-"Define el perfil de usuario por defecto para los nuevos usuarios de LDAP."
-msgstr "Défini le profile par défaut pour les nouveaux utilisateurs LDAP"
-
-# "Update Configuration"
-#: ../../../../inc/config.class.php:122 ../../../../inc/config.class.php:150
+#: ../../../../inc/Config.class.php:118 ../../../../inc/Config.class.php:401
msgid "Modificar configuración"
msgstr "Modifier configuration"
-# "Parameter"
-#: ../../../../inc/config.class.php:151
-msgid "Parámetro"
-msgstr "Paramètre"
-
-# "Value"
-#: ../../../../inc/config.class.php:152
-msgid "Valor"
-msgstr "Valeur"
-
-# "Unable to write in configuration file"
-#: ../../../../inc/config.class.php:310
+#: ../../../../inc/Config.class.php:276
msgid "No es posible escribir el archivo de configuración"
msgstr "Impossible d'écrire dans le fichier de configuration"
-# "Please, check the "config" directory permissions"
-#: ../../../../inc/config.class.php:311
+#: ../../../../inc/Config.class.php:276
msgid "Compruebe los permisos del directorio \"config\""
msgstr "Vérifiez les permissions du dossier \"config\""
-# "Update Customer"
-#: ../../../../inc/customer.class.php:105
-msgid "Actualizar Cliente"
-msgstr "Mettre à jour Clients"
+#: ../../../../inc/Config.class.php:402
+msgid "Parámetro"
+msgstr "Paramètre"
-# "Unable to connect to the DB"
-#: ../../../../inc/db.class.php:95 ../../../../inc/db.class.php:109
-#: ../../../../inc/db.class.php:116 ../../../../inc/installer.class.php:214
-msgid "No es posible conectar con la BD"
-msgstr "Impossible de se connecter à la base de données"
+#: ../../../../inc/Config.class.php:403
+msgid "Valor"
+msgstr "Valeur"
-# "Please, check connection parameters"
-#: ../../../../inc/db.class.php:95 ../../../../inc/installer.class.php:215
-msgid "Compruebe los datos de conexión"
-msgstr "Veillez vérifier les parmètres de connexion"
-
-# "Edit Group"
-#: ../../../../inc/groups.class.php:183
-msgid "Modificar Grupo"
-msgstr "Modifier Groupe"
-
-# "Javascript is needed in order to run correctly"
-#: ../../../../inc/html.class.php:207
-msgid "Javascript es necesario para el correcto funcionamiento"
-msgstr "Javascript est requis pour fonctionner correctement"
-
-# "Help :: FAQ :: Changelog"
-#: ../../../../inc/html.class.php:231
-msgid "Ayuda :: FAQ :: Changelog"
-msgstr "Aide :: FAQ :: Changelog"
-
-# "A cygnux.org project"
-#: ../../../../inc/html.class.php:233
-msgid "Un proyecto de cygnux.org"
-msgstr "Un projet cygnux.org"
-
-# "Filter ON"
-#: ../../../../inc/html.class.php:277
-msgid "Filtro ON"
-msgstr "Filtre ON"
-
-# "Global ON"
-#: ../../../../inc/html.class.php:279
-msgid "Global ON"
-msgstr "Global ON"
-
-# "First page"
-#: ../../../../inc/html.class.php:284 ../../../../inc/html.class.php:318
-msgid "Primera página"
-msgstr "Première page"
-
-# "Previous page"
-#: ../../../../inc/html.class.php:285 ../../../../inc/html.class.php:319
-msgid "Página anterior"
-msgstr "Page précédante"
-
-# "Next page"
-#: ../../../../inc/html.class.php:292 ../../../../inc/html.class.php:326
-msgid "Página siguiente"
-msgstr "Page suivante"
-
-# "Last page"
-#: ../../../../inc/html.class.php:293 ../../../../inc/html.class.php:327
-msgid "Última página"
-msgstr "Dernière page"
-
-# "Option unavailable"
-#: ../../../../inc/html.class.php:424
+#: ../../../../inc/Controller.class.php:165
msgid "Opción no disponible"
msgstr "Option indisponible"
-# "Please, contact to the administrator"
-#: ../../../../inc/html.class.php:424 ../../../../inc/html.class.php:425
-#: ../../../../inc/html.class.php:426 ../../../../inc/init.php:630
+#: ../../../../inc/Controller.class.php:165
+#: ../../../../inc/Controller.class.php:166
+#: ../../../../inc/Controller.class.php:167
+#: ../../../../inc/Controller.class.php:168 ../../../../inc/Init.class.php:290
msgid "Consulte con el administrador"
msgstr "Veuillez contacter votre administrateur"
-# "You don't have permission to access to this page"
-#: ../../../../inc/html.class.php:426
+#: ../../../../inc/Controller.class.php:167
msgid "No tiene permisos para acceder a esta página"
msgstr "Vous n'avez pas les permissions pour accéder à cette page"
-# "Import finished"
-#: ../../../../inc/import.class.php:89 ../../../../inc/migrate.class.php:117
-msgid "Importación finalizada"
-msgstr "Importation terminée"
+#: ../../../../inc/Controller.class.php:168
+msgid "No tiene permisos para realizar esta operación"
+msgstr "Vous n'avez pas les permissions pour effectuer cette opération"
-# "File successfully uploaded"
-#: ../../../../inc/import.class.php:105
-msgid "Archivo no subido correctamente"
-msgstr "Fichier transféré avec succès"
+#: ../../../../inc/Crypt.class.php:236
+msgid "No se puede usar el módulo de encriptación"
+msgstr "Le module d'encryption ne peut pas être chargé"
-# "Please, check the web server's user permissions"
-#: ../../../../inc/import.class.php:105
-msgid "Verifique los permisos del usuario del servidor web"
-msgstr "Veuillez vérifier les permissions de l'utilisateur du serveur web"
+#: ../../../../inc/Crypt.class.php:247
+msgid "Error al generar datos cifrados"
+msgstr "Erreur pendant la création des données d'encryption"
-# "Please, check file extension"
-#: ../../../../inc/import.class.php:113
-msgid "Compruebe la extensión del archivo"
-msgstr "Veuillez vérifier l'extension de fichier"
+#: ../../../../inc/CryptPKI.class.php:44
+#, fuzzy
+msgid "No es posible generar las claves RSA"
+msgstr "Impossible de créer le client"
-# "Please, check PHP configuration for upload files"
-#: ../../../../inc/import.class.php:124
-msgid "Compruebe la configuración de PHP para subir archivos"
-msgstr "Veuillez vérifier la configuration PHP pour le transfert de fichier"
+#: ../../../../inc/CryptPKI.class.php:110
+#: ../../../../inc/CryptPKI.class.php:141
+#, fuzzy
+msgid "El archivo de clave no existe"
+msgstr "Fichier inexistant"
-# "Please, check temporary directory permissions"
-#: ../../../../inc/import.class.php:132
-msgid "Compruebe los permisos del directorio temporal"
-msgstr "Vérifiez les permissions du dossier temporaire"
+#: ../../../../inc/CsvImportBase.class.php:109
+#, php-format
+msgid "El número de campos es incorrecto (%d)"
+msgstr "Mauvais numéro de champs (%d)"
-# "Mime type not supported"
-#: ../../../../inc/import.class.php:141
-msgid "Tipo mime no soportado"
-msgstr "Types mime non supporté"
+#: ../../../../inc/CsvImportBase.class.php:110
+#, php-format
+msgid "Compruebe el formato del archivo CSV en línea %s"
+msgstr ""
-# "Please, check the file format"
-#: ../../../../inc/import.class.php:141
-msgid "Compruebe el formato del archivo"
-msgstr "Veuillez vérifiez le format de fichier"
+#: ../../../../inc/CsvImportBase.class.php:140
+#: ../../../../inc/CsvImportBase.class.php:145
+#: ../../../../inc/Import.class.php:118 ../../../../inc/Import.class.php:124
+#: ../../../../inc/Migrate.class.php:349
+#: ../../../../inc/XmlImport.class.php:62
+#: ../../../../inc/XmlImport.class.php:63
+#: ../../../../web/ConfigC.class.php:216
+msgid "Importar Cuentas"
+msgstr "Importer Comptes"
-# "The number of fields is incorrect"
-#: ../../../../inc/import.class.php:159
-msgid "El número de campos es incorrecto"
-msgstr "Le nombre de champs est incorrect"
-
-# "Please, check the CSV file format"
-#: ../../../../inc/import.class.php:159
-msgid "Compruebe el formato del archivo CSV"
-msgstr "Veuilez vérifier le format du fichier CSV"
-
-# "Error on importing account"
-#: ../../../../inc/import.class.php:164
+#: ../../../../inc/CsvImportBase.class.php:141
msgid "Error importando cuenta"
msgstr "Erreur pendant l'importation des comptes"
-# "Unable to process XML file"
-#: ../../../../inc/import.class.php:266
-msgid "No es posible procesar el archivo XML"
-msgstr "Impossible de traiter le fichier XML"
-
-# "XML file not supported"
-#: ../../../../inc/import.class.php:294
-msgid "Archivo XML no soportado"
-msgstr "Fichier XML non supportés"
-
-# "Unable to detect the application the data was exported from"
-#: ../../../../inc/import.class.php:294
-msgid "No es posible detectar la aplicación que exportó los datos"
+#: ../../../../inc/CsvImportBase.class.php:142
+#, php-format
+msgid "Error procesando línea %s"
msgstr ""
-"Impossible de détecter l'application depuis laquelle les données ont été "
-"exportés"
-# "Error on checking database"
-#: ../../../../inc/init.php:136
+#: ../../../../inc/CsvImportBase.class.php:145
+#, php-format
+msgid "Cuenta importada: %s"
+msgstr "Compte %s importé"
+
+#: ../../../../inc/CustomFieldsBase.class.php:81
+#: ../../../../inc/themes/classic/profiles.inc:98
+#: ../../../../inc/themes/material-blue/profiles.inc:114
+msgid "Categorías"
+msgstr "Catégories"
+
+#: ../../../../inc/CustomFieldsBase.class.php:82
+#: ../../../../inc/themes/classic/profiles.inc:103
+#: ../../../../inc/themes/material-blue/profiles.inc:119
+msgid "Clientes"
+msgstr "Clients"
+
+#: ../../../../inc/CustomFieldsBase.class.php:84
+#: ../../../../inc/themes/classic/account.inc:140
+#: ../../../../inc/themes/classic/profiles.inc:89
+#: ../../../../inc/themes/material-blue/account.inc:166
+#: ../../../../inc/themes/material-blue/profiles.inc:104
+msgid "Grupos"
+msgstr "Groupes"
+
+#: ../../../../inc/Customer.class.php:50 ../../../../inc/Customer.class.php:95
+msgid "Cliente duplicado"
+msgstr "Client dupliqué"
+
+#: ../../../../inc/Customer.class.php:60
+msgid "Error al crear el cliente"
+msgstr "Erreur pendant la création du client"
+
+#: ../../../../inc/Customer.class.php:112
+msgid "Error al actualizar el cliente"
+msgstr "Erreur pendant l'actualisation du client"
+
+#: ../../../../inc/Customer.class.php:115
+msgid "Actualizar Cliente"
+msgstr "Mettre à jour Clients"
+
+#: ../../../../inc/Customer.class.php:150
+msgid "Cliente en uso por:"
+msgstr "Client utilisé par:"
+
+#: ../../../../inc/Customer.class.php:160
+msgid "Error al eliminar el cliente"
+msgstr "Erreur pendant la suppression du client"
+
+#: ../../../../inc/Customer.class.php:163
+#: ../../../../web/AccountsMgmtC.class.php:159
+msgid "Eliminar Cliente"
+msgstr "Supprimer Client"
+
+#: ../../../../inc/DBConnectionFactory.class.php:87
+#: ../../../../inc/DBConnectionFactory.class.php:89
+#: ../../../../inc/DBConnectionFactory.class.php:103
+#: ../../../../inc/Installer.class.php:235
+#: ../../../../inc/Migrate.class.php:115
+msgid "No es posible conectar con la BD"
+msgstr "Impossible de se connecter à la base de données"
+
+#: ../../../../inc/DBConnectionFactory.class.php:87
+#: ../../../../inc/DBConnectionFactory.class.php:89
+#: ../../../../inc/Installer.class.php:236
+#: ../../../../inc/Migrate.class.php:116
+msgid "Compruebe los datos de conexión"
+msgstr "Veillez vérifier les parmètres de connexion"
+
+#: ../../../../inc/Email.class.php:59 ../../../../inc/UserUtil.class.php:567
+msgid "N/D"
+msgstr "N/A"
+
+#: ../../../../inc/Email.class.php:60 ../../../../web/UsersMgmtC.class.php:392
+#: ../../../../inc/themes/classic/tokens.inc:20
+#: ../../../../inc/themes/material-blue/tokens.inc:20
+msgid "Acción"
+msgstr "Action"
+
+#: ../../../../inc/Email.class.php:61
+msgid "Realizado por"
+msgstr "Réalisé par"
+
+#: ../../../../inc/Email.class.php:77
+msgid "Enviar Email"
+msgstr "Envoyer Courriel"
+
+#: ../../../../inc/Email.class.php:81
+msgid "Correo enviado"
+msgstr "Courriel envoyé"
+
+#: ../../../../inc/Email.class.php:83
+msgid "Error al enviar correo"
+msgstr "Erreur pendant l'envoi du courriel"
+
+#: ../../../../inc/Email.class.php:87
+msgid "Destinatario"
+msgstr "Destinataire"
+
+#: ../../../../inc/Email.class.php:90
+msgid "CC"
+msgstr "CC"
+
+#: ../../../../inc/Email.class.php:146
+msgid "Aviso"
+msgstr "Avertissement"
+
+#: ../../../../inc/FileImport.class.php:105
+msgid "Archivo no subido correctamente"
+msgstr "Fichier transféré avec succès"
+
+#: ../../../../inc/FileImport.class.php:105
+msgid "Verifique los permisos del usuario del servidor web"
+msgstr "Veuillez vérifier les permissions de l'utilisateur du serveur web"
+
+#: ../../../../inc/FileImport.class.php:116
+msgid "Compruebe la extensión del archivo"
+msgstr "Veuillez vérifier l'extension de fichier"
+
+#: ../../../../inc/FileImport.class.php:132
+msgid "Compruebe la configuración de PHP para subir archivos"
+msgstr "Veuillez vérifier la configuration PHP pour le transfert de fichier"
+
+#: ../../../../inc/FileImport.class.php:150
+#: ../../../../inc/FileImport.class.php:168
+msgid "Compruebe los permisos del directorio temporal"
+msgstr "Vérifiez les permissions du dossier temporaire"
+
+#: ../../../../inc/Files.class.php:111
+#: ../../../../inc/themes/classic/files.inc:15
+#: ../../../../inc/themes/material-blue/files.inc:16
+msgid "Eliminar Archivo"
+msgstr "Supprimer Fichier"
+
+#: ../../../../inc/Groups.class.php:155
+msgid "Error al añadir los usuarios del grupo"
+msgstr "Erreur pendant l'ajout d'utilisateurs à un groupe"
+
+#: ../../../../inc/Groups.class.php:256
+msgid "Error al actualizar los usuarios del grupo"
+msgstr "Erreur pendant la mise à jour de"
+
+#: ../../../../inc/Groups.class.php:369
+#: ../../../../web/UsersMgmtC.class.php:209
+msgid "Eliminar Grupo"
+msgstr "Supprimer Groupe"
+
+#: ../../../../inc/Groups.class.php:372
+msgid "Error al eliminar los usuarios del grupo"
+msgstr ""
+
+#: ../../../../inc/Import.class.php:109
+msgid "Tipo mime no soportado"
+msgstr "Types mime non supporté"
+
+#: ../../../../inc/Import.class.php:110
+msgid "Compruebe el formato del archivo"
+msgstr "Veuillez vérifiez le format de fichier"
+
+#: ../../../../inc/Import.class.php:124 ../../../../inc/Import.class.php:127
+#: ../../../../inc/Migrate.class.php:92
+msgid "Importación finalizada"
+msgstr "Importation terminée"
+
+#: ../../../../inc/Init.class.php:199
msgid "Error en la verificación de la base de datos"
msgstr "Erreur pendant la vérification de la base de données"
-# "The "/config" directory does not exist."
-#: ../../../../inc/init.php:343
-msgid "El directorio \"/config\" no existe"
-msgstr "Le dossier \"/config\" n'existe pas"
-
-# "Unable to write into the "/config" directory"
-#: ../../../../inc/init.php:348
-msgid "No es posible escribir en el directorio \"config\""
-msgstr "Impossible d'écrire dans le dossier \"/config\""
-
-# "The "/config" directory permissions are incorrect"
-#: ../../../../inc/init.php:356
-msgid "Los permisos del directorio \"/config\" son incorrectos"
-msgstr "Les permissions du dossier \"/config\" sont incorrectes"
-
-# "Current:"
-#: ../../../../inc/init.php:356
-msgid "Actual:"
-msgstr "Actuel"
-
-# "Needed: 750"
-#: ../../../../inc/init.php:356
-msgid "Necesario: 750"
-msgstr "Nécessaire: 750"
-
-# "Application in maintenance"
-#: ../../../../inc/init.php:423
-msgid "Aplicación en mantenimiento"
-msgstr "Application en maintenance"
-
-# "It will be running in short"
-#: ../../../../inc/init.php:423
-msgid "En breve estará operativa"
-msgstr "Sera opérationnel sous peu"
-
-# "The application needs to be updated"
-#: ../../../../inc/init.php:455
-msgid "La aplicación necesita actualizarse"
-msgstr "L'application a besoin d'être mis à jour"
-
-# "If you are an administrator, click on the link:"
-#: ../../../../inc/init.php:455
-msgid "Si es un administrador pulse en el enlace:"
-msgstr "Si vous êtes administrateur, cliquez sur le lien:"
-
-# "Update"
-#: ../../../../inc/init.php:455 ../../../../inc/tpl/upgrade.php:54
-msgid "Actualizar"
-msgstr "Mis à jour"
-
-# "Update"
-#: ../../../../inc/init.php:484
-msgid "Actualización"
-msgstr "Actualisation"
-
-# "Version updating done."
-#: ../../../../inc/init.php:485
-msgid "Actualización de versión realizada."
-msgstr "Mise à jour de version effectuée."
-
-# "Version"
-#: ../../../../inc/init.php:486
-msgid "Versión"
-msgstr "Version"
-
-# "Logout session"
-#: ../../../../inc/init.php:543
-msgid "Finalizar sesión"
-msgstr "Deconnexion"
-
-# "Inactive time"
-#: ../../../../inc/init.php:545
-msgid "Tiempo inactivo"
-msgstr "Temps d'inactivité"
-
-# "Total time"
-#: ../../../../inc/init.php:546
-msgid "Tiempo total"
-msgstr "Temps total"
-
-# "Session"
-#: ../../../../inc/init.php:624
+#: ../../../../inc/Init.class.php:286
msgid "Sesion"
msgstr "Session"
-# "Session cannot be initialized"
-#: ../../../../inc/init.php:624 ../../../../inc/init.php:629
+#: ../../../../inc/Init.class.php:286 ../../../../inc/Init.class.php:290
msgid "La sesión no puede ser inicializada"
msgstr "La session ne peut pas être initialisée"
-# "Enter the admin username"
-#: ../../../../inc/installer.class.php:90
+#: ../../../../inc/Init.class.php:417
+msgid "El directorio \"/config\" no existe"
+msgstr "Le dossier \"/config\" n'existe pas"
+
+#: ../../../../inc/Init.class.php:422
+msgid "No es posible escribir en el directorio \"config\""
+msgstr "Impossible d'écrire dans le dossier \"/config\""
+
+#: ../../../../inc/Init.class.php:430
+msgid "Los permisos del directorio \"/config\" son incorrectos"
+msgstr "Les permissions du dossier \"/config\" sont incorrectes"
+
+#: ../../../../inc/Init.class.php:430
+msgid "Actual:"
+msgstr "Actuel"
+
+#: ../../../../inc/Init.class.php:430
+msgid "Necesario: 750"
+msgstr "Nécessaire: 750"
+
+#: ../../../../inc/Init.class.php:479
+msgid "Aplicación en mantenimiento"
+msgstr "Application en maintenance"
+
+#: ../../../../inc/Init.class.php:479
+msgid "En breve estará operativa"
+msgstr "Sera opérationnel sous peu"
+
+#: ../../../../inc/Init.class.php:516
+msgid "Finalizar sesión"
+msgstr "Deconnexion"
+
+#: ../../../../inc/Init.class.php:518
+msgid "Tiempo inactivo"
+msgstr "Temps d'inactivité"
+
+#: ../../../../inc/Init.class.php:519
+msgid "Tiempo total"
+msgstr "Temps total"
+
+#: ../../../../inc/Init.class.php:558
+msgid "La aplicación necesita actualizarse"
+msgstr "L'application a besoin d'être mis à jour"
+
+#: ../../../../inc/Init.class.php:558
+#, php-format
+msgid "Si es un administrador pulse en el enlace: %s"
+msgstr "Si vous êtes un administrateur, cliquez sur ce lien: %s"
+
+#: ../../../../inc/Init.class.php:558
+#: ../../../../inc/themes/classic/upgrade.inc:20
+#: ../../../../inc/themes/material-blue/upgrade.inc:24
+msgid "Actualizar"
+msgstr "Mis à jour"
+
+#: ../../../../inc/Init.class.php:589
+msgid "Actualización"
+msgstr "Actualisation"
+
+#: ../../../../inc/Init.class.php:590
+msgid "Actualización de versión realizada."
+msgstr "Mise à jour de version effectuée."
+
+#: ../../../../inc/Init.class.php:591
+#: ../../../../inc/themes/classic/info.inc:33
+#: ../../../../inc/themes/material-blue/info.inc:33
+msgid "Versión"
+msgstr "Version"
+
+#: ../../../../inc/Installer.class.php:127
msgid "Indicar nombre de usuario admin"
msgstr "Saisir le nom de l'utilisateur admin"
-# "Admin user to login to the application"
-#: ../../../../inc/installer.class.php:91
+#: ../../../../inc/Installer.class.php:128
msgid "Usuario admin para acceso a la aplicación"
msgstr "Utilisateur admin pour se connecter à l'application"
-# "Enter the admin's password"
-#: ../../../../inc/installer.class.php:96
+#: ../../../../inc/Installer.class.php:132
msgid "Indicar la clave de admin"
msgstr "Saisir le mot de passe admin"
-# "Application administrator's password"
-#: ../../../../inc/installer.class.php:97
+#: ../../../../inc/Installer.class.php:133
msgid "Clave del usuario admin de la aplicación"
msgstr "Mot de passe administrateur de l'application"
-# "Enter the master password"
-#: ../../../../inc/installer.class.php:103
+#: ../../../../inc/Installer.class.php:137
msgid "Indicar la clave maestra"
msgstr "Saisir le mot de passe maître"
-# "Master password to encrypt the passwords"
-#: ../../../../inc/installer.class.php:104
+#: ../../../../inc/Installer.class.php:138
msgid "Clave maestra para encriptar las claves"
msgstr "Mot de passe maître pour crypter les mots de passe"
-# "Master password too short"
-#: ../../../../inc/installer.class.php:109
+#: ../../../../inc/Installer.class.php:142
msgid "Clave maestra muy corta"
msgstr "Mot de passe maître trop court"
-# "The master password length need to be at least 11 characters"
-#: ../../../../inc/installer.class.php:110
+#: ../../../../inc/Installer.class.php:143
msgid "La longitud de la clave maestra ha de ser mayor de 11 caracteres"
msgstr "La longueur du mot de passe maître doit être de 11 caractères au moins"
-# "Enter the database user"
-#: ../../../../inc/installer.class.php:116
+#: ../../../../inc/Installer.class.php:147
msgid "Indicar el usuario de la BBDD"
msgstr "Saisir l'utilisateur de la base de données"
-# "An user with database administrative rights"
-#: ../../../../inc/installer.class.php:117
+#: ../../../../inc/Installer.class.php:148
msgid "Usuario con permisos de administrador de la Base de Datos"
msgstr "Un utilisateur avec des droits d'administration sur la BDD"
-# "Enter the database password"
-#: ../../../../inc/installer.class.php:122
+#: ../../../../inc/Installer.class.php:152
msgid "Indicar la clave de la BBDD"
msgstr "Saisir le mot de passe de base de données"
-# "Database administartor's password"
-#: ../../../../inc/installer.class.php:123
+#: ../../../../inc/Installer.class.php:153
msgid "Clave del usuario administrador de la Base de Datos"
msgstr "Mot de passe administrateur de la base de données"
-# "Enter the database name"
-#: ../../../../inc/installer.class.php:128
+#: ../../../../inc/Installer.class.php:157
msgid "Indicar el nombre de la BBDD"
msgstr "Saisir le nom de la base de données"
-# "Application database name. eg. syspass"
-#: ../../../../inc/installer.class.php:129
+#: ../../../../inc/Installer.class.php:158
msgid "Nombre para la BBDD de la aplicación pej. syspass"
msgstr "Nom pour la BD de l'application. eg. syspass"
-# "Database name cannot contain ".""
-#: ../../../../inc/installer.class.php:134
+#: ../../../../inc/Installer.class.php:162
msgid "El nombre de la BBDD no puede contener \".\""
msgstr "Le nom de la base de données ne peut pas contenir \".\""
-# "Please, remove dots in database name"
-#: ../../../../inc/installer.class.php:135
+#: ../../../../inc/Installer.class.php:163
msgid "Elimine los puntos del nombre de la Base de Datos"
msgstr "Veuillez supprimer les points du nom de la base de données"
-# "Enter the database server"
-#: ../../../../inc/installer.class.php:141
+#: ../../../../inc/Installer.class.php:167
msgid "Indicar el servidor de la BBDD"
msgstr "Saisir le serveur de base de données"
-# "Server where the database will be installed"
-#: ../../../../inc/installer.class.php:142
+#: ../../../../inc/Installer.class.php:168
msgid "Servidor donde se instalará la Base de Datos"
msgstr "Serveur où la base de données sera installée"
-# "The database already exist"
-#: ../../../../inc/installer.class.php:260
+#: ../../../../inc/Installer.class.php:313
+msgid "El usuario de MySQL ya existe"
+msgstr "L'utilisateur MySQL existe déjà"
+
+#: ../../../../inc/Installer.class.php:314
+msgid "Indique un nuevo usuario o elimine el existente"
+msgstr "Saisissez un nouvel utilisateur ou supprimez celui qui existe déjà"
+
+#: ../../../../inc/Installer.class.php:327
msgid "La BBDD ya existe"
msgstr "La base de données existe déjà"
-# "Enter a new database or delete the existing one"
-#: ../../../../inc/installer.class.php:261
+#: ../../../../inc/Installer.class.php:328
msgid "Indique una nueva Base de Datos o elimine la existente"
msgstr ""
"Saisissez une nouvelle base de données ou supprimez celle qui existe déjà"
-# "The MySQL user already exist"
-#: ../../../../inc/installer.class.php:286
-msgid "El usuario de MySQL ya existe"
-msgstr "L'utilisateur MySQL existe déjà"
-
-# "Enter a new username or delete the existing one"
-#: ../../../../inc/installer.class.php:287
-msgid "Indique un nuevo usuario o elimine el existente"
-msgstr "Saisissez un nouvel utilisateur ou supprimez celui qui existe déjà"
-
-# "Error on DB creation"
-#: ../../../../inc/installer.class.php:304
-#: ../../../../inc/installer.class.php:382
+#: ../../../../inc/Installer.class.php:337
+#: ../../../../inc/Installer.class.php:408
msgid "Error al crear la BBDD"
msgstr "Erreur pendant la création de la BDD"
-# "Please, check database user permissions"
-#: ../../../../inc/installer.class.php:305
-#: ../../../../inc/installer.class.php:317
+#: ../../../../inc/Installer.class.php:338
+#: ../../../../inc/Installer.class.php:349
msgid "Verifique los permisos del usuario de la Base de Datos"
msgstr ""
"Veuillez vérifier les permissions de l'utilisateur de la base de données"
-# "Error on setting database permissions"
-#: ../../../../inc/installer.class.php:316
+#: ../../../../inc/Installer.class.php:348
msgid "Error al establecer permisos de la BBDD"
msgstr "Erreur pendant l'affectation des permissions de la base de données"
-# "The database structure file does not exist"
-#: ../../../../inc/installer.class.php:360
+#: ../../../../inc/Installer.class.php:381
msgid "El archivo de estructura de la BBDD no existe"
msgstr "Fichier de structure de base de données inexistant"
-# "Unable to create the application database. Please, download it again."
-#: ../../../../inc/installer.class.php:361
+#: ../../../../inc/Installer.class.php:382
msgid "No es posible crear la BBDD de la aplicación. Descárguela de nuevo."
msgstr ""
"Impossible de créer la base de donnée de l'application. Veuillez la "
"télécharger de nouveau."
-# "Error on selecting database."
-#: ../../../../inc/installer.class.php:367
+#: ../../../../inc/Installer.class.php:390
msgid "Error al seleccionar la BBDD"
msgstr "Erreur pendant la sélection de la BDD"
-# ""
-#: ../../../../inc/installer.class.php:368
+#: ../../../../inc/Installer.class.php:391
msgid ""
"No es posible usar la Base de Datos para crear la estructura. Compruebe los "
"permisos y que no exista."
@@ -2233,1662 +1944,2851 @@ msgstr ""
"Impossible d'utiliser la base de données pour créer la structure. Vérifiez "
"les permissions et l'inexistantce de la structure."
-# "Error on creating database structure."
-#: ../../../../inc/installer.class.php:383
+#: ../../../../inc/Installer.class.php:409
msgid "Error al crear la estructura de la Base de Datos."
msgstr "Erreur pendant la création de la structure de la base de données."
-# "Error on creating "admin" group"
-#: ../../../../inc/installer.class.php:409
+#: ../../../../inc/Installer.class.php:432
msgid "Error al crear el grupo \"admin\""
msgstr "Erreur pendant la création du groupe \"admin\""
-# "Warn to developer"
-#: ../../../../inc/installer.class.php:410
-#: ../../../../inc/installer.class.php:441
-#: ../../../../inc/installer.class.php:459
-#: ../../../../inc/installer.class.php:474
+#: ../../../../inc/Installer.class.php:433
+#: ../../../../inc/Installer.class.php:466
+#: ../../../../inc/Installer.class.php:483
+#: ../../../../inc/Installer.class.php:496
msgid "Informe al desarrollador"
msgstr "Avertissez le développeur"
-# "Error on creating "admin" profile"
-#: ../../../../inc/installer.class.php:440
+#: ../../../../inc/Installer.class.php:465
msgid "Error al crear el perfil \"admin\""
msgstr "Erreur pendant la création du profil \"admin\""
-# "Error on creating "admin" user"
-#: ../../../../inc/installer.class.php:458
+#: ../../../../inc/Installer.class.php:482
msgid "Error al crear el usuario \"admin\""
msgstr "Erreur pendant la création de l'utilisateur \"admin\""
-# "Error on updating master password for user "admin""
-#: ../../../../inc/installer.class.php:473
+#: ../../../../inc/Installer.class.php:495
msgid "Error al actualizar la clave maestra del usuario \"admin\""
msgstr ""
"Erreur pendant l'actualisation du mot de passe maître pour l'utilisateur "
"\"admin\""
-# "Unable to connect to the LDAP server"
-#: ../../../../inc/ldap.class.php:100 ../../../../inc/ldap.class.php:105
+#: ../../../../inc/Ldap.class.php:127 ../../../../inc/Ldap.class.php:131
msgid "No es posible conectar con el servidor de LDAP"
msgstr "Impossible de se connecter au server LDAP"
-# "Connection error (BIND)"
-#: ../../../../inc/ldap.class.php:130 ../../../../inc/ldap.class.php:136
+#: ../../../../inc/Ldap.class.php:156 ../../../../inc/Ldap.class.php:161
msgid "Error al conectar (BIND)"
msgstr "Erreur de connexion (BIND)"
-# "Error on searching objects in base DN"
-#: ../../../../inc/ldap.class.php:159 ../../../../inc/ldap.class.php:165
+#: ../../../../inc/Ldap.class.php:184 ../../../../inc/Ldap.class.php:189
msgid "Error al buscar objetos en DN base"
msgstr "Erreur pendant la recherche d'objets dans la base DN"
-# "Error on searching group RDN"
-#: ../../../../inc/ldap.class.php:193 ../../../../inc/ldap.class.php:199
-#: ../../../../inc/ldap.class.php:206 ../../../../inc/ldap.class.php:211
-#: ../../../../inc/ldap.class.php:221 ../../../../inc/ldap.class.php:226
+#: ../../../../inc/Ldap.class.php:217 ../../../../inc/Ldap.class.php:222
+#: ../../../../inc/Ldap.class.php:229 ../../../../inc/Ldap.class.php:233
+#: ../../../../inc/Ldap.class.php:242 ../../../../inc/Ldap.class.php:246
msgid "Error al buscar RDN de grupo"
msgstr "Erreur pendant la recherche RDN du groupe"
-# "Group RDN found"
-#: ../../../../inc/ldap.class.php:214
-msgid "RDN de grupo encontrado"
-msgstr "RDN de groupe trouvé"
-
-# "Error on searching user DN"
-#: ../../../../inc/ldap.class.php:278 ../../../../inc/ldap.class.php:284
-#: ../../../../inc/ldap.class.php:299 ../../../../inc/ldap.class.php:304
+#: ../../../../inc/Ldap.class.php:295 ../../../../inc/Ldap.class.php:300
+#: ../../../../inc/Ldap.class.php:314 ../../../../inc/Ldap.class.php:318
msgid "Error al buscar el DN del usuario"
msgstr "Erreur pendant la recherche du DN de l'utilisateur"
-# "Error on searching user on LDAP"
-#: ../../../../inc/ldap.class.php:291 ../../../../inc/ldap.class.php:296
+#: ../../../../inc/Ldap.class.php:307 ../../../../inc/Ldap.class.php:311
msgid "Error al localizar el usuario en LDAP"
msgstr "Erreur pendant la recherche de l'utilisateur dans l'annuaire LDAP"
-# "Error on searching users group"
-#: ../../../../inc/ldap.class.php:380 ../../../../inc/ldap.class.php:386
+#: ../../../../inc/Ldap.class.php:392 ../../../../inc/Ldap.class.php:397
+#: ../../../../inc/LdapADS.class.php:99 ../../../../inc/LdapADS.class.php:104
msgid "Error al buscar el grupo de usuarios"
msgstr "Erreur pendant la recherche de groupe d'utilisateurs"
-# "The user has not associated groups"
-#: ../../../../inc/ldap.class.php:392 ../../../../inc/ldap.class.php:398
-msgid "El usuario no pertenece al grupo"
-msgstr "L'utilisateur n'a pas de groupe associé"
+#: ../../../../inc/Ldap.class.php:404
+msgid "Usuario verificado en grupo"
+msgstr ""
-# "Clear Events"
-#: ../../../../inc/log.class.php:82
+#: ../../../../inc/LdapADS.class.php:108 ../../../../inc/LdapADS.class.php:113
+msgid "No se encontró el grupo con ese nombre"
+msgstr "Nom de groupe introuvable avec ce nom"
+
+#: ../../../../inc/Log.class.php:88
msgid "Vaciar Eventos"
msgstr "Nettoyer les évènements"
-# "Clear event log"
-#: ../../../../inc/log.class.php:83 ../../../../inc/tpl/eventlog.php:129
+#: ../../../../inc/Log.class.php:88
+#: ../../../../inc/themes/classic/eventlog.inc:100
+#: ../../../../inc/themes/material-blue/eventlog.inc:100
msgid "Vaciar registro de eventos"
msgstr "Nettoyer le journal d'évènements"
-# "Missing parameters"
-#: ../../../../inc/migrate.class.php:81
+#: ../../../../inc/Migrate.class.php:52
msgid "Faltan parámetros"
msgstr "Paramètres manquants"
-# "Wrong MySQL user/pass"
-#: ../../../../inc/migrate.class.php:140
-msgid "El usuario/clave de MySQL no es correcto"
-msgstr "Mauvais identifiant/mot de passe MySQL"
-
-# "Please, check database connection user"
-#: ../../../../inc/migrate.class.php:141
-msgid "Verifique el usuario de conexión con la Base de Datos"
-msgstr "Veuillez vérifier l'utilsateur de connexion pour la base de données"
-
-# "Incompatible version"
-#: ../../../../inc/migrate.class.php:185
+#: ../../../../inc/Migrate.class.php:149
msgid "La versión no es compatible"
msgstr "Version incompatible"
-# "Please, update to the last version of phpPMS"
-#: ../../../../inc/migrate.class.php:186
+#: ../../../../inc/Migrate.class.php:150
msgid "Actualice a la última versión de phpPMS"
msgstr "Mettez à niveau la dernière version de phpPMS"
-# "Error on retrieving configuration"
-#: ../../../../inc/migrate.class.php:205
+#: ../../../../inc/Migrate.class.php:168
msgid "Error al obtener la configuración"
msgstr "Erreur pendant la récupération de la configuration"
-# "Error on cleaning table"
-#: ../../../../inc/migrate.class.php:256 ../../../../inc/migrate.class.php:270
+#: ../../../../inc/Migrate.class.php:211 ../../../../inc/Migrate.class.php:224
msgid "Error al vaciar tabla"
msgstr "Erreur pendant le nettoyage de la table"
-# "Current user is not application administrator"
-#: ../../../../inc/migrate.class.php:275
+#: ../../../../inc/Migrate.class.php:229
msgid "Usuario actual no es administrador de la aplicación"
msgstr "L'utilisateur actuel n'est administrateur de l'application"
-# "Unable to create the customer"
-#: ../../../../inc/migrate.class.php:323
+#: ../../../../inc/Migrate.class.php:274
msgid "No es posible crear el cliente"
msgstr "Impossible de créer le client"
-# "Please, contact to the developer"
-#: ../../../../inc/migrate.class.php:324
+#: ../../../../inc/Migrate.class.php:275
msgid "Contacte con el desarrollador"
msgstr "Veuillez contacter le développeur"
-# "Import Customers"
-#: ../../../../inc/migrate.class.php:328
+#: ../../../../inc/Migrate.class.php:279
msgid "Importar Clientes"
msgstr "Importer Clients"
-# "Records"
-#: ../../../../inc/migrate.class.php:330 ../../../../inc/migrate.class.php:404
-#: ../../../../inc/migrate.class.php:493 ../../../../inc/migrate.class.php:567
-#: ../../../../inc/migrate.class.php:659 ../../../../inc/migrate.class.php:722
-#: ../../../../inc/migrate.class.php:798 ../../../../inc/migrate.class.php:877
-#: ../../../../inc/migrate.class.php:948
+#: ../../../../inc/Migrate.class.php:281 ../../../../inc/Migrate.class.php:351
+#: ../../../../inc/Migrate.class.php:452 ../../../../inc/Migrate.class.php:525
+#: ../../../../inc/Migrate.class.php:633 ../../../../inc/Migrate.class.php:698
+#: ../../../../inc/Migrate.class.php:772 ../../../../inc/Migrate.class.php:862
+#: ../../../../inc/Migrate.class.php:933
msgid "Registros"
msgstr "Enregistrements"
-# "Error on retrieving customer"
-#: ../../../../inc/migrate.class.php:350
+#: ../../../../inc/Migrate.class.php:303
msgid "Error al obtener los clientes"
msgstr "Erreur pendant la récupération des clients"
-# "Error on retrieving accounts"
-#: ../../../../inc/migrate.class.php:389
+#: ../../../../inc/Migrate.class.php:345
msgid "Error al obtener cuentas"
msgstr "Erreur pendant la récupération des comptes"
-# "Customer not found"
-#: ../../../../inc/migrate.class.php:430
+#: ../../../../inc/Migrate.class.php:374
msgid "Cliente no encontrado"
msgstr "Client introuvable"
-# "Error on importing account"
-#: ../../../../inc/migrate.class.php:456
+#: ../../../../inc/Migrate.class.php:417
msgid "Error al migrar cuenta"
msgstr "Erreur pendant l'importation des comptes"
-# "Error on retrieving accounts groups"
-#: ../../../../inc/migrate.class.php:478
+#: ../../../../inc/Migrate.class.php:446
msgid "Error al obtener los grupos de cuentas"
msgstr "Erreur pendant la récupération des groupes de comptes"
-# "Import Accounts Groups"
-#: ../../../../inc/migrate.class.php:491
+#: ../../../../inc/Migrate.class.php:450
msgid "Importar Grupos de Cuentas"
msgstr "Importer Groupes de Comptes"
-# "Error on accounts groups creation"
-#: ../../../../inc/migrate.class.php:514
+#: ../../../../inc/Migrate.class.php:472
msgid "Error al crear grupos de cuentas"
msgstr "Erreur pendant la création des groupes de comptes"
-# "Error on retrieving accounts history"
-#: ../../../../inc/migrate.class.php:552
+#: ../../../../inc/Migrate.class.php:519
msgid "Error al obtener el historico de cuentas"
msgstr "Erreur pendant la récupération de l'historique des comptes"
-# "Import Accounts History"
-#: ../../../../inc/migrate.class.php:565
+#: ../../../../inc/Migrate.class.php:523
msgid "Importar Histórico de Cuentas"
msgstr "Importer Historique des Comptes"
-# "Error on creating accounts history"
-#: ../../../../inc/migrate.class.php:618
+#: ../../../../inc/Migrate.class.php:592
msgid "Error al crear historico de cuentas"
msgstr "Erreur pendant la création de l'historique des comptes"
-# "Error on retrieving accounts files"
-#: ../../../../inc/migrate.class.php:644
+#: ../../../../inc/Migrate.class.php:627
msgid "Error al obtener los archivos de cuentas"
msgstr "Erreur pendant la récupération des fichiers des comptes"
-# "Import Accounts Files"
-#: ../../../../inc/migrate.class.php:657
+#: ../../../../inc/Migrate.class.php:631
msgid "Importar Archivos de Cuentas"
msgstr "Importer Fichiers de Comptes"
-# "Error on creating accounts files"
-#: ../../../../inc/migrate.class.php:685
+#: ../../../../inc/Migrate.class.php:663
msgid "Error al crear archivos de cuentas"
msgstr "Erreur pendant la création des fichiers de comptes"
-# "Error on retrieving accounts categories"
-#: ../../../../inc/migrate.class.php:707
+#: ../../../../inc/Migrate.class.php:692
msgid "Error al obtener las categorías de cuentas"
msgstr "Erreur pendant la récupération des catégorie de comtpes"
-# "Import Accounts Categories"
-#: ../../../../inc/migrate.class.php:720
+#: ../../../../inc/Migrate.class.php:696
msgid "Importar Categorías de Cuentas"
msgstr "Importer Catégories de Comptes"
-# "Error on retrieving accounts categories"
-#: ../../../../inc/migrate.class.php:744
+#: ../../../../inc/Migrate.class.php:718
msgid "Error al crear categorías de cuentas"
msgstr "Erreur pendant la récupération des catégories de comptes"
-# "Error on retrieving users"
-#: ../../../../inc/migrate.class.php:783
+#: ../../../../inc/Migrate.class.php:766
msgid "Error al obtener los usuarios"
msgstr "Erreur pendant la récupération des utilisateurs"
-# "Import Users"
-#: ../../../../inc/migrate.class.php:796
+#: ../../../../inc/Migrate.class.php:770
msgid "Importar Usuarios"
msgstr "Importer Utilisateurs"
-# "Error on creating users"
-#: ../../../../inc/migrate.class.php:839
+#: ../../../../inc/Migrate.class.php:827
msgid "Error al crear usuarios"
msgstr "Erreur pendant la création des utilisateurs"
-# "Error on retrieving users groups"
-#: ../../../../inc/migrate.class.php:862
+#: ../../../../inc/Migrate.class.php:856
msgid "Error al obtener los grupos de usuarios"
msgstr "Erreur pendant la récupération des groupes d'utilisateurs"
-# "Import Users Groups"
-#: ../../../../inc/migrate.class.php:875
+#: ../../../../inc/Migrate.class.php:860
msgid "Importar Grupos de Usuarios"
msgstr "Importer Groupes d'Utilisateurs"
-# "Error on adding users groups"
-#: ../../../../inc/migrate.class.php:900
+#: ../../../../inc/Migrate.class.php:886
msgid "Error al crear los grupos de usuarios"
msgstr "Erreur pendant l'ajout des groupes d'utilisateurs"
-# "Import Configuration"
-#: ../../../../inc/migrate.class.php:946
+#: ../../../../inc/Migrate.class.php:931
msgid "Importar Configuración"
msgstr "Importer Configuration"
-# "Edit Profile"
-#: ../../../../inc/profiles.class.php:258
+#: ../../../../inc/Profile.class.php:69 ../../../../inc/Profile.class.php:123
+#: ../../../../inc/Profile.class.php:128
+msgid "Migrar Perfiles"
+msgstr "Migrer des profiles"
+
+#: ../../../../inc/Profile.class.php:69
+msgid "Error al obtener perfiles"
+msgstr ""
+
+#: ../../../../inc/Profile.class.php:126
+msgid "Operación realizada correctamente"
+msgstr "Opération faite avec succès"
+
+#: ../../../../inc/Profile.class.php:128
+msgid "Fallo al realizar la operación"
+msgstr "Erreur pendant l'opération"
+
+#: ../../../../inc/ProfileBase.class.php:164
+msgid "Datos de perfil incorrectos"
+msgstr ""
+
+#: ../../../../inc/ProfileBase.class.php:550
+#: ../../../../web/UsersMgmtC.class.php:274
+msgid "Eliminar Perfil"
+msgstr "Supprimer Profil"
+
+#: ../../../../inc/ProfileBase.class.php:593
msgid "Modificar Perfil"
msgstr "Modifier Profil"
-# "Edit Account"
-#: ../../../../inc/tpl/accounts.php:63
-msgid "Editar Cuenta"
-msgstr "Editer Compte"
+#: ../../../../inc/SyspassImport.class.php:111
+#: ../../../../inc/SyspassImport.class.php:136
+#: ../../../../inc/SyspassImport.class.php:161
+msgid "Formato de XML inválido"
+msgstr "Format XML invalide"
-# "Account name"
-#: ../../../../inc/tpl/accounts.php:178
-msgid "Nombre de cuenta"
-msgstr "Nom de compte"
+#: ../../../../inc/SyspassImport.class.php:111
+msgid "No hay categorías para importar"
+msgstr "Il n'y a pas de catégorie à importer"
-# "Search down or enter"
-#: ../../../../inc/tpl/accounts.php:197
-msgid "Buscar en desplegable o introducir"
-msgstr "Chercher dans la liste déroulante ou entrer"
+#: ../../../../inc/SyspassImport.class.php:136
+msgid "No hay clientes para importar"
+msgstr "Il n'y a pas de clients à importer"
-# "Access URL or IP"
-#: ../../../../inc/tpl/accounts.php:223
-msgid "URL o IP de acceso"
-msgstr "URL ou IP d'accès"
+#: ../../../../inc/SyspassImport.class.php:161
+msgid "No hay cuentas para importar"
+msgstr "Il n'y a pas de comptes à importer"
-# "Access user"
-#: ../../../../inc/tpl/accounts.php:239
-msgid "Usuario de acceso"
-msgstr "Utilisateur d'accès"
-
-# "The generated password will be shown here"
-#: ../../../../inc/tpl/accounts.php:255 ../../../../inc/tpl/editpass.php:61
-msgid "La clave generada se mostrará aquí"
-msgstr "Le mot de passe généré sera affiché ici"
-
-# "Notes about the account"
-#: ../../../../inc/tpl/accounts.php:273
-msgid "Notas sobre la cuenta"
-msgstr "Notes sur le compte"
-
-# "Permissions"
-#: ../../../../inc/tpl/accounts.php:279
-msgid "Permisos"
-msgstr "Permissions"
-
-# "Enable Edit"
-#: ../../../../inc/tpl/accounts.php:306 ../../../../inc/tpl/accounts.php:337
-msgid "Hablitar edición"
-msgstr "Activer l'Edition"
-
-# "YES"
-#: ../../../../inc/tpl/accounts.php:307 ../../../../inc/tpl/accounts.php:338
-#: ../../../../inc/tpl/accounts.php:601 ../../../../inc/tpl/masterpass.php:178
-#: ../../../../inc/tpl/migrate.php:132
-msgid "SI"
-msgstr "OUI"
-
-# "NO"
-#: ../../../../inc/tpl/accounts.php:307 ../../../../inc/tpl/accounts.php:338
-#: ../../../../inc/tpl/accounts.php:599 ../../../../inc/tpl/masterpass.php:81
-#: ../../../../inc/tpl/masterpass.php:100
-#: ../../../../inc/tpl/masterpass.php:176 ../../../../inc/tpl/migrate.php:81
-#: ../../../../inc/tpl/migrate.php:130
-msgid "NO"
-msgstr "NON"
-
-# "Groups"
-#: ../../../../inc/tpl/accounts.php:314 ../../../../inc/tpl/profiles.php:90
-msgid "Grupos"
-msgstr "Groupes"
-
-# "Files"
-#: ../../../../inc/tpl/accounts.php:360 ../../../../inc/tpl/profiles.php:65
-msgid "Archivos"
-msgstr "Fichiers"
-
-# "Drop files here (max. 5) or click to select"
-#: ../../../../inc/tpl/accounts.php:373
-msgid "Soltar archivos aquí (max. 5) o click para seleccionar"
-msgstr "Déposer les fichier ici (max. 5) ou cliquez pour les sélectionner"
-
-# "Maximum file size"
-#: ../../../../inc/tpl/accounts.php:373 ../../../../inc/tpl/config.php:204
-msgid "Tamaño máximo de archivo"
-msgstr "Taille maximale de fichier"
-
-# "History"
-#: ../../../../inc/tpl/accounts.php:385
-msgid "Historial"
-msgstr "Historique"
-
-# "Select date"
-#: ../../../../inc/tpl/accounts.php:402
-msgid "Seleccionar fecha"
-msgstr "Sélectionner date"
-
-# "Last Modification"
-#: ../../../../inc/tpl/accounts.php:410 ../../../../inc/tpl/users.php:193
-msgid "Última Modificación"
-msgstr "Dernière modification"
-
-# "by"
-#: ../../../../inc/tpl/accounts.php:412
-msgid "por"
-msgstr "par"
-
-# "Visits"
-#: ../../../../inc/tpl/accounts.php:422
-msgid "Visitas"
-msgstr "Visites"
-
-# "Date Added"
-#: ../../../../inc/tpl/accounts.php:426
-msgid "Fecha Alta"
-msgstr "Date Ajoutée"
-
-# "Creator"
-#: ../../../../inc/tpl/accounts.php:430
-msgid "Creador"
-msgstr "Créateur"
-
-# "Main Group"
-#: ../../../../inc/tpl/accounts.php:434
-msgid "Grupo Principal"
-msgstr "Groupe Principal"
-
-# "Secondary Users"
-#: ../../../../inc/tpl/accounts.php:439
-msgid "Usuarios Secundarios"
-msgstr "Utilisateur Secondaires"
-
-# "Secondary Groups"
-#: ../../../../inc/tpl/accounts.php:460
-msgid "Grupos Secundarios"
-msgstr "Groupes Secondaires"
-
-# "Date Modified"
-#: ../../../../inc/tpl/accounts.php:482
-msgid "Fecha Edición"
-msgstr "Date Modifiée"
-
-# "Editor"
-#: ../../../../inc/tpl/accounts.php:486
-msgid "Editor"
-msgstr "Editeur"
-
-# "View Current"
-#: ../../../../inc/tpl/accounts.php:508
-msgid "Ver Actual"
-msgstr "Voir Actuel"
-
-# "Back"
-#: ../../../../inc/tpl/accounts.php:513 ../../../../inc/tpl/editpass.php:85
-#: ../../../../inc/tpl/request.php:72
-msgid "Atrás"
-msgstr "Retour"
-
-# "Restore account from this point"
-#: ../../../../inc/tpl/accounts.php:520
-msgid "Restaurar cuenta desde este punto"
-msgstr "Restaurer les comptes à partir de ce point"
-
-# "Edit Account Password"
-#: ../../../../inc/tpl/accounts.php:549 ../../../../inc/tpl/editpass.php:35
-msgid "Modificar Clave de Cuenta"
-msgstr "Modifier Mot de passe de Compte"
-
-# "Select Customer"
-#: ../../../../inc/tpl/accounts.php:578 ../../../../inc/tpl/search.php:89
-msgid "Seleccionar Cliente"
-msgstr "Sélectionner Client"
-
-# "No results"
-#: ../../../../inc/tpl/accounts.php:580 ../../../../inc/tpl/accounts.php:585
-#: ../../../../inc/tpl/config.php:601 ../../../../inc/tpl/config.php:606
-#: ../../../../inc/tpl/search.php:89 ../../../../inc/tpl/search.php:90
-#: ../../../../inc/tpl/users.php:231 ../../../../inc/tpl/users.php:236
-msgid "Sin resultados"
-msgstr "Aucun résultat"
-
-# "Select category"
-#: ../../../../inc/tpl/accounts.php:583 ../../../../inc/tpl/search.php:90
-msgid "Seleccionar Categoría"
-msgstr "Sélectionner Catégorie"
-
-# "Select secondary groups"
-#: ../../../../inc/tpl/accounts.php:588
-msgid "Seleccionar grupos secundarios"
-msgstr "Sélectionner les groupes secondaires"
-
-# "Select users"
-#: ../../../../inc/tpl/accounts.php:591
-msgid "Seleccionar usuarios"
-msgstr "Sélectionner utilisateurs"
-
-# "Last backup"
-#: ../../../../inc/tpl/backup.php:42
-msgid "Último backup"
-msgstr "Dernière sauvegarde"
-
-# "There are no backups available"
-#: ../../../../inc/tpl/backup.php:42
-msgid "No se encontraron backups"
-msgstr "Il n'y a pas de sauvegarde disponible"
-
-# "Result"
-#: ../../../../inc/tpl/backup.php:48
-msgid "Resultado"
-msgstr "Resultat"
-
-# "Download Current"
-#: ../../../../inc/tpl/backup.php:56
-msgid "Descargar Actual"
-msgstr "Télécharger l'élément actuel"
-
-# "There are no backups for download"
-#: ../../../../inc/tpl/backup.php:64
-msgid "No hay backups para descargar"
-msgstr "Il n'y a pas de sauvegarde à télécharger"
-
-# "Category name"
-#: ../../../../inc/tpl/categories.php:42
-msgid "Nombre de la categoría"
-msgstr "Nom de la catégorie"
-
-# "Category description"
-#: ../../../../inc/tpl/categories.php:50
-msgid "Descripción de la categoría"
-msgstr "Description de la catégorie"
-
-# "Site"
-#: ../../../../inc/tpl/config.php:87
-msgid "Sitio"
-msgstr "Site"
-
-# "Language"
-#: ../../../../inc/tpl/config.php:95
-msgid "Idioma"
-msgstr "Langage"
-
-# "Session timeout (s)"
-#: ../../../../inc/tpl/config.php:109
-msgid "Timeout de sesión (s)"
-msgstr "Timeout de session (s)"
-
-# "Enable event log"
-#: ../../../../inc/tpl/config.php:118
-msgid "Habilitar log de eventos"
-msgstr "Active le journal des évènements"
-
-# "Enable debug"
-#: ../../../../inc/tpl/config.php:129
-msgid "Habilitar depuración"
-msgstr "Activer le mode debug"
-
-# "Maintenance mode"
-#: ../../../../inc/tpl/config.php:140
-msgid "Modo mantenimiento"
-msgstr "Mode maintenance"
-
-# "Check for updates"
-#: ../../../../inc/tpl/config.php:151
-msgid "Comprobar actualizaciones"
-msgstr "Vérifier les mises à jour"
-
-# "Account name as link"
-#: ../../../../inc/tpl/config.php:162
-msgid "Nombre de cuenta como enlace"
-msgstr "Nom de compte comme lien"
-
-# "Files management"
-#: ../../../../inc/tpl/config.php:173
-msgid "Gestión de archivos"
-msgstr "Gestion des fichiers"
-
-# "Global searches"
-#: ../../../../inc/tpl/config.php:184
-msgid "Búsquedas globales"
-msgstr "Recherches globales"
-
-# "Allowed file extensions"
-#: ../../../../inc/tpl/config.php:195
-msgid "Extensiones de archivos permitidas"
-msgstr "Extensions de fichiers permises"
-
-# "Results per page"
-#: ../../../../inc/tpl/config.php:215
-msgid "Resultados por página"
-msgstr "Resultats par page"
-
-# "Results like Cards"
-#: ../../../../inc/tpl/config.php:231
-msgid "Resultados en Tarjetas"
-msgstr "Résultats format cartes"
-
-# "Wiki"
-#: ../../../../inc/tpl/config.php:244
-msgid "Wiki"
-msgstr "Wiki"
-
-# "Enable Wiki links"
-#: ../../../../inc/tpl/config.php:250
-msgid "Habilitar enlaces Wiki"
-msgstr "Activer les liens Wiki"
-
-# "Wiki search URL"
-#: ../../../../inc/tpl/config.php:261
-msgid "URL de búsqueda Wiki"
-msgstr "URL de recherche Wiki"
-
-# "Wiki page URL"
-#: ../../../../inc/tpl/config.php:271
-msgid "URL de página en Wiki"
-msgstr "URL de page Wiki"
-
-# "Account name preffix"
-#: ../../../../inc/tpl/config.php:281
-msgid "Prefijo para nombre de cuenta"
-msgstr "Préfix de nom de compte"
-
-# "LDAP"
-#: ../../../../inc/tpl/config.php:294
-msgid "LDAP"
-msgstr "LDAP"
-
-# "Enable LDAP"
-#: ../../../../inc/tpl/config.php:301
-msgid "Habilitar LDAP"
-msgstr "Activer l'annuaire LDAP"
-
-# "Server"
-#: ../../../../inc/tpl/config.php:312 ../../../../inc/tpl/config.php:425
-msgid "Servidor"
-msgstr "Serveur"
-
-# "Bind User"
-#: ../../../../inc/tpl/config.php:322
-msgid "Usuario de conexión"
-msgstr "Utilisateur de connexion"
-
-# "Bind Password"
-#: ../../../../inc/tpl/config.php:332
-msgid "Clave de conexión"
-msgstr "Mot de passe de connexion"
-
-# "Search base"
-#: ../../../../inc/tpl/config.php:342
-msgid "Base de búsqueda"
-msgstr "Base de recherche"
-
-# "Default Group"
-#: ../../../../inc/tpl/config.php:362
-msgid "Grupo por Defecto"
-msgstr "Groupe par défaut"
-
-# "Default Profile"
-#: ../../../../inc/tpl/config.php:371
-msgid "Perfil por Defecto"
-msgstr "Profil par défaut"
-
-# "Active Directory"
-#: ../../../../inc/tpl/config.php:380
-msgid "Active Directory"
-msgstr "Active Directory"
-
-# "Check"
-#: ../../../../inc/tpl/config.php:391
-msgid "Comprobar"
-msgstr "Vérifier"
-
-# "Check LDAP connection"
-#: ../../../../inc/tpl/config.php:394
-msgid "Comprobar conexión con LDAP"
-msgstr "Vérifier les connexions LDAP"
-
-# "Module unavilable"
-#: ../../../../inc/tpl/config.php:401 ../../../../inc/util.class.php:141
-msgid "Módulo no disponible"
-msgstr "Module indisponible"
-
-# "Mail"
-#: ../../../../inc/tpl/config.php:409
-msgid "Correo"
-msgstr "Courriel"
-
-# "Enable email notifications"
-#: ../../../../inc/tpl/config.php:415
-msgid "Habilitar notificaciones de correo"
-msgstr "Activer les notifications par courriel"
-
-# "Port"
-#: ../../../../inc/tpl/config.php:434
-msgid "Puerto"
-msgstr "Port"
-
-# "Enable Authentication"
-#: ../../../../inc/tpl/config.php:443
-msgid "Habilitar Autentificación"
-msgstr "Activer l'authentification"
-
-# "Security"
-#: ../../../../inc/tpl/config.php:471
-msgid "Seguridad"
-msgstr "Sécurité"
-
-# "Disabled"
-#: ../../../../inc/tpl/config.php:477
-msgid "Deshabilitada"
-msgstr "Désactivé"
-
-# "Recipient email address"
-#: ../../../../inc/tpl/config.php:488
-msgid "Dirección de correo de envío"
-msgstr "Adresse courriel du destinataire"
-
-# "Enable requests by email"
-#: ../../../../inc/tpl/config.php:497
-msgid "Habilitar peticiones por correo"
-msgstr "Activer les demandes par courriel"
-
-# "Add extension"
-#: ../../../../inc/tpl/config.php:541
-msgid "Añadir extensión"
-msgstr "Ajouter extension"
-
-# "Delete extension"
-#: ../../../../inc/tpl/config.php:542
-msgid "Eliminar extensión"
-msgstr "Supprimer extension"
-
-# "Add filter"
-#: ../../../../inc/tpl/config.php:570
-msgid "Añadir filtro"
-msgstr "Ajouter filtre"
-
-# "Delete filter"
-#: ../../../../inc/tpl/config.php:571
-msgid "Eliminar filtro"
-msgstr "Supprimer filtre"
-
-# "Select Group"
-#: ../../../../inc/tpl/config.php:599 ../../../../inc/tpl/users.php:234
-msgid "Seleccionar Grupo"
-msgstr "Sélectionner Groupe"
-
-# "Select Profile"
-#: ../../../../inc/tpl/config.php:604 ../../../../inc/tpl/users.php:229
-msgid "Seleccionar Perfil"
-msgstr "Sélectionner Profil"
-
-# "Customer name"
-#: ../../../../inc/tpl/customers.php:42
-msgid "Nombre del cliente"
-msgstr "Nom du client"
-
-# "Customer description"
-#: ../../../../inc/tpl/customers.php:50
-msgid "Descripción del cliente"
-msgstr "Description du client"
-
-# "Event Log"
-#: ../../../../inc/tpl/eventlog.php:37 ../../../../inc/tpl/main.php:57
-msgid "Registro de Eventos"
-msgstr "Journal d'évènements"
-
-# "Date / Time"
-#: ../../../../inc/tpl/eventlog.php:56
-msgid "Fecha / Hora"
-msgstr "Date / Heure"
-
-# "Event"
-#: ../../../../inc/tpl/eventlog.php:59
-msgid "Evento"
-msgstr "Evènement"
-
-# "IP"
-#: ../../../../inc/tpl/eventlog.php:65
-msgid "IP"
-msgstr "IP"
-
-# "Group name"
-#: ../../../../inc/tpl/groups.php:41
-msgid "Nombre del grupo"
-msgstr "Nom du groupe"
-
-# "Group description"
-#: ../../../../inc/tpl/groups.php:47
-msgid "Descripción del grupo"
-msgstr "Description du groupe"
-
-# "Installation finished"
-#: ../../../../inc/tpl/install.php:36
-msgid "Instalación finalizada"
-msgstr "Installation terminée"
-
-# "Click here to sign in"
-#: ../../../../inc/tpl/install.php:37
-msgid "Pulse aquí para acceder"
-msgstr ""
-"Pressez ici pour vous connecter"
-
-# "Installation"
-#: ../../../../inc/tpl/install.php:47
-msgid "Instalación "
-msgstr "Installation"
-
-# "This PHP version is vulnerable to NULL Byte attack CVE-2006-7243)"
-#: ../../../../inc/tpl/install.php:55
-msgid "La version de PHP es vulnerable al ataque NULL Byte (CVE-2006-7243)"
-msgstr ""
-"Cette version de PHP est vulnerable aux attaques NULL Byte (CVE-2006-7243)"
-
-# "Please update PHP version to run sysPass in a secure way"
-#: ../../../../inc/tpl/install.php:56
-msgid "Actualice la versión de PHP para usar sysPass de forma segura"
-msgstr ""
-"Mettez à jour votre version de PHP afin d'utiliser sysPass de manière "
-"sécurisée"
-
-# "Cannot find random number generator."
-#: ../../../../inc/tpl/install.php:60
-msgid "No se encuentra el generador de números aleatorios."
-msgstr "Impossible de trouver le générateur de nombres aléatoires."
-
-# ""
-#: ../../../../inc/tpl/install.php:61
-msgid ""
-"Sin esta función un atacante puede utilizar su cuenta al resetear la clave"
-msgstr ""
-"Sans cette fonction, un attaquant pourrait prendre votre compte sur un "
-"changement de mot de passe"
-
-# "Create sysPass admin account"
-#: ../../../../inc/tpl/install.php:88
-msgid "Crear cuenta de admin de sysPass"
-msgstr "Créer le compte admin sysPass"
-
-# "sysPass administrator's login"
-#: ../../../../inc/tpl/install.php:91
-msgid "Login del usuario administrador de sysPass"
-msgstr "Login administrateur de sysPass"
-
-# "Show Password"
-#: ../../../../inc/tpl/install.php:99 ../../../../inc/tpl/install.php:100
-#: ../../../../inc/tpl/install.php:114 ../../../../inc/tpl/install.php:115
-#: ../../../../inc/tpl/install.php:140 ../../../../inc/tpl/install.php:141
-msgid "Mostrar Clave"
-msgstr "Afficher Mot de passe"
-
-# "DB Configuration"
-#: ../../../../inc/tpl/install.php:127
-msgid "Configurar BBDD"
-msgstr "Configuration BDD"
-
-# "User login with with database administrative rights"
-#: ../../../../inc/tpl/install.php:133
-msgid "Login de usuario con permisos de administrador de MySQL"
-msgstr "Un utilisateur avec des droits d'administration sur la BDD"
-
-# "DB Username"
-#: ../../../../inc/tpl/install.php:134 ../../../../inc/tpl/install.php:135
-#: ../../../../inc/tpl/migrate.php:40
-msgid "Usuario BBDD"
-msgstr "Utilisateur BDD"
-
-# "DB Password"
-#: ../../../../inc/tpl/install.php:142 ../../../../inc/tpl/install.php:143
-#: ../../../../inc/tpl/migrate.php:49
-msgid "Clave BBDD"
-msgstr "Mot de passe BDD"
-
-# "sysPass database name"
-#: ../../../../inc/tpl/install.php:149
-msgid "Nombre de la base de datos para sysPass"
-msgstr "Nom de la base de données sysPass"
-
-# "DB Name"
-#: ../../../../inc/tpl/install.php:150 ../../../../inc/tpl/install.php:151
-#: ../../../../inc/tpl/migrate.php:57
-msgid "Nombre BBDD"
-msgstr "Nom BDD"
-
-# "sysPass database server name"
-#: ../../../../inc/tpl/install.php:158
-msgid "Nombre del servidor de la base de datos de sysPass"
-msgstr "Nom du serveur de base de données sysPass"
-
-# "DB Server"
-#: ../../../../inc/tpl/install.php:159 ../../../../inc/tpl/install.php:160
-#: ../../../../inc/tpl/migrate.php:66
-msgid "Servidor BBDD"
-msgstr "Serveur BDD"
-
-# "It does not create or verify the user's permissions on the DB"
-#: ../../../../inc/tpl/install.php:168
-msgid "No crea ni verifica los permisos del usuario sobre la BBDD"
-msgstr ""
-"Ne crée pas ni ne vérifie les permissions de l'utilisateur dans la base de "
-"données"
-
-# "Hosting Mode"
-#: ../../../../inc/tpl/install.php:170 ../../../../inc/tpl/install.php:191
-#: ../../../../inc/tpl/install.php:194
-msgid "Modo Hosting"
-msgstr "Mode Hébergé"
-
-# "Install"
-#: ../../../../inc/tpl/install.php:177
-msgid "Instalar"
-msgstr "Installer"
-
-# "Sign in"
-#: ../../../../inc/tpl/login.php:51 ../../../../inc/upgrade.class.php:50
-msgid "Acceder"
-msgstr "Se connecter"
-
-# "Lost your password?"
-#: ../../../../inc/tpl/login.php:65
-msgid "¿Olvidó su clave?"
-msgstr "Mot de passe oublié?"
-
-# "Session finished"
-#: ../../../../inc/tpl/login.php:71 ../../../../js/js.php:47
-msgid "Sesión finalizada"
-msgstr "Session terminée"
-
-# "Application successfully updated"
-#: ../../../../inc/tpl/login.php:78
-msgid "Aplicación actualizada correctamente"
-msgstr "Application mis à jour avec succès"
-
-# New search interface with list or card like styles
-#: ../../../../inc/tpl/login.php:84
-#, fuzzy
-msgid "Nuevo interface de búsqueda con estilo de lista o tipo tarjeta"
-msgstr "New search interface with list or card like styles"
-
-# Users and groups selection for account access
-#: ../../../../inc/tpl/login.php:85
-#, fuzzy
-msgid "Selección de grupos y usuarios de acceso a cuentas"
-msgstr "Users and groups selection for account access"
-
-# Drag&Drop for files uploading
-#: ../../../../inc/tpl/login.php:86
-#, fuzzy
-msgid "Drag&Drop para subida de archivos"
-msgstr "Drag&Drop for files uploading"
-
-# "Copy Password to Clipboard"
-#: ../../../../inc/tpl/login.php:87
-#, fuzzy
-msgid "Copiar clave al portapapeles"
-msgstr "Copier le mot de passe dans le presse papier"
-
-# Accounts history and restore points
-#: ../../../../inc/tpl/login.php:88
-#, fuzzy
-msgid "Historial de cuentas y restauración"
-msgstr "Accounts history and restore points"
-
-# New categories and customers management
-#: ../../../../inc/tpl/login.php:89
-#, fuzzy
-msgid "Nueva gestión de categorías y clientes"
-msgstr "New categories and customers management"
-
-# Reset password function for users
-#: ../../../../inc/tpl/login.php:90
-#, fuzzy
-msgid "Función de olvido de claves para usuarios"
-msgstr "Reset password function for users"
-
-# Improved Active Directory and LDAP integration
-#: ../../../../inc/tpl/login.php:91
-#, fuzzy
-msgid "Integración con Active Directory y LDAP mejorada"
-msgstr "Improved Active Directory and LDAP integration"
-
-# Email notifications with authentication
-#: ../../../../inc/tpl/login.php:92
-#, fuzzy
-msgid "Autentificación para notificaciones por correo"
-msgstr "Email notifications with authentication"
-
-# Global account searching for unprivileged users
-#: ../../../../inc/tpl/login.php:93
-#, fuzzy
-msgid "Búsqueda global de cuentas para usuarios sin permisos"
-msgstr "Global account searching for unprivileged users"
-
-# Requests for account modification for unprivileged users
-#: ../../../../inc/tpl/login.php:94
-#, fuzzy
-msgid "Solicitudes de modificación de cuentas para usuarios sin permisos"
-msgstr "Requests for account modification for unprivileged users"
-
-# Accounts import from KeePass, KeePassX and CSV
-#: ../../../../inc/tpl/login.php:95
-#, fuzzy
-msgid "Importación de cuentas desde KeePass, KeePassX y CSV"
-msgstr "Accounts import from KeePass, KeePassX and CSV"
-
-# Clone account function
-#: ../../../../inc/tpl/login.php:96
-#, fuzzy
-msgid "Función de copiar cuentas"
-msgstr "Clone account function"
-
-# Code optimization and faster loading
-#: ../../../../inc/tpl/login.php:97
-#, fuzzy
-msgid "Optimización del código y mayor rapidez de carga"
-msgstr "Code optimization and faster loading"
-
-# Improved security to prevent XSS and SQL injection
-#: ../../../../inc/tpl/login.php:98
-#, fuzzy
-msgid "Mejoras de seguridad en XSS e inyección SQL"
-msgstr "Improved security to prevent XSS and SQL injection"
-
-# New Features
-#: ../../../../inc/tpl/login.php:101 ../../../../inc/tpl/login.php:102
-#, fuzzy
-msgid "Nuevas Características"
-msgstr "New Features"
-
-# "Change user password"
-#: ../../../../inc/tpl/main.php:37
-msgid "Cambiar clave de usuario"
-msgstr "Changer mot de passe utilisateur"
-
-# "Sign out"
-#: ../../../../inc/tpl/main.php:44
-msgid "Salir"
-msgstr "Se déconnecter"
-
-# "Search"
-#: ../../../../inc/tpl/main.php:52
-msgid "Buscar"
-msgstr "Chercher"
-
-# "Customer and Categories management"
-#: ../../../../inc/tpl/main.php:55
-msgid "Gestión de Clientes y Categorías"
-msgstr "Gestion des clients et catégories"
-
-# "Last Change"
-#: ../../../../inc/tpl/masterpass.php:43
-#: ../../../../inc/tpl/masterpass.php:128
-msgid "Último cambio"
-msgstr "Dernier changement"
-
-# "Current Master Password"
-#: ../../../../inc/tpl/masterpass.php:52
-msgid "Clave Maestra actual"
-msgstr "Mot de passe Maître actuel"
-
-# "New Master Password"
-#: ../../../../inc/tpl/masterpass.php:60
-msgid "Nueva Clave Maestra"
-msgstr "Nouveau Mot de passe Maître"
-
-# "New Master Password (repeat)"
-#: ../../../../inc/tpl/masterpass.php:69
-msgid "Nueva Clave Maestra (repetir)"
-msgstr "Nouveau Mot de passe Maître (répéter)"
-
-# "Do not modify accounts"
-#: ../../../../inc/tpl/masterpass.php:77
-msgid "No modificar cuentas"
-msgstr "Ne pas modifier les comptes"
-
-# "Confirm Change"
-#: ../../../../inc/tpl/masterpass.php:87
-msgid "Confirmar cambio"
-msgstr "Confirmer changement"
-
-# "Warning"
-#: ../../../../inc/tpl/masterpass.php:90 ../../../../inc/tpl/masterpass.php:93
-#: ../../../../inc/tpl/masterpass.php:96 ../../../../inc/tpl/migrate.php:78
-msgid "Atención"
-msgstr "Attention"
-
-# "You should save the new password on a secure place"
-#: ../../../../inc/tpl/masterpass.php:91
-msgid "Guarde la nueva clave en un lugar seguro."
-msgstr "Vous devriez sauvegarder le mot de passe dans un endroit sûre"
-
-# "All accounts passwords will be encrypted again."
-#: ../../../../inc/tpl/masterpass.php:94
-msgid "Se volverán a encriptar las claves de todas las cuentas."
-msgstr "Tous les mots de passe des comptes seront encryptés de nouveau."
-
-# "Users will need to enter the new master key."
-#: ../../../../inc/tpl/masterpass.php:97
-msgid "Los usuarios deberán de introducir la nueva clave maestra."
-msgstr "Les utilisateurs devront saisir un nouveau mot de passe maître."
-
-# Temporary Password
-#: ../../../../inc/tpl/masterpass.php:121
-#, fuzzy
-msgid "Clave Temporal"
-msgstr "Temporary Password"
-
-# Not generated
-#: ../../../../inc/tpl/masterpass.php:135
-#: ../../../../inc/tpl/masterpass.php:149
-#, fuzzy
-msgid "No generada"
-msgstr "Not generated"
-
-# Valid until
-#: ../../../../inc/tpl/masterpass.php:142
-#, fuzzy
-msgid "Válido hasta"
-msgstr "Valid until "
-
-# Generate
-#: ../../../../inc/tpl/masterpass.php:164
-#, fuzzy
-msgid "Generar"
-msgstr "Generate"
-
-# "phpPMS Import"
-#: ../../../../inc/tpl/migrate.php:33
-msgid "Importar phpPMS"
-msgstr "Importer phpPMS"
-
-# "Confirm"
-#: ../../../../inc/tpl/migrate.php:75
-msgid "Confirmar"
-msgstr "Confirmer"
-
-# "Current data will be removed (except current user)"
-#: ../../../../inc/tpl/migrate.php:79
-msgid "Los datos actuales serán borrados (excepto el usuario actual)"
-msgstr "Les données actuelles seront supprimées(sauf l'utilisateur actuel)"
-
-# "Start"
-#: ../../../../inc/tpl/migrate.php:97
-msgid "Iniciar"
-msgstr "Démarrer"
-
-# "CSV/XML Import"
-#: ../../../../inc/tpl/migrate.php:103
-msgid "Importar CSV/XML"
-msgstr "Importer CSV/XML"
-
-# "Drop files here or click to select"
-#: ../../../../inc/tpl/migrate.php:117
-msgid "Soltar archivo aquí o click para seleccionar"
-msgstr "Supprimer les fichier ici ou cliquez pour sélectionner"
-
-# "Request Password Change"
-#: ../../../../inc/tpl/passreset.php:47
-msgid "Solicitud de Cambio de Clave"
-msgstr "Demande de changement de Mot de passe"
-
-# "User login"
-#: ../../../../inc/tpl/passreset.php:50
-msgid "Login del Usuario"
-msgstr "Login de l'utilisateur"
-
-# "User's Email"
-#: ../../../../inc/tpl/passreset.php:55
-msgid "Email del Usuario"
-msgstr "Courriel de l'utilisateur"
-
-# "Email"
-#: ../../../../inc/tpl/passreset.php:56 ../../../../inc/tpl/users.php:116
-msgid "Email"
-msgstr "Courriel"
-
-# "New Password"
-#: ../../../../inc/tpl/passreset.php:61
-msgid "Nueva Clave"
-msgstr "Nouveau Mot de passe"
-
-# "New Password (Verify)"
-#: ../../../../inc/tpl/passreset.php:69
-msgid "Nueva Clave (Verificar)"
-msgstr "Nouveau Mot de passe (Vérifier)"
-
-# "Password (Verify)"
-#: ../../../../inc/tpl/passreset.php:70
-msgid "Clave (Verificar)"
-msgstr "Mot de passe (Vérifier)"
-
-# "Back"
-#: ../../../../inc/tpl/passreset.php:83
-msgid "Volver"
-msgstr "Retour"
-
-# "Go back to login"
-#: ../../../../inc/tpl/passreset.php:83
-msgid "Volver a iniciar sesión"
-msgstr "Retour au login"
-
-# "Request"
-#: ../../../../inc/tpl/passreset.php:85
-msgid "Solicitar"
-msgstr "Demander"
-
-# "Request password change"
-#: ../../../../inc/tpl/passreset.php:86
-msgid "Solicitar cambio de clave"
-msgstr "Demander le changement de mot de passe"
-
-# "Change"
-#: ../../../../inc/tpl/passreset.php:88
-msgid "Cambiar"
-msgstr "Changer"
-
-# "Change password"
-#: ../../../../inc/tpl/passreset.php:89
-msgid "Cambiar Clave"
-msgstr "Changer Mot de passe"
-
-# "Profile name"
-#: ../../../../inc/tpl/profiles.php:41
-msgid "Nombre del perfil"
-msgstr "Nom du profil"
-
-# "View account details"
-#: ../../../../inc/tpl/profiles.php:48
-msgid "Ver detalles de cuenta"
-msgstr "Voir détails de compte"
-
-# "View"
-#: ../../../../inc/tpl/profiles.php:48
-msgid "Ver"
-msgstr "Voir"
-
-# "View account password"
-#: ../../../../inc/tpl/profiles.php:50
-msgid "Ver clave de cuenta"
-msgstr "Voir mot de passe de compte"
-
-# "View account history"
-#: ../../../../inc/tpl/profiles.php:53
-msgid "Ver historial de cuenta"
-msgstr "Voir historique de compte"
-
-# "View History"
-#: ../../../../inc/tpl/profiles.php:53
-msgid "Ver Historial"
-msgstr "Voir Historique"
-
-# "Edit account"
-#: ../../../../inc/tpl/profiles.php:55
-msgid "Editar cuenta"
-msgstr "Editer compte"
-
-# "Edit"
-#: ../../../../inc/tpl/profiles.php:55
-msgid "Editar"
-msgstr "Editer"
-
-# "Edit account password"
-#: ../../../../inc/tpl/profiles.php:58
-msgid "Editar clave de cuenta"
-msgstr "Editer mot de passe du compte"
-
-# "Edit Password"
-#: ../../../../inc/tpl/profiles.php:58
-msgid "Editar Clave"
-msgstr "Editer Mot de passe"
-
-# "Add new account"
-#: ../../../../inc/tpl/profiles.php:60
-msgid "Añadir nueva cuenta"
-msgstr "Ajouter nouveau compte"
-
-# "Add"
-#: ../../../../inc/tpl/profiles.php:60
-msgid "Añadir"
-msgstr "Ajouter"
-
-# "Delete account"
-#: ../../../../inc/tpl/profiles.php:63
-msgid "Borrar cuenta"
-msgstr "Supprimer compte"
-
-# "Delete"
-#: ../../../../inc/tpl/profiles.php:63
-msgid "Borrar"
-msgstr "Supprimer"
-
-# "View account files"
-#: ../../../../inc/tpl/profiles.php:65
-msgid "Ver archivos de cuenta"
-msgstr "Voir fichiers de compte"
-
-# "General configuration"
-#: ../../../../inc/tpl/profiles.php:74
-msgid "Configuración general"
-msgstr "Configuration générale"
-
-# "General"
-#: ../../../../inc/tpl/profiles.php:74
-msgid "General"
-msgstr "Générale"
-
-# "Change master password"
-#: ../../../../inc/tpl/profiles.php:76
-msgid "Cambiar clave maestra"
-msgstr "Changer mot de passe maître"
-
-# "Perform backup"
-#: ../../../../inc/tpl/profiles.php:79
-msgid "Realizar copia de seguridad"
-msgstr "Effectuer une sauvegarde"
-
-# "Backup"
-#: ../../../../inc/tpl/profiles.php:79
-msgid "Backup"
-msgstr "Sauvegarde"
-
-# "Management"
-#: ../../../../inc/tpl/profiles.php:85
-msgid "Gestión"
-msgstr "Gestion"
-
-# "Users management"
-#: ../../../../inc/tpl/profiles.php:88
-msgid "Gestión de usuarios"
-msgstr "Gestion des utilisateurs"
-
-# "Groups management"
-#: ../../../../inc/tpl/profiles.php:90
-msgid "Gestión de grupos"
-msgstr "Gestion des groupes"
-
-# "Profiles management"
-#: ../../../../inc/tpl/profiles.php:93
-msgid "Gestión de perfiles"
-msgstr "Gestion des profils"
-
-# "Profiles"
-#: ../../../../inc/tpl/profiles.php:93
-msgid "Perfiles"
-msgstr "Profils"
-
-# "Categories management"
-#: ../../../../inc/tpl/profiles.php:96
-msgid "Gestión de categorías"
-msgstr "Gestion des catégories"
-
-# "Categories"
-#: ../../../../inc/tpl/profiles.php:96
-msgid "Categorías"
-msgstr "Catégories"
-
-# "Customers management"
-#: ../../../../inc/tpl/profiles.php:101
-msgid "Gestión de clientes"
-msgstr "Gestion des clients"
-
-# "Customers"
-#: ../../../../inc/tpl/profiles.php:101
-msgid "Clientes"
-msgstr "Clients"
-
-# "Others"
-#: ../../../../inc/tpl/profiles.php:108
-msgid "Otros"
-msgstr "Autres"
-
-# "View event log"
-#: ../../../../inc/tpl/profiles.php:111
-msgid "Ver log de eventos"
-msgstr "Voir journal d'évènements"
-
-# "Event Log"
-#: ../../../../inc/tpl/profiles.php:111
-msgid "Log de Eventos"
-msgstr "Journal d'évènements"
-
-# "Request Account Modification"
-#: ../../../../inc/tpl/request.php:33
-msgid "Solicitar Modificación de Cuenta"
-msgstr "Demander modification de Compte"
-
-# "Request"
-#: ../../../../inc/tpl/request.php:57
-msgid "Petición"
-msgstr "Demande"
-
-# "Request description"
-#: ../../../../inc/tpl/request.php:60
-msgid "Descripción de la petición"
-msgstr "Description de la demande"
-
-# "Send"
-#: ../../../../inc/tpl/request.php:76
-msgid "Enviar"
-msgstr "Envoyer"
-
-# "Clear"
-#: ../../../../inc/tpl/search.php:59
-msgid "Limpiar"
-msgstr "Nettoyer"
-
-# "Text to search"
-#: ../../../../inc/tpl/search.php:63
-msgid "Texto a buscar"
-msgstr "Text à chercher"
-
-# "Global search"
-#: ../../../../inc/tpl/search.php:68
-msgid "Búsqueda global"
-msgstr "Recherche globale"
-
-# "APP"
-#: ../../../../inc/tpl/search.php:82
-msgid "CPP"
-msgstr "APP"
-
-# "Accounts per page"
-#: ../../../../inc/tpl/search.php:82
-msgid "Cuentas por página"
-msgstr "Comptes par page"
-
-# "DB Update"
-#: ../../../../inc/tpl/upgrade.php:42
-msgid "Actualización de BBDD"
-msgstr "Actualisation de la BDD"
-
-# "Enter Security Code"
-#: ../../../../inc/tpl/upgrade.php:44
-msgid "Introducir Código de Seguridad"
-msgstr "Saisir le code de sécurité"
-
-# "Security Code"
-#: ../../../../inc/tpl/upgrade.php:45
-msgid "Código de Seguridad"
-msgstr "code de sécurité"
-
-# "Start Update"
-#: ../../../../inc/tpl/upgrade.php:55
-msgid "Iniciar Actualización"
-msgstr "Démarrer la mise à jour"
-
-# "Full username"
-#: ../../../../inc/tpl/users.php:72
-msgid "Nombre de usuario completo"
-msgstr "Nom complet d'utilisateur"
-
-# "Session login"
-#: ../../../../inc/tpl/users.php:88
-msgid "Login de inicio de sesión"
-msgstr "Login de début de session"
-
-# "Email address"
-#: ../../../../inc/tpl/users.php:122
-msgid "Dirección de correo"
-msgstr "Adresse courriel"
-
-# "Options"
-#: ../../../../inc/tpl/users.php:161
-msgid "Opciones"
-msgstr "Options"
-
-# "Application administrator"
-#: ../../../../inc/tpl/users.php:165
-msgid "Administrador de la aplicación"
-msgstr "Administrateur de l'application"
-
-# "Application Admin"
-#: ../../../../inc/tpl/users.php:165
-msgid "Admin. Aplicación"
-msgstr "Admin. Application"
-
-# "Accounts administrator"
-#: ../../../../inc/tpl/users.php:167
-msgid "Administrador de cuentas"
-msgstr "Administrateur des comptes"
-
-# "Accounts Admin"
-#: ../../../../inc/tpl/users.php:167
-msgid "Admin. Cuentas"
-msgstr "Admin. Comptes"
-
-# "Force password change"
-#: ../../../../inc/tpl/users.php:175
-msgid "Forzar cambio de clave"
-msgstr "Forcer le changement de Mot de passe"
-
-# "Entries"
-#: ../../../../inc/tpl/users.php:183
-msgid "Entradas"
-msgstr "Entrées"
-
-# "Last Access"
-#: ../../../../inc/tpl/users.php:188
-msgid "Último Acceso"
-msgstr "Dernier Accès"
-
-# "Master Password Date"
-#: ../../../../inc/tpl/users.php:198
-msgid "Fecha Clave Maestra"
-msgstr "Date du Mot de passe Maître"
-
-# "Error on updating database"
-#: ../../../../inc/upgrade.class.php:49
+#: ../../../../inc/Upgrade.class.php:51
msgid "Error al aplicar la actualización de la Base de Datos"
msgstr "Erreur pendant la mise à jour de la base de données."
-# "Please, check the event log for more details"
-#: ../../../../inc/upgrade.class.php:50
+#: ../../../../inc/Upgrade.class.php:52 ../../../../inc/Upgrade.class.php:58
msgid "Compruebe el registro de eventos para más detalles"
msgstr "Veuillez consulter le journal des évènements pour plus de détail"
-# "Update DB"
-#: ../../../../inc/upgrade.class.php:66
+#: ../../../../inc/Upgrade.class.php:52 ../../../../inc/Upgrade.class.php:58
+#: ../../../../inc/themes/classic/login.inc:32
+#: ../../../../inc/themes/material-blue/2fa.inc:26
+#: ../../../../inc/themes/material-blue/login.inc:64
+msgid "Acceder"
+msgstr "Se connecter"
+
+#: ../../../../inc/Upgrade.class.php:57
+msgid "Error al aplicar la actualización auxiliar"
+msgstr "Erreur lors de l'application d'une mise à jour auxiliaire"
+
+#: ../../../../inc/Upgrade.class.php:74
msgid "Actualizar BBDD"
msgstr "Mis à jour BDD"
-# "Database update not needed."
-#: ../../../../inc/upgrade.class.php:97
+#: ../../../../inc/Upgrade.class.php:121
msgid "No es necesario actualizar la Base de Datos."
msgstr "La mise à jour de la base de données n'est pas nécessaire."
-# "Error on updating database."
-#: ../../../../inc/upgrade.class.php:103
+#: ../../../../inc/Upgrade.class.php:129
msgid "Error al aplicar la actualización de la Base de Datos."
msgstr "Erreur pendant la mise à jour de la base de données."
-# "Database updating was done successfully."
-#: ../../../../inc/upgrade.class.php:110
+#: ../../../../inc/Upgrade.class.php:138
msgid "Actualización de la Base de Datos realizada correctamente."
msgstr "Mise à jour de la base de données effectuée."
-# "Update Configuration"
-#: ../../../../inc/upgrade.class.php:185
+#: ../../../../inc/Upgrade.class.php:215
msgid "Actualizar Configuración"
msgstr "Mettre à jour la Configuration"
-# "Configuration updating was done successfully."
-#: ../../../../inc/upgrade.class.php:186
+#: ../../../../inc/Upgrade.class.php:215
msgid "Actualización de la Configuración realizada correctamente."
msgstr "Mise à jour de la configuration effectuée correctement."
-# "Account Activation"
-#: ../../../../inc/users.class.php:774
-msgid "Activación Cuenta"
-msgstr "Activation Compte"
-
-# "Your account activation is pending."
-#: ../../../../inc/users.class.php:775
-msgid "Su cuenta está pendiente de activación."
-msgstr "Votre compte est en attente d'activation."
-
-# "You will receive a confirmation email in short."
-#: ../../../../inc/users.class.php:776
-msgid "En breve recibirá un email de confirmación."
-msgstr "Vous recevrez un courriel de confirmation sous peu."
-
-# "Could not perform the password change request."
-#: ../../../../inc/users.class.php:821 ../../../../inc/users.class.php:863
+#: ../../../../inc/UserBase.class.php:386
+#: ../../../../inc/UserBase.class.php:530
msgid "No se pudo realizar la petición de cambio de clave."
msgstr "Impossible d'effectuer la requête de changement de mot de passe."
-# "Edit User"
-#: ../../../../inc/users.class.php:858
+#: ../../../../inc/UserBase.class.php:525
msgid "Modificar Usuario"
msgstr "Modifier Utilisateur"
-# "Required PHP version >= 5.1"
-#: ../../../../inc/util.class.php:119
-msgid "Versión de PHP requerida >= 5.1"
-msgstr "Version de PHP requis >= 5.1"
+#: ../../../../inc/UserBase.class.php:592
+#: ../../../../web/UsersMgmtC.class.php:150
+msgid "Eliminar Usuario"
+msgstr "Supprimer Utilisateur"
-# "Please update the PHP version to run sysPass"
-#: ../../../../inc/util.class.php:120
+#: ../../../../inc/UserLdap.class.php:78
+msgid "Activación Cuenta"
+msgstr "Activation Compte"
+
+#: ../../../../inc/UserLdap.class.php:79
+msgid "Su cuenta está pendiente de activación."
+msgstr "Votre compte est en attente d'activation."
+
+#: ../../../../inc/UserLdap.class.php:80
+msgid "En breve recibirá un email de confirmación."
+msgstr "Vous recevrez un courriel de confirmation sous peu."
+
+#: ../../../../inc/UserLdap.class.php:86
+msgid "Nuevo usuario de LDAP"
+msgstr "Nouvel utilisateur LDAP"
+
+#: ../../../../inc/UserUtil.class.php:705
+msgid "Migrar Grupos"
+msgstr ""
+
+#: ../../../../inc/UserUtil.class.php:705
+msgid "Error al migrar grupo del usuario"
+msgstr ""
+
+#: ../../../../inc/Util.class.php:123
+msgid "Versión de PHP requerida >= "
+msgstr "Version PHP requise >="
+
+#: ../../../../inc/Util.class.php:124
msgid ""
"Actualice la versión de PHP para que la aplicación funcione correctamente"
msgstr ""
"Mettez à niveau votre version de PHP afin que l'application fonctionne "
"correctement"
-# "Without this module the application could not run correctly"
-#: ../../../../inc/util.class.php:142
+#: ../../../../inc/Util.class.php:160
+#: ../../../../inc/themes/classic/ldap.inc:212
+#: ../../../../inc/themes/material-blue/ldap.inc:238
+msgid "Módulo no disponible"
+msgstr "Module indisponible"
+
+#: ../../../../inc/Util.class.php:161
msgid "Sin este módulo la aplicación puede no funcionar correctamente."
msgstr "Sans ce module, l'application ne peut pas fonctionner correctement."
-# "Error on query"
-#: ../../../../js/js.php:45
+#: ../../../../inc/XmlExport.class.php:124
+#, fuzzy
+msgid "Exportar XML"
+msgstr "Importer dans un fichier XML"
+
+#: ../../../../inc/XmlExport.class.php:409
+msgid "Error al crear el archivo XML"
+msgstr "Erreur pendant la création du fichier XML"
+
+#: ../../../../inc/XmlImport.class.php:63
+msgid "Formato detectado"
+msgstr ""
+
+#: ../../../../inc/XmlImportBase.class.php:75
+msgid "No es posible procesar el archivo XML"
+msgstr "Impossible de traiter le fichier XML"
+
+#: ../../../../inc/XmlImportBase.class.php:103
+msgid "Archivo XML no soportado"
+msgstr "Fichier XML non supportés"
+
+#: ../../../../inc/XmlImportBase.class.php:104
+msgid "No es posible detectar la aplicación que exportó los datos"
+msgstr ""
+"Impossible de détecter l'application depuis laquelle les données ont été "
+"exportés"
+
+#: ../../../../js/strings.js.php:27
msgid "Error en la consulta"
msgstr "Erreur pendant la requête"
-# "There was an error"
-#: ../../../../js/js.php:46
+#: ../../../../js/strings.js.php:28
msgid "Ha ocurrido un error"
msgstr "Il y a une erreur"
-# "Delete account?"
-#: ../../../../js/js.php:48
+#: ../../../../js/strings.js.php:29
+#: ../../../../inc/themes/classic/login.inc:52
+#: ../../../../inc/themes/material-blue/login.inc:77
+msgid "Sesión finalizada"
+msgstr "Session terminée"
+
+#: ../../../../js/strings.js.php:30
msgid "Borrar la cuenta?"
msgstr "Supprimer compte?"
-# "Delete user?"
-#: ../../../../js/js.php:49
+#: ../../../../js/strings.js.php:31
msgid "Borrar el usuario?"
msgstr "Supprimer l'utilisateur?"
-# "You should save configuration in order to take effect"
-#: ../../../../js/js.php:50
+#: ../../../../js/strings.js.php:32
msgid "Guarde la configuración para que sea efectiva"
msgstr ""
"Vous devez sauvegarder la configuration pour qu'elle soit prise en compte"
-# "Generated Password"
-#: ../../../../js/js.php:51
+#: ../../../../js/strings.js.php:33
msgid "Clave Generada"
msgstr "Mot de passe généré"
-# "High level"
-#: ../../../../js/js.php:52
+#: ../../../../js/strings.js.php:34
msgid "Nivel alto"
msgstr "Niveau haut"
-# "Average level"
-#: ../../../../js/js.php:53
+#: ../../../../js/strings.js.php:35
msgid "Nivel medio"
msgstr "Niveau moyen"
-# "Low level"
-#: ../../../../js/js.php:54
+#: ../../../../js/strings.js.php:36
msgid "Nivel bajo"
msgstr "Niveau bas"
-# "Very high level"
-#: ../../../../js/js.php:55
+#: ../../../../js/strings.js.php:37
msgid "Nivel muy alto"
msgstr "Niveau très haut"
-# "You should use at least 8 characters"
-#: ../../../../js/js.php:56
+#: ../../../../js/strings.js.php:38
msgid "Utilizar al menos 8 caracteres"
msgstr "Vous devriez utiliser au moins 8 caractères"
-# "Delete item?"
-#: ../../../../js/js.php:57
+#: ../../../../js/strings.js.php:39
msgid "Borrar elemento?"
msgstr "Supprimer élément?"
-# "Page not found"
-#: ../../../../js/js.php:58
+#: ../../../../js/strings.js.php:40
msgid "Página no encontrada"
msgstr "Page introuvable"
-# "File not supported for preview"
-#: ../../../../js/js.php:59
+#: ../../../../js/strings.js.php:41
msgid "Archivo no soportado para visualizar"
msgstr "Fichier non supporté pour la pré-visualisation"
-# "Delete file?"
-#: ../../../../js/js.php:60
+#: ../../../../js/strings.js.php:42
msgid "Eliminar archivo?"
msgstr "Supprimer fichier?"
-# "Your browser does not support HTML5 file uploads"
-#: ../../../../js/js.php:61
+#: ../../../../js/strings.js.php:43
msgid "Su navegador no soporta subir archivos con HTML5"
msgstr "Votre navigateur ne supporte pas le transfert de fichier HTML5"
-# "Too many files"
-#: ../../../../js/js.php:62
+#: ../../../../js/strings.js.php:44
msgid "Demasiados archivos"
msgstr "Trop de fichiers"
-# "Unable to save the file. Max file size:"
-#: ../../../../js/js.php:63
-msgid "No es posible guardar el archivo. Tamaño máximo:"
-msgstr "Impossible de sauvegarder le fichier. Taille maximale:"
+#: ../../../../js/strings.js.php:45
+#, php-format
+msgid "No es posible guardar el archivo.%sTamaño máximo:"
+msgstr "Impossible d'enregistrer le fichier% s. Taille maximale autorisée:"
-# "Extension not allowed"
-#: ../../../../js/js.php:64
+#: ../../../../js/strings.js.php:46
msgid "Extensión no permitida"
msgstr "Extension non autorisée"
-# "Clear event log?"
-#: ../../../../js/js.php:65
+#: ../../../../js/strings.js.php:47
msgid "Vaciar el registro de eventos?"
msgstr "Nettoyer le journal d'évènements"
+
+#: ../../../../js/strings.js.php:48
+msgid "Seleccionar Grupo"
+msgstr "Sélectionner Groupe"
+
+#: ../../../../js/strings.js.php:49
+msgid "Seleccionar Usuario"
+msgstr "Sélectionner l'utilisateur"
+
+#: ../../../../js/strings.js.php:50
+msgid "Seleccionar Perfil"
+msgstr "Sélectionner Profil"
+
+#: ../../../../js/strings.js.php:51
+msgid "Seleccionar Cliente"
+msgstr "Sélectionner Client"
+
+#: ../../../../js/strings.js.php:52
+msgid "Seleccionar Categoría"
+msgstr "Sélectionner Catégorie"
+
+#: ../../../../js/strings.js.php:53
+msgid "Sin resultados"
+msgstr "Aucun résultat"
+
+#: ../../../../js/strings.js.php:54
+msgid "Opciones de clave"
+msgstr "Options de mot de passe"
+
+#: ../../../../js/strings.js.php:55
+msgid "Generar clave aleatoria"
+msgstr "Générer un mot de passe aléatoire"
+
+#: ../../../../js/strings.js.php:56
+msgid "Complejidad"
+msgstr "Compléxité"
+
+#: ../../../../js/strings.js.php:57
+msgid "Reset"
+msgstr "Restaurer"
+
+#: ../../../../js/strings.js.php:58
+#: ../../../../inc/themes/classic/editpass.inc:33
+msgid "Nivel de fortaleza de la clave"
+msgstr "Niveau de sécurité du mot de passe"
+
+#: ../../../../js/strings.js.php:59
+msgid "Mostrar Clave"
+msgstr "Afficher Mot de passe"
+
+#: ../../../../js/strings.js.php:60
+msgid "Copiar Usuario"
+msgstr "Copier le nom d'utilisateur"
+
+#: ../../../../js/strings.js.php:61
+msgid "Copiar Clave"
+msgstr "Copier le mot de passe"
+
+#: ../../../../js/strings.js.php:62
+msgid "Incluir Números"
+msgstr "Inclure des nombres"
+
+#: ../../../../js/strings.js.php:63
+msgid "Incluir Mayúsculas"
+msgstr "Inclure des lettres majuscules"
+
+#: ../../../../js/strings.js.php:64
+msgid "Incluir Símbolos"
+msgstr "Inclure des symboles"
+
+#: ../../../../js/strings.js.php:65
+msgid "Longitud"
+msgstr "Longueur "
+
+#: ../../../../js/strings.js.php:66
+msgid "Seleccionar Acción"
+msgstr "Choisir une action"
+
+#: ../../../../js/strings.js.php:67
+#: ../../../../inc/themes/classic/account.inc:133
+#: ../../../../inc/themes/classic/account.inc:164
+#: ../../../../inc/themes/classic/account.inc:449
+#: ../../../../inc/themes/classic/install.inc:99
+msgid "SI"
+msgstr "OUI"
+
+#: ../../../../js/strings.js.php:68
+#: ../../../../inc/themes/classic/account.inc:133
+#: ../../../../inc/themes/classic/account.inc:164
+#: ../../../../inc/themes/classic/account.inc:447
+#: ../../../../inc/themes/classic/encryption.inc:61
+#: ../../../../inc/themes/classic/encryption.inc:80
+#: ../../../../inc/themes/classic/import.inc:70
+#: ../../../../inc/themes/classic/install.inc:99
+#: ../../../../inc/themes/classic/tokens.inc:36
+msgid "NO"
+msgstr "NON"
+
+#: ../../../../js/strings.js.php:69
+msgid "Aceptar"
+msgstr ""
+
+#: ../../../../js/strings.js.php:70
+msgid "Cancelar"
+msgstr ""
+
+#: ../../../../web/AccountC.class.php:380
+#: ../../../../web/AccountC.class.php:411
+#: ../../../../inc/themes/classic/search.inc:36
+#: ../../../../inc/themes/classic/search.inc:95
+#: ../../../../inc/themes/material-blue/search.inc:41
+#: ../../../../inc/themes/material-blue/search.inc:108
+msgid "Detalles de Cuenta"
+msgstr "Détails du Compte"
+
+#: ../../../../web/AccountC.class.php:468
+#: ../../../../inc/themes/classic/account.inc:394
+#: ../../../../inc/themes/material-blue/account.inc:430
+msgid "Modificar Clave de Cuenta"
+msgstr "Modifier Mot de passe de Compte"
+
+#: ../../../../web/AccountsMgmtC.class.php:79
+#: ../../../../web/AccountsMgmtC.class.php:138
+#: ../../../../web/AccountsMgmtC.class.php:266
+#: ../../../../web/SearchC.class.php:277
+#: ../../../../web/UsersMgmtC.class.php:87
+#: ../../../../web/UsersMgmtC.class.php:187
+#: ../../../../web/UsersMgmtC.class.php:245
+#: ../../../../inc/themes/classic/account.inc:11
+#: ../../../../inc/themes/classic/categories.inc:8
+#: ../../../../inc/themes/classic/customers.inc:8
+#: ../../../../inc/themes/classic/customfields.inc:9
+#: ../../../../inc/themes/classic/editpass.inc:8
+#: ../../../../inc/themes/classic/groups.inc:8
+#: ../../../../inc/themes/classic/info.inc:25
+#: ../../../../inc/themes/classic/profiles.inc:8
+#: ../../../../inc/themes/classic/request.inc:6
+#: ../../../../inc/themes/classic/search.inc:34
+#: ../../../../inc/themes/classic/users.inc:8
+#: ../../../../inc/themes/material-blue/account.inc:15
+#: ../../../../inc/themes/material-blue/categories.inc:8
+#: ../../../../inc/themes/material-blue/customers.inc:8
+#: ../../../../inc/themes/material-blue/customfields.inc:8
+#: ../../../../inc/themes/material-blue/editpass.inc:9
+#: ../../../../inc/themes/material-blue/groups.inc:8
+#: ../../../../inc/themes/material-blue/info.inc:25
+#: ../../../../inc/themes/material-blue/profiles.inc:8
+#: ../../../../inc/themes/material-blue/request.inc:6
+#: ../../../../inc/themes/material-blue/search.inc:39
+#: ../../../../inc/themes/material-blue/users.inc:8
+msgid "Nombre"
+msgstr "Nom"
+
+#: ../../../../web/AccountsMgmtC.class.php:115
+msgid "Gestión de Categorías"
+msgstr "Gestion des catégories"
+
+#: ../../../../web/AccountsMgmtC.class.php:172
+msgid "Gestión de Clientes"
+msgstr "Gestion des Clients"
+
+#: ../../../../web/AccountsMgmtC.class.php:266
+#: ../../../../inc/themes/classic/customfields.inc:27
+#: ../../../../inc/themes/material-blue/customfields.inc:30
+msgid "Módulo"
+msgstr "Module"
+
+#: ../../../../web/AccountsMgmtC.class.php:287
+msgid "Eliminar Campo"
+msgstr "Supprimer champ"
+
+#: ../../../../web/AccountsMgmtC.class.php:300
+#: ../../../../inc/themes/classic/profiles.inc:107
+#: ../../../../inc/themes/material-blue/profiles.inc:124
+msgid "Campos Personalizados"
+msgstr "Champs personnalisés"
+
+#: ../../../../web/ConfigC.class.php:185
+msgid "Último backup"
+msgstr "Dernière sauvegarde"
+
+#: ../../../../web/ConfigC.class.php:185
+msgid "No se encontraron backups"
+msgstr "Il n'y a pas de sauvegarde disponible"
+
+#: ../../../../web/ConfigC.class.php:192
+msgid "Última exportación"
+msgstr "Dernier export"
+
+#: ../../../../web/ConfigC.class.php:192
+msgid "No se encontró archivo de exportación"
+msgstr "Aucun fichier d'export trouvé"
+
+#: ../../../../web/ConfigC.class.php:237
+msgid "Información"
+msgstr "Information"
+
+#: ../../../../web/EventlogC.class.php:93
+msgid "Registro de eventos vaciado"
+msgstr "Journal d'évènements nettoyé"
+
+#: ../../../../web/EventlogC.class.php:95
+msgid "Error al vaciar el registro de eventos"
+msgstr "Erreur pendant le nettoyage du journal d'évènements"
+
+#: ../../../../web/MainC.class.php:137
+#: ../../../../web/UsersMgmtC.class.php:100
+msgid "Admin Aplicación"
+msgstr "Admin Application"
+
+#: ../../../../web/MainC.class.php:155
+msgid "Buscar"
+msgstr "Chercher"
+
+#: ../../../../web/MainC.class.php:167
+#: ../../../../web/UsersMgmtC.class.php:163
+msgid "Gestión de Usuarios"
+msgstr "Gestion des Utilisateurs"
+
+#: ../../../../web/MainC.class.php:173
+msgid "Gestión de Clientes y Categorías"
+msgstr "Gestion des clients et catégories"
+
+#: ../../../../web/MainC.class.php:185
+#: ../../../../inc/themes/classic/eventlog.inc:4
+#: ../../../../inc/themes/material-blue/eventlog.inc:3
+msgid "Registro de Eventos"
+msgstr "Journal d'évènements"
+
+#: ../../../../web/MainC.class.php:205
+msgid "Nuevo estilo visual basado en Material Design Lite by Google"
+msgstr "Nouveau design visuel basé sur le \"Material Design par Google\""
+
+#: ../../../../web/MainC.class.php:206
+msgid "Usuarios en múltiples grupos"
+msgstr "Les utilisateurs peuvent appartenir à plusieurs groupes"
+
+#: ../../../../web/MainC.class.php:207
+msgid "Previsualización de imágenes"
+msgstr "Prévisualisation d'images"
+
+#: ../../../../web/MainC.class.php:208
+msgid "Mostrar claves como imágenes"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:209
+msgid "Campos personalizados"
+msgstr "Champs personnalisés"
+
+#: ../../../../web/MainC.class.php:210
+msgid "API de consultas"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:211
+#: ../../../../inc/themes/classic/2fa.inc:9
+#: ../../../../inc/themes/material-blue/2fa.inc:9
+#: ../../../../inc/themes/material-blue/security.inc:11
+msgid "Autentificación en 2 pasos"
+msgstr "Authentification à deux facteurs"
+
+#: ../../../../web/MainC.class.php:212
+msgid "Complejidad de generador de claves"
+msgstr "Générateur de nombres aléatoires avec configuration de complexité"
+
+#: ../../../../web/MainC.class.php:213
+msgid "Consultas especiales"
+msgstr "Requêtes spécifiques"
+
+#: ../../../../web/MainC.class.php:214
+msgid "Exportación a XML"
+msgstr "Export XML"
+
+#: ../../../../web/MainC.class.php:215
+msgid "Clave maestra temporal"
+msgstr "Mot de passe maître temporaire"
+
+#: ../../../../web/MainC.class.php:216
+msgid "Importación de cuentas desde sysPass, KeePass, KeePassX y CSV"
+msgstr "Comptes importés depuis Keepass, KeepassX et fichiers CSV"
+
+#: ../../../../web/MainC.class.php:217
+msgid "Optimización del código y mayor rapidez de carga"
+msgstr "Un code optimisé et un chargement plus rapide"
+
+#: ../../../../web/MainC.class.php:218
+msgid "Mejoras de seguridad en XSS e inyección SQL"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:260
+msgid "La version de PHP es vulnerable al ataque NULL Byte (CVE-2006-7243)"
+msgstr ""
+"Cette version de PHP est vulnerable aux attaques NULL Byte (CVE-2006-7243)"
+
+#: ../../../../web/MainC.class.php:261
+msgid "Actualice la versión de PHP para usar sysPass de forma segura"
+msgstr ""
+"Mettez à jour votre version de PHP afin d'utiliser sysPass de manière "
+"sécurisée"
+
+#: ../../../../web/MainC.class.php:268
+msgid "No se encuentra el generador de números aleatorios."
+msgstr "Impossible de trouver le générateur de nombres aléatoires."
+
+#: ../../../../web/MainC.class.php:269
+msgid ""
+"Sin esta función un atacante puede utilizar su cuenta al resetear la clave"
+msgstr ""
+"Sans cette fonction, un attaquant pourrait prendre votre compte sur un "
+"changement de mot de passe"
+
+#: ../../../../web/MainC.class.php:288
+msgid "Instalación finalizada"
+msgstr "Installation terminée"
+
+#: ../../../../web/MainC.class.php:289
+msgid "Pulse aquí para acceder"
+msgstr ""
+"Pressez ici pour vous connecter"
+
+#: ../../../../web/MainC.class.php:384
+msgid "Descargar nueva versión"
+msgstr "Télécharger nouvelle version"
+
+#: ../../../../web/MainC.class.php:395
+msgid "Avisos de sysPass"
+msgstr ""
+
+#: ../../../../web/SearchC.class.php:270
+msgid "Ordenar por Cliente"
+msgstr "Trié par Client"
+
+#: ../../../../web/SearchC.class.php:276
+msgid "Ordenar por Nombre"
+msgstr "Trié par Nom"
+
+#: ../../../../web/SearchC.class.php:282
+msgid "Ordenar por Categoría"
+msgstr "Trié par Catégorie"
+
+#: ../../../../web/SearchC.class.php:288
+msgid "Ordenar por Usuario"
+msgstr "Trié par Nom d'utilisateur"
+
+#: ../../../../web/SearchC.class.php:294
+msgid "Ordenar por URL / IP"
+msgstr "Trié par URL / IP"
+
+#: ../../../../web/SearchC.class.php:295
+#: ../../../../inc/themes/classic/account.inc:58
+#: ../../../../inc/themes/classic/editpass.inc:16
+#: ../../../../inc/themes/classic/request.inc:13
+#: ../../../../inc/themes/classic/search.inc:57
+#: ../../../../inc/themes/material-blue/account.inc:66
+#: ../../../../inc/themes/material-blue/editpass.inc:17
+#: ../../../../inc/themes/material-blue/request.inc:15
+#: ../../../../inc/themes/material-blue/search.inc:62
+msgid "URL / IP"
+msgstr "URL / IP"
+
+#: ../../../../web/UsersMgmtC.class.php:91
+msgid "Propiedades"
+msgstr "Propriétés"
+
+#: ../../../../web/UsersMgmtC.class.php:104
+msgid "Admin Cuentas"
+msgstr "Admin Comptes"
+
+#: ../../../../web/UsersMgmtC.class.php:108
+#: ../../../../inc/themes/classic/users.inc:28
+#: ../../../../inc/themes/material-blue/users.inc:34
+msgid "Usuario de LDAP"
+msgstr "Utilisateur LDAP"
+
+#: ../../../../web/UsersMgmtC.class.php:112
+#: ../../../../inc/themes/classic/users.inc:113
+#: ../../../../inc/themes/material-blue/users.inc:151
+#: ../../../../inc/themes/material-blue/users.inc:154
+msgid "Deshabilitado"
+msgstr "Désactivé"
+
+#: ../../../../web/UsersMgmtC.class.php:129
+msgid "Ver Detalles de Usuario"
+msgstr "Voir détails du compte"
+
+#: ../../../../web/UsersMgmtC.class.php:143
+msgid "Cambiar Clave de Usuario"
+msgstr "Changer mot de passe utilisateur"
+
+#: ../../../../web/UsersMgmtC.class.php:222
+msgid "Gestión de Grupos"
+msgstr "Gestion des Groupes"
+
+#: ../../../../web/UsersMgmtC.class.php:260
+msgid "Ver Detalles de Perfil"
+msgstr "Voir les détails du profil"
+
+#: ../../../../web/UsersMgmtC.class.php:287
+msgid "Gestión de Perfiles"
+msgstr "Gestion des Profils"
+
+#: ../../../../web/UsersMgmtC.class.php:407
+msgid "Ver token de Autorización"
+msgstr ""
+
+#: ../../../../web/UsersMgmtC.class.php:434
+msgid "Gestión de Autorizaciones API"
+msgstr ""
+
+#: ../../../../web/UsersMgmtC.class.php:456
+msgid "Token de autorización visualizado"
+msgstr ""
+
+#: ../../../../web/UsersMgmtC.class.php:457
+msgid "Autorizaciones"
+msgstr "Autorisations"
+
+#: ../../../../web/UsersPrefsC.class.php:84
+#: ../../../../inc/themes/classic/mail.inc:63
+#: ../../../../inc/themes/material-blue/mail.inc:86
+msgid "Seguridad"
+msgstr "Sécurité"
+
+#: ../../../../inc/themes/classic/2fa.inc:14
+#: ../../../../inc/themes/material-blue/2fa.inc:14
+msgid "Introducir código"
+msgstr "Entrer un code"
+
+#: ../../../../inc/themes/classic/2fa.inc:26
+msgid "Verificar"
+msgstr "Vérifier"
+
+#: ../../../../inc/themes/classic/account.inc:14
+#: ../../../../inc/themes/material-blue/account.inc:21
+msgid "Nombre de cuenta"
+msgstr "Nom de compte"
+
+#: ../../../../inc/themes/classic/account.inc:35
+msgid "Buscar en desplegable o introducir"
+msgstr "Chercher dans la liste déroulante ou entrer"
+
+#: ../../../../inc/themes/classic/account.inc:61
+#: ../../../../inc/themes/material-blue/account.inc:72
+msgid "URL o IP de acceso"
+msgstr "URL ou IP d'accès"
+
+#: ../../../../inc/themes/classic/account.inc:73
+#: ../../../../inc/themes/material-blue/account.inc:86
+msgid "Usuario de acceso"
+msgstr "Utilisateur d'accès"
+
+#: ../../../../inc/themes/classic/account.inc:90
+#: ../../../../inc/themes/classic/editpass.inc:31
+#: ../../../../inc/themes/classic/users.inc:83
+#: ../../../../inc/themes/classic/userspass.inc:19
+#: ../../../../inc/themes/classic/userspass.inc:21
+#: ../../../../inc/themes/material-blue/account.inc:105
+#: ../../../../inc/themes/material-blue/editpass.inc:36
+#: ../../../../inc/themes/material-blue/install.inc:64
+#: ../../../../inc/themes/material-blue/users.inc:102
+#: ../../../../inc/themes/material-blue/users.inc:109
+#: ../../../../inc/themes/material-blue/userspass.inc:19
+#: ../../../../inc/themes/material-blue/userspass.inc:25
+msgid "Clave (repetir)"
+msgstr "Mot de passe (répéter)"
+
+#: ../../../../inc/themes/classic/account.inc:97
+#: ../../../../inc/themes/classic/search.inc:73
+#: ../../../../inc/themes/classic/users.inc:91
+#: ../../../../inc/themes/material-blue/account.inc:116
+#: ../../../../inc/themes/material-blue/search.inc:82
+#: ../../../../inc/themes/material-blue/users.inc:116
+msgid "Notas"
+msgstr "Notes"
+
+#: ../../../../inc/themes/classic/account.inc:99
+#: ../../../../inc/themes/material-blue/account.inc:121
+#: ../../../../inc/themes/material-blue/users.inc:123
+msgid "Notas sobre la cuenta"
+msgstr "Notes sur le compte"
+
+#: ../../../../inc/themes/classic/account.inc:105
+#: ../../../../inc/themes/material-blue/account.inc:130
+#: ../../../../inc/themes/material-blue/search.inc:75
+msgid "Permisos"
+msgstr "Permissions"
+
+#: ../../../../inc/themes/classic/account.inc:132
+#: ../../../../inc/themes/classic/account.inc:163
+#: ../../../../inc/themes/material-blue/account.inc:159
+#: ../../../../inc/themes/material-blue/account.inc:191
+msgid "Hablitar edición"
+msgstr "Activer l'Edition"
+
+#: ../../../../inc/themes/classic/account.inc:201
+#: ../../../../inc/themes/material-blue/account.inc:243
+msgid "Soltar archivos aquí (max. 5) o click para seleccionar"
+msgstr "Déposer les fichier ici (max. 5) ou cliquez pour les sélectionner"
+
+#: ../../../../inc/themes/classic/account.inc:201
+#: ../../../../inc/themes/classic/config.inc:193
+#: ../../../../inc/themes/material-blue/account.inc:243
+#: ../../../../inc/themes/material-blue/config.inc:272
+msgid "Tamaño máximo de archivo"
+msgstr "Taille maximale de fichier"
+
+#: ../../../../inc/themes/classic/account.inc:213
+#: ../../../../inc/themes/material-blue/account.inc:255
+msgid "Historial"
+msgstr "Historique"
+
+#: ../../../../inc/themes/classic/account.inc:232
+#: ../../../../inc/themes/material-blue/account.inc:275
+msgid "Seleccionar fecha"
+msgstr "Sélectionner date"
+
+#: ../../../../inc/themes/classic/account.inc:241
+#: ../../../../inc/themes/classic/users.inc:164
+#: ../../../../inc/themes/material-blue/account.inc:284
+#: ../../../../inc/themes/material-blue/users.inc:208
+msgid "Última Modificación"
+msgstr "Dernière modification"
+
+#: ../../../../inc/themes/classic/account.inc:243
+#: ../../../../inc/themes/material-blue/account.inc:286
+msgid "por"
+msgstr "par"
+
+#: ../../../../inc/themes/classic/account.inc:286
+#: ../../../../inc/themes/material-blue/account.inc:333
+msgid "Visitas"
+msgstr "Visites"
+
+#: ../../../../inc/themes/classic/account.inc:290
+#: ../../../../inc/themes/material-blue/account.inc:337
+msgid "Fecha Alta"
+msgstr "Date Ajoutée"
+
+#: ../../../../inc/themes/classic/account.inc:294
+#: ../../../../inc/themes/material-blue/account.inc:341
+msgid "Creador"
+msgstr "Créateur"
+
+#: ../../../../inc/themes/classic/account.inc:298
+#: ../../../../inc/themes/material-blue/account.inc:200
+#: ../../../../inc/themes/material-blue/account.inc:345
+msgid "Grupo Principal"
+msgstr "Groupe Principal"
+
+#: ../../../../inc/themes/classic/account.inc:303
+#: ../../../../inc/themes/material-blue/account.inc:350
+msgid "Usuarios Secundarios"
+msgstr "Utilisateur Secondaires"
+
+#: ../../../../inc/themes/classic/account.inc:322
+#: ../../../../inc/themes/material-blue/account.inc:369
+msgid "Grupos Secundarios"
+msgstr "Groupes Secondaires"
+
+#: ../../../../inc/themes/classic/account.inc:342
+#: ../../../../inc/themes/material-blue/account.inc:389
+msgid "Fecha Edición"
+msgstr "Date Modifiée"
+
+#: ../../../../inc/themes/classic/account.inc:346
+#: ../../../../inc/themes/material-blue/account.inc:393
+msgid "Editor"
+msgstr "Editeur"
+
+#: ../../../../inc/themes/classic/account.inc:373
+#: ../../../../inc/themes/material-blue/account.inc:456
+msgid "Restaurar cuenta desde este punto"
+msgstr "Restaurer les comptes à partir de ce point"
+
+#: ../../../../inc/themes/classic/account.inc:385
+#: ../../../../inc/themes/classic/account.inc:468
+#: ../../../../inc/themes/classic/search.inc:103
+#: ../../../../inc/themes/classic/search.inc:183
+#: ../../../../inc/themes/material-blue/account.inc:423
+#: ../../../../inc/themes/material-blue/account.inc:493
+#: ../../../../inc/themes/material-blue/search.inc:118
+#: ../../../../inc/themes/material-blue/search.inc:197
+msgid "Copiar Clave en Portapapeles"
+msgstr "Copier le mot de passe dans le presse papier"
+
+#: ../../../../inc/themes/classic/account.inc:401
+#: ../../../../inc/themes/material-blue/account.inc:436
+msgid "Ver Actual"
+msgstr "Voir Actuel"
+
+#: ../../../../inc/themes/classic/account.inc:406
+#: ../../../../inc/themes/classic/editpass.inc:45
+#: ../../../../inc/themes/classic/passreset.inc:46
+#: ../../../../inc/themes/material-blue/passreset.inc:43
+msgid "Volver"
+msgstr "Retour"
+
+#: ../../../../inc/themes/classic/account.inc:413
+#: ../../../../inc/themes/classic/search.inc:115
+#: ../../../../inc/themes/material-blue/account.inc:446
+#: ../../../../inc/themes/material-blue/search.inc:130
+msgid "Modificar Cuenta"
+msgstr "Modifier Compte"
+
+#: ../../../../inc/themes/classic/account.inc:418
+#: ../../../../inc/themes/classic/search.inc:136
+#: ../../../../inc/themes/material-blue/account.inc:450
+#: ../../../../inc/themes/material-blue/search.inc:150
+msgid "Solicitar Modificación"
+msgstr "Demande Modification"
+
+#: ../../../../inc/themes/classic/account.inc:425
+#: ../../../../inc/themes/classic/categories.inc:62
+#: ../../../../inc/themes/classic/config.inc:275
+#: ../../../../inc/themes/classic/customers.inc:62
+#: ../../../../inc/themes/classic/customfields.inc:63
+#: ../../../../inc/themes/classic/editpass.inc:50
+#: ../../../../inc/themes/classic/encryption.inc:102
+#: ../../../../inc/themes/classic/groups.inc:77
+#: ../../../../inc/themes/classic/ldap.inc:229
+#: ../../../../inc/themes/classic/mail.inc:107
+#: ../../../../inc/themes/classic/profiles.inc:168
+#: ../../../../inc/themes/classic/security.inc:57
+#: ../../../../inc/themes/classic/tokens.inc:59
+#: ../../../../inc/themes/classic/users.inc:189
+#: ../../../../inc/themes/classic/userspass.inc:35
+#: ../../../../inc/themes/classic/wiki.inc:110
+#: ../../../../inc/themes/material-blue/account.inc:462
+#: ../../../../inc/themes/material-blue/categories.inc:72
+#: ../../../../inc/themes/material-blue/config.inc:388
+#: ../../../../inc/themes/material-blue/customers.inc:73
+#: ../../../../inc/themes/material-blue/customfields.inc:74
+#: ../../../../inc/themes/material-blue/editpass.inc:60
+#: ../../../../inc/themes/material-blue/groups.inc:88
+#: ../../../../inc/themes/material-blue/ldap.inc:257
+#: ../../../../inc/themes/material-blue/mail.inc:145
+#: ../../../../inc/themes/material-blue/profiles.inc:177
+#: ../../../../inc/themes/material-blue/security.inc:61
+#: ../../../../inc/themes/material-blue/tokens.inc:63
+#: ../../../../inc/themes/material-blue/users.inc:235
+#: ../../../../inc/themes/material-blue/userspass.inc:40
+#: ../../../../inc/themes/material-blue/wiki.inc:124
+msgid "Guardar"
+msgstr "Sauver"
+
+#: ../../../../inc/themes/classic/account.inc:435
+#: ../../../../inc/themes/material-blue/account.inc:472
+msgid "Seleccionar grupos secundarios"
+msgstr "Sélectionner les groupes secondaires"
+
+#: ../../../../inc/themes/classic/account.inc:439
+#: ../../../../inc/themes/material-blue/account.inc:475
+msgid "Seleccionar usuarios"
+msgstr "Sélectionner utilisateurs"
+
+#: ../../../../inc/themes/classic/account.inc:472
+#: ../../../../inc/themes/classic/search.inc:187
+#: ../../../../inc/themes/material-blue/account.inc:497
+#: ../../../../inc/themes/material-blue/search.inc:201
+msgid "Clave Copiada al Portapapeles"
+msgstr "Mot de passe copié dans le presse papier"
+
+#: ../../../../inc/themes/classic/backup.inc:10
+#: ../../../../inc/themes/classic/backup.inc:67
+#: ../../../../inc/themes/material-blue/backup.inc:10
+#: ../../../../inc/themes/material-blue/backup.inc:71
+msgid "Resultado"
+msgstr "Resultat"
+
+#: ../../../../inc/themes/classic/backup.inc:18
+#: ../../../../inc/themes/classic/backup.inc:75
+#: ../../../../inc/themes/material-blue/backup.inc:18
+#: ../../../../inc/themes/material-blue/backup.inc:79
+msgid "Descargar Actual"
+msgstr "Télécharger l'élément actuel"
+
+#: ../../../../inc/themes/classic/backup.inc:31
+#: ../../../../inc/themes/material-blue/backup.inc:31
+msgid "No hay backups para descargar"
+msgstr "Il n'y a pas de sauvegarde à télécharger"
+
+#: ../../../../inc/themes/classic/backup.inc:45
+#: ../../../../inc/themes/classic/backup.inc:49
+#: ../../../../inc/themes/classic/backup.inc:113
+#: ../../../../inc/themes/classic/backup.inc:117
+#: ../../../../inc/themes/classic/encryption.inc:93
+#: ../../../../inc/themes/classic/encryption.inc:97
+#: ../../../../inc/themes/classic/encryption.inc:152
+#: ../../../../inc/themes/classic/encryption.inc:156
+#: ../../../../inc/themes/classic/import.inc:15
+#: ../../../../inc/themes/classic/import.inc:37
+#: ../../../../inc/themes/classic/import.inc:51
+#: ../../../../inc/themes/classic/import.inc:97
+#: ../../../../inc/themes/classic/import.inc:118
+#: ../../../../inc/themes/classic/import.inc:170
+#: ../../../../inc/themes/classic/import.inc:174
+#: ../../../../inc/themes/classic/js-common.inc:13
+#: ../../../../inc/themes/classic/ldap.inc:13
+#: ../../../../inc/themes/classic/ldap.inc:33
+#: ../../../../inc/themes/classic/ldap.inc:58
+#: ../../../../inc/themes/classic/ldap.inc:82
+#: ../../../../inc/themes/classic/ldap.inc:93
+#: ../../../../inc/themes/classic/ldap.inc:117
+#: ../../../../inc/themes/classic/ldap.inc:145
+#: ../../../../inc/themes/classic/ldap.inc:166
+#: ../../../../inc/themes/classic/ldap.inc:187
+#: ../../../../inc/themes/classic/wiki.inc:12
+#: ../../../../inc/themes/classic/wiki.inc:28
+#: ../../../../inc/themes/classic/wiki.inc:55
+#: ../../../../inc/themes/classic/wiki.inc:82
+#: ../../../../inc/themes/material-blue/backup.inc:47
+#: ../../../../inc/themes/material-blue/backup.inc:51
+#: ../../../../inc/themes/material-blue/backup.inc:129
+#: ../../../../inc/themes/material-blue/backup.inc:133
+#: ../../../../inc/themes/material-blue/encryption.inc:107
+#: ../../../../inc/themes/material-blue/encryption.inc:111
+#: ../../../../inc/themes/material-blue/encryption.inc:171
+#: ../../../../inc/themes/material-blue/encryption.inc:175
+#: ../../../../inc/themes/material-blue/import.inc:99
+#: ../../../../inc/themes/material-blue/import.inc:103
+#: ../../../../inc/themes/material-blue/js-common.inc:11
+msgid "Ayuda"
+msgstr "Aide"
+
+#: ../../../../inc/themes/classic/backup.inc:50
+#: ../../../../inc/themes/material-blue/backup.inc:52
+msgid ""
+"La copia de seguridad permite guardar y descargar tanto la base de datos de "
+"sysPass como los archivos de la aplicación y su configuración."
+msgstr ""
+
+#: ../../../../inc/themes/classic/backup.inc:52
+#: ../../../../inc/themes/material-blue/backup.inc:54
+msgid ""
+"Con este método es posible guardar todos los datos de sysPass en otro lugar "
+"o utilizarlos para hacer la aplicación portable."
+msgstr ""
+
+#: ../../../../inc/themes/classic/backup.inc:60
+#: ../../../../inc/themes/classic/backup.inc:126
+#: ../../../../inc/themes/material-blue/backup.inc:64
+msgid "Exportar Cuentas"
+msgstr "Exporter les comptes"
+
+#: ../../../../inc/themes/classic/backup.inc:84
+#: ../../../../inc/themes/material-blue/backup.inc:88
+msgid "No hay archivos XML para descargar"
+msgstr "Il n'y a aucun fichier à télécharger"
+
+#: ../../../../inc/themes/classic/backup.inc:90
+#: ../../../../inc/themes/material-blue/backup.inc:94
+#: ../../../../inc/themes/material-blue/backup.inc:101
+msgid "Clave de Exportación"
+msgstr "Exporter le mot de passe"
+
+#: ../../../../inc/themes/classic/backup.inc:98
+#: ../../../../inc/themes/material-blue/backup.inc:107
+#: ../../../../inc/themes/material-blue/backup.inc:114
+msgid "Clave de Exportación (repetir)"
+msgstr "Exporter le mot de passe (confirmer)"
+
+#: ../../../../inc/themes/classic/backup.inc:118
+#: ../../../../inc/themes/material-blue/backup.inc:134
+msgid ""
+"La exportación de cuentas permite guardar las cuentas y sus datos en formato "
+"XML para posteriormente poder ser importados en otras instancias de sysPass."
+msgstr ""
+
+#: ../../../../inc/themes/classic/backup.inc:120
+#: ../../../../inc/themes/material-blue/backup.inc:136
+msgid "Los elementos exportados son cuentas, clientes y categorías."
+msgstr "Les éléments exportés sont les comptes, les clients et les catégories."
+
+#: ../../../../inc/themes/classic/backup.inc:122
+#: ../../../../inc/themes/material-blue/backup.inc:138
+msgid ""
+"Las claves de las cuentas son exportadas de forma encriptada para mayor "
+"seguridad."
+msgstr ""
+"Les mots de passes des comptes sont cryptés lors de l'export pour une "
+"meilleure sécurité"
+
+#: ../../../../inc/themes/classic/backup.inc:124
+#: ../../../../inc/themes/material-blue/backup.inc:140
+msgid ""
+"Es posible establecer una clave de exportación para guardar todos los datos "
+"encriptados en el archivo XML."
+msgstr ""
+"Il est possible de définir un mot de passe d'exportation pour enregistrer "
+"les données entièrement cryptées dans un fichier XML."
+
+#: ../../../../inc/themes/classic/body.inc:4
+#: ../../../../inc/themes/material-blue/body.inc:4
+msgid "Javascript es necesario para el correcto funcionamiento"
+msgstr "Javascript est requis pour fonctionner correctement"
+
+#: ../../../../inc/themes/classic/categories.inc:10
+#: ../../../../inc/themes/material-blue/categories.inc:14
+msgid "Nombre de la categoría"
+msgstr "Nom de la catégorie"
+
+#: ../../../../inc/themes/classic/categories.inc:18
+#: ../../../../inc/themes/material-blue/categories.inc:26
+msgid "Descripción de la categoría"
+msgstr "Description de la catégorie"
+
+#: ../../../../inc/themes/classic/config.inc:4
+#: ../../../../inc/themes/material-blue/config.inc:4
+msgid "Sitio"
+msgstr "Site"
+
+#: ../../../../inc/themes/classic/config.inc:10
+#: ../../../../inc/themes/material-blue/config.inc:11
+msgid "Idioma"
+msgstr "Langage"
+
+#: ../../../../inc/themes/classic/config.inc:21
+#: ../../../../inc/themes/material-blue/config.inc:22
+msgid "Tema Visual"
+msgstr "Thème Visuel"
+
+#: ../../../../inc/themes/classic/config.inc:33
+#: ../../../../inc/themes/material-blue/config.inc:34
+#: ../../../../inc/themes/material-blue/config.inc:42
+msgid "Timeout de sesión (s)"
+msgstr "Timeout de session (s)"
+
+#: ../../../../inc/themes/classic/config.inc:42
+#: ../../../../inc/themes/material-blue/config.inc:48
+msgid "Habilitar log de eventos"
+msgstr "Active le journal des évènements"
+
+#: ../../../../inc/themes/classic/config.inc:46
+#: ../../../../inc/themes/material-blue/config.inc:52
+msgid "Guarda las acciones realizadas en la aplicación."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:58
+#: ../../../../inc/themes/material-blue/config.inc:66
+msgid "Habilitar depuración"
+msgstr "Activer le mode debug"
+
+#: ../../../../inc/themes/classic/config.inc:62
+#: ../../../../inc/themes/material-blue/config.inc:70
+msgid ""
+"Muestra información relativa a la configuración de la aplicación y "
+"rendimiento."
+msgstr ""
+"Afficher des informations sur la configuration de l'application et sur la "
+"performance."
+
+#: ../../../../inc/themes/classic/config.inc:74
+#: ../../../../inc/themes/material-blue/config.inc:84
+msgid "Modo mantenimiento"
+msgstr "Mode maintenance"
+
+#: ../../../../inc/themes/classic/config.inc:78
+#: ../../../../inc/themes/material-blue/config.inc:88
+msgid ""
+"En este modo no se puede acceder a la aplicación. Para deshabilitarlo es "
+"necesario modificar el archivo de configuración."
+msgstr ""
+"Dans ce mode, personne ne peut accéder à l'application. Pour le désactiver, "
+"vous devez modifier le fichier de configuration."
+
+#: ../../../../inc/themes/classic/config.inc:90
+#: ../../../../inc/themes/material-blue/config.inc:102
+msgid "Comprobar actualizaciones"
+msgstr "Vérifier les mises à jour"
+
+#: ../../../../inc/themes/classic/config.inc:94
+#: ../../../../inc/themes/material-blue/config.inc:106
+msgid ""
+"Comprobar actualizaciones de la aplicación (sólo para los usuarios "
+"administradores)."
+msgstr ""
+"Vérifier les mises à jour d'application (uniquement pour les "
+"administrateurs)."
+
+#: ../../../../inc/themes/classic/config.inc:106
+#: ../../../../inc/themes/material-blue/config.inc:120
+msgid "Comprobar notificaciones"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:110
+#: ../../../../inc/themes/material-blue/config.inc:124
+msgid ""
+"Comprobar si existen notificaciones de seguridad o avisos de sysPass (sólo "
+"para los usuarios administradores)."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:122
+#: ../../../../inc/themes/material-blue/config.inc:145
+msgid "Nombre de cuenta como enlace"
+msgstr "Nom de compte comme lien"
+
+#: ../../../../inc/themes/classic/config.inc:126
+#: ../../../../inc/themes/material-blue/config.inc:149
+msgid ""
+"Habilita el nombre de la cuenta de la búsqueda, como enlace a los detalles "
+"de la cuenta."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:138
+#: ../../../../inc/themes/material-blue/config.inc:230
+msgid "Gestión de archivos"
+msgstr "Gestion des fichiers"
+
+#: ../../../../inc/themes/classic/config.inc:142
+#: ../../../../inc/themes/material-blue/config.inc:234
+msgid "Habilita la subida/descarga de archivos para las cuentas."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:154
+#: ../../../../inc/themes/material-blue/config.inc:163
+msgid "Búsquedas globales"
+msgstr "Recherches globales"
+
+#: ../../../../inc/themes/classic/config.inc:158
+#: ../../../../inc/themes/material-blue/config.inc:167
+msgid ""
+"Permite que todos los usuarios puedan realizar búsquedas en todas las "
+"cuentas, pero no pueden ver el contenido de las que no tienen permisos."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:170
+#: ../../../../inc/themes/material-blue/config.inc:249
+msgid "Extensiones de archivos permitidas"
+msgstr "Extensions de fichiers permises"
+
+#: ../../../../inc/themes/classic/config.inc:174
+#: ../../../../inc/themes/material-blue/config.inc:253
+msgid "Extensiones permitidas para la subida de archivos."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:178
+#: ../../../../inc/themes/material-blue/config.inc:257
+msgid "Se permite un máximo de 4 caracteres."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:182
+#: ../../../../inc/themes/material-blue/config.inc:261
+msgid ""
+"Escribir extensión y pulsar intro para añadir. Es necesario guardar la "
+"configuración."
+msgstr ""
+"Ecrire l'extension et appuyez sur Entrée pour ajouter. Vous devez "
+"sauvegarder la configuration."
+
+#: ../../../../inc/themes/classic/config.inc:197
+#: ../../../../inc/themes/material-blue/config.inc:276
+msgid "Establece el tamaño máximo para subir archivos."
+msgstr "Définir la taille maximale d'un fichier pour le téléchargement."
+
+#: ../../../../inc/themes/classic/config.inc:201
+#: ../../../../inc/themes/material-blue/config.inc:280
+msgid "El máximo absuluto es de 16MB."
+msgstr "Le grand maximum est 16MB "
+
+#: ../../../../inc/themes/classic/config.inc:212
+#: ../../../../inc/themes/material-blue/config.inc:181
+msgid "Resultados por página"
+msgstr "Resultats par page"
+
+#: ../../../../inc/themes/classic/config.inc:216
+#: ../../../../inc/themes/material-blue/config.inc:185
+msgid "Número de resultados por página a mostrar, al realizar una búsqueda."
+msgstr "Nombre de résultats à afficher par page, pour une recherche"
+
+#: ../../../../inc/themes/classic/config.inc:227
+msgid "Resultados en Tarjetas"
+msgstr "Résultats format cartes"
+
+#: ../../../../inc/themes/classic/config.inc:231
+msgid "Muestra los resultados de búsqueda de cuentas en formato tarjeta."
+msgstr "Active l'affichage des résultats de recherche comme format carte."
+
+#: ../../../../inc/themes/classic/config.inc:243
+#: ../../../../inc/themes/material-blue/config.inc:201
+msgid "Imagen para mostrar clave"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:247
+#: ../../../../inc/themes/material-blue/config.inc:205
+msgid "Generar una imagen con el texto de la clave de la cuenta."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:250
+#: ../../../../inc/themes/material-blue/config.inc:208
+msgid "Util para entornos donde copiar la clave supone un riesgo de seguridad."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:285
+#: ../../../../inc/themes/material-blue/config.inc:398
+msgid "Añadir extensión"
+msgstr "Ajouter extension"
+
+#: ../../../../inc/themes/classic/config.inc:286
+#: ../../../../inc/themes/material-blue/config.inc:399
+msgid "Eliminar extensión"
+msgstr "Supprimer extension"
+
+#: ../../../../inc/themes/classic/customers.inc:10
+#: ../../../../inc/themes/material-blue/customers.inc:14
+msgid "Nombre del cliente"
+msgstr "Nom du client"
+
+#: ../../../../inc/themes/classic/customers.inc:18
+#: ../../../../inc/themes/material-blue/customers.inc:26
+msgid "Descripción del cliente"
+msgstr "Description du client"
+
+#: ../../../../inc/themes/classic/customfields.inc:38
+#: ../../../../inc/themes/material-blue/customfields.inc:41
+msgid "Texto Ayuda"
+msgstr "Notice d'aide"
+
+#: ../../../../inc/themes/classic/customfields.inc:44
+#: ../../../../inc/themes/material-blue/customfields.inc:52
+msgid "Obligatorio"
+msgstr "Requis"
+
+#: ../../../../inc/themes/classic/encryption.inc:8
+#: ../../../../inc/themes/classic/install.inc:46
+#: ../../../../inc/themes/classic/install.inc:50
+#: ../../../../inc/themes/classic/install.inc:51
+#: ../../../../inc/themes/classic/login.inc:15
+#: ../../../../inc/themes/classic/login.inc:27
+#: ../../../../inc/themes/material-blue/encryption.inc:8
+#: ../../../../inc/themes/material-blue/install.inc:49
+#: ../../../../inc/themes/material-blue/install.inc:56
+#: ../../../../inc/themes/material-blue/login.inc:25
+#: ../../../../inc/themes/material-blue/login.inc:48
+msgid "Clave Maestra"
+msgstr "Mot de passe Maître"
+
+#: ../../../../inc/themes/classic/encryption.inc:16
+#: ../../../../inc/themes/classic/encryption.inc:116
+#: ../../../../inc/themes/material-blue/encryption.inc:16
+#: ../../../../inc/themes/material-blue/encryption.inc:131
+msgid "Último cambio"
+msgstr "Dernier changement"
+
+#: ../../../../inc/themes/classic/encryption.inc:25
+#: ../../../../inc/themes/material-blue/encryption.inc:25
+#: ../../../../inc/themes/material-blue/encryption.inc:31
+msgid "Clave Maestra actual"
+msgstr "Mot de passe Maître actuel"
+
+#: ../../../../inc/themes/classic/encryption.inc:34
+#: ../../../../inc/themes/material-blue/encryption.inc:37
+#: ../../../../inc/themes/material-blue/encryption.inc:43
+msgid "Nueva Clave Maestra"
+msgstr "Nouveau Mot de passe Maître"
+
+#: ../../../../inc/themes/classic/encryption.inc:43
+#: ../../../../inc/themes/material-blue/encryption.inc:49
+#: ../../../../inc/themes/material-blue/encryption.inc:55
+msgid "Nueva Clave Maestra (repetir)"
+msgstr "Nouveau Mot de passe Maître (répéter)"
+
+#: ../../../../inc/themes/classic/encryption.inc:51
+#: ../../../../inc/themes/material-blue/encryption.inc:61
+msgid "No modificar cuentas"
+msgstr "Ne pas modifier les comptes"
+
+#: ../../../../inc/themes/classic/encryption.inc:56
+#: ../../../../inc/themes/material-blue/encryption.inc:66
+msgid "Establece una nueva clave maestra sin re-encriptar las cuentas"
+msgstr "Définir un nouveau mot de passe maître sans ré-encrypter les comptes"
+
+#: ../../../../inc/themes/classic/encryption.inc:67
+#: ../../../../inc/themes/material-blue/encryption.inc:79
+msgid "Confirmar cambio"
+msgstr "Confirmer changement"
+
+#: ../../../../inc/themes/classic/encryption.inc:70
+#: ../../../../inc/themes/classic/encryption.inc:73
+#: ../../../../inc/themes/classic/encryption.inc:76
+#: ../../../../inc/themes/classic/import.inc:67
+#: ../../../../inc/themes/classic/security.inc:43
+msgid "Atención"
+msgstr "Attention"
+
+#: ../../../../inc/themes/classic/encryption.inc:71
+#: ../../../../inc/themes/material-blue/encryption.inc:83
+msgid "Guarde la nueva clave en un lugar seguro."
+msgstr "Vous devriez sauvegarder le mot de passe dans un endroit sûre"
+
+#: ../../../../inc/themes/classic/encryption.inc:74
+#: ../../../../inc/themes/material-blue/encryption.inc:86
+msgid "Se volverán a encriptar las claves de todas las cuentas."
+msgstr "Tous les mots de passe des comptes seront encryptés de nouveau."
+
+#: ../../../../inc/themes/classic/encryption.inc:77
+#: ../../../../inc/themes/material-blue/encryption.inc:89
+msgid "Los usuarios deberán de introducir la nueva clave maestra."
+msgstr "Les utilisateurs devront saisir un nouveau mot de passe maître."
+
+#: ../../../../inc/themes/classic/encryption.inc:98
+#: ../../../../inc/themes/material-blue/encryption.inc:112
+msgid ""
+"La clave maestra es utilizada para encriptar las claves de las cuentas de "
+"sysPass para mantenerlas seguras."
+msgstr ""
+"Le mot de passe maître est utilisé pour crypter les mots de passe des "
+"comptes sysPass afin de les garder en sécurité."
+
+#: ../../../../inc/themes/classic/encryption.inc:100
+#: ../../../../inc/themes/material-blue/encryption.inc:114
+msgid ""
+"Es recomendable cambiarla cada cierto tiempo y utilizar una clave compleja "
+"que incluya números, letras y símbolos."
+msgstr ""
+"Il est conseillé d’utiliser un mot de passe complexe qui comprend des "
+"nombres, des lettres et des symboles. Pour une sécurité « maximale » il est "
+"même conseillé de changer les mots de passe de temps en temps ou "
+"périodiquement."
+
+#: ../../../../inc/themes/classic/encryption.inc:108
+#: ../../../../inc/themes/material-blue/encryption.inc:124
+msgid "Clave Temporal"
+msgstr "Mot de passe temporaire"
+
+#: ../../../../inc/themes/classic/encryption.inc:119
+#: ../../../../inc/themes/classic/encryption.inc:130
+#: ../../../../inc/themes/material-blue/encryption.inc:134
+#: ../../../../inc/themes/material-blue/encryption.inc:145
+msgid "No generada"
+msgstr "Pas généré"
+
+#: ../../../../inc/themes/classic/encryption.inc:124
+#: ../../../../inc/themes/material-blue/encryption.inc:139
+msgid "Válido hasta"
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:136
+#: ../../../../inc/themes/material-blue/encryption.inc:151
+#: ../../../../inc/themes/material-blue/encryption.inc:157
+msgid "Validez (s)"
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:139
+msgid "Validez"
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:157
+#: ../../../../inc/themes/material-blue/encryption.inc:176
+msgid ""
+"La clave temporal es utilizada como clave maestra para los usuarios que "
+"necesitan introducirla al iniciar la sesión, así no es necesario facilitar "
+"la clave maestra original."
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:159
+#: ../../../../inc/themes/material-blue/encryption.inc:180
+msgid "Generar"
+msgstr "Générer"
+
+#: ../../../../inc/themes/classic/eventlog.inc:8
+#: ../../../../inc/themes/classic/search.inc:3
+#: ../../../../inc/themes/material-blue/eventlog.inc:7
+#: ../../../../inc/themes/material-blue/search.inc:3
+msgid "No se encontraron registros"
+msgstr "Aucun enregistrement trouvé"
+
+#: ../../../../inc/themes/classic/eventlog.inc:19
+#: ../../../../inc/themes/material-blue/eventlog.inc:18
+msgid "Fecha / Hora"
+msgstr "Date / Heure"
+
+#: ../../../../inc/themes/classic/eventlog.inc:22
+#: ../../../../inc/themes/material-blue/eventlog.inc:21
+msgid "Evento"
+msgstr "Evènement"
+
+#: ../../../../inc/themes/classic/eventlog.inc:28
+#: ../../../../inc/themes/material-blue/eventlog.inc:27
+msgid "IP"
+msgstr "IP"
+
+#: ../../../../inc/themes/classic/eventlog.inc:86
+#: ../../../../inc/themes/classic/search.inc:159
+#: ../../../../inc/themes/material-blue/eventlog.inc:85
+#: ../../../../inc/themes/material-blue/search.inc:173
+msgid "Primera página"
+msgstr "Première page"
+
+#: ../../../../inc/themes/classic/eventlog.inc:88
+#: ../../../../inc/themes/classic/search.inc:161
+#: ../../../../inc/themes/material-blue/eventlog.inc:87
+#: ../../../../inc/themes/material-blue/search.inc:175
+msgid "Página anterior"
+msgstr "Page précédante"
+
+#: ../../../../inc/themes/classic/eventlog.inc:93
+#: ../../../../inc/themes/classic/search.inc:166
+#: ../../../../inc/themes/material-blue/eventlog.inc:92
+#: ../../../../inc/themes/material-blue/search.inc:180
+msgid "Página siguiente"
+msgstr "Page suivante"
+
+#: ../../../../inc/themes/classic/eventlog.inc:95
+#: ../../../../inc/themes/classic/search.inc:168
+#: ../../../../inc/themes/material-blue/eventlog.inc:94
+#: ../../../../inc/themes/material-blue/search.inc:182
+msgid "Última página"
+msgstr "Dernière page"
+
+#: ../../../../inc/themes/classic/files.inc:22
+#: ../../../../inc/themes/material-blue/files.inc:21
+msgid "Ver Archivo"
+msgstr "Voir Fichier"
+
+#: ../../../../inc/themes/classic/footer.inc:6
+#: ../../../../inc/themes/material-blue/footer.inc:27
+msgid "Indica si la conexión utiliza HTTPS."
+msgstr ""
+
+#: ../../../../inc/themes/classic/footer.inc:6
+#: ../../../../inc/themes/material-blue/footer.inc:27
+msgid ""
+"Las claves de formularios enviados se encriptan mediante PKI, el resto de "
+"datos no."
+msgstr ""
+
+#: ../../../../inc/themes/classic/footer.inc:6
+#: ../../../../inc/themes/material-blue/footer.inc:27
+#, fuzzy
+msgid "Seguro"
+msgstr "Sécurité"
+
+#: ../../../../inc/themes/classic/footer.inc:6
+#: ../../../../inc/themes/material-blue/footer.inc:27
+msgid "Inseguro"
+msgstr ""
+
+#: ../../../../inc/themes/classic/footer.inc:11
+#: ../../../../inc/themes/material-blue/footer.inc:18
+msgid "Ayuda :: FAQ :: Changelog"
+msgstr "Aide :: FAQ :: Changelog"
+
+#: ../../../../inc/themes/classic/footer.inc:14
+#: ../../../../inc/themes/material-blue/footer.inc:23
+msgid "Un proyecto de cygnux.org"
+msgstr "Un projet cygnux.org"
+
+#: ../../../../inc/themes/classic/groups.inc:10
+#: ../../../../inc/themes/material-blue/groups.inc:14
+msgid "Nombre del grupo"
+msgstr "Nom du groupe"
+
+#: ../../../../inc/themes/classic/groups.inc:18
+#: ../../../../inc/themes/material-blue/groups.inc:26
+msgid "Descripción del grupo"
+msgstr "Description du groupe"
+
+#: ../../../../inc/themes/classic/import.inc:7
+#: ../../../../inc/themes/material-blue/import.inc:121
+msgid "Importar phpPMS"
+msgstr "Importer phpPMS"
+
+#: ../../../../inc/themes/classic/import.inc:14
+#: ../../../../inc/themes/classic/install.inc:63
+#: ../../../../inc/themes/classic/install.inc:64
+#: ../../../../inc/themes/material-blue/import.inc:128
+#: ../../../../inc/themes/material-blue/import.inc:140
+msgid "Usuario BBDD"
+msgstr "Utilisateur BDD"
+
+#: ../../../../inc/themes/classic/import.inc:18
+#: ../../../../inc/themes/material-blue/import.inc:132
+msgid "Indicar el usuario de conexión a la base de datos de phpPMS."
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:28
+#: ../../../../inc/themes/classic/install.inc:71
+#: ../../../../inc/themes/classic/install.inc:73
+#: ../../../../inc/themes/material-blue/import.inc:146
+#: ../../../../inc/themes/material-blue/import.inc:152
+msgid "Clave BBDD"
+msgstr "Mot de passe BDD"
+
+#: ../../../../inc/themes/classic/import.inc:36
+#: ../../../../inc/themes/classic/install.inc:78
+#: ../../../../inc/themes/classic/install.inc:79
+#: ../../../../inc/themes/material-blue/import.inc:158
+#: ../../../../inc/themes/material-blue/import.inc:170
+msgid "Nombre BBDD"
+msgstr "Nom BDD"
+
+#: ../../../../inc/themes/classic/import.inc:40
+#: ../../../../inc/themes/material-blue/import.inc:162
+msgid "Indicar el nombre de la base de datos de phpPMS."
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:50
+#: ../../../../inc/themes/classic/install.inc:87
+#: ../../../../inc/themes/classic/install.inc:88
+#: ../../../../inc/themes/material-blue/import.inc:176
+#: ../../../../inc/themes/material-blue/import.inc:188
+msgid "Servidor BBDD"
+msgstr "Serveur BDD"
+
+#: ../../../../inc/themes/classic/import.inc:54
+#: ../../../../inc/themes/material-blue/import.inc:180
+msgid "Indicar el servidor de la base de datos de phpPMS."
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:64
+#: ../../../../inc/themes/material-blue/import.inc:194
+msgid "Confirmar"
+msgstr "Confirmer"
+
+#: ../../../../inc/themes/classic/import.inc:68
+#: ../../../../inc/themes/material-blue/import.inc:198
+msgid "Los datos actuales serán borrados (excepto el usuario actual)"
+msgstr "Les données actuelles seront supprimées(sauf l'utilisateur actuel)"
+
+#: ../../../../inc/themes/classic/import.inc:83
+msgid "Iniciar"
+msgstr "Démarrer"
+
+#: ../../../../inc/themes/classic/import.inc:89
+#: ../../../../inc/themes/material-blue/import.inc:7
+msgid "Importar CSV/XML"
+msgstr "Importer CSV/XML"
+
+#: ../../../../inc/themes/classic/import.inc:96
+#: ../../../../inc/themes/material-blue/import.inc:14
+msgid "Usuario por Defecto"
+msgstr "Utilisateur par défault"
+
+#: ../../../../inc/themes/classic/import.inc:100
+#: ../../../../inc/themes/material-blue/import.inc:18
+msgid "Define el usuario por defecto para las cuentas importadas."
+msgstr "Définit l'utilisateur par défaut pour les comptes importés."
+
+#: ../../../../inc/themes/classic/import.inc:117
+#: ../../../../inc/themes/classic/ldap.inc:144
+#: ../../../../inc/themes/material-blue/import.inc:36
+#: ../../../../inc/themes/material-blue/ldap.inc:170
+msgid "Grupo por Defecto"
+msgstr "Groupe par défaut"
+
+#: ../../../../inc/themes/classic/import.inc:121
+#: ../../../../inc/themes/material-blue/import.inc:40
+msgid "Define el grupo por defecto para las cuentas importadas."
+msgstr "Définit le groupe par défaut pour les comptes importés."
+
+#: ../../../../inc/themes/classic/import.inc:138
+#: ../../../../inc/themes/material-blue/import.inc:58
+#: ../../../../inc/themes/material-blue/import.inc:64
+msgid "Clave de Importación"
+msgstr "Importer un mot de passe"
+
+#: ../../../../inc/themes/classic/import.inc:146
+#: ../../../../inc/themes/material-blue/import.inc:70
+#: ../../../../inc/themes/material-blue/import.inc:76
+msgid "Delimitador CSV"
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:162
+#: ../../../../inc/themes/material-blue/import.inc:90
+msgid "Soltar archivo aquí o click para seleccionar"
+msgstr "Supprimer les fichier ici ou cliquez pour sélectionner"
+
+#: ../../../../inc/themes/classic/import.inc:175
+msgid ""
+"Permite realizar la importación de Cuentas, Categorías y Clientes desde "
+"arhcivos XML y CSV."
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:177
+#: ../../../../inc/themes/material-blue/import.inc:106
+msgid ""
+"Los formatos de archivos XML soportados son: sysPass, KeePass y KeePassX"
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:179
+#: ../../../../inc/themes/material-blue/import.inc:108
+msgid ""
+"Arrastar el archivo a importar a la zona indicada o hacer click sobre la "
+"flecha."
+msgstr ""
+"Glisser-déposer les fichiers à la zone d'importation ou cliquez sur la flèche"
+
+#: ../../../../inc/themes/classic/import.inc:181
+#: ../../../../inc/themes/material-blue/import.inc:110
+msgid ""
+"Para archivos de KeePass o KeePassX, el nombre del cliente será igual a "
+"KeePass o KeePassX y la categoría igual al nombre de los grupos."
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:183
+#: ../../../../inc/themes/material-blue/import.inc:112
+msgid "La importación de archivos CSV se realiza con el siguiente formato:"
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:185
+#: ../../../../inc/themes/material-blue/import.inc:114
+msgid "nombre_de_cuenta;cliente;categoría;url;usuario;clave;notas"
+msgstr "nom_de_compte;client;categorie;url;utilisateur;mot_de_passe;notes"
+
+#: ../../../../inc/themes/classic/import.inc:187
+#: ../../../../inc/themes/material-blue/import.inc:116
+msgid ""
+"En todos los casos, si el cliente o la categoría no están creados, se crean "
+"automáticamente."
+msgstr ""
+"Dans tous les cas, si le client ou la catégorie ne sont pas créés, ils sont "
+"automatiquement créés."
+
+#: ../../../../inc/themes/classic/info.inc:4
+#: ../../../../inc/themes/material-blue/info.inc:4
+msgid "Información de la Aplicación"
+msgstr "Information sur l'application"
+
+#: ../../../../inc/themes/classic/info.inc:10
+#: ../../../../inc/themes/material-blue/info.inc:10
+msgid "Versión sysPass"
+msgstr "Version de sysPass"
+
+#: ../../../../inc/themes/classic/info.inc:18
+#: ../../../../inc/themes/material-blue/info.inc:18
+msgid "Base de Datos"
+msgstr "Base de données"
+
+#: ../../../../inc/themes/classic/info.inc:30
+#: ../../../../inc/themes/material-blue/info.inc:30
+msgid "PHP"
+msgstr "PHP"
+
+#: ../../../../inc/themes/classic/info.inc:35
+#: ../../../../inc/themes/material-blue/info.inc:35
+msgid "Extensiones"
+msgstr "Extensions"
+
+#: ../../../../inc/themes/classic/info.inc:37
+#: ../../../../inc/themes/material-blue/info.inc:37
+msgid "Memoria Usada"
+msgstr "Mémoire utilisée"
+
+#: ../../../../inc/themes/classic/info.inc:44
+#: ../../../../inc/themes/classic/ldap.inc:32
+#: ../../../../inc/themes/classic/mail.inc:21
+#: ../../../../inc/themes/material-blue/config.inc:316
+#: ../../../../inc/themes/material-blue/info.inc:44
+#: ../../../../inc/themes/material-blue/ldap.inc:35
+#: ../../../../inc/themes/material-blue/ldap.inc:58
+#: ../../../../inc/themes/material-blue/ldap.inc:86
+#: ../../../../inc/themes/material-blue/mail.inc:24
+#: ../../../../inc/themes/material-blue/mail.inc:30
+msgid "Servidor"
+msgstr "Serveur"
+
+#: ../../../../inc/themes/classic/install.inc:4
+#: ../../../../inc/themes/material-blue/install.inc:4
+msgid "Instalación "
+msgstr "Installation"
+
+#: ../../../../inc/themes/classic/install.inc:25
+#: ../../../../inc/themes/material-blue/install.inc:25
+msgid "Crear cuenta de admin de sysPass"
+msgstr "Créer le compte admin sysPass"
+
+#: ../../../../inc/themes/classic/install.inc:32
+#: ../../../../inc/themes/material-blue/install.inc:36
+msgid "Login del usuario administrador de sysPass"
+msgstr "Login administrateur de sysPass"
+
+#: ../../../../inc/themes/classic/install.inc:58
+#: ../../../../inc/themes/material-blue/install.inc:69
+msgid "Configurar BBDD"
+msgstr "Configuration BDD"
+
+#: ../../../../inc/themes/classic/install.inc:67
+msgid "Login de usuario con permisos de administrador de MySQL"
+msgstr "Un utilisateur avec des droits d'administration sur la BDD"
+
+#: ../../../../inc/themes/classic/install.inc:83
+#: ../../../../inc/themes/material-blue/install.inc:102
+msgid "Nombre de la base de datos para sysPass"
+msgstr "Nom de la base de données sysPass"
+
+#: ../../../../inc/themes/classic/install.inc:91
+msgid "Nombre del servidor de la base de datos de sysPass"
+msgstr "Nom du serveur de base de données sysPass"
+
+#: ../../../../inc/themes/classic/install.inc:97
+#: ../../../../inc/themes/material-blue/install.inc:120
+msgid "Modo Hosting"
+msgstr "Mode Hébergé"
+
+#: ../../../../inc/themes/classic/install.inc:104
+#: ../../../../inc/themes/material-blue/install.inc:127
+msgid "No crea ni verifica los permisos del usuario sobre la BBDD"
+msgstr ""
+"Ne crée pas ni ne vérifie les permissions de l'utilisateur dans la base de "
+"données"
+
+#: ../../../../inc/themes/classic/install.inc:108
+#: ../../../../inc/themes/material-blue/install.inc:134
+#: ../../../../inc/themes/material-blue/install.inc:135
+msgid "Instalar"
+msgstr "Installer"
+
+#: ../../../../inc/themes/classic/ldap.inc:12
+#: ../../../../inc/themes/material-blue/ldap.inc:12
+msgid "Habilitar LDAP"
+msgstr "Activer l'annuaire LDAP"
+
+#: ../../../../inc/themes/classic/ldap.inc:16
+#: ../../../../inc/themes/material-blue/ldap.inc:16
+msgid "Habilita de autentificación mediante servidor LDAP."
+msgstr ""
+
+#: ../../../../inc/themes/classic/ldap.inc:20
+#: ../../../../inc/themes/material-blue/ldap.inc:20
+msgid "Este método utilizará MySQL en caso de fallo."
+msgstr ""
+
+#: ../../../../inc/themes/classic/ldap.inc:36
+#: ../../../../inc/themes/material-blue/ldap.inc:39
+msgid "Nombre o dirección IP del servidor de LDAP."
+msgstr "Le nom d'hôte ou l'adresse ip du serveur LDAP"
+
+#: ../../../../inc/themes/classic/ldap.inc:40
+#: ../../../../inc/themes/classic/ldap.inc:65
+#: ../../../../inc/themes/classic/ldap.inc:100
+#: ../../../../inc/themes/classic/ldap.inc:128
+#: ../../../../inc/themes/classic/wiki.inc:89
+#: ../../../../inc/themes/material-blue/ldap.inc:43
+#: ../../../../inc/themes/material-blue/ldap.inc:72
+#: ../../../../inc/themes/material-blue/ldap.inc:119
+#: ../../../../inc/themes/material-blue/ldap.inc:151
+#: ../../../../inc/themes/material-blue/wiki.inc:101
+msgid "Ejemplos:"
+msgstr "Exemples:"
+
+#: ../../../../inc/themes/classic/ldap.inc:57
+#: ../../../../inc/themes/material-blue/ldap.inc:64
+msgid "Usuario de conexión"
+msgstr "Utilisateur de connexion"
+
+#: ../../../../inc/themes/classic/ldap.inc:61
+#: ../../../../inc/themes/material-blue/ldap.inc:68
+msgid "Usuario para conectar con el servicio de LDAP."
+msgstr ""
+
+#: ../../../../inc/themes/classic/ldap.inc:81
+#: ../../../../inc/themes/material-blue/ldap.inc:92
+msgid "Clave de conexión"
+msgstr "Mot de passe de connexion"
+
+#: ../../../../inc/themes/classic/ldap.inc:92
+#: ../../../../inc/themes/material-blue/ldap.inc:111
+#: ../../../../inc/themes/material-blue/ldap.inc:133
+msgid "Base de búsqueda"
+msgstr "Base de recherche"
+
+#: ../../../../inc/themes/classic/ldap.inc:96
+#: ../../../../inc/themes/material-blue/ldap.inc:115
+msgid "Base en la que realizar la búsqueda de usuarios de LDAP."
+msgstr ""
+
+#: ../../../../inc/themes/classic/ldap.inc:120
+#: ../../../../inc/themes/material-blue/ldap.inc:143
+msgid ""
+"Grupo de LDAP al que debe de pertenecer el usuario para permitir el acceso."
+msgstr ""
+
+#: ../../../../inc/themes/classic/ldap.inc:124
+#: ../../../../inc/themes/material-blue/ldap.inc:147
+msgid "Este grupo debe de estar ubicado en la base de búsquedas de LDAP."
+msgstr ""
+
+#: ../../../../inc/themes/classic/ldap.inc:148
+#: ../../../../inc/themes/material-blue/ldap.inc:174
+msgid ""
+"Define el grupo de usuarios por defecto para los nuevos usuarios de LDAP."
+msgstr ""
+"Défini le groupe d'utilisateur par défaut pour les nouveaux utilisateurs LDAP"
+
+#: ../../../../inc/themes/classic/ldap.inc:165
+#: ../../../../inc/themes/material-blue/ldap.inc:190
+msgid "Perfil por Defecto"
+msgstr "Profil par défaut"
+
+#: ../../../../inc/themes/classic/ldap.inc:169
+#: ../../../../inc/themes/material-blue/ldap.inc:194
+msgid ""
+"Define el perfil de usuarios por defecto para los nuevos usuarios de LDAP."
+msgstr ""
+
+#: ../../../../inc/themes/classic/ldap.inc:186
+#: ../../../../inc/themes/material-blue/ldap.inc:210
+msgid "Active Directory"
+msgstr "Active Directory"
+
+#: ../../../../inc/themes/classic/ldap.inc:190
+#: ../../../../inc/themes/material-blue/ldap.inc:214
+msgid "Habilita el modo de conexión con LDAP de Active Directory."
+msgstr "Permet le mode de connexion actif avec l'annuaire LDAP"
+
+#: ../../../../inc/themes/classic/ldap.inc:202
+#: ../../../../inc/themes/material-blue/ldap.inc:228
+msgid "Comprobar"
+msgstr "Vérifier"
+
+#: ../../../../inc/themes/classic/ldap.inc:206
+#: ../../../../inc/themes/material-blue/ldap.inc:232
+msgid "Comprobar conexión con LDAP"
+msgstr "Vérifier les connexions LDAP"
+
+#: ../../../../inc/themes/classic/login.inc:46
+#: ../../../../inc/themes/material-blue/login.inc:73
+msgid "¿Olvidó su clave?"
+msgstr "Mot de passe oublié?"
+
+#: ../../../../inc/themes/classic/login.inc:59
+#: ../../../../inc/themes/material-blue/login.inc:85
+msgid "Aplicación actualizada correctamente"
+msgstr "Application mis à jour avec succès"
+
+#: ../../../../inc/themes/classic/login.inc:64
+#: ../../../../inc/themes/classic/login.inc:65
+#: ../../../../inc/themes/material-blue/login.inc:90
+#: ../../../../inc/themes/material-blue/login.inc:91
+#: ../../../../inc/themes/material-blue/login.inc:93
+msgid "Nuevas Características"
+msgstr "Nouvelles Fonctionnalités "
+
+#: ../../../../inc/themes/classic/mail.inc:11
+#: ../../../../inc/themes/material-blue/mail.inc:11
+msgid "Habilitar notificaciones de correo"
+msgstr "Activer les notifications par courriel"
+
+#: ../../../../inc/themes/classic/mail.inc:29
+#: ../../../../inc/themes/material-blue/config.inc:330
+#: ../../../../inc/themes/material-blue/mail.inc:36
+#: ../../../../inc/themes/material-blue/mail.inc:43
+msgid "Puerto"
+msgstr "Port"
+
+#: ../../../../inc/themes/classic/mail.inc:37
+#: ../../../../inc/themes/material-blue/mail.inc:49
+msgid "Habilitar Autentificación"
+msgstr "Activer l'authentification"
+
+#: ../../../../inc/themes/classic/mail.inc:68
+#: ../../../../inc/themes/material-blue/mail.inc:91
+msgid "Deshabilitada"
+msgstr "Désactivé"
+
+#: ../../../../inc/themes/classic/mail.inc:77
+#: ../../../../inc/themes/material-blue/mail.inc:100
+#: ../../../../inc/themes/material-blue/mail.inc:107
+msgid "Dirección de correo de envío"
+msgstr "Adresse courriel du destinataire"
+
+#: ../../../../inc/themes/classic/mail.inc:85
+#: ../../../../inc/themes/material-blue/mail.inc:113
+msgid "Habilitar peticiones por correo"
+msgstr "Activer les demandes par courriel"
+
+#: ../../../../inc/themes/classic/mgmttabs.inc:66
+#: ../../../../inc/themes/classic/search.inc:110
+#: ../../../../inc/themes/material-blue/search.inc:125
+msgid "Más Acciones"
+msgstr "Plus d'Actions"
+
+#: ../../../../inc/themes/classic/passreset.inc:13
+#: ../../../../inc/themes/material-blue/passreset.inc:10
+msgid "Solicitud de Cambio de Clave"
+msgstr "Demande de changement de Mot de passe"
+
+#: ../../../../inc/themes/classic/passreset.inc:16
+msgid "Login del Usuario"
+msgstr "Login de l'utilisateur"
+
+#: ../../../../inc/themes/classic/passreset.inc:21
+#: ../../../../inc/themes/material-blue/passreset.inc:24
+msgid "Email del Usuario"
+msgstr "Courriel de l'utilisateur"
+
+#: ../../../../inc/themes/classic/passreset.inc:22
+#: ../../../../inc/themes/classic/users.inc:61
+#: ../../../../inc/themes/material-blue/users.inc:71
+msgid "Email"
+msgstr "Courriel"
+
+#: ../../../../inc/themes/classic/passreset.inc:27
+msgid "Nueva Clave"
+msgstr "Nouveau Mot de passe"
+
+#: ../../../../inc/themes/classic/passreset.inc:34
+msgid "Nueva Clave (Verificar)"
+msgstr "Nouveau Mot de passe (Vérifier)"
+
+#: ../../../../inc/themes/classic/passreset.inc:35
+msgid "Clave (Verificar)"
+msgstr "Mot de passe (Vérifier)"
+
+#: ../../../../inc/themes/classic/passreset.inc:46
+#: ../../../../inc/themes/material-blue/passreset.inc:42
+msgid "Volver a iniciar sesión"
+msgstr "Retour au login"
+
+#: ../../../../inc/themes/classic/passreset.inc:48
+#: ../../../../inc/themes/material-blue/2fa.inc:27
+#: ../../../../inc/themes/material-blue/passreset.inc:48
+#: ../../../../inc/themes/material-blue/passreset.inc:49
+msgid "Solicitar"
+msgstr "Demander"
+
+#: ../../../../inc/themes/classic/passreset.inc:49
+msgid "Solicitar cambio de clave"
+msgstr "Demander le changement de mot de passe"
+
+#: ../../../../inc/themes/classic/passreset.inc:51
+#: ../../../../inc/themes/material-blue/passreset.inc:53
+#: ../../../../inc/themes/material-blue/passreset.inc:54
+msgid "Cambiar"
+msgstr "Changer"
+
+#: ../../../../inc/themes/classic/passreset.inc:52
+msgid "Cambiar Clave"
+msgstr "Changer Mot de passe"
+
+#: ../../../../inc/themes/classic/profiles.inc:11
+#: ../../../../inc/themes/material-blue/profiles.inc:14
+msgid "Nombre del perfil"
+msgstr "Nom du profil"
+
+#: ../../../../inc/themes/classic/profiles.inc:19
+#: ../../../../inc/themes/material-blue/profiles.inc:30
+msgid "Ver detalles de cuenta"
+msgstr "Voir détails de compte"
+
+#: ../../../../inc/themes/classic/profiles.inc:19
+#: ../../../../inc/themes/material-blue/profiles.inc:30
+msgid "Ver"
+msgstr "Voir"
+
+#: ../../../../inc/themes/classic/profiles.inc:23
+#: ../../../../inc/themes/material-blue/profiles.inc:35
+msgid "Ver clave de cuenta"
+msgstr "Voir mot de passe de compte"
+
+#: ../../../../inc/themes/classic/profiles.inc:28
+#: ../../../../inc/themes/material-blue/profiles.inc:40
+msgid "Ver historial de cuenta"
+msgstr "Voir historique de compte"
+
+#: ../../../../inc/themes/classic/profiles.inc:32
+#: ../../../../inc/themes/material-blue/profiles.inc:45
+msgid "Editar cuenta"
+msgstr "Editer compte"
+
+#: ../../../../inc/themes/classic/profiles.inc:32
+#: ../../../../inc/themes/material-blue/profiles.inc:45
+msgid "Editar"
+msgstr "Editer"
+
+#: ../../../../inc/themes/classic/profiles.inc:37
+#: ../../../../inc/themes/material-blue/profiles.inc:50
+msgid "Editar clave de cuenta"
+msgstr "Editer mot de passe du compte"
+
+#: ../../../../inc/themes/classic/profiles.inc:37
+#: ../../../../inc/themes/material-blue/profiles.inc:50
+msgid "Editar Clave"
+msgstr "Editer Mot de passe"
+
+#: ../../../../inc/themes/classic/profiles.inc:41
+msgid "Añadir nueva cuenta"
+msgstr "Ajouter nouveau compte"
+
+#: ../../../../inc/themes/classic/profiles.inc:41
+msgid "Añadir"
+msgstr "Ajouter"
+
+#: ../../../../inc/themes/classic/profiles.inc:46
+msgid "Borrar cuenta"
+msgstr "Supprimer compte"
+
+#: ../../../../inc/themes/classic/profiles.inc:46
+msgid "Borrar"
+msgstr "Supprimer"
+
+#: ../../../../inc/themes/classic/profiles.inc:50
+msgid "Ver archivos de cuenta"
+msgstr "Voir fichiers de compte"
+
+#: ../../../../inc/themes/classic/profiles.inc:61
+#: ../../../../inc/themes/material-blue/profiles.inc:72
+msgid "Configuración general"
+msgstr "Configuration générale"
+
+#: ../../../../inc/themes/classic/profiles.inc:65
+msgid "Cambiar clave maestra"
+msgstr "Changer mot de passe maître"
+
+#: ../../../../inc/themes/classic/profiles.inc:70
+msgid "Realizar copia de seguridad"
+msgstr "Effectuer une sauvegarde"
+
+#: ../../../../inc/themes/classic/profiles.inc:70
+#: ../../../../inc/themes/material-blue/profiles.inc:82
+msgid "Backup"
+msgstr "Sauvegarde"
+
+#: ../../../../inc/themes/classic/profiles.inc:74
+#: ../../../../inc/themes/material-blue/profiles.inc:87
+msgid "Realizar importación de cuentas"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:81
+#: ../../../../inc/themes/material-blue/profiles.inc:93
+msgid "Gestión"
+msgstr "Gestion"
+
+#: ../../../../inc/themes/classic/profiles.inc:85
+#: ../../../../inc/themes/material-blue/profiles.inc:99
+msgid "Gestión de usuarios"
+msgstr "Gestion des utilisateurs"
+
+#: ../../../../inc/themes/classic/profiles.inc:89
+#: ../../../../inc/themes/material-blue/profiles.inc:104
+msgid "Gestión de grupos"
+msgstr "Gestion des groupes"
+
+#: ../../../../inc/themes/classic/profiles.inc:94
+#: ../../../../inc/themes/material-blue/profiles.inc:109
+msgid "Gestión de perfiles"
+msgstr "Gestion des profils"
+
+#: ../../../../inc/themes/classic/profiles.inc:94
+#: ../../../../inc/themes/material-blue/profiles.inc:109
+msgid "Perfiles"
+msgstr "Profils"
+
+#: ../../../../inc/themes/classic/profiles.inc:98
+#: ../../../../inc/themes/material-blue/profiles.inc:114
+msgid "Gestión de categorías"
+msgstr "Gestion des catégories"
+
+#: ../../../../inc/themes/classic/profiles.inc:103
+#: ../../../../inc/themes/material-blue/profiles.inc:119
+msgid "Gestión de clientes"
+msgstr "Gestion des clients"
+
+#: ../../../../inc/themes/classic/profiles.inc:107
+#: ../../../../inc/themes/material-blue/profiles.inc:124
+msgid "Gestión de campos personalizados"
+msgstr "Gestion des champs personnalisés"
+
+#: ../../../../inc/themes/classic/profiles.inc:112
+#: ../../../../inc/themes/material-blue/profiles.inc:129
+msgid "Gestión de autorizaciones API"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:112
+#: ../../../../inc/themes/material-blue/profiles.inc:129
+msgid "Autorizaciones API"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:120
+#: ../../../../inc/themes/material-blue/profiles.inc:135
+msgid "Otros"
+msgstr "Autres"
+
+#: ../../../../inc/themes/classic/profiles.inc:124
+#: ../../../../inc/themes/material-blue/profiles.inc:141
+msgid "Ver log de eventos"
+msgstr "Voir journal d'évènements"
+
+#: ../../../../inc/themes/classic/profiles.inc:124
+#: ../../../../inc/themes/material-blue/profiles.inc:141
+msgid "Log de Eventos"
+msgstr "Journal d'évènements"
+
+#: ../../../../inc/themes/classic/profiles.inc:132
+#: ../../../../inc/themes/material-blue/profiles.inc:148
+msgid "Usado por"
+msgstr "Utilisé par"
+
+#: ../../../../inc/themes/classic/profiles.inc:139
+#: ../../../../inc/themes/material-blue/profiles.inc:155
+msgid "No usado"
+msgstr "Pas utilisé"
+
+#: ../../../../inc/themes/classic/request.inc:1
+#: ../../../../inc/themes/material-blue/request.inc:1
+msgid "Solicitar Modificación de Cuenta"
+msgstr "Demander modification de Compte"
+
+#: ../../../../inc/themes/classic/request.inc:22
+#: ../../../../inc/themes/material-blue/request.inc:25
+msgid "Petición"
+msgstr "Demande"
+
+#: ../../../../inc/themes/classic/request.inc:24
+#: ../../../../inc/themes/material-blue/request.inc:29
+msgid "Descripción de la petición"
+msgstr "Description de la demande"
+
+#: ../../../../inc/themes/classic/request.inc:33
+#: ../../../../inc/themes/material-blue/account.inc:440
+#: ../../../../inc/themes/material-blue/editpass.inc:55
+#: ../../../../inc/themes/material-blue/request.inc:42
+msgid "Atrás"
+msgstr "Retour"
+
+#: ../../../../inc/themes/classic/request.inc:38
+#: ../../../../inc/themes/material-blue/request.inc:48
+msgid "Enviar"
+msgstr "Envoyer"
+
+#: ../../../../inc/themes/classic/search.inc:24
+#: ../../../../inc/themes/material-blue/search.inc:29
+msgid "Buscar en Wiki"
+msgstr "Chercher dans Wiki"
+
+#: ../../../../inc/themes/classic/search.inc:60
+#: ../../../../inc/themes/material-blue/search.inc:65
+msgid "Abrir enlace a"
+msgstr "Ouvrir le lien vers"
+
+#: ../../../../inc/themes/classic/search.inc:78
+#: ../../../../inc/themes/material-blue/search.inc:89
+msgid "Archivos adjuntos"
+msgstr "Fichiers joints"
+
+#: ../../../../inc/themes/classic/search.inc:85
+#: ../../../../inc/themes/material-blue/search.inc:98
+msgid "Enlace a Wiki"
+msgstr "Lien vers Wiki"
+
+#: ../../../../inc/themes/classic/search.inc:149
+#: ../../../../inc/themes/material-blue/search.inc:163
+msgid "Filtro ON"
+msgstr "Filtre ON"
+
+#: ../../../../inc/themes/classic/search.inc:153
+#: ../../../../inc/themes/material-blue/search.inc:167
+msgid "Global ON"
+msgstr "Global ON"
+
+#: ../../../../inc/themes/classic/searchbox.inc:5
+#: ../../../../inc/themes/material-blue/searchbox.inc:5
+msgid "Limpiar"
+msgstr "Nettoyer"
+
+#: ../../../../inc/themes/classic/searchbox.inc:6
+#: ../../../../inc/themes/material-blue/searchbox.inc:10
+msgid "Texto a buscar"
+msgstr "Text à chercher"
+
+#: ../../../../inc/themes/classic/searchbox.inc:10
+#: ../../../../inc/themes/material-blue/searchbox.inc:15
+msgid "Parámetros especiales:"
+msgstr "Paramètres spéciaux"
+
+#: ../../../../inc/themes/classic/searchbox.inc:13
+#: ../../../../inc/themes/material-blue/searchbox.inc:18
+msgid "Buscar cuentas a las que 'login' tenga acceso"
+msgstr ""
+
+#: ../../../../inc/themes/classic/searchbox.inc:14
+#: ../../../../inc/themes/material-blue/searchbox.inc:19
+msgid "Buscar cuentas a las que 'group_name' tenga acceso"
+msgstr ""
+
+#: ../../../../inc/themes/classic/searchbox.inc:15
+#: ../../../../inc/themes/material-blue/searchbox.inc:20
+msgid "Buscar cuentas con archivos con el nombre 'file_name'"
+msgstr ""
+
+#: ../../../../inc/themes/classic/searchbox.inc:19
+#: ../../../../inc/themes/material-blue/searchbox.inc:25
+#: ../../../../inc/themes/material-blue/searchbox.inc:28
+msgid "Búsqueda global"
+msgstr "Recherche globale"
+
+#: ../../../../inc/themes/classic/searchbox.inc:42
+#: ../../../../inc/themes/material-blue/searchbox.inc:54
+msgid "CPP"
+msgstr "APP"
+
+#: ../../../../inc/themes/classic/searchbox.inc:42
+#: ../../../../inc/themes/material-blue/searchbox.inc:54
+msgid "Cuentas por página"
+msgstr "Comptes par page"
+
+#: ../../../../inc/themes/classic/security.inc:4
+msgid "Autenticación"
+msgstr "Authentification"
+
+#: ../../../../inc/themes/classic/security.inc:13
+msgid "Autenticación en 2 pasos"
+msgstr "Authentification à deux facteurs"
+
+#: ../../../../inc/themes/classic/security.inc:17
+#: ../../../../inc/themes/material-blue/security.inc:15
+msgid ""
+"Habilita la autentificación en 2 pasos que requiere de la introducción de un "
+"token generado por una aplicación como Google Authenticator."
+msgstr ""
+
+#: ../../../../inc/themes/classic/security.inc:21
+#: ../../../../inc/themes/material-blue/security.inc:19
+msgid ""
+"Escanee el código QR proporcionado y a continuación introduzca la clave de 6 "
+"dígitos."
+msgstr ""
+
+#: ../../../../inc/themes/classic/security.inc:29
+#: ../../../../inc/themes/material-blue/security.inc:27
+msgid "Activar"
+msgstr "Activer"
+
+#: ../../../../inc/themes/classic/security.inc:34
+#: ../../../../inc/themes/material-blue/security.inc:33
+msgid "Error al obtener el código QR. Inténtelo de nuevo"
+msgstr "Erreur pendant la recherche du QR code, merci de réessayer plus tard"
+
+#: ../../../../inc/themes/classic/security.inc:39
+#: ../../../../inc/themes/material-blue/security.inc:41
+msgid "Código"
+msgstr "Code"
+
+#: ../../../../inc/themes/classic/security.inc:44
+#: ../../../../inc/themes/material-blue/security.inc:46
+msgid ""
+"Una vez activada, sólo es posible acceder si se dispone del dispositivo "
+"generador de códigos asociado."
+msgstr ""
+
+#: ../../../../inc/themes/classic/sessionbar.inc:6
+#: ../../../../inc/themes/material-blue/footer.inc:7
+msgid "Cambiar clave de usuario"
+msgstr "Changer mot de passe utilisateur"
+
+#: ../../../../inc/themes/classic/sessionbar.inc:9
+msgid "Preferencias"
+msgstr "Préférences"
+
+#: ../../../../inc/themes/classic/sessionbar.inc:15
+#: ../../../../inc/themes/material-blue/footer.inc:5
+msgid "Salir"
+msgstr "Se déconnecter"
+
+#: ../../../../inc/themes/classic/tokens.inc:34
+#: ../../../../inc/themes/classic/users.inc:98
+#: ../../../../inc/themes/material-blue/tokens.inc:34
+#: ../../../../inc/themes/material-blue/users.inc:132
+msgid "Opciones"
+msgstr "Options"
+
+#: ../../../../inc/themes/classic/tokens.inc:38
+#: ../../../../inc/themes/material-blue/tokens.inc:37
+#: ../../../../inc/themes/material-blue/tokens.inc:40
+msgid "Regenerar Autorización"
+msgstr "Actualiser l'autorisation"
+
+#: ../../../../inc/themes/classic/tokens.inc:43
+#: ../../../../inc/themes/material-blue/tokens.inc:46
+msgid "Token"
+msgstr ""
+
+#: ../../../../inc/themes/classic/update.inc:18
+#: ../../../../inc/themes/material-blue/update.inc:20
+msgid "Actualizado"
+msgstr "Mis à jour"
+
+#: ../../../../inc/themes/classic/update.inc:23
+#: ../../../../inc/themes/material-blue/update.inc:22
+msgid "Error al comprobar actualizaciones"
+msgstr "Erreur pendant la recherche de mises à jour"
+
+#: ../../../../inc/themes/classic/upgrade.inc:8
+#: ../../../../inc/themes/material-blue/upgrade.inc:8
+msgid "Actualización de BBDD"
+msgstr "Actualisation de la BDD"
+
+#: ../../../../inc/themes/classic/upgrade.inc:10
+msgid "Introducir Código de Seguridad"
+msgstr "Saisir le code de sécurité"
+
+#: ../../../../inc/themes/classic/upgrade.inc:11
+#: ../../../../inc/themes/material-blue/upgrade.inc:14
+msgid "Código de Seguridad"
+msgstr "code de sécurité"
+
+#: ../../../../inc/themes/classic/upgrade.inc:21
+#: ../../../../inc/themes/material-blue/upgrade.inc:25
+msgid "Iniciar Actualización"
+msgstr "Démarrer la mise à jour"
+
+#: ../../../../inc/themes/classic/users.inc:12
+#: ../../../../inc/themes/material-blue/users.inc:15
+msgid "Nombre de usuario completo"
+msgstr "Nom complet d'utilisateur"
+
+#: ../../../../inc/themes/classic/users.inc:25
+#: ../../../../inc/themes/material-blue/users.inc:31
+msgid "Login de inicio de sesión"
+msgstr "Login de début de session"
+
+#: ../../../../inc/themes/classic/users.inc:64
+#: ../../../../inc/themes/material-blue/users.inc:78
+msgid "Dirección de correo"
+msgstr "Adresse courriel"
+
+#: ../../../../inc/themes/classic/users.inc:103
+#: ../../../../inc/themes/material-blue/users.inc:136
+msgid "Administrador de la aplicación"
+msgstr "Administrateur de l'application"
+
+#: ../../../../inc/themes/classic/users.inc:103
+#: ../../../../inc/themes/material-blue/users.inc:139
+msgid "Admin. Aplicación"
+msgstr "Admin. Application"
+
+#: ../../../../inc/themes/classic/users.inc:107
+#: ../../../../inc/themes/material-blue/users.inc:143
+msgid "Administrador de cuentas"
+msgstr "Administrateur des comptes"
+
+#: ../../../../inc/themes/classic/users.inc:107
+#: ../../../../inc/themes/material-blue/users.inc:146
+msgid "Admin. Cuentas"
+msgstr "Admin. Comptes"
+
+#: ../../../../inc/themes/classic/users.inc:117
+#: ../../../../inc/themes/material-blue/users.inc:158
+msgid "Forzar cambio de clave"
+msgstr "Forcer le changement de Mot de passe"
+
+#: ../../../../inc/themes/classic/users.inc:154
+#: ../../../../inc/themes/material-blue/users.inc:198
+msgid "Entradas"
+msgstr "Entrées"
+
+#: ../../../../inc/themes/classic/users.inc:159
+#: ../../../../inc/themes/material-blue/users.inc:203
+msgid "Último Acceso"
+msgstr "Dernier Accès"
+
+#: ../../../../inc/themes/classic/users.inc:169
+#: ../../../../inc/themes/material-blue/users.inc:213
+msgid "Fecha Clave Maestra"
+msgstr "Date du Mot de passe Maître"
+
+#: ../../../../inc/themes/classic/wiki.inc:11
+#: ../../../../inc/themes/material-blue/wiki.inc:11
+msgid "Habilitar enlaces Wiki"
+msgstr "Activer les liens Wiki"
+
+#: ../../../../inc/themes/classic/wiki.inc:15
+#: ../../../../inc/themes/material-blue/wiki.inc:15
+msgid ""
+"Habilita la opción de añadir un enlace a Wiki externa para los resultados de "
+"la búsqueda."
+msgstr ""
+"Permet la possibilité d'ajouter un lien pour obtenir des résultats de "
+"recherche à un Wiki externe."
+
+#: ../../../../inc/themes/classic/wiki.inc:27
+#: ../../../../inc/themes/material-blue/wiki.inc:30
+#: ../../../../inc/themes/material-blue/wiki.inc:56
+msgid "URL de búsqueda Wiki"
+msgstr "URL de recherche Wiki"
+
+#: ../../../../inc/themes/classic/wiki.inc:31
+#: ../../../../inc/themes/material-blue/wiki.inc:34
+msgid "URL que utiliza la wiki para realizar una búsqueda de una página."
+msgstr "URL que le Wiki utilise pour faire une recherche d'entrée."
+
+#: ../../../../inc/themes/classic/wiki.inc:35
+#: ../../../../inc/themes/material-blue/wiki.inc:38
+msgid "Como parámetro se utiliza el nombre del cliente."
+msgstr "Le nom du client est utilisée comme paramètre."
+
+#: ../../../../inc/themes/classic/wiki.inc:39
+#: ../../../../inc/themes/classic/wiki.inc:66
+#: ../../../../inc/themes/material-blue/wiki.inc:42
+#: ../../../../inc/themes/material-blue/wiki.inc:74
+msgid "Ejemplo:"
+msgstr "Exemple:"
+
+#: ../../../../inc/themes/classic/wiki.inc:54
+#: ../../../../inc/themes/material-blue/wiki.inc:62
+#: ../../../../inc/themes/material-blue/wiki.inc:87
+msgid "URL de página en Wiki"
+msgstr "URL de page Wiki"
+
+#: ../../../../inc/themes/classic/wiki.inc:58
+#: ../../../../inc/themes/material-blue/wiki.inc:66
+msgid "URL que utiliza la wiki para acceder a los detalles de una página."
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:62
+#: ../../../../inc/themes/material-blue/wiki.inc:70
+msgid ""
+"El nombre de la cuenta se utiliza como parámetro de la variable de búsqueda "
+"de la Wiki."
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:81
+#: ../../../../inc/themes/material-blue/wiki.inc:93
+msgid "Prefijo para nombre de cuenta"
+msgstr "Préfix de nom de compte"
+
+#: ../../../../inc/themes/classic/wiki.inc:85
+#: ../../../../inc/themes/material-blue/wiki.inc:97
+msgid ""
+"Prefijo para determinar qué cuentas tienen un enlace a una página de la Wiki."
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:121
+#: ../../../../inc/themes/material-blue/wiki.inc:135
+msgid "Añadir filtro"
+msgstr "Ajouter filtre"
+
+#: ../../../../inc/themes/classic/wiki.inc:122
+#: ../../../../inc/themes/material-blue/wiki.inc:136
+msgid "Eliminar filtro"
+msgstr "Supprimer filtre"
+
+#: ../../../../inc/themes/material-blue/account.inc:4
+msgid "Histórico"
+msgstr "Historique"
+
+#: ../../../../inc/themes/material-blue/account.inc:42
+msgid "Seleccionar o escribir para crear uno nuevo"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/account.inc:110
+msgid "Clave (Repetir)"
+msgstr "Mot de passe (à confirmer)"
+
+#: ../../../../inc/themes/material-blue/backup.inc:58
+#: ../../../../inc/themes/material-blue/backup.inc:144
+#: ../../../../inc/themes/material-blue/encryption.inc:118
+#: ../../../../inc/themes/material-blue/import.inc:217
+msgid "Realizar"
+msgstr "Effectuer"
+
+#: ../../../../inc/themes/material-blue/config.inc:195
+msgid "Número de resultados por página"
+msgstr "Résultats par page"
+
+#: ../../../../inc/themes/material-blue/config.inc:290
+msgid "Tamaño máximo de archivo en bytes"
+msgstr "Taille maximum du fichier en \"bytes\""
+
+#: ../../../../inc/themes/material-blue/config.inc:297
+msgid "Proxy"
+msgstr "Proxy"
+
+#: ../../../../inc/themes/material-blue/config.inc:303
+msgid "Usar Proxy"
+msgstr "Utiliser un serveur Proxy"
+
+#: ../../../../inc/themes/material-blue/config.inc:324
+msgid "Servidor proxy"
+msgstr "Serveur Proxy"
+
+#: ../../../../inc/themes/material-blue/config.inc:338
+msgid "Puerto del servidor proxy"
+msgstr "Port du serveur pro"
+
+#: ../../../../inc/themes/material-blue/config.inc:352
+msgid "Usuario del servidor proxy"
+msgstr "Utilisateur du serveur proxy"
+
+#: ../../../../inc/themes/material-blue/config.inc:366
+msgid "Clave del servidor proxy"
+msgstr "Mot de passe utilisateur du serveur Proxy"
+
+#: ../../../../inc/themes/material-blue/customfields.inc:14
+msgid "Nombre del campo"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/customfields.inc:47
+msgid "Ayuda del campo"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/footer.inc:11
+msgid "Preferencias de usuario"
+msgstr "Préférences de l'utilisateur"
+
+#: ../../../../inc/themes/material-blue/import.inc:104
+msgid ""
+"Permite realizar la importación de Cuentas, Categorías y Clientes desde "
+"archivos XML y CSV."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/install.inc:31
+msgid "Usuario administrador de sysPass"
+msgstr "Utilisateur \"administrateur\" de Syspass"
+
+#: ../../../../inc/themes/material-blue/install.inc:78
+msgid "Usuario acceso BBDD"
+msgstr "Utilisateur pour accéder à la base de données"
+
+#: ../../../../inc/themes/material-blue/install.inc:83
+msgid "Usuario con permisos de administrador de MySQL"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/install.inc:90
+msgid "Clave acceso BBDD"
+msgstr "Mot de passe pour accéder à la base de données"
+
+#: ../../../../inc/themes/material-blue/install.inc:97
+msgid "Nombre BBDD para sysPass"
+msgstr "Nom de la base de données sysPass"
+
+#: ../../../../inc/themes/material-blue/install.inc:109
+msgid "Servidor BBDD para sysPass"
+msgstr "Adresse du serveur de base de données sysPass"
+
+#: ../../../../inc/themes/material-blue/install.inc:114
+msgid "Nombre del servidor para instalar la base de datos de sysPass"
+msgstr "Nom du serveur ou installer la base de données syPass"
+
+#: ../../../../inc/themes/material-blue/ldap.inc:96
+msgid "Clave del usuario de conexión a LDAP."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/mail.inc:118
+msgid ""
+"Habilita que los usuarios puedan solicitar modificaciones o acceso a las "
+"cuentas sin permisos."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/profiles.inc:25
+msgid "Crear nueva cuenta"
+msgstr "Créer un nouveau compte"
+
+#: ../../../../inc/themes/material-blue/profiles.inc:25
+msgid "Crear"
+msgstr "Créer"
+
+#: ../../../../inc/themes/material-blue/profiles.inc:55
+msgid "Eliminar cuenta"
+msgstr "Supprimer un compte"
+
+#: ../../../../inc/themes/material-blue/profiles.inc:55
+msgid "Eliminar"
+msgstr "Supprimer"
+
+#: ../../../../inc/themes/material-blue/profiles.inc:60
+msgid "Var archivos de cuenta"
+msgstr "Voir les fichiers du compte"
+
+#: ../../../../inc/themes/material-blue/profiles.inc:77
+msgid "Opciones de encriptación"
+msgstr "Options de chiffrement"
+
+#: ../../../../inc/themes/material-blue/profiles.inc:82
+msgid "Realizar copia de seguridad y exportar"
+msgstr "Faire une sauvegarder et exporter"
+
+#: ../../../../inc/themes/material-blue/security.inc:4
+msgid "Autentificación"
+msgstr "Authentification"
diff --git a/inc/locales/hu_HU/LC_MESSAGES/messages.mo b/inc/locales/hu_HU/LC_MESSAGES/messages.mo
index f471140d..405a537f 100644
Binary files a/inc/locales/hu_HU/LC_MESSAGES/messages.mo and b/inc/locales/hu_HU/LC_MESSAGES/messages.mo differ
diff --git a/inc/locales/hu_HU/LC_MESSAGES/messages.po b/inc/locales/hu_HU/LC_MESSAGES/messages.po
index 3e482865..9d7a1550 100644
--- a/inc/locales/hu_HU/LC_MESSAGES/messages.po
+++ b/inc/locales/hu_HU/LC_MESSAGES/messages.po
@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: sysPass\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-07-28 18:37+0100\n"
-"PO-Revision-Date: 2015-07-28 18:42+0100\n"
-"Last-Translator: nuxsmin \n"
+"POT-Creation-Date: 2015-09-23 12:59+0100\n"
+"PO-Revision-Date: 2015-09-23 13:00+0100\n"
+"Last-Translator: nuxsmin \n"
"Language-Team: \n"
"Language: hu_HU\n"
"MIME-Version: 1.0\n"
@@ -22,2212 +22,2375 @@ msgstr ""
"X-Generator: Poedit 1.6.10\n"
"X-Poedit-SearchPath-0: ../../../..\n"
-# "Session not started or timeout"
-#: ../../../../ajax/ajax_accountSave.php:33
-#: ../../../../ajax/ajax_appMgmtSave.php:34
-#: ../../../../ajax/ajax_backup.php:32 ../../../../ajax/ajax_checkLdap.php:32
-#: ../../../../ajax/ajax_configSave.php:33 ../../../../ajax/ajax_import.php:1
-#: ../../../../ajax/ajax_migrate.php:1
-#: ../../../../ajax/ajax_sendRequest.php:32
-msgid "La sesión no se ha iniciado o ha caducado"
-msgstr "A munkamenet nem indult el, vagy idõtúllépés miatt bezáródott"
-
# "INVALID QUERY"
-#: ../../../../ajax/ajax_accountSave.php:39
-#: ../../../../ajax/ajax_appMgmtSave.php:40
-#: ../../../../ajax/ajax_backup.php:38 ../../../../ajax/ajax_checkLdap.php:38
-#: ../../../../ajax/ajax_configSave.php:39 ../../../../ajax/ajax_files.php:40
-#: ../../../../ajax/ajax_getFiles.php:43 ../../../../ajax/ajax_import.php:1
-#: ../../../../ajax/ajax_migrate.php:1 ../../../../ajax/ajax_passReset.php:34
-#: ../../../../ajax/ajax_search.php:38
-#: ../../../../ajax/ajax_sendRequest.php:38
+#: ../../../../ajax/ajax_2fa.php:35 ../../../../ajax/ajax_accountSave.php:41
+#: ../../../../ajax/ajax_appMgmtSave.php:42
+#: ../../../../ajax/ajax_backup.php:39 ../../../../ajax/ajax_checkLdap.php:41
+#: ../../../../ajax/ajax_configSave.php:41 ../../../../ajax/ajax_files.php:41
+#: ../../../../ajax/ajax_getFiles.php:46 ../../../../ajax/ajax_import.php:49
+#: ../../../../ajax/ajax_migrate.php:45 ../../../../ajax/ajax_passReset.php:37
+#: ../../../../ajax/ajax_search.php:41
+#: ../../../../ajax/ajax_sendRequest.php:41
+#: ../../../../ajax/ajax_userPrefsSave.php:42
msgid "CONSULTA INVÁLIDA"
msgstr "Érvénytelen lekérdezés"
+# "Incorrect login"
+#: ../../../../ajax/ajax_2fa.php:55
+#, fuzzy
+msgid "Código correcto"
+msgstr "Hibás felhasználónév vagy jelszó"
+
+# "Incorrect login"
+#: ../../../../ajax/ajax_2fa.php:58 ../../../../ajax/ajax_userPrefsSave.php:66
+#, fuzzy
+msgid "Código incorrecto"
+msgstr "Hibás felhasználónév vagy jelszó"
+
+# "Session not started or timeout"
+#: ../../../../ajax/ajax_accountSave.php:35
+#: ../../../../ajax/ajax_appMgmtSave.php:36
+#: ../../../../ajax/ajax_backup.php:33 ../../../../ajax/ajax_checkLdap.php:35
+#: ../../../../ajax/ajax_configSave.php:35 ../../../../ajax/ajax_import.php:35
+#: ../../../../ajax/ajax_migrate.php:35
+#: ../../../../ajax/ajax_sendRequest.php:35
+#: ../../../../ajax/ajax_userPrefsSave.php:36
+#: ../../../../ajax/ajax_viewpass.php:36
+msgid "La sesión no se ha iniciado o ha caducado"
+msgstr "A munkamenet nem indult el, vagy idõtúllépés miatt bezáródott"
+
# "Account name needed"
-#: ../../../../ajax/ajax_accountSave.php:67
-#: ../../../../ajax/ajax_accountSave.php:92
+#: ../../../../ajax/ajax_accountSave.php:75
+#: ../../../../ajax/ajax_accountSave.php:90
msgid "Es necesario un nombre de cuenta"
msgstr "Fiók név szükséges"
# "Customer name needed"
-#: ../../../../ajax/ajax_accountSave.php:71
+#: ../../../../ajax/ajax_accountSave.php:77
#: ../../../../ajax/ajax_accountSave.php:88
-#: ../../../../ajax/ajax_appMgmtSave.php:327
+#: ../../../../ajax/ajax_appMgmtSave.php:337
msgid "Es necesario un nombre de cliente"
msgstr "Ügyfél név szükséges"
# "Username needed"
-#: ../../../../ajax/ajax_accountSave.php:75
-#: ../../../../ajax/ajax_accountSave.php:96
+#: ../../../../ajax/ajax_accountSave.php:79
+#: ../../../../ajax/ajax_accountSave.php:92
msgid "Es necesario un usuario"
msgstr "Felhasználónév szükséges"
# "Password needed"
-#: ../../../../ajax/ajax_accountSave.php:79
-msgid "Es necesario una clave"
+#: ../../../../ajax/ajax_accountSave.php:81
+#: ../../../../ajax/ajax_accountSave.php:103
+#, fuzzy
+msgid "Es necesaria una clave"
msgstr "Jelszó szükséges"
-# "Passwords mismatch"
+# "Category name needed"
#: ../../../../ajax/ajax_accountSave.php:83
-#: ../../../../ajax/ajax_accountSave.php:109
-#: ../../../../ajax/ajax_appMgmtSave.php:123
-#: ../../../../ajax/ajax_appMgmtSave.php:149
-msgid "Las claves no coinciden"
-msgstr "A jelszó nem egyezik"
+#: ../../../../ajax/ajax_accountSave.php:94
+#, fuzzy
+msgid "Es necesario una categoría"
+msgstr "Jelszó szükséges"
# "Invalid Id"
-#: ../../../../ajax/ajax_accountSave.php:100
-#: ../../../../ajax/ajax_accountSave.php:113
+#: ../../../../ajax/ajax_accountSave.php:98
+#: ../../../../ajax/ajax_accountSave.php:107
msgid "Id inválido"
msgstr "Érvénytelen Id"
-# "Password cannot be blank"
-#: ../../../../ajax/ajax_accountSave.php:105
-#: ../../../../ajax/ajax_appMgmtSave.php:119
-#: ../../../../ajax/ajax_appMgmtSave.php:145
-msgid "La clave no puede estar en blanco"
-msgstr "A jelszó nem lehet üres"
-
# "Invalid Action"
-#: ../../../../ajax/ajax_accountSave.php:116
-#: ../../../../ajax/ajax_accountSave.php:264
-#: ../../../../ajax/ajax_appMgmtSave.php:179
-#: ../../../../ajax/ajax_appMgmtSave.php:240
-#: ../../../../ajax/ajax_appMgmtSave.php:318
-#: ../../../../ajax/ajax_appMgmtSave.php:369
-#: ../../../../ajax/ajax_appMgmtSave.php:418
-#: ../../../../ajax/ajax_configSave.php:239
+#: ../../../../ajax/ajax_accountSave.php:110
+#: ../../../../ajax/ajax_accountSave.php:263
+#: ../../../../ajax/ajax_appMgmtSave.php:543
+#: ../../../../ajax/ajax_configSave.php:297
+#: ../../../../ajax/ajax_userPrefsSave.php:79 ../../../../api.php:53
msgid "Acción Inválida"
msgstr "Érvénytelen Akció"
-# "Crypto module can't be loaded"
+# "Passwords mismatch"
#: ../../../../ajax/ajax_accountSave.php:122
-#: ../../../../inc/import.class.php:240
-msgid "No se puede usar el módulo de encriptación"
-msgstr "A Crypto modul nem tölthetõ be"
-
-# "Error on creating encryption data"
-#: ../../../../ajax/ajax_accountSave.php:129
-#: ../../../../inc/import.class.php:247
-msgid "Error al generar datos cifrados"
-msgstr "Hiba a titkosítási folyamat közben"
-
-# "Duplicated customer"
-#: ../../../../ajax/ajax_accountSave.php:144
-#: ../../../../ajax/ajax_accountSave.php:193
-msgid "Cliente duplicado"
-msgstr "Kettõzött ügyfél"
-
-# "Error on creating customer"
-#: ../../../../ajax/ajax_accountSave.php:148
-#: ../../../../ajax/ajax_accountSave.php:197
-#: ../../../../ajax/ajax_appMgmtSave.php:341
-msgid "Error al crear el cliente"
-msgstr "Hiba az ügyfél létrehozása közben"
+#: ../../../../ajax/ajax_appMgmtSave.php:111
+#: ../../../../ajax/ajax_appMgmtSave.php:155
+#: ../../../../ajax/ajax_backup.php:70
+msgid "Las claves no coinciden"
+msgstr "A jelszó nem egyezik"
# "Account added"
-#: ../../../../ajax/ajax_accountSave.php:172
+#: ../../../../ajax/ajax_accountSave.php:173
msgid "Cuenta creada"
msgstr "Fiók hozzáadva"
# "Error on account creation"
-#: ../../../../ajax/ajax_accountSave.php:174
+#: ../../../../ajax/ajax_accountSave.php:176
msgid "Error al crear la cuenta"
msgstr "Hiba a fiók létrehozása közben"
# "No changes"
-#: ../../../../ajax/ajax_accountSave.php:207
+#: ../../../../ajax/ajax_accountSave.php:211
msgid "Sin cambios"
msgstr "Nincsenek változások"
# "Account updated"
-#: ../../../../ajax/ajax_accountSave.php:212
-#: ../../../../inc/account.class.php:369
+#: ../../../../ajax/ajax_accountSave.php:223
msgid "Cuenta actualizada"
msgstr "Fiók frissítve"
# "Error on updating account"
-#: ../../../../ajax/ajax_accountSave.php:214
+#: ../../../../ajax/ajax_accountSave.php:226
msgid "Error al modificar la cuenta"
msgstr "Hiba a fiók frissítése közben"
# "Account deleted"
-#: ../../../../ajax/ajax_accountSave.php:221
+#: ../../../../ajax/ajax_accountSave.php:233
msgid "Cuenta eliminada"
msgstr "Fiók törölve"
# "Error on account deletion"
-#: ../../../../ajax/ajax_accountSave.php:223
+#: ../../../../ajax/ajax_accountSave.php:236
msgid "Error al eliminar la cuenta"
msgstr "Hiba a fiók törlése közben"
# "Password updated"
-#: ../../../../ajax/ajax_accountSave.php:233
-#: ../../../../ajax/ajax_appMgmtSave.php:156
-#: ../../../../ajax/ajax_passReset.php:79
+#: ../../../../ajax/ajax_accountSave.php:246
+#: ../../../../ajax/ajax_appMgmtSave.php:161
+#: ../../../../ajax/ajax_passReset.php:74
msgid "Clave actualizada"
msgstr "Jelszó frissítve"
# "Error on updating password"
-#: ../../../../ajax/ajax_accountSave.php:235
+#: ../../../../ajax/ajax_accountSave.php:249
msgid "Error al actualizar la clave"
msgstr "Hiba a jelszó frissítése közben"
# "Account restored"
-#: ../../../../ajax/ajax_accountSave.php:258
+#: ../../../../ajax/ajax_accountSave.php:256
msgid "Cuenta restaurada"
msgstr "Fiók restaurált"
# "Error on restoring account"
-#: ../../../../ajax/ajax_accountSave.php:261
+#: ../../../../ajax/ajax_accountSave.php:259
msgid "Error al restaurar cuenta"
msgstr "Hiba történt helyreállítása számla"
+# "User"
+#: ../../../../ajax/ajax_appMgmtData.php:54
+#, fuzzy
+msgid "Ver Usuario"
+msgstr "Felhasználó részletek"
+
# "Edit User"
-#: ../../../../ajax/ajax_appMgmtData.php:46
-#: ../../../../ajax/ajax_getContent.php:137
+#: ../../../../ajax/ajax_appMgmtData.php:61
+#: ../../../../web/UsersMgmtC.class.php:136
msgid "Editar Usuario"
msgstr "Felhasználó módosítás"
# "New User"
-#: ../../../../ajax/ajax_appMgmtData.php:51
-#: ../../../../ajax/ajax_getContent.php:135
-#: ../../../../inc/users.class.php:816
+#: ../../../../ajax/ajax_appMgmtData.php:67
+#: ../../../../inc/UserBase.class.php:381
+#: ../../../../web/UsersMgmtC.class.php:121
msgid "Nuevo Usuario"
msgstr "Új felhasználó"
+# "Group"
+#: ../../../../ajax/ajax_appMgmtData.php:73
+#, fuzzy
+msgid "Ver Grupo"
+msgstr "Nézet"
+
# "Edit Group"
-#: ../../../../ajax/ajax_appMgmtData.php:56
-#: ../../../../ajax/ajax_getContent.php:168
+#: ../../../../ajax/ajax_appMgmtData.php:80
+#: ../../../../web/UsersMgmtC.class.php:202
msgid "Editar Grupo"
msgstr "Csoport módosítás"
# "New Group"
-#: ../../../../ajax/ajax_appMgmtData.php:61
-#: ../../../../ajax/ajax_getContent.php:167
-#: ../../../../inc/groups.class.php:154
+#: ../../../../ajax/ajax_appMgmtData.php:86
+#: ../../../../inc/Groups.class.php:152 ../../../../inc/Groups.class.php:253
+#: ../../../../web/UsersMgmtC.class.php:194
msgid "Nuevo Grupo"
msgstr "Új csoport"
+# "Profile"
+#: ../../../../ajax/ajax_appMgmtData.php:92
+#, fuzzy
+msgid "Ver Perfil"
+msgstr "Nézet"
+
# "Edit Profile"
-#: ../../../../ajax/ajax_appMgmtData.php:66
-#: ../../../../ajax/ajax_getContent.php:200
+#: ../../../../ajax/ajax_appMgmtData.php:99
+#: ../../../../web/UsersMgmtC.class.php:267
msgid "Editar Perfil"
msgstr "Profil módosítás"
# "New Profile"
-#: ../../../../ajax/ajax_appMgmtData.php:71
-#: ../../../../ajax/ajax_getContent.php:199
-#: ../../../../inc/profiles.class.php:206
+#: ../../../../ajax/ajax_appMgmtData.php:105
+#: ../../../../inc/ProfileBase.class.php:512
+#: ../../../../web/UsersMgmtC.class.php:252
msgid "Nuevo Perfil"
msgstr "Új profil"
+# "Customer"
+#: ../../../../ajax/ajax_appMgmtData.php:111
+#, fuzzy
+msgid "Ver Cliente"
+msgstr "Nézet"
+
# "Edit Customer"
-#: ../../../../ajax/ajax_appMgmtData.php:76
-#: ../../../../ajax/ajax_getContent.php:285
+#: ../../../../ajax/ajax_appMgmtData.php:118
+#: ../../../../web/AccountsMgmtC.class.php:152
msgid "Editar Cliente"
msgstr "Ügyfél módosítás"
# "New Customer"
-#: ../../../../ajax/ajax_appMgmtData.php:81
-#: ../../../../ajax/ajax_getContent.php:284
-#: ../../../../inc/customer.class.php:58
+#: ../../../../ajax/ajax_appMgmtData.php:124
+#: ../../../../inc/Customer.class.php:65
+#: ../../../../web/AccountsMgmtC.class.php:145
msgid "Nuevo Cliente"
msgstr "Új ügyfél"
+# "Category"
+#: ../../../../ajax/ajax_appMgmtData.php:130
+#, fuzzy
+msgid "Ver Categoría"
+msgstr "Nézet"
+
# "Edit Category"
-#: ../../../../ajax/ajax_appMgmtData.php:86
-#: ../../../../ajax/ajax_getContent.php:253
+#: ../../../../ajax/ajax_appMgmtData.php:137
+#: ../../../../web/AccountsMgmtC.class.php:94
msgid "Editar Categoría"
msgstr "Kategória módosítás"
# "New Category"
-#: ../../../../ajax/ajax_appMgmtData.php:91
-#: ../../../../ajax/ajax_getContent.php:252
-#: ../../../../inc/category.class.php:79
+#: ../../../../ajax/ajax_appMgmtData.php:143
+#: ../../../../inc/Category.class.php:83
+#: ../../../../web/AccountsMgmtC.class.php:86
msgid "Nueva Categoría"
msgstr "Új Kategória"
+# "Update"
+#: ../../../../ajax/ajax_appMgmtData.php:149
+#, fuzzy
+msgid "Ver Autorización"
+msgstr "Nézet"
+
+# "Update"
+#: ../../../../ajax/ajax_appMgmtData.php:156
+#: ../../../../inc/ApiTokens.class.php:189
+#: ../../../../web/UsersMgmtC.class.php:399
+#, fuzzy
+msgid "Nueva Autorización"
+msgstr "Új Kategória"
+
+# Start Update
+#: ../../../../ajax/ajax_appMgmtData.php:162
+#: ../../../../web/UsersMgmtC.class.php:414
+#, fuzzy
+msgid "Editar Autorización"
+msgstr "Módosítás"
+
+# "New Group"
+#: ../../../../ajax/ajax_appMgmtData.php:168
+#: ../../../../web/AccountsMgmtC.class.php:273
+#, fuzzy
+msgid "Nuevo Campo"
+msgstr "Új felhasználó"
+
+# "Edit Password"
+#: ../../../../ajax/ajax_appMgmtData.php:174
+#: ../../../../web/AccountsMgmtC.class.php:280
+#, fuzzy
+msgid "Editar Campo"
+msgstr "Módosítás"
+
# "Username required"
-#: ../../../../ajax/ajax_appMgmtSave.php:76
+#: ../../../../ajax/ajax_appMgmtSave.php:85
msgid "Es necesario un nombre de usuario"
msgstr "Felhasználónév szükséges"
# "Login required"
-#: ../../../../ajax/ajax_appMgmtSave.php:80
+#: ../../../../ajax/ajax_appMgmtSave.php:87
msgid "Es necesario un login"
msgstr "Bejelentkezés szükséges"
# "Profile required"
-#: ../../../../ajax/ajax_appMgmtSave.php:84
+#: ../../../../ajax/ajax_appMgmtSave.php:89
msgid "Es necesario un perfil"
msgstr "Profil szükséges"
# "Group required"
-#: ../../../../ajax/ajax_appMgmtSave.php:88
+#: ../../../../ajax/ajax_appMgmtSave.php:91
msgid "Es necesario un grupo"
msgstr "Csoport szükséges"
# "Email required"
-#: ../../../../ajax/ajax_appMgmtSave.php:92
+#: ../../../../ajax/ajax_appMgmtSave.php:93
msgid "Es necesario un email"
msgstr "Email szükséges"
+# "Ey, this is a DEMO!!"
+#: ../../../../ajax/ajax_appMgmtSave.php:95
+#: ../../../../ajax/ajax_appMgmtSave.php:144
+#: ../../../../ajax/ajax_appMgmtSave.php:168
+#: ../../../../ajax/ajax_configSave.php:272
+#: ../../../../ajax/ajax_import.php:39 ../../../../ajax/ajax_migrate.php:39
+#: ../../../../ajax/ajax_userPrefsSave.php:55
+msgid "Ey, esto es una DEMO!!"
+msgstr "Aj, ez egy próbaverzió"
+
# "Duplicated user login "
-#: ../../../../ajax/ajax_appMgmtSave.php:110
+#: ../../../../ajax/ajax_appMgmtSave.php:100
msgid "Login de usuario duplicado"
msgstr "Dupla felhasználó bejelentkezés"
# "Duplicated user email"
-#: ../../../../ajax/ajax_appMgmtSave.php:113
+#: ../../../../ajax/ajax_appMgmtSave.php:103
msgid "Email de usuario duplicado"
msgstr "Kettõzött felhasználó Email"
+# "Password cannot be blank"
+#: ../../../../ajax/ajax_appMgmtSave.php:109
+#: ../../../../ajax/ajax_appMgmtSave.php:146
+msgid "La clave no puede estar en blanco"
+msgstr "A jelszó nem lehet üres"
+
# "User added"
-#: ../../../../ajax/ajax_appMgmtSave.php:127
+#: ../../../../ajax/ajax_appMgmtSave.php:122
msgid "Usuario creado"
msgstr "Felhasználó hozzáadva"
# "Error on creating user"
-#: ../../../../ajax/ajax_appMgmtSave.php:130
+#: ../../../../ajax/ajax_appMgmtSave.php:125
msgid "Error al crear el usuario"
msgstr "Hiba a felhasználó létrehozása közben"
# "User updated"
-#: ../../../../ajax/ajax_appMgmtSave.php:133
-#: ../../../../inc/users.class.php:228
+#: ../../../../ajax/ajax_appMgmtSave.php:135
+#: ../../../../inc/UserUtil.class.php:103
msgid "Usuario actualizado"
msgstr "Felhasználó frissítve"
# "Error on user update"
-#: ../../../../ajax/ajax_appMgmtSave.php:136
+#: ../../../../ajax/ajax_appMgmtSave.php:138
msgid "Error al actualizar el usuario"
msgstr "Hiba a felhasználó frissítése közben"
-# "Ey, this is a DEMO!!"
-#: ../../../../ajax/ajax_appMgmtSave.php:141
-#: ../../../../ajax/ajax_appMgmtSave.php:163
-#: ../../../../ajax/ajax_configSave.php:214 ../../../../ajax/ajax_import.php:1
-#: ../../../../ajax/ajax_migrate.php:1
-msgid "Ey, esto es una DEMO!!"
-msgstr "Aj, ez egy próbaverzió"
-
# "Error on updating password"
-#: ../../../../ajax/ajax_appMgmtSave.php:159
-#: ../../../../ajax/ajax_passReset.php:83
+#: ../../../../ajax/ajax_appMgmtSave.php:164
+#: ../../../../ajax/ajax_passReset.php:78
msgid "Error al modificar la clave"
msgstr "Hiba a jelszó frissítése közben"
# "Unable to delete, user in use"
-#: ../../../../ajax/ajax_appMgmtSave.php:169
+#: ../../../../ajax/ajax_appMgmtSave.php:170
msgid "No es posible eliminar, usuario en uso"
msgstr "Nem lehet törölni, a felhaszánáló használatban van"
# "User deleted"
-#: ../../../../ajax/ajax_appMgmtSave.php:173
+#: ../../../../ajax/ajax_appMgmtSave.php:174
msgid "Usuario eliminado"
msgstr "Felhasználó törölve"
# "Error on user deletion"
-#: ../../../../ajax/ajax_appMgmtSave.php:176
+#: ../../../../ajax/ajax_appMgmtSave.php:177
msgid "Error al eliminar el usuario"
msgstr "Hiba a felhasználó törlése közben"
# "Group name required"
-#: ../../../../ajax/ajax_appMgmtSave.php:188
+#: ../../../../ajax/ajax_appMgmtSave.php:192
msgid "Es necesario un nombre de grupo"
msgstr "Csoport név szükséges"
# "Duplicated group name"
-#: ../../../../ajax/ajax_appMgmtSave.php:196
+#: ../../../../ajax/ajax_appMgmtSave.php:200
msgid "Nombre de grupo duplicado"
msgstr "Kettõzött csoport név"
# "Group added"
-#: ../../../../ajax/ajax_appMgmtSave.php:201
+#: ../../../../ajax/ajax_appMgmtSave.php:212
msgid "Grupo creado"
msgstr "Csoport hozzáadva"
# "Error on group creation"
-#: ../../../../ajax/ajax_appMgmtSave.php:203
+#: ../../../../ajax/ajax_appMgmtSave.php:214
msgid "Error al crear el grupo"
msgstr "Hiba a csoport létrehozása közben"
# "Group updated"
-#: ../../../../ajax/ajax_appMgmtSave.php:207
+#: ../../../../ajax/ajax_appMgmtSave.php:225
msgid "Grupo actualizado"
msgstr "Csoport frissítve"
# "Error on updating group"
-#: ../../../../ajax/ajax_appMgmtSave.php:210
+#: ../../../../ajax/ajax_appMgmtSave.php:228
msgid "Error al actualizar el grupo"
msgstr "Hiba a csoport frissítése közben"
# "Users"
-#: ../../../../ajax/ajax_appMgmtSave.php:221
-#: ../../../../ajax/ajax_appMgmtSave.php:298
-#: ../../../../inc/tpl/accounts.php:283 ../../../../inc/tpl/profiles.php:88
+#: ../../../../ajax/ajax_appMgmtSave.php:237
+#: ../../../../ajax/ajax_appMgmtSave.php:314
+#: ../../../../inc/CustomFieldsBase.class.php:83
+#: ../../../../inc/themes/classic/account.inc:109
+#: ../../../../inc/themes/classic/groups.inc:24
+#: ../../../../inc/themes/classic/profiles.inc:85
+#: ../../../../inc/themes/material-blue/account.inc:134
+#: ../../../../inc/themes/material-blue/groups.inc:32
+#: ../../../../inc/themes/material-blue/profiles.inc:99
msgid "Usuarios"
msgstr "Felhasználók"
# "Accounts"
-#: ../../../../ajax/ajax_appMgmtSave.php:225
-#: ../../../../ajax/ajax_appMgmtSave.php:356
-#: ../../../../inc/category.class.php:271 ../../../../inc/tpl/profiles.php:45
+#: ../../../../ajax/ajax_appMgmtSave.php:241
+#: ../../../../inc/Category.class.php:266
+#: ../../../../inc/CustomFieldsBase.class.php:80
+#: ../../../../inc/Customer.class.php:150
+#: ../../../../inc/themes/classic/profiles.inc:15
+#: ../../../../inc/themes/material-blue/config.inc:139
+#: ../../../../inc/themes/material-blue/profiles.inc:19
msgid "Cuentas"
msgstr "Fiókok"
# "Unable to delete"
-#: ../../../../ajax/ajax_appMgmtSave.php:228
-#: ../../../../ajax/ajax_appMgmtSave.php:300
-#: ../../../../ajax/ajax_appMgmtSave.php:358
-#: ../../../../ajax/ajax_appMgmtSave.php:407
+#: ../../../../ajax/ajax_appMgmtSave.php:244
+#: ../../../../ajax/ajax_appMgmtSave.php:316
+#: ../../../../inc/Category.class.php:119
+#: ../../../../inc/Customer.class.php:150
msgid "No es posible eliminar"
msgstr "Nem lehet törölni"
# "Group in use by:"
-#: ../../../../ajax/ajax_appMgmtSave.php:228
+#: ../../../../ajax/ajax_appMgmtSave.php:244
msgid "Grupo en uso por:"
msgstr "Csoportot használja a:"
# "Group deleted"
-#: ../../../../ajax/ajax_appMgmtSave.php:233
+#: ../../../../ajax/ajax_appMgmtSave.php:249
msgid "Grupo eliminado"
msgstr "Csoport törölve"
# "Error on group deletion"
-#: ../../../../ajax/ajax_appMgmtSave.php:236
+#: ../../../../ajax/ajax_appMgmtSave.php:252
msgid "Error al eliminar el grupo"
msgstr "Hiba a csoport törlése közben"
# "Profile name needed"
-#: ../../../../ajax/ajax_appMgmtSave.php:270
+#: ../../../../ajax/ajax_appMgmtSave.php:291
msgid "Es necesario un nombre de perfil"
msgstr "Profil név szükséges"
# "Duplicated profile name"
-#: ../../../../ajax/ajax_appMgmtSave.php:276
+#: ../../../../ajax/ajax_appMgmtSave.php:293
msgid "Nombre de perfil duplicado"
msgstr "Kettözõtt profil név"
# "Profile added"
-#: ../../../../ajax/ajax_appMgmtSave.php:281
+#: ../../../../ajax/ajax_appMgmtSave.php:298
msgid "Perfil creado"
msgstr "Profil hozzáadva"
# "Error on creating profile"
-#: ../../../../ajax/ajax_appMgmtSave.php:284
+#: ../../../../ajax/ajax_appMgmtSave.php:301
msgid "Error al crear el perfil"
msgstr "Hiba a profil létrehozása közben"
# "Profile updated"
-#: ../../../../ajax/ajax_appMgmtSave.php:287
+#: ../../../../ajax/ajax_appMgmtSave.php:304
msgid "Perfil actualizado"
msgstr "Profil frissítve"
# "Error on updating profile"
-#: ../../../../ajax/ajax_appMgmtSave.php:290
+#: ../../../../ajax/ajax_appMgmtSave.php:307
msgid "Error al actualizar el perfil"
msgstr "Hiba a profil frissítése közben"
# "Profiles in use by:"
-#: ../../../../ajax/ajax_appMgmtSave.php:300
+#: ../../../../ajax/ajax_appMgmtSave.php:316
msgid "Perfil en uso por:"
msgstr "A profilt használja:"
-# "Delete Profile"
-#: ../../../../ajax/ajax_appMgmtSave.php:305
-#: ../../../../ajax/ajax_getContent.php:201
-msgid "Eliminar Perfil"
-msgstr "Profil törlése"
-
-# "Profile"
-#: ../../../../ajax/ajax_appMgmtSave.php:306
-#: ../../../../ajax/ajax_doLogin.php:157
-#: ../../../../ajax/ajax_getContent.php:114
-#: ../../../../inc/profiles.class.php:207
-#: ../../../../inc/profiles.class.php:259 ../../../../inc/tpl/users.php:102
-msgid "Perfil"
-msgstr "Profil"
-
# "Profile deleted"
-#: ../../../../ajax/ajax_appMgmtSave.php:311
+#: ../../../../ajax/ajax_appMgmtSave.php:319
msgid "Perfil eliminado"
msgstr "Profil törölve"
# "Error on profile deletion"
-#: ../../../../ajax/ajax_appMgmtSave.php:314
+#: ../../../../ajax/ajax_appMgmtSave.php:322
msgid "Error al eliminar el perfil"
msgstr "Hiba a profil törlése közben"
-# "Duplicated customer name"
-#: ../../../../ajax/ajax_appMgmtSave.php:334
-msgid "Nombre de cliente duplicado"
-msgstr "Kettõzött ügyfél név"
-
# "Customer added"
-#: ../../../../ajax/ajax_appMgmtSave.php:339
+#: ../../../../ajax/ajax_appMgmtSave.php:357
msgid "Cliente creado"
msgstr "Ügyfél hozzáadva"
# "Customer updated"
-#: ../../../../ajax/ajax_appMgmtSave.php:345
+#: ../../../../ajax/ajax_appMgmtSave.php:372
msgid "Cliente actualizado"
msgstr "Ügyfél frissítve"
-# "Error on updating customer"
-#: ../../../../ajax/ajax_appMgmtSave.php:348
-msgid "Error al actualizar el cliente"
-msgstr "Hiba az ügyfél frissítése közben"
-
-# "Customer in use by:"
-#: ../../../../ajax/ajax_appMgmtSave.php:358
-msgid "Cliente en uso por:"
-msgstr "Az ügyfelet a következõ használja:"
-
# "Customer deleted"
-#: ../../../../ajax/ajax_appMgmtSave.php:362
+#: ../../../../ajax/ajax_appMgmtSave.php:382
msgid "Cliente eliminado"
msgstr "Ügyfél törölve"
-# "Error on customer deletion"
-#: ../../../../ajax/ajax_appMgmtSave.php:365
-msgid "Error al eliminar el cliente"
-msgstr "Hiba az ügyfél törlése közben"
-
# "Category name needed"
-#: ../../../../ajax/ajax_appMgmtSave.php:378
+#: ../../../../ajax/ajax_appMgmtSave.php:396
msgid "Es necesario un nombre de categoría"
msgstr "Kategória név szükséges"
-# "Category name duplicated"
-#: ../../../../ajax/ajax_appMgmtSave.php:385
-msgid "Nombre de categoría duplicado"
-msgstr "Kategória neve duplázva"
-
# "Category added"
-#: ../../../../ajax/ajax_appMgmtSave.php:390
+#: ../../../../ajax/ajax_appMgmtSave.php:416
msgid "Categoría creada"
msgstr "Kategória hozzáadva"
-# "Error on creating category"
-#: ../../../../ajax/ajax_appMgmtSave.php:392
-msgid "Error al crear la categoría"
-msgstr "Hiba a kategória létrehozása közben"
-
# "Category updated"
-#: ../../../../ajax/ajax_appMgmtSave.php:396
+#: ../../../../ajax/ajax_appMgmtSave.php:431
msgid "Categoría actualizada"
msgstr "Kategória frissítve"
-# "Error on updating category"
-#: ../../../../ajax/ajax_appMgmtSave.php:399
-msgid "Error al actualizar la categoría"
-msgstr "Hiba a kategória frissítése közben"
-
-# "Category in use by:"
-#: ../../../../ajax/ajax_appMgmtSave.php:407
-msgid "Categoría en uso por:"
-msgstr "A kategóriát a következõ használja:"
-
# "Category deleted"
-#: ../../../../ajax/ajax_appMgmtSave.php:411
+#: ../../../../ajax/ajax_appMgmtSave.php:442
msgid "Categoría eliminada"
msgstr "Kategória törölve"
-# "Error on category deletion"
-#: ../../../../ajax/ajax_appMgmtSave.php:414
-msgid "Error al eliminar la categoría"
-msgstr "Hiba a kategória törlése közben"
+# "User/Pass not entered"
+#: ../../../../ajax/ajax_appMgmtSave.php:458
+#, fuzzy
+msgid "Usuario o acción no indicado"
+msgstr "Felhasználó/jelszó nem lett kitöltve"
+
+# "Account Activation"
+#: ../../../../ajax/ajax_appMgmtSave.php:468
+#, fuzzy
+msgid "Autorización creada"
+msgstr "Fiók hozzáadva"
+
+# "Configuration updated"
+#: ../../../../ajax/ajax_appMgmtSave.php:476
+#, fuzzy
+msgid "Autorización actualizada"
+msgstr "Fiók frissítve"
+
+# "Account deleted"
+#: ../../../../ajax/ajax_appMgmtSave.php:486
+#, fuzzy
+msgid "Autorización eliminada"
+msgstr "Fiók törölve"
+
+# "Duplicated group name"
+#: ../../../../ajax/ajax_appMgmtSave.php:503
+#, fuzzy
+msgid "Nombre del campo no indicado"
+msgstr "Ügyfél név"
+
+# "File type not allowed"
+#: ../../../../ajax/ajax_appMgmtSave.php:505
+#, fuzzy
+msgid "Tipo del campo no indicado"
+msgstr "Fájltípus nem engedélyezett"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:507
+msgid "Módulo del campo no indicado"
+msgstr ""
+
+# "Group added"
+#: ../../../../ajax/ajax_appMgmtSave.php:521
+#, fuzzy
+msgid "Campo creado"
+msgstr "Felhasználó hozzáadva"
+
+# "Group updated"
+#: ../../../../ajax/ajax_appMgmtSave.php:530
+#, fuzzy
+msgid "Campo actualizado"
+msgstr "Frissítve"
+
+# "Group deleted"
+#: ../../../../ajax/ajax_appMgmtSave.php:540
+#, fuzzy
+msgid "Campo eliminado"
+msgstr "Felhasználó törölve"
+
+# "Make Backup"
+#: ../../../../ajax/ajax_backup.php:52 ../../../../ajax/ajax_backup.php:57
+#: ../../../../inc/themes/classic/backup.inc:54
+msgid "Realizar Backup"
+msgstr "Archívum készítés"
# "Error while doing backup"
-#: ../../../../ajax/ajax_backup.php:49
+#: ../../../../ajax/ajax_backup.php:52 ../../../../ajax/ajax_backup.php:54
msgid "Error al realizar el backup"
msgstr "Hiba Archiválás közben"
# "Please, check the event log for more details"
-#: ../../../../ajax/ajax_backup.php:49 ../../../../ajax/ajax_checkLdap.php:54
-#: ../../../../inc/import.class.php:90 ../../../../inc/migrate.class.php:118
+#: ../../../../ajax/ajax_backup.php:54 ../../../../ajax/ajax_backup.php:76
+#: ../../../../ajax/ajax_checkLdap.php:57 ../../../../inc/Import.class.php:128
+#: ../../../../inc/Migrate.class.php:93
msgid "Revise el registro de eventos para más detalles"
msgstr "Részletes leírást az esemény naplóban olvashat"
-# "Make Backup"
-#: ../../../../ajax/ajax_backup.php:52 ../../../../inc/tpl/backup.php:82
-msgid "Realizar Backup"
-msgstr "Archívum készítés"
-
# Application and database backup successfully done
-#: ../../../../ajax/ajax_backup.php:53
+#: ../../../../ajax/ajax_backup.php:57
#, fuzzy
msgid "Copia de la aplicación y base de datos realizada correctamente"
msgstr "Application and database backup successfully done"
# "Backup process finished"
-#: ../../../../ajax/ajax_backup.php:58
+#: ../../../../ajax/ajax_backup.php:59
msgid "Proceso de backup finalizado"
msgstr "Archiválás kész"
+# "Query error"
+#: ../../../../ajax/ajax_backup.php:66
+#: ../../../../ajax/ajax_configSave.php:244
+#: ../../../../ajax/ajax_doLogin.php:53 ../../../../ajax/ajax_import.php:56
+#, fuzzy
+msgid "Error en clave RSA"
+msgstr "Lekérdezési hiba"
+
+# "Enable debug"
+#: ../../../../ajax/ajax_backup.php:74 ../../../../ajax/ajax_backup.php:79
+#, fuzzy
+msgid "Realizar Exportación"
+msgstr "Archívum készítés"
+
+# "Error on creating accounts files"
+#: ../../../../ajax/ajax_backup.php:74
+#, fuzzy
+msgid "Error al realizar la exportación de cuentas"
+msgstr "Hiba a fiók fájlok létrehozása közben"
+
+# "Error while doing backup"
+#: ../../../../ajax/ajax_backup.php:76
+#, fuzzy
+msgid "Error al realizar la exportación"
+msgstr "Hiba Archiválás közben"
+
+# "Application successfully updated"
+#: ../../../../ajax/ajax_backup.php:79
+#, fuzzy
+msgid "Exportación de cuentas realizada correctamente"
+msgstr "A beállítások elmentve"
+
+# "Backup process finished"
+#: ../../../../ajax/ajax_backup.php:81
+#, fuzzy
+msgid "Proceso de exportación finalizado"
+msgstr "Archiválás kész"
+
# "LDAP parameters are not set"
-#: ../../../../ajax/ajax_checkLdap.php:48 ../../../../inc/ldap.class.php:246
+#: ../../../../ajax/ajax_checkLdap.php:51 ../../../../inc/Ldap.class.php:265
msgid "Los parámetros de LDAP no están configurados"
msgstr "LDAP paraméterek nem lettek elmentve"
# "LDAP connection error"
-#: ../../../../ajax/ajax_checkLdap.php:54
+#: ../../../../ajax/ajax_checkLdap.php:57
msgid "Error de conexión a LDAP"
msgstr "LDAP kapcsolódási hiba"
# "LDAP connection OK"
-#: ../../../../ajax/ajax_checkLdap.php:56
+#: ../../../../ajax/ajax_checkLdap.php:59
msgid "Conexión a LDAP correcta"
msgstr "LDAP kapcsolat"
# "Objects found"
-#: ../../../../ajax/ajax_checkLdap.php:56
+#: ../../../../ajax/ajax_checkLdap.php:59
msgid "Objetos encontrados"
msgstr "Objektum találatok"
-# "Download new version"
-#: ../../../../ajax/ajax_checkUpds.php:41
-msgid "Descargar nueva versión"
-msgstr "Új verzió letöltése"
-
-# "Updated"
-#: ../../../../ajax/ajax_checkUpds.php:44
-msgid "Actualizado"
-msgstr "Frissítve"
-
-# "Missing Wiki parameters"
-#: ../../../../ajax/ajax_configSave.php:96
-msgid "Faltan parámetros de Wiki"
-msgstr "Hiányzó Wiki paraméter"
-
-# "Missing LDAP parameters"
-#: ../../../../ajax/ajax_configSave.php:107
-msgid "Faltan parámetros de LDAP"
-msgstr "Hiányzó LDAP paraméter"
-
-# "Missing Mail parameters"
-#: ../../../../ajax/ajax_configSave.php:123
-msgid "Faltan parámetros de Correo"
-msgstr "Hiányzó mail paraméter"
-
-# "Maximum file upload size in 16MB"
-#: ../../../../ajax/ajax_configSave.php:144
-msgid "El tamaño máximo de archivo es de 16MB"
-msgstr "Maximálisan feltölthetõ fájl mérete 16MB"
-
# "Edit Configuration"
-#: ../../../../ajax/ajax_configSave.php:161
+#: ../../../../ajax/ajax_configSave.php:55
msgid "Modificar Configuración"
msgstr "Konfiguráció szerkesztése"
+# "Maximum file upload size in 16MB"
+#: ../../../../ajax/ajax_configSave.php:100
+#, fuzzy
+msgid "El tamaño máximo por archivo es de 16MB"
+msgstr "Maximálisan feltölthetõ fájl mérete 16MB"
+
+# "Missing Mail parameters"
+#: ../../../../ajax/ajax_configSave.php:113
+#, fuzzy
+msgid "Faltan parámetros de Proxy"
+msgstr "Hiányzó Wiki paraméter"
+
+# "General"
+#: ../../../../ajax/ajax_configSave.php:124
+#: ../../../../web/ConfigC.class.php:126
+#: ../../../../inc/themes/classic/profiles.inc:61
+#: ../../../../inc/themes/material-blue/profiles.inc:72
+msgid "General"
+msgstr "Általános"
+
+# "Missing Wiki parameters"
+#: ../../../../ajax/ajax_configSave.php:134
+msgid "Faltan parámetros de Wiki"
+msgstr "Hiányzó Wiki paraméter"
+
+# "Wiki"
+#: ../../../../ajax/ajax_configSave.php:144
+#: ../../../../web/ConfigC.class.php:261
+#: ../../../../inc/themes/classic/wiki.inc:4
+#: ../../../../inc/themes/material-blue/wiki.inc:4
+msgid "Wiki"
+msgstr "Wiki"
+
+# "Missing LDAP parameters"
+#: ../../../../ajax/ajax_configSave.php:159
+msgid "Faltan parámetros de LDAP"
+msgstr "Hiányzó LDAP paraméter"
+
+# "LDAP"
+#: ../../../../ajax/ajax_configSave.php:174
+#: ../../../../web/ConfigC.class.php:293
+#: ../../../../inc/themes/classic/ldap.inc:4
+#: ../../../../inc/themes/material-blue/ldap.inc:4
+msgid "LDAP"
+msgstr "LDAP"
+
+# "Missing Mail parameters"
+#: ../../../../ajax/ajax_configSave.php:189
+msgid "Faltan parámetros de Correo"
+msgstr "Hiányzó mail paraméter"
+
+# "Mail"
+#: ../../../../ajax/ajax_configSave.php:209
+#: ../../../../web/ConfigC.class.php:323
+#: ../../../../inc/themes/classic/mail.inc:4
+#: ../../../../inc/themes/material-blue/mail.inc:4
+msgid "Correo"
+msgstr "Mail"
+
# "Configuration updated"
-#: ../../../../ajax/ajax_configSave.php:169
+#: ../../../../ajax/ajax_configSave.php:221
msgid "Configuración actualizada"
msgstr "Beállítások frissítve"
# "Master Password updated"
-#: ../../../../ajax/ajax_configSave.php:178
-#: ../../../../ajax/ajax_configSave.php:224
-#: ../../../../ajax/ajax_viewpass.php:68 ../../../../ajax/ajax_viewpass.php:70
-#: ../../../../inc/html.class.php:427
+#: ../../../../ajax/ajax_configSave.php:230
+#: ../../../../ajax/ajax_configSave.php:282
+#: ../../../../ajax/ajax_viewpass.php:60
+#: ../../../../inc/Controller.class.php:169
msgid "Clave maestra actualizada"
msgstr "A mester jelszó frissítve"
# "Restart session to update"
-#: ../../../../ajax/ajax_configSave.php:178
-#: ../../../../ajax/ajax_viewpass.php:68 ../../../../ajax/ajax_viewpass.php:70
-#: ../../../../inc/html.class.php:427
+#: ../../../../ajax/ajax_configSave.php:230
+#: ../../../../ajax/ajax_viewpass.php:60
+#: ../../../../inc/Controller.class.php:169
msgid "Reinicie la sesión para cambiarla"
msgstr "Indítsa újra a munkamenetot a frissítéshez"
# "Master Password needed"
-#: ../../../../ajax/ajax_configSave.php:182
+#: ../../../../ajax/ajax_configSave.php:232
msgid "Clave maestra no indicada"
msgstr "Mester jelszó szükséges"
# "Password update must be confirmed"
-#: ../../../../ajax/ajax_configSave.php:186
+#: ../../../../ajax/ajax_configSave.php:234
msgid "Se ha de confirmar el cambio de clave"
msgstr "A jelszó frissítéshez megerõsítés szükséges"
# "Password are the same"
-#: ../../../../ajax/ajax_configSave.php:190
+#: ../../../../ajax/ajax_configSave.php:248
msgid "Las claves son idénticas"
msgstr "A jelszó megegyezik"
# "Master passwords mismatch"
-#: ../../../../ajax/ajax_configSave.php:194
+#: ../../../../ajax/ajax_configSave.php:250
msgid "Las claves maestras no coinciden"
msgstr "A mester jelszó nem egyezik"
# "Current master password mismatch"
-#: ../../../../ajax/ajax_configSave.php:198
+#: ../../../../ajax/ajax_configSave.php:252
msgid "La clave maestra actual no coincide"
msgstr "A jelenlegi mester jelszó nem egyezik"
# "Error on updating accounts' passwords"
-#: ../../../../ajax/ajax_configSave.php:207
+#: ../../../../ajax/ajax_configSave.php:261
msgid "Errores al actualizar las claves de las cuentas"
msgstr "Hiba a fiókok jelszavainak frissítése közben"
+# "Error on updating accounts' passwords"
+#: ../../../../ajax/ajax_configSave.php:267
+#, fuzzy
+msgid "Errores al actualizar las claves de las cuentas del histórico"
+msgstr "Hiba a fiókok jelszavainak frissítése közben"
+
# "Update Master Password"
-#: ../../../../ajax/ajax_configSave.php:221
-#: ../../../../inc/account.class.php:749
+#: ../../../../ajax/ajax_configSave.php:280
+#: ../../../../inc/Account.class.php:497
msgid "Actualizar Clave Maestra"
msgstr "Frissítse a mester jelszót"
# "Error on saving master password's hash"
-#: ../../../../ajax/ajax_configSave.php:227
+#: ../../../../ajax/ajax_configSave.php:284
msgid "Error al guardar el hash de la clave maestra"
msgstr "Hiba a mester jelszó hash-ének elmentése közben"
-# Generate Temporary Password
-#: ../../../../ajax/ajax_configSave.php:232
+# "Generate random password"
+#: ../../../../ajax/ajax_configSave.php:292
+#, fuzzy
msgid "Generar Clave Temporal"
msgstr "Generate Temporary Password"
# "Password"
-#: ../../../../ajax/ajax_configSave.php:233
-#: ../../../../ajax/ajax_usrpass.php:53 ../../../../ajax/ajax_usrpass.php:56
-#: ../../../../ajax/ajax_viewpass.php:98 ../../../../inc/tpl/accounts.php:251
-#: ../../../../inc/tpl/config.php:462 ../../../../inc/tpl/editpass.php:57
-#: ../../../../inc/tpl/install.php:102 ../../../../inc/tpl/install.php:103
-#: ../../../../inc/tpl/login.php:37 ../../../../inc/tpl/login.php:45
-#: ../../../../inc/tpl/passreset.php:62 ../../../../inc/tpl/users.php:135
+#: ../../../../ajax/ajax_configSave.php:292
+#: ../../../../inc/themes/classic/account.inc:83
+#: ../../../../inc/themes/classic/editpass.inc:25
+#: ../../../../inc/themes/classic/install.inc:38
+#: ../../../../inc/themes/classic/install.inc:39
+#: ../../../../inc/themes/classic/login.inc:10
+#: ../../../../inc/themes/classic/login.inc:22
+#: ../../../../inc/themes/classic/mail.inc:55
+#: ../../../../inc/themes/classic/passreset.inc:29
+#: ../../../../inc/themes/classic/users.inc:75
+#: ../../../../inc/themes/classic/userspass.inc:8
+#: ../../../../inc/themes/classic/userspass.inc:11
+#: ../../../../inc/themes/material-blue/account.inc:95
+#: ../../../../inc/themes/material-blue/account.inc:100
+#: ../../../../inc/themes/material-blue/config.inc:358
+#: ../../../../inc/themes/material-blue/editpass.inc:26
+#: ../../../../inc/themes/material-blue/editpass.inc:31
+#: ../../../../inc/themes/material-blue/editpass.inc:41
+#: ../../../../inc/themes/material-blue/install.inc:44
+#: ../../../../inc/themes/material-blue/ldap.inc:105
+#: ../../../../inc/themes/material-blue/login.inc:17
+#: ../../../../inc/themes/material-blue/login.inc:40
+#: ../../../../inc/themes/material-blue/mail.inc:73
+#: ../../../../inc/themes/material-blue/mail.inc:80
+#: ../../../../inc/themes/material-blue/passreset.inc:31
+#: ../../../../inc/themes/material-blue/users.inc:89
+#: ../../../../inc/themes/material-blue/users.inc:96
+#: ../../../../inc/themes/material-blue/userspass.inc:8
+#: ../../../../inc/themes/material-blue/userspass.inc:13
msgid "Clave"
msgstr "Jelszó"
-# Temporary Password Generated
-#: ../../../../ajax/ajax_configSave.php:236
+# "Generated Password"
+#: ../../../../ajax/ajax_configSave.php:294
#, fuzzy
msgid "Clave Temporal Generada"
-msgstr "Temporary Password Generated"
+msgstr "Generált Jelszó"
# "User/Pass not entered"
-#: ../../../../ajax/ajax_doLogin.php:41
+#: ../../../../ajax/ajax_doLogin.php:46
msgid "Usuario/Clave no introducidos"
msgstr "Felhasználó/jelszó nem lett kitöltve"
# "Session start (LDAP)"
-#: ../../../../ajax/ajax_doLogin.php:54 ../../../../ajax/ajax_doLogin.php:75
-#: ../../../../ajax/ajax_doLogin.php:82 ../../../../ajax/ajax_doLogin.php:89
-msgid "Inicio sesión (LDAP)"
+#: ../../../../ajax/ajax_doLogin.php:65
+#, fuzzy
+msgid "Inicio sesión"
msgstr "munkamenet elindult (LDAP)"
+# "Server"
+#: ../../../../ajax/ajax_doLogin.php:70
+#, fuzzy
+msgid "Servidor Login"
+msgstr "Belépés"
+
# "Error on saving LDAP user data"
-#: ../../../../ajax/ajax_doLogin.php:60
+#: ../../../../ajax/ajax_doLogin.php:76
msgid "Error al guardar los datos de LDAP"
msgstr "Hiba az LDAP felhasználók adatainak elmentése közben"
# "Internal error"
-#: ../../../../ajax/ajax_doLogin.php:63 ../../../../ajax/ajax_doLogin.php:71
-#: ../../../../ajax/ajax_doLogin.php:122 ../../../../inc/import.class.php:240
-#: ../../../../inc/import.class.php:247 ../../../../inc/import.class.php:266
+#: ../../../../ajax/ajax_doLogin.php:79 ../../../../ajax/ajax_doLogin.php:87
+#: ../../../../ajax/ajax_doLogin.php:139 ../../../../ajax/ajax_doLogin.php:185
+#: ../../../../inc/ApiTokens.class.php:140
+#: ../../../../inc/ApiTokens.class.php:186
+#: ../../../../inc/ApiTokens.class.php:217
+#: ../../../../inc/ApiTokens.class.php:243
+#: ../../../../inc/ApiTokens.class.php:262
+#: ../../../../inc/ApiTokens.class.php:304
+#: ../../../../inc/ApiTokens.class.php:328 ../../../../inc/Crypt.class.php:235
+#: ../../../../inc/Crypt.class.php:246
+#: ../../../../inc/XmlImportBase.class.php:74
msgid "Error interno"
msgstr "Belsõ hiba"
# "Error on updating user password in BD"
-#: ../../../../ajax/ajax_doLogin.php:68
+#: ../../../../ajax/ajax_doLogin.php:84
msgid "Error al actualizar la clave del usuario en la BBDD"
msgstr "Adatbázis Hiba a felhasználói jelszó frissítése közben"
# "Incorrect login"
-#: ../../../../ajax/ajax_doLogin.php:76 ../../../../ajax/ajax_doLogin.php:100
+#: ../../../../ajax/ajax_doLogin.php:92 ../../../../ajax/ajax_doLogin.php:117
msgid "Login incorrecto"
msgstr "Hibás felhasználónév vagy jelszó"
# "User"
-#: ../../../../ajax/ajax_doLogin.php:77 ../../../../ajax/ajax_doLogin.php:84
-#: ../../../../ajax/ajax_doLogin.php:91 ../../../../ajax/ajax_doLogin.php:101
-#: ../../../../ajax/ajax_doLogin.php:111 ../../../../ajax/ajax_doLogin.php:156
-#: ../../../../ajax/ajax_search.php:131 ../../../../ajax/ajax_search.php:250
-#: ../../../../ajax/ajax_viewpass.php:94 ../../../../inc/init.php:544
-#: ../../../../inc/tpl/accounts.php:234 ../../../../inc/tpl/config.php:453
-#: ../../../../inc/tpl/editpass.php:53 ../../../../inc/tpl/eventlog.php:62
-#: ../../../../inc/tpl/install.php:92 ../../../../inc/tpl/install.php:93
-#: ../../../../inc/tpl/login.php:35 ../../../../inc/tpl/login.php:44
-#: ../../../../inc/tpl/passreset.php:51 ../../../../inc/tpl/request.php:52
-#: ../../../../inc/users.class.php:817 ../../../../inc/users.class.php:859
-#: ../../../../res/test.php:64
+#: ../../../../ajax/ajax_doLogin.php:93 ../../../../ajax/ajax_doLogin.php:100
+#: ../../../../ajax/ajax_doLogin.php:107 ../../../../ajax/ajax_doLogin.php:118
+#: ../../../../ajax/ajax_doLogin.php:128 ../../../../ajax/ajax_doLogin.php:180
+#: ../../../../inc/ApiTokens.class.php:190
+#: ../../../../inc/ApiTokens.class.php:308 ../../../../inc/Auth.class.php:108
+#: ../../../../inc/Init.class.php:517 ../../../../inc/UserBase.class.php:382
+#: ../../../../inc/UserBase.class.php:526 ../../../../res/test.php:64
+#: ../../../../web/SearchC.class.php:289
+#: ../../../../web/UsersMgmtC.class.php:392
+#: ../../../../inc/themes/classic/account.inc:70
+#: ../../../../inc/themes/classic/editpass.inc:21
+#: ../../../../inc/themes/classic/eventlog.inc:25
+#: ../../../../inc/themes/classic/info.inc:39
+#: ../../../../inc/themes/classic/install.inc:27
+#: ../../../../inc/themes/classic/install.inc:28
+#: ../../../../inc/themes/classic/login.inc:7
+#: ../../../../inc/themes/classic/login.inc:20
+#: ../../../../inc/themes/classic/mail.inc:47
+#: ../../../../inc/themes/classic/passreset.inc:17
+#: ../../../../inc/themes/classic/request.inc:17
+#: ../../../../inc/themes/classic/search.inc:50
+#: ../../../../inc/themes/classic/tokens.inc:8
+#: ../../../../inc/themes/material-blue/account.inc:80
+#: ../../../../inc/themes/material-blue/config.inc:344
+#: ../../../../inc/themes/material-blue/editpass.inc:22
+#: ../../../../inc/themes/material-blue/eventlog.inc:24
+#: ../../../../inc/themes/material-blue/info.inc:39
+#: ../../../../inc/themes/material-blue/login.inc:10
+#: ../../../../inc/themes/material-blue/login.inc:33
+#: ../../../../inc/themes/material-blue/mail.inc:61
+#: ../../../../inc/themes/material-blue/mail.inc:67
+#: ../../../../inc/themes/material-blue/passreset.inc:17
+#: ../../../../inc/themes/material-blue/request.inc:20
+#: ../../../../inc/themes/material-blue/search.inc:55
+#: ../../../../inc/themes/material-blue/tokens.inc:8
msgid "Usuario"
msgstr "Felhasználó"
# "Wrong user/pass"
-#: ../../../../ajax/ajax_doLogin.php:80 ../../../../ajax/ajax_doLogin.php:94
-#: ../../../../ajax/ajax_doLogin.php:104
+#: ../../../../ajax/ajax_doLogin.php:96 ../../../../ajax/ajax_doLogin.php:110
+#: ../../../../ajax/ajax_doLogin.php:121
msgid "Usuario/Clave incorrectos"
msgstr "Hibás felhasználó/jelszó"
# Account Expired
-#: ../../../../ajax/ajax_doLogin.php:83 ../../../../ajax/ajax_doLogin.php:87
+#: ../../../../ajax/ajax_doLogin.php:99 ../../../../ajax/ajax_doLogin.php:103
#, fuzzy
msgid "Cuenta expirada"
-msgstr "Account expired"
+msgstr "Fiók"
# "The user have no associated groups"
-#: ../../../../ajax/ajax_doLogin.php:90
+#: ../../../../ajax/ajax_doLogin.php:106
msgid "El usuario no tiene grupos asociados"
msgstr "a felhasználó nincs csoporthoz társítva"
-# "Session start (MySQL)"
-#: ../../../../ajax/ajax_doLogin.php:96
-msgid "Inicio sesión (MySQL)"
-msgstr "munkamenet elindult (MySQL)"
-
# "User disabled"
-#: ../../../../ajax/ajax_doLogin.php:110 ../../../../ajax/ajax_doLogin.php:114
+#: ../../../../ajax/ajax_doLogin.php:127 ../../../../ajax/ajax_doLogin.php:131
msgid "Usuario deshabilitado"
msgstr "Felhasználó letiltva"
# "Error on retrieving user data from DB"
-#: ../../../../ajax/ajax_doLogin.php:119
+#: ../../../../ajax/ajax_doLogin.php:136
msgid "Error al obtener los datos del usuario de la BBDD"
msgstr "Hiba a felhasználói adatok adatbázisból való betöltése közben"
# "The master password not saved or is incorrect"
-#: ../../../../ajax/ajax_doLogin.php:127
+#: ../../../../ajax/ajax_doLogin.php:146
msgid "La clave maestra no ha sido guardada o es incorrecta"
msgstr "A mester jelszó nem lett elmentve, vagy helytelen"
# "Invalid Master Password"
-#: ../../../../ajax/ajax_doLogin.php:134 ../../../../ajax/ajax_doLogin.php:137
+#: ../../../../ajax/ajax_doLogin.php:155 ../../../../ajax/ajax_doLogin.php:158
msgid "Clave maestra incorrecta"
msgstr "Érvénytelen mester jelszó"
+# "Profile"
+#: ../../../../ajax/ajax_doLogin.php:181
+#: ../../../../inc/ProfileBase.class.php:512
+#: ../../../../inc/ProfileBase.class.php:550
+#: ../../../../inc/ProfileBase.class.php:593
+#: ../../../../web/UsersMgmtC.class.php:89
+#: ../../../../inc/themes/classic/users.inc:37
+#: ../../../../inc/themes/material-blue/users.inc:43
+msgid "Perfil"
+msgstr "Profil"
+
# "Group"
-#: ../../../../ajax/ajax_doLogin.php:158
-#: ../../../../ajax/ajax_getContent.php:115
-#: ../../../../inc/groups.class.php:155 ../../../../inc/groups.class.php:184
-#: ../../../../inc/groups.class.php:211 ../../../../inc/tpl/config.php:352
-#: ../../../../inc/tpl/users.php:109
+#: ../../../../ajax/ajax_doLogin.php:182 ../../../../inc/Groups.class.php:158
+#: ../../../../inc/Groups.class.php:259 ../../../../inc/Groups.class.php:375
+#: ../../../../web/UsersMgmtC.class.php:90
+#: ../../../../inc/themes/classic/ldap.inc:116
+#: ../../../../inc/themes/classic/users.inc:49
+#: ../../../../inc/themes/material-blue/ldap.inc:139
+#: ../../../../inc/themes/material-blue/ldap.inc:164
+#: ../../../../inc/themes/material-blue/users.inc:57
msgid "Grupo"
msgstr "Csoport"
-# "Event log cleared"
-#: ../../../../ajax/ajax_eventlog.php:43
-msgid "Registro de eventos vaciado"
-msgstr "Esemény napló törölve"
-
-# "Error on clearing event log"
-#: ../../../../ajax/ajax_eventlog.php:45
-msgid "Error al vaciar el registro de eventos"
-msgstr "Hiba az esemény napló törlése közben"
-
# "Files management disabled"
-#: ../../../../ajax/ajax_files.php:44 ../../../../ajax/ajax_getFiles.php:36
+#: ../../../../ajax/ajax_files.php:45 ../../../../ajax/ajax_getFiles.php:39
msgid "Gestión de archivos deshabilitada"
msgstr "Fálj menedzsment inaktív"
+# "Upload File"
+#: ../../../../ajax/ajax_files.php:59 ../../../../inc/Files.class.php:63
+msgid "Subir Archivo"
+msgstr "Fájl feltöltés"
+
# "There are no allowed extensions"
-#: ../../../../ajax/ajax_files.php:63
+#: ../../../../ajax/ajax_files.php:68
msgid "No hay extensiones permitidas"
msgstr "Tiltott kiterjesztések"
# "File type not allowed"
-#: ../../../../ajax/ajax_files.php:71 ../../../../inc/import.class.php:113
+#: ../../../../ajax/ajax_files.php:79 ../../../../inc/FileImport.class.php:115
msgid "Tipo de archivo no soportado"
msgstr "Fájltípus nem engedélyezett"
# "Invalid file"
-#: ../../../../ajax/ajax_files.php:74
+#: ../../../../ajax/ajax_files.php:85
msgid "Archivo inválido"
msgstr "Érvénytelen fájl"
# "Internal error while reading file"
-#: ../../../../ajax/ajax_files.php:87 ../../../../ajax/ajax_files.php:99
-#: ../../../../ajax/ajax_files.php:103 ../../../../inc/import.class.php:124
-#: ../../../../inc/import.class.php:132
+#: ../../../../ajax/ajax_files.php:101 ../../../../ajax/ajax_files.php:118
+#: ../../../../inc/FileImport.class.php:131
+#: ../../../../inc/FileImport.class.php:149
+#: ../../../../inc/FileImport.class.php:167
msgid "Error interno al leer el archivo"
msgstr "Belsõ hiba a fájl olvasása közben"
# "File is bigger than"
-#: ../../../../ajax/ajax_files.php:91
+#: ../../../../ajax/ajax_files.php:108
msgid "El archivo es mayor de "
msgstr "A fájl nagyobb, mint"
-# "Upload File"
-#: ../../../../ajax/ajax_files.php:98 ../../../../inc/files.class.php:52
-msgid "Subir Archivo"
-msgstr "Fájl feltöltés"
-
# "File saved"
-#: ../../../../ajax/ajax_files.php:107
+#: ../../../../ajax/ajax_files.php:125
msgid "Archivo guardado"
msgstr "Fájl elmentve"
# "Error on file save"
-#: ../../../../ajax/ajax_files.php:109
+#: ../../../../ajax/ajax_files.php:130
msgid "No se pudo guardar el archivo"
msgstr "Hiba a fájl mentése közben"
# "Invalid file ID"
-#: ../../../../ajax/ajax_files.php:116 ../../../../ajax/ajax_files.php:174
+#: ../../../../ajax/ajax_files.php:140 ../../../../ajax/ajax_files.php:199
msgid "No es un ID de archivo válido"
msgstr "Helytelen fájl ID"
# "File doesn't exist"
-#: ../../../../ajax/ajax_files.php:124 ../../../../inc/files.class.php:143
+#: ../../../../ajax/ajax_files.php:148
msgid "El archivo no existe"
msgstr "A fájl nem létezik"
# "Download File"
-#: ../../../../ajax/ajax_files.php:133 ../../../../ajax/ajax_getFiles.php:67
+#: ../../../../ajax/ajax_files.php:157
+#: ../../../../inc/themes/classic/files.inc:19
+#: ../../../../inc/themes/material-blue/files.inc:19
msgid "Descargar Archivo"
msgstr "Fájl letöltés"
# "ID"
-#: ../../../../ajax/ajax_files.php:134 ../../../../ajax/ajax_viewpass.php:81
-#: ../../../../inc/files.class.php:109 ../../../../inc/tpl/eventlog.php:53
+#: ../../../../ajax/ajax_files.php:158 ../../../../ajax/ajax_viewpass.php:69
+#: ../../../../inc/Files.class.php:112
+#: ../../../../inc/themes/classic/eventlog.inc:16
+#: ../../../../inc/themes/material-blue/eventlog.inc:15
msgid "ID"
msgstr "ID"
# "File"
-#: ../../../../ajax/ajax_files.php:135 ../../../../inc/files.class.php:54
-#: ../../../../inc/files.class.php:110 ../../../../inc/tpl/migrate.php:110
+#: ../../../../ajax/ajax_files.php:159 ../../../../inc/Files.class.php:65
+#: ../../../../inc/Files.class.php:113
+#: ../../../../inc/themes/classic/import.inc:155
+#: ../../../../inc/themes/material-blue/import.inc:83
msgid "Archivo"
msgstr "Fájl"
# "Type"
-#: ../../../../ajax/ajax_files.php:136 ../../../../inc/files.class.php:55
-#: ../../../../inc/files.class.php:111
+#: ../../../../ajax/ajax_files.php:160 ../../../../inc/Files.class.php:66
+#: ../../../../inc/Files.class.php:114
+#: ../../../../web/AccountsMgmtC.class.php:266
+#: ../../../../inc/themes/classic/customfields.inc:16
+#: ../../../../inc/themes/material-blue/customfields.inc:19
msgid "Tipo"
msgstr "Típus"
# "Size"
-#: ../../../../ajax/ajax_files.php:137 ../../../../inc/files.class.php:56
-#: ../../../../inc/files.class.php:112
+#: ../../../../ajax/ajax_files.php:161 ../../../../inc/Files.class.php:67
+#: ../../../../inc/Files.class.php:115
msgid "Tamaño"
msgstr "Méret"
# "File deleted"
-#: ../../../../ajax/ajax_files.php:178
+#: ../../../../ajax/ajax_files.php:203
msgid "Archivo eliminado"
msgstr "Fájl törölve"
# "Error on file deletion"
-#: ../../../../ajax/ajax_files.php:180
+#: ../../../../ajax/ajax_files.php:208
msgid "Error al eliminar el archivo"
msgstr "Hiba a fájlok törlése közben"
# "Incorrect parameters"
-#: ../../../../ajax/ajax_getContent.php:42
+#: ../../../../ajax/ajax_getContent.php:41
+#: ../../../../inc/ApiRequest.class.php:55
+#: ../../../../inc/CustomFieldDef.class.php:38
+#: ../../../../inc/CustomFields.class.php:48
msgid "Parámetros incorrectos"
msgstr "Helytelen paraméter"
-# "Users Management"
-#: ../../../../ajax/ajax_getContent.php:100 ../../../../inc/tpl/main.php:54
-msgid "Gestión de Usuarios"
-msgstr "Felhasználó Menedzsment"
-
-# "Groups Management"
-#: ../../../../ajax/ajax_getContent.php:101
-msgid "Gestión de Grupos"
-msgstr "Csoport Menedzsment"
-
-# "Profiles Management"
-#: ../../../../ajax/ajax_getContent.php:102
-msgid "Gestión de Perfiles"
-msgstr "Profil Menedzsment"
-
-# "Name"
-#: ../../../../ajax/ajax_getContent.php:112
-#: ../../../../ajax/ajax_getContent.php:158
-#: ../../../../ajax/ajax_getContent.php:190
-#: ../../../../ajax/ajax_getContent.php:243
-#: ../../../../ajax/ajax_getContent.php:275
-#: ../../../../ajax/ajax_search.php:125 ../../../../ajax/ajax_search.php:238
-#: ../../../../inc/tpl/accounts.php:173 ../../../../inc/tpl/categories.php:40
-#: ../../../../inc/tpl/customers.php:40 ../../../../inc/tpl/editpass.php:40
-#: ../../../../inc/tpl/groups.php:39 ../../../../inc/tpl/profiles.php:39
-#: ../../../../inc/tpl/request.php:38 ../../../../inc/tpl/users.php:66
-msgid "Nombre"
-msgstr "Név"
-
-# "Login"
-#: ../../../../ajax/ajax_getContent.php:113
-#: ../../../../ajax/ajax_passReset.php:74 ../../../../inc/tpl/users.php:83
-#: ../../../../inc/users.class.php:897 ../../../../inc/users.class.php:924
-msgid "Login"
-msgstr "Belépés"
-
-# "Properties"
-#: ../../../../ajax/ajax_getContent.php:116
-msgid "Propiedades"
-msgstr "Beállítások"
-
-# "Application Admin"
-#: ../../../../ajax/ajax_getContent.php:122 ../../../../inc/tpl/main.php:30
-msgid "Admin Aplicación"
-msgstr "Admin alkalmazás"
-
-# "Account Admin"
-#: ../../../../ajax/ajax_getContent.php:123
-msgid "Admin Cuentas"
-msgstr "Admin Fiók"
-
-# "LDAP User"
-#: ../../../../ajax/ajax_getContent.php:124 ../../../../inc/tpl/users.php:91
-msgid "Usuario de LDAP"
-msgstr "LDAP felhasználó"
-
-# "Disabled"
-#: ../../../../ajax/ajax_getContent.php:125 ../../../../inc/tpl/users.php:171
-msgid "Deshabilitado"
-msgstr "Inaktív"
-
-# "View user details"
-#: ../../../../ajax/ajax_getContent.php:136
-msgid "Ver Detalles de Usuario"
-msgstr "Felhasználó részletek"
-
-# "Delete User"
-#: ../../../../ajax/ajax_getContent.php:138
-#: ../../../../inc/users.class.php:923
-msgid "Eliminar Usuario"
-msgstr "felhasználó törlése"
-
-# "Change user password"
-#: ../../../../ajax/ajax_getContent.php:139
-msgid "Cambiar Clave de Usuario"
-msgstr "Változás felhasználói jelszó"
-
-# "Description"
-#: ../../../../ajax/ajax_getContent.php:158
-#: ../../../../ajax/ajax_getContent.php:243
-#: ../../../../ajax/ajax_getContent.php:275
-#: ../../../../ajax/ajax_sendRequest.php:62
-#: ../../../../inc/tpl/categories.php:48 ../../../../inc/tpl/customers.php:48
-#: ../../../../inc/tpl/eventlog.php:68 ../../../../inc/tpl/groups.php:46
-msgid "Descripción"
-msgstr "Leírás"
-
-# "Delete Group"
-#: ../../../../ajax/ajax_getContent.php:169
-#: ../../../../inc/groups.class.php:210
-msgid "Eliminar Grupo"
-msgstr "Csoport törlése"
-
-# "Categories management"
-#: ../../../../ajax/ajax_getContent.php:233
-msgid "Gestión de Categorías"
-msgstr "Kategória Menedzsment"
-
-# "Customers Management"
-#: ../../../../ajax/ajax_getContent.php:234
-msgid "Gestión de Clientes"
-msgstr "Ügyfél Menedzsment"
-
-# "Delete Category"
-#: ../../../../ajax/ajax_getContent.php:254
-#: ../../../../inc/category.class.php:135
-msgid "Eliminar Categoría"
-msgstr "Kategória törlése"
-
-# "Delete Customer"
-#: ../../../../ajax/ajax_getContent.php:286
-#: ../../../../inc/customer.class.php:131
-msgid "Eliminar Cliente"
-msgstr "Ügyfél törlése"
-
-# "Configuration"
-#: ../../../../ajax/ajax_getContent.php:319
-#: ../../../../inc/config.class.php:121 ../../../../inc/config.class.php:149
-#: ../../../../inc/tpl/main.php:56 ../../../../inc/tpl/profiles.php:71
-msgid "Configuración"
-msgstr "LDAP kapcsolat rendben"
-
-# "Master Password"
-#: ../../../../ajax/ajax_getContent.php:320
-#: ../../../../inc/tpl/install.php:112 ../../../../inc/tpl/install.php:117
-#: ../../../../inc/tpl/install.php:118 ../../../../inc/tpl/login.php:40
-#: ../../../../inc/tpl/login.php:48 ../../../../inc/tpl/profiles.php:76
-msgid "Clave Maestra"
-msgstr "Mester jelszó"
-
-# "Backup"
-#: ../../../../ajax/ajax_getContent.php:321
-msgid "Copia de Seguridad"
-msgstr "Archiválás"
-
-# "Import accounts from external sources"
-#: ../../../../ajax/ajax_getContent.php:322
-msgid "Importar cuentas desde fuentes externas"
-msgstr "Külsõ forrásból származó felhasználók importálása"
-
-# "Import Accounts"
-#: ../../../../ajax/ajax_getContent.php:322
-#: ../../../../inc/import.class.php:81 ../../../../inc/import.class.php:163
-#: ../../../../inc/migrate.class.php:402
-msgid "Importar Cuentas"
-msgstr "Fiókok importálása"
-
-# "Delete File"
-#: ../../../../ajax/ajax_getFiles.php:63 ../../../../inc/files.class.php:108
-msgid "Eliminar Archivo"
-msgstr "Fájl törlése"
-
-# "View File"
-#: ../../../../ajax/ajax_getFiles.php:70
-msgid "Ver Archivo"
-msgstr "Fájl megtekintése"
-
# "Confirm account import"
-#: ../../../../ajax/ajax_migrate.php:1
+#: ../../../../ajax/ajax_migrate.php:55
msgid "Confirmar la importación de cuentas"
msgstr "Fiók importálás megerõsítése"
# "Connection username needed"
-#: ../../../../ajax/ajax_migrate.php:1
+#: ../../../../ajax/ajax_migrate.php:57
msgid "Es necesario un usuario de conexión"
msgstr "Kapcsolati felhasználónév szükséges"
# "Connection password needed"
-#: ../../../../ajax/ajax_migrate.php:1
+#: ../../../../ajax/ajax_migrate.php:59
msgid "Es necesaria una clave de conexión"
msgstr "Kapcsolati jelszó szükséges"
# "Database name needed"
-#: ../../../../ajax/ajax_migrate.php:1
+#: ../../../../ajax/ajax_migrate.php:61
msgid "Es necesario el nombre de la BBDD"
msgstr "Adatbázis név szükséges"
# "Host name needed"
-#: ../../../../ajax/ajax_migrate.php:1
+#: ../../../../ajax/ajax_migrate.php:63
msgid "Es necesario un nombre de host"
msgstr "Host név szükséges"
# "Password Recovery"
-#: ../../../../ajax/ajax_passReset.php:44
+#: ../../../../ajax/ajax_passReset.php:47
+#: ../../../../ajax/ajax_passReset.php:50
msgid "Recuperación de Clave"
msgstr "Jelszó visszaállítás"
# "Requested for"
-#: ../../../../ajax/ajax_passReset.php:48
-#: ../../../../ajax/ajax_passReset.php:55
+#: ../../../../ajax/ajax_passReset.php:53
+#: ../../../../ajax/ajax_passReset.php:58
msgid "Solicitado para"
msgstr "Kért, hogy"
# "Request sent"
-#: ../../../../ajax/ajax_passReset.php:52
-#: ../../../../ajax/ajax_sendRequest.php:71
+#: ../../../../ajax/ajax_passReset.php:55
+#: ../../../../ajax/ajax_sendRequest.php:75
msgid "Solicitud enviada"
msgstr "Kérést elküldve"
# "You will receive an email to complete the request in short."
-#: ../../../../ajax/ajax_passReset.php:52
+#: ../../../../ajax/ajax_passReset.php:55
msgid "En breve recibirá un correo para completar la solicitud."
msgstr "A kérés befejezéséhez email értesítõt küldünk"
# "The request can't be done. Please contact with the administrator"
-#: ../../../../ajax/ajax_passReset.php:59
+#: ../../../../ajax/ajax_passReset.php:60
msgid "No se ha podido realizar la solicitud. Consulte con el administrador."
msgstr ""
"A kérést nem lehet befejezni. Kérem lépjen kapcsolatba a rendszergazdával"
# "Edit User Password"
-#: ../../../../ajax/ajax_passReset.php:73 ../../../../inc/users.class.php:896
+#: ../../../../ajax/ajax_passReset.php:72
+#: ../../../../inc/UserBase.class.php:568
+#: ../../../../inc/UserUtil.class.php:664
msgid "Modificar Clave Usuario"
msgstr "Felhasználó jelszavának szerkesztése"
+# "Login"
+#: ../../../../ajax/ajax_passReset.php:72
+#: ../../../../inc/UserBase.class.php:568
+#: ../../../../inc/UserBase.class.php:592
+#: ../../../../inc/UserUtil.class.php:664
+#: ../../../../web/UsersMgmtC.class.php:88
+#: ../../../../inc/themes/classic/users.inc:21
+#: ../../../../inc/themes/material-blue/users.inc:24
+msgid "Login"
+msgstr "Belépés"
+
# "The password is incorrect or not the same"
-#: ../../../../ajax/ajax_passReset.php:85
+#: ../../../../ajax/ajax_passReset.php:80
msgid "La clave es incorrecta o no coincide"
msgstr "A jelszó helytelen, vagy nem egyezik"
-# "No records found"
-#: ../../../../ajax/ajax_search.php:108 ../../../../inc/tpl/eventlog.php:42
-msgid "No se encontraron registros"
-msgstr "Nem találtam rekordokat"
-
-# "Sort by Customer"
-#: ../../../../ajax/ajax_search.php:122
-msgid "Ordenar por Cliente"
-msgstr "Rendezés Ügyfél szerint"
-
-# "Customer"
-#: ../../../../ajax/ajax_search.php:122 ../../../../ajax/ajax_search.php:233
-#: ../../../../ajax/ajax_sendRequest.php:61
-#: ../../../../inc/account.class.php:370 ../../../../inc/account.class.php:580
-#: ../../../../inc/account.class.php:603 ../../../../inc/account.class.php:879
-#: ../../../../inc/customer.class.php:59
-#: ../../../../inc/customer.class.php:106
-#: ../../../../inc/customer.class.php:132 ../../../../inc/tpl/accounts.php:189
-#: ../../../../inc/tpl/editpass.php:44 ../../../../inc/tpl/request.php:42
-msgid "Cliente"
-msgstr "Ügyfél"
-
-# "Sort by Name"
-#: ../../../../ajax/ajax_search.php:125
-msgid "Ordenar por Nombre"
-msgstr "Rendezés Név szerint"
-
-# "Sort by Category"
-#: ../../../../ajax/ajax_search.php:128
-msgid "Ordenar por Categoría"
-msgstr "Rendezés Kategória szerint"
-
-# "Category"
-#: ../../../../ajax/ajax_search.php:128 ../../../../ajax/ajax_search.php:243
-#: ../../../../inc/category.class.php:80
-#: ../../../../inc/category.class.php:136
-#: ../../../../inc/category.class.php:184 ../../../../inc/tpl/accounts.php:206
-msgid "Categoría"
-msgstr "Kategória"
-
-# "Sort by Username"
-#: ../../../../ajax/ajax_search.php:131
-msgid "Ordenar por Usuario"
-msgstr "Rendezés Felhasználónév szerint"
-
-# "Sort by URL / IP"
-#: ../../../../ajax/ajax_search.php:134
-msgid "Ordenar por URL / IP"
-msgstr "Rendezés URL / IP szerint"
-
-# "URL / IP"
-#: ../../../../ajax/ajax_search.php:134 ../../../../ajax/ajax_search.php:255
-#: ../../../../inc/tpl/accounts.php:218 ../../../../inc/tpl/editpass.php:48
-#: ../../../../inc/tpl/request.php:47
-msgid "URL / IP"
-msgstr "URL / IP"
-
-# "Search in Wiki"
-#: ../../../../ajax/ajax_search.php:173
-msgid "Buscar en Wiki"
-msgstr "Keresés a Wikiben"
-
-# "Account Details"
-#: ../../../../ajax/ajax_search.php:181 ../../../../ajax/ajax_search.php:289
-#: ../../../../inc/tpl/accounts.php:80 ../../../../inc/tpl/accounts.php:91
-msgid "Detalles de Cuenta"
-msgstr "Fiók adatok"
-
-# "Open link to"
-#: ../../../../ajax/ajax_search.php:199 ../../../../ajax/ajax_search.php:201
-msgid "Abrir enlace a"
-msgstr "Nyissa meg a linket, hogy"
-
-# "Notes"
-#: ../../../../ajax/ajax_search.php:262 ../../../../inc/tpl/accounts.php:271
-#: ../../../../inc/tpl/users.php:154
-msgid "Notas"
-msgstr "Jegyzetek"
-
-# "Attachments"
-#: ../../../../ajax/ajax_search.php:266
-msgid "Archivos adjuntos"
-msgstr "Csatolmányok"
-
-# "Link to Wiki"
-#: ../../../../ajax/ajax_search.php:277
-msgid "Enlace a Wiki"
-msgstr "Wiki link"
-
-# "View password"
-#: ../../../../ajax/ajax_search.php:293 ../../../../ajax/ajax_viewpass.php:80
-#: ../../../../inc/tpl/accounts.php:528 ../../../../inc/tpl/profiles.php:50
-msgid "Ver Clave"
-msgstr "Jelszó"
-
-# Copy Password to Clipboard
-#: ../../../../ajax/ajax_search.php:294 ../../../../ajax/ajax_search.php:346
-#: ../../../../inc/tpl/accounts.php:533 ../../../../inc/tpl/accounts.php:624
-#, fuzzy
-msgid "Copiar Clave en Portapapeles"
-msgstr "Jelszó másolása a vágólapra"
-
-# "More Actions"
-#: ../../../../ajax/ajax_search.php:298 ../../../../inc/html.class.php:545
-msgid "Más Acciones"
-msgstr "Több akció"
-
-# "Edit Account"
-#: ../../../../ajax/ajax_search.php:302 ../../../../inc/tpl/accounts.php:556
-msgid "Modificar Cuenta"
-msgstr "Fiók módosítás"
-
-# "Copy Account"
-#: ../../../../ajax/ajax_search.php:306 ../../../../inc/tpl/accounts.php:53
-msgid "Copiar Cuenta"
-msgstr "Fiók másolása"
-
-# "Delete Account"
-#: ../../../../ajax/ajax_search.php:310 ../../../../inc/account.class.php:602
-#: ../../../../inc/tpl/accounts.php:73 ../../../../inc/tpl/accounts.php:568
-msgid "Eliminar Cuenta"
-msgstr "Fiók törlése"
-
-# "Request Modification"
-#: ../../../../ajax/ajax_search.php:317 ../../../../inc/tpl/accounts.php:561
-msgid "Solicitar Modificación"
-msgstr "Kérés módosítás"
-
-# Password Copied to Clipboard
-#: ../../../../ajax/ajax_search.php:350 ../../../../inc/tpl/accounts.php:628
-#, fuzzy
-msgid "Clave Copiada al Portapapeles"
-msgstr "Jelszó vágólapra másolt"
-
# "Description is needed"
-#: ../../../../ajax/ajax_sendRequest.php:45
+#: ../../../../ajax/ajax_sendRequest.php:48
msgid "Es necesaria una descripción"
msgstr "Leírás szükséges"
# "Request for Account Modification"
-#: ../../../../ajax/ajax_sendRequest.php:58
+#: ../../../../ajax/ajax_sendRequest.php:61
msgid "Solicitud de Modificación de Cuenta"
msgstr "Kérés fiók módosításához"
# "Requester"
-#: ../../../../ajax/ajax_sendRequest.php:59
+#: ../../../../ajax/ajax_sendRequest.php:62
msgid "Solicitante"
msgstr "Kérõ"
# "Account"
-#: ../../../../ajax/ajax_sendRequest.php:60
-#: ../../../../ajax/ajax_viewpass.php:82 ../../../../inc/account.class.php:371
-#: ../../../../inc/account.class.php:581 ../../../../inc/account.class.php:604
-#: ../../../../inc/account.class.php:880 ../../../../inc/files.class.php:53
+#: ../../../../ajax/ajax_sendRequest.php:63
+#: ../../../../ajax/ajax_viewpass.php:70 ../../../../inc/Account.class.php:165
+#: ../../../../inc/Account.class.php:219 ../../../../inc/Account.class.php:402
+#: ../../../../inc/Account.class.php:425 ../../../../inc/Account.class.php:667
+#: ../../../../inc/Files.class.php:64
msgid "Cuenta"
msgstr "Fiók"
+# "Customer"
+#: ../../../../ajax/ajax_sendRequest.php:64
+#: ../../../../inc/Account.class.php:164 ../../../../inc/Account.class.php:218
+#: ../../../../inc/Account.class.php:401 ../../../../inc/Account.class.php:424
+#: ../../../../inc/Account.class.php:666 ../../../../inc/Customer.class.php:65
+#: ../../../../inc/Customer.class.php:115
+#: ../../../../inc/Customer.class.php:163
+#: ../../../../web/SearchC.class.php:271
+#: ../../../../inc/themes/classic/account.inc:23
+#: ../../../../inc/themes/classic/editpass.inc:12
+#: ../../../../inc/themes/classic/request.inc:9
+#: ../../../../inc/themes/classic/search.inc:19
+#: ../../../../inc/themes/material-blue/account.inc:29
+#: ../../../../inc/themes/material-blue/editpass.inc:13
+#: ../../../../inc/themes/material-blue/request.inc:10
+#: ../../../../inc/themes/material-blue/search.inc:24
+msgid "Cliente"
+msgstr "Ügyfél"
+
+# "Description"
+#: ../../../../ajax/ajax_sendRequest.php:65
+#: ../../../../web/AccountsMgmtC.class.php:79
+#: ../../../../web/AccountsMgmtC.class.php:138
+#: ../../../../web/UsersMgmtC.class.php:187
+#: ../../../../inc/themes/classic/categories.inc:16
+#: ../../../../inc/themes/classic/customers.inc:16
+#: ../../../../inc/themes/classic/eventlog.inc:31
+#: ../../../../inc/themes/classic/groups.inc:16
+#: ../../../../inc/themes/material-blue/categories.inc:20
+#: ../../../../inc/themes/material-blue/customers.inc:20
+#: ../../../../inc/themes/material-blue/eventlog.inc:30
+#: ../../../../inc/themes/material-blue/groups.inc:20
+msgid "Descripción"
+msgstr "Leírás"
+
# "Error on sending request"
-#: ../../../../ajax/ajax_sendRequest.php:74
+#: ../../../../ajax/ajax_sendRequest.php:78
msgid "Error al enviar la solicitud"
msgstr "Hiba a kérés küldése közben"
-# "You don't have permission to do this operation"
-#: ../../../../ajax/ajax_usrpass.php:41
-msgid "No tiene permisos para realizar esta operación"
-msgstr "Nincs jogosultságod végrehajtani ezt a mûveletet"
+# "Error on updating profile"
+#: ../../../../ajax/ajax_userPrefsSave.php:74
+#, fuzzy
+msgid "Error al actualizar preferencias"
+msgstr "Hiba a jelszó frissítése közben"
-# "Password Change"
-#: ../../../../ajax/ajax_usrpass.php:48 ../../../../inc/auth.class.php:194
-#: ../../../../inc/tpl/users.php:175
-msgid "Cambio de Clave"
-msgstr "Jelszó változtatás"
-
-# "Generate random password"
-#: ../../../../ajax/ajax_usrpass.php:57 ../../../../inc/tpl/accounts.php:258
-#: ../../../../inc/tpl/editpass.php:64 ../../../../inc/tpl/users.php:139
-msgid "Generar clave aleatoria"
-msgstr "Véletlenszerû jelszó generálása"
-
-# "Password (repeat)"
-#: ../../../../ajax/ajax_usrpass.php:63 ../../../../ajax/ajax_usrpass.php:65
-#: ../../../../inc/tpl/accounts.php:263 ../../../../inc/tpl/editpass.php:69
-#: ../../../../inc/tpl/users.php:145
-msgid "Clave (repetir)"
-msgstr "Jelszó (ismét)"
-
-# "Password strength level"
-#: ../../../../ajax/ajax_usrpass.php:66 ../../../../inc/tpl/accounts.php:266
-#: ../../../../inc/tpl/editpass.php:71 ../../../../inc/tpl/install.php:107
-#: ../../../../inc/tpl/install.php:122 ../../../../inc/tpl/masterpass.php:64
-#: ../../../../inc/tpl/passreset.php:65 ../../../../inc/tpl/passreset.php:73
-#: ../../../../inc/tpl/users.php:148
-msgid "Nivel de fortaleza de la clave"
-msgstr "Jelszó erõssége"
-
-# "Save"
-#: ../../../../ajax/ajax_usrpass.php:82 ../../../../ajax/ajax_usrpass.php:83
-#: ../../../../inc/tpl/accounts.php:542 ../../../../inc/tpl/categories.php:68
-#: ../../../../inc/tpl/config.php:522 ../../../../inc/tpl/customers.php:68
-#: ../../../../inc/tpl/editpass.php:89 ../../../../inc/tpl/groups.php:64
-#: ../../../../inc/tpl/masterpass.php:114 ../../../../inc/tpl/profiles.php:138
-#: ../../../../inc/tpl/users.php:220
-msgid "Guardar"
-msgstr "Mentés"
-
-# "You don't have permission to access to this account"
-#: ../../../../ajax/ajax_viewpass.php:52 ../../../../ajax/ajax_viewpass.php:58
-#: ../../../../inc/html.class.php:425
-msgid "No tiene permisos para acceder a esta cuenta"
-msgstr "Nincs jogosultságod belépni ebbe a fiókba"
+# "Accounts updated:"
+#: ../../../../ajax/ajax_userPrefsSave.php:77
+#, fuzzy
+msgid "Preferencias actualizadas"
+msgstr "Fiókok frissítve"
# "Master password mismatch"
-#: ../../../../ajax/ajax_viewpass.php:61
+#: ../../../../ajax/ajax_viewpass.php:54
msgid "La clave maestra no coincide"
msgstr "A mester jelszó nem egyezik"
+# "You don't have permission to access to this account"
+#: ../../../../ajax/ajax_viewpass.php:58
+#: ../../../../inc/Controller.class.php:166
+msgid "No tiene permisos para acceder a esta cuenta"
+msgstr "Nincs jogosultságod belépni ebbe a fiókba"
+
+# "View password"
+#: ../../../../ajax/ajax_viewpass.php:68 ../../../../inc/Acl.class.php:133
+#: ../../../../inc/themes/classic/account.inc:379
+#: ../../../../inc/themes/classic/profiles.inc:23
+#: ../../../../inc/themes/classic/search.inc:100
+#: ../../../../inc/themes/material-blue/account.inc:419
+#: ../../../../inc/themes/material-blue/profiles.inc:35
+#: ../../../../inc/themes/material-blue/search.inc:113
+msgid "Ver Clave"
+msgstr "Jelszó"
+
+# "View account password"
+#: ../../../../ajax/ajax_viewpass.php:79
+#, fuzzy
+msgid "Clave de Cuenta"
+msgstr "Fiók jelszavának szerkesztése"
+
+# "Parameter"
+#: ../../../../api.php:56
+#, fuzzy
+msgid "Ayuda Parámetros"
+msgstr "Segítség :: GYIK :: Változások Listája"
+
# "Unable to access to this file directly"
-#: ../../../../inc/account.class.php:26 ../../../../inc/acl.class.php:27
-#: ../../../../inc/auth.class.php:27 ../../../../inc/backup.class.php:26
-#: ../../../../inc/category.class.php:27 ../../../../inc/common.class.php:26
-#: ../../../../inc/config.class.php:26 ../../../../inc/crypt.class.php:26
-#: ../../../../inc/customer.class.php:27 ../../../../inc/db.class.php:27
-#: ../../../../inc/files.class.php:27 ../../../../inc/groups.class.php:27
-#: ../../../../inc/html.class.php:27 ../../../../inc/import.class.php:27
-#: ../../../../inc/init.php:26 ../../../../inc/installer.class.php:27
-#: ../../../../inc/keepassimport.class.php:27
-#: ../../../../inc/keepassximport.class.php:27
-#: ../../../../inc/ldap.class.php:27 ../../../../inc/log.class.php:26
-#: ../../../../inc/migrate.class.php:26 ../../../../inc/profiles.class.php:27
-#: ../../../../inc/tpl/accounts.php:26 ../../../../inc/tpl/backup.php:26
-#: ../../../../inc/tpl/categories.php:26 ../../../../inc/tpl/config.php:26
-#: ../../../../inc/tpl/customers.php:26 ../../../../inc/tpl/editpass.php:25
-#: ../../../../inc/tpl/eventlog.php:26 ../../../../inc/tpl/groups.php:26
-#: ../../../../inc/tpl/login.php:26 ../../../../inc/tpl/main.php:26
-#: ../../../../inc/tpl/masterpass.php:26 ../../../../inc/tpl/migrate.php:26
-#: ../../../../inc/tpl/profiles.php:26 ../../../../inc/tpl/request.php:25
-#: ../../../../inc/tpl/search.php:26 ../../../../inc/tpl/users.php:26
-#: ../../../../inc/upgrade.class.php:27 ../../../../inc/users.class.php:27
-#: ../../../../inc/util.class.php:26 ../../../../inc/util.class.php:293
+#: ../../../../inc/Account.class.php:28
+#: ../../../../inc/AccountBase.class.php:28
+#: ../../../../inc/AccountHistory.class.php:28
+#: ../../../../inc/AccountInterface.class.php:28
+#: ../../../../inc/AccountSearch.class.php:28 ../../../../inc/Acl.class.php:29
+#: ../../../../inc/Api.class.php:30 ../../../../inc/ApiRequest.class.php:28
+#: ../../../../inc/ApiTokens.class.php:28 ../../../../inc/Auth.class.php:29
+#: ../../../../inc/Auth2FA.class.php:32 ../../../../inc/Backup.class.php:28
+#: ../../../../inc/Category.class.php:29 ../../../../inc/Common.class.php:28
+#: ../../../../inc/Config.class.php:28 ../../../../inc/Controller.class.php:31
+#: ../../../../inc/Crypt.class.php:28 ../../../../inc/CsvImport.class.php:28
+#: ../../../../inc/CsvImportBase.class.php:28
+#: ../../../../inc/Customer.class.php:29 ../../../../inc/DB.class.php:28
+#: ../../../../inc/DBConnectionFactory.class.php:30
+#: ../../../../inc/FileImport.class.php:28 ../../../../inc/Files.class.php:29
+#: ../../../../inc/Groups.class.php:29 ../../../../inc/Html.class.php:28
+#: ../../../../inc/ImageUtil.class.php:28 ../../../../inc/Import.class.php:29
+#: ../../../../inc/ImportBase.class.php:28 ../../../../inc/Init.class.php:30
+#: ../../../../inc/Installer.class.php:29
+#: ../../../../inc/KeepassImport.class.php:28
+#: ../../../../inc/KeepassXImport.class.php:28
+#: ../../../../inc/Ldap.class.php:29 ../../../../inc/LdapADS.class.php:28
+#: ../../../../inc/Log.class.php:28 ../../../../inc/Migrate.class.php:28
+#: ../../../../inc/Profile.class.php:29
+#: ../../../../inc/ProfileBase.class.php:28
+#: ../../../../inc/Request.class.php:111 ../../../../inc/Session.class.php:28
+#: ../../../../inc/SyspassImport.class.php:28
+#: ../../../../inc/Upgrade.class.php:29 ../../../../inc/User.class.php:28
+#: ../../../../inc/UserLdap.class.php:28
+#: ../../../../inc/UserPreferences.class.php:28
+#: ../../../../inc/UserUtil.class.php:28 ../../../../inc/Util.class.php:31
+#: ../../../../inc/XmlImport.class.php:28
+#: ../../../../inc/XmlImportBase.class.php:28
+#: ../../../../web/AccountC.class.php:38
+#: ../../../../web/AccountsMgmtC.class.php:32
+#: ../../../../web/ConfigC.class.php:31 ../../../../web/EventlogC.class.php:28
+#: ../../../../web/SearchC.class.php:30
+#: ../../../../web/UsersMgmtC.class.php:39
+#: ../../../../web/UsersPrefsC.class.php:32
msgid "No es posible acceder directamente a este archivo"
msgstr "A fájl közvetlen elérése meghiúsult"
# "Error on updating history"
-#: ../../../../inc/account.class.php:325 ../../../../inc/account.class.php:855
+#: ../../../../inc/Account.class.php:112 ../../../../inc/Account.class.php:185
+#: ../../../../inc/Account.class.php:636
msgid "Error al actualizar el historial"
msgstr "Hiba az elõzmények frissítése közben"
# "Update Customer"
-#: ../../../../inc/account.class.php:331
+#: ../../../../inc/Account.class.php:117
msgid "Actualizar Cuenta"
msgstr "Frissítés Számla"
# "Error on updating secondary groups"
-#: ../../../../inc/account.class.php:334 ../../../../inc/account.class.php:562
+#: ../../../../inc/Account.class.php:120 ../../../../inc/Account.class.php:383
msgid "Error al actualizar los grupos secundarios"
msgstr "Hiba a másodlagos csoportok frissítése közben"
# "Error on updating account's users"
-#: ../../../../inc/account.class.php:340 ../../../../inc/account.class.php:570
+#: ../../../../inc/Account.class.php:126 ../../../../inc/Account.class.php:391
msgid "Error al actualizar los usuarios de la cuenta"
msgstr "Hiba a fiók felhasználóinak frissítése közben"
# "Restore Account"
-#: ../../../../inc/account.class.php:345
+#: ../../../../inc/Account.class.php:217
msgid "Restaurar Cuenta"
msgstr "Restore Számla"
+# "Error on retrieving accounts' passwords"
+#: ../../../../inc/Account.class.php:326
+#: ../../../../inc/AccountHistory.class.php:343
+#: ../../../../inc/AccountHistory.class.php:505
+#, fuzzy
+msgid "No se pudieron obtener los datos de la cuenta"
+msgstr "Hiba a fiókok jelszavainak betöltése közben"
+
# "New Account"
-#: ../../../../inc/account.class.php:579 ../../../../inc/tpl/accounts.php:47
-#: ../../../../inc/tpl/main.php:53
+#: ../../../../inc/Account.class.php:400 ../../../../inc/Acl.class.php:129
+#: ../../../../web/AccountC.class.php:147 ../../../../web/MainC.class.php:161
msgid "Nueva Cuenta"
msgstr "Új fiók"
# "ERROR: Operation failed"
-#: ../../../../inc/account.class.php:597
+#: ../../../../inc/Account.class.php:418
msgid "ERROR: Error en la operación."
msgstr "HIBA: A mûvelet meghiusult"
+# "Delete Account"
+#: ../../../../inc/Account.class.php:423 ../../../../inc/Acl.class.php:134
+#: ../../../../web/AccountC.class.php:352
+#: ../../../../inc/themes/classic/account.inc:366
+#: ../../../../inc/themes/classic/search.inc:127
+#: ../../../../inc/themes/material-blue/account.inc:413
+#: ../../../../inc/themes/material-blue/search.inc:142
+msgid "Eliminar Cuenta"
+msgstr "Fiók törlése"
+
# "Error on deleting account's groups"
-#: ../../../../inc/account.class.php:614
+#: ../../../../inc/Account.class.php:436
msgid "Error al eliminar grupos asociados a la cuenta"
msgstr "Hiba a felhasználó csoportok törlése közben"
# "Error on deleting account's users"
-#: ../../../../inc/account.class.php:618
+#: ../../../../inc/Account.class.php:440
msgid "Error al eliminar usuarios asociados a la cuenta"
msgstr "Hiba a fiók felhasználók törlése közben"
# "Error on deleting account's files"
-#: ../../../../inc/account.class.php:622
+#: ../../../../inc/Account.class.php:444
msgid "Error al eliminar archivos asociados a la cuenta"
msgstr "Hiba a fiók fájljainak törlése közben"
# "Start"
-#: ../../../../inc/account.class.php:750 ../../../../inc/account.class.php:904
+#: ../../../../inc/Account.class.php:498
+#: ../../../../inc/AccountHistory.class.php:124
+#: ../../../../inc/XmlImport.class.php:62
msgid "Inicio"
msgstr "Start"
# "Error on encryption module"
-#: ../../../../inc/account.class.php:758 ../../../../inc/account.class.php:912
+#: ../../../../inc/Account.class.php:503
+#: ../../../../inc/AccountHistory.class.php:130
msgid "Error en el módulo de encriptación"
msgstr "Titkosító modul hiba"
# "Error on retrieving accounts' passwords"
-#: ../../../../inc/account.class.php:766 ../../../../inc/account.class.php:920
+#: ../../../../inc/Account.class.php:511
+#: ../../../../inc/AccountHistory.class.php:138
msgid "Error al obtener las claves de las cuentas"
msgstr "Hiba a fiókok jelszavainak betöltése közben"
+# "View account password"
+#: ../../../../inc/Account.class.php:527
+#: ../../../../inc/AccountHistory.class.php:160
+#, fuzzy
+msgid "Clave de cuenta vacía"
+msgstr "Fiók jelszavának szerkesztése"
+
+#: ../../../../inc/Account.class.php:532
+#: ../../../../inc/AccountHistory.class.php:165
+#, fuzzy
+msgid "IV de encriptación incorrecto"
+msgstr "A mezõk száma helytelen"
+
+# "All accounts passwords will be encrypted again."
+#: ../../../../inc/Account.class.php:541
+#: ../../../../inc/AccountHistory.class.php:174
+#, fuzzy
+msgid "No es posible desencriptar la clave de la cuenta"
+msgstr "Minden fiók jelszó újra titkosítva lesz"
+
# "Error on updating account's password"
-#: ../../../../inc/account.class.php:792
+#: ../../../../inc/Account.class.php:547
msgid "Fallo al actualizar la clave de la cuenta"
msgstr "Hiba a fiók jelszavának frissítése közben"
# "Accounts updated:"
-#: ../../../../inc/account.class.php:804
-msgid "Cuentas actualizadas:"
+#: ../../../../inc/Account.class.php:561
+#, fuzzy
+msgid "Cuentas actualizadas"
msgstr "Fiókok frissítve"
# "End"
-#: ../../../../inc/account.class.php:809 ../../../../inc/account.class.php:968
+#: ../../../../inc/Account.class.php:566
+#: ../../../../inc/AccountHistory.class.php:199
msgid "Fin"
msgstr "Vége"
# "Update Password"
-#: ../../../../inc/account.class.php:878
+#: ../../../../inc/Account.class.php:665
msgid "Modificar Clave"
msgstr "Jelszó frissítés"
+# "Error on retrieving accounts' passwords"
+#: ../../../../inc/Account.class.php:700
+#, fuzzy
+msgid "No se pudieron obtener los datos de las cuentas"
+msgstr "Hiba a fiókok jelszavainak betöltése közben"
+
# "Update Master Password (H)"
-#: ../../../../inc/account.class.php:903
+#: ../../../../inc/AccountHistory.class.php:123
msgid "Actualizar Clave Maestra (H)"
msgstr "Frissítse a mester jelszót (H)"
# "Record's Master password mismatch"
-#: ../../../../inc/account.class.php:934
+#: ../../../../inc/AccountHistory.class.php:155
msgid "La clave maestra del registro no coincide"
msgstr "A rekord mester jelszava nem egyezik"
# "Error on updating history's master password"
-#: ../../../../inc/account.class.php:950
+#: ../../../../inc/AccountHistory.class.php:180
msgid "Fallo al actualizar la clave del histórico"
msgstr "Hiba a elõzmények mester jelszavának frissítése közben"
# "Records updated"
-#: ../../../../inc/account.class.php:963
-msgid "Registros actualizados:"
+#: ../../../../inc/AccountHistory.class.php:194
+#, fuzzy
+msgid "Registros actualizados"
msgstr "Rekordok frissítve"
# "Access denied to"
-#: ../../../../inc/acl.class.php:104
+#: ../../../../inc/Acl.class.php:112
msgid "Denegado acceso a"
msgstr "Belépés megtagadva"
+# "New Account"
+#: ../../../../inc/Acl.class.php:126
+#, fuzzy
+msgid "Buscar Cuentas"
+msgstr "Keresés"
+
+# "Account"
+#: ../../../../inc/Acl.class.php:127
+#, fuzzy
+msgid "Ver Cuenta"
+msgstr "Fiók adatok"
+
+# "Copy Account"
+#: ../../../../inc/Acl.class.php:128 ../../../../web/AccountC.class.php:259
+#: ../../../../inc/themes/classic/search.inc:121
+#: ../../../../inc/themes/material-blue/search.inc:136
+msgid "Copiar Cuenta"
+msgstr "Fiók másolása"
+
+# "Edit Account"
+#: ../../../../inc/Acl.class.php:130 ../../../../web/AccountC.class.php:323
+msgid "Editar Cuenta"
+msgstr "Fiók módosítás"
+
+# "Edit account password"
+#: ../../../../inc/Acl.class.php:131
+#, fuzzy
+msgid "Editar Clave de Cuenta"
+msgstr "fiók jelszavának módosításe"
+
+# "View History"
+#: ../../../../inc/Acl.class.php:132
+#: ../../../../inc/themes/classic/profiles.inc:28
+#: ../../../../inc/themes/material-blue/profiles.inc:40
+msgid "Ver Historial"
+msgstr "Elõzmények"
+
+# "Files"
+#: ../../../../inc/Acl.class.php:135
+#: ../../../../inc/themes/classic/account.inc:188
+#: ../../../../inc/themes/classic/profiles.inc:50
+#: ../../../../inc/themes/material-blue/account.inc:230
+#: ../../../../inc/themes/material-blue/config.inc:224
+#: ../../../../inc/themes/material-blue/profiles.inc:60
+msgid "Archivos"
+msgstr "Fájlok"
+
+# "Request"
+#: ../../../../inc/Acl.class.php:136
+#, fuzzy
+msgid "Peticiones"
+msgstr "Email kérések engedélyezése"
+
+# "Application Admin"
+#: ../../../../inc/Acl.class.php:137
+#, fuzzy
+msgid "Gestión Aplicación"
+msgstr "Menedzsment"
+
+# "Categories management"
+#: ../../../../inc/Acl.class.php:138
+#, fuzzy
+msgid "Gestión Categorías"
+msgstr "Kategória Menedzsment"
+
+# "Customers Management"
+#: ../../../../inc/Acl.class.php:139
+#, fuzzy
+msgid "Gestión Clientes"
+msgstr "Ügyfél Menedzsment"
+
+# "Files management disabled"
+#: ../../../../inc/Acl.class.php:140
+#, fuzzy
+msgid "Gestión Campos Personalizados"
+msgstr "Menedzsment"
+
+#: ../../../../inc/Acl.class.php:141
+#, fuzzy
+msgid "Gestión Autorizaciones API"
+msgstr "Menedzsment"
+
+# "Users Management"
+#: ../../../../inc/Acl.class.php:142 ../../../../inc/Acl.class.php:143
+#, fuzzy
+msgid "Gestión Usuarios"
+msgstr "Felhasználó Menedzsment"
+
+# "Groups Management"
+#: ../../../../inc/Acl.class.php:144
+#, fuzzy
+msgid "Gestión Grupos"
+msgstr "Csoport Menedzsment"
+
+# "Profiles Management"
+#: ../../../../inc/Acl.class.php:145
+#, fuzzy
+msgid "Gestión Perfiles"
+msgstr "Profil Menedzsment"
+
+# "Configuration"
+#: ../../../../inc/Acl.class.php:146 ../../../../inc/Config.class.php:118
+#: ../../../../inc/Config.class.php:400 ../../../../web/MainC.class.php:179
+#: ../../../../inc/themes/classic/profiles.inc:57
+#: ../../../../inc/themes/material-blue/profiles.inc:66
+msgid "Configuración"
+msgstr "LDAP kapcsolat rendben"
+
+# "General configuration"
+#: ../../../../inc/Acl.class.php:147
+#, fuzzy
+msgid "Configuración General"
+msgstr "Általános beállítások"
+
+# "Description"
+#: ../../../../inc/Acl.class.php:148 ../../../../web/ConfigC.class.php:149
+#: ../../../../inc/themes/classic/profiles.inc:65
+#: ../../../../inc/themes/material-blue/profiles.inc:77
+#, fuzzy
+msgid "Encriptación"
+msgstr "A Crypto modul nem tölthetõ be"
+
+# "Backup"
+#: ../../../../inc/Acl.class.php:149 ../../../../web/ConfigC.class.php:194
+#: ../../../../inc/themes/classic/backup.inc:4
+#: ../../../../inc/themes/material-blue/backup.inc:4
+msgid "Copia de Seguridad"
+msgstr "Archiválás"
+
+#: ../../../../inc/Acl.class.php:150
+msgid "Exportar"
+msgstr ""
+
+# "phpPMS Import"
+#: ../../../../inc/Acl.class.php:151
+#: ../../../../inc/themes/classic/profiles.inc:74
+#: ../../../../inc/themes/material-blue/profiles.inc:87
+#, fuzzy
+msgid "Importar"
+msgstr "Fiókok importálása"
+
+# "Extension not allowed"
+#: ../../../../inc/Api.class.php:65 ../../../../inc/Api.class.php:88
+#: ../../../../inc/Api.class.php:126
+#, fuzzy
+msgid "Acceso no permitido"
+msgstr "Belépés megtagadva"
+
+# "Request Modification"
+#: ../../../../inc/Api.class.php:166
+#, fuzzy
+msgid "Error de codificación"
+msgstr "LDAP kapcsolódási hiba"
+
+#: ../../../../inc/ApiRequest.class.php:102
+#, fuzzy
+msgid "Token de autorización"
+msgstr "Kérés fiók módosításához"
+
+# "Invalid Action"
+#: ../../../../inc/ApiRequest.class.php:103
+#, fuzzy
+msgid "Acción a realizar"
+msgstr "Akció"
+
+# "LDAP bind user password"
+#: ../../../../inc/ApiRequest.class.php:104
+#, fuzzy
+msgid "Clave de usuario (opcional)"
+msgstr "Változás felhasználói jelszó"
+
+# "Text to search"
+#: ../../../../inc/ApiRequest.class.php:105
+#, fuzzy
+msgid "Cadena a buscar"
+msgstr "Keresés"
+
+# "Number of results that are shown per page when searching"
+#: ../../../../inc/ApiRequest.class.php:106
+#, fuzzy
+msgid "Numero de cuentas a mostar en la búsqueda"
+msgstr "Keresési találok száma oldalanként"
+
+#: ../../../../inc/ApiRequest.class.php:107
+msgid "Item a devolver"
+msgstr ""
+
+# "Database already exist"
+#: ../../../../inc/ApiTokens.class.php:221
+#, fuzzy
+msgid "La autorización ya existe"
+msgstr "Az adatbázis már létezik"
+
+# "Update Configuration"
+#: ../../../../inc/ApiTokens.class.php:307
+#, fuzzy
+msgid "Actualizar Autorización"
+msgstr "Frissítés Számla"
+
+# "Delete File"
+#: ../../../../inc/ApiTokens.class.php:331
+#: ../../../../web/UsersMgmtC.class.php:421
+#, fuzzy
+msgid "Eliminar Autorización"
+msgstr "Profil törlése"
+
+# "The user have no associated groups"
+#: ../../../../inc/Auth.class.php:107
+#, fuzzy
+msgid "Usuario no pertenece al grupo"
+msgstr "a felhasználó nincs csoporthoz társítva"
+
+# "Password Change"
+#: ../../../../inc/Auth.class.php:187
+#: ../../../../inc/themes/classic/users.inc:117
+#: ../../../../inc/themes/classic/userspass.inc:2
+#: ../../../../inc/themes/material-blue/users.inc:161
+#: ../../../../inc/themes/material-blue/userspass.inc:2
+msgid "Cambio de Clave"
+msgstr "Jelszó változtatás"
+
# A request for updating your user password has been done.
-#: ../../../../inc/auth.class.php:195
+#: ../../../../inc/Auth.class.php:189
msgid "Se ha solicitado el cambio de su clave de usuario."
msgstr "A kérelmet frissíteni a felhasználói jelszót megtörtént."
# "In order to complete the process, please go to this URL:"
-#: ../../../../inc/auth.class.php:197
+#: ../../../../inc/Auth.class.php:191
msgid "Para completar el proceso es necesario que acceda a la siguiente URL:"
msgstr "A folyamat befejezéséhez látogass el a következõ oldalra:"
# "If you have not requested this action, please dismiss this message."
-#: ../../../../inc/auth.class.php:201
+#: ../../../../inc/Auth.class.php:195
msgid "Si no ha solicitado esta acción, ignore este mensaje."
msgstr "Amennyiben nincs szüksége erre a folyamatra, zárja be ezt az üzenetet"
# "This operation is only available on Linux environments"
-#: ../../../../inc/backup.class.php:159
+#: ../../../../inc/Backup.class.php:166
msgid "Esta operación sólo es posible en entornos Linux"
msgstr "Ez a mûvelet csak Linux környezetben érhetõ el"
# Error while doing backup in compatibility mode
-#: ../../../../inc/backup.class.php:163
+#: ../../../../inc/Backup.class.php:168
#, fuzzy
msgid "Error al realizar backup en modo compatibilidad"
msgstr "Error while doing backup in compatibility mode"
+# "Unable to create backup directory"
+#: ../../../../inc/Backup.class.php:222
+#: ../../../../inc/XmlExport.class.php:464
+msgid "No es posible crear el directorio de backups"
+msgstr "Arcív mappa létrehozása meghiusúlt"
+
# "Check backup directory permissions"
-#: ../../../../inc/backup.class.php:222
+#: ../../../../inc/Backup.class.php:227
+#: ../../../../inc/XmlExport.class.php:469
msgid "Compruebe los permisos del directorio de backups"
msgstr "Ellenõrizze az archiválás mappa jogosultságait"
+# "Category name duplicated"
+#: ../../../../inc/Category.class.php:69
+#: ../../../../inc/Category.class.php:165
+msgid "Nombre de categoría duplicado"
+msgstr "Kategória neve duplázva"
+
+# "Error on creating category"
+#: ../../../../inc/Category.class.php:78
+msgid "Error al crear la categoría"
+msgstr "Hiba a kategória létrehozása közben"
+
+# "Category"
+#: ../../../../inc/Category.class.php:83
+#: ../../../../inc/Category.class.php:132
+#: ../../../../inc/Category.class.php:182
+#: ../../../../web/SearchC.class.php:283
+#: ../../../../inc/themes/classic/account.inc:42
+#: ../../../../inc/themes/classic/search.inc:44
+#: ../../../../inc/themes/material-blue/account.inc:50
+#: ../../../../inc/themes/material-blue/search.inc:49
+msgid "Categoría"
+msgstr "Kategória"
+
+# "Category in use by:"
+#: ../../../../inc/Category.class.php:119
+msgid "Categoría en uso por:"
+msgstr "A kategóriát a következõ használja:"
+
+# "Error on category deletion"
+#: ../../../../inc/Category.class.php:129
+msgid "Error al eliminar la categoría"
+msgstr "Hiba a kategória törlése közben"
+
+# "Delete Category"
+#: ../../../../inc/Category.class.php:132
+#: ../../../../web/AccountsMgmtC.class.php:101
+msgid "Eliminar Categoría"
+msgstr "Kategória törlése"
+
+# "Error on updating category"
+#: ../../../../inc/Category.class.php:179
+msgid "Error al actualizar la categoría"
+msgstr "Hiba a kategória frissítése közben"
+
# "Category Edit"
-#: ../../../../inc/category.class.php:183
+#: ../../../../inc/Category.class.php:182
msgid "Modificar Categoría"
msgstr "Kategória szerkesztés"
-# "N/A"
-#: ../../../../inc/common.class.php:61 ../../../../inc/users.class.php:108
-msgid "N/D"
-msgstr "n.a."
-
-# "Action"
-#: ../../../../inc/common.class.php:62
-msgid "Acción"
-msgstr "Akció"
-
-# "Performed by"
-#: ../../../../inc/common.class.php:63
-msgid "Realizado por"
-msgstr "Által végrehajtva"
-
-# "Email sent"
-#: ../../../../inc/common.class.php:81
-msgid "Correo enviado"
-msgstr "Email elküldve"
-
-# "Error on sending email"
-#: ../../../../inc/common.class.php:83
-msgid "Error al enviar correo"
-msgstr "Hiba az email küldése közben"
-
-# "Recipient"
-#: ../../../../inc/common.class.php:88
-msgid "Destinatario"
-msgstr "Címzett"
-
-# "CC"
-#: ../../../../inc/common.class.php:89
-msgid "CC"
-msgstr "CC"
-
-# "Send Email"
-#: ../../../../inc/common.class.php:91
-msgid "Enviar Email"
-msgstr "Email küldése"
-
-# "Warning"
-#: ../../../../inc/common.class.php:146
-msgid "Aviso"
-msgstr "Figyelem"
-
-# "Enter phpPMS database connection user"
-#: ../../../../inc/common.class.php:210
-msgid "Indicar el usuario de conexión a la base de datos de phpPMS"
-msgstr "Írd be az adatbázis kapcsolati felhasználót"
-
-# "Enter phpPMS database name"
-#: ../../../../inc/common.class.php:211
-msgid "Indicar el nombre de la base de datos de phpPMS"
-msgstr "Írd be a phpPMS adatbázis nevét"
-
-# "Enter phpPMS database server name"
-#: ../../../../inc/common.class.php:212
-msgid "Indicar el servidor de la base de datos de phpPMS"
-msgstr "Írd be az adatbázis szerver nevét"
-
-# "Enables account name as a link to account details in search page."
-#: ../../../../inc/common.class.php:213
-msgid ""
-"Habilita el nombre de la cuenta de la búsqueda, como enlace a los detalles "
-"de la cuenta"
-msgstr "Fiók nevére való keresés engedélyezése"
-
-# "Number of results that are shown per page when searching"
-#: ../../../../inc/common.class.php:214
-msgid "Número de resultados por página a mostrar, al realizar una búsqueda"
-msgstr "Keresési találok száma oldalanként"
-
-# "Enables upload/download accounts files."
-#: ../../../../inc/common.class.php:215
-msgid "Habilita la subida/descarga de archivos para las cuentas"
-msgstr "Fájlok Fel/Letöltésének engedélyezése"
-
-# "Sets up the max upload file size."
-#: ../../../../inc/common.class.php:216
-msgid "Establece el tamaño máximo para subir archivos"
-msgstr "A feltölthetõ fájlméret maximális értékének beállítása"
-
-# "The absolute maximum is 16MB."
-#: ../../../../inc/common.class.php:216
-msgid "El máximo absuluto es de 16MB"
-msgstr "A maximum 16MB"
-
-# "Enables the option to add an external Wiki link for accounts search results."
-#: ../../../../inc/common.class.php:217
-msgid ""
-"Habilita la opción de añadir un enlace a Wiki externa para los resultados de "
-"la búsqueda"
-msgstr "Külsõ Wiki forrásokban való keresés engedélyezése"
-
-# "URL that wiki uses to do a page search on it."
-#: ../../../../inc/common.class.php:218
-msgid ""
-"URL que utiliza la wiki para realizar una búsqueda de una página en esta"
-msgstr "Wiki oldal keresõje"
-
-# "It uses customer name as parameter."
-#: ../../../../inc/common.class.php:218
-msgid "Como parámetro se utiliza el nombre del cliente"
-msgstr "Az ügyfelet paraméterként használja"
-
-# "Example"
-#: ../../../../inc/common.class.php:218 ../../../../inc/common.class.php:219
-#: ../../../../inc/common.class.php:222 ../../../../inc/common.class.php:223
-#: ../../../../inc/common.class.php:224
-msgid "Ejemplo"
-msgstr "Példa"
-
-# "URL that wiki uses to access to page details on it."
-#: ../../../../inc/common.class.php:219
-msgid ""
-"URL que utiliza la wiki para acceder a los detalles de una página de ésta"
-msgstr "Wiki oldal adatainak elérése"
-
-# "The account name is used as wiki search variable parameter."
-#: ../../../../inc/common.class.php:219
-msgid ""
-"El nombre de la cuenta se utiliza como parámetro de la variable de búsqueda "
-"de la Wiki"
-msgstr "A fiók neve wiki keresési paraméterként való használata"
-
-# "Preffix to select what accounts have a wiki page link."
-#: ../../../../inc/common.class.php:220
-msgid ""
-"Prefijo para determinar qué cuentas tienen un enlace a una página de la Wiki"
-msgstr "Elõtag választás a fiókok tartalmaznak-e wiki linket"
-
-# "Examples"
-#: ../../../../inc/common.class.php:220
-msgid "Ejemplos"
-msgstr "Példák"
-
-# "Enables LDAP authentication"
-#: ../../../../inc/common.class.php:221
-msgid "Habilita de autentificación mediante servidor LDAP"
-msgstr "LDAP hitelesítés engedélyezése"
-
-# "This method will switch to MySQL on failure"
-#: ../../../../inc/common.class.php:221
-msgid "Este método utilizará MySQL en caso de fallo"
-msgstr "Ez a metódus hibát okoz a MySQL-ben"
-
-# "User to connect LDAP server"
-#: ../../../../inc/common.class.php:222
-msgid "Usuario para conectar con el servicio de LDAP"
-msgstr "Felhasználó az LDAP szerverhez való kapcsolódáshoz"
-
-# "LDAP base to do users searches."
-#: ../../../../inc/common.class.php:223
-msgid "Base en la que realizar la búsqueda de usuarios de LDAP"
-msgstr "LDAP bázis a felhasználó keresésekhez"
-
-# "LDAP group that users belong to for access permission"
-#: ../../../../inc/common.class.php:224
-msgid ""
-"Grupo de LDAP al que debe de pertenecer el usuario para permitir el acceso"
-msgstr "LDAP csoport felhasználóinak belépési jgosultságia"
-
-# "LDAP server hostname or IP address"
-#: ../../../../inc/common.class.php:225
-msgid "Nombre o dirección IP del servidor de LDAP"
-msgstr "LDAP szerver hosztnév vagy IP cím"
-
-# "Sets a new master password without re-encrypt the accounts."
-#: ../../../../inc/common.class.php:226
-msgid "Establece una nueva clave maestra sin re-encriptar las cuentas"
-msgstr "Új mester jelszó beállítása a fiók újratitkosítása nélkül"
-
-# "LDAP bind user password"
-#: ../../../../inc/common.class.php:227
-msgid "Clave del usuario de conexión a LDAP"
-msgstr "LDAP bind felhasználói jelszó"
-
-# "In this mode you cannot login to application. To disable it, you need to modify configuration file."
-#: ../../../../inc/common.class.php:228
-msgid ""
-"En este modo no se puede acceder a la aplicación. Para deshabilitarlo es "
-"necesario modificar el archivo de configuración"
-msgstr ""
-"Ezen a módon nem tudsz bejelentkezni az alkalmazásba. Hogy kikapcsold, "
-"módosítanod kell a konfigurációs fájlt"
-
-# "Shows some information about application and performance."
-#: ../../../../inc/common.class.php:229
-msgid ""
-"Muestra información relativa a la configuración de la aplicación y "
-"rendimiento"
-msgstr "Mutat néhány információt az alkalmazásról és a teljesítményrõl"
-
-# "It saves the actions done by the application."
-#: ../../../../inc/common.class.php:230
-msgid "Guarda las acciones realizadas en la aplicación"
-msgstr "Ez elmenti az akciók kimenetét"
-
-# "Check for application updates (only for administrators)."
-#: ../../../../inc/common.class.php:231
-msgid ""
-"Comprobar actualizaciones de la aplicación (sólo para los usuarios "
-"administradores)"
-msgstr "Azlkalmazás frissítések keresése (csak rendszergazda esetén)"
-
-# "Extensions max length is 4 characters."
-#: ../../../../inc/common.class.php:232
-msgid "Extensiones de máximo 4 caracteres."
-msgstr "A kiterjesztések hossza maximum 4 karakter lehet"
-
-# "Write extension and press enter to add."
-#: ../../../../inc/common.class.php:232
-msgid "Escribir extensión y pulsar intro para añadir."
-msgstr "Írj kiterjesztést, majd nyomj entert a hozzáadáshoz"
-
-# Import from KeePass or KeePassX. The customer name will be KeePass or KeePassX.
-#: ../../../../inc/common.class.php:233
-#, fuzzy
-msgid ""
-"Importar desde KeePass o KeePassX. El nombre del cliente será igual a "
-"KeePass o KeePassX"
-msgstr ""
-"Import from KeePass or KeePassX. The customer name will be KeePass or "
-"KeePassX."
-
-# "Import form a CSV file with the format"
-#: ../../../../inc/common.class.php:233
-msgid "Importar desde un archivo CSV con el formato"
-msgstr "Forma importálása a CSV fájl formátumával együtt"
-
-# "account_name;customer;category;url;user;password;notes"
-#: ../../../../inc/common.class.php:233
-msgid "nombre_de_cuenta;cliente;categoría;url;usuario;clave;notas"
-msgstr "Fiók_név;ügyfél;kategória;url;felhasználó;jelszó;jegyzetek"
-
-# "If the customer or category are not created, they will be automatically created."
-#: ../../../../inc/common.class.php:233
-msgid ""
-"Si el cliente o la categoría no están creados, se crean automáticamente."
-msgstr ""
-"Amennyiben az ügyfél vagy a kategória nem létezik, automatikusan lesznek "
-"létrehozva"
-
-# Allows to show the non-permission accounts only for searches.
-#: ../../../../inc/common.class.php:234
-#, fuzzy
-msgid ""
-"Permite que las cuentas sin acceso sean visibles sólo para las búsquedas."
-msgstr "Allows to show the non-permission accounts only for searches."
-
-# Enables to show account's search results like a card format.
-#: ../../../../inc/common.class.php:235
-#, fuzzy
-msgid "Muestra los resultados de búsqueda de cuentas en formato tarjeta."
-msgstr "Enables to show account's search results like a card format."
-
-# Enables Active Directory LDAP connection mode.
-#: ../../../../inc/common.class.php:236
-#, fuzzy
-msgid "Habilita el modo de conexión con LDAP de Active Directory."
-msgstr "Enables Active Directory LDAP connection mode."
-
-# Define the default users group for new LDAP users
-#: ../../../../inc/common.class.php:237
-#, fuzzy
-msgid ""
-"Define el grupo de usuarios por defecto para los nuevos usuarios de LDAP."
-msgstr "Define the default users group for new LDAP users"
-
-# Define the default users profile for new LDAP users
-#: ../../../../inc/common.class.php:238
-#, fuzzy
-msgid ""
-"Define el perfil de usuario por defecto para los nuevos usuarios de LDAP."
-msgstr "Define the default users profile for new LDAP users"
-
# "Update Configuration"
-#: ../../../../inc/config.class.php:122 ../../../../inc/config.class.php:150
+#: ../../../../inc/Config.class.php:118 ../../../../inc/Config.class.php:401
msgid "Modificar configuración"
msgstr "Konfiguráció frissítése"
-# "Parameter"
-#: ../../../../inc/config.class.php:151
-msgid "Parámetro"
-msgstr "Paraméter"
-
-# "Value"
-#: ../../../../inc/config.class.php:152
-msgid "Valor"
-msgstr "Érték"
-
# "Unable to write on configuration file"
-#: ../../../../inc/config.class.php:310
+#: ../../../../inc/Config.class.php:276
msgid "No es posible escribir el archivo de configuración"
msgstr "Nem lehet a konfigurációs fájlba írni"
# "Please, check 'config' directory permissions"
-#: ../../../../inc/config.class.php:311
+#: ../../../../inc/Config.class.php:276
msgid "Compruebe los permisos del directorio \"config\""
msgstr "Kérem, ellenõrizze a 'config' mappa jogosultságait"
-# "Update Customer"
-#: ../../../../inc/customer.class.php:105
-msgid "Actualizar Cliente"
-msgstr "Frissítse az ügyfelet"
+# "Parameter"
+#: ../../../../inc/Config.class.php:402
+msgid "Parámetro"
+msgstr "Paraméter"
-# "Unable to connect to DB"
-#: ../../../../inc/db.class.php:95 ../../../../inc/db.class.php:109
-#: ../../../../inc/db.class.php:116 ../../../../inc/installer.class.php:214
-msgid "No es posible conectar con la BD"
-msgstr "Csatlakozás a DB-hez meghiusúlt"
-
-# Please, check connection parameters
-#: ../../../../inc/db.class.php:95 ../../../../inc/installer.class.php:215
-#, fuzzy
-msgid "Compruebe los datos de conexión"
-msgstr "Please, check connection parameters"
-
-# "Edit Group"
-#: ../../../../inc/groups.class.php:183
-msgid "Modificar Grupo"
-msgstr "Csoport módosítás"
-
-# "Javascript is needed in order to run correctly"
-#: ../../../../inc/html.class.php:207
-msgid "Javascript es necesario para el correcto funcionamiento"
-msgstr "Java szkript szükséges a megfelelõ mûködéshez"
-
-# Help :: FAQ :: Changelog
-#: ../../../../inc/html.class.php:231
-msgid "Ayuda :: FAQ :: Changelog"
-msgstr "Segítség :: GYIK :: Változások Listája"
-
-# "A cygnux.org project"
-#: ../../../../inc/html.class.php:233
-msgid "Un proyecto de cygnux.org"
-msgstr "A cygnux.org projekt"
-
-# "Filter ON"
-#: ../../../../inc/html.class.php:277
-msgid "Filtro ON"
-msgstr "Szûrõ bekapcsolva"
-
-# "Global ON"
-#: ../../../../inc/html.class.php:279
-msgid "Global ON"
-msgstr "Global On"
-
-# "First page"
-#: ../../../../inc/html.class.php:284 ../../../../inc/html.class.php:318
-msgid "Primera página"
-msgstr "Elsõ oldal"
-
-# "Previous page"
-#: ../../../../inc/html.class.php:285 ../../../../inc/html.class.php:319
-msgid "Página anterior"
-msgstr "Elõzõ oldal"
-
-# "Next page"
-#: ../../../../inc/html.class.php:292 ../../../../inc/html.class.php:326
-msgid "Página siguiente"
-msgstr "Következõ oldal"
-
-# "Last page"
-#: ../../../../inc/html.class.php:293 ../../../../inc/html.class.php:327
-msgid "Última página"
-msgstr "Utolsó oldal"
+# "Value"
+#: ../../../../inc/Config.class.php:403
+msgid "Valor"
+msgstr "Érték"
# "Option unavilable"
-#: ../../../../inc/html.class.php:424
+#: ../../../../inc/Controller.class.php:165
msgid "Opción no disponible"
msgstr "Beállítás nem elérhetõ"
# "Please, contact to administrator"
-#: ../../../../inc/html.class.php:424 ../../../../inc/html.class.php:425
-#: ../../../../inc/html.class.php:426 ../../../../inc/init.php:630
+#: ../../../../inc/Controller.class.php:165
+#: ../../../../inc/Controller.class.php:166
+#: ../../../../inc/Controller.class.php:167
+#: ../../../../inc/Controller.class.php:168 ../../../../inc/Init.class.php:290
msgid "Consulte con el administrador"
msgstr "Kérem, keresse a rendszergazdát"
# "You don't have permission to access to this page"
-#: ../../../../inc/html.class.php:426
+#: ../../../../inc/Controller.class.php:167
msgid "No tiene permisos para acceder a esta página"
msgstr "Nincs jogosultságod belépni ebbe az oldalba"
-# "Import finished"
-#: ../../../../inc/import.class.php:89 ../../../../inc/migrate.class.php:117
-msgid "Importación finalizada"
-msgstr "Importálás kész"
+# "You don't have permission to do this operation"
+#: ../../../../inc/Controller.class.php:168
+msgid "No tiene permisos para realizar esta operación"
+msgstr "Nincs jogosultságod végrehajtani ezt a mûveletet"
+
+# "Crypto module can't be loaded"
+#: ../../../../inc/Crypt.class.php:236
+msgid "No se puede usar el módulo de encriptación"
+msgstr "A Crypto modul nem tölthetõ be"
+
+# "Error on creating encryption data"
+#: ../../../../inc/Crypt.class.php:247
+msgid "Error al generar datos cifrados"
+msgstr "Hiba a titkosítási folyamat közben"
+
+# "Unable to create customer"
+#: ../../../../inc/CryptPKI.class.php:44
+#, fuzzy
+msgid "No es posible generar las claves RSA"
+msgstr "Ügyfél létrehozása meghiusúlt"
+
+# "File doesn't exist"
+#: ../../../../inc/CryptPKI.class.php:110
+#: ../../../../inc/CryptPKI.class.php:141
+#, fuzzy
+msgid "El archivo de clave no existe"
+msgstr "A fájl nem létezik"
+
+# "The number of fields is incorrect"
+#: ../../../../inc/CsvImportBase.class.php:109
+#, fuzzy, php-format
+msgid "El número de campos es incorrecto (%d)"
+msgstr "A mezõk száma helytelen"
+
+# "Please, check the CSV file format"
+#: ../../../../inc/CsvImportBase.class.php:110
+#, fuzzy, php-format
+msgid "Compruebe el formato del archivo CSV en línea %s"
+msgstr "Kérem, ellenõrizze a CSV fájl kiterjesztését"
+
+# "Import Accounts"
+#: ../../../../inc/CsvImportBase.class.php:140
+#: ../../../../inc/CsvImportBase.class.php:145
+#: ../../../../inc/Import.class.php:118 ../../../../inc/Import.class.php:124
+#: ../../../../inc/Migrate.class.php:349
+#: ../../../../inc/XmlImport.class.php:62
+#: ../../../../inc/XmlImport.class.php:63
+#: ../../../../web/ConfigC.class.php:216
+msgid "Importar Cuentas"
+msgstr "Fiókok importálása"
+
+# "Error on importing account"
+#: ../../../../inc/CsvImportBase.class.php:141
+msgid "Error importando cuenta"
+msgstr "Hiba a fiók importálása közben"
+
+# "Error on importing account"
+#: ../../../../inc/CsvImportBase.class.php:142
+#, fuzzy, php-format
+msgid "Error procesando línea %s"
+msgstr "Hiba a fiók importálása közben"
+
+# Account Expired
+#: ../../../../inc/CsvImportBase.class.php:145
+#, fuzzy, php-format
+msgid "Cuenta importada: %s"
+msgstr "Munkamenet idõ"
+
+# "Categories"
+#: ../../../../inc/CustomFieldsBase.class.php:81
+#: ../../../../inc/themes/classic/profiles.inc:98
+#: ../../../../inc/themes/material-blue/profiles.inc:114
+msgid "Categorías"
+msgstr "Kategóriák"
+
+# "Customers"
+#: ../../../../inc/CustomFieldsBase.class.php:82
+#: ../../../../inc/themes/classic/profiles.inc:103
+#: ../../../../inc/themes/material-blue/profiles.inc:119
+msgid "Clientes"
+msgstr "Ügyfél"
+
+# "Groups"
+#: ../../../../inc/CustomFieldsBase.class.php:84
+#: ../../../../inc/themes/classic/account.inc:140
+#: ../../../../inc/themes/classic/profiles.inc:89
+#: ../../../../inc/themes/material-blue/account.inc:166
+#: ../../../../inc/themes/material-blue/profiles.inc:104
+msgid "Grupos"
+msgstr "Csoportok"
+
+# "Duplicated customer"
+#: ../../../../inc/Customer.class.php:50 ../../../../inc/Customer.class.php:95
+msgid "Cliente duplicado"
+msgstr "Kettõzött ügyfél"
+
+# "Error on creating customer"
+#: ../../../../inc/Customer.class.php:60
+msgid "Error al crear el cliente"
+msgstr "Hiba az ügyfél létrehozása közben"
+
+# "Error on updating customer"
+#: ../../../../inc/Customer.class.php:112
+msgid "Error al actualizar el cliente"
+msgstr "Hiba az ügyfél frissítése közben"
+
+# "Update Customer"
+#: ../../../../inc/Customer.class.php:115
+msgid "Actualizar Cliente"
+msgstr "Frissítse az ügyfelet"
+
+# "Customer in use by:"
+#: ../../../../inc/Customer.class.php:150
+msgid "Cliente en uso por:"
+msgstr "Az ügyfelet a következõ használja:"
+
+# "Error on customer deletion"
+#: ../../../../inc/Customer.class.php:160
+msgid "Error al eliminar el cliente"
+msgstr "Hiba az ügyfél törlése közben"
+
+# "Delete Customer"
+#: ../../../../inc/Customer.class.php:163
+#: ../../../../web/AccountsMgmtC.class.php:159
+msgid "Eliminar Cliente"
+msgstr "Ügyfél törlése"
+
+# "Unable to connect to DB"
+#: ../../../../inc/DBConnectionFactory.class.php:87
+#: ../../../../inc/DBConnectionFactory.class.php:89
+#: ../../../../inc/DBConnectionFactory.class.php:103
+#: ../../../../inc/Installer.class.php:235
+#: ../../../../inc/Migrate.class.php:115
+msgid "No es posible conectar con la BD"
+msgstr "Csatlakozás a DB-hez meghiusúlt"
+
+# Please, check connection parameters
+#: ../../../../inc/DBConnectionFactory.class.php:87
+#: ../../../../inc/DBConnectionFactory.class.php:89
+#: ../../../../inc/Installer.class.php:236
+#: ../../../../inc/Migrate.class.php:116
+#, fuzzy
+msgid "Compruebe los datos de conexión"
+msgstr "Please, check connection parameters"
+
+# "N/A"
+#: ../../../../inc/Email.class.php:59 ../../../../inc/UserUtil.class.php:567
+msgid "N/D"
+msgstr "n.a."
+
+# "Action"
+#: ../../../../inc/Email.class.php:60 ../../../../web/UsersMgmtC.class.php:392
+#: ../../../../inc/themes/classic/tokens.inc:20
+#: ../../../../inc/themes/material-blue/tokens.inc:20
+msgid "Acción"
+msgstr "Akció"
+
+# "Performed by"
+#: ../../../../inc/Email.class.php:61
+msgid "Realizado por"
+msgstr "Által végrehajtva"
+
+# "Send Email"
+#: ../../../../inc/Email.class.php:77
+msgid "Enviar Email"
+msgstr "Email küldése"
+
+# "Email sent"
+#: ../../../../inc/Email.class.php:81
+msgid "Correo enviado"
+msgstr "Email elküldve"
+
+# "Error on sending email"
+#: ../../../../inc/Email.class.php:83
+msgid "Error al enviar correo"
+msgstr "Hiba az email küldése közben"
+
+# "Recipient"
+#: ../../../../inc/Email.class.php:87
+msgid "Destinatario"
+msgstr "Címzett"
+
+# "CC"
+#: ../../../../inc/Email.class.php:90
+msgid "CC"
+msgstr "CC"
+
+# "Warning"
+#: ../../../../inc/Email.class.php:146
+msgid "Aviso"
+msgstr "Figyelem"
# "File successfully uploaded"
-#: ../../../../inc/import.class.php:105
+#: ../../../../inc/FileImport.class.php:105
msgid "Archivo no subido correctamente"
msgstr "A fájl feltöltése sikeres"
# "Please, check the web server's user permissions"
-#: ../../../../inc/import.class.php:105
+#: ../../../../inc/FileImport.class.php:105
msgid "Verifique los permisos del usuario del servidor web"
msgstr "Kérem, ellenõrizze az webszerver felhasználójának jogosultságait"
# "Please, check file extension"
-#: ../../../../inc/import.class.php:113
+#: ../../../../inc/FileImport.class.php:116
msgid "Compruebe la extensión del archivo"
msgstr "Kérem, ellenõrizze a fájl kiterjesztését"
# "Please, check PHP configuration for upload files"
-#: ../../../../inc/import.class.php:124
+#: ../../../../inc/FileImport.class.php:132
msgid "Compruebe la configuración de PHP para subir archivos"
msgstr "Kérem, tekintse meg a PHP konfigurációt fájlok feltötése elõtt"
# "Please, check temporary directory permissions"
-#: ../../../../inc/import.class.php:132
+#: ../../../../inc/FileImport.class.php:150
+#: ../../../../inc/FileImport.class.php:168
msgid "Compruebe los permisos del directorio temporal"
msgstr "Kérem, ellenõrizze az ideiglenes mappa jogosultságait"
+# "Delete File"
+#: ../../../../inc/Files.class.php:111
+#: ../../../../inc/themes/classic/files.inc:15
+#: ../../../../inc/themes/material-blue/files.inc:16
+msgid "Eliminar Archivo"
+msgstr "Fájl törlése"
+
+# "Error on updating account's users"
+#: ../../../../inc/Groups.class.php:155
+#, fuzzy
+msgid "Error al añadir los usuarios del grupo"
+msgstr "Hiba a fiók felhasználóinak frissítése közben"
+
+# "Error on updating account's users"
+#: ../../../../inc/Groups.class.php:256
+#, fuzzy
+msgid "Error al actualizar los usuarios del grupo"
+msgstr "Hiba a fiók felhasználóinak frissítése közben"
+
+# "Delete Group"
+#: ../../../../inc/Groups.class.php:369
+#: ../../../../web/UsersMgmtC.class.php:209
+msgid "Eliminar Grupo"
+msgstr "Csoport törlése"
+
+# "Error on user deletion"
+#: ../../../../inc/Groups.class.php:372
+#, fuzzy
+msgid "Error al eliminar los usuarios del grupo"
+msgstr "Hiba a felhasználó törlése közben"
+
# Mime type not supported
-#: ../../../../inc/import.class.php:141
+#: ../../../../inc/Import.class.php:109
#, fuzzy
msgid "Tipo mime no soportado"
-msgstr "Mime type not supported"
+msgstr "Fájltípus nem engedélyezett"
# Please, check the file format
-#: ../../../../inc/import.class.php:141
+#: ../../../../inc/Import.class.php:110
#, fuzzy
msgid "Compruebe el formato del archivo"
-msgstr "Kérem, ellenõrizze a fájl kiterjesztését"
-
-# "The number of fields is incorrect"
-#: ../../../../inc/import.class.php:159
-msgid "El número de campos es incorrecto"
-msgstr "A mezõk száma helytelen"
-
-# "Please, check the CSV file format"
-#: ../../../../inc/import.class.php:159
-msgid "Compruebe el formato del archivo CSV"
msgstr "Kérem, ellenõrizze a CSV fájl kiterjesztését"
-# "Error on importing account"
-#: ../../../../inc/import.class.php:164
-msgid "Error importando cuenta"
-msgstr "Hiba a fiók importálása közben"
-
-# Unable to process XML file
-#: ../../../../inc/import.class.php:266
-#, fuzzy
-msgid "No es posible procesar el archivo XML"
-msgstr "Unable to process XML file"
-
-# XML file not supported
-#: ../../../../inc/import.class.php:294
-#, fuzzy
-msgid "Archivo XML no soportado"
-msgstr "XML file not supported"
-
-# Unable to detect the application the data was exported from
-#: ../../../../inc/import.class.php:294
-#, fuzzy
-msgid "No es posible detectar la aplicación que exportó los datos"
-msgstr "Unable to detect the application the data was exported from"
+# "Import finished"
+#: ../../../../inc/Import.class.php:124 ../../../../inc/Import.class.php:127
+#: ../../../../inc/Migrate.class.php:92
+msgid "Importación finalizada"
+msgstr "Importálás kész"
# "Error on checking database"
-#: ../../../../inc/init.php:136
+#: ../../../../inc/Init.class.php:199
msgid "Error en la verificación de la base de datos"
msgstr "Hiba az adatbázis ellenõrzése közben"
-# "\"/config\" directory doesn't exist."
-#: ../../../../inc/init.php:343
-msgid "El directorio \"/config\" no existe"
-msgstr "\"/config\" mappa nem létezik"
-
-# "Unable to write into \"/config\" directory"
-#: ../../../../inc/init.php:348
-msgid "No es posible escribir en el directorio \"config\""
-msgstr "Nem lehet a \"/config\" mappába írni"
-
-# "\"/config\" directory permissions are incorrect"
-#: ../../../../inc/init.php:356
-msgid "Los permisos del directorio \"/config\" son incorrectos"
-msgstr "\"/config\" mappa jogosultságai helytelenek"
-
-# Current
-#: ../../../../inc/init.php:356
-#, fuzzy
-msgid "Actual:"
-msgstr "Current:"
-
-# Needed: 750
-#: ../../../../inc/init.php:356
-#, fuzzy
-msgid "Necesario: 750"
-msgstr "Needed: 750"
-
-# "Application in maintenance"
-#: ../../../../inc/init.php:423
-msgid "Aplicación en mantenimiento"
-msgstr "Az alkalmazás fut"
-
-# "It will be running in short"
-#: ../../../../inc/init.php:423
-msgid "En breve estará operativa"
-msgstr "Hamar végezni fog"
-
-# "The application needs to be updated"
-#: ../../../../inc/init.php:455
-msgid "La aplicación necesita actualizarse"
-msgstr "Frissítsd az alkalmazást"
-
-# If you are an administrator, click on the link:
-#: ../../../../inc/init.php:455
-#, fuzzy
-msgid "Si es un administrador pulse en el enlace:"
-msgstr "If you are an administrator, click on the link:"
-
-# Update
-#: ../../../../inc/init.php:455 ../../../../inc/tpl/upgrade.php:54
-#, fuzzy
-msgid "Actualizar"
-msgstr "Update"
-
-# "Update"
-#: ../../../../inc/init.php:484
-msgid "Actualización"
-msgstr "Frissítés"
-
-# "Version updating done."
-#: ../../../../inc/init.php:485
-msgid "Actualización de versión realizada."
-msgstr "Verzió frissítés kész"
-
-# "Version"
-#: ../../../../inc/init.php:486
-msgid "Versión"
-msgstr "Verzió"
-
-# "Logout session"
-#: ../../../../inc/init.php:543
-msgid "Finalizar sesión"
-msgstr "Kijelentkezés"
-
-# "Inactive time"
-#: ../../../../inc/init.php:545
-msgid "Tiempo inactivo"
-msgstr "Idõ kikapcsolása"
-
-# "Total time"
-#: ../../../../inc/init.php:546
-msgid "Tiempo total"
-msgstr "Teljes idõ"
-
# "Session"
-#: ../../../../inc/init.php:624
+#: ../../../../inc/Init.class.php:286
msgid "Sesion"
msgstr "Munkamenet"
# "Session cannot be initialized."
-#: ../../../../inc/init.php:624 ../../../../inc/init.php:629
+#: ../../../../inc/Init.class.php:286 ../../../../inc/Init.class.php:290
msgid "La sesión no puede ser inicializada"
msgstr "A munkamenetot nem lehet elindítani"
+# "\"/config\" directory doesn't exist."
+#: ../../../../inc/Init.class.php:417
+msgid "El directorio \"/config\" no existe"
+msgstr "\"/config\" mappa nem létezik"
+
+# "Unable to write into \"/config\" directory"
+#: ../../../../inc/Init.class.php:422
+msgid "No es posible escribir en el directorio \"config\""
+msgstr "Nem lehet a \"/config\" mappába írni"
+
+# "\"/config\" directory permissions are incorrect"
+#: ../../../../inc/Init.class.php:430
+msgid "Los permisos del directorio \"/config\" son incorrectos"
+msgstr "\"/config\" mappa jogosultságai helytelenek"
+
+# Current
+#: ../../../../inc/Init.class.php:430
+#, fuzzy
+msgid "Actual:"
+msgstr "Általános"
+
+# Needed: 750
+#: ../../../../inc/Init.class.php:430
+#, fuzzy
+msgid "Necesario: 750"
+msgstr "Felhasználónév szükséges"
+
+# "Application in maintenance"
+#: ../../../../inc/Init.class.php:479
+msgid "Aplicación en mantenimiento"
+msgstr "Az alkalmazás fut"
+
+# "It will be running in short"
+#: ../../../../inc/Init.class.php:479
+msgid "En breve estará operativa"
+msgstr "Hamar végezni fog"
+
+# "Logout session"
+#: ../../../../inc/Init.class.php:516
+msgid "Finalizar sesión"
+msgstr "Kijelentkezés"
+
+# "Inactive time"
+#: ../../../../inc/Init.class.php:518
+msgid "Tiempo inactivo"
+msgstr "Idõ kikapcsolása"
+
+# "Total time"
+#: ../../../../inc/Init.class.php:519
+msgid "Tiempo total"
+msgstr "Teljes idõ"
+
+# "The application needs to be updated"
+#: ../../../../inc/Init.class.php:558
+msgid "La aplicación necesita actualizarse"
+msgstr "Frissítsd az alkalmazást"
+
+# If you are an administrator, click on the link:
+#: ../../../../inc/Init.class.php:558
+#, fuzzy, php-format
+msgid "Si es un administrador pulse en el enlace: %s"
+msgstr "If you are an administrator, click on the link:"
+
+# Update
+#: ../../../../inc/Init.class.php:558
+#: ../../../../inc/themes/classic/upgrade.inc:20
+#: ../../../../inc/themes/material-blue/upgrade.inc:24
+#, fuzzy
+msgid "Actualizar"
+msgstr "Frissítés Számla"
+
+# "Update"
+#: ../../../../inc/Init.class.php:589
+msgid "Actualización"
+msgstr "Frissítés"
+
+# "Version updating done."
+#: ../../../../inc/Init.class.php:590
+msgid "Actualización de versión realizada."
+msgstr "Verzió frissítés kész"
+
+# "Version"
+#: ../../../../inc/Init.class.php:591
+#: ../../../../inc/themes/classic/info.inc:33
+#: ../../../../inc/themes/material-blue/info.inc:33
+msgid "Versión"
+msgstr "Verzió"
+
# "Enter admin username"
-#: ../../../../inc/installer.class.php:90
+#: ../../../../inc/Installer.class.php:127
msgid "Indicar nombre de usuario admin"
msgstr "Írd be az admin felhasználó nevét"
# "Admin user to login to application"
-#: ../../../../inc/installer.class.php:91
+#: ../../../../inc/Installer.class.php:128
msgid "Usuario admin para acceso a la aplicación"
msgstr "Rendszergazda felhasználó bejelentkezés"
# "Enter admin password"
-#: ../../../../inc/installer.class.php:96
+#: ../../../../inc/Installer.class.php:132
msgid "Indicar la clave de admin"
msgstr "Írd be az admin jelszót"
# "Application administrator's password"
-#: ../../../../inc/installer.class.php:97
+#: ../../../../inc/Installer.class.php:133
msgid "Clave del usuario admin de la aplicación"
msgstr "Az alkalmazás rendszergazdai jelszava"
# "Enter master password"
-#: ../../../../inc/installer.class.php:103
+#: ../../../../inc/Installer.class.php:137
msgid "Indicar la clave maestra"
msgstr "Írd be a mester jelszót"
# "Master password to encrypt the passwords"
-#: ../../../../inc/installer.class.php:104
+#: ../../../../inc/Installer.class.php:138
msgid "Clave maestra para encriptar las claves"
msgstr "Mester jelszó szükséges a jelszavak titkosításához"
# "Master password too short"
-#: ../../../../inc/installer.class.php:109
+#: ../../../../inc/Installer.class.php:142
msgid "Clave maestra muy corta"
msgstr "Túl rövid a mester jelszó"
# "Master password length need to be at least 11 characters"
-#: ../../../../inc/installer.class.php:110
+#: ../../../../inc/Installer.class.php:143
msgid "La longitud de la clave maestra ha de ser mayor de 11 caracteres"
msgstr "A mester jelszó legaláb 11 karakterbõl kell, hogy álljon"
# "Enter database user"
-#: ../../../../inc/installer.class.php:116
+#: ../../../../inc/Installer.class.php:147
msgid "Indicar el usuario de la BBDD"
msgstr "Írd be az adatbázis felhasználót"
# "An user with database administrative rights"
-#: ../../../../inc/installer.class.php:117
+#: ../../../../inc/Installer.class.php:148
msgid "Usuario con permisos de administrador de la Base de Datos"
msgstr "Adatbázis rendszergazdai jogokkal rendelkezõ felhasználó"
# "Enter database password"
-#: ../../../../inc/installer.class.php:122
+#: ../../../../inc/Installer.class.php:152
msgid "Indicar la clave de la BBDD"
msgstr "Írd be az aadtbázis jelszavát"
# "Database administartor's password"
-#: ../../../../inc/installer.class.php:123
+#: ../../../../inc/Installer.class.php:153
msgid "Clave del usuario administrador de la Base de Datos"
msgstr "Az adatbázis rendszergazdai jelszava"
# "Enter database name"
-#: ../../../../inc/installer.class.php:128
+#: ../../../../inc/Installer.class.php:157
msgid "Indicar el nombre de la BBDD"
msgstr "Írd be az adatbázis nevét"
# "Application database name. eg. syspass"
-#: ../../../../inc/installer.class.php:129
+#: ../../../../inc/Installer.class.php:158
msgid "Nombre para la BBDD de la aplicación pej. syspass"
msgstr "Az alkalmazás neve. Pl.: syspass"
# "Database name can't contains \".\""
-#: ../../../../inc/installer.class.php:134
+#: ../../../../inc/Installer.class.php:162
msgid "El nombre de la BBDD no puede contener \".\""
msgstr "Az adatbázis neve nem tartalmazhat: \".\""
# "Please, remove dots on database name"
-#: ../../../../inc/installer.class.php:135
+#: ../../../../inc/Installer.class.php:163
msgid "Elimine los puntos del nombre de la Base de Datos"
msgstr "Kérem, törölje a pontokat az adatbázis nevébõl"
# "Enter database server"
-#: ../../../../inc/installer.class.php:141
+#: ../../../../inc/Installer.class.php:167
msgid "Indicar el servidor de la BBDD"
msgstr "Írd be az adatbázis szervert"
# "Server where the database will be installed"
-#: ../../../../inc/installer.class.php:142
+#: ../../../../inc/Installer.class.php:168
msgid "Servidor donde se instalará la Base de Datos"
msgstr "Szerver, ahová az adatbázis telepítve lesz"
-# "Database already exist"
-#: ../../../../inc/installer.class.php:260
-msgid "La BBDD ya existe"
-msgstr "Az adatbázis már létezik"
-
-# "Enter a new database or delete the existing one"
-#: ../../../../inc/installer.class.php:261
-msgid "Indique una nueva Base de Datos o elimine la existente"
-msgstr "Írd be az új adatbázist, vagy töröld a jelenlegit"
-
# "MySQL user already exist"
-#: ../../../../inc/installer.class.php:286
+#: ../../../../inc/Installer.class.php:313
msgid "El usuario de MySQL ya existe"
msgstr "MySQL felhasználó már létezik"
# "Enter a new username or delete the existing one"
-#: ../../../../inc/installer.class.php:287
+#: ../../../../inc/Installer.class.php:314
msgid "Indique un nuevo usuario o elimine el existente"
msgstr "Írd be az új felhasználónevet, vagy töröld a jelenlegit"
+# "Database already exist"
+#: ../../../../inc/Installer.class.php:327
+msgid "La BBDD ya existe"
+msgstr "Az adatbázis már létezik"
+
+# "Enter a new database or delete the existing one"
+#: ../../../../inc/Installer.class.php:328
+msgid "Indique una nueva Base de Datos o elimine la existente"
+msgstr "Írd be az új adatbázist, vagy töröld a jelenlegit"
+
# "Error on DB creation"
-#: ../../../../inc/installer.class.php:304
-#: ../../../../inc/installer.class.php:382
+#: ../../../../inc/Installer.class.php:337
+#: ../../../../inc/Installer.class.php:408
msgid "Error al crear la BBDD"
msgstr "Hiba az adatbázis létrehozása közben"
# "Please, check database user permissions"
-#: ../../../../inc/installer.class.php:305
-#: ../../../../inc/installer.class.php:317
+#: ../../../../inc/Installer.class.php:338
+#: ../../../../inc/Installer.class.php:349
msgid "Verifique los permisos del usuario de la Base de Datos"
msgstr "Kérem, ellenõrizze az adatbázis felhasználó jogosultságait"
# "Error on setting database permissions"
-#: ../../../../inc/installer.class.php:316
+#: ../../../../inc/Installer.class.php:348
msgid "Error al establecer permisos de la BBDD"
msgstr "Hiba az adatbázis jogosultságok beállítása közben"
# "Database structure file doesn't exist"
-#: ../../../../inc/installer.class.php:360
+#: ../../../../inc/Installer.class.php:381
msgid "El archivo de estructura de la BBDD no existe"
msgstr "Adatbázis fájl nem létezik"
# "Unable to create application database. Please, download it again."
-#: ../../../../inc/installer.class.php:361
+#: ../../../../inc/Installer.class.php:382
msgid "No es posible crear la BBDD de la aplicación. Descárguela de nuevo."
msgstr "Az adatbázis létrehozása meghiúsult. Kérem, töltse le újra"
# "Error on selecting database."
-#: ../../../../inc/installer.class.php:367
+#: ../../../../inc/Installer.class.php:390
msgid "Error al seleccionar la BBDD"
msgstr "Hiba az adatbázis kiválasztása közben"
# "Unable to use the database to create the structure. Check permissions and it doesn't exist."
-#: ../../../../inc/installer.class.php:368
+#: ../../../../inc/Installer.class.php:391
msgid ""
"No es posible usar la Base de Datos para crear la estructura. Compruebe los "
"permisos y que no exista."
@@ -2236,1685 +2399,3443 @@ msgstr ""
"jogosultságokat és hogy valóban létezik az adatbázis"
# "Error on creating database structure."
-#: ../../../../inc/installer.class.php:383
+#: ../../../../inc/Installer.class.php:409
msgid "Error al crear la estructura de la Base de Datos."
msgstr "Hiba az adatbázis létrehozása közben"
# "Error on creating \"admin\" group"
-#: ../../../../inc/installer.class.php:409
+#: ../../../../inc/Installer.class.php:432
msgid "Error al crear el grupo \"admin\""
msgstr "Hiba az ügyfél létrehozása közben"
# "Warn to developer"
-#: ../../../../inc/installer.class.php:410
-#: ../../../../inc/installer.class.php:441
-#: ../../../../inc/installer.class.php:459
-#: ../../../../inc/installer.class.php:474
+#: ../../../../inc/Installer.class.php:433
+#: ../../../../inc/Installer.class.php:466
+#: ../../../../inc/Installer.class.php:483
+#: ../../../../inc/Installer.class.php:496
msgid "Informe al desarrollador"
msgstr "Figyelmeztetsd a fejlesztõt"
# "Error on creating \"admin\" profile"
-#: ../../../../inc/installer.class.php:440
+#: ../../../../inc/Installer.class.php:465
msgid "Error al crear el perfil \"admin\""
msgstr "Hiba az \"admin\" profil létrehozása közben"
# "Error on creating \"admin\" user"
-#: ../../../../inc/installer.class.php:458
+#: ../../../../inc/Installer.class.php:482
msgid "Error al crear el usuario \"admin\""
msgstr "Hiba az \"admin\" felhasználó létrehozása közben"
# "Error on updating master password for user \"admin\""
-#: ../../../../inc/installer.class.php:473
+#: ../../../../inc/Installer.class.php:495
msgid "Error al actualizar la clave maestra del usuario \"admin\""
msgstr "Hiba a mester jelszó frissítése közben"
# "Unable to connect to LDAP server"
-#: ../../../../inc/ldap.class.php:100 ../../../../inc/ldap.class.php:105
+#: ../../../../inc/Ldap.class.php:127 ../../../../inc/Ldap.class.php:131
msgid "No es posible conectar con el servidor de LDAP"
msgstr "Csatlakozás az LDAP szerverhez meghiúsult"
# "Connection error (BIND)"
-#: ../../../../inc/ldap.class.php:130 ../../../../inc/ldap.class.php:136
+#: ../../../../inc/Ldap.class.php:156 ../../../../inc/Ldap.class.php:161
msgid "Error al conectar (BIND)"
msgstr "Kapcsolat hiba (BIND)"
# "Error on searching objects in base DN"
-#: ../../../../inc/ldap.class.php:159 ../../../../inc/ldap.class.php:165
+#: ../../../../inc/Ldap.class.php:184 ../../../../inc/Ldap.class.php:189
msgid "Error al buscar objetos en DN base"
msgstr "Hiba a keresés közben"
# "Error on searching group RDN"
-#: ../../../../inc/ldap.class.php:193 ../../../../inc/ldap.class.php:199
-#: ../../../../inc/ldap.class.php:206 ../../../../inc/ldap.class.php:211
-#: ../../../../inc/ldap.class.php:221 ../../../../inc/ldap.class.php:226
+#: ../../../../inc/Ldap.class.php:217 ../../../../inc/Ldap.class.php:222
+#: ../../../../inc/Ldap.class.php:229 ../../../../inc/Ldap.class.php:233
+#: ../../../../inc/Ldap.class.php:242 ../../../../inc/Ldap.class.php:246
msgid "Error al buscar RDN de grupo"
msgstr "Hiba az RDN csoport keresése közben"
-# "Group RDN found"
-#: ../../../../inc/ldap.class.php:214
-msgid "RDN de grupo encontrado"
-msgstr "Alap RDN találat"
-
# "Error on searching user DN"
-#: ../../../../inc/ldap.class.php:278 ../../../../inc/ldap.class.php:284
-#: ../../../../inc/ldap.class.php:299 ../../../../inc/ldap.class.php:304
+#: ../../../../inc/Ldap.class.php:295 ../../../../inc/Ldap.class.php:300
+#: ../../../../inc/Ldap.class.php:314 ../../../../inc/Ldap.class.php:318
msgid "Error al buscar el DN del usuario"
msgstr "Hiba a DN felhasználó keresése közben"
# "Error on searching user on LDAP"
-#: ../../../../inc/ldap.class.php:291 ../../../../inc/ldap.class.php:296
+#: ../../../../inc/Ldap.class.php:307 ../../../../inc/Ldap.class.php:311
msgid "Error al localizar el usuario en LDAP"
msgstr "Hiba az LDAP felhasználók keresése közben"
# "Error on searching users group"
-#: ../../../../inc/ldap.class.php:380 ../../../../inc/ldap.class.php:386
+#: ../../../../inc/Ldap.class.php:392 ../../../../inc/Ldap.class.php:397
+#: ../../../../inc/LdapADS.class.php:99 ../../../../inc/LdapADS.class.php:104
msgid "Error al buscar el grupo de usuarios"
msgstr "Hiba a keresése közben"
-# "The user has not associated groups"
-#: ../../../../inc/ldap.class.php:392 ../../../../inc/ldap.class.php:398
-msgid "El usuario no pertenece al grupo"
-msgstr "a felhasználó nincs csoporthoz társítva"
+# "User deleted"
+#: ../../../../inc/Ldap.class.php:404
+#, fuzzy
+msgid "Usuario verificado en grupo"
+msgstr "Csoportot használja a:"
+
+# "No group found with that name"
+#: ../../../../inc/LdapADS.class.php:108 ../../../../inc/LdapADS.class.php:113
+msgid "No se encontró el grupo con ese nombre"
+msgstr "Nincs ilyen nevû csoport"
# "Clear Events"
-#: ../../../../inc/log.class.php:82
+#: ../../../../inc/Log.class.php:88
msgid "Vaciar Eventos"
msgstr "Események törlése"
# "Clear event log"
-#: ../../../../inc/log.class.php:83 ../../../../inc/tpl/eventlog.php:129
+#: ../../../../inc/Log.class.php:88
+#: ../../../../inc/themes/classic/eventlog.inc:100
+#: ../../../../inc/themes/material-blue/eventlog.inc:100
msgid "Vaciar registro de eventos"
msgstr "Esemény napló törlése"
# "Missing parameters"
-#: ../../../../inc/migrate.class.php:81
+#: ../../../../inc/Migrate.class.php:52
msgid "Faltan parámetros"
msgstr "Hiányzó paraméter"
-# "Wrong MySQL user/pass"
-#: ../../../../inc/migrate.class.php:140
-msgid "El usuario/clave de MySQL no es correcto"
-msgstr "Hibás MySQL felhasználó/jelszó"
-
-# "Please, check database connection user"
-#: ../../../../inc/migrate.class.php:141
-msgid "Verifique el usuario de conexión con la Base de Datos"
-msgstr "Kérem, ellenõrizze az adatbázis felhasználót"
-
# "Incompatible version"
-#: ../../../../inc/migrate.class.php:185
+#: ../../../../inc/Migrate.class.php:149
msgid "La versión no es compatible"
msgstr "Nem kompatibilis verzió"
# "Please, update to last version of phpPMS"
-#: ../../../../inc/migrate.class.php:186
+#: ../../../../inc/Migrate.class.php:150
msgid "Actualice a la última versión de phpPMS"
msgstr "Kérem, telepítse a phpPMS legfrissebb változatát"
# "Error on retrieving configuration"
-#: ../../../../inc/migrate.class.php:205
+#: ../../../../inc/Migrate.class.php:168
msgid "Error al obtener la configuración"
msgstr "Hiba a konfiguráció betöltése közben"
# "Error on cleaning table"
-#: ../../../../inc/migrate.class.php:256 ../../../../inc/migrate.class.php:270
+#: ../../../../inc/Migrate.class.php:211 ../../../../inc/Migrate.class.php:224
msgid "Error al vaciar tabla"
msgstr "Hiba a tábla törlése közben"
# "Current user is not application administrator"
-#: ../../../../inc/migrate.class.php:275
+#: ../../../../inc/Migrate.class.php:229
msgid "Usuario actual no es administrador de la aplicación"
msgstr "A jelenlegi felhasználó nem rendszergazda"
# "Unable to create customer"
-#: ../../../../inc/migrate.class.php:323
+#: ../../../../inc/Migrate.class.php:274
msgid "No es posible crear el cliente"
msgstr "Ügyfél létrehozása meghiusúlt"
# "Please, contact to developer"
-#: ../../../../inc/migrate.class.php:324
+#: ../../../../inc/Migrate.class.php:275
msgid "Contacte con el desarrollador"
msgstr "Kérem, keresse a fejlesztõt"
# "Import Customers"
-#: ../../../../inc/migrate.class.php:328
+#: ../../../../inc/Migrate.class.php:279
msgid "Importar Clientes"
msgstr "Ügyfelek importálása"
# "Records"
-#: ../../../../inc/migrate.class.php:330 ../../../../inc/migrate.class.php:404
-#: ../../../../inc/migrate.class.php:493 ../../../../inc/migrate.class.php:567
-#: ../../../../inc/migrate.class.php:659 ../../../../inc/migrate.class.php:722
-#: ../../../../inc/migrate.class.php:798 ../../../../inc/migrate.class.php:877
-#: ../../../../inc/migrate.class.php:948
+#: ../../../../inc/Migrate.class.php:281 ../../../../inc/Migrate.class.php:351
+#: ../../../../inc/Migrate.class.php:452 ../../../../inc/Migrate.class.php:525
+#: ../../../../inc/Migrate.class.php:633 ../../../../inc/Migrate.class.php:698
+#: ../../../../inc/Migrate.class.php:772 ../../../../inc/Migrate.class.php:862
+#: ../../../../inc/Migrate.class.php:933
msgid "Registros"
msgstr "Rekordok"
# "Error on retrieving customer"
-#: ../../../../inc/migrate.class.php:350
+#: ../../../../inc/Migrate.class.php:303
msgid "Error al obtener los clientes"
msgstr "Hiba az ügyfél betöltése közben"
# "Error on retrieving accounts"
-#: ../../../../inc/migrate.class.php:389
+#: ../../../../inc/Migrate.class.php:345
msgid "Error al obtener cuentas"
msgstr "Hiba a fiókok betöltése közben"
# "Customer not found"
-#: ../../../../inc/migrate.class.php:430
+#: ../../../../inc/Migrate.class.php:374
msgid "Cliente no encontrado"
msgstr "Nincs ügyfél találat"
# "Error on importing account"
-#: ../../../../inc/migrate.class.php:456
+#: ../../../../inc/Migrate.class.php:417
msgid "Error al migrar cuenta"
msgstr "Hiba a fiók importálása közben"
# "Error on retrieving accounts groups"
-#: ../../../../inc/migrate.class.php:478
+#: ../../../../inc/Migrate.class.php:446
msgid "Error al obtener los grupos de cuentas"
msgstr "Hiba a fiók csoportok betöltése közben"
# "Import Accounts Groups"
-#: ../../../../inc/migrate.class.php:491
+#: ../../../../inc/Migrate.class.php:450
msgid "Importar Grupos de Cuentas"
msgstr "Fiók csoportok importálása"
# "Error on accounts groups creation"
-#: ../../../../inc/migrate.class.php:514
+#: ../../../../inc/Migrate.class.php:472
msgid "Error al crear grupos de cuentas"
msgstr "Hiba a fiók csoportok létrehozása közben"
# "Error on retrieving accounts history"
-#: ../../../../inc/migrate.class.php:552
+#: ../../../../inc/Migrate.class.php:519
msgid "Error al obtener el historico de cuentas"
msgstr "Hiba a fiókok elõzményeinek betöltése közben"
# "Import Accounts History"
-#: ../../../../inc/migrate.class.php:565
+#: ../../../../inc/Migrate.class.php:523
msgid "Importar Histórico de Cuentas"
msgstr "Fiók elõzmények importálása"
# "Error on creating accounts history"
-#: ../../../../inc/migrate.class.php:618
+#: ../../../../inc/Migrate.class.php:592
msgid "Error al crear historico de cuentas"
msgstr "Hiba a fiók elõzmények létrehozása közben"
# "Error on retrieving accounts files"
-#: ../../../../inc/migrate.class.php:644
+#: ../../../../inc/Migrate.class.php:627
msgid "Error al obtener los archivos de cuentas"
msgstr "Hiba a fiókok fájljainak betöltése közben"
# "Import Accounts Files"
-#: ../../../../inc/migrate.class.php:657
+#: ../../../../inc/Migrate.class.php:631
msgid "Importar Archivos de Cuentas"
msgstr "Fiók fájljainak importálása"
# "Error on creating accounts files"
-#: ../../../../inc/migrate.class.php:685
+#: ../../../../inc/Migrate.class.php:663
msgid "Error al crear archivos de cuentas"
msgstr "Hiba a fiók fájlok létrehozása közben"
# "Error on retrieving accounts categories"
-#: ../../../../inc/migrate.class.php:707
+#: ../../../../inc/Migrate.class.php:692
msgid "Error al obtener las categorías de cuentas"
msgstr "Hiba a fiók kategóriák elérése közben"
# "Import Accounts Categories"
-#: ../../../../inc/migrate.class.php:720
+#: ../../../../inc/Migrate.class.php:696
msgid "Importar Categorías de Cuentas"
msgstr "Fiók kategóriák importálása"
# "Error on retrieving accounts categories"
-#: ../../../../inc/migrate.class.php:744
+#: ../../../../inc/Migrate.class.php:718
msgid "Error al crear categorías de cuentas"
msgstr "Hiba a fiók kategóriák elérése közben"
# "Error on retrieving users"
-#: ../../../../inc/migrate.class.php:783
+#: ../../../../inc/Migrate.class.php:766
msgid "Error al obtener los usuarios"
msgstr "Hiba a felhasználók betöltése közben"
# "Import Users"
-#: ../../../../inc/migrate.class.php:796
+#: ../../../../inc/Migrate.class.php:770
msgid "Importar Usuarios"
msgstr "Felhasználók importálása"
# "Error on creating users"
-#: ../../../../inc/migrate.class.php:839
+#: ../../../../inc/Migrate.class.php:827
msgid "Error al crear usuarios"
msgstr "Hiba a profil létrehozása közben"
# "Error on retrieving users groups"
-#: ../../../../inc/migrate.class.php:862
+#: ../../../../inc/Migrate.class.php:856
msgid "Error al obtener los grupos de usuarios"
msgstr "Hiba a felhasználói csoportok betöltése közben"
# "Import Users Groups"
-#: ../../../../inc/migrate.class.php:875
+#: ../../../../inc/Migrate.class.php:860
msgid "Importar Grupos de Usuarios"
msgstr "Felhasználó csoportok importálása"
# "Error on adding users groups"
-#: ../../../../inc/migrate.class.php:900
+#: ../../../../inc/Migrate.class.php:886
msgid "Error al crear los grupos de usuarios"
msgstr "Hiba a felhasználói csoportok hozzáadás közben"
# "Import Configuration"
-#: ../../../../inc/migrate.class.php:946
+#: ../../../../inc/Migrate.class.php:931
msgid "Importar Configuración"
msgstr "Konfiguráció importálása"
# "Edit Profile"
-#: ../../../../inc/profiles.class.php:258
+#: ../../../../inc/Profile.class.php:69 ../../../../inc/Profile.class.php:123
+#: ../../../../inc/Profile.class.php:128
+#, fuzzy
+msgid "Migrar Perfiles"
+msgstr "Profilok"
+
+# "Error on retrieving accounts"
+#: ../../../../inc/Profile.class.php:69
+#, fuzzy
+msgid "Error al obtener perfiles"
+msgstr "Hiba a fiókok betöltése közben"
+
+# "Application successfully updated"
+#: ../../../../inc/Profile.class.php:126
+#, fuzzy
+msgid "Operación realizada correctamente"
+msgstr "Az alkalmazás frissítése sikeres"
+
+# "You don't have permission to do this operation"
+#: ../../../../inc/Profile.class.php:128
+#, fuzzy
+msgid "Fallo al realizar la operación"
+msgstr "Hiba a elõzmények mester jelszavának frissítése közben"
+
+# "Incorrect parameters"
+#: ../../../../inc/ProfileBase.class.php:164
+#, fuzzy
+msgid "Datos de perfil incorrectos"
+msgstr "Kettözõtt profil név"
+
+# "Delete Profile"
+#: ../../../../inc/ProfileBase.class.php:550
+#: ../../../../web/UsersMgmtC.class.php:274
+msgid "Eliminar Perfil"
+msgstr "Profil törlése"
+
+# "Edit Profile"
+#: ../../../../inc/ProfileBase.class.php:593
msgid "Modificar Perfil"
msgstr "Profil módosítás"
-# "Edit Account"
-#: ../../../../inc/tpl/accounts.php:63
-msgid "Editar Cuenta"
-msgstr "Fiók módosítás"
+# "Invalid Id"
+#: ../../../../inc/SyspassImport.class.php:111
+#: ../../../../inc/SyspassImport.class.php:136
+#: ../../../../inc/SyspassImport.class.php:161
+#, fuzzy
+msgid "Formato de XML inválido"
+msgstr "Érvénytelen Id"
-# "Account name"
-#: ../../../../inc/tpl/accounts.php:178
-msgid "Nombre de cuenta"
-msgstr "Fiók név"
-
-# "Search down or enter"
-#: ../../../../inc/tpl/accounts.php:197
-msgid "Buscar en desplegable o introducir"
-msgstr "Keress lentebb, vagy nyomj entert"
-
-# "Access URL or IP"
-#: ../../../../inc/tpl/accounts.php:223
-msgid "URL o IP de acceso"
-msgstr "URL vagy IP elérés"
-
-# "Access user"
-#: ../../../../inc/tpl/accounts.php:239
-msgid "Usuario de acceso"
-msgstr "Felhasználó elérése"
-
-# "The generated password will be shown here"
-#: ../../../../inc/tpl/accounts.php:255 ../../../../inc/tpl/editpass.php:61
-msgid "La clave generada se mostrará aquí"
-msgstr "A generált jelszó megjelenítése itt"
-
-# "Notes about the account"
-#: ../../../../inc/tpl/accounts.php:273
-msgid "Notas sobre la cuenta"
-msgstr "Jegyzetek a fiókokról"
-
-# "Permissions"
-#: ../../../../inc/tpl/accounts.php:279
-msgid "Permisos"
-msgstr "Jofosultságok"
-
-# "Enable Edit"
-#: ../../../../inc/tpl/accounts.php:306 ../../../../inc/tpl/accounts.php:337
-msgid "Hablitar edición"
-msgstr "Szerkesztés engedélyezése"
-
-# "YES"
-#: ../../../../inc/tpl/accounts.php:307 ../../../../inc/tpl/accounts.php:338
-#: ../../../../inc/tpl/accounts.php:601 ../../../../inc/tpl/masterpass.php:178
-#: ../../../../inc/tpl/migrate.php:132
-msgid "SI"
-msgstr "Igen"
-
-# "NO"
-#: ../../../../inc/tpl/accounts.php:307 ../../../../inc/tpl/accounts.php:338
-#: ../../../../inc/tpl/accounts.php:599 ../../../../inc/tpl/masterpass.php:81
-#: ../../../../inc/tpl/masterpass.php:100
-#: ../../../../inc/tpl/masterpass.php:176 ../../../../inc/tpl/migrate.php:81
-#: ../../../../inc/tpl/migrate.php:130
-msgid "NO"
-msgstr "Nem"
-
-# "Groups"
-#: ../../../../inc/tpl/accounts.php:314 ../../../../inc/tpl/profiles.php:90
-msgid "Grupos"
-msgstr "Csoportok"
-
-# "Files"
-#: ../../../../inc/tpl/accounts.php:360 ../../../../inc/tpl/profiles.php:65
-msgid "Archivos"
-msgstr "Fájlok"
-
-# "Drop files here (max. 5) or click to select"
-#: ../../../../inc/tpl/accounts.php:373
-msgid "Soltar archivos aquí (max. 5) o click para seleccionar"
-msgstr "Dobja el a fájlokat (max. 5) vagy kattintson a választáshoz"
-
-# "Maximum file size"
-#: ../../../../inc/tpl/accounts.php:373 ../../../../inc/tpl/config.php:204
-msgid "Tamaño máximo de archivo"
-msgstr "Maximális fájl méret"
-
-# "History"
-#: ../../../../inc/tpl/accounts.php:385
-msgid "Historial"
-msgstr "Elõzmények"
-
-# "Select date"
-#: ../../../../inc/tpl/accounts.php:402
-msgid "Seleccionar fecha"
-msgstr "Válassz dátumot"
-
-# "Last Modification"
-#: ../../../../inc/tpl/accounts.php:410 ../../../../inc/tpl/users.php:193
-msgid "Última Modificación"
-msgstr "Utoljára módosítva"
-
-# "by"
-#: ../../../../inc/tpl/accounts.php:412
-msgid "por"
-msgstr "által"
-
-# "Visits"
-#: ../../../../inc/tpl/accounts.php:422
-msgid "Visitas"
-msgstr "Látogatók"
-
-# "Date Added"
-#: ../../../../inc/tpl/accounts.php:426
-msgid "Fecha Alta"
-msgstr "Dátum hozzáadva"
-
-# "Creator"
-#: ../../../../inc/tpl/accounts.php:430
-msgid "Creador"
-msgstr "Készítõ"
-
-# "Main Group"
-#: ../../../../inc/tpl/accounts.php:434
-msgid "Grupo Principal"
-msgstr "Fõcsoport"
-
-# "Secondary Users"
-#: ../../../../inc/tpl/accounts.php:439
-msgid "Usuarios Secundarios"
-msgstr "Másodlagos felhasználók"
-
-# "Secondary Groups"
-#: ../../../../inc/tpl/accounts.php:460
-msgid "Grupos Secundarios"
-msgstr "Másodlagos csoportok"
-
-# "Date Modified"
-#: ../../../../inc/tpl/accounts.php:482
-msgid "Fecha Edición"
-msgstr "Adat módosítva"
-
-# "Editor"
-#: ../../../../inc/tpl/accounts.php:486
-msgid "Editor"
-msgstr "Szerkesztõ"
-
-# "View Current"
-#: ../../../../inc/tpl/accounts.php:508
-msgid "Ver Actual"
-msgstr "Általános"
-
-# "Back"
-#: ../../../../inc/tpl/accounts.php:513 ../../../../inc/tpl/editpass.php:85
-#: ../../../../inc/tpl/request.php:72
-msgid "Atrás"
-msgstr "Vissza"
-
-# "Restore account from this point"
-#: ../../../../inc/tpl/accounts.php:520
-msgid "Restaurar cuenta desde este punto"
-msgstr "Restore véve ezen a ponton"
-
-# "Edit Account Password"
-#: ../../../../inc/tpl/accounts.php:549 ../../../../inc/tpl/editpass.php:35
-msgid "Modificar Clave de Cuenta"
-msgstr "Fiók jelszavának szerkesztése"
-
-# "Select Customer"
-#: ../../../../inc/tpl/accounts.php:578 ../../../../inc/tpl/search.php:89
-msgid "Seleccionar Cliente"
-msgstr "Válassz ügyfelet"
-
-# "No results"
-#: ../../../../inc/tpl/accounts.php:580 ../../../../inc/tpl/accounts.php:585
-#: ../../../../inc/tpl/config.php:601 ../../../../inc/tpl/config.php:606
-#: ../../../../inc/tpl/search.php:89 ../../../../inc/tpl/search.php:90
-#: ../../../../inc/tpl/users.php:231 ../../../../inc/tpl/users.php:236
-msgid "Sin resultados"
-msgstr "Nincsenek eredmények"
-
-# "Select category"
-#: ../../../../inc/tpl/accounts.php:583 ../../../../inc/tpl/search.php:90
-msgid "Seleccionar Categoría"
-msgstr "Válassz kategóriát"
-
-# "Select secondary groups"
-#: ../../../../inc/tpl/accounts.php:588
-msgid "Seleccionar grupos secundarios"
-msgstr " Válassz másodlagos csoportot"
-
-# "Select users"
-#: ../../../../inc/tpl/accounts.php:591
-msgid "Seleccionar usuarios"
-msgstr "Válassz felhasználót"
-
-# "Last backup"
-#: ../../../../inc/tpl/backup.php:42
-msgid "Último backup"
-msgstr "Utolsó Archiválás"
-
-# "There're no backups available"
-#: ../../../../inc/tpl/backup.php:42
-msgid "No se encontraron backups"
-msgstr "Nincsenek elérhetõ Archívumok"
-
-# "Result"
-#: ../../../../inc/tpl/backup.php:48
-msgid "Resultado"
-msgstr "Eredmény"
-
-# "Download Current"
-#: ../../../../inc/tpl/backup.php:56
-msgid "Descargar Actual"
-msgstr "Aktuális letöltés"
-
-# "There're no backups for download"
-#: ../../../../inc/tpl/backup.php:64
-msgid "No hay backups para descargar"
+#: ../../../../inc/SyspassImport.class.php:111
+#, fuzzy
+msgid "No hay categorías para importar"
msgstr "Nincsenek letölthetõ Archívumok"
-# "Category name"
-#: ../../../../inc/tpl/categories.php:42
-msgid "Nombre de la categoría"
-msgstr "Kategória név"
-
-# "Category description"
-#: ../../../../inc/tpl/categories.php:50
-msgid "Descripción de la categoría"
-msgstr "Kategória leírás"
-
-# "Site"
-#: ../../../../inc/tpl/config.php:87
-msgid "Sitio"
-msgstr "Oldal"
-
-# "Language"
-#: ../../../../inc/tpl/config.php:95
-msgid "Idioma"
-msgstr "Nyelv"
-
-# "Session timeout (s)"
-#: ../../../../inc/tpl/config.php:109
-msgid "Timeout de sesión (s)"
-msgstr "Munkamenet idõ"
-
-# "Enable event log"
-#: ../../../../inc/tpl/config.php:118
-msgid "Habilitar log de eventos"
-msgstr "Esemény napló engedélyezése"
-
-# "Enable debug"
-#: ../../../../inc/tpl/config.php:129
-msgid "Habilitar depuración"
-msgstr "Nyomkövetés engedélyezése"
-
-# "Maintenance mode."
-#: ../../../../inc/tpl/config.php:140
-msgid "Modo mantenimiento"
-msgstr "Fenntartás mód"
-
-# "Check for updates"
-#: ../../../../inc/tpl/config.php:151
-msgid "Comprobar actualizaciones"
-msgstr "Frissítések keresése"
-
-# "Account name as link"
-#: ../../../../inc/tpl/config.php:162
-msgid "Nombre de cuenta como enlace"
-msgstr "Fiók neve linkként"
-
-# "Files management"
-#: ../../../../inc/tpl/config.php:173
-msgid "Gestión de archivos"
-msgstr "Fájl menedzsment"
-
-# "Global searches"
-#: ../../../../inc/tpl/config.php:184
-msgid "Búsquedas globales"
-msgstr "Gblobális Keresések"
-
-# "Allowed file extensions"
-#: ../../../../inc/tpl/config.php:195
-msgid "Extensiones de archivos permitidas"
-msgstr "Engedélyezett fájl kiterjesztés"
-
-# "Results per page"
-#: ../../../../inc/tpl/config.php:215
-msgid "Resultados por página"
-msgstr "Eredmény / oldal"
-
-# Results like Cards
-#: ../../../../inc/tpl/config.php:231
+# "There're no backups for download"
+#: ../../../../inc/SyspassImport.class.php:136
#, fuzzy
-msgid "Resultados en Tarjetas"
-msgstr "Results like Cards"
+msgid "No hay clientes para importar"
+msgstr "Ügyfelek importálása"
-# "Wiki"
-#: ../../../../inc/tpl/config.php:244
-msgid "Wiki"
-msgstr "Wiki"
-
-# "Enable Wiki links"
-#: ../../../../inc/tpl/config.php:250
-msgid "Habilitar enlaces Wiki"
-msgstr "Wiki linkek engedélyezése"
-
-# "Wiki search URL"
-#: ../../../../inc/tpl/config.php:261
-msgid "URL de búsqueda Wiki"
-msgstr "Wiki keresés URL"
-
-# "Wiki page URL"
-#: ../../../../inc/tpl/config.php:271
-msgid "URL de página en Wiki"
-msgstr "Wiki oldal URL"
-
-# "Account name preffix"
-#: ../../../../inc/tpl/config.php:281
-msgid "Prefijo para nombre de cuenta"
-msgstr "Fiók név elõtag"
-
-# "LDAP"
-#: ../../../../inc/tpl/config.php:294
-msgid "LDAP"
-msgstr "LDAP"
-
-# "Enable LDAP"
-#: ../../../../inc/tpl/config.php:301
-msgid "Habilitar LDAP"
-msgstr "LDAP engedélyezése"
-
-# "Server"
-#: ../../../../inc/tpl/config.php:312 ../../../../inc/tpl/config.php:425
-msgid "Servidor"
-msgstr "Szerver"
-
-# "Bind User"
-#: ../../../../inc/tpl/config.php:322
-msgid "Usuario de conexión"
-msgstr "Bind felhasználó"
-
-# "Bind Password"
-#: ../../../../inc/tpl/config.php:332
-msgid "Clave de conexión"
-msgstr "Bind jelszó"
-
-# "Search base"
-#: ../../../../inc/tpl/config.php:342
-msgid "Base de búsqueda"
-msgstr "Keresés"
-
-# Default Group
-#: ../../../../inc/tpl/config.php:362
+# "There're no backups for download"
+#: ../../../../inc/SyspassImport.class.php:161
#, fuzzy
-msgid "Grupo por Defecto"
-msgstr "Default Group"
-
-# Default Profile
-#: ../../../../inc/tpl/config.php:371
-#, fuzzy
-msgid "Perfil por Defecto"
-msgstr "Default Profile"
-
-# Active Directory
-#: ../../../../inc/tpl/config.php:380
-#, fuzzy
-msgid "Active Directory"
-msgstr "Active Directory"
-
-# "Check"
-#: ../../../../inc/tpl/config.php:391
-msgid "Comprobar"
-msgstr "Ellenõrzés"
-
-# "Check LDAP connection"
-#: ../../../../inc/tpl/config.php:394
-msgid "Comprobar conexión con LDAP"
-msgstr "LDAP kapcsolat ellenõrzése"
-
-# "Module unavilable"
-#: ../../../../inc/tpl/config.php:401 ../../../../inc/util.class.php:141
-msgid "Módulo no disponible"
-msgstr "Modul nem elérhetõ"
-
-# "Mail"
-#: ../../../../inc/tpl/config.php:409
-msgid "Correo"
-msgstr "Mail"
-
-# "Enable email notifications"
-#: ../../../../inc/tpl/config.php:415
-msgid "Habilitar notificaciones de correo"
-msgstr "Email értesítés engedélyezése"
-
-# "Port"
-#: ../../../../inc/tpl/config.php:434
-msgid "Puerto"
-msgstr "Port"
-
-# "Enable Authentication"
-#: ../../../../inc/tpl/config.php:443
-msgid "Habilitar Autentificación"
-msgstr "Engedélyezése Hitelesítés"
-
-# "Security"
-#: ../../../../inc/tpl/config.php:471
-msgid "Seguridad"
-msgstr "Biztonság"
-
-# "Disabled"
-#: ../../../../inc/tpl/config.php:477
-msgid "Deshabilitada"
-msgstr "Inaktív"
-
-# "Recipient email address"
-#: ../../../../inc/tpl/config.php:488
-msgid "Dirección de correo de envío"
-msgstr "Címzett email címe"
-
-# "Enable requests by email"
-#: ../../../../inc/tpl/config.php:497
-msgid "Habilitar peticiones por correo"
-msgstr "Email kérések engedélyezése"
-
-# "Add extension"
-#: ../../../../inc/tpl/config.php:541
-msgid "Añadir extensión"
-msgstr "Kiterjesztés hozzáadása"
-
-# "Delete extension"
-#: ../../../../inc/tpl/config.php:542
-msgid "Eliminar extensión"
-msgstr "Kiterjesztés törlése"
-
-# "Add filter"
-#: ../../../../inc/tpl/config.php:570
-msgid "Añadir filtro"
-msgstr "Szûrõ hozzáadása"
-
-# "Delete filter"
-#: ../../../../inc/tpl/config.php:571
-msgid "Eliminar filtro"
-msgstr "Szûrõ törlése"
-
-# "Select Group"
-#: ../../../../inc/tpl/config.php:599 ../../../../inc/tpl/users.php:234
-msgid "Seleccionar Grupo"
-msgstr "Válassz csoportot"
-
-# "Select Profile"
-#: ../../../../inc/tpl/config.php:604 ../../../../inc/tpl/users.php:229
-msgid "Seleccionar Perfil"
-msgstr "Válassz profilt"
-
-# "Customer name"
-#: ../../../../inc/tpl/customers.php:42
-msgid "Nombre del cliente"
-msgstr "Ügyfél név"
-
-# "Customer description"
-#: ../../../../inc/tpl/customers.php:50
-msgid "Descripción del cliente"
-msgstr "Ügyfél leírás"
-
-# "Event Log"
-#: ../../../../inc/tpl/eventlog.php:37 ../../../../inc/tpl/main.php:57
-msgid "Registro de Eventos"
-msgstr "Esemény napló"
-
-# "Date / Time"
-#: ../../../../inc/tpl/eventlog.php:56
-msgid "Fecha / Hora"
-msgstr "Dátum / Idõ"
-
-# "Event"
-#: ../../../../inc/tpl/eventlog.php:59
-msgid "Evento"
-msgstr "Esemény"
-
-# "IP"
-#: ../../../../inc/tpl/eventlog.php:65
-msgid "IP"
-msgstr "IP"
-
-# "Group name"
-#: ../../../../inc/tpl/groups.php:41
-msgid "Nombre del grupo"
-msgstr "Csoport név"
-
-# "Group description"
-#: ../../../../inc/tpl/groups.php:47
-msgid "Descripción del grupo"
-msgstr "Csoport leírás"
-
-# "Installation finished"
-#: ../../../../inc/tpl/install.php:36
-msgid "Instalación finalizada"
-msgstr "A telepítés befejezõdött"
-
-# "Click here to access"
-#: ../../../../inc/tpl/install.php:37
-msgid "Pulse aquí para acceder"
-msgstr ""
-"Kattinst here a "
-"bejelentkezéshez"
-
-# "Installation"
-#: ../../../../inc/tpl/install.php:47
-msgid "Instalación "
-msgstr "Telepítés"
-
-# "This PHP version is vulnerable to NULL Byte attack CVE-2006-7243)"
-#: ../../../../inc/tpl/install.php:55
-msgid "La version de PHP es vulnerable al ataque NULL Byte (CVE-2006-7243)"
-msgstr ""
-"Ez a PHP verzió sérülékeny a NULL Byte támadásokkal szemben (CVE-2006-7243)"
-
-# "Please update PHP version to run sysPass in a secure way"
-#: ../../../../inc/tpl/install.php:56
-msgid "Actualice la versión de PHP para usar sysPass de forma segura"
-msgstr "Kérem, frissítse a PHP verziót, hogy a sysPass biztonságos legyen"
-
-# "Cannot find random number generator."
-#: ../../../../inc/tpl/install.php:60
-msgid "No se encuentra el generador de números aleatorios."
-msgstr "Nem találom a véletlen szám generátort"
-
-# "Without this function, an attacker could take your account on password reset."
-#: ../../../../inc/tpl/install.php:61
-msgid ""
-"Sin esta función un atacante puede utilizar su cuenta al resetear la clave"
-msgstr "E funkció nélkül egy támadó alapállapotba állíthatja jelszavát"
-
-# Create sysPass admin account
-#: ../../../../inc/tpl/install.php:88
-#, fuzzy
-msgid "Crear cuenta de admin de sysPass"
-msgstr "Create sysPass admin account"
-
-# sysPass administrator's login
-#: ../../../../inc/tpl/install.php:91
-#, fuzzy
-msgid "Login del usuario administrador de sysPass"
-msgstr "sysPass administrator's login"
-
-# Show Password
-#: ../../../../inc/tpl/install.php:99 ../../../../inc/tpl/install.php:100
-#: ../../../../inc/tpl/install.php:114 ../../../../inc/tpl/install.php:115
-#: ../../../../inc/tpl/install.php:140 ../../../../inc/tpl/install.php:141
-#, fuzzy
-msgid "Mostrar Clave"
-msgstr "Show Password"
-
-# "DB Configuration"
-#: ../../../../inc/tpl/install.php:127
-msgid "Configurar BBDD"
-msgstr "Adatbázis beállítások"
-
-# User login with with database administrative rights
-#: ../../../../inc/tpl/install.php:133
-#, fuzzy
-msgid "Login de usuario con permisos de administrador de MySQL"
-msgstr "User login with with database administrative rights"
-
-# "DB Username"
-#: ../../../../inc/tpl/install.php:134 ../../../../inc/tpl/install.php:135
-#: ../../../../inc/tpl/migrate.php:40
-msgid "Usuario BBDD"
-msgstr "DB felhasználónév"
-
-# "DB Password"
-#: ../../../../inc/tpl/install.php:142 ../../../../inc/tpl/install.php:143
-#: ../../../../inc/tpl/migrate.php:49
-msgid "Clave BBDD"
-msgstr "Adatbázis jelszó"
-
-# sysPass database name
-#: ../../../../inc/tpl/install.php:149
-#, fuzzy
-msgid "Nombre de la base de datos para sysPass"
-msgstr "ÍsysPass database name"
-
-# "DB Name"
-#: ../../../../inc/tpl/install.php:150 ../../../../inc/tpl/install.php:151
-#: ../../../../inc/tpl/migrate.php:57
-msgid "Nombre BBDD"
-msgstr "DB név"
-
-# sysPass database server name
-#: ../../../../inc/tpl/install.php:158
-#, fuzzy
-msgid "Nombre del servidor de la base de datos de sysPass"
-msgstr "sysPass database server name"
-
-# "DB Server"
-#: ../../../../inc/tpl/install.php:159 ../../../../inc/tpl/install.php:160
-#: ../../../../inc/tpl/migrate.php:66
-msgid "Servidor BBDD"
-msgstr "DB szerver"
-
-# "It does not create or verify the user's permissions on the DB"
-#: ../../../../inc/tpl/install.php:168
-msgid "No crea ni verifica los permisos del usuario sobre la BBDD"
-msgstr "Ez nem hozza létre, illetve erõsíti meg az adatbázis jogosultságokat"
-
-# "Hosting Mode"
-#: ../../../../inc/tpl/install.php:170 ../../../../inc/tpl/install.php:191
-#: ../../../../inc/tpl/install.php:194
-msgid "Modo Hosting"
-msgstr "Hosting mód"
-
-# "Install"
-#: ../../../../inc/tpl/install.php:177
-msgid "Instalar"
-msgstr "Telepítés"
-
-# "Login"
-#: ../../../../inc/tpl/login.php:51 ../../../../inc/upgrade.class.php:50
-msgid "Acceder"
-msgstr "Belépés"
-
-# "Lost your password?"
-#: ../../../../inc/tpl/login.php:65
-msgid "¿Olvidó su clave?"
-msgstr "Elvesztette jelszavát?"
-
-# "Session finished"
-#: ../../../../inc/tpl/login.php:71 ../../../../js/js.php:47
-msgid "Sesión finalizada"
-msgstr "Munkamenet befejezõdött"
-
-# "Application successfully updated"
-#: ../../../../inc/tpl/login.php:78
-msgid "Aplicación actualizada correctamente"
-msgstr "Az alkalmazás frissítése sikeres"
-
-# New search interface with list or card like styles
-#: ../../../../inc/tpl/login.php:84
-#, fuzzy
-msgid "Nuevo interface de búsqueda con estilo de lista o tipo tarjeta"
-msgstr "New search interface with list or card like styles"
-
-# Users and groups selection for account access
-#: ../../../../inc/tpl/login.php:85
-#, fuzzy
-msgid "Selección de grupos y usuarios de acceso a cuentas"
-msgstr "Users and groups selection for account access"
-
-# Drag&Drop for files uploading
-#: ../../../../inc/tpl/login.php:86
-#, fuzzy
-msgid "Drag&Drop para subida de archivos"
-msgstr "Drag&Drop for files uploading"
-
-# Copy Password to Clipboard
-#: ../../../../inc/tpl/login.php:87
-#, fuzzy
-msgid "Copiar clave al portapapeles"
-msgstr "Jelszó másolása a vágólapra"
-
-# "View account history"
-#: ../../../../inc/tpl/login.php:88
-#, fuzzy
-msgid "Historial de cuentas y restauración"
-msgstr "Fiók elõzmények"
-
-# "Categories management"
-#: ../../../../inc/tpl/login.php:89
-#, fuzzy
-msgid "Nueva gestión de categorías y clientes"
-msgstr "Kategória Menedzsment"
-
-# Reset password function for users
-#: ../../../../inc/tpl/login.php:90
-#, fuzzy
-msgid "Función de olvido de claves para usuarios"
-msgstr "Reset password function for users"
-
-# Improved Active Directory and LDAP integration
-#: ../../../../inc/tpl/login.php:91
-#, fuzzy
-msgid "Integración con Active Directory y LDAP mejorada"
-msgstr "Improved Active Directory and LDAP integration"
-
-# "Enable email notifications"
-#: ../../../../inc/tpl/login.php:92
-#, fuzzy
-msgid "Autentificación para notificaciones por correo"
-msgstr "Email értesítés engedélyezése"
-
-# Global account searching for unprivileged users
-#: ../../../../inc/tpl/login.php:93
-#, fuzzy
-msgid "Búsqueda global de cuentas para usuarios sin permisos"
-msgstr "Global account searching for unprivileged users"
-
-# "Request for Account Modification"
-#: ../../../../inc/tpl/login.php:94
-#, fuzzy
-msgid "Solicitudes de modificación de cuentas para usuarios sin permisos"
-msgstr "Kérés fiók módosításához"
-
-# "Import accounts from external sources"
-#: ../../../../inc/tpl/login.php:95
-#, fuzzy
-msgid "Importación de cuentas desde KeePass, KeePassX y CSV"
-msgstr "Külsõ forrásból származó felhasználók importálása"
-
-# "Customers Management"
-#: ../../../../inc/tpl/login.php:96
-#, fuzzy
-msgid "Función de copiar cuentas"
-msgstr "Ügyfél Menedzsment"
-
-# Code optimization and faster loading
-#: ../../../../inc/tpl/login.php:97
-#, fuzzy
-msgid "Optimización del código y mayor rapidez de carga"
-msgstr "Code optimization and faster loading"
-
-# Improved security to prevent XSS and SQL injection
-#: ../../../../inc/tpl/login.php:98
-#, fuzzy
-msgid "Mejoras de seguridad en XSS e inyección SQL"
-msgstr "Improved security to prevent XSS and SQL injection"
-
-# "New Category"
-#: ../../../../inc/tpl/login.php:101 ../../../../inc/tpl/login.php:102
-#, fuzzy
-msgid "Nuevas Características"
-msgstr "Új Kategória"
-
-# "Change user password"
-#: ../../../../inc/tpl/main.php:37
-msgid "Cambiar clave de usuario"
-msgstr "Változatsd meg a felhasználói jelszót"
-
-# "Logout"
-#: ../../../../inc/tpl/main.php:44
-msgid "Salir"
-msgstr "Kijelentkezés"
-
-# "Search"
-#: ../../../../inc/tpl/main.php:52
-msgid "Buscar"
-msgstr "Keresés"
-
-# "Customer and Categories management"
-#: ../../../../inc/tpl/main.php:55
-msgid "Gestión de Clientes y Categorías"
-msgstr "Ügyfél és Kategória Menedzsment"
-
-# "Last Change"
-#: ../../../../inc/tpl/masterpass.php:43
-#: ../../../../inc/tpl/masterpass.php:128
-msgid "Último cambio"
-msgstr "Utolsó változtatás"
-
-# "Current Master Password"
-#: ../../../../inc/tpl/masterpass.php:52
-msgid "Clave Maestra actual"
-msgstr "Jelenlegki mester jelszó"
-
-# "New Master Password"
-#: ../../../../inc/tpl/masterpass.php:60
-msgid "Nueva Clave Maestra"
-msgstr "Új mester jelszó"
-
-# "New Master Password (repeat)"
-#: ../../../../inc/tpl/masterpass.php:69
-msgid "Nueva Clave Maestra (repetir)"
-msgstr "Új mester jelszó (megerõsítés)"
-
-# "Don't modify accounts"
-#: ../../../../inc/tpl/masterpass.php:77
-msgid "No modificar cuentas"
-msgstr "Ne módosítsa a fiókokat"
-
-# "Confirm Change"
-#: ../../../../inc/tpl/masterpass.php:87
-msgid "Confirmar cambio"
-msgstr "Változás megerõsítése"
-
-# "Warning"
-#: ../../../../inc/tpl/masterpass.php:90 ../../../../inc/tpl/masterpass.php:93
-#: ../../../../inc/tpl/masterpass.php:96 ../../../../inc/tpl/migrate.php:78
-msgid "Atención"
-msgstr "Figyelem"
-
-# "You should save the new password on a secure place"
-#: ../../../../inc/tpl/masterpass.php:91
-msgid "Guarde la nueva clave en un lugar seguro."
-msgstr "Tárold biztonságos helyen az új jelszót"
-
-# "All accounts passwords will be encrypted again."
-#: ../../../../inc/tpl/masterpass.php:94
-msgid "Se volverán a encriptar las claves de todas las cuentas."
-msgstr "Minden fiók jelszó újra titkosítva lesz"
-
-# "All users must re-enter the new master password."
-#: ../../../../inc/tpl/masterpass.php:97
-msgid "Los usuarios deberán de introducir la nueva clave maestra."
-msgstr "Minden felhasználónak úrja be kell írnia az új mester jelszót"
-
-# Temporary Password
-#: ../../../../inc/tpl/masterpass.php:121
-#, fuzzy
-msgid "Clave Temporal"
-msgstr "Temporary Password"
-
-# Not generated
-#: ../../../../inc/tpl/masterpass.php:135
-#: ../../../../inc/tpl/masterpass.php:149
-#, fuzzy
-msgid "No generada"
-msgstr "Not generated"
-
-#: ../../../../inc/tpl/masterpass.php:142
-#, fuzzy
-msgid "Válido hasta"
-msgstr "Valid until"
-
-# Generate
-#: ../../../../inc/tpl/masterpass.php:164
-#, fuzzy
-msgid "Generar"
-msgstr "Generate"
-
-# "phpPMS Import"
-#: ../../../../inc/tpl/migrate.php:33
-msgid "Importar phpPMS"
-msgstr "phpPMS importálása"
-
-# "Confirm"
-#: ../../../../inc/tpl/migrate.php:75
-msgid "Confirmar"
-msgstr "Megerõsítés"
-
-# "Current data will be removed (except current user)"
-#: ../../../../inc/tpl/migrate.php:79
-msgid "Los datos actuales serán borrados (excepto el usuario actual)"
-msgstr "Jelenlegi adatok törlése (kivéve a jelenlegi felhasználót)"
-
-# "Start"
-#: ../../../../inc/tpl/migrate.php:97
-msgid "Iniciar"
-msgstr "Start"
-
-# CSV/XML Import
-#: ../../../../inc/tpl/migrate.php:103
-#, fuzzy
-msgid "Importar CSV/XML"
-msgstr "Import CSV/XML"
-
-# "Drop files here or click to select"
-#: ../../../../inc/tpl/migrate.php:117
-msgid "Soltar archivo aquí o click para seleccionar"
-msgstr "Dobja el a fájlokat vagy kattintson a választáshoz"
-
-# "Request Password Change"
-#: ../../../../inc/tpl/passreset.php:47
-msgid "Solicitud de Cambio de Clave"
-msgstr "Kérés jelszó módosítás"
-
-# "User login"
-#: ../../../../inc/tpl/passreset.php:50
-msgid "Login del Usuario"
-msgstr "Felhasználó bejelentkezés"
-
-# "User Email"
-#: ../../../../inc/tpl/passreset.php:55
-msgid "Email del Usuario"
-msgstr "Felhasználó Email"
-
-# "Email"
-#: ../../../../inc/tpl/passreset.php:56 ../../../../inc/tpl/users.php:116
-msgid "Email"
-msgstr "Email"
-
-# "New Password"
-#: ../../../../inc/tpl/passreset.php:61
-msgid "Nueva Clave"
-msgstr "Új jelszó"
-
-# "New Password (Verify)"
-#: ../../../../inc/tpl/passreset.php:69
-msgid "Nueva Clave (Verificar)"
-msgstr "Új jelszó (megerõsítés)"
-
-# "Password (Verify)"
-#: ../../../../inc/tpl/passreset.php:70
-msgid "Clave (Verificar)"
-msgstr "Jelszó (Megerõsítés)"
-
-# "Back"
-#: ../../../../inc/tpl/passreset.php:83
-msgid "Volver"
-msgstr "Vissza"
-
-# "Go back to login"
-#: ../../../../inc/tpl/passreset.php:83
-msgid "Volver a iniciar sesión"
-msgstr "Vissza a bejelentkezéshez"
-
-# "Request"
-#: ../../../../inc/tpl/passreset.php:85
-msgid "Solicitar"
-msgstr "Kérés"
-
-# "Request password change"
-#: ../../../../inc/tpl/passreset.php:86
-msgid "Solicitar cambio de clave"
-msgstr "Kérés jelszó módosítás"
-
-# "Change"
-#: ../../../../inc/tpl/passreset.php:88
-msgid "Cambiar"
-msgstr "Változtatás"
-
-# "Change password"
-#: ../../../../inc/tpl/passreset.php:89
-msgid "Cambiar Clave"
-msgstr "Változtatsd meg a jelszót"
-
-# "Profile name"
-#: ../../../../inc/tpl/profiles.php:41
-msgid "Nombre del perfil"
-msgstr "Profil név"
-
-# "View account details"
-#: ../../../../inc/tpl/profiles.php:48
-msgid "Ver detalles de cuenta"
-msgstr "Fiók adatok"
-
-# "View"
-#: ../../../../inc/tpl/profiles.php:48
-msgid "Ver"
-msgstr "Nézet"
-
-# "View account password"
-#: ../../../../inc/tpl/profiles.php:50
-msgid "Ver clave de cuenta"
-msgstr "Fiók jelszó"
-
-# "View account history"
-#: ../../../../inc/tpl/profiles.php:53
-msgid "Ver historial de cuenta"
-msgstr "Fiók elõzmények"
-
-# "View History"
-#: ../../../../inc/tpl/profiles.php:53
-msgid "Ver Historial"
-msgstr "Elõzmények"
-
-# "Edit account"
-#: ../../../../inc/tpl/profiles.php:55
-msgid "Editar cuenta"
-msgstr "fiók"
-
-# "Edit"
-#: ../../../../inc/tpl/profiles.php:55
-msgid "Editar"
-msgstr "Módosítás"
-
-# "Edit account password"
-#: ../../../../inc/tpl/profiles.php:58
-msgid "Editar clave de cuenta"
-msgstr "fiók jelszavának módosításe"
-
-# "Edit Password"
-#: ../../../../inc/tpl/profiles.php:58
-msgid "Editar Clave"
-msgstr "Jelszó módosítás"
-
-# "Add new account"
-#: ../../../../inc/tpl/profiles.php:60
-msgid "Añadir nueva cuenta"
-msgstr "Új fiók hozzáadása"
-
-# "Add"
-#: ../../../../inc/tpl/profiles.php:60
-msgid "Añadir"
-msgstr "Hozzáad"
-
-# "Delete account"
-#: ../../../../inc/tpl/profiles.php:63
-msgid "Borrar cuenta"
-msgstr "Fiók Törlése"
-
-# "Delete"
-#: ../../../../inc/tpl/profiles.php:63
-msgid "Borrar"
-msgstr "Törlés"
-
-# "View account files"
-#: ../../../../inc/tpl/profiles.php:65
-msgid "Ver archivos de cuenta"
-msgstr "Fiók fáljok"
-
-# "General configuration"
-#: ../../../../inc/tpl/profiles.php:74
-msgid "Configuración general"
-msgstr "Általános beállítások"
-
-# "General"
-#: ../../../../inc/tpl/profiles.php:74
-msgid "General"
-msgstr "Általános"
-
-# "Change master password"
-#: ../../../../inc/tpl/profiles.php:76
-msgid "Cambiar clave maestra"
-msgstr "Változtatsd meg a mester jelszót"
-
-# "Make backup"
-#: ../../../../inc/tpl/profiles.php:79
-msgid "Realizar copia de seguridad"
-msgstr "archívum készítés"
-
-# "Backup"
-#: ../../../../inc/tpl/profiles.php:79
-msgid "Backup"
-msgstr "Archiválás"
-
-# "Management"
-#: ../../../../inc/tpl/profiles.php:85
-msgid "Gestión"
-msgstr "Menedzsment"
-
-# "Users management"
-#: ../../../../inc/tpl/profiles.php:88
-msgid "Gestión de usuarios"
-msgstr "Felhasználó menedzsment"
-
-# "Groups management"
-#: ../../../../inc/tpl/profiles.php:90
-msgid "Gestión de grupos"
-msgstr "Csoport menedzsment"
-
-# "Profiles management"
-#: ../../../../inc/tpl/profiles.php:93
-msgid "Gestión de perfiles"
-msgstr "Profil menedzsment"
-
-# "Profiles"
-#: ../../../../inc/tpl/profiles.php:93
-msgid "Perfiles"
-msgstr "Profilok"
-
-# "Categories management"
-#: ../../../../inc/tpl/profiles.php:96
-msgid "Gestión de categorías"
-msgstr "Kategória Menedzsment"
-
-# "Categories"
-#: ../../../../inc/tpl/profiles.php:96
-msgid "Categorías"
-msgstr "Kategóriák"
-
-# "Customers Management"
-#: ../../../../inc/tpl/profiles.php:101
-msgid "Gestión de clientes"
-msgstr "Ügyfél Menedzsment"
-
-# "Customers"
-#: ../../../../inc/tpl/profiles.php:101
-msgid "Clientes"
-msgstr "Ügyfél"
-
-# "Others"
-#: ../../../../inc/tpl/profiles.php:108
-msgid "Otros"
-msgstr "Egyebek"
-
-# "View event log"
-#: ../../../../inc/tpl/profiles.php:111
-msgid "Ver log de eventos"
-msgstr "Esemény napló"
-
-# "Event Log"
-#: ../../../../inc/tpl/profiles.php:111
-msgid "Log de Eventos"
-msgstr "Esemény napló"
-
-# "Request Account Modification"
-#: ../../../../inc/tpl/request.php:33
-msgid "Solicitar Modificación de Cuenta"
-msgstr "Kérés fiók módosítás"
-
-# "Request"
-#: ../../../../inc/tpl/request.php:57
-msgid "Petición"
-msgstr "Kérés"
-
-# "Request description"
-#: ../../../../inc/tpl/request.php:60
-msgid "Descripción de la petición"
-msgstr "Kérés leírás"
-
-# "Send"
-#: ../../../../inc/tpl/request.php:76
-msgid "Enviar"
-msgstr "Küldés"
-
-# "Clear"
-#: ../../../../inc/tpl/search.php:59
-msgid "Limpiar"
-msgstr "Tiszta"
-
-# "Text to search"
-#: ../../../../inc/tpl/search.php:63
-msgid "Texto a buscar"
-msgstr "Keresendõ szöveg"
-
-# "Global search"
-#: ../../../../inc/tpl/search.php:68
-msgid "Búsqueda global"
-msgstr "Globális keresés"
-
-# "APP"
-#: ../../../../inc/tpl/search.php:82
-msgid "CPP"
-msgstr "APP"
-
-# "Accounts per page"
-#: ../../../../inc/tpl/search.php:82
-msgid "Cuentas por página"
-msgstr "Fiók/oldal"
-
-# DB Update
-#: ../../../../inc/tpl/upgrade.php:42
-#, fuzzy
-msgid "Actualización de BBDD"
-msgstr "DB Update"
-
-# Enter Security Code
-#: ../../../../inc/tpl/upgrade.php:44
-#, fuzzy
-msgid "Introducir Código de Seguridad"
-msgstr "Enter Security Code"
-
-# Security Code
-#: ../../../../inc/tpl/upgrade.php:45
-#, fuzzy
-msgid "Código de Seguridad"
-msgstr "Security Code"
-
-# Start Update
-#: ../../../../inc/tpl/upgrade.php:55
-#, fuzzy
-msgid "Iniciar Actualización"
-msgstr "Start Update"
-
-# "Full username"
-#: ../../../../inc/tpl/users.php:72
-msgid "Nombre de usuario completo"
-msgstr "Teljes felhasznlónév"
-
-# "Session login"
-#: ../../../../inc/tpl/users.php:88
-msgid "Login de inicio de sesión"
-msgstr "Bejelentkezési munkamenet "
-
-# "Email address"
-#: ../../../../inc/tpl/users.php:122
-msgid "Dirección de correo"
-msgstr "Email cím"
-
-# "Options"
-#: ../../../../inc/tpl/users.php:161
-msgid "Opciones"
-msgstr "Beállítások"
-
-# "Application administrator"
-#: ../../../../inc/tpl/users.php:165
-msgid "Administrador de la aplicación"
-msgstr "Rendszergazda"
-
-# "Application Admin"
-#: ../../../../inc/tpl/users.php:165
-msgid "Admin. Aplicación"
-msgstr "Admin alkalmazás"
-
-# "Accounts administrator"
-#: ../../../../inc/tpl/users.php:167
-msgid "Administrador de cuentas"
-msgstr "Fiókok adminja"
-
-# "Accounts Admin"
-#: ../../../../inc/tpl/users.php:167
-msgid "Admin. Cuentas"
-msgstr "Admin fiók"
-
-# "Force password change"
-#: ../../../../inc/tpl/users.php:175
-msgid "Forzar cambio de clave"
-msgstr "Jelszó változtatásának erõltetése"
-
-# "Entries"
-#: ../../../../inc/tpl/users.php:183
-msgid "Entradas"
-msgstr "Belépések"
-
-# "Last Access"
-#: ../../../../inc/tpl/users.php:188
-msgid "Último Acceso"
-msgstr "Utolsó belépés"
-
-# "Master Password Date"
-#: ../../../../inc/tpl/users.php:198
-msgid "Fecha Clave Maestra"
-msgstr "Mester jelszó dátum"
+msgid "No hay cuentas para importar"
+msgstr "Nincsenek letölthetõ Archívumok"
# "Error on updating database"
-#: ../../../../inc/upgrade.class.php:49
+#: ../../../../inc/Upgrade.class.php:51
msgid "Error al aplicar la actualización de la Base de Datos"
msgstr "Hiba az adatbázis frissítése közben"
# "Please, check the event log for more details"
-#: ../../../../inc/upgrade.class.php:50
+#: ../../../../inc/Upgrade.class.php:52 ../../../../inc/Upgrade.class.php:58
msgid "Compruebe el registro de eventos para más detalles"
msgstr "Részletes leírást az esemény naplóban olvashat"
+# "Login"
+#: ../../../../inc/Upgrade.class.php:52 ../../../../inc/Upgrade.class.php:58
+#: ../../../../inc/themes/classic/login.inc:32
+#: ../../../../inc/themes/material-blue/2fa.inc:26
+#: ../../../../inc/themes/material-blue/login.inc:64
+msgid "Acceder"
+msgstr "Belépés"
+
+# "Error on updating database"
+#: ../../../../inc/Upgrade.class.php:57
+#, fuzzy
+msgid "Error al aplicar la actualización auxiliar"
+msgstr "Hiba az adatbázis frissítése közben"
+
# "Update DB"
-#: ../../../../inc/upgrade.class.php:66
+#: ../../../../inc/Upgrade.class.php:74
msgid "Actualizar BBDD"
msgstr "Frissítse az adatbázist"
# "Database update not needed."
-#: ../../../../inc/upgrade.class.php:97
+#: ../../../../inc/Upgrade.class.php:121
msgid "No es necesario actualizar la Base de Datos."
msgstr "Az adatbázis frissítése nem szükséges"
# "Error on updating database."
-#: ../../../../inc/upgrade.class.php:103
+#: ../../../../inc/Upgrade.class.php:129
msgid "Error al aplicar la actualización de la Base de Datos."
msgstr "Hiba az adatbázis frissítése közben"
# "Database updating was done successfully."
-#: ../../../../inc/upgrade.class.php:110
+#: ../../../../inc/Upgrade.class.php:138
msgid "Actualización de la Base de Datos realizada correctamente."
msgstr "Az adatbázis frissítés sikeresen megtörtént"
# "Update Configuration"
-#: ../../../../inc/upgrade.class.php:185
+#: ../../../../inc/Upgrade.class.php:215
msgid "Actualizar Configuración"
msgstr "Konfiguráció frissítése"
# "Configuration updating successfully done."
-#: ../../../../inc/upgrade.class.php:186
+#: ../../../../inc/Upgrade.class.php:215
msgid "Actualización de la Configuración realizada correctamente."
msgstr "A beállítások elmentve"
-# "Account Activation"
-#: ../../../../inc/users.class.php:774
-msgid "Activación Cuenta"
-msgstr "Fiók Aktiválás"
-
-# "Your account activation is pending."
-#: ../../../../inc/users.class.php:775
-msgid "Su cuenta está pendiente de activación."
-msgstr "Az ön fiók aktiválása függõben van"
-
-# "You will receive a confirmation email in short."
-#: ../../../../inc/users.class.php:776
-msgid "En breve recibirá un email de confirmación."
-msgstr "Hamarosan megerõsítésre váró emailt küldünk"
-
# Could not perform the password change request.
-#: ../../../../inc/users.class.php:821 ../../../../inc/users.class.php:863
+#: ../../../../inc/UserBase.class.php:386
+#: ../../../../inc/UserBase.class.php:530
#, fuzzy
msgid "No se pudo realizar la petición de cambio de clave."
msgstr "Nem sikerült végrehajtani a jelszócsere kérelmet."
# "Edit User"
-#: ../../../../inc/users.class.php:858
+#: ../../../../inc/UserBase.class.php:525
msgid "Modificar Usuario"
msgstr "Felhasználó módosítás"
-# Required PHP version >= 5.1
-#: ../../../../inc/util.class.php:119
+# "Delete User"
+#: ../../../../inc/UserBase.class.php:592
+#: ../../../../web/UsersMgmtC.class.php:150
+msgid "Eliminar Usuario"
+msgstr "felhasználó törlése"
+
+# "Account Activation"
+#: ../../../../inc/UserLdap.class.php:78
+msgid "Activación Cuenta"
+msgstr "Fiók Aktiválás"
+
+# "Your account activation is pending."
+#: ../../../../inc/UserLdap.class.php:79
+msgid "Su cuenta está pendiente de activación."
+msgstr "Az ön fiók aktiválása függõben van"
+
+# "You will receive a confirmation email in short."
+#: ../../../../inc/UserLdap.class.php:80
+msgid "En breve recibirá un email de confirmación."
+msgstr "Hamarosan megerõsítésre váró emailt küldünk"
+
+# "LDAP User"
+#: ../../../../inc/UserLdap.class.php:86
#, fuzzy
-msgid "Versión de PHP requerida >= 5.1"
+msgid "Nuevo usuario de LDAP"
+msgstr "LDAP felhasználó"
+
+# "Edit Group"
+#: ../../../../inc/UserUtil.class.php:705
+#, fuzzy
+msgid "Migrar Grupos"
+msgstr "Csoportok"
+
+# "Error on adding users groups"
+#: ../../../../inc/UserUtil.class.php:705
+#, fuzzy
+msgid "Error al migrar grupo del usuario"
+msgstr "Hiba a DN felhasználó keresése közben"
+
+# Required PHP version >= 5.1
+#: ../../../../inc/Util.class.php:123
+#, fuzzy
+msgid "Versión de PHP requerida >= "
msgstr "Szükséges PHP verzió> = 5.1"
# "Please update PHP version to run sysPass in a secure way"
-#: ../../../../inc/util.class.php:120
+#: ../../../../inc/Util.class.php:124
#, fuzzy
msgid ""
"Actualice la versión de PHP para que la aplicación funcione correctamente"
msgstr "Kérem, frissítse a PHP verziót, hogy a sysPass biztonságos legyen"
+# "Module unavilable"
+#: ../../../../inc/Util.class.php:160
+#: ../../../../inc/themes/classic/ldap.inc:212
+#: ../../../../inc/themes/material-blue/ldap.inc:238
+msgid "Módulo no disponible"
+msgstr "Modul nem elérhetõ"
+
# "Without this module the application couldn't run correctly"
-#: ../../../../inc/util.class.php:142
+#: ../../../../inc/Util.class.php:161
msgid "Sin este módulo la aplicación puede no funcionar correctamente."
msgstr "E modul nélkül az alkalmazás nem futtatható megfelelõen"
+# CSV/XML Import
+#: ../../../../inc/XmlExport.class.php:124
+#, fuzzy
+msgid "Exportar XML"
+msgstr "Fiókok importálása"
+
+# "Error on creating user"
+#: ../../../../inc/XmlExport.class.php:409
+#, fuzzy
+msgid "Error al crear el archivo XML"
+msgstr "Hiba az ügyfél létrehozása közben"
+
+#: ../../../../inc/XmlImport.class.php:63
+msgid "Formato detectado"
+msgstr ""
+
+# Unable to process XML file
+#: ../../../../inc/XmlImportBase.class.php:75
+#, fuzzy
+msgid "No es posible procesar el archivo XML"
+msgstr "Nem lehet a konfigurációs fájlba írni"
+
+# XML file not supported
+#: ../../../../inc/XmlImportBase.class.php:103
+#, fuzzy
+msgid "Archivo XML no soportado"
+msgstr "Fájltípus nem engedélyezett"
+
+# Unable to detect the application the data was exported from
+#: ../../../../inc/XmlImportBase.class.php:104
+#, fuzzy
+msgid "No es posible detectar la aplicación que exportó los datos"
+msgstr "Unable to detect the application the data was exported from"
+
# "Query error"
-#: ../../../../js/js.php:45
+#: ../../../../js/strings.js.php:27
msgid "Error en la consulta"
msgstr "Lekérdezési hiba"
# "There was an error"
-#: ../../../../js/js.php:46
+#: ../../../../js/strings.js.php:28
msgid "Ha ocurrido un error"
msgstr "Hiba történt"
+# "Session finished"
+#: ../../../../js/strings.js.php:29
+#: ../../../../inc/themes/classic/login.inc:52
+#: ../../../../inc/themes/material-blue/login.inc:77
+msgid "Sesión finalizada"
+msgstr "Munkamenet befejezõdött"
+
# "Delete account?"
-#: ../../../../js/js.php:48
+#: ../../../../js/strings.js.php:30
msgid "Borrar la cuenta?"
msgstr "Fiók törlése?"
# "Delete user?"
-#: ../../../../js/js.php:49
+#: ../../../../js/strings.js.php:31
msgid "Borrar el usuario?"
msgstr "Törlöd a felhasználót?"
# "You should save configuration in order to take effect"
-#: ../../../../js/js.php:50
+#: ../../../../js/strings.js.php:32
msgid "Guarde la configuración para que sea efectiva"
msgstr "A módosítások életbe lépéséhez mentened kell a beállításokat"
# "Generated Password"
-#: ../../../../js/js.php:51
+#: ../../../../js/strings.js.php:33
msgid "Clave Generada"
msgstr "Generált Jelszó"
# "High level"
-#: ../../../../js/js.php:52
+#: ../../../../js/strings.js.php:34
msgid "Nivel alto"
msgstr "Erös"
# "Average level"
-#: ../../../../js/js.php:53
+#: ../../../../js/strings.js.php:35
msgid "Nivel medio"
msgstr "Közepes"
# "Low level"
-#: ../../../../js/js.php:54
+#: ../../../../js/strings.js.php:36
msgid "Nivel bajo"
msgstr "Gyenge"
# "Very high level"
-#: ../../../../js/js.php:55
+#: ../../../../js/strings.js.php:37
msgid "Nivel muy alto"
msgstr "Nagyon erös"
# "You should use at least 8 characters"
-#: ../../../../js/js.php:56
+#: ../../../../js/strings.js.php:38
msgid "Utilizar al menos 8 caracteres"
msgstr "Legalább 8 karakterböl állót adj meg"
# "Delete item?"
-#: ../../../../js/js.php:57
+#: ../../../../js/strings.js.php:39
msgid "Borrar elemento?"
msgstr "Törlöd a tételt?"
# "Page not found"
-#: ../../../../js/js.php:58
+#: ../../../../js/strings.js.php:40
msgid "Página no encontrada"
msgstr "Oldal nem található"
# "File not supported for preview"
-#: ../../../../js/js.php:59
+#: ../../../../js/strings.js.php:41
msgid "Archivo no soportado para visualizar"
msgstr "A fájlnak nincs elönézete"
# "Delete file?"
-#: ../../../../js/js.php:60
+#: ../../../../js/strings.js.php:42
msgid "Eliminar archivo?"
msgstr "Törlöd a fájlt?"
# "Your browser does not support HTML5 file uploads"
-#: ../../../../js/js.php:61
+#: ../../../../js/strings.js.php:43
msgid "Su navegador no soporta subir archivos con HTML5"
msgstr "A böngészöd nem támogatja a HTML5 fájlok feltöltését"
# "Too many files"
-#: ../../../../js/js.php:62
+#: ../../../../js/strings.js.php:44
msgid "Demasiados archivos"
msgstr "Túl sok fájl"
# "Unable to save file. Max file size:"
-#: ../../../../js/js.php:63
-msgid "No es posible guardar el archivo. Tamaño máximo:"
+#: ../../../../js/strings.js.php:45
+#, fuzzy, php-format
+msgid "No es posible guardar el archivo.%sTamaño máximo:"
msgstr "Nem lehet elmenteni a fájlt. Maximális fájl méret:"
# "Extension not allowed"
-#: ../../../../js/js.php:64
+#: ../../../../js/strings.js.php:46
msgid "Extensión no permitida"
msgstr "A kiterjesztés nem engedélyezett"
# "Clear event log?"
-#: ../../../../js/js.php:65
+#: ../../../../js/strings.js.php:47
msgid "Vaciar el registro de eventos?"
msgstr "Törlöd az esemény naplót?"
-# "No group found with that name"
-#~ msgid "No se encontró el grupo con ese nombre"
-#~ msgstr "Nincs ilyen nevû csoport"
+# "Select Group"
+#: ../../../../js/strings.js.php:48
+msgid "Seleccionar Grupo"
+msgstr "Válassz csoportot"
-# "Unable to create backup directory"
-#~ msgid "No es posible crear el directorio de backups"
-#~ msgstr "Arcív mappa létrehozása meghiusúlt"
-
-# "Database Backup"
-#~ msgid "Copia BBDD"
-#~ msgstr "Adatbázis archiválás"
-
-# sysPass administrator's password
+# "Select users"
+#: ../../../../js/strings.js.php:49
#, fuzzy
-#~ msgid "Clave de administrador de sysPass"
-#~ msgstr "sysPass administrator's password"
+msgid "Seleccionar Usuario"
+msgstr "Válassz dátumot"
+
+# "Select Profile"
+#: ../../../../js/strings.js.php:50
+msgid "Seleccionar Perfil"
+msgstr "Válassz profilt"
+
+# "Select Customer"
+#: ../../../../js/strings.js.php:51
+msgid "Seleccionar Cliente"
+msgstr "Válassz ügyfelet"
+
+# "Select category"
+#: ../../../../js/strings.js.php:52
+msgid "Seleccionar Categoría"
+msgstr "Válassz kategóriát"
+
+# "No results"
+#: ../../../../js/strings.js.php:53
+msgid "Sin resultados"
+msgstr "Nincsenek eredmények"
+
+# "Options"
+#: ../../../../js/strings.js.php:54
+#, fuzzy
+msgid "Opciones de clave"
+msgstr "Beállítások"
+
+# "Generate random password"
+#: ../../../../js/strings.js.php:55
+msgid "Generar clave aleatoria"
+msgstr "Véletlenszerû jelszó generálása"
+
+#: ../../../../js/strings.js.php:56
+msgid "Complejidad"
+msgstr ""
+
+#: ../../../../js/strings.js.php:57
+msgid "Reset"
+msgstr ""
+
+# "Password strength level"
+#: ../../../../js/strings.js.php:58
+#: ../../../../inc/themes/classic/editpass.inc:33
+msgid "Nivel de fortaleza de la clave"
+msgstr "Jelszó erõssége"
+
+# Show Password
+#: ../../../../js/strings.js.php:59
+#, fuzzy
+msgid "Mostrar Clave"
+msgstr "Show Password"
+
+# "Edit User"
+#: ../../../../js/strings.js.php:60
+#, fuzzy
+msgid "Copiar Usuario"
+msgstr "Fiók másolása"
+
+# "Change password"
+#: ../../../../js/strings.js.php:61
+#, fuzzy
+msgid "Copiar Clave"
+msgstr "Fiók másolása"
+
+#: ../../../../js/strings.js.php:62
+msgid "Incluir Números"
+msgstr ""
+
+#: ../../../../js/strings.js.php:63
+msgid "Incluir Mayúsculas"
+msgstr ""
+
+#: ../../../../js/strings.js.php:64
+msgid "Incluir Símbolos"
+msgstr ""
+
+#: ../../../../js/strings.js.php:65
+#, fuzzy
+msgid "Longitud"
+msgstr "A mester jelszó legaláb 11 karakterbõl kell, hogy álljon"
+
+# "Select Customer"
+#: ../../../../js/strings.js.php:66
+#, fuzzy
+msgid "Seleccionar Acción"
+msgstr "Akció"
+
+# "YES"
+#: ../../../../js/strings.js.php:67
+#: ../../../../inc/themes/classic/account.inc:133
+#: ../../../../inc/themes/classic/account.inc:164
+#: ../../../../inc/themes/classic/account.inc:449
+#: ../../../../inc/themes/classic/install.inc:99
+msgid "SI"
+msgstr "Igen"
+
+# "NO"
+#: ../../../../js/strings.js.php:68
+#: ../../../../inc/themes/classic/account.inc:133
+#: ../../../../inc/themes/classic/account.inc:164
+#: ../../../../inc/themes/classic/account.inc:447
+#: ../../../../inc/themes/classic/encryption.inc:61
+#: ../../../../inc/themes/classic/encryption.inc:80
+#: ../../../../inc/themes/classic/import.inc:70
+#: ../../../../inc/themes/classic/install.inc:99
+#: ../../../../inc/themes/classic/tokens.inc:36
+msgid "NO"
+msgstr "Nem"
+
+#: ../../../../js/strings.js.php:69
+msgid "Aceptar"
+msgstr ""
+
+#: ../../../../js/strings.js.php:70
+msgid "Cancelar"
+msgstr ""
+
+# "Account Details"
+#: ../../../../web/AccountC.class.php:380
+#: ../../../../web/AccountC.class.php:411
+#: ../../../../inc/themes/classic/search.inc:36
+#: ../../../../inc/themes/classic/search.inc:95
+#: ../../../../inc/themes/material-blue/search.inc:41
+#: ../../../../inc/themes/material-blue/search.inc:108
+msgid "Detalles de Cuenta"
+msgstr "Fiók adatok"
+
+# "Edit Account Password"
+#: ../../../../web/AccountC.class.php:468
+#: ../../../../inc/themes/classic/account.inc:394
+#: ../../../../inc/themes/material-blue/account.inc:430
+msgid "Modificar Clave de Cuenta"
+msgstr "Fiók jelszavának szerkesztése"
+
+# "Name"
+#: ../../../../web/AccountsMgmtC.class.php:79
+#: ../../../../web/AccountsMgmtC.class.php:138
+#: ../../../../web/AccountsMgmtC.class.php:266
+#: ../../../../web/SearchC.class.php:277
+#: ../../../../web/UsersMgmtC.class.php:87
+#: ../../../../web/UsersMgmtC.class.php:187
+#: ../../../../web/UsersMgmtC.class.php:245
+#: ../../../../inc/themes/classic/account.inc:11
+#: ../../../../inc/themes/classic/categories.inc:8
+#: ../../../../inc/themes/classic/customers.inc:8
+#: ../../../../inc/themes/classic/customfields.inc:9
+#: ../../../../inc/themes/classic/editpass.inc:8
+#: ../../../../inc/themes/classic/groups.inc:8
+#: ../../../../inc/themes/classic/info.inc:25
+#: ../../../../inc/themes/classic/profiles.inc:8
+#: ../../../../inc/themes/classic/request.inc:6
+#: ../../../../inc/themes/classic/search.inc:34
+#: ../../../../inc/themes/classic/users.inc:8
+#: ../../../../inc/themes/material-blue/account.inc:15
+#: ../../../../inc/themes/material-blue/categories.inc:8
+#: ../../../../inc/themes/material-blue/customers.inc:8
+#: ../../../../inc/themes/material-blue/customfields.inc:8
+#: ../../../../inc/themes/material-blue/editpass.inc:9
+#: ../../../../inc/themes/material-blue/groups.inc:8
+#: ../../../../inc/themes/material-blue/info.inc:25
+#: ../../../../inc/themes/material-blue/profiles.inc:8
+#: ../../../../inc/themes/material-blue/request.inc:6
+#: ../../../../inc/themes/material-blue/search.inc:39
+#: ../../../../inc/themes/material-blue/users.inc:8
+msgid "Nombre"
+msgstr "Név"
+
+# "Categories management"
+#: ../../../../web/AccountsMgmtC.class.php:115
+msgid "Gestión de Categorías"
+msgstr "Kategória Menedzsment"
+
+# "Customers Management"
+#: ../../../../web/AccountsMgmtC.class.php:172
+msgid "Gestión de Clientes"
+msgstr "Ügyfél Menedzsment"
+
+#: ../../../../web/AccountsMgmtC.class.php:266
+#: ../../../../inc/themes/classic/customfields.inc:27
+#: ../../../../inc/themes/material-blue/customfields.inc:30
+#, fuzzy
+msgid "Módulo"
+msgstr "Modul nem elérhetõ"
+
+# "Delete Group"
+#: ../../../../web/AccountsMgmtC.class.php:287
+#, fuzzy
+msgid "Eliminar Campo"
+msgstr "Profil törlése"
+
+#: ../../../../web/AccountsMgmtC.class.php:300
+#: ../../../../inc/themes/classic/profiles.inc:107
+#: ../../../../inc/themes/material-blue/profiles.inc:124
+msgid "Campos Personalizados"
+msgstr ""
+
+# "Last backup"
+#: ../../../../web/ConfigC.class.php:185
+msgid "Último backup"
+msgstr "Utolsó Archiválás"
+
+# "There're no backups available"
+#: ../../../../web/ConfigC.class.php:185
+msgid "No se encontraron backups"
+msgstr "Nincsenek elérhetõ Archívumok"
+
+# "Last Modification"
+#: ../../../../web/ConfigC.class.php:192
+#, fuzzy
+msgid "Última exportación"
+msgstr "Utolsó oldal"
+
+# "Unable to write on configuration file"
+#: ../../../../web/ConfigC.class.php:192
+#, fuzzy
+msgid "No se encontró archivo de exportación"
+msgstr "Nem lehet a konfigurációs fájlba írni"
+
+# "Configuration"
+#: ../../../../web/ConfigC.class.php:237
+#, fuzzy
+msgid "Información"
+msgstr "Mutat néhány információt az alkalmazásról és a teljesítményrõl"
+
+# "Event log cleared"
+#: ../../../../web/EventlogC.class.php:93
+msgid "Registro de eventos vaciado"
+msgstr "Esemény napló törölve"
+
+# "Error on clearing event log"
+#: ../../../../web/EventlogC.class.php:95
+msgid "Error al vaciar el registro de eventos"
+msgstr "Hiba az esemény napló törlése közben"
+
+# "Application Admin"
+#: ../../../../web/MainC.class.php:137
+#: ../../../../web/UsersMgmtC.class.php:100
+msgid "Admin Aplicación"
+msgstr "Admin alkalmazás"
+
+# "Search"
+#: ../../../../web/MainC.class.php:155
+msgid "Buscar"
+msgstr "Keresés"
+
+# "Users Management"
+#: ../../../../web/MainC.class.php:167
+#: ../../../../web/UsersMgmtC.class.php:163
+msgid "Gestión de Usuarios"
+msgstr "Felhasználó Menedzsment"
+
+# "Customer and Categories management"
+#: ../../../../web/MainC.class.php:173
+msgid "Gestión de Clientes y Categorías"
+msgstr "Ügyfél és Kategória Menedzsment"
+
+# "Event Log"
+#: ../../../../web/MainC.class.php:185
+#: ../../../../inc/themes/classic/eventlog.inc:4
+#: ../../../../inc/themes/material-blue/eventlog.inc:3
+msgid "Registro de Eventos"
+msgstr "Esemény napló"
+
+#: ../../../../web/MainC.class.php:205
+msgid "Nuevo estilo visual basado en Material Design Lite by Google"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:206
+#, fuzzy
+msgid "Usuarios en múltiples grupos"
+msgstr "Felhasználó csoportok importálása"
+
+# "Customers Management"
+#: ../../../../web/MainC.class.php:207
+#, fuzzy
+msgid "Previsualización de imágenes"
+msgstr "Kérés fiók módosításához"
+
+#: ../../../../web/MainC.class.php:208
+msgid "Mostrar claves como imágenes"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:209
+msgid "Campos personalizados"
+msgstr ""
+
+# "Query error"
+#: ../../../../web/MainC.class.php:210
+#, fuzzy
+msgid "API de consultas"
+msgstr "Kérés fiók módosításához"
+
+# "Enable Authentication"
+#: ../../../../web/MainC.class.php:211
+#: ../../../../inc/themes/classic/2fa.inc:9
+#: ../../../../inc/themes/material-blue/2fa.inc:9
+#: ../../../../inc/themes/material-blue/security.inc:11
+#, fuzzy
+msgid "Autentificación en 2 pasos"
+msgstr "Engedélyezése Hitelesítés"
+
+#: ../../../../web/MainC.class.php:212
+#, fuzzy
+msgid "Complejidad de generador de claves"
+msgstr "Nem találom a véletlen szám generátort"
+
+#: ../../../../web/MainC.class.php:213
+msgid "Consultas especiales"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:214
+msgid "Exportación a XML"
+msgstr ""
+
+# "Master password too short"
+#: ../../../../web/MainC.class.php:215
+#, fuzzy
+msgid "Clave maestra temporal"
+msgstr "Generate Temporary Password"
+
+#: ../../../../web/MainC.class.php:216
+msgid "Importación de cuentas desde sysPass, KeePass, KeePassX y CSV"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:217
+msgid "Optimización del código y mayor rapidez de carga"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:218
+msgid "Mejoras de seguridad en XSS e inyección SQL"
+msgstr ""
+
+# "This PHP version is vulnerable to NULL Byte attack CVE-2006-7243)"
+#: ../../../../web/MainC.class.php:260
+msgid "La version de PHP es vulnerable al ataque NULL Byte (CVE-2006-7243)"
+msgstr ""
+"Ez a PHP verzió sérülékeny a NULL Byte támadásokkal szemben (CVE-2006-7243)"
+
+# "Please update PHP version to run sysPass in a secure way"
+#: ../../../../web/MainC.class.php:261
+msgid "Actualice la versión de PHP para usar sysPass de forma segura"
+msgstr "Kérem, frissítse a PHP verziót, hogy a sysPass biztonságos legyen"
+
+# "Cannot find random number generator."
+#: ../../../../web/MainC.class.php:268
+msgid "No se encuentra el generador de números aleatorios."
+msgstr "Nem találom a véletlen szám generátort"
+
+# "Without this function, an attacker could take your account on password reset."
+#: ../../../../web/MainC.class.php:269
+msgid ""
+"Sin esta función un atacante puede utilizar su cuenta al resetear la clave"
+msgstr "E funkció nélkül egy támadó alapállapotba állíthatja jelszavát"
+
+# "Installation finished"
+#: ../../../../web/MainC.class.php:288
+msgid "Instalación finalizada"
+msgstr "A telepítés befejezõdött"
+
+# "Click here to access"
+#: ../../../../web/MainC.class.php:289
+msgid "Pulse aquí para acceder"
+msgstr ""
+"Kattinst here a "
+"bejelentkezéshez"
+
+# "Download new version"
+#: ../../../../web/MainC.class.php:384
+msgid "Descargar nueva versión"
+msgstr "Új verzió letöltése"
+
+#: ../../../../web/MainC.class.php:395
+msgid "Avisos de sysPass"
+msgstr ""
+
+# "Sort by Customer"
+#: ../../../../web/SearchC.class.php:270
+msgid "Ordenar por Cliente"
+msgstr "Rendezés Ügyfél szerint"
+
+# "Sort by Name"
+#: ../../../../web/SearchC.class.php:276
+msgid "Ordenar por Nombre"
+msgstr "Rendezés Név szerint"
+
+# "Sort by Category"
+#: ../../../../web/SearchC.class.php:282
+msgid "Ordenar por Categoría"
+msgstr "Rendezés Kategória szerint"
+
+# "Sort by Username"
+#: ../../../../web/SearchC.class.php:288
+msgid "Ordenar por Usuario"
+msgstr "Rendezés Felhasználónév szerint"
+
+# "Sort by URL / IP"
+#: ../../../../web/SearchC.class.php:294
+msgid "Ordenar por URL / IP"
+msgstr "Rendezés URL / IP szerint"
+
+# "URL / IP"
+#: ../../../../web/SearchC.class.php:295
+#: ../../../../inc/themes/classic/account.inc:58
+#: ../../../../inc/themes/classic/editpass.inc:16
+#: ../../../../inc/themes/classic/request.inc:13
+#: ../../../../inc/themes/classic/search.inc:57
+#: ../../../../inc/themes/material-blue/account.inc:66
+#: ../../../../inc/themes/material-blue/editpass.inc:17
+#: ../../../../inc/themes/material-blue/request.inc:15
+#: ../../../../inc/themes/material-blue/search.inc:62
+msgid "URL / IP"
+msgstr "URL / IP"
+
+# "Properties"
+#: ../../../../web/UsersMgmtC.class.php:91
+msgid "Propiedades"
+msgstr "Beállítások"
+
+# "Account Admin"
+#: ../../../../web/UsersMgmtC.class.php:104
+msgid "Admin Cuentas"
+msgstr "Admin Fiók"
+
+# "LDAP User"
+#: ../../../../web/UsersMgmtC.class.php:108
+#: ../../../../inc/themes/classic/users.inc:28
+#: ../../../../inc/themes/material-blue/users.inc:34
+msgid "Usuario de LDAP"
+msgstr "LDAP felhasználó"
+
+# "Disabled"
+#: ../../../../web/UsersMgmtC.class.php:112
+#: ../../../../inc/themes/classic/users.inc:113
+#: ../../../../inc/themes/material-blue/users.inc:151
+#: ../../../../inc/themes/material-blue/users.inc:154
+msgid "Deshabilitado"
+msgstr "Inaktív"
+
+# "View user details"
+#: ../../../../web/UsersMgmtC.class.php:129
+msgid "Ver Detalles de Usuario"
+msgstr "Felhasználó részletek"
+
+# "Change user password"
+#: ../../../../web/UsersMgmtC.class.php:143
+msgid "Cambiar Clave de Usuario"
+msgstr "Változás felhasználói jelszó"
+
+# "Groups Management"
+#: ../../../../web/UsersMgmtC.class.php:222
+msgid "Gestión de Grupos"
+msgstr "Csoport Menedzsment"
+
+# "View user details"
+#: ../../../../web/UsersMgmtC.class.php:260
+#, fuzzy
+msgid "Ver Detalles de Perfil"
+msgstr "Felhasználó részletek"
+
+# "Profiles Management"
+#: ../../../../web/UsersMgmtC.class.php:287
+msgid "Gestión de Perfiles"
+msgstr "Profil Menedzsment"
+
+#: ../../../../web/UsersMgmtC.class.php:407
+#, fuzzy
+msgid "Ver token de Autorización"
+msgstr "Felhasználó részletek"
+
+# "Users Management"
+#: ../../../../web/UsersMgmtC.class.php:434
+#, fuzzy
+msgid "Gestión de Autorizaciones API"
+msgstr "Fálj menedzsment inaktív"
+
+# "Configuration updated"
+#: ../../../../web/UsersMgmtC.class.php:456
+#, fuzzy
+msgid "Token de autorización visualizado"
+msgstr "Beállítások frissítve"
+
+#: ../../../../web/UsersMgmtC.class.php:457
+msgid "Autorizaciones"
+msgstr ""
+
+# "Security"
+#: ../../../../web/UsersPrefsC.class.php:84
+#: ../../../../inc/themes/classic/mail.inc:63
+#: ../../../../inc/themes/material-blue/mail.inc:86
+msgid "Seguridad"
+msgstr "Biztonság"
+
+# Enter Security Code
+#: ../../../../inc/themes/classic/2fa.inc:14
+#: ../../../../inc/themes/material-blue/2fa.inc:14
+#, fuzzy
+msgid "Introducir código"
+msgstr "Enter Security Code"
+
+# "Password (Verify)"
+#: ../../../../inc/themes/classic/2fa.inc:26
+#, fuzzy
+msgid "Verificar"
+msgstr "Jelszó (Megerõsítés)"
+
+# "Account name"
+#: ../../../../inc/themes/classic/account.inc:14
+#: ../../../../inc/themes/material-blue/account.inc:21
+msgid "Nombre de cuenta"
+msgstr "Fiók név"
+
+# "Search down or enter"
+#: ../../../../inc/themes/classic/account.inc:35
+msgid "Buscar en desplegable o introducir"
+msgstr "Keress lentebb, vagy nyomj entert"
+
+# "Access URL or IP"
+#: ../../../../inc/themes/classic/account.inc:61
+#: ../../../../inc/themes/material-blue/account.inc:72
+msgid "URL o IP de acceso"
+msgstr "URL vagy IP elérés"
+
+# "Access user"
+#: ../../../../inc/themes/classic/account.inc:73
+#: ../../../../inc/themes/material-blue/account.inc:86
+msgid "Usuario de acceso"
+msgstr "Felhasználó elérése"
+
+# "Password (repeat)"
+#: ../../../../inc/themes/classic/account.inc:90
+#: ../../../../inc/themes/classic/editpass.inc:31
+#: ../../../../inc/themes/classic/users.inc:83
+#: ../../../../inc/themes/classic/userspass.inc:19
+#: ../../../../inc/themes/classic/userspass.inc:21
+#: ../../../../inc/themes/material-blue/account.inc:105
+#: ../../../../inc/themes/material-blue/editpass.inc:36
+#: ../../../../inc/themes/material-blue/install.inc:64
+#: ../../../../inc/themes/material-blue/users.inc:102
+#: ../../../../inc/themes/material-blue/users.inc:109
+#: ../../../../inc/themes/material-blue/userspass.inc:19
+#: ../../../../inc/themes/material-blue/userspass.inc:25
+msgid "Clave (repetir)"
+msgstr "Jelszó (ismét)"
+
+# "Notes"
+#: ../../../../inc/themes/classic/account.inc:97
+#: ../../../../inc/themes/classic/search.inc:73
+#: ../../../../inc/themes/classic/users.inc:91
+#: ../../../../inc/themes/material-blue/account.inc:116
+#: ../../../../inc/themes/material-blue/search.inc:82
+#: ../../../../inc/themes/material-blue/users.inc:116
+msgid "Notas"
+msgstr "Jegyzetek"
+
+# "Notes about the account"
+#: ../../../../inc/themes/classic/account.inc:99
+#: ../../../../inc/themes/material-blue/account.inc:121
+#: ../../../../inc/themes/material-blue/users.inc:123
+msgid "Notas sobre la cuenta"
+msgstr "Jegyzetek a fiókokról"
+
+# "Permissions"
+#: ../../../../inc/themes/classic/account.inc:105
+#: ../../../../inc/themes/material-blue/account.inc:130
+#: ../../../../inc/themes/material-blue/search.inc:75
+msgid "Permisos"
+msgstr "Jofosultságok"
+
+# "Enable Edit"
+#: ../../../../inc/themes/classic/account.inc:132
+#: ../../../../inc/themes/classic/account.inc:163
+#: ../../../../inc/themes/material-blue/account.inc:159
+#: ../../../../inc/themes/material-blue/account.inc:191
+msgid "Hablitar edición"
+msgstr "Szerkesztés engedélyezése"
+
+# "Drop files here (max. 5) or click to select"
+#: ../../../../inc/themes/classic/account.inc:201
+#: ../../../../inc/themes/material-blue/account.inc:243
+msgid "Soltar archivos aquí (max. 5) o click para seleccionar"
+msgstr "Dobja el a fájlokat (max. 5) vagy kattintson a választáshoz"
+
+# "Maximum file size"
+#: ../../../../inc/themes/classic/account.inc:201
+#: ../../../../inc/themes/classic/config.inc:193
+#: ../../../../inc/themes/material-blue/account.inc:243
+#: ../../../../inc/themes/material-blue/config.inc:272
+msgid "Tamaño máximo de archivo"
+msgstr "Maximális fájl méret"
+
+# "History"
+#: ../../../../inc/themes/classic/account.inc:213
+#: ../../../../inc/themes/material-blue/account.inc:255
+msgid "Historial"
+msgstr "Elõzmények"
+
+# "Select date"
+#: ../../../../inc/themes/classic/account.inc:232
+#: ../../../../inc/themes/material-blue/account.inc:275
+msgid "Seleccionar fecha"
+msgstr "Válassz dátumot"
+
+# "Last Modification"
+#: ../../../../inc/themes/classic/account.inc:241
+#: ../../../../inc/themes/classic/users.inc:164
+#: ../../../../inc/themes/material-blue/account.inc:284
+#: ../../../../inc/themes/material-blue/users.inc:208
+msgid "Última Modificación"
+msgstr "Utoljára módosítva"
+
+# "by"
+#: ../../../../inc/themes/classic/account.inc:243
+#: ../../../../inc/themes/material-blue/account.inc:286
+msgid "por"
+msgstr "által"
+
+# "Visits"
+#: ../../../../inc/themes/classic/account.inc:286
+#: ../../../../inc/themes/material-blue/account.inc:333
+msgid "Visitas"
+msgstr "Látogatók"
+
+# "Date Added"
+#: ../../../../inc/themes/classic/account.inc:290
+#: ../../../../inc/themes/material-blue/account.inc:337
+msgid "Fecha Alta"
+msgstr "Dátum hozzáadva"
+
+# "Creator"
+#: ../../../../inc/themes/classic/account.inc:294
+#: ../../../../inc/themes/material-blue/account.inc:341
+msgid "Creador"
+msgstr "Készítõ"
+
+# "Main Group"
+#: ../../../../inc/themes/classic/account.inc:298
+#: ../../../../inc/themes/material-blue/account.inc:200
+#: ../../../../inc/themes/material-blue/account.inc:345
+msgid "Grupo Principal"
+msgstr "Fõcsoport"
+
+# "Secondary Users"
+#: ../../../../inc/themes/classic/account.inc:303
+#: ../../../../inc/themes/material-blue/account.inc:350
+msgid "Usuarios Secundarios"
+msgstr "Másodlagos felhasználók"
+
+# "Secondary Groups"
+#: ../../../../inc/themes/classic/account.inc:322
+#: ../../../../inc/themes/material-blue/account.inc:369
+msgid "Grupos Secundarios"
+msgstr "Másodlagos csoportok"
+
+# "Date Modified"
+#: ../../../../inc/themes/classic/account.inc:342
+#: ../../../../inc/themes/material-blue/account.inc:389
+msgid "Fecha Edición"
+msgstr "Adat módosítva"
+
+# "Editor"
+#: ../../../../inc/themes/classic/account.inc:346
+#: ../../../../inc/themes/material-blue/account.inc:393
+msgid "Editor"
+msgstr "Szerkesztõ"
+
+# "Restore account from this point"
+#: ../../../../inc/themes/classic/account.inc:373
+#: ../../../../inc/themes/material-blue/account.inc:456
+msgid "Restaurar cuenta desde este punto"
+msgstr "Restore véve ezen a ponton"
+
+# Copy Password to Clipboard
+#: ../../../../inc/themes/classic/account.inc:385
+#: ../../../../inc/themes/classic/account.inc:468
+#: ../../../../inc/themes/classic/search.inc:103
+#: ../../../../inc/themes/classic/search.inc:183
+#: ../../../../inc/themes/material-blue/account.inc:423
+#: ../../../../inc/themes/material-blue/account.inc:493
+#: ../../../../inc/themes/material-blue/search.inc:118
+#: ../../../../inc/themes/material-blue/search.inc:197
+#, fuzzy
+msgid "Copiar Clave en Portapapeles"
+msgstr "A jelszó nem lehet üres"
+
+# "View Current"
+#: ../../../../inc/themes/classic/account.inc:401
+#: ../../../../inc/themes/material-blue/account.inc:436
+msgid "Ver Actual"
+msgstr "Általános"
+
+# "Back"
+#: ../../../../inc/themes/classic/account.inc:406
+#: ../../../../inc/themes/classic/editpass.inc:45
+#: ../../../../inc/themes/classic/passreset.inc:46
+#: ../../../../inc/themes/material-blue/passreset.inc:43
+msgid "Volver"
+msgstr "Vissza"
+
+# "Edit Account"
+#: ../../../../inc/themes/classic/account.inc:413
+#: ../../../../inc/themes/classic/search.inc:115
+#: ../../../../inc/themes/material-blue/account.inc:446
+#: ../../../../inc/themes/material-blue/search.inc:130
+msgid "Modificar Cuenta"
+msgstr "Fiók módosítás"
+
+# "Request Modification"
+#: ../../../../inc/themes/classic/account.inc:418
+#: ../../../../inc/themes/classic/search.inc:136
+#: ../../../../inc/themes/material-blue/account.inc:450
+#: ../../../../inc/themes/material-blue/search.inc:150
+msgid "Solicitar Modificación"
+msgstr "Kérés módosítás"
+
+# "Save"
+#: ../../../../inc/themes/classic/account.inc:425
+#: ../../../../inc/themes/classic/categories.inc:62
+#: ../../../../inc/themes/classic/config.inc:275
+#: ../../../../inc/themes/classic/customers.inc:62
+#: ../../../../inc/themes/classic/customfields.inc:63
+#: ../../../../inc/themes/classic/editpass.inc:50
+#: ../../../../inc/themes/classic/encryption.inc:102
+#: ../../../../inc/themes/classic/groups.inc:77
+#: ../../../../inc/themes/classic/ldap.inc:229
+#: ../../../../inc/themes/classic/mail.inc:107
+#: ../../../../inc/themes/classic/profiles.inc:168
+#: ../../../../inc/themes/classic/security.inc:57
+#: ../../../../inc/themes/classic/tokens.inc:59
+#: ../../../../inc/themes/classic/users.inc:189
+#: ../../../../inc/themes/classic/userspass.inc:35
+#: ../../../../inc/themes/classic/wiki.inc:110
+#: ../../../../inc/themes/material-blue/account.inc:462
+#: ../../../../inc/themes/material-blue/categories.inc:72
+#: ../../../../inc/themes/material-blue/config.inc:388
+#: ../../../../inc/themes/material-blue/customers.inc:73
+#: ../../../../inc/themes/material-blue/customfields.inc:74
+#: ../../../../inc/themes/material-blue/editpass.inc:60
+#: ../../../../inc/themes/material-blue/groups.inc:88
+#: ../../../../inc/themes/material-blue/ldap.inc:257
+#: ../../../../inc/themes/material-blue/mail.inc:145
+#: ../../../../inc/themes/material-blue/profiles.inc:177
+#: ../../../../inc/themes/material-blue/security.inc:61
+#: ../../../../inc/themes/material-blue/tokens.inc:63
+#: ../../../../inc/themes/material-blue/users.inc:235
+#: ../../../../inc/themes/material-blue/userspass.inc:40
+#: ../../../../inc/themes/material-blue/wiki.inc:124
+msgid "Guardar"
+msgstr "Mentés"
+
+# "Select secondary groups"
+#: ../../../../inc/themes/classic/account.inc:435
+#: ../../../../inc/themes/material-blue/account.inc:472
+msgid "Seleccionar grupos secundarios"
+msgstr " Válassz másodlagos csoportot"
+
+# "Select users"
+#: ../../../../inc/themes/classic/account.inc:439
+#: ../../../../inc/themes/material-blue/account.inc:475
+msgid "Seleccionar usuarios"
+msgstr "Válassz felhasználót"
+
+# Password Copied to Clipboard
+#: ../../../../inc/themes/classic/account.inc:472
+#: ../../../../inc/themes/classic/search.inc:187
+#: ../../../../inc/themes/material-blue/account.inc:497
+#: ../../../../inc/themes/material-blue/search.inc:201
+#, fuzzy
+msgid "Clave Copiada al Portapapeles"
+msgstr "Hiba a jelszó frissítése közben"
+
+# "Result"
+#: ../../../../inc/themes/classic/backup.inc:10
+#: ../../../../inc/themes/classic/backup.inc:67
+#: ../../../../inc/themes/material-blue/backup.inc:10
+#: ../../../../inc/themes/material-blue/backup.inc:71
+msgid "Resultado"
+msgstr "Eredmény"
+
+# "Download Current"
+#: ../../../../inc/themes/classic/backup.inc:18
+#: ../../../../inc/themes/classic/backup.inc:75
+#: ../../../../inc/themes/material-blue/backup.inc:18
+#: ../../../../inc/themes/material-blue/backup.inc:79
+msgid "Descargar Actual"
+msgstr "Aktuális letöltés"
+
+# "There're no backups for download"
+#: ../../../../inc/themes/classic/backup.inc:31
+#: ../../../../inc/themes/material-blue/backup.inc:31
+msgid "No hay backups para descargar"
+msgstr "Nincsenek letölthetõ Archívumok"
+
+#: ../../../../inc/themes/classic/backup.inc:45
+#: ../../../../inc/themes/classic/backup.inc:49
+#: ../../../../inc/themes/classic/backup.inc:113
+#: ../../../../inc/themes/classic/backup.inc:117
+#: ../../../../inc/themes/classic/encryption.inc:93
+#: ../../../../inc/themes/classic/encryption.inc:97
+#: ../../../../inc/themes/classic/encryption.inc:152
+#: ../../../../inc/themes/classic/encryption.inc:156
+#: ../../../../inc/themes/classic/import.inc:15
+#: ../../../../inc/themes/classic/import.inc:37
+#: ../../../../inc/themes/classic/import.inc:51
+#: ../../../../inc/themes/classic/import.inc:97
+#: ../../../../inc/themes/classic/import.inc:118
+#: ../../../../inc/themes/classic/import.inc:170
+#: ../../../../inc/themes/classic/import.inc:174
+#: ../../../../inc/themes/classic/js-common.inc:13
+#: ../../../../inc/themes/classic/ldap.inc:13
+#: ../../../../inc/themes/classic/ldap.inc:33
+#: ../../../../inc/themes/classic/ldap.inc:58
+#: ../../../../inc/themes/classic/ldap.inc:82
+#: ../../../../inc/themes/classic/ldap.inc:93
+#: ../../../../inc/themes/classic/ldap.inc:117
+#: ../../../../inc/themes/classic/ldap.inc:145
+#: ../../../../inc/themes/classic/ldap.inc:166
+#: ../../../../inc/themes/classic/ldap.inc:187
+#: ../../../../inc/themes/classic/wiki.inc:12
+#: ../../../../inc/themes/classic/wiki.inc:28
+#: ../../../../inc/themes/classic/wiki.inc:55
+#: ../../../../inc/themes/classic/wiki.inc:82
+#: ../../../../inc/themes/material-blue/backup.inc:47
+#: ../../../../inc/themes/material-blue/backup.inc:51
+#: ../../../../inc/themes/material-blue/backup.inc:129
+#: ../../../../inc/themes/material-blue/backup.inc:133
+#: ../../../../inc/themes/material-blue/encryption.inc:107
+#: ../../../../inc/themes/material-blue/encryption.inc:111
+#: ../../../../inc/themes/material-blue/encryption.inc:171
+#: ../../../../inc/themes/material-blue/encryption.inc:175
+#: ../../../../inc/themes/material-blue/import.inc:99
+#: ../../../../inc/themes/material-blue/import.inc:103
+#: ../../../../inc/themes/material-blue/js-common.inc:11
+#, fuzzy
+msgid "Ayuda"
+msgstr "Segítség :: GYIK :: Változások Listája"
+
+#: ../../../../inc/themes/classic/backup.inc:50
+#: ../../../../inc/themes/material-blue/backup.inc:52
+msgid ""
+"La copia de seguridad permite guardar y descargar tanto la base de datos de "
+"sysPass como los archivos de la aplicación y su configuración."
+msgstr ""
+
+#: ../../../../inc/themes/classic/backup.inc:52
+#: ../../../../inc/themes/material-blue/backup.inc:54
+msgid ""
+"Con este método es posible guardar todos los datos de sysPass en otro lugar "
+"o utilizarlos para hacer la aplicación portable."
+msgstr ""
+
+# "Import Accounts"
+#: ../../../../inc/themes/classic/backup.inc:60
+#: ../../../../inc/themes/classic/backup.inc:126
+#: ../../../../inc/themes/material-blue/backup.inc:64
+#, fuzzy
+msgid "Exportar Cuentas"
+msgstr "Fiókok"
+
+# "There're no backups for download"
+#: ../../../../inc/themes/classic/backup.inc:84
+#: ../../../../inc/themes/material-blue/backup.inc:88
+#, fuzzy
+msgid "No hay archivos XML para descargar"
+msgstr "Nincsenek letölthetõ Archívumok"
+
+# "Bind Password"
+#: ../../../../inc/themes/classic/backup.inc:90
+#: ../../../../inc/themes/material-blue/backup.inc:94
+#: ../../../../inc/themes/material-blue/backup.inc:101
+#, fuzzy
+msgid "Clave de Exportación"
+msgstr "Változás felhasználói jelszó"
+
+# "Password (repeat)"
+#: ../../../../inc/themes/classic/backup.inc:98
+#: ../../../../inc/themes/material-blue/backup.inc:107
+#: ../../../../inc/themes/material-blue/backup.inc:114
+#, fuzzy
+msgid "Clave de Exportación (repetir)"
+msgstr "Jelszó (ismét)"
+
+#: ../../../../inc/themes/classic/backup.inc:118
+#: ../../../../inc/themes/material-blue/backup.inc:134
+msgid ""
+"La exportación de cuentas permite guardar las cuentas y sus datos en formato "
+"XML para posteriormente poder ser importados en otras instancias de sysPass."
+msgstr ""
+
+#: ../../../../inc/themes/classic/backup.inc:120
+#: ../../../../inc/themes/material-blue/backup.inc:136
+msgid "Los elementos exportados son cuentas, clientes y categorías."
+msgstr ""
+
+#: ../../../../inc/themes/classic/backup.inc:122
+#: ../../../../inc/themes/material-blue/backup.inc:138
+msgid ""
+"Las claves de las cuentas son exportadas de forma encriptada para mayor "
+"seguridad."
+msgstr ""
+
+#: ../../../../inc/themes/classic/backup.inc:124
+#: ../../../../inc/themes/material-blue/backup.inc:140
+msgid ""
+"Es posible establecer una clave de exportación para guardar todos los datos "
+"encriptados en el archivo XML."
+msgstr ""
+
+# "Javascript is needed in order to run correctly"
+#: ../../../../inc/themes/classic/body.inc:4
+#: ../../../../inc/themes/material-blue/body.inc:4
+msgid "Javascript es necesario para el correcto funcionamiento"
+msgstr "Java szkript szükséges a megfelelõ mûködéshez"
+
+# "Category name"
+#: ../../../../inc/themes/classic/categories.inc:10
+#: ../../../../inc/themes/material-blue/categories.inc:14
+msgid "Nombre de la categoría"
+msgstr "Kategória név"
+
+# "Category description"
+#: ../../../../inc/themes/classic/categories.inc:18
+#: ../../../../inc/themes/material-blue/categories.inc:26
+msgid "Descripción de la categoría"
+msgstr "Kategória leírás"
+
+# "Site"
+#: ../../../../inc/themes/classic/config.inc:4
+#: ../../../../inc/themes/material-blue/config.inc:4
+msgid "Sitio"
+msgstr "Oldal"
+
+# "Language"
+#: ../../../../inc/themes/classic/config.inc:10
+#: ../../../../inc/themes/material-blue/config.inc:11
+msgid "Idioma"
+msgstr "Nyelv"
+
+#: ../../../../inc/themes/classic/config.inc:21
+#: ../../../../inc/themes/material-blue/config.inc:22
+msgid "Tema Visual"
+msgstr ""
+
+# "Session timeout (s)"
+#: ../../../../inc/themes/classic/config.inc:33
+#: ../../../../inc/themes/material-blue/config.inc:34
+#: ../../../../inc/themes/material-blue/config.inc:42
+msgid "Timeout de sesión (s)"
+msgstr "Munkamenet idõ"
+
+# "Enable event log"
+#: ../../../../inc/themes/classic/config.inc:42
+#: ../../../../inc/themes/material-blue/config.inc:48
+msgid "Habilitar log de eventos"
+msgstr "Esemény napló engedélyezése"
+
+# "It saves the actions done by the application."
+#: ../../../../inc/themes/classic/config.inc:46
+#: ../../../../inc/themes/material-blue/config.inc:52
+#, fuzzy
+msgid "Guarda las acciones realizadas en la aplicación."
+msgstr "Ez elmenti az akciók kimenetét"
+
+# "Enable debug"
+#: ../../../../inc/themes/classic/config.inc:58
+#: ../../../../inc/themes/material-blue/config.inc:66
+msgid "Habilitar depuración"
+msgstr "Nyomkövetés engedélyezése"
+
+# "Shows some information about application and performance."
+#: ../../../../inc/themes/classic/config.inc:62
+#: ../../../../inc/themes/material-blue/config.inc:70
+#, fuzzy
+msgid ""
+"Muestra información relativa a la configuración de la aplicación y "
+"rendimiento."
+msgstr "Mutat néhány információt az alkalmazásról és a teljesítményrõl"
+
+# "Maintenance mode."
+#: ../../../../inc/themes/classic/config.inc:74
+#: ../../../../inc/themes/material-blue/config.inc:84
+msgid "Modo mantenimiento"
+msgstr "Fenntartás mód"
+
+# "In this mode you cannot login to application. To disable it, you need to modify configuration file."
+#: ../../../../inc/themes/classic/config.inc:78
+#: ../../../../inc/themes/material-blue/config.inc:88
+#, fuzzy
+msgid ""
+"En este modo no se puede acceder a la aplicación. Para deshabilitarlo es "
+"necesario modificar el archivo de configuración."
+msgstr ""
+"Ezen a módon nem tudsz bejelentkezni az alkalmazásba. Hogy kikapcsold, "
+"módosítanod kell a konfigurációs fájlt"
+
+# "Check for updates"
+#: ../../../../inc/themes/classic/config.inc:90
+#: ../../../../inc/themes/material-blue/config.inc:102
+msgid "Comprobar actualizaciones"
+msgstr "Frissítések keresése"
+
+# "Check for application updates (only for administrators)."
+#: ../../../../inc/themes/classic/config.inc:94
+#: ../../../../inc/themes/material-blue/config.inc:106
+#, fuzzy
+msgid ""
+"Comprobar actualizaciones de la aplicación (sólo para los usuarios "
+"administradores)."
+msgstr "Azlkalmazás frissítések keresése (csak rendszergazda esetén)"
+
+# "Check for updates"
+#: ../../../../inc/themes/classic/config.inc:106
+#: ../../../../inc/themes/material-blue/config.inc:120
+#, fuzzy
+msgid "Comprobar notificaciones"
+msgstr "Ellenõrzés"
+
+# "Check for application updates (only for administrators)."
+#: ../../../../inc/themes/classic/config.inc:110
+#: ../../../../inc/themes/material-blue/config.inc:124
+#, fuzzy
+msgid ""
+"Comprobar si existen notificaciones de seguridad o avisos de sysPass (sólo "
+"para los usuarios administradores)."
+msgstr "Azlkalmazás frissítések keresése (csak rendszergazda esetén)"
+
+# "Account name as link"
+#: ../../../../inc/themes/classic/config.inc:122
+#: ../../../../inc/themes/material-blue/config.inc:145
+msgid "Nombre de cuenta como enlace"
+msgstr "Fiók neve linkként"
+
+# "Enables account name as a link to account details in search page."
+#: ../../../../inc/themes/classic/config.inc:126
+#: ../../../../inc/themes/material-blue/config.inc:149
+#, fuzzy
+msgid ""
+"Habilita el nombre de la cuenta de la búsqueda, como enlace a los detalles "
+"de la cuenta."
+msgstr "Fiók nevére való keresés engedélyezése"
+
+# "Files management"
+#: ../../../../inc/themes/classic/config.inc:138
+#: ../../../../inc/themes/material-blue/config.inc:230
+msgid "Gestión de archivos"
+msgstr "Fájl menedzsment"
+
+# "Enables upload/download accounts files."
+#: ../../../../inc/themes/classic/config.inc:142
+#: ../../../../inc/themes/material-blue/config.inc:234
+#, fuzzy
+msgid "Habilita la subida/descarga de archivos para las cuentas."
+msgstr "Fájlok Fel/Letöltésének engedélyezése"
+
+# "Global searches"
+#: ../../../../inc/themes/classic/config.inc:154
+#: ../../../../inc/themes/material-blue/config.inc:163
+msgid "Búsquedas globales"
+msgstr "Gblobális Keresések"
+
+#: ../../../../inc/themes/classic/config.inc:158
+#: ../../../../inc/themes/material-blue/config.inc:167
+msgid ""
+"Permite que todos los usuarios puedan realizar búsquedas en todas las "
+"cuentas, pero no pueden ver el contenido de las que no tienen permisos."
+msgstr ""
+
+# "Allowed file extensions"
+#: ../../../../inc/themes/classic/config.inc:170
+#: ../../../../inc/themes/material-blue/config.inc:249
+msgid "Extensiones de archivos permitidas"
+msgstr "Engedélyezett fájl kiterjesztés"
+
+#: ../../../../inc/themes/classic/config.inc:174
+#: ../../../../inc/themes/material-blue/config.inc:253
+#, fuzzy
+msgid "Extensiones permitidas para la subida de archivos."
+msgstr "Fájlok Fel/Letöltésének engedélyezése"
+
+# "Extensions max length is 4 characters."
+#: ../../../../inc/themes/classic/config.inc:178
+#: ../../../../inc/themes/material-blue/config.inc:257
+#, fuzzy
+msgid "Se permite un máximo de 4 caracteres."
+msgstr "A kiterjesztések hossza maximum 4 karakter lehet"
+
+# "Write extension and press enter to add."
+#: ../../../../inc/themes/classic/config.inc:182
+#: ../../../../inc/themes/material-blue/config.inc:261
+#, fuzzy
+msgid ""
+"Escribir extensión y pulsar intro para añadir. Es necesario guardar la "
+"configuración."
+msgstr "Írj kiterjesztést, majd nyomj entert a hozzáadáshoz"
+
+# "Sets up the max upload file size."
+#: ../../../../inc/themes/classic/config.inc:197
+#: ../../../../inc/themes/material-blue/config.inc:276
+#, fuzzy
+msgid "Establece el tamaño máximo para subir archivos."
+msgstr "A feltölthetõ fájlméret maximális értékének beállítása"
+
+# "The absolute maximum is 16MB."
+#: ../../../../inc/themes/classic/config.inc:201
+#: ../../../../inc/themes/material-blue/config.inc:280
+#, fuzzy
+msgid "El máximo absuluto es de 16MB."
+msgstr "A maximum 16MB"
+
+# "Results per page"
+#: ../../../../inc/themes/classic/config.inc:212
+#: ../../../../inc/themes/material-blue/config.inc:181
+msgid "Resultados por página"
+msgstr "Eredmény / oldal"
+
+# "Number of results that are shown per page when searching"
+#: ../../../../inc/themes/classic/config.inc:216
+#: ../../../../inc/themes/material-blue/config.inc:185
+#, fuzzy
+msgid "Número de resultados por página a mostrar, al realizar una búsqueda."
+msgstr "Keresési találok száma oldalanként"
+
+# Results like Cards
+#: ../../../../inc/themes/classic/config.inc:227
+#, fuzzy
+msgid "Resultados en Tarjetas"
+msgstr "Nincsenek eredmények"
+
+# Enables to show account's search results like a card format.
+#: ../../../../inc/themes/classic/config.inc:231
+#, fuzzy
+msgid "Muestra los resultados de búsqueda de cuentas en formato tarjeta."
+msgstr "Enables to show account's search results like a card format."
+
+#: ../../../../inc/themes/classic/config.inc:243
+#: ../../../../inc/themes/material-blue/config.inc:201
+#, fuzzy
+msgid "Imagen para mostrar clave"
+msgstr "Mester jelszó szükséges a jelszavak titkosításához"
+
+# "Error on retrieving accounts' passwords"
+#: ../../../../inc/themes/classic/config.inc:247
+#: ../../../../inc/themes/material-blue/config.inc:205
+#, fuzzy
+msgid "Generar una imagen con el texto de la clave de la cuenta."
+msgstr "Hiba a fiókok jelszavainak betöltése közben"
+
+#: ../../../../inc/themes/classic/config.inc:250
+#: ../../../../inc/themes/material-blue/config.inc:208
+msgid "Util para entornos donde copiar la clave supone un riesgo de seguridad."
+msgstr ""
+
+# "Add extension"
+#: ../../../../inc/themes/classic/config.inc:285
+#: ../../../../inc/themes/material-blue/config.inc:398
+msgid "Añadir extensión"
+msgstr "Kiterjesztés hozzáadása"
+
+# "Delete extension"
+#: ../../../../inc/themes/classic/config.inc:286
+#: ../../../../inc/themes/material-blue/config.inc:399
+msgid "Eliminar extensión"
+msgstr "Kiterjesztés törlése"
+
+# "Customer name"
+#: ../../../../inc/themes/classic/customers.inc:10
+#: ../../../../inc/themes/material-blue/customers.inc:14
+msgid "Nombre del cliente"
+msgstr "Ügyfél név"
+
+# "Customer description"
+#: ../../../../inc/themes/classic/customers.inc:18
+#: ../../../../inc/themes/material-blue/customers.inc:26
+msgid "Descripción del cliente"
+msgstr "Ügyfél leírás"
+
+# "Text to search"
+#: ../../../../inc/themes/classic/customfields.inc:38
+#: ../../../../inc/themes/material-blue/customfields.inc:41
+#, fuzzy
+msgid "Texto Ayuda"
+msgstr "Keresendõ szöveg"
+
+#: ../../../../inc/themes/classic/customfields.inc:44
+#: ../../../../inc/themes/material-blue/customfields.inc:52
+msgid "Obligatorio"
+msgstr ""
+
+# "Master Password"
+#: ../../../../inc/themes/classic/encryption.inc:8
+#: ../../../../inc/themes/classic/install.inc:46
+#: ../../../../inc/themes/classic/install.inc:50
+#: ../../../../inc/themes/classic/install.inc:51
+#: ../../../../inc/themes/classic/login.inc:15
+#: ../../../../inc/themes/classic/login.inc:27
+#: ../../../../inc/themes/material-blue/encryption.inc:8
+#: ../../../../inc/themes/material-blue/install.inc:49
+#: ../../../../inc/themes/material-blue/install.inc:56
+#: ../../../../inc/themes/material-blue/login.inc:25
+#: ../../../../inc/themes/material-blue/login.inc:48
+msgid "Clave Maestra"
+msgstr "Mester jelszó"
+
+# "Last Change"
+#: ../../../../inc/themes/classic/encryption.inc:16
+#: ../../../../inc/themes/classic/encryption.inc:116
+#: ../../../../inc/themes/material-blue/encryption.inc:16
+#: ../../../../inc/themes/material-blue/encryption.inc:131
+msgid "Último cambio"
+msgstr "Utolsó változtatás"
+
+# "Current Master Password"
+#: ../../../../inc/themes/classic/encryption.inc:25
+#: ../../../../inc/themes/material-blue/encryption.inc:25
+#: ../../../../inc/themes/material-blue/encryption.inc:31
+msgid "Clave Maestra actual"
+msgstr "Jelenlegki mester jelszó"
+
+# "New Master Password"
+#: ../../../../inc/themes/classic/encryption.inc:34
+#: ../../../../inc/themes/material-blue/encryption.inc:37
+#: ../../../../inc/themes/material-blue/encryption.inc:43
+msgid "Nueva Clave Maestra"
+msgstr "Új mester jelszó"
+
+# "New Master Password (repeat)"
+#: ../../../../inc/themes/classic/encryption.inc:43
+#: ../../../../inc/themes/material-blue/encryption.inc:49
+#: ../../../../inc/themes/material-blue/encryption.inc:55
+msgid "Nueva Clave Maestra (repetir)"
+msgstr "Új mester jelszó (megerõsítés)"
+
+# "Don't modify accounts"
+#: ../../../../inc/themes/classic/encryption.inc:51
+#: ../../../../inc/themes/material-blue/encryption.inc:61
+msgid "No modificar cuentas"
+msgstr "Ne módosítsa a fiókokat"
+
+# "Sets a new master password without re-encrypt the accounts."
+#: ../../../../inc/themes/classic/encryption.inc:56
+#: ../../../../inc/themes/material-blue/encryption.inc:66
+msgid "Establece una nueva clave maestra sin re-encriptar las cuentas"
+msgstr "Új mester jelszó beállítása a fiók újratitkosítása nélkül"
+
+# "Confirm Change"
+#: ../../../../inc/themes/classic/encryption.inc:67
+#: ../../../../inc/themes/material-blue/encryption.inc:79
+msgid "Confirmar cambio"
+msgstr "Változás megerõsítése"
+
+# "Warning"
+#: ../../../../inc/themes/classic/encryption.inc:70
+#: ../../../../inc/themes/classic/encryption.inc:73
+#: ../../../../inc/themes/classic/encryption.inc:76
+#: ../../../../inc/themes/classic/import.inc:67
+#: ../../../../inc/themes/classic/security.inc:43
+msgid "Atención"
+msgstr "Figyelem"
+
+# "You should save the new password on a secure place"
+#: ../../../../inc/themes/classic/encryption.inc:71
+#: ../../../../inc/themes/material-blue/encryption.inc:83
+msgid "Guarde la nueva clave en un lugar seguro."
+msgstr "Tárold biztonságos helyen az új jelszót"
+
+# "All accounts passwords will be encrypted again."
+#: ../../../../inc/themes/classic/encryption.inc:74
+#: ../../../../inc/themes/material-blue/encryption.inc:86
+msgid "Se volverán a encriptar las claves de todas las cuentas."
+msgstr "Minden fiók jelszó újra titkosítva lesz"
+
+# "All users must re-enter the new master password."
+#: ../../../../inc/themes/classic/encryption.inc:77
+#: ../../../../inc/themes/material-blue/encryption.inc:89
+msgid "Los usuarios deberán de introducir la nueva clave maestra."
+msgstr "Minden felhasználónak úrja be kell írnia az új mester jelszót"
+
+#: ../../../../inc/themes/classic/encryption.inc:98
+#: ../../../../inc/themes/material-blue/encryption.inc:112
+msgid ""
+"La clave maestra es utilizada para encriptar las claves de las cuentas de "
+"sysPass para mantenerlas seguras."
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:100
+#: ../../../../inc/themes/material-blue/encryption.inc:114
+msgid ""
+"Es recomendable cambiarla cada cierto tiempo y utilizar una clave compleja "
+"que incluya números, letras y símbolos."
+msgstr ""
+
+# "Master Password"
+#: ../../../../inc/themes/classic/encryption.inc:108
+#: ../../../../inc/themes/material-blue/encryption.inc:124
+#, fuzzy
+msgid "Clave Temporal"
+msgstr "Generate Temporary Password"
+
+# "Generated Password"
+#: ../../../../inc/themes/classic/encryption.inc:119
+#: ../../../../inc/themes/classic/encryption.inc:130
+#: ../../../../inc/themes/material-blue/encryption.inc:134
+#: ../../../../inc/themes/material-blue/encryption.inc:145
+#, fuzzy
+msgid "No generada"
+msgstr "Generált Jelszó"
+
+#: ../../../../inc/themes/classic/encryption.inc:124
+#: ../../../../inc/themes/material-blue/encryption.inc:139
+msgid "Válido hasta"
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:136
+#: ../../../../inc/themes/material-blue/encryption.inc:151
+#: ../../../../inc/themes/material-blue/encryption.inc:157
+#, fuzzy
+msgid "Validez (s)"
+msgstr "Munkamenet idõ"
+
+#: ../../../../inc/themes/classic/encryption.inc:139
+msgid "Validez"
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:157
+#: ../../../../inc/themes/material-blue/encryption.inc:176
+msgid ""
+"La clave temporal es utilizada como clave maestra para los usuarios que "
+"necesitan introducirla al iniciar la sesión, así no es necesario facilitar "
+"la clave maestra original."
+msgstr ""
+
+# "General"
+#: ../../../../inc/themes/classic/encryption.inc:159
+#: ../../../../inc/themes/material-blue/encryption.inc:180
+#, fuzzy
+msgid "Generar"
+msgstr "Generate Temporary Password"
+
+# "No records found"
+#: ../../../../inc/themes/classic/eventlog.inc:8
+#: ../../../../inc/themes/classic/search.inc:3
+#: ../../../../inc/themes/material-blue/eventlog.inc:7
+#: ../../../../inc/themes/material-blue/search.inc:3
+msgid "No se encontraron registros"
+msgstr "Nem találtam rekordokat"
+
+# "Date / Time"
+#: ../../../../inc/themes/classic/eventlog.inc:19
+#: ../../../../inc/themes/material-blue/eventlog.inc:18
+msgid "Fecha / Hora"
+msgstr "Dátum / Idõ"
+
+# "Event"
+#: ../../../../inc/themes/classic/eventlog.inc:22
+#: ../../../../inc/themes/material-blue/eventlog.inc:21
+msgid "Evento"
+msgstr "Esemény"
+
+# "IP"
+#: ../../../../inc/themes/classic/eventlog.inc:28
+#: ../../../../inc/themes/material-blue/eventlog.inc:27
+msgid "IP"
+msgstr "IP"
+
+# "First page"
+#: ../../../../inc/themes/classic/eventlog.inc:86
+#: ../../../../inc/themes/classic/search.inc:159
+#: ../../../../inc/themes/material-blue/eventlog.inc:85
+#: ../../../../inc/themes/material-blue/search.inc:173
+msgid "Primera página"
+msgstr "Elsõ oldal"
+
+# "Previous page"
+#: ../../../../inc/themes/classic/eventlog.inc:88
+#: ../../../../inc/themes/classic/search.inc:161
+#: ../../../../inc/themes/material-blue/eventlog.inc:87
+#: ../../../../inc/themes/material-blue/search.inc:175
+msgid "Página anterior"
+msgstr "Elõzõ oldal"
+
+# "Next page"
+#: ../../../../inc/themes/classic/eventlog.inc:93
+#: ../../../../inc/themes/classic/search.inc:166
+#: ../../../../inc/themes/material-blue/eventlog.inc:92
+#: ../../../../inc/themes/material-blue/search.inc:180
+msgid "Página siguiente"
+msgstr "Következõ oldal"
+
+# "Last page"
+#: ../../../../inc/themes/classic/eventlog.inc:95
+#: ../../../../inc/themes/classic/search.inc:168
+#: ../../../../inc/themes/material-blue/eventlog.inc:94
+#: ../../../../inc/themes/material-blue/search.inc:182
+msgid "Última página"
+msgstr "Utolsó oldal"
+
+# "View File"
+#: ../../../../inc/themes/classic/files.inc:22
+#: ../../../../inc/themes/material-blue/files.inc:21
+msgid "Ver Archivo"
+msgstr "Fájl megtekintése"
+
+#: ../../../../inc/themes/classic/footer.inc:6
+#: ../../../../inc/themes/material-blue/footer.inc:27
+msgid "Indica si la conexión utiliza HTTPS."
+msgstr ""
+
+#: ../../../../inc/themes/classic/footer.inc:6
+#: ../../../../inc/themes/material-blue/footer.inc:27
+msgid ""
+"Las claves de formularios enviados se encriptan mediante PKI, el resto de "
+"datos no."
+msgstr ""
+
+# "Security"
+#: ../../../../inc/themes/classic/footer.inc:6
+#: ../../../../inc/themes/material-blue/footer.inc:27
+#, fuzzy
+msgid "Seguro"
+msgstr "Biztonság"
+
+#: ../../../../inc/themes/classic/footer.inc:6
+#: ../../../../inc/themes/material-blue/footer.inc:27
+msgid "Inseguro"
+msgstr ""
+
+# Help :: FAQ :: Changelog
+#: ../../../../inc/themes/classic/footer.inc:11
+#: ../../../../inc/themes/material-blue/footer.inc:18
+msgid "Ayuda :: FAQ :: Changelog"
+msgstr "Segítség :: GYIK :: Változások Listája"
+
+# "A cygnux.org project"
+#: ../../../../inc/themes/classic/footer.inc:14
+#: ../../../../inc/themes/material-blue/footer.inc:23
+msgid "Un proyecto de cygnux.org"
+msgstr "A cygnux.org projekt"
+
+# "Group name"
+#: ../../../../inc/themes/classic/groups.inc:10
+#: ../../../../inc/themes/material-blue/groups.inc:14
+msgid "Nombre del grupo"
+msgstr "Csoport név"
+
+# "Group description"
+#: ../../../../inc/themes/classic/groups.inc:18
+#: ../../../../inc/themes/material-blue/groups.inc:26
+msgid "Descripción del grupo"
+msgstr "Csoport leírás"
+
+# "phpPMS Import"
+#: ../../../../inc/themes/classic/import.inc:7
+#: ../../../../inc/themes/material-blue/import.inc:121
+msgid "Importar phpPMS"
+msgstr "phpPMS importálása"
+
+# "DB Username"
+#: ../../../../inc/themes/classic/import.inc:14
+#: ../../../../inc/themes/classic/install.inc:63
+#: ../../../../inc/themes/classic/install.inc:64
+#: ../../../../inc/themes/material-blue/import.inc:128
+#: ../../../../inc/themes/material-blue/import.inc:140
+msgid "Usuario BBDD"
+msgstr "DB felhasználónév"
+
+# "Enter phpPMS database connection user"
+#: ../../../../inc/themes/classic/import.inc:18
+#: ../../../../inc/themes/material-blue/import.inc:132
+#, fuzzy
+msgid "Indicar el usuario de conexión a la base de datos de phpPMS."
+msgstr "Írd be az adatbázis kapcsolati felhasználót"
+
+# "DB Password"
+#: ../../../../inc/themes/classic/import.inc:28
+#: ../../../../inc/themes/classic/install.inc:71
+#: ../../../../inc/themes/classic/install.inc:73
+#: ../../../../inc/themes/material-blue/import.inc:146
+#: ../../../../inc/themes/material-blue/import.inc:152
+msgid "Clave BBDD"
+msgstr "Adatbázis jelszó"
+
+# "DB Name"
+#: ../../../../inc/themes/classic/import.inc:36
+#: ../../../../inc/themes/classic/install.inc:78
+#: ../../../../inc/themes/classic/install.inc:79
+#: ../../../../inc/themes/material-blue/import.inc:158
+#: ../../../../inc/themes/material-blue/import.inc:170
+msgid "Nombre BBDD"
+msgstr "DB név"
+
+# "Enter phpPMS database name"
+#: ../../../../inc/themes/classic/import.inc:40
+#: ../../../../inc/themes/material-blue/import.inc:162
+#, fuzzy
+msgid "Indicar el nombre de la base de datos de phpPMS."
+msgstr "Írd be a phpPMS adatbázis nevét"
+
+# "DB Server"
+#: ../../../../inc/themes/classic/import.inc:50
+#: ../../../../inc/themes/classic/install.inc:87
+#: ../../../../inc/themes/classic/install.inc:88
+#: ../../../../inc/themes/material-blue/import.inc:176
+#: ../../../../inc/themes/material-blue/import.inc:188
+msgid "Servidor BBDD"
+msgstr "DB szerver"
+
+# "Enter phpPMS database server name"
+#: ../../../../inc/themes/classic/import.inc:54
+#: ../../../../inc/themes/material-blue/import.inc:180
+#, fuzzy
+msgid "Indicar el servidor de la base de datos de phpPMS."
+msgstr "Írd be az adatbázis szerver nevét"
+
+# "Confirm"
+#: ../../../../inc/themes/classic/import.inc:64
+#: ../../../../inc/themes/material-blue/import.inc:194
+msgid "Confirmar"
+msgstr "Megerõsítés"
+
+# "Current data will be removed (except current user)"
+#: ../../../../inc/themes/classic/import.inc:68
+#: ../../../../inc/themes/material-blue/import.inc:198
+msgid "Los datos actuales serán borrados (excepto el usuario actual)"
+msgstr "Jelenlegi adatok törlése (kivéve a jelenlegi felhasználót)"
+
+# "Start"
+#: ../../../../inc/themes/classic/import.inc:83
+msgid "Iniciar"
+msgstr "Start"
+
+# CSV/XML Import
+#: ../../../../inc/themes/classic/import.inc:89
+#: ../../../../inc/themes/material-blue/import.inc:7
+#, fuzzy
+msgid "Importar CSV/XML"
+msgstr "Import CSV/XML"
+
+# Default Group
+#: ../../../../inc/themes/classic/import.inc:96
+#: ../../../../inc/themes/material-blue/import.inc:14
+#, fuzzy
+msgid "Usuario por Defecto"
+msgstr "Rendezés Felhasználónév szerint"
+
+# Define the default users profile for new LDAP users
+#: ../../../../inc/themes/classic/import.inc:100
+#: ../../../../inc/themes/material-blue/import.inc:18
+#, fuzzy
+msgid "Define el usuario por defecto para las cuentas importadas."
+msgstr "Define the default users profile for new LDAP users"
+
+# Default Group
+#: ../../../../inc/themes/classic/import.inc:117
+#: ../../../../inc/themes/classic/ldap.inc:144
+#: ../../../../inc/themes/material-blue/import.inc:36
+#: ../../../../inc/themes/material-blue/ldap.inc:170
+#, fuzzy
+msgid "Grupo por Defecto"
+msgstr "Csoportot használja a:"
+
+# Define the default users group for new LDAP users
+#: ../../../../inc/themes/classic/import.inc:121
+#: ../../../../inc/themes/material-blue/import.inc:40
+#, fuzzy
+msgid "Define el grupo por defecto para las cuentas importadas."
+msgstr "Define the default users group for new LDAP users"
+
+# "Bind Password"
+#: ../../../../inc/themes/classic/import.inc:138
+#: ../../../../inc/themes/material-blue/import.inc:58
+#: ../../../../inc/themes/material-blue/import.inc:64
+#, fuzzy
+msgid "Clave de Importación"
+msgstr "Fiók importálás megerõsítése"
+
+#: ../../../../inc/themes/classic/import.inc:146
+#: ../../../../inc/themes/material-blue/import.inc:70
+#: ../../../../inc/themes/material-blue/import.inc:76
+msgid "Delimitador CSV"
+msgstr ""
+
+# "Drop files here or click to select"
+#: ../../../../inc/themes/classic/import.inc:162
+#: ../../../../inc/themes/material-blue/import.inc:90
+msgid "Soltar archivo aquí o click para seleccionar"
+msgstr "Dobja el a fájlokat vagy kattintson a választáshoz"
+
+#: ../../../../inc/themes/classic/import.inc:175
+msgid ""
+"Permite realizar la importación de Cuentas, Categorías y Clientes desde "
+"arhcivos XML y CSV."
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:177
+#: ../../../../inc/themes/material-blue/import.inc:106
+msgid ""
+"Los formatos de archivos XML soportados son: sysPass, KeePass y KeePassX"
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:179
+#: ../../../../inc/themes/material-blue/import.inc:108
+msgid ""
+"Arrastar el archivo a importar a la zona indicada o hacer click sobre la "
+"flecha."
+msgstr ""
+
+# Import from KeePass or KeePassX. The customer name will be KeePass or KeePassX.
+#: ../../../../inc/themes/classic/import.inc:181
+#: ../../../../inc/themes/material-blue/import.inc:110
+#, fuzzy
+msgid ""
+"Para archivos de KeePass o KeePassX, el nombre del cliente será igual a "
+"KeePass o KeePassX y la categoría igual al nombre de los grupos."
+msgstr ""
+"Import from KeePass or KeePassX. The customer name will be KeePass or "
+"KeePassX."
+
+# "Import form a CSV file with the format"
+#: ../../../../inc/themes/classic/import.inc:183
+#: ../../../../inc/themes/material-blue/import.inc:112
+#, fuzzy
+msgid "La importación de archivos CSV se realiza con el siguiente formato:"
+msgstr "Forma importálása a CSV fájl formátumával együtt"
+
+# "account_name;customer;category;url;user;password;notes"
+#: ../../../../inc/themes/classic/import.inc:185
+#: ../../../../inc/themes/material-blue/import.inc:114
+msgid "nombre_de_cuenta;cliente;categoría;url;usuario;clave;notas"
+msgstr "Fiók_név;ügyfél;kategória;url;felhasználó;jelszó;jegyzetek"
+
+# "If the customer or category are not created, they will be automatically created."
+#: ../../../../inc/themes/classic/import.inc:187
+#: ../../../../inc/themes/material-blue/import.inc:116
+#, fuzzy
+msgid ""
+"En todos los casos, si el cliente o la categoría no están creados, se crean "
+"automáticamente."
+msgstr ""
+"Amennyiben az ügyfél vagy a kategória nem létezik, automatikusan lesznek "
+"létrehozva"
+
+# "Request description"
+#: ../../../../inc/themes/classic/info.inc:4
+#: ../../../../inc/themes/material-blue/info.inc:4
+#, fuzzy
+msgid "Información de la Aplicación"
+msgstr "Kérés leírás"
+
+# "Version"
+#: ../../../../inc/themes/classic/info.inc:10
+#: ../../../../inc/themes/material-blue/info.inc:10
+#, fuzzy
+msgid "Versión sysPass"
+msgstr "Verzió"
+
+# "Search base"
+#: ../../../../inc/themes/classic/info.inc:18
+#: ../../../../inc/themes/material-blue/info.inc:18
+#, fuzzy
+msgid "Base de Datos"
+msgstr "Az adatbázis frissítése nem szükséges"
+
+# "APP"
+#: ../../../../inc/themes/classic/info.inc:30
+#: ../../../../inc/themes/material-blue/info.inc:30
+#, fuzzy
+msgid "PHP"
+msgstr "Kérem, tekintse meg a PHP konfigurációt fájlok feltötése elõtt"
+
+#: ../../../../inc/themes/classic/info.inc:35
+#: ../../../../inc/themes/material-blue/info.inc:35
+#, fuzzy
+msgid "Extensiones"
+msgstr "Tiltott kiterjesztések"
+
+#: ../../../../inc/themes/classic/info.inc:37
+#: ../../../../inc/themes/material-blue/info.inc:37
+msgid "Memoria Usada"
+msgstr ""
+
+# "Server"
+#: ../../../../inc/themes/classic/info.inc:44
+#: ../../../../inc/themes/classic/ldap.inc:32
+#: ../../../../inc/themes/classic/mail.inc:21
+#: ../../../../inc/themes/material-blue/config.inc:316
+#: ../../../../inc/themes/material-blue/info.inc:44
+#: ../../../../inc/themes/material-blue/ldap.inc:35
+#: ../../../../inc/themes/material-blue/ldap.inc:58
+#: ../../../../inc/themes/material-blue/ldap.inc:86
+#: ../../../../inc/themes/material-blue/mail.inc:24
+#: ../../../../inc/themes/material-blue/mail.inc:30
+msgid "Servidor"
+msgstr "Szerver"
+
+# "Installation"
+#: ../../../../inc/themes/classic/install.inc:4
+#: ../../../../inc/themes/material-blue/install.inc:4
+msgid "Instalación "
+msgstr "Telepítés"
+
+# Create sysPass admin account
+#: ../../../../inc/themes/classic/install.inc:25
+#: ../../../../inc/themes/material-blue/install.inc:25
+#, fuzzy
+msgid "Crear cuenta de admin de sysPass"
+msgstr "Create sysPass admin account"
+
+# sysPass administrator's login
+#: ../../../../inc/themes/classic/install.inc:32
+#: ../../../../inc/themes/material-blue/install.inc:36
+#, fuzzy
+msgid "Login del usuario administrador de sysPass"
+msgstr "sysPass administrator's login"
+
+# "DB Configuration"
+#: ../../../../inc/themes/classic/install.inc:58
+#: ../../../../inc/themes/material-blue/install.inc:69
+msgid "Configurar BBDD"
+msgstr "Adatbázis beállítások"
+
+# User login with with database administrative rights
+#: ../../../../inc/themes/classic/install.inc:67
+#, fuzzy
+msgid "Login de usuario con permisos de administrador de MySQL"
+msgstr "Adatbázis rendszergazdai jogokkal rendelkezõ felhasználó"
+
+# sysPass database name
+#: ../../../../inc/themes/classic/install.inc:83
+#: ../../../../inc/themes/material-blue/install.inc:102
+#, fuzzy
+msgid "Nombre de la base de datos para sysPass"
+msgstr "Írd be a phpPMS adatbázis nevét"
+
+# sysPass database server name
+#: ../../../../inc/themes/classic/install.inc:91
+#, fuzzy
+msgid "Nombre del servidor de la base de datos de sysPass"
+msgstr "Kérem, törölje a pontokat az adatbázis nevébõl"
+
+# "Hosting Mode"
+#: ../../../../inc/themes/classic/install.inc:97
+#: ../../../../inc/themes/material-blue/install.inc:120
+msgid "Modo Hosting"
+msgstr "Hosting mód"
+
+# "It does not create or verify the user's permissions on the DB"
+#: ../../../../inc/themes/classic/install.inc:104
+#: ../../../../inc/themes/material-blue/install.inc:127
+msgid "No crea ni verifica los permisos del usuario sobre la BBDD"
+msgstr "Ez nem hozza létre, illetve erõsíti meg az adatbázis jogosultságokat"
+
+# "Install"
+#: ../../../../inc/themes/classic/install.inc:108
+#: ../../../../inc/themes/material-blue/install.inc:134
+#: ../../../../inc/themes/material-blue/install.inc:135
+msgid "Instalar"
+msgstr "Telepítés"
+
+# "Enable LDAP"
+#: ../../../../inc/themes/classic/ldap.inc:12
+#: ../../../../inc/themes/material-blue/ldap.inc:12
+msgid "Habilitar LDAP"
+msgstr "LDAP engedélyezése"
+
+# "Enables LDAP authentication"
+#: ../../../../inc/themes/classic/ldap.inc:16
+#: ../../../../inc/themes/material-blue/ldap.inc:16
+#, fuzzy
+msgid "Habilita de autentificación mediante servidor LDAP."
+msgstr "LDAP hitelesítés engedélyezése"
+
+# "This method will switch to MySQL on failure"
+#: ../../../../inc/themes/classic/ldap.inc:20
+#: ../../../../inc/themes/material-blue/ldap.inc:20
+#, fuzzy
+msgid "Este método utilizará MySQL en caso de fallo."
+msgstr "Ez a metódus hibát okoz a MySQL-ben"
+
+# "LDAP server hostname or IP address"
+#: ../../../../inc/themes/classic/ldap.inc:36
+#: ../../../../inc/themes/material-blue/ldap.inc:39
+#, fuzzy
+msgid "Nombre o dirección IP del servidor de LDAP."
+msgstr "LDAP szerver hosztnév vagy IP cím"
+
+# "Examples"
+#: ../../../../inc/themes/classic/ldap.inc:40
+#: ../../../../inc/themes/classic/ldap.inc:65
+#: ../../../../inc/themes/classic/ldap.inc:100
+#: ../../../../inc/themes/classic/ldap.inc:128
+#: ../../../../inc/themes/classic/wiki.inc:89
+#: ../../../../inc/themes/material-blue/ldap.inc:43
+#: ../../../../inc/themes/material-blue/ldap.inc:72
+#: ../../../../inc/themes/material-blue/ldap.inc:119
+#: ../../../../inc/themes/material-blue/ldap.inc:151
+#: ../../../../inc/themes/material-blue/wiki.inc:101
+#, fuzzy
+msgid "Ejemplos:"
+msgstr "Példák"
+
+# "Bind User"
+#: ../../../../inc/themes/classic/ldap.inc:57
+#: ../../../../inc/themes/material-blue/ldap.inc:64
+msgid "Usuario de conexión"
+msgstr "Bind felhasználó"
+
+# "User to connect LDAP server"
+#: ../../../../inc/themes/classic/ldap.inc:61
+#: ../../../../inc/themes/material-blue/ldap.inc:68
+#, fuzzy
+msgid "Usuario para conectar con el servicio de LDAP."
+msgstr "Felhasználó az LDAP szerverhez való kapcsolódáshoz"
+
+# "Bind Password"
+#: ../../../../inc/themes/classic/ldap.inc:81
+#: ../../../../inc/themes/material-blue/ldap.inc:92
+msgid "Clave de conexión"
+msgstr "Bind jelszó"
+
+# "Search base"
+#: ../../../../inc/themes/classic/ldap.inc:92
+#: ../../../../inc/themes/material-blue/ldap.inc:111
+#: ../../../../inc/themes/material-blue/ldap.inc:133
+msgid "Base de búsqueda"
+msgstr "Keresés"
+
+# "LDAP base to do users searches."
+#: ../../../../inc/themes/classic/ldap.inc:96
+#: ../../../../inc/themes/material-blue/ldap.inc:115
+#, fuzzy
+msgid "Base en la que realizar la búsqueda de usuarios de LDAP."
+msgstr "LDAP bázis a felhasználó keresésekhez"
+
+# "LDAP group that users belong to for access permission"
+#: ../../../../inc/themes/classic/ldap.inc:120
+#: ../../../../inc/themes/material-blue/ldap.inc:143
+#, fuzzy
+msgid ""
+"Grupo de LDAP al que debe de pertenecer el usuario para permitir el acceso."
+msgstr "LDAP csoport felhasználóinak belépési jgosultságia"
+
+#: ../../../../inc/themes/classic/ldap.inc:124
+#: ../../../../inc/themes/material-blue/ldap.inc:147
+msgid "Este grupo debe de estar ubicado en la base de búsquedas de LDAP."
+msgstr ""
+
+# Define the default users group for new LDAP users
+#: ../../../../inc/themes/classic/ldap.inc:148
+#: ../../../../inc/themes/material-blue/ldap.inc:174
+#, fuzzy
+msgid ""
+"Define el grupo de usuarios por defecto para los nuevos usuarios de LDAP."
+msgstr "Define the default users group for new LDAP users"
+
+# Default Profile
+#: ../../../../inc/themes/classic/ldap.inc:165
+#: ../../../../inc/themes/material-blue/ldap.inc:190
+#, fuzzy
+msgid "Perfil por Defecto"
+msgstr "A profilt használja:"
+
+# Define the default users profile for new LDAP users
+#: ../../../../inc/themes/classic/ldap.inc:169
+#: ../../../../inc/themes/material-blue/ldap.inc:194
+#, fuzzy
+msgid ""
+"Define el perfil de usuarios por defecto para los nuevos usuarios de LDAP."
+msgstr "Define the default users profile for new LDAP users"
+
+# Active Directory
+#: ../../../../inc/themes/classic/ldap.inc:186
+#: ../../../../inc/themes/material-blue/ldap.inc:210
+#, fuzzy
+msgid "Active Directory"
+msgstr "Active Directory"
+
+# Enables Active Directory LDAP connection mode.
+#: ../../../../inc/themes/classic/ldap.inc:190
+#: ../../../../inc/themes/material-blue/ldap.inc:214
+#, fuzzy
+msgid "Habilita el modo de conexión con LDAP de Active Directory."
+msgstr "Enables Active Directory LDAP connection mode."
+
+# "Check"
+#: ../../../../inc/themes/classic/ldap.inc:202
+#: ../../../../inc/themes/material-blue/ldap.inc:228
+msgid "Comprobar"
+msgstr "Ellenõrzés"
+
+# "Check LDAP connection"
+#: ../../../../inc/themes/classic/ldap.inc:206
+#: ../../../../inc/themes/material-blue/ldap.inc:232
+msgid "Comprobar conexión con LDAP"
+msgstr "LDAP kapcsolat ellenõrzése"
+
+# "Lost your password?"
+#: ../../../../inc/themes/classic/login.inc:46
+#: ../../../../inc/themes/material-blue/login.inc:73
+msgid "¿Olvidó su clave?"
+msgstr "Elvesztette jelszavát?"
+
+# "Application successfully updated"
+#: ../../../../inc/themes/classic/login.inc:59
+#: ../../../../inc/themes/material-blue/login.inc:85
+msgid "Aplicación actualizada correctamente"
+msgstr "Az alkalmazás frissítése sikeres"
+
+# "New Category"
+#: ../../../../inc/themes/classic/login.inc:64
+#: ../../../../inc/themes/classic/login.inc:65
+#: ../../../../inc/themes/material-blue/login.inc:90
+#: ../../../../inc/themes/material-blue/login.inc:91
+#: ../../../../inc/themes/material-blue/login.inc:93
+#, fuzzy
+msgid "Nuevas Características"
+msgstr "Új Kategória"
+
+# "Enable email notifications"
+#: ../../../../inc/themes/classic/mail.inc:11
+#: ../../../../inc/themes/material-blue/mail.inc:11
+msgid "Habilitar notificaciones de correo"
+msgstr "Email értesítés engedélyezése"
+
+# "Port"
+#: ../../../../inc/themes/classic/mail.inc:29
+#: ../../../../inc/themes/material-blue/config.inc:330
+#: ../../../../inc/themes/material-blue/mail.inc:36
+#: ../../../../inc/themes/material-blue/mail.inc:43
+msgid "Puerto"
+msgstr "Port"
+
+# "Enable Authentication"
+#: ../../../../inc/themes/classic/mail.inc:37
+#: ../../../../inc/themes/material-blue/mail.inc:49
+msgid "Habilitar Autentificación"
+msgstr "Engedélyezése Hitelesítés"
+
+# "Disabled"
+#: ../../../../inc/themes/classic/mail.inc:68
+#: ../../../../inc/themes/material-blue/mail.inc:91
+msgid "Deshabilitada"
+msgstr "Inaktív"
+
+# "Recipient email address"
+#: ../../../../inc/themes/classic/mail.inc:77
+#: ../../../../inc/themes/material-blue/mail.inc:100
+#: ../../../../inc/themes/material-blue/mail.inc:107
+msgid "Dirección de correo de envío"
+msgstr "Címzett email címe"
+
+# "Enable requests by email"
+#: ../../../../inc/themes/classic/mail.inc:85
+#: ../../../../inc/themes/material-blue/mail.inc:113
+msgid "Habilitar peticiones por correo"
+msgstr "Email kérések engedélyezése"
+
+# "More Actions"
+#: ../../../../inc/themes/classic/mgmttabs.inc:66
+#: ../../../../inc/themes/classic/search.inc:110
+#: ../../../../inc/themes/material-blue/search.inc:125
+msgid "Más Acciones"
+msgstr "Több akció"
+
+# "Request Password Change"
+#: ../../../../inc/themes/classic/passreset.inc:13
+#: ../../../../inc/themes/material-blue/passreset.inc:10
+msgid "Solicitud de Cambio de Clave"
+msgstr "Kérés jelszó módosítás"
+
+# "User login"
+#: ../../../../inc/themes/classic/passreset.inc:16
+msgid "Login del Usuario"
+msgstr "Felhasználó bejelentkezés"
+
+# "User Email"
+#: ../../../../inc/themes/classic/passreset.inc:21
+#: ../../../../inc/themes/material-blue/passreset.inc:24
+msgid "Email del Usuario"
+msgstr "Felhasználó Email"
+
+# "Email"
+#: ../../../../inc/themes/classic/passreset.inc:22
+#: ../../../../inc/themes/classic/users.inc:61
+#: ../../../../inc/themes/material-blue/users.inc:71
+msgid "Email"
+msgstr "Email"
+
+# "New Password"
+#: ../../../../inc/themes/classic/passreset.inc:27
+msgid "Nueva Clave"
+msgstr "Új jelszó"
+
+# "New Password (Verify)"
+#: ../../../../inc/themes/classic/passreset.inc:34
+msgid "Nueva Clave (Verificar)"
+msgstr "Új jelszó (megerõsítés)"
+
+# "Password (Verify)"
+#: ../../../../inc/themes/classic/passreset.inc:35
+msgid "Clave (Verificar)"
+msgstr "Jelszó (Megerõsítés)"
+
+# "Go back to login"
+#: ../../../../inc/themes/classic/passreset.inc:46
+#: ../../../../inc/themes/material-blue/passreset.inc:42
+msgid "Volver a iniciar sesión"
+msgstr "Vissza a bejelentkezéshez"
+
+# "Request"
+#: ../../../../inc/themes/classic/passreset.inc:48
+#: ../../../../inc/themes/material-blue/2fa.inc:27
+#: ../../../../inc/themes/material-blue/passreset.inc:48
+#: ../../../../inc/themes/material-blue/passreset.inc:49
+msgid "Solicitar"
+msgstr "Kérés"
+
+# "Request password change"
+#: ../../../../inc/themes/classic/passreset.inc:49
+msgid "Solicitar cambio de clave"
+msgstr "Kérés jelszó módosítás"
+
+# "Change"
+#: ../../../../inc/themes/classic/passreset.inc:51
+#: ../../../../inc/themes/material-blue/passreset.inc:53
+#: ../../../../inc/themes/material-blue/passreset.inc:54
+msgid "Cambiar"
+msgstr "Változtatás"
+
+# "Change password"
+#: ../../../../inc/themes/classic/passreset.inc:52
+msgid "Cambiar Clave"
+msgstr "Változtatsd meg a jelszót"
+
+# "Profile name"
+#: ../../../../inc/themes/classic/profiles.inc:11
+#: ../../../../inc/themes/material-blue/profiles.inc:14
+msgid "Nombre del perfil"
+msgstr "Profil név"
+
+# "View account details"
+#: ../../../../inc/themes/classic/profiles.inc:19
+#: ../../../../inc/themes/material-blue/profiles.inc:30
+msgid "Ver detalles de cuenta"
+msgstr "Fiók adatok"
+
+# "View"
+#: ../../../../inc/themes/classic/profiles.inc:19
+#: ../../../../inc/themes/material-blue/profiles.inc:30
+msgid "Ver"
+msgstr "Nézet"
+
+# "View account password"
+#: ../../../../inc/themes/classic/profiles.inc:23
+#: ../../../../inc/themes/material-blue/profiles.inc:35
+msgid "Ver clave de cuenta"
+msgstr "Fiók jelszó"
+
+# "View account history"
+#: ../../../../inc/themes/classic/profiles.inc:28
+#: ../../../../inc/themes/material-blue/profiles.inc:40
+msgid "Ver historial de cuenta"
+msgstr "Fiók elõzmények"
+
+# "Edit account"
+#: ../../../../inc/themes/classic/profiles.inc:32
+#: ../../../../inc/themes/material-blue/profiles.inc:45
+msgid "Editar cuenta"
+msgstr "fiók"
+
+# "Edit"
+#: ../../../../inc/themes/classic/profiles.inc:32
+#: ../../../../inc/themes/material-blue/profiles.inc:45
+msgid "Editar"
+msgstr "Módosítás"
+
+# "Edit account password"
+#: ../../../../inc/themes/classic/profiles.inc:37
+#: ../../../../inc/themes/material-blue/profiles.inc:50
+msgid "Editar clave de cuenta"
+msgstr "fiók jelszavának módosításe"
+
+# "Edit Password"
+#: ../../../../inc/themes/classic/profiles.inc:37
+#: ../../../../inc/themes/material-blue/profiles.inc:50
+msgid "Editar Clave"
+msgstr "Jelszó módosítás"
+
+# "Add new account"
+#: ../../../../inc/themes/classic/profiles.inc:41
+msgid "Añadir nueva cuenta"
+msgstr "Új fiók hozzáadása"
+
+# "Add"
+#: ../../../../inc/themes/classic/profiles.inc:41
+msgid "Añadir"
+msgstr "Hozzáad"
+
+# "Delete account"
+#: ../../../../inc/themes/classic/profiles.inc:46
+msgid "Borrar cuenta"
+msgstr "Fiók Törlése"
+
+# "Delete"
+#: ../../../../inc/themes/classic/profiles.inc:46
+msgid "Borrar"
+msgstr "Törlés"
+
+# "View account files"
+#: ../../../../inc/themes/classic/profiles.inc:50
+msgid "Ver archivos de cuenta"
+msgstr "Fiók fáljok"
+
+# "General configuration"
+#: ../../../../inc/themes/classic/profiles.inc:61
+#: ../../../../inc/themes/material-blue/profiles.inc:72
+msgid "Configuración general"
+msgstr "Általános beállítások"
+
+# "Change master password"
+#: ../../../../inc/themes/classic/profiles.inc:65
+msgid "Cambiar clave maestra"
+msgstr "Változtatsd meg a mester jelszót"
+
+# "Make backup"
+#: ../../../../inc/themes/classic/profiles.inc:70
+msgid "Realizar copia de seguridad"
+msgstr "archívum készítés"
+
+# "Backup"
+#: ../../../../inc/themes/classic/profiles.inc:70
+#: ../../../../inc/themes/material-blue/profiles.inc:82
+msgid "Backup"
+msgstr "Archiválás"
+
+# "Confirm account import"
+#: ../../../../inc/themes/classic/profiles.inc:74
+#: ../../../../inc/themes/material-blue/profiles.inc:87
+#, fuzzy
+msgid "Realizar importación de cuentas"
+msgstr "Fiók importálás megerõsítése"
+
+# "Management"
+#: ../../../../inc/themes/classic/profiles.inc:81
+#: ../../../../inc/themes/material-blue/profiles.inc:93
+msgid "Gestión"
+msgstr "Menedzsment"
+
+# "Users management"
+#: ../../../../inc/themes/classic/profiles.inc:85
+#: ../../../../inc/themes/material-blue/profiles.inc:99
+msgid "Gestión de usuarios"
+msgstr "Felhasználó menedzsment"
+
+# "Groups management"
+#: ../../../../inc/themes/classic/profiles.inc:89
+#: ../../../../inc/themes/material-blue/profiles.inc:104
+msgid "Gestión de grupos"
+msgstr "Csoport menedzsment"
+
+# "Profiles management"
+#: ../../../../inc/themes/classic/profiles.inc:94
+#: ../../../../inc/themes/material-blue/profiles.inc:109
+msgid "Gestión de perfiles"
+msgstr "Profil menedzsment"
+
+# "Profiles"
+#: ../../../../inc/themes/classic/profiles.inc:94
+#: ../../../../inc/themes/material-blue/profiles.inc:109
+msgid "Perfiles"
+msgstr "Profilok"
+
+# "Categories management"
+#: ../../../../inc/themes/classic/profiles.inc:98
+#: ../../../../inc/themes/material-blue/profiles.inc:114
+msgid "Gestión de categorías"
+msgstr "Kategória Menedzsment"
+
+# "Customers Management"
+#: ../../../../inc/themes/classic/profiles.inc:103
+#: ../../../../inc/themes/material-blue/profiles.inc:119
+msgid "Gestión de clientes"
+msgstr "Ügyfél Menedzsment"
+
+# "Files management disabled"
+#: ../../../../inc/themes/classic/profiles.inc:107
+#: ../../../../inc/themes/material-blue/profiles.inc:124
+#, fuzzy
+msgid "Gestión de campos personalizados"
+msgstr "A mezõk száma helytelen"
+
+# "Files management"
+#: ../../../../inc/themes/classic/profiles.inc:112
+#: ../../../../inc/themes/material-blue/profiles.inc:129
+#, fuzzy
+msgid "Gestión de autorizaciones API"
+msgstr "Fálj menedzsment inaktív"
+
+#: ../../../../inc/themes/classic/profiles.inc:112
+#: ../../../../inc/themes/material-blue/profiles.inc:129
+msgid "Autorizaciones API"
+msgstr ""
+
+# "Others"
+#: ../../../../inc/themes/classic/profiles.inc:120
+#: ../../../../inc/themes/material-blue/profiles.inc:135
+msgid "Otros"
+msgstr "Egyebek"
+
+# "View event log"
+#: ../../../../inc/themes/classic/profiles.inc:124
+#: ../../../../inc/themes/material-blue/profiles.inc:141
+msgid "Ver log de eventos"
+msgstr "Esemény napló"
+
+# "Event Log"
+#: ../../../../inc/themes/classic/profiles.inc:124
+#: ../../../../inc/themes/material-blue/profiles.inc:141
+msgid "Log de Eventos"
+msgstr "Esemény napló"
+
+# "Performed by"
+#: ../../../../inc/themes/classic/profiles.inc:132
+#: ../../../../inc/themes/material-blue/profiles.inc:148
+#, fuzzy
+msgid "Usado por"
+msgstr "által"
+
+#: ../../../../inc/themes/classic/profiles.inc:139
+#: ../../../../inc/themes/material-blue/profiles.inc:155
+msgid "No usado"
+msgstr ""
+
+# "Request Account Modification"
+#: ../../../../inc/themes/classic/request.inc:1
+#: ../../../../inc/themes/material-blue/request.inc:1
+msgid "Solicitar Modificación de Cuenta"
+msgstr "Kérés fiók módosítás"
+
+# "Request"
+#: ../../../../inc/themes/classic/request.inc:22
+#: ../../../../inc/themes/material-blue/request.inc:25
+msgid "Petición"
+msgstr "Kérés"
+
+# "Request description"
+#: ../../../../inc/themes/classic/request.inc:24
+#: ../../../../inc/themes/material-blue/request.inc:29
+msgid "Descripción de la petición"
+msgstr "Kérés leírás"
+
+# "Back"
+#: ../../../../inc/themes/classic/request.inc:33
+#: ../../../../inc/themes/material-blue/account.inc:440
+#: ../../../../inc/themes/material-blue/editpass.inc:55
+#: ../../../../inc/themes/material-blue/request.inc:42
+msgid "Atrás"
+msgstr "Vissza"
+
+# "Send"
+#: ../../../../inc/themes/classic/request.inc:38
+#: ../../../../inc/themes/material-blue/request.inc:48
+msgid "Enviar"
+msgstr "Küldés"
+
+# "Search in Wiki"
+#: ../../../../inc/themes/classic/search.inc:24
+#: ../../../../inc/themes/material-blue/search.inc:29
+msgid "Buscar en Wiki"
+msgstr "Keresés a Wikiben"
+
+# "Open link to"
+#: ../../../../inc/themes/classic/search.inc:60
+#: ../../../../inc/themes/material-blue/search.inc:65
+msgid "Abrir enlace a"
+msgstr "Nyissa meg a linket, hogy"
+
+# "Attachments"
+#: ../../../../inc/themes/classic/search.inc:78
+#: ../../../../inc/themes/material-blue/search.inc:89
+msgid "Archivos adjuntos"
+msgstr "Csatolmányok"
+
+# "Link to Wiki"
+#: ../../../../inc/themes/classic/search.inc:85
+#: ../../../../inc/themes/material-blue/search.inc:98
+msgid "Enlace a Wiki"
+msgstr "Wiki link"
+
+# "Filter ON"
+#: ../../../../inc/themes/classic/search.inc:149
+#: ../../../../inc/themes/material-blue/search.inc:163
+msgid "Filtro ON"
+msgstr "Szûrõ bekapcsolva"
+
+# "Global ON"
+#: ../../../../inc/themes/classic/search.inc:153
+#: ../../../../inc/themes/material-blue/search.inc:167
+msgid "Global ON"
+msgstr "Global On"
+
+# "Clear"
+#: ../../../../inc/themes/classic/searchbox.inc:5
+#: ../../../../inc/themes/material-blue/searchbox.inc:5
+msgid "Limpiar"
+msgstr "Tiszta"
+
+# "Text to search"
+#: ../../../../inc/themes/classic/searchbox.inc:6
+#: ../../../../inc/themes/material-blue/searchbox.inc:10
+msgid "Texto a buscar"
+msgstr "Keresendõ szöveg"
+
+# "Incorrect parameters"
+#: ../../../../inc/themes/classic/searchbox.inc:10
+#: ../../../../inc/themes/material-blue/searchbox.inc:15
+#, fuzzy
+msgid "Parámetros especiales:"
+msgstr "Helytelen paraméter"
+
+#: ../../../../inc/themes/classic/searchbox.inc:13
+#: ../../../../inc/themes/material-blue/searchbox.inc:18
+msgid "Buscar cuentas a las que 'login' tenga acceso"
+msgstr ""
+
+#: ../../../../inc/themes/classic/searchbox.inc:14
+#: ../../../../inc/themes/material-blue/searchbox.inc:19
+msgid "Buscar cuentas a las que 'group_name' tenga acceso"
+msgstr ""
+
+#: ../../../../inc/themes/classic/searchbox.inc:15
+#: ../../../../inc/themes/material-blue/searchbox.inc:20
+msgid "Buscar cuentas con archivos con el nombre 'file_name'"
+msgstr ""
+
+# "Global search"
+#: ../../../../inc/themes/classic/searchbox.inc:19
+#: ../../../../inc/themes/material-blue/searchbox.inc:25
+#: ../../../../inc/themes/material-blue/searchbox.inc:28
+msgid "Búsqueda global"
+msgstr "Globális keresés"
+
+# "APP"
+#: ../../../../inc/themes/classic/searchbox.inc:42
+#: ../../../../inc/themes/material-blue/searchbox.inc:54
+msgid "CPP"
+msgstr "APP"
+
+# "Accounts per page"
+#: ../../../../inc/themes/classic/searchbox.inc:42
+#: ../../../../inc/themes/material-blue/searchbox.inc:54
+msgid "Cuentas por página"
+msgstr "Fiók/oldal"
+
+# "Warning"
+#: ../../../../inc/themes/classic/security.inc:4
+#, fuzzy
+msgid "Autenticación"
+msgstr "Figyelem"
+
+# "Account Activation"
+#: ../../../../inc/themes/classic/security.inc:13
+#, fuzzy
+msgid "Autenticación en 2 pasos"
+msgstr "Fiók Aktiválás"
+
+#: ../../../../inc/themes/classic/security.inc:17
+#: ../../../../inc/themes/material-blue/security.inc:15
+msgid ""
+"Habilita la autentificación en 2 pasos que requiere de la introducción de un "
+"token generado por una aplicación como Google Authenticator."
+msgstr ""
+
+#: ../../../../inc/themes/classic/security.inc:21
+#: ../../../../inc/themes/material-blue/security.inc:19
+msgid ""
+"Escanee el código QR proporcionado y a continuación introduzca la clave de 6 "
+"dígitos."
+msgstr ""
+
+#: ../../../../inc/themes/classic/security.inc:29
+#: ../../../../inc/themes/material-blue/security.inc:27
+msgid "Activar"
+msgstr ""
+
+# "Error on retrieving accounts history"
+#: ../../../../inc/themes/classic/security.inc:34
+#: ../../../../inc/themes/material-blue/security.inc:33
+#, fuzzy
+msgid "Error al obtener el código QR. Inténtelo de nuevo"
+msgstr "Hiba a fiókok elõzményeinek betöltése közben"
+
+#: ../../../../inc/themes/classic/security.inc:39
+#: ../../../../inc/themes/material-blue/security.inc:41
+msgid "Código"
+msgstr ""
+
+#: ../../../../inc/themes/classic/security.inc:44
+#: ../../../../inc/themes/material-blue/security.inc:46
+msgid ""
+"Una vez activada, sólo es posible acceder si se dispone del dispositivo "
+"generador de códigos asociado."
+msgstr ""
+
+# "Change user password"
+#: ../../../../inc/themes/classic/sessionbar.inc:6
+#: ../../../../inc/themes/material-blue/footer.inc:7
+msgid "Cambiar clave de usuario"
+msgstr "Változatsd meg a felhasználói jelszót"
+
+#: ../../../../inc/themes/classic/sessionbar.inc:9
+msgid "Preferencias"
+msgstr ""
+
+# "Logout"
+#: ../../../../inc/themes/classic/sessionbar.inc:15
+#: ../../../../inc/themes/material-blue/footer.inc:5
+msgid "Salir"
+msgstr "Kijelentkezés"
+
+# "Options"
+#: ../../../../inc/themes/classic/tokens.inc:34
+#: ../../../../inc/themes/classic/users.inc:98
+#: ../../../../inc/themes/material-blue/tokens.inc:34
+#: ../../../../inc/themes/material-blue/users.inc:132
+msgid "Opciones"
+msgstr "Beállítások"
+
+# Start Update
+#: ../../../../inc/themes/classic/tokens.inc:38
+#: ../../../../inc/themes/material-blue/tokens.inc:37
+#: ../../../../inc/themes/material-blue/tokens.inc:40
+#, fuzzy
+msgid "Regenerar Autorización"
+msgstr "Start Update"
+
+#: ../../../../inc/themes/classic/tokens.inc:43
+#: ../../../../inc/themes/material-blue/tokens.inc:46
+msgid "Token"
+msgstr ""
+
+# "Updated"
+#: ../../../../inc/themes/classic/update.inc:18
+#: ../../../../inc/themes/material-blue/update.inc:20
+msgid "Actualizado"
+msgstr "Frissítve"
+
+# "Check for updates"
+#: ../../../../inc/themes/classic/update.inc:23
+#: ../../../../inc/themes/material-blue/update.inc:22
+#, fuzzy
+msgid "Error al comprobar actualizaciones"
+msgstr "Frissítések keresése"
+
+# DB Update
+#: ../../../../inc/themes/classic/upgrade.inc:8
+#: ../../../../inc/themes/material-blue/upgrade.inc:8
+#, fuzzy
+msgid "Actualización de BBDD"
+msgstr "Verzió frissítés kész"
+
+# Enter Security Code
+#: ../../../../inc/themes/classic/upgrade.inc:10
+#, fuzzy
+msgid "Introducir Código de Seguridad"
+msgstr "Archiválás"
+
+# Security Code
+#: ../../../../inc/themes/classic/upgrade.inc:11
+#: ../../../../inc/themes/material-blue/upgrade.inc:14
+#, fuzzy
+msgid "Código de Seguridad"
+msgstr "Archiválás"
+
+# Start Update
+#: ../../../../inc/themes/classic/upgrade.inc:21
+#: ../../../../inc/themes/material-blue/upgrade.inc:25
+#, fuzzy
+msgid "Iniciar Actualización"
+msgstr "Start"
+
+# "Full username"
+#: ../../../../inc/themes/classic/users.inc:12
+#: ../../../../inc/themes/material-blue/users.inc:15
+msgid "Nombre de usuario completo"
+msgstr "Teljes felhasznlónév"
+
+# "Session login"
+#: ../../../../inc/themes/classic/users.inc:25
+#: ../../../../inc/themes/material-blue/users.inc:31
+msgid "Login de inicio de sesión"
+msgstr "Bejelentkezési munkamenet "
+
+# "Email address"
+#: ../../../../inc/themes/classic/users.inc:64
+#: ../../../../inc/themes/material-blue/users.inc:78
+msgid "Dirección de correo"
+msgstr "Email cím"
+
+# "Application administrator"
+#: ../../../../inc/themes/classic/users.inc:103
+#: ../../../../inc/themes/material-blue/users.inc:136
+msgid "Administrador de la aplicación"
+msgstr "Rendszergazda"
+
+# "Application Admin"
+#: ../../../../inc/themes/classic/users.inc:103
+#: ../../../../inc/themes/material-blue/users.inc:139
+msgid "Admin. Aplicación"
+msgstr "Admin alkalmazás"
+
+# "Accounts administrator"
+#: ../../../../inc/themes/classic/users.inc:107
+#: ../../../../inc/themes/material-blue/users.inc:143
+msgid "Administrador de cuentas"
+msgstr "Fiókok adminja"
+
+# "Accounts Admin"
+#: ../../../../inc/themes/classic/users.inc:107
+#: ../../../../inc/themes/material-blue/users.inc:146
+msgid "Admin. Cuentas"
+msgstr "Admin fiók"
+
+# "Force password change"
+#: ../../../../inc/themes/classic/users.inc:117
+#: ../../../../inc/themes/material-blue/users.inc:158
+msgid "Forzar cambio de clave"
+msgstr "Jelszó változtatásának erõltetése"
+
+# "Entries"
+#: ../../../../inc/themes/classic/users.inc:154
+#: ../../../../inc/themes/material-blue/users.inc:198
+msgid "Entradas"
+msgstr "Belépések"
+
+# "Last Access"
+#: ../../../../inc/themes/classic/users.inc:159
+#: ../../../../inc/themes/material-blue/users.inc:203
+msgid "Último Acceso"
+msgstr "Utolsó belépés"
+
+# "Master Password Date"
+#: ../../../../inc/themes/classic/users.inc:169
+#: ../../../../inc/themes/material-blue/users.inc:213
+msgid "Fecha Clave Maestra"
+msgstr "Mester jelszó dátum"
+
+# "Enable Wiki links"
+#: ../../../../inc/themes/classic/wiki.inc:11
+#: ../../../../inc/themes/material-blue/wiki.inc:11
+msgid "Habilitar enlaces Wiki"
+msgstr "Wiki linkek engedélyezése"
+
+# "Enables the option to add an external Wiki link for accounts search results."
+#: ../../../../inc/themes/classic/wiki.inc:15
+#: ../../../../inc/themes/material-blue/wiki.inc:15
+#, fuzzy
+msgid ""
+"Habilita la opción de añadir un enlace a Wiki externa para los resultados de "
+"la búsqueda."
+msgstr "Külsõ Wiki forrásokban való keresés engedélyezése"
+
+# "Wiki search URL"
+#: ../../../../inc/themes/classic/wiki.inc:27
+#: ../../../../inc/themes/material-blue/wiki.inc:30
+#: ../../../../inc/themes/material-blue/wiki.inc:56
+msgid "URL de búsqueda Wiki"
+msgstr "Wiki keresés URL"
+
+# "URL that wiki uses to do a page search on it."
+#: ../../../../inc/themes/classic/wiki.inc:31
+#: ../../../../inc/themes/material-blue/wiki.inc:34
+#, fuzzy
+msgid "URL que utiliza la wiki para realizar una búsqueda de una página."
+msgstr "Wiki oldal keresõje"
+
+# "It uses customer name as parameter."
+#: ../../../../inc/themes/classic/wiki.inc:35
+#: ../../../../inc/themes/material-blue/wiki.inc:38
+#, fuzzy
+msgid "Como parámetro se utiliza el nombre del cliente."
+msgstr "Az ügyfelet paraméterként használja"
+
+# "Example"
+#: ../../../../inc/themes/classic/wiki.inc:39
+#: ../../../../inc/themes/classic/wiki.inc:66
+#: ../../../../inc/themes/material-blue/wiki.inc:42
+#: ../../../../inc/themes/material-blue/wiki.inc:74
+#, fuzzy
+msgid "Ejemplo:"
+msgstr "Példa"
+
+# "Wiki page URL"
+#: ../../../../inc/themes/classic/wiki.inc:54
+#: ../../../../inc/themes/material-blue/wiki.inc:62
+#: ../../../../inc/themes/material-blue/wiki.inc:87
+msgid "URL de página en Wiki"
+msgstr "Wiki oldal URL"
+
+# "URL that wiki uses to access to page details on it."
+#: ../../../../inc/themes/classic/wiki.inc:58
+#: ../../../../inc/themes/material-blue/wiki.inc:66
+#, fuzzy
+msgid "URL que utiliza la wiki para acceder a los detalles de una página."
+msgstr "Wiki oldal adatainak elérése"
+
+# "The account name is used as wiki search variable parameter."
+#: ../../../../inc/themes/classic/wiki.inc:62
+#: ../../../../inc/themes/material-blue/wiki.inc:70
+#, fuzzy
+msgid ""
+"El nombre de la cuenta se utiliza como parámetro de la variable de búsqueda "
+"de la Wiki."
+msgstr "A fiók neve wiki keresési paraméterként való használata"
+
+# "Account name preffix"
+#: ../../../../inc/themes/classic/wiki.inc:81
+#: ../../../../inc/themes/material-blue/wiki.inc:93
+msgid "Prefijo para nombre de cuenta"
+msgstr "Fiók név elõtag"
+
+# "Preffix to select what accounts have a wiki page link."
+#: ../../../../inc/themes/classic/wiki.inc:85
+#: ../../../../inc/themes/material-blue/wiki.inc:97
+#, fuzzy
+msgid ""
+"Prefijo para determinar qué cuentas tienen un enlace a una página de la Wiki."
+msgstr "Elõtag választás a fiókok tartalmaznak-e wiki linket"
+
+# "Add filter"
+#: ../../../../inc/themes/classic/wiki.inc:121
+#: ../../../../inc/themes/material-blue/wiki.inc:135
+msgid "Añadir filtro"
+msgstr "Szûrõ hozzáadása"
+
+# "Delete filter"
+#: ../../../../inc/themes/classic/wiki.inc:122
+#: ../../../../inc/themes/material-blue/wiki.inc:136
+msgid "Eliminar filtro"
+msgstr "Szûrõ törlése"
+
+# "History"
+#: ../../../../inc/themes/material-blue/account.inc:4
+#, fuzzy
+msgid "Histórico"
+msgstr "Fiók elõzmények importálása"
+
+#: ../../../../inc/themes/material-blue/account.inc:42
+msgid "Seleccionar o escribir para crear uno nuevo"
+msgstr ""
+
+# "Password (repeat)"
+#: ../../../../inc/themes/material-blue/account.inc:110
+#, fuzzy
+msgid "Clave (Repetir)"
+msgstr "Jelszó (ismét)"
+
+# "Performed by"
+#: ../../../../inc/themes/material-blue/backup.inc:58
+#: ../../../../inc/themes/material-blue/backup.inc:144
+#: ../../../../inc/themes/material-blue/encryption.inc:118
+#: ../../../../inc/themes/material-blue/import.inc:217
+#, fuzzy
+msgid "Realizar"
+msgstr "Archívum készítés"
+
+# "Results per page"
+#: ../../../../inc/themes/material-blue/config.inc:195
+#, fuzzy
+msgid "Número de resultados por página"
+msgstr "Keresési találok száma oldalanként"
+
+# "Maximum file size"
+#: ../../../../inc/themes/material-blue/config.inc:290
+#, fuzzy
+msgid "Tamaño máximo de archivo en bytes"
+msgstr "Maximális fájl méret"
+
+#: ../../../../inc/themes/material-blue/config.inc:297
+msgid "Proxy"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/config.inc:303
+msgid "Usar Proxy"
+msgstr ""
+
+# "Server"
+#: ../../../../inc/themes/material-blue/config.inc:324
+#, fuzzy
+msgid "Servidor proxy"
+msgstr "Szerver"
+
+#: ../../../../inc/themes/material-blue/config.inc:338
+msgid "Puerto del servidor proxy"
+msgstr ""
+
+# "Access user"
+#: ../../../../inc/themes/material-blue/config.inc:352
+#, fuzzy
+msgid "Usuario del servidor proxy"
+msgstr "Felhasználó elérése"
+
+#: ../../../../inc/themes/material-blue/config.inc:366
+msgid "Clave del servidor proxy"
+msgstr ""
+
+# "Group name"
+#: ../../../../inc/themes/material-blue/customfields.inc:14
+#, fuzzy
+msgid "Nombre del campo"
+msgstr "Ügyfél név"
+
+#: ../../../../inc/themes/material-blue/customfields.inc:47
+#, fuzzy
+msgid "Ayuda del campo"
+msgstr "Segítség :: GYIK :: Változások Listája"
+
+# "View user details"
+#: ../../../../inc/themes/material-blue/footer.inc:11
+#, fuzzy
+msgid "Preferencias de usuario"
+msgstr "Dupla felhasználó bejelentkezés"
+
+#: ../../../../inc/themes/material-blue/import.inc:104
+msgid ""
+"Permite realizar la importación de Cuentas, Categorías y Clientes desde "
+"archivos XML y CSV."
+msgstr ""
+
+# sysPass administrator's login
+#: ../../../../inc/themes/material-blue/install.inc:31
+#, fuzzy
+msgid "Usuario administrador de sysPass"
+msgstr "sysPass administrator's login"
+
+# "Access user"
+#: ../../../../inc/themes/material-blue/install.inc:78
+#, fuzzy
+msgid "Usuario acceso BBDD"
+msgstr "Felhasználó elérése"
+
+# User login with with database administrative rights
+#: ../../../../inc/themes/material-blue/install.inc:83
+#, fuzzy
+msgid "Usuario con permisos de administrador de MySQL"
+msgstr "User login with with database administrative rights"
+
+# "DB Password"
+#: ../../../../inc/themes/material-blue/install.inc:90
+#, fuzzy
+msgid "Clave acceso BBDD"
+msgstr "Adatbázis jelszó"
+
+# sysPass database name
+#: ../../../../inc/themes/material-blue/install.inc:97
+#, fuzzy
+msgid "Nombre BBDD para sysPass"
+msgstr "ÍsysPass database name"
+
+# "DB Server"
+#: ../../../../inc/themes/material-blue/install.inc:109
+#, fuzzy
+msgid "Servidor BBDD para sysPass"
+msgstr "DB szerver"
+
+# sysPass database server name
+#: ../../../../inc/themes/material-blue/install.inc:114
+#, fuzzy
+msgid "Nombre del servidor para instalar la base de datos de sysPass"
+msgstr "sysPass database server name"
+
+# "LDAP bind user password"
+#: ../../../../inc/themes/material-blue/ldap.inc:96
+#, fuzzy
+msgid "Clave del usuario de conexión a LDAP."
+msgstr "LDAP bind felhasználói jelszó"
+
+#: ../../../../inc/themes/material-blue/mail.inc:118
+msgid ""
+"Habilita que los usuarios puedan solicitar modificaciones o acceso a las "
+"cuentas sin permisos."
+msgstr ""
+
+# "Add new account"
+#: ../../../../inc/themes/material-blue/profiles.inc:25
+#, fuzzy
+msgid "Crear nueva cuenta"
+msgstr "Új fiók"
+
+# "Creator"
+#: ../../../../inc/themes/material-blue/profiles.inc:25
+#, fuzzy
+msgid "Crear"
+msgstr "Hiba a profil létrehozása közben"
+
+# "Delete Account"
+#: ../../../../inc/themes/material-blue/profiles.inc:55
+#, fuzzy
+msgid "Eliminar cuenta"
+msgstr "Fiók törlése"
+
+# "Delete Group"
+#: ../../../../inc/themes/material-blue/profiles.inc:55
+#, fuzzy
+msgid "Eliminar"
+msgstr "Profil törlése"
+
+# "View account files"
+#: ../../../../inc/themes/material-blue/profiles.inc:60
+#, fuzzy
+msgid "Var archivos de cuenta"
+msgstr "Fiók fáljok"
+
+# "Error on encryption module"
+#: ../../../../inc/themes/material-blue/profiles.inc:77
+#, fuzzy
+msgid "Opciones de encriptación"
+msgstr "Beállítások"
+
+# "Make backup"
+#: ../../../../inc/themes/material-blue/profiles.inc:82
+#, fuzzy
+msgid "Realizar copia de seguridad y exportar"
+msgstr "archívum készítés"
+
+# "Enable Authentication"
+#: ../../../../inc/themes/material-blue/security.inc:4
+#, fuzzy
+msgid "Autentificación"
+msgstr "Engedélyezése Hitelesítés"
diff --git a/inc/locales/it_IT/LC_MESSAGES/messages.mo b/inc/locales/it_IT/LC_MESSAGES/messages.mo
new file mode 100644
index 00000000..6328adb1
Binary files /dev/null and b/inc/locales/it_IT/LC_MESSAGES/messages.mo differ
diff --git a/inc/locales/it_IT/LC_MESSAGES/messages.po b/inc/locales/it_IT/LC_MESSAGES/messages.po
new file mode 100644
index 00000000..6f46edda
--- /dev/null
+++ b/inc/locales/it_IT/LC_MESSAGES/messages.po
@@ -0,0 +1,4735 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: sysPass\n"
+"POT-Creation-Date: 2015-09-23 13:00+0100\n"
+"PO-Revision-Date: 2015-09-23 13:00+0100\n"
+"Last-Translator: nuxsmin \n"
+"Language-Team: nuxsmin@syspass.org \n"
+"Language: it_IT\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.6.10\n"
+"X-Poedit-Basepath: .\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+"X-Poedit-SearchPath-0: ../../../..\n"
+
+#: ../../../../ajax/ajax_2fa.php:35 ../../../../ajax/ajax_accountSave.php:41
+#: ../../../../ajax/ajax_appMgmtSave.php:42
+#: ../../../../ajax/ajax_backup.php:39 ../../../../ajax/ajax_checkLdap.php:41
+#: ../../../../ajax/ajax_configSave.php:41 ../../../../ajax/ajax_files.php:41
+#: ../../../../ajax/ajax_getFiles.php:46 ../../../../ajax/ajax_import.php:49
+#: ../../../../ajax/ajax_migrate.php:45 ../../../../ajax/ajax_passReset.php:37
+#: ../../../../ajax/ajax_search.php:41
+#: ../../../../ajax/ajax_sendRequest.php:41
+#: ../../../../ajax/ajax_userPrefsSave.php:42
+msgid "CONSULTA INVÁLIDA"
+msgstr ""
+
+#: ../../../../ajax/ajax_2fa.php:55
+msgid "Código correcto"
+msgstr ""
+
+#: ../../../../ajax/ajax_2fa.php:58 ../../../../ajax/ajax_userPrefsSave.php:66
+msgid "Código incorrecto"
+msgstr ""
+
+#: ../../../../ajax/ajax_accountSave.php:35
+#: ../../../../ajax/ajax_appMgmtSave.php:36
+#: ../../../../ajax/ajax_backup.php:33 ../../../../ajax/ajax_checkLdap.php:35
+#: ../../../../ajax/ajax_configSave.php:35 ../../../../ajax/ajax_import.php:35
+#: ../../../../ajax/ajax_migrate.php:35
+#: ../../../../ajax/ajax_sendRequest.php:35
+#: ../../../../ajax/ajax_userPrefsSave.php:36
+#: ../../../../ajax/ajax_viewpass.php:36
+msgid "La sesión no se ha iniciado o ha caducado"
+msgstr ""
+
+#: ../../../../ajax/ajax_accountSave.php:75
+#: ../../../../ajax/ajax_accountSave.php:90
+msgid "Es necesario un nombre de cuenta"
+msgstr ""
+
+#: ../../../../ajax/ajax_accountSave.php:77
+#: ../../../../ajax/ajax_accountSave.php:88
+#: ../../../../ajax/ajax_appMgmtSave.php:337
+msgid "Es necesario un nombre de cliente"
+msgstr ""
+
+#: ../../../../ajax/ajax_accountSave.php:79
+#: ../../../../ajax/ajax_accountSave.php:92
+msgid "Es necesario un usuario"
+msgstr ""
+
+#: ../../../../ajax/ajax_accountSave.php:81
+#: ../../../../ajax/ajax_accountSave.php:103
+msgid "Es necesaria una clave"
+msgstr ""
+
+#: ../../../../ajax/ajax_accountSave.php:83
+#: ../../../../ajax/ajax_accountSave.php:94
+msgid "Es necesario una categoría"
+msgstr ""
+
+#: ../../../../ajax/ajax_accountSave.php:98
+#: ../../../../ajax/ajax_accountSave.php:107
+msgid "Id inválido"
+msgstr ""
+
+#: ../../../../ajax/ajax_accountSave.php:110
+#: ../../../../ajax/ajax_accountSave.php:263
+#: ../../../../ajax/ajax_appMgmtSave.php:543
+#: ../../../../ajax/ajax_configSave.php:297
+#: ../../../../ajax/ajax_userPrefsSave.php:79 ../../../../api.php:53
+msgid "Acción Inválida"
+msgstr ""
+
+#: ../../../../ajax/ajax_accountSave.php:122
+#: ../../../../ajax/ajax_appMgmtSave.php:111
+#: ../../../../ajax/ajax_appMgmtSave.php:155
+#: ../../../../ajax/ajax_backup.php:70
+msgid "Las claves no coinciden"
+msgstr ""
+
+#: ../../../../ajax/ajax_accountSave.php:173
+msgid "Cuenta creada"
+msgstr ""
+
+#: ../../../../ajax/ajax_accountSave.php:176
+msgid "Error al crear la cuenta"
+msgstr ""
+
+#: ../../../../ajax/ajax_accountSave.php:211
+msgid "Sin cambios"
+msgstr ""
+
+#: ../../../../ajax/ajax_accountSave.php:223
+msgid "Cuenta actualizada"
+msgstr ""
+
+#: ../../../../ajax/ajax_accountSave.php:226
+msgid "Error al modificar la cuenta"
+msgstr ""
+
+#: ../../../../ajax/ajax_accountSave.php:233
+msgid "Cuenta eliminada"
+msgstr ""
+
+#: ../../../../ajax/ajax_accountSave.php:236
+msgid "Error al eliminar la cuenta"
+msgstr ""
+
+#: ../../../../ajax/ajax_accountSave.php:246
+#: ../../../../ajax/ajax_appMgmtSave.php:161
+#: ../../../../ajax/ajax_passReset.php:74
+msgid "Clave actualizada"
+msgstr ""
+
+#: ../../../../ajax/ajax_accountSave.php:249
+msgid "Error al actualizar la clave"
+msgstr ""
+
+#: ../../../../ajax/ajax_accountSave.php:256
+msgid "Cuenta restaurada"
+msgstr ""
+
+#: ../../../../ajax/ajax_accountSave.php:259
+msgid "Error al restaurar cuenta"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtData.php:54
+msgid "Ver Usuario"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtData.php:61
+#: ../../../../web/UsersMgmtC.class.php:136
+msgid "Editar Usuario"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtData.php:67
+#: ../../../../inc/UserBase.class.php:381
+#: ../../../../web/UsersMgmtC.class.php:121
+msgid "Nuevo Usuario"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtData.php:73
+msgid "Ver Grupo"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtData.php:80
+#: ../../../../web/UsersMgmtC.class.php:202
+msgid "Editar Grupo"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtData.php:86
+#: ../../../../inc/Groups.class.php:152 ../../../../inc/Groups.class.php:253
+#: ../../../../web/UsersMgmtC.class.php:194
+msgid "Nuevo Grupo"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtData.php:92
+msgid "Ver Perfil"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtData.php:99
+#: ../../../../web/UsersMgmtC.class.php:267
+msgid "Editar Perfil"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtData.php:105
+#: ../../../../inc/ProfileBase.class.php:512
+#: ../../../../web/UsersMgmtC.class.php:252
+msgid "Nuevo Perfil"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtData.php:111
+msgid "Ver Cliente"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtData.php:118
+#: ../../../../web/AccountsMgmtC.class.php:152
+msgid "Editar Cliente"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtData.php:124
+#: ../../../../inc/Customer.class.php:65
+#: ../../../../web/AccountsMgmtC.class.php:145
+msgid "Nuevo Cliente"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtData.php:130
+msgid "Ver Categoría"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtData.php:137
+#: ../../../../web/AccountsMgmtC.class.php:94
+msgid "Editar Categoría"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtData.php:143
+#: ../../../../inc/Category.class.php:83
+#: ../../../../web/AccountsMgmtC.class.php:86
+msgid "Nueva Categoría"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtData.php:149
+msgid "Ver Autorización"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtData.php:156
+#: ../../../../inc/ApiTokens.class.php:189
+#: ../../../../web/UsersMgmtC.class.php:399
+msgid "Nueva Autorización"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtData.php:162
+#: ../../../../web/UsersMgmtC.class.php:414
+msgid "Editar Autorización"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtData.php:168
+#: ../../../../web/AccountsMgmtC.class.php:273
+msgid "Nuevo Campo"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtData.php:174
+#: ../../../../web/AccountsMgmtC.class.php:280
+msgid "Editar Campo"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:85
+msgid "Es necesario un nombre de usuario"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:87
+msgid "Es necesario un login"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:89
+msgid "Es necesario un perfil"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:91
+msgid "Es necesario un grupo"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:93
+msgid "Es necesario un email"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:95
+#: ../../../../ajax/ajax_appMgmtSave.php:144
+#: ../../../../ajax/ajax_appMgmtSave.php:168
+#: ../../../../ajax/ajax_configSave.php:272
+#: ../../../../ajax/ajax_import.php:39 ../../../../ajax/ajax_migrate.php:39
+#: ../../../../ajax/ajax_userPrefsSave.php:55
+msgid "Ey, esto es una DEMO!!"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:100
+msgid "Login de usuario duplicado"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:103
+msgid "Email de usuario duplicado"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:109
+#: ../../../../ajax/ajax_appMgmtSave.php:146
+msgid "La clave no puede estar en blanco"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:122
+msgid "Usuario creado"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:125
+msgid "Error al crear el usuario"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:135
+#: ../../../../inc/UserUtil.class.php:103
+msgid "Usuario actualizado"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:138
+msgid "Error al actualizar el usuario"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:164
+#: ../../../../ajax/ajax_passReset.php:78
+msgid "Error al modificar la clave"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:170
+msgid "No es posible eliminar, usuario en uso"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:174
+msgid "Usuario eliminado"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:177
+msgid "Error al eliminar el usuario"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:192
+msgid "Es necesario un nombre de grupo"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:200
+msgid "Nombre de grupo duplicado"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:212
+msgid "Grupo creado"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:214
+msgid "Error al crear el grupo"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:225
+msgid "Grupo actualizado"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:228
+msgid "Error al actualizar el grupo"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:237
+#: ../../../../ajax/ajax_appMgmtSave.php:314
+#: ../../../../inc/CustomFieldsBase.class.php:83
+#: ../../../../inc/themes/classic/account.inc:109
+#: ../../../../inc/themes/classic/groups.inc:24
+#: ../../../../inc/themes/classic/profiles.inc:85
+#: ../../../../inc/themes/material-blue/account.inc:134
+#: ../../../../inc/themes/material-blue/groups.inc:32
+#: ../../../../inc/themes/material-blue/profiles.inc:99
+msgid "Usuarios"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:241
+#: ../../../../inc/Category.class.php:266
+#: ../../../../inc/CustomFieldsBase.class.php:80
+#: ../../../../inc/Customer.class.php:150
+#: ../../../../inc/themes/classic/profiles.inc:15
+#: ../../../../inc/themes/material-blue/config.inc:139
+#: ../../../../inc/themes/material-blue/profiles.inc:19
+msgid "Cuentas"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:244
+#: ../../../../ajax/ajax_appMgmtSave.php:316
+#: ../../../../inc/Category.class.php:119
+#: ../../../../inc/Customer.class.php:150
+msgid "No es posible eliminar"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:244
+msgid "Grupo en uso por:"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:249
+msgid "Grupo eliminado"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:252
+msgid "Error al eliminar el grupo"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:291
+msgid "Es necesario un nombre de perfil"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:293
+msgid "Nombre de perfil duplicado"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:298
+msgid "Perfil creado"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:301
+msgid "Error al crear el perfil"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:304
+msgid "Perfil actualizado"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:307
+msgid "Error al actualizar el perfil"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:316
+msgid "Perfil en uso por:"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:319
+msgid "Perfil eliminado"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:322
+msgid "Error al eliminar el perfil"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:357
+msgid "Cliente creado"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:372
+msgid "Cliente actualizado"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:382
+msgid "Cliente eliminado"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:396
+msgid "Es necesario un nombre de categoría"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:416
+msgid "Categoría creada"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:431
+msgid "Categoría actualizada"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:442
+msgid "Categoría eliminada"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:458
+msgid "Usuario o acción no indicado"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:468
+msgid "Autorización creada"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:476
+msgid "Autorización actualizada"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:486
+msgid "Autorización eliminada"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:503
+msgid "Nombre del campo no indicado"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:505
+msgid "Tipo del campo no indicado"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:507
+msgid "Módulo del campo no indicado"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:521
+msgid "Campo creado"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:530
+msgid "Campo actualizado"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:540
+msgid "Campo eliminado"
+msgstr ""
+
+#: ../../../../ajax/ajax_backup.php:52 ../../../../ajax/ajax_backup.php:57
+#: ../../../../inc/themes/classic/backup.inc:54
+msgid "Realizar Backup"
+msgstr ""
+
+#: ../../../../ajax/ajax_backup.php:52 ../../../../ajax/ajax_backup.php:54
+msgid "Error al realizar el backup"
+msgstr ""
+
+#: ../../../../ajax/ajax_backup.php:54 ../../../../ajax/ajax_backup.php:76
+#: ../../../../ajax/ajax_checkLdap.php:57 ../../../../inc/Import.class.php:128
+#: ../../../../inc/Migrate.class.php:93
+msgid "Revise el registro de eventos para más detalles"
+msgstr ""
+
+#: ../../../../ajax/ajax_backup.php:57
+msgid "Copia de la aplicación y base de datos realizada correctamente"
+msgstr ""
+
+#: ../../../../ajax/ajax_backup.php:59
+msgid "Proceso de backup finalizado"
+msgstr ""
+
+#: ../../../../ajax/ajax_backup.php:66
+#: ../../../../ajax/ajax_configSave.php:244
+#: ../../../../ajax/ajax_doLogin.php:53 ../../../../ajax/ajax_import.php:56
+msgid "Error en clave RSA"
+msgstr ""
+
+#: ../../../../ajax/ajax_backup.php:74 ../../../../ajax/ajax_backup.php:79
+msgid "Realizar Exportación"
+msgstr ""
+
+#: ../../../../ajax/ajax_backup.php:74
+msgid "Error al realizar la exportación de cuentas"
+msgstr ""
+
+#: ../../../../ajax/ajax_backup.php:76
+msgid "Error al realizar la exportación"
+msgstr ""
+
+#: ../../../../ajax/ajax_backup.php:79
+msgid "Exportación de cuentas realizada correctamente"
+msgstr ""
+
+#: ../../../../ajax/ajax_backup.php:81
+msgid "Proceso de exportación finalizado"
+msgstr ""
+
+#: ../../../../ajax/ajax_checkLdap.php:51 ../../../../inc/Ldap.class.php:265
+msgid "Los parámetros de LDAP no están configurados"
+msgstr ""
+
+#: ../../../../ajax/ajax_checkLdap.php:57
+msgid "Error de conexión a LDAP"
+msgstr ""
+
+#: ../../../../ajax/ajax_checkLdap.php:59
+msgid "Conexión a LDAP correcta"
+msgstr ""
+
+#: ../../../../ajax/ajax_checkLdap.php:59
+msgid "Objetos encontrados"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:55
+msgid "Modificar Configuración"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:100
+msgid "El tamaño máximo por archivo es de 16MB"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:113
+msgid "Faltan parámetros de Proxy"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:124
+#: ../../../../web/ConfigC.class.php:126
+#: ../../../../inc/themes/classic/profiles.inc:61
+#: ../../../../inc/themes/material-blue/profiles.inc:72
+msgid "General"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:134
+msgid "Faltan parámetros de Wiki"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:144
+#: ../../../../web/ConfigC.class.php:261
+#: ../../../../inc/themes/classic/wiki.inc:4
+#: ../../../../inc/themes/material-blue/wiki.inc:4
+msgid "Wiki"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:159
+msgid "Faltan parámetros de LDAP"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:174
+#: ../../../../web/ConfigC.class.php:293
+#: ../../../../inc/themes/classic/ldap.inc:4
+#: ../../../../inc/themes/material-blue/ldap.inc:4
+msgid "LDAP"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:189
+msgid "Faltan parámetros de Correo"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:209
+#: ../../../../web/ConfigC.class.php:323
+#: ../../../../inc/themes/classic/mail.inc:4
+#: ../../../../inc/themes/material-blue/mail.inc:4
+msgid "Correo"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:221
+msgid "Configuración actualizada"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:230
+#: ../../../../ajax/ajax_configSave.php:282
+#: ../../../../ajax/ajax_viewpass.php:60
+#: ../../../../inc/Controller.class.php:169
+msgid "Clave maestra actualizada"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:230
+#: ../../../../ajax/ajax_viewpass.php:60
+#: ../../../../inc/Controller.class.php:169
+msgid "Reinicie la sesión para cambiarla"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:232
+msgid "Clave maestra no indicada"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:234
+msgid "Se ha de confirmar el cambio de clave"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:248
+msgid "Las claves son idénticas"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:250
+msgid "Las claves maestras no coinciden"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:252
+msgid "La clave maestra actual no coincide"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:261
+msgid "Errores al actualizar las claves de las cuentas"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:267
+msgid "Errores al actualizar las claves de las cuentas del histórico"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:280
+#: ../../../../inc/Account.class.php:497
+msgid "Actualizar Clave Maestra"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:284
+msgid "Error al guardar el hash de la clave maestra"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:292
+msgid "Generar Clave Temporal"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:292
+#: ../../../../inc/themes/classic/account.inc:83
+#: ../../../../inc/themes/classic/editpass.inc:25
+#: ../../../../inc/themes/classic/install.inc:38
+#: ../../../../inc/themes/classic/install.inc:39
+#: ../../../../inc/themes/classic/login.inc:10
+#: ../../../../inc/themes/classic/login.inc:22
+#: ../../../../inc/themes/classic/mail.inc:55
+#: ../../../../inc/themes/classic/passreset.inc:29
+#: ../../../../inc/themes/classic/users.inc:75
+#: ../../../../inc/themes/classic/userspass.inc:8
+#: ../../../../inc/themes/classic/userspass.inc:11
+#: ../../../../inc/themes/material-blue/account.inc:95
+#: ../../../../inc/themes/material-blue/account.inc:100
+#: ../../../../inc/themes/material-blue/config.inc:358
+#: ../../../../inc/themes/material-blue/editpass.inc:26
+#: ../../../../inc/themes/material-blue/editpass.inc:31
+#: ../../../../inc/themes/material-blue/editpass.inc:41
+#: ../../../../inc/themes/material-blue/install.inc:44
+#: ../../../../inc/themes/material-blue/ldap.inc:105
+#: ../../../../inc/themes/material-blue/login.inc:17
+#: ../../../../inc/themes/material-blue/login.inc:40
+#: ../../../../inc/themes/material-blue/mail.inc:73
+#: ../../../../inc/themes/material-blue/mail.inc:80
+#: ../../../../inc/themes/material-blue/passreset.inc:31
+#: ../../../../inc/themes/material-blue/users.inc:89
+#: ../../../../inc/themes/material-blue/users.inc:96
+#: ../../../../inc/themes/material-blue/userspass.inc:8
+#: ../../../../inc/themes/material-blue/userspass.inc:13
+msgid "Clave"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:294
+msgid "Clave Temporal Generada"
+msgstr ""
+
+#: ../../../../ajax/ajax_doLogin.php:46
+msgid "Usuario/Clave no introducidos"
+msgstr ""
+
+#: ../../../../ajax/ajax_doLogin.php:65
+msgid "Inicio sesión"
+msgstr ""
+
+#: ../../../../ajax/ajax_doLogin.php:70
+msgid "Servidor Login"
+msgstr ""
+
+#: ../../../../ajax/ajax_doLogin.php:76
+msgid "Error al guardar los datos de LDAP"
+msgstr ""
+
+#: ../../../../ajax/ajax_doLogin.php:79 ../../../../ajax/ajax_doLogin.php:87
+#: ../../../../ajax/ajax_doLogin.php:139 ../../../../ajax/ajax_doLogin.php:185
+#: ../../../../inc/ApiTokens.class.php:140
+#: ../../../../inc/ApiTokens.class.php:186
+#: ../../../../inc/ApiTokens.class.php:217
+#: ../../../../inc/ApiTokens.class.php:243
+#: ../../../../inc/ApiTokens.class.php:262
+#: ../../../../inc/ApiTokens.class.php:304
+#: ../../../../inc/ApiTokens.class.php:328 ../../../../inc/Crypt.class.php:235
+#: ../../../../inc/Crypt.class.php:246
+#: ../../../../inc/XmlImportBase.class.php:74
+msgid "Error interno"
+msgstr ""
+
+#: ../../../../ajax/ajax_doLogin.php:84
+msgid "Error al actualizar la clave del usuario en la BBDD"
+msgstr ""
+
+#: ../../../../ajax/ajax_doLogin.php:92 ../../../../ajax/ajax_doLogin.php:117
+msgid "Login incorrecto"
+msgstr ""
+
+#: ../../../../ajax/ajax_doLogin.php:93 ../../../../ajax/ajax_doLogin.php:100
+#: ../../../../ajax/ajax_doLogin.php:107 ../../../../ajax/ajax_doLogin.php:118
+#: ../../../../ajax/ajax_doLogin.php:128 ../../../../ajax/ajax_doLogin.php:180
+#: ../../../../inc/ApiTokens.class.php:190
+#: ../../../../inc/ApiTokens.class.php:308 ../../../../inc/Auth.class.php:108
+#: ../../../../inc/Init.class.php:517 ../../../../inc/UserBase.class.php:382
+#: ../../../../inc/UserBase.class.php:526 ../../../../res/test.php:64
+#: ../../../../web/SearchC.class.php:289
+#: ../../../../web/UsersMgmtC.class.php:392
+#: ../../../../inc/themes/classic/account.inc:70
+#: ../../../../inc/themes/classic/editpass.inc:21
+#: ../../../../inc/themes/classic/eventlog.inc:25
+#: ../../../../inc/themes/classic/info.inc:39
+#: ../../../../inc/themes/classic/install.inc:27
+#: ../../../../inc/themes/classic/install.inc:28
+#: ../../../../inc/themes/classic/login.inc:7
+#: ../../../../inc/themes/classic/login.inc:20
+#: ../../../../inc/themes/classic/mail.inc:47
+#: ../../../../inc/themes/classic/passreset.inc:17
+#: ../../../../inc/themes/classic/request.inc:17
+#: ../../../../inc/themes/classic/search.inc:50
+#: ../../../../inc/themes/classic/tokens.inc:8
+#: ../../../../inc/themes/material-blue/account.inc:80
+#: ../../../../inc/themes/material-blue/config.inc:344
+#: ../../../../inc/themes/material-blue/editpass.inc:22
+#: ../../../../inc/themes/material-blue/eventlog.inc:24
+#: ../../../../inc/themes/material-blue/info.inc:39
+#: ../../../../inc/themes/material-blue/login.inc:10
+#: ../../../../inc/themes/material-blue/login.inc:33
+#: ../../../../inc/themes/material-blue/mail.inc:61
+#: ../../../../inc/themes/material-blue/mail.inc:67
+#: ../../../../inc/themes/material-blue/passreset.inc:17
+#: ../../../../inc/themes/material-blue/request.inc:20
+#: ../../../../inc/themes/material-blue/search.inc:55
+#: ../../../../inc/themes/material-blue/tokens.inc:8
+msgid "Usuario"
+msgstr ""
+
+#: ../../../../ajax/ajax_doLogin.php:96 ../../../../ajax/ajax_doLogin.php:110
+#: ../../../../ajax/ajax_doLogin.php:121
+msgid "Usuario/Clave incorrectos"
+msgstr ""
+
+#: ../../../../ajax/ajax_doLogin.php:99 ../../../../ajax/ajax_doLogin.php:103
+msgid "Cuenta expirada"
+msgstr ""
+
+#: ../../../../ajax/ajax_doLogin.php:106
+msgid "El usuario no tiene grupos asociados"
+msgstr ""
+
+#: ../../../../ajax/ajax_doLogin.php:127 ../../../../ajax/ajax_doLogin.php:131
+msgid "Usuario deshabilitado"
+msgstr ""
+
+#: ../../../../ajax/ajax_doLogin.php:136
+msgid "Error al obtener los datos del usuario de la BBDD"
+msgstr ""
+
+#: ../../../../ajax/ajax_doLogin.php:146
+msgid "La clave maestra no ha sido guardada o es incorrecta"
+msgstr ""
+
+#: ../../../../ajax/ajax_doLogin.php:155 ../../../../ajax/ajax_doLogin.php:158
+msgid "Clave maestra incorrecta"
+msgstr ""
+
+#: ../../../../ajax/ajax_doLogin.php:181
+#: ../../../../inc/ProfileBase.class.php:512
+#: ../../../../inc/ProfileBase.class.php:550
+#: ../../../../inc/ProfileBase.class.php:593
+#: ../../../../web/UsersMgmtC.class.php:89
+#: ../../../../inc/themes/classic/users.inc:37
+#: ../../../../inc/themes/material-blue/users.inc:43
+msgid "Perfil"
+msgstr ""
+
+#: ../../../../ajax/ajax_doLogin.php:182 ../../../../inc/Groups.class.php:158
+#: ../../../../inc/Groups.class.php:259 ../../../../inc/Groups.class.php:375
+#: ../../../../web/UsersMgmtC.class.php:90
+#: ../../../../inc/themes/classic/ldap.inc:116
+#: ../../../../inc/themes/classic/users.inc:49
+#: ../../../../inc/themes/material-blue/ldap.inc:139
+#: ../../../../inc/themes/material-blue/ldap.inc:164
+#: ../../../../inc/themes/material-blue/users.inc:57
+msgid "Grupo"
+msgstr ""
+
+#: ../../../../ajax/ajax_files.php:45 ../../../../ajax/ajax_getFiles.php:39
+msgid "Gestión de archivos deshabilitada"
+msgstr ""
+
+#: ../../../../ajax/ajax_files.php:59 ../../../../inc/Files.class.php:63
+msgid "Subir Archivo"
+msgstr ""
+
+#: ../../../../ajax/ajax_files.php:68
+msgid "No hay extensiones permitidas"
+msgstr ""
+
+#: ../../../../ajax/ajax_files.php:79 ../../../../inc/FileImport.class.php:115
+msgid "Tipo de archivo no soportado"
+msgstr ""
+
+#: ../../../../ajax/ajax_files.php:85
+msgid "Archivo inválido"
+msgstr ""
+
+#: ../../../../ajax/ajax_files.php:101 ../../../../ajax/ajax_files.php:118
+#: ../../../../inc/FileImport.class.php:131
+#: ../../../../inc/FileImport.class.php:149
+#: ../../../../inc/FileImport.class.php:167
+msgid "Error interno al leer el archivo"
+msgstr ""
+
+#: ../../../../ajax/ajax_files.php:108
+msgid "El archivo es mayor de "
+msgstr ""
+
+#: ../../../../ajax/ajax_files.php:125
+msgid "Archivo guardado"
+msgstr ""
+
+#: ../../../../ajax/ajax_files.php:130
+msgid "No se pudo guardar el archivo"
+msgstr ""
+
+#: ../../../../ajax/ajax_files.php:140 ../../../../ajax/ajax_files.php:199
+msgid "No es un ID de archivo válido"
+msgstr ""
+
+#: ../../../../ajax/ajax_files.php:148
+msgid "El archivo no existe"
+msgstr ""
+
+#: ../../../../ajax/ajax_files.php:157
+#: ../../../../inc/themes/classic/files.inc:19
+#: ../../../../inc/themes/material-blue/files.inc:19
+msgid "Descargar Archivo"
+msgstr ""
+
+#: ../../../../ajax/ajax_files.php:158 ../../../../ajax/ajax_viewpass.php:69
+#: ../../../../inc/Files.class.php:112
+#: ../../../../inc/themes/classic/eventlog.inc:16
+#: ../../../../inc/themes/material-blue/eventlog.inc:15
+msgid "ID"
+msgstr ""
+
+#: ../../../../ajax/ajax_files.php:159 ../../../../inc/Files.class.php:65
+#: ../../../../inc/Files.class.php:113
+#: ../../../../inc/themes/classic/import.inc:155
+#: ../../../../inc/themes/material-blue/import.inc:83
+msgid "Archivo"
+msgstr ""
+
+#: ../../../../ajax/ajax_files.php:160 ../../../../inc/Files.class.php:66
+#: ../../../../inc/Files.class.php:114
+#: ../../../../web/AccountsMgmtC.class.php:266
+#: ../../../../inc/themes/classic/customfields.inc:16
+#: ../../../../inc/themes/material-blue/customfields.inc:19
+msgid "Tipo"
+msgstr ""
+
+#: ../../../../ajax/ajax_files.php:161 ../../../../inc/Files.class.php:67
+#: ../../../../inc/Files.class.php:115
+msgid "Tamaño"
+msgstr ""
+
+#: ../../../../ajax/ajax_files.php:203
+msgid "Archivo eliminado"
+msgstr ""
+
+#: ../../../../ajax/ajax_files.php:208
+msgid "Error al eliminar el archivo"
+msgstr ""
+
+#: ../../../../ajax/ajax_getContent.php:41
+#: ../../../../inc/ApiRequest.class.php:55
+#: ../../../../inc/CustomFieldDef.class.php:38
+#: ../../../../inc/CustomFields.class.php:48
+msgid "Parámetros incorrectos"
+msgstr ""
+
+#: ../../../../ajax/ajax_migrate.php:55
+msgid "Confirmar la importación de cuentas"
+msgstr ""
+
+#: ../../../../ajax/ajax_migrate.php:57
+msgid "Es necesario un usuario de conexión"
+msgstr ""
+
+#: ../../../../ajax/ajax_migrate.php:59
+msgid "Es necesaria una clave de conexión"
+msgstr ""
+
+#: ../../../../ajax/ajax_migrate.php:61
+msgid "Es necesario el nombre de la BBDD"
+msgstr ""
+
+#: ../../../../ajax/ajax_migrate.php:63
+msgid "Es necesario un nombre de host"
+msgstr ""
+
+#: ../../../../ajax/ajax_passReset.php:47
+#: ../../../../ajax/ajax_passReset.php:50
+msgid "Recuperación de Clave"
+msgstr ""
+
+#: ../../../../ajax/ajax_passReset.php:53
+#: ../../../../ajax/ajax_passReset.php:58
+msgid "Solicitado para"
+msgstr ""
+
+#: ../../../../ajax/ajax_passReset.php:55
+#: ../../../../ajax/ajax_sendRequest.php:75
+msgid "Solicitud enviada"
+msgstr ""
+
+#: ../../../../ajax/ajax_passReset.php:55
+msgid "En breve recibirá un correo para completar la solicitud."
+msgstr ""
+
+#: ../../../../ajax/ajax_passReset.php:60
+msgid "No se ha podido realizar la solicitud. Consulte con el administrador."
+msgstr ""
+
+#: ../../../../ajax/ajax_passReset.php:72
+#: ../../../../inc/UserBase.class.php:568
+#: ../../../../inc/UserUtil.class.php:664
+msgid "Modificar Clave Usuario"
+msgstr ""
+
+#: ../../../../ajax/ajax_passReset.php:72
+#: ../../../../inc/UserBase.class.php:568
+#: ../../../../inc/UserBase.class.php:592
+#: ../../../../inc/UserUtil.class.php:664
+#: ../../../../web/UsersMgmtC.class.php:88
+#: ../../../../inc/themes/classic/users.inc:21
+#: ../../../../inc/themes/material-blue/users.inc:24
+msgid "Login"
+msgstr ""
+
+#: ../../../../ajax/ajax_passReset.php:80
+msgid "La clave es incorrecta o no coincide"
+msgstr ""
+
+#: ../../../../ajax/ajax_sendRequest.php:48
+msgid "Es necesaria una descripción"
+msgstr ""
+
+#: ../../../../ajax/ajax_sendRequest.php:61
+msgid "Solicitud de Modificación de Cuenta"
+msgstr ""
+
+#: ../../../../ajax/ajax_sendRequest.php:62
+msgid "Solicitante"
+msgstr ""
+
+#: ../../../../ajax/ajax_sendRequest.php:63
+#: ../../../../ajax/ajax_viewpass.php:70 ../../../../inc/Account.class.php:165
+#: ../../../../inc/Account.class.php:219 ../../../../inc/Account.class.php:402
+#: ../../../../inc/Account.class.php:425 ../../../../inc/Account.class.php:667
+#: ../../../../inc/Files.class.php:64
+msgid "Cuenta"
+msgstr ""
+
+#: ../../../../ajax/ajax_sendRequest.php:64
+#: ../../../../inc/Account.class.php:164 ../../../../inc/Account.class.php:218
+#: ../../../../inc/Account.class.php:401 ../../../../inc/Account.class.php:424
+#: ../../../../inc/Account.class.php:666 ../../../../inc/Customer.class.php:65
+#: ../../../../inc/Customer.class.php:115
+#: ../../../../inc/Customer.class.php:163
+#: ../../../../web/SearchC.class.php:271
+#: ../../../../inc/themes/classic/account.inc:23
+#: ../../../../inc/themes/classic/editpass.inc:12
+#: ../../../../inc/themes/classic/request.inc:9
+#: ../../../../inc/themes/classic/search.inc:19
+#: ../../../../inc/themes/material-blue/account.inc:29
+#: ../../../../inc/themes/material-blue/editpass.inc:13
+#: ../../../../inc/themes/material-blue/request.inc:10
+#: ../../../../inc/themes/material-blue/search.inc:24
+msgid "Cliente"
+msgstr ""
+
+#: ../../../../ajax/ajax_sendRequest.php:65
+#: ../../../../web/AccountsMgmtC.class.php:79
+#: ../../../../web/AccountsMgmtC.class.php:138
+#: ../../../../web/UsersMgmtC.class.php:187
+#: ../../../../inc/themes/classic/categories.inc:16
+#: ../../../../inc/themes/classic/customers.inc:16
+#: ../../../../inc/themes/classic/eventlog.inc:31
+#: ../../../../inc/themes/classic/groups.inc:16
+#: ../../../../inc/themes/material-blue/categories.inc:20
+#: ../../../../inc/themes/material-blue/customers.inc:20
+#: ../../../../inc/themes/material-blue/eventlog.inc:30
+#: ../../../../inc/themes/material-blue/groups.inc:20
+msgid "Descripción"
+msgstr ""
+
+#: ../../../../ajax/ajax_sendRequest.php:78
+msgid "Error al enviar la solicitud"
+msgstr ""
+
+#: ../../../../ajax/ajax_userPrefsSave.php:74
+msgid "Error al actualizar preferencias"
+msgstr ""
+
+#: ../../../../ajax/ajax_userPrefsSave.php:77
+msgid "Preferencias actualizadas"
+msgstr ""
+
+#: ../../../../ajax/ajax_viewpass.php:54
+msgid "La clave maestra no coincide"
+msgstr ""
+
+#: ../../../../ajax/ajax_viewpass.php:58
+#: ../../../../inc/Controller.class.php:166
+msgid "No tiene permisos para acceder a esta cuenta"
+msgstr ""
+
+#: ../../../../ajax/ajax_viewpass.php:68 ../../../../inc/Acl.class.php:133
+#: ../../../../inc/themes/classic/account.inc:379
+#: ../../../../inc/themes/classic/profiles.inc:23
+#: ../../../../inc/themes/classic/search.inc:100
+#: ../../../../inc/themes/material-blue/account.inc:419
+#: ../../../../inc/themes/material-blue/profiles.inc:35
+#: ../../../../inc/themes/material-blue/search.inc:113
+msgid "Ver Clave"
+msgstr ""
+
+#: ../../../../ajax/ajax_viewpass.php:79
+msgid "Clave de Cuenta"
+msgstr ""
+
+#: ../../../../api.php:56
+msgid "Ayuda Parámetros"
+msgstr ""
+
+#: ../../../../inc/Account.class.php:28
+#: ../../../../inc/AccountBase.class.php:28
+#: ../../../../inc/AccountHistory.class.php:28
+#: ../../../../inc/AccountInterface.class.php:28
+#: ../../../../inc/AccountSearch.class.php:28 ../../../../inc/Acl.class.php:29
+#: ../../../../inc/Api.class.php:30 ../../../../inc/ApiRequest.class.php:28
+#: ../../../../inc/ApiTokens.class.php:28 ../../../../inc/Auth.class.php:29
+#: ../../../../inc/Auth2FA.class.php:32 ../../../../inc/Backup.class.php:28
+#: ../../../../inc/Category.class.php:29 ../../../../inc/Common.class.php:28
+#: ../../../../inc/Config.class.php:28 ../../../../inc/Controller.class.php:31
+#: ../../../../inc/Crypt.class.php:28 ../../../../inc/CsvImport.class.php:28
+#: ../../../../inc/CsvImportBase.class.php:28
+#: ../../../../inc/Customer.class.php:29 ../../../../inc/DB.class.php:28
+#: ../../../../inc/DBConnectionFactory.class.php:30
+#: ../../../../inc/FileImport.class.php:28 ../../../../inc/Files.class.php:29
+#: ../../../../inc/Groups.class.php:29 ../../../../inc/Html.class.php:28
+#: ../../../../inc/ImageUtil.class.php:28 ../../../../inc/Import.class.php:29
+#: ../../../../inc/ImportBase.class.php:28 ../../../../inc/Init.class.php:30
+#: ../../../../inc/Installer.class.php:29
+#: ../../../../inc/KeepassImport.class.php:28
+#: ../../../../inc/KeepassXImport.class.php:28
+#: ../../../../inc/Ldap.class.php:29 ../../../../inc/LdapADS.class.php:28
+#: ../../../../inc/Log.class.php:28 ../../../../inc/Migrate.class.php:28
+#: ../../../../inc/Profile.class.php:29
+#: ../../../../inc/ProfileBase.class.php:28
+#: ../../../../inc/Request.class.php:111 ../../../../inc/Session.class.php:28
+#: ../../../../inc/SyspassImport.class.php:28
+#: ../../../../inc/Upgrade.class.php:29 ../../../../inc/User.class.php:28
+#: ../../../../inc/UserLdap.class.php:28
+#: ../../../../inc/UserPreferences.class.php:28
+#: ../../../../inc/UserUtil.class.php:28 ../../../../inc/Util.class.php:31
+#: ../../../../inc/XmlImport.class.php:28
+#: ../../../../inc/XmlImportBase.class.php:28
+#: ../../../../web/AccountC.class.php:38
+#: ../../../../web/AccountsMgmtC.class.php:32
+#: ../../../../web/ConfigC.class.php:31 ../../../../web/EventlogC.class.php:28
+#: ../../../../web/SearchC.class.php:30
+#: ../../../../web/UsersMgmtC.class.php:39
+#: ../../../../web/UsersPrefsC.class.php:32
+msgid "No es posible acceder directamente a este archivo"
+msgstr ""
+
+#: ../../../../inc/Account.class.php:112 ../../../../inc/Account.class.php:185
+#: ../../../../inc/Account.class.php:636
+msgid "Error al actualizar el historial"
+msgstr ""
+
+#: ../../../../inc/Account.class.php:117
+msgid "Actualizar Cuenta"
+msgstr ""
+
+#: ../../../../inc/Account.class.php:120 ../../../../inc/Account.class.php:383
+msgid "Error al actualizar los grupos secundarios"
+msgstr ""
+
+#: ../../../../inc/Account.class.php:126 ../../../../inc/Account.class.php:391
+msgid "Error al actualizar los usuarios de la cuenta"
+msgstr ""
+
+#: ../../../../inc/Account.class.php:217
+msgid "Restaurar Cuenta"
+msgstr ""
+
+#: ../../../../inc/Account.class.php:326
+#: ../../../../inc/AccountHistory.class.php:343
+#: ../../../../inc/AccountHistory.class.php:505
+msgid "No se pudieron obtener los datos de la cuenta"
+msgstr ""
+
+#: ../../../../inc/Account.class.php:400 ../../../../inc/Acl.class.php:129
+#: ../../../../web/AccountC.class.php:147 ../../../../web/MainC.class.php:161
+msgid "Nueva Cuenta"
+msgstr ""
+
+#: ../../../../inc/Account.class.php:418
+msgid "ERROR: Error en la operación."
+msgstr ""
+
+#: ../../../../inc/Account.class.php:423 ../../../../inc/Acl.class.php:134
+#: ../../../../web/AccountC.class.php:352
+#: ../../../../inc/themes/classic/account.inc:366
+#: ../../../../inc/themes/classic/search.inc:127
+#: ../../../../inc/themes/material-blue/account.inc:413
+#: ../../../../inc/themes/material-blue/search.inc:142
+msgid "Eliminar Cuenta"
+msgstr ""
+
+#: ../../../../inc/Account.class.php:436
+msgid "Error al eliminar grupos asociados a la cuenta"
+msgstr ""
+
+#: ../../../../inc/Account.class.php:440
+msgid "Error al eliminar usuarios asociados a la cuenta"
+msgstr ""
+
+#: ../../../../inc/Account.class.php:444
+msgid "Error al eliminar archivos asociados a la cuenta"
+msgstr ""
+
+#: ../../../../inc/Account.class.php:498
+#: ../../../../inc/AccountHistory.class.php:124
+#: ../../../../inc/XmlImport.class.php:62
+msgid "Inicio"
+msgstr ""
+
+#: ../../../../inc/Account.class.php:503
+#: ../../../../inc/AccountHistory.class.php:130
+msgid "Error en el módulo de encriptación"
+msgstr ""
+
+#: ../../../../inc/Account.class.php:511
+#: ../../../../inc/AccountHistory.class.php:138
+msgid "Error al obtener las claves de las cuentas"
+msgstr ""
+
+#: ../../../../inc/Account.class.php:527
+#: ../../../../inc/AccountHistory.class.php:160
+msgid "Clave de cuenta vacía"
+msgstr ""
+
+#: ../../../../inc/Account.class.php:532
+#: ../../../../inc/AccountHistory.class.php:165
+msgid "IV de encriptación incorrecto"
+msgstr ""
+
+#: ../../../../inc/Account.class.php:541
+#: ../../../../inc/AccountHistory.class.php:174
+msgid "No es posible desencriptar la clave de la cuenta"
+msgstr ""
+
+#: ../../../../inc/Account.class.php:547
+msgid "Fallo al actualizar la clave de la cuenta"
+msgstr ""
+
+#: ../../../../inc/Account.class.php:561
+msgid "Cuentas actualizadas"
+msgstr ""
+
+#: ../../../../inc/Account.class.php:566
+#: ../../../../inc/AccountHistory.class.php:199
+msgid "Fin"
+msgstr ""
+
+#: ../../../../inc/Account.class.php:665
+msgid "Modificar Clave"
+msgstr ""
+
+#: ../../../../inc/Account.class.php:700
+msgid "No se pudieron obtener los datos de las cuentas"
+msgstr ""
+
+#: ../../../../inc/AccountHistory.class.php:123
+msgid "Actualizar Clave Maestra (H)"
+msgstr ""
+
+#: ../../../../inc/AccountHistory.class.php:155
+msgid "La clave maestra del registro no coincide"
+msgstr ""
+
+#: ../../../../inc/AccountHistory.class.php:180
+msgid "Fallo al actualizar la clave del histórico"
+msgstr ""
+
+#: ../../../../inc/AccountHistory.class.php:194
+msgid "Registros actualizados"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:112
+msgid "Denegado acceso a"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:126
+msgid "Buscar Cuentas"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:127
+msgid "Ver Cuenta"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:128 ../../../../web/AccountC.class.php:259
+#: ../../../../inc/themes/classic/search.inc:121
+#: ../../../../inc/themes/material-blue/search.inc:136
+msgid "Copiar Cuenta"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:130 ../../../../web/AccountC.class.php:323
+msgid "Editar Cuenta"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:131
+msgid "Editar Clave de Cuenta"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:132
+#: ../../../../inc/themes/classic/profiles.inc:28
+#: ../../../../inc/themes/material-blue/profiles.inc:40
+msgid "Ver Historial"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:135
+#: ../../../../inc/themes/classic/account.inc:188
+#: ../../../../inc/themes/classic/profiles.inc:50
+#: ../../../../inc/themes/material-blue/account.inc:230
+#: ../../../../inc/themes/material-blue/config.inc:224
+#: ../../../../inc/themes/material-blue/profiles.inc:60
+msgid "Archivos"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:136
+msgid "Peticiones"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:137
+msgid "Gestión Aplicación"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:138
+msgid "Gestión Categorías"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:139
+msgid "Gestión Clientes"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:140
+msgid "Gestión Campos Personalizados"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:141
+msgid "Gestión Autorizaciones API"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:142 ../../../../inc/Acl.class.php:143
+msgid "Gestión Usuarios"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:144
+msgid "Gestión Grupos"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:145
+msgid "Gestión Perfiles"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:146 ../../../../inc/Config.class.php:118
+#: ../../../../inc/Config.class.php:400 ../../../../web/MainC.class.php:179
+#: ../../../../inc/themes/classic/profiles.inc:57
+#: ../../../../inc/themes/material-blue/profiles.inc:66
+msgid "Configuración"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:147
+msgid "Configuración General"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:148 ../../../../web/ConfigC.class.php:149
+#: ../../../../inc/themes/classic/profiles.inc:65
+#: ../../../../inc/themes/material-blue/profiles.inc:77
+msgid "Encriptación"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:149 ../../../../web/ConfigC.class.php:194
+#: ../../../../inc/themes/classic/backup.inc:4
+#: ../../../../inc/themes/material-blue/backup.inc:4
+msgid "Copia de Seguridad"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:150
+msgid "Exportar"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:151
+#: ../../../../inc/themes/classic/profiles.inc:74
+#: ../../../../inc/themes/material-blue/profiles.inc:87
+msgid "Importar"
+msgstr ""
+
+#: ../../../../inc/Api.class.php:65 ../../../../inc/Api.class.php:88
+#: ../../../../inc/Api.class.php:126
+msgid "Acceso no permitido"
+msgstr ""
+
+#: ../../../../inc/Api.class.php:166
+msgid "Error de codificación"
+msgstr ""
+
+#: ../../../../inc/ApiRequest.class.php:102
+msgid "Token de autorización"
+msgstr ""
+
+#: ../../../../inc/ApiRequest.class.php:103
+msgid "Acción a realizar"
+msgstr ""
+
+#: ../../../../inc/ApiRequest.class.php:104
+msgid "Clave de usuario (opcional)"
+msgstr ""
+
+#: ../../../../inc/ApiRequest.class.php:105
+msgid "Cadena a buscar"
+msgstr ""
+
+#: ../../../../inc/ApiRequest.class.php:106
+msgid "Numero de cuentas a mostar en la búsqueda"
+msgstr ""
+
+#: ../../../../inc/ApiRequest.class.php:107
+msgid "Item a devolver"
+msgstr ""
+
+#: ../../../../inc/ApiTokens.class.php:221
+msgid "La autorización ya existe"
+msgstr ""
+
+#: ../../../../inc/ApiTokens.class.php:307
+msgid "Actualizar Autorización"
+msgstr ""
+
+#: ../../../../inc/ApiTokens.class.php:331
+#: ../../../../web/UsersMgmtC.class.php:421
+msgid "Eliminar Autorización"
+msgstr ""
+
+#: ../../../../inc/Auth.class.php:107
+msgid "Usuario no pertenece al grupo"
+msgstr ""
+
+#: ../../../../inc/Auth.class.php:187
+#: ../../../../inc/themes/classic/users.inc:117
+#: ../../../../inc/themes/classic/userspass.inc:2
+#: ../../../../inc/themes/material-blue/users.inc:161
+#: ../../../../inc/themes/material-blue/userspass.inc:2
+msgid "Cambio de Clave"
+msgstr ""
+
+#: ../../../../inc/Auth.class.php:189
+msgid "Se ha solicitado el cambio de su clave de usuario."
+msgstr ""
+
+#: ../../../../inc/Auth.class.php:191
+msgid "Para completar el proceso es necesario que acceda a la siguiente URL:"
+msgstr ""
+
+#: ../../../../inc/Auth.class.php:195
+msgid "Si no ha solicitado esta acción, ignore este mensaje."
+msgstr ""
+
+#: ../../../../inc/Backup.class.php:166
+msgid "Esta operación sólo es posible en entornos Linux"
+msgstr ""
+
+#: ../../../../inc/Backup.class.php:168
+msgid "Error al realizar backup en modo compatibilidad"
+msgstr ""
+
+#: ../../../../inc/Backup.class.php:222
+#: ../../../../inc/XmlExport.class.php:464
+msgid "No es posible crear el directorio de backups"
+msgstr ""
+
+#: ../../../../inc/Backup.class.php:227
+#: ../../../../inc/XmlExport.class.php:469
+msgid "Compruebe los permisos del directorio de backups"
+msgstr ""
+
+#: ../../../../inc/Category.class.php:69
+#: ../../../../inc/Category.class.php:165
+msgid "Nombre de categoría duplicado"
+msgstr ""
+
+#: ../../../../inc/Category.class.php:78
+msgid "Error al crear la categoría"
+msgstr ""
+
+#: ../../../../inc/Category.class.php:83
+#: ../../../../inc/Category.class.php:132
+#: ../../../../inc/Category.class.php:182
+#: ../../../../web/SearchC.class.php:283
+#: ../../../../inc/themes/classic/account.inc:42
+#: ../../../../inc/themes/classic/search.inc:44
+#: ../../../../inc/themes/material-blue/account.inc:50
+#: ../../../../inc/themes/material-blue/search.inc:49
+msgid "Categoría"
+msgstr ""
+
+#: ../../../../inc/Category.class.php:119
+msgid "Categoría en uso por:"
+msgstr ""
+
+#: ../../../../inc/Category.class.php:129
+msgid "Error al eliminar la categoría"
+msgstr ""
+
+#: ../../../../inc/Category.class.php:132
+#: ../../../../web/AccountsMgmtC.class.php:101
+msgid "Eliminar Categoría"
+msgstr ""
+
+#: ../../../../inc/Category.class.php:179
+msgid "Error al actualizar la categoría"
+msgstr ""
+
+#: ../../../../inc/Category.class.php:182
+msgid "Modificar Categoría"
+msgstr ""
+
+#: ../../../../inc/Config.class.php:118 ../../../../inc/Config.class.php:401
+msgid "Modificar configuración"
+msgstr ""
+
+#: ../../../../inc/Config.class.php:276
+msgid "No es posible escribir el archivo de configuración"
+msgstr ""
+
+#: ../../../../inc/Config.class.php:276
+msgid "Compruebe los permisos del directorio \"config\""
+msgstr ""
+
+#: ../../../../inc/Config.class.php:402
+msgid "Parámetro"
+msgstr ""
+
+#: ../../../../inc/Config.class.php:403
+msgid "Valor"
+msgstr ""
+
+#: ../../../../inc/Controller.class.php:165
+msgid "Opción no disponible"
+msgstr ""
+
+#: ../../../../inc/Controller.class.php:165
+#: ../../../../inc/Controller.class.php:166
+#: ../../../../inc/Controller.class.php:167
+#: ../../../../inc/Controller.class.php:168 ../../../../inc/Init.class.php:290
+msgid "Consulte con el administrador"
+msgstr ""
+
+#: ../../../../inc/Controller.class.php:167
+msgid "No tiene permisos para acceder a esta página"
+msgstr ""
+
+#: ../../../../inc/Controller.class.php:168
+msgid "No tiene permisos para realizar esta operación"
+msgstr ""
+
+#: ../../../../inc/Crypt.class.php:236
+msgid "No se puede usar el módulo de encriptación"
+msgstr ""
+
+#: ../../../../inc/Crypt.class.php:247
+msgid "Error al generar datos cifrados"
+msgstr ""
+
+#: ../../../../inc/CryptPKI.class.php:44
+msgid "No es posible generar las claves RSA"
+msgstr ""
+
+#: ../../../../inc/CryptPKI.class.php:110
+#: ../../../../inc/CryptPKI.class.php:141
+msgid "El archivo de clave no existe"
+msgstr ""
+
+#: ../../../../inc/CsvImportBase.class.php:109
+#, php-format
+msgid "El número de campos es incorrecto (%d)"
+msgstr ""
+
+#: ../../../../inc/CsvImportBase.class.php:110
+#, php-format
+msgid "Compruebe el formato del archivo CSV en línea %s"
+msgstr ""
+
+#: ../../../../inc/CsvImportBase.class.php:140
+#: ../../../../inc/CsvImportBase.class.php:145
+#: ../../../../inc/Import.class.php:118 ../../../../inc/Import.class.php:124
+#: ../../../../inc/Migrate.class.php:349
+#: ../../../../inc/XmlImport.class.php:62
+#: ../../../../inc/XmlImport.class.php:63
+#: ../../../../web/ConfigC.class.php:216
+msgid "Importar Cuentas"
+msgstr ""
+
+#: ../../../../inc/CsvImportBase.class.php:141
+msgid "Error importando cuenta"
+msgstr ""
+
+#: ../../../../inc/CsvImportBase.class.php:142
+#, php-format
+msgid "Error procesando línea %s"
+msgstr ""
+
+#: ../../../../inc/CsvImportBase.class.php:145
+#, php-format
+msgid "Cuenta importada: %s"
+msgstr ""
+
+#: ../../../../inc/CustomFieldsBase.class.php:81
+#: ../../../../inc/themes/classic/profiles.inc:98
+#: ../../../../inc/themes/material-blue/profiles.inc:114
+msgid "Categorías"
+msgstr ""
+
+#: ../../../../inc/CustomFieldsBase.class.php:82
+#: ../../../../inc/themes/classic/profiles.inc:103
+#: ../../../../inc/themes/material-blue/profiles.inc:119
+msgid "Clientes"
+msgstr ""
+
+#: ../../../../inc/CustomFieldsBase.class.php:84
+#: ../../../../inc/themes/classic/account.inc:140
+#: ../../../../inc/themes/classic/profiles.inc:89
+#: ../../../../inc/themes/material-blue/account.inc:166
+#: ../../../../inc/themes/material-blue/profiles.inc:104
+msgid "Grupos"
+msgstr ""
+
+#: ../../../../inc/Customer.class.php:50 ../../../../inc/Customer.class.php:95
+msgid "Cliente duplicado"
+msgstr ""
+
+#: ../../../../inc/Customer.class.php:60
+msgid "Error al crear el cliente"
+msgstr ""
+
+#: ../../../../inc/Customer.class.php:112
+msgid "Error al actualizar el cliente"
+msgstr ""
+
+#: ../../../../inc/Customer.class.php:115
+msgid "Actualizar Cliente"
+msgstr ""
+
+#: ../../../../inc/Customer.class.php:150
+msgid "Cliente en uso por:"
+msgstr ""
+
+#: ../../../../inc/Customer.class.php:160
+msgid "Error al eliminar el cliente"
+msgstr ""
+
+#: ../../../../inc/Customer.class.php:163
+#: ../../../../web/AccountsMgmtC.class.php:159
+msgid "Eliminar Cliente"
+msgstr ""
+
+#: ../../../../inc/DBConnectionFactory.class.php:87
+#: ../../../../inc/DBConnectionFactory.class.php:89
+#: ../../../../inc/DBConnectionFactory.class.php:103
+#: ../../../../inc/Installer.class.php:235
+#: ../../../../inc/Migrate.class.php:115
+msgid "No es posible conectar con la BD"
+msgstr ""
+
+#: ../../../../inc/DBConnectionFactory.class.php:87
+#: ../../../../inc/DBConnectionFactory.class.php:89
+#: ../../../../inc/Installer.class.php:236
+#: ../../../../inc/Migrate.class.php:116
+msgid "Compruebe los datos de conexión"
+msgstr ""
+
+#: ../../../../inc/Email.class.php:59 ../../../../inc/UserUtil.class.php:567
+msgid "N/D"
+msgstr ""
+
+#: ../../../../inc/Email.class.php:60 ../../../../web/UsersMgmtC.class.php:392
+#: ../../../../inc/themes/classic/tokens.inc:20
+#: ../../../../inc/themes/material-blue/tokens.inc:20
+msgid "Acción"
+msgstr ""
+
+#: ../../../../inc/Email.class.php:61
+msgid "Realizado por"
+msgstr ""
+
+#: ../../../../inc/Email.class.php:77
+msgid "Enviar Email"
+msgstr ""
+
+#: ../../../../inc/Email.class.php:81
+msgid "Correo enviado"
+msgstr ""
+
+#: ../../../../inc/Email.class.php:83
+msgid "Error al enviar correo"
+msgstr ""
+
+#: ../../../../inc/Email.class.php:87
+msgid "Destinatario"
+msgstr ""
+
+#: ../../../../inc/Email.class.php:90
+msgid "CC"
+msgstr ""
+
+#: ../../../../inc/Email.class.php:146
+msgid "Aviso"
+msgstr ""
+
+#: ../../../../inc/FileImport.class.php:105
+msgid "Archivo no subido correctamente"
+msgstr ""
+
+#: ../../../../inc/FileImport.class.php:105
+msgid "Verifique los permisos del usuario del servidor web"
+msgstr ""
+
+#: ../../../../inc/FileImport.class.php:116
+msgid "Compruebe la extensión del archivo"
+msgstr ""
+
+#: ../../../../inc/FileImport.class.php:132
+msgid "Compruebe la configuración de PHP para subir archivos"
+msgstr ""
+
+#: ../../../../inc/FileImport.class.php:150
+#: ../../../../inc/FileImport.class.php:168
+msgid "Compruebe los permisos del directorio temporal"
+msgstr ""
+
+#: ../../../../inc/Files.class.php:111
+#: ../../../../inc/themes/classic/files.inc:15
+#: ../../../../inc/themes/material-blue/files.inc:16
+msgid "Eliminar Archivo"
+msgstr ""
+
+#: ../../../../inc/Groups.class.php:155
+msgid "Error al añadir los usuarios del grupo"
+msgstr ""
+
+#: ../../../../inc/Groups.class.php:256
+msgid "Error al actualizar los usuarios del grupo"
+msgstr ""
+
+#: ../../../../inc/Groups.class.php:369
+#: ../../../../web/UsersMgmtC.class.php:209
+msgid "Eliminar Grupo"
+msgstr ""
+
+#: ../../../../inc/Groups.class.php:372
+msgid "Error al eliminar los usuarios del grupo"
+msgstr ""
+
+#: ../../../../inc/Import.class.php:109
+msgid "Tipo mime no soportado"
+msgstr ""
+
+#: ../../../../inc/Import.class.php:110
+msgid "Compruebe el formato del archivo"
+msgstr ""
+
+#: ../../../../inc/Import.class.php:124 ../../../../inc/Import.class.php:127
+#: ../../../../inc/Migrate.class.php:92
+msgid "Importación finalizada"
+msgstr ""
+
+#: ../../../../inc/Init.class.php:199
+msgid "Error en la verificación de la base de datos"
+msgstr ""
+
+#: ../../../../inc/Init.class.php:286
+msgid "Sesion"
+msgstr ""
+
+#: ../../../../inc/Init.class.php:286 ../../../../inc/Init.class.php:290
+msgid "La sesión no puede ser inicializada"
+msgstr ""
+
+#: ../../../../inc/Init.class.php:417
+msgid "El directorio \"/config\" no existe"
+msgstr ""
+
+#: ../../../../inc/Init.class.php:422
+msgid "No es posible escribir en el directorio \"config\""
+msgstr ""
+
+#: ../../../../inc/Init.class.php:430
+msgid "Los permisos del directorio \"/config\" son incorrectos"
+msgstr ""
+
+#: ../../../../inc/Init.class.php:430
+msgid "Actual:"
+msgstr ""
+
+#: ../../../../inc/Init.class.php:430
+msgid "Necesario: 750"
+msgstr ""
+
+#: ../../../../inc/Init.class.php:479
+msgid "Aplicación en mantenimiento"
+msgstr ""
+
+#: ../../../../inc/Init.class.php:479
+msgid "En breve estará operativa"
+msgstr ""
+
+#: ../../../../inc/Init.class.php:516
+msgid "Finalizar sesión"
+msgstr ""
+
+#: ../../../../inc/Init.class.php:518
+msgid "Tiempo inactivo"
+msgstr ""
+
+#: ../../../../inc/Init.class.php:519
+msgid "Tiempo total"
+msgstr ""
+
+#: ../../../../inc/Init.class.php:558
+msgid "La aplicación necesita actualizarse"
+msgstr ""
+
+#: ../../../../inc/Init.class.php:558
+#, php-format
+msgid "Si es un administrador pulse en el enlace: %s"
+msgstr ""
+
+#: ../../../../inc/Init.class.php:558
+#: ../../../../inc/themes/classic/upgrade.inc:20
+#: ../../../../inc/themes/material-blue/upgrade.inc:24
+msgid "Actualizar"
+msgstr ""
+
+#: ../../../../inc/Init.class.php:589
+msgid "Actualización"
+msgstr ""
+
+#: ../../../../inc/Init.class.php:590
+msgid "Actualización de versión realizada."
+msgstr ""
+
+#: ../../../../inc/Init.class.php:591
+#: ../../../../inc/themes/classic/info.inc:33
+#: ../../../../inc/themes/material-blue/info.inc:33
+msgid "Versión"
+msgstr ""
+
+#: ../../../../inc/Installer.class.php:127
+msgid "Indicar nombre de usuario admin"
+msgstr ""
+
+#: ../../../../inc/Installer.class.php:128
+msgid "Usuario admin para acceso a la aplicación"
+msgstr ""
+
+#: ../../../../inc/Installer.class.php:132
+msgid "Indicar la clave de admin"
+msgstr ""
+
+#: ../../../../inc/Installer.class.php:133
+msgid "Clave del usuario admin de la aplicación"
+msgstr ""
+
+#: ../../../../inc/Installer.class.php:137
+msgid "Indicar la clave maestra"
+msgstr ""
+
+#: ../../../../inc/Installer.class.php:138
+msgid "Clave maestra para encriptar las claves"
+msgstr ""
+
+#: ../../../../inc/Installer.class.php:142
+msgid "Clave maestra muy corta"
+msgstr ""
+
+#: ../../../../inc/Installer.class.php:143
+msgid "La longitud de la clave maestra ha de ser mayor de 11 caracteres"
+msgstr ""
+
+#: ../../../../inc/Installer.class.php:147
+msgid "Indicar el usuario de la BBDD"
+msgstr ""
+
+#: ../../../../inc/Installer.class.php:148
+msgid "Usuario con permisos de administrador de la Base de Datos"
+msgstr ""
+
+#: ../../../../inc/Installer.class.php:152
+msgid "Indicar la clave de la BBDD"
+msgstr ""
+
+#: ../../../../inc/Installer.class.php:153
+msgid "Clave del usuario administrador de la Base de Datos"
+msgstr ""
+
+#: ../../../../inc/Installer.class.php:157
+msgid "Indicar el nombre de la BBDD"
+msgstr ""
+
+#: ../../../../inc/Installer.class.php:158
+msgid "Nombre para la BBDD de la aplicación pej. syspass"
+msgstr ""
+
+#: ../../../../inc/Installer.class.php:162
+msgid "El nombre de la BBDD no puede contener \".\""
+msgstr ""
+
+#: ../../../../inc/Installer.class.php:163
+msgid "Elimine los puntos del nombre de la Base de Datos"
+msgstr ""
+
+#: ../../../../inc/Installer.class.php:167
+msgid "Indicar el servidor de la BBDD"
+msgstr ""
+
+#: ../../../../inc/Installer.class.php:168
+msgid "Servidor donde se instalará la Base de Datos"
+msgstr ""
+
+#: ../../../../inc/Installer.class.php:313
+msgid "El usuario de MySQL ya existe"
+msgstr ""
+
+#: ../../../../inc/Installer.class.php:314
+msgid "Indique un nuevo usuario o elimine el existente"
+msgstr ""
+
+#: ../../../../inc/Installer.class.php:327
+msgid "La BBDD ya existe"
+msgstr ""
+
+#: ../../../../inc/Installer.class.php:328
+msgid "Indique una nueva Base de Datos o elimine la existente"
+msgstr ""
+
+#: ../../../../inc/Installer.class.php:337
+#: ../../../../inc/Installer.class.php:408
+msgid "Error al crear la BBDD"
+msgstr ""
+
+#: ../../../../inc/Installer.class.php:338
+#: ../../../../inc/Installer.class.php:349
+msgid "Verifique los permisos del usuario de la Base de Datos"
+msgstr ""
+
+#: ../../../../inc/Installer.class.php:348
+msgid "Error al establecer permisos de la BBDD"
+msgstr ""
+
+#: ../../../../inc/Installer.class.php:381
+msgid "El archivo de estructura de la BBDD no existe"
+msgstr ""
+
+#: ../../../../inc/Installer.class.php:382
+msgid "No es posible crear la BBDD de la aplicación. Descárguela de nuevo."
+msgstr ""
+
+#: ../../../../inc/Installer.class.php:390
+msgid "Error al seleccionar la BBDD"
+msgstr ""
+
+#: ../../../../inc/Installer.class.php:391
+msgid ""
+"No es posible usar la Base de Datos para crear la estructura. Compruebe los "
+"permisos y que no exista."
+msgstr ""
+
+#: ../../../../inc/Installer.class.php:409
+msgid "Error al crear la estructura de la Base de Datos."
+msgstr ""
+
+#: ../../../../inc/Installer.class.php:432
+msgid "Error al crear el grupo \"admin\""
+msgstr ""
+
+#: ../../../../inc/Installer.class.php:433
+#: ../../../../inc/Installer.class.php:466
+#: ../../../../inc/Installer.class.php:483
+#: ../../../../inc/Installer.class.php:496
+msgid "Informe al desarrollador"
+msgstr ""
+
+#: ../../../../inc/Installer.class.php:465
+msgid "Error al crear el perfil \"admin\""
+msgstr ""
+
+#: ../../../../inc/Installer.class.php:482
+msgid "Error al crear el usuario \"admin\""
+msgstr ""
+
+#: ../../../../inc/Installer.class.php:495
+msgid "Error al actualizar la clave maestra del usuario \"admin\""
+msgstr ""
+
+#: ../../../../inc/Ldap.class.php:127 ../../../../inc/Ldap.class.php:131
+msgid "No es posible conectar con el servidor de LDAP"
+msgstr ""
+
+#: ../../../../inc/Ldap.class.php:156 ../../../../inc/Ldap.class.php:161
+msgid "Error al conectar (BIND)"
+msgstr ""
+
+#: ../../../../inc/Ldap.class.php:184 ../../../../inc/Ldap.class.php:189
+msgid "Error al buscar objetos en DN base"
+msgstr ""
+
+#: ../../../../inc/Ldap.class.php:217 ../../../../inc/Ldap.class.php:222
+#: ../../../../inc/Ldap.class.php:229 ../../../../inc/Ldap.class.php:233
+#: ../../../../inc/Ldap.class.php:242 ../../../../inc/Ldap.class.php:246
+msgid "Error al buscar RDN de grupo"
+msgstr ""
+
+#: ../../../../inc/Ldap.class.php:295 ../../../../inc/Ldap.class.php:300
+#: ../../../../inc/Ldap.class.php:314 ../../../../inc/Ldap.class.php:318
+msgid "Error al buscar el DN del usuario"
+msgstr ""
+
+#: ../../../../inc/Ldap.class.php:307 ../../../../inc/Ldap.class.php:311
+msgid "Error al localizar el usuario en LDAP"
+msgstr ""
+
+#: ../../../../inc/Ldap.class.php:392 ../../../../inc/Ldap.class.php:397
+#: ../../../../inc/LdapADS.class.php:99 ../../../../inc/LdapADS.class.php:104
+msgid "Error al buscar el grupo de usuarios"
+msgstr ""
+
+#: ../../../../inc/Ldap.class.php:404
+msgid "Usuario verificado en grupo"
+msgstr ""
+
+#: ../../../../inc/LdapADS.class.php:108 ../../../../inc/LdapADS.class.php:113
+msgid "No se encontró el grupo con ese nombre"
+msgstr ""
+
+#: ../../../../inc/Log.class.php:88
+msgid "Vaciar Eventos"
+msgstr ""
+
+#: ../../../../inc/Log.class.php:88
+#: ../../../../inc/themes/classic/eventlog.inc:100
+#: ../../../../inc/themes/material-blue/eventlog.inc:100
+msgid "Vaciar registro de eventos"
+msgstr ""
+
+#: ../../../../inc/Migrate.class.php:52
+msgid "Faltan parámetros"
+msgstr ""
+
+#: ../../../../inc/Migrate.class.php:149
+msgid "La versión no es compatible"
+msgstr ""
+
+#: ../../../../inc/Migrate.class.php:150
+msgid "Actualice a la última versión de phpPMS"
+msgstr ""
+
+#: ../../../../inc/Migrate.class.php:168
+msgid "Error al obtener la configuración"
+msgstr ""
+
+#: ../../../../inc/Migrate.class.php:211 ../../../../inc/Migrate.class.php:224
+msgid "Error al vaciar tabla"
+msgstr ""
+
+#: ../../../../inc/Migrate.class.php:229
+msgid "Usuario actual no es administrador de la aplicación"
+msgstr ""
+
+#: ../../../../inc/Migrate.class.php:274
+msgid "No es posible crear el cliente"
+msgstr ""
+
+#: ../../../../inc/Migrate.class.php:275
+msgid "Contacte con el desarrollador"
+msgstr ""
+
+#: ../../../../inc/Migrate.class.php:279
+msgid "Importar Clientes"
+msgstr ""
+
+#: ../../../../inc/Migrate.class.php:281 ../../../../inc/Migrate.class.php:351
+#: ../../../../inc/Migrate.class.php:452 ../../../../inc/Migrate.class.php:525
+#: ../../../../inc/Migrate.class.php:633 ../../../../inc/Migrate.class.php:698
+#: ../../../../inc/Migrate.class.php:772 ../../../../inc/Migrate.class.php:862
+#: ../../../../inc/Migrate.class.php:933
+msgid "Registros"
+msgstr ""
+
+#: ../../../../inc/Migrate.class.php:303
+msgid "Error al obtener los clientes"
+msgstr ""
+
+#: ../../../../inc/Migrate.class.php:345
+msgid "Error al obtener cuentas"
+msgstr ""
+
+#: ../../../../inc/Migrate.class.php:374
+msgid "Cliente no encontrado"
+msgstr ""
+
+#: ../../../../inc/Migrate.class.php:417
+msgid "Error al migrar cuenta"
+msgstr ""
+
+#: ../../../../inc/Migrate.class.php:446
+msgid "Error al obtener los grupos de cuentas"
+msgstr ""
+
+#: ../../../../inc/Migrate.class.php:450
+msgid "Importar Grupos de Cuentas"
+msgstr ""
+
+#: ../../../../inc/Migrate.class.php:472
+msgid "Error al crear grupos de cuentas"
+msgstr ""
+
+#: ../../../../inc/Migrate.class.php:519
+msgid "Error al obtener el historico de cuentas"
+msgstr ""
+
+#: ../../../../inc/Migrate.class.php:523
+msgid "Importar Histórico de Cuentas"
+msgstr ""
+
+#: ../../../../inc/Migrate.class.php:592
+msgid "Error al crear historico de cuentas"
+msgstr ""
+
+#: ../../../../inc/Migrate.class.php:627
+msgid "Error al obtener los archivos de cuentas"
+msgstr ""
+
+#: ../../../../inc/Migrate.class.php:631
+msgid "Importar Archivos de Cuentas"
+msgstr ""
+
+#: ../../../../inc/Migrate.class.php:663
+msgid "Error al crear archivos de cuentas"
+msgstr ""
+
+#: ../../../../inc/Migrate.class.php:692
+msgid "Error al obtener las categorías de cuentas"
+msgstr ""
+
+#: ../../../../inc/Migrate.class.php:696
+msgid "Importar Categorías de Cuentas"
+msgstr ""
+
+#: ../../../../inc/Migrate.class.php:718
+msgid "Error al crear categorías de cuentas"
+msgstr ""
+
+#: ../../../../inc/Migrate.class.php:766
+msgid "Error al obtener los usuarios"
+msgstr ""
+
+#: ../../../../inc/Migrate.class.php:770
+msgid "Importar Usuarios"
+msgstr ""
+
+#: ../../../../inc/Migrate.class.php:827
+msgid "Error al crear usuarios"
+msgstr ""
+
+#: ../../../../inc/Migrate.class.php:856
+msgid "Error al obtener los grupos de usuarios"
+msgstr ""
+
+#: ../../../../inc/Migrate.class.php:860
+msgid "Importar Grupos de Usuarios"
+msgstr ""
+
+#: ../../../../inc/Migrate.class.php:886
+msgid "Error al crear los grupos de usuarios"
+msgstr ""
+
+#: ../../../../inc/Migrate.class.php:931
+msgid "Importar Configuración"
+msgstr ""
+
+#: ../../../../inc/Profile.class.php:69 ../../../../inc/Profile.class.php:123
+#: ../../../../inc/Profile.class.php:128
+msgid "Migrar Perfiles"
+msgstr ""
+
+#: ../../../../inc/Profile.class.php:69
+msgid "Error al obtener perfiles"
+msgstr ""
+
+#: ../../../../inc/Profile.class.php:126
+msgid "Operación realizada correctamente"
+msgstr ""
+
+#: ../../../../inc/Profile.class.php:128
+msgid "Fallo al realizar la operación"
+msgstr ""
+
+#: ../../../../inc/ProfileBase.class.php:164
+msgid "Datos de perfil incorrectos"
+msgstr ""
+
+#: ../../../../inc/ProfileBase.class.php:550
+#: ../../../../web/UsersMgmtC.class.php:274
+msgid "Eliminar Perfil"
+msgstr ""
+
+#: ../../../../inc/ProfileBase.class.php:593
+msgid "Modificar Perfil"
+msgstr ""
+
+#: ../../../../inc/SyspassImport.class.php:111
+#: ../../../../inc/SyspassImport.class.php:136
+#: ../../../../inc/SyspassImport.class.php:161
+msgid "Formato de XML inválido"
+msgstr ""
+
+#: ../../../../inc/SyspassImport.class.php:111
+msgid "No hay categorías para importar"
+msgstr ""
+
+#: ../../../../inc/SyspassImport.class.php:136
+msgid "No hay clientes para importar"
+msgstr ""
+
+#: ../../../../inc/SyspassImport.class.php:161
+msgid "No hay cuentas para importar"
+msgstr ""
+
+#: ../../../../inc/Upgrade.class.php:51
+msgid "Error al aplicar la actualización de la Base de Datos"
+msgstr ""
+
+#: ../../../../inc/Upgrade.class.php:52 ../../../../inc/Upgrade.class.php:58
+msgid "Compruebe el registro de eventos para más detalles"
+msgstr ""
+
+#: ../../../../inc/Upgrade.class.php:52 ../../../../inc/Upgrade.class.php:58
+#: ../../../../inc/themes/classic/login.inc:32
+#: ../../../../inc/themes/material-blue/2fa.inc:26
+#: ../../../../inc/themes/material-blue/login.inc:64
+msgid "Acceder"
+msgstr ""
+
+#: ../../../../inc/Upgrade.class.php:57
+msgid "Error al aplicar la actualización auxiliar"
+msgstr ""
+
+#: ../../../../inc/Upgrade.class.php:74
+msgid "Actualizar BBDD"
+msgstr ""
+
+#: ../../../../inc/Upgrade.class.php:121
+msgid "No es necesario actualizar la Base de Datos."
+msgstr ""
+
+#: ../../../../inc/Upgrade.class.php:129
+msgid "Error al aplicar la actualización de la Base de Datos."
+msgstr ""
+
+#: ../../../../inc/Upgrade.class.php:138
+msgid "Actualización de la Base de Datos realizada correctamente."
+msgstr ""
+
+#: ../../../../inc/Upgrade.class.php:215
+msgid "Actualizar Configuración"
+msgstr ""
+
+#: ../../../../inc/Upgrade.class.php:215
+msgid "Actualización de la Configuración realizada correctamente."
+msgstr ""
+
+#: ../../../../inc/UserBase.class.php:386
+#: ../../../../inc/UserBase.class.php:530
+msgid "No se pudo realizar la petición de cambio de clave."
+msgstr ""
+
+#: ../../../../inc/UserBase.class.php:525
+msgid "Modificar Usuario"
+msgstr ""
+
+#: ../../../../inc/UserBase.class.php:592
+#: ../../../../web/UsersMgmtC.class.php:150
+msgid "Eliminar Usuario"
+msgstr ""
+
+#: ../../../../inc/UserLdap.class.php:78
+msgid "Activación Cuenta"
+msgstr ""
+
+#: ../../../../inc/UserLdap.class.php:79
+msgid "Su cuenta está pendiente de activación."
+msgstr ""
+
+#: ../../../../inc/UserLdap.class.php:80
+msgid "En breve recibirá un email de confirmación."
+msgstr ""
+
+#: ../../../../inc/UserLdap.class.php:86
+msgid "Nuevo usuario de LDAP"
+msgstr ""
+
+#: ../../../../inc/UserUtil.class.php:705
+msgid "Migrar Grupos"
+msgstr ""
+
+#: ../../../../inc/UserUtil.class.php:705
+msgid "Error al migrar grupo del usuario"
+msgstr ""
+
+#: ../../../../inc/Util.class.php:123
+msgid "Versión de PHP requerida >= "
+msgstr ""
+
+#: ../../../../inc/Util.class.php:124
+msgid ""
+"Actualice la versión de PHP para que la aplicación funcione correctamente"
+msgstr ""
+
+#: ../../../../inc/Util.class.php:160
+#: ../../../../inc/themes/classic/ldap.inc:212
+#: ../../../../inc/themes/material-blue/ldap.inc:238
+msgid "Módulo no disponible"
+msgstr ""
+
+#: ../../../../inc/Util.class.php:161
+msgid "Sin este módulo la aplicación puede no funcionar correctamente."
+msgstr ""
+
+#: ../../../../inc/XmlExport.class.php:124
+msgid "Exportar XML"
+msgstr ""
+
+#: ../../../../inc/XmlExport.class.php:409
+msgid "Error al crear el archivo XML"
+msgstr ""
+
+#: ../../../../inc/XmlImport.class.php:63
+msgid "Formato detectado"
+msgstr ""
+
+#: ../../../../inc/XmlImportBase.class.php:75
+msgid "No es posible procesar el archivo XML"
+msgstr ""
+
+#: ../../../../inc/XmlImportBase.class.php:103
+msgid "Archivo XML no soportado"
+msgstr ""
+
+#: ../../../../inc/XmlImportBase.class.php:104
+msgid "No es posible detectar la aplicación que exportó los datos"
+msgstr ""
+
+#: ../../../../js/strings.js.php:27
+msgid "Error en la consulta"
+msgstr ""
+
+#: ../../../../js/strings.js.php:28
+msgid "Ha ocurrido un error"
+msgstr ""
+
+#: ../../../../js/strings.js.php:29
+#: ../../../../inc/themes/classic/login.inc:52
+#: ../../../../inc/themes/material-blue/login.inc:77
+msgid "Sesión finalizada"
+msgstr ""
+
+#: ../../../../js/strings.js.php:30
+msgid "Borrar la cuenta?"
+msgstr ""
+
+#: ../../../../js/strings.js.php:31
+msgid "Borrar el usuario?"
+msgstr ""
+
+#: ../../../../js/strings.js.php:32
+msgid "Guarde la configuración para que sea efectiva"
+msgstr ""
+
+#: ../../../../js/strings.js.php:33
+msgid "Clave Generada"
+msgstr ""
+
+#: ../../../../js/strings.js.php:34
+msgid "Nivel alto"
+msgstr ""
+
+#: ../../../../js/strings.js.php:35
+msgid "Nivel medio"
+msgstr ""
+
+#: ../../../../js/strings.js.php:36
+msgid "Nivel bajo"
+msgstr ""
+
+#: ../../../../js/strings.js.php:37
+msgid "Nivel muy alto"
+msgstr ""
+
+#: ../../../../js/strings.js.php:38
+msgid "Utilizar al menos 8 caracteres"
+msgstr ""
+
+#: ../../../../js/strings.js.php:39
+msgid "Borrar elemento?"
+msgstr ""
+
+#: ../../../../js/strings.js.php:40
+msgid "Página no encontrada"
+msgstr ""
+
+#: ../../../../js/strings.js.php:41
+msgid "Archivo no soportado para visualizar"
+msgstr ""
+
+#: ../../../../js/strings.js.php:42
+msgid "Eliminar archivo?"
+msgstr ""
+
+#: ../../../../js/strings.js.php:43
+msgid "Su navegador no soporta subir archivos con HTML5"
+msgstr ""
+
+#: ../../../../js/strings.js.php:44
+msgid "Demasiados archivos"
+msgstr ""
+
+#: ../../../../js/strings.js.php:45
+#, php-format
+msgid "No es posible guardar el archivo.%sTamaño máximo:"
+msgstr ""
+
+#: ../../../../js/strings.js.php:46
+msgid "Extensión no permitida"
+msgstr ""
+
+#: ../../../../js/strings.js.php:47
+msgid "Vaciar el registro de eventos?"
+msgstr ""
+
+#: ../../../../js/strings.js.php:48
+msgid "Seleccionar Grupo"
+msgstr ""
+
+#: ../../../../js/strings.js.php:49
+msgid "Seleccionar Usuario"
+msgstr ""
+
+#: ../../../../js/strings.js.php:50
+msgid "Seleccionar Perfil"
+msgstr ""
+
+#: ../../../../js/strings.js.php:51
+msgid "Seleccionar Cliente"
+msgstr ""
+
+#: ../../../../js/strings.js.php:52
+msgid "Seleccionar Categoría"
+msgstr ""
+
+#: ../../../../js/strings.js.php:53
+msgid "Sin resultados"
+msgstr ""
+
+#: ../../../../js/strings.js.php:54
+msgid "Opciones de clave"
+msgstr ""
+
+#: ../../../../js/strings.js.php:55
+msgid "Generar clave aleatoria"
+msgstr ""
+
+#: ../../../../js/strings.js.php:56
+msgid "Complejidad"
+msgstr ""
+
+#: ../../../../js/strings.js.php:57
+msgid "Reset"
+msgstr ""
+
+#: ../../../../js/strings.js.php:58
+#: ../../../../inc/themes/classic/editpass.inc:33
+msgid "Nivel de fortaleza de la clave"
+msgstr ""
+
+#: ../../../../js/strings.js.php:59
+msgid "Mostrar Clave"
+msgstr ""
+
+#: ../../../../js/strings.js.php:60
+msgid "Copiar Usuario"
+msgstr ""
+
+#: ../../../../js/strings.js.php:61
+msgid "Copiar Clave"
+msgstr ""
+
+#: ../../../../js/strings.js.php:62
+msgid "Incluir Números"
+msgstr ""
+
+#: ../../../../js/strings.js.php:63
+msgid "Incluir Mayúsculas"
+msgstr ""
+
+#: ../../../../js/strings.js.php:64
+msgid "Incluir Símbolos"
+msgstr ""
+
+#: ../../../../js/strings.js.php:65
+msgid "Longitud"
+msgstr ""
+
+#: ../../../../js/strings.js.php:66
+msgid "Seleccionar Acción"
+msgstr ""
+
+#: ../../../../js/strings.js.php:67
+#: ../../../../inc/themes/classic/account.inc:133
+#: ../../../../inc/themes/classic/account.inc:164
+#: ../../../../inc/themes/classic/account.inc:449
+#: ../../../../inc/themes/classic/install.inc:99
+msgid "SI"
+msgstr ""
+
+#: ../../../../js/strings.js.php:68
+#: ../../../../inc/themes/classic/account.inc:133
+#: ../../../../inc/themes/classic/account.inc:164
+#: ../../../../inc/themes/classic/account.inc:447
+#: ../../../../inc/themes/classic/encryption.inc:61
+#: ../../../../inc/themes/classic/encryption.inc:80
+#: ../../../../inc/themes/classic/import.inc:70
+#: ../../../../inc/themes/classic/install.inc:99
+#: ../../../../inc/themes/classic/tokens.inc:36
+msgid "NO"
+msgstr ""
+
+#: ../../../../js/strings.js.php:69
+msgid "Aceptar"
+msgstr ""
+
+#: ../../../../js/strings.js.php:70
+msgid "Cancelar"
+msgstr ""
+
+#: ../../../../web/AccountC.class.php:380
+#: ../../../../web/AccountC.class.php:411
+#: ../../../../inc/themes/classic/search.inc:36
+#: ../../../../inc/themes/classic/search.inc:95
+#: ../../../../inc/themes/material-blue/search.inc:41
+#: ../../../../inc/themes/material-blue/search.inc:108
+msgid "Detalles de Cuenta"
+msgstr ""
+
+#: ../../../../web/AccountC.class.php:468
+#: ../../../../inc/themes/classic/account.inc:394
+#: ../../../../inc/themes/material-blue/account.inc:430
+msgid "Modificar Clave de Cuenta"
+msgstr ""
+
+#: ../../../../web/AccountsMgmtC.class.php:79
+#: ../../../../web/AccountsMgmtC.class.php:138
+#: ../../../../web/AccountsMgmtC.class.php:266
+#: ../../../../web/SearchC.class.php:277
+#: ../../../../web/UsersMgmtC.class.php:87
+#: ../../../../web/UsersMgmtC.class.php:187
+#: ../../../../web/UsersMgmtC.class.php:245
+#: ../../../../inc/themes/classic/account.inc:11
+#: ../../../../inc/themes/classic/categories.inc:8
+#: ../../../../inc/themes/classic/customers.inc:8
+#: ../../../../inc/themes/classic/customfields.inc:9
+#: ../../../../inc/themes/classic/editpass.inc:8
+#: ../../../../inc/themes/classic/groups.inc:8
+#: ../../../../inc/themes/classic/info.inc:25
+#: ../../../../inc/themes/classic/profiles.inc:8
+#: ../../../../inc/themes/classic/request.inc:6
+#: ../../../../inc/themes/classic/search.inc:34
+#: ../../../../inc/themes/classic/users.inc:8
+#: ../../../../inc/themes/material-blue/account.inc:15
+#: ../../../../inc/themes/material-blue/categories.inc:8
+#: ../../../../inc/themes/material-blue/customers.inc:8
+#: ../../../../inc/themes/material-blue/customfields.inc:8
+#: ../../../../inc/themes/material-blue/editpass.inc:9
+#: ../../../../inc/themes/material-blue/groups.inc:8
+#: ../../../../inc/themes/material-blue/info.inc:25
+#: ../../../../inc/themes/material-blue/profiles.inc:8
+#: ../../../../inc/themes/material-blue/request.inc:6
+#: ../../../../inc/themes/material-blue/search.inc:39
+#: ../../../../inc/themes/material-blue/users.inc:8
+msgid "Nombre"
+msgstr ""
+
+#: ../../../../web/AccountsMgmtC.class.php:115
+msgid "Gestión de Categorías"
+msgstr ""
+
+#: ../../../../web/AccountsMgmtC.class.php:172
+msgid "Gestión de Clientes"
+msgstr ""
+
+#: ../../../../web/AccountsMgmtC.class.php:266
+#: ../../../../inc/themes/classic/customfields.inc:27
+#: ../../../../inc/themes/material-blue/customfields.inc:30
+msgid "Módulo"
+msgstr ""
+
+#: ../../../../web/AccountsMgmtC.class.php:287
+msgid "Eliminar Campo"
+msgstr ""
+
+#: ../../../../web/AccountsMgmtC.class.php:300
+#: ../../../../inc/themes/classic/profiles.inc:107
+#: ../../../../inc/themes/material-blue/profiles.inc:124
+msgid "Campos Personalizados"
+msgstr ""
+
+#: ../../../../web/ConfigC.class.php:185
+msgid "Último backup"
+msgstr ""
+
+#: ../../../../web/ConfigC.class.php:185
+msgid "No se encontraron backups"
+msgstr ""
+
+#: ../../../../web/ConfigC.class.php:192
+msgid "Última exportación"
+msgstr ""
+
+#: ../../../../web/ConfigC.class.php:192
+msgid "No se encontró archivo de exportación"
+msgstr ""
+
+#: ../../../../web/ConfigC.class.php:237
+msgid "Información"
+msgstr ""
+
+#: ../../../../web/EventlogC.class.php:93
+msgid "Registro de eventos vaciado"
+msgstr ""
+
+#: ../../../../web/EventlogC.class.php:95
+msgid "Error al vaciar el registro de eventos"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:137
+#: ../../../../web/UsersMgmtC.class.php:100
+msgid "Admin Aplicación"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:155
+msgid "Buscar"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:167
+#: ../../../../web/UsersMgmtC.class.php:163
+msgid "Gestión de Usuarios"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:173
+msgid "Gestión de Clientes y Categorías"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:185
+#: ../../../../inc/themes/classic/eventlog.inc:4
+#: ../../../../inc/themes/material-blue/eventlog.inc:3
+msgid "Registro de Eventos"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:205
+msgid "Nuevo estilo visual basado en Material Design Lite by Google"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:206
+msgid "Usuarios en múltiples grupos"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:207
+msgid "Previsualización de imágenes"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:208
+msgid "Mostrar claves como imágenes"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:209
+msgid "Campos personalizados"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:210
+msgid "API de consultas"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:211
+#: ../../../../inc/themes/classic/2fa.inc:9
+#: ../../../../inc/themes/material-blue/2fa.inc:9
+#: ../../../../inc/themes/material-blue/security.inc:11
+msgid "Autentificación en 2 pasos"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:212
+msgid "Complejidad de generador de claves"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:213
+msgid "Consultas especiales"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:214
+msgid "Exportación a XML"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:215
+msgid "Clave maestra temporal"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:216
+msgid "Importación de cuentas desde sysPass, KeePass, KeePassX y CSV"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:217
+msgid "Optimización del código y mayor rapidez de carga"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:218
+msgid "Mejoras de seguridad en XSS e inyección SQL"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:260
+msgid "La version de PHP es vulnerable al ataque NULL Byte (CVE-2006-7243)"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:261
+msgid "Actualice la versión de PHP para usar sysPass de forma segura"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:268
+msgid "No se encuentra el generador de números aleatorios."
+msgstr ""
+
+#: ../../../../web/MainC.class.php:269
+msgid ""
+"Sin esta función un atacante puede utilizar su cuenta al resetear la clave"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:288
+msgid "Instalación finalizada"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:289
+msgid "Pulse aquí para acceder"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:384
+msgid "Descargar nueva versión"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:395
+msgid "Avisos de sysPass"
+msgstr ""
+
+#: ../../../../web/SearchC.class.php:270
+msgid "Ordenar por Cliente"
+msgstr ""
+
+#: ../../../../web/SearchC.class.php:276
+msgid "Ordenar por Nombre"
+msgstr ""
+
+#: ../../../../web/SearchC.class.php:282
+msgid "Ordenar por Categoría"
+msgstr ""
+
+#: ../../../../web/SearchC.class.php:288
+msgid "Ordenar por Usuario"
+msgstr ""
+
+#: ../../../../web/SearchC.class.php:294
+msgid "Ordenar por URL / IP"
+msgstr ""
+
+#: ../../../../web/SearchC.class.php:295
+#: ../../../../inc/themes/classic/account.inc:58
+#: ../../../../inc/themes/classic/editpass.inc:16
+#: ../../../../inc/themes/classic/request.inc:13
+#: ../../../../inc/themes/classic/search.inc:57
+#: ../../../../inc/themes/material-blue/account.inc:66
+#: ../../../../inc/themes/material-blue/editpass.inc:17
+#: ../../../../inc/themes/material-blue/request.inc:15
+#: ../../../../inc/themes/material-blue/search.inc:62
+msgid "URL / IP"
+msgstr ""
+
+#: ../../../../web/UsersMgmtC.class.php:91
+msgid "Propiedades"
+msgstr ""
+
+#: ../../../../web/UsersMgmtC.class.php:104
+msgid "Admin Cuentas"
+msgstr ""
+
+#: ../../../../web/UsersMgmtC.class.php:108
+#: ../../../../inc/themes/classic/users.inc:28
+#: ../../../../inc/themes/material-blue/users.inc:34
+msgid "Usuario de LDAP"
+msgstr ""
+
+#: ../../../../web/UsersMgmtC.class.php:112
+#: ../../../../inc/themes/classic/users.inc:113
+#: ../../../../inc/themes/material-blue/users.inc:151
+#: ../../../../inc/themes/material-blue/users.inc:154
+msgid "Deshabilitado"
+msgstr ""
+
+#: ../../../../web/UsersMgmtC.class.php:129
+msgid "Ver Detalles de Usuario"
+msgstr ""
+
+#: ../../../../web/UsersMgmtC.class.php:143
+msgid "Cambiar Clave de Usuario"
+msgstr ""
+
+#: ../../../../web/UsersMgmtC.class.php:222
+msgid "Gestión de Grupos"
+msgstr ""
+
+#: ../../../../web/UsersMgmtC.class.php:260
+msgid "Ver Detalles de Perfil"
+msgstr ""
+
+#: ../../../../web/UsersMgmtC.class.php:287
+msgid "Gestión de Perfiles"
+msgstr ""
+
+#: ../../../../web/UsersMgmtC.class.php:407
+msgid "Ver token de Autorización"
+msgstr ""
+
+#: ../../../../web/UsersMgmtC.class.php:434
+msgid "Gestión de Autorizaciones API"
+msgstr ""
+
+#: ../../../../web/UsersMgmtC.class.php:456
+msgid "Token de autorización visualizado"
+msgstr ""
+
+#: ../../../../web/UsersMgmtC.class.php:457
+msgid "Autorizaciones"
+msgstr ""
+
+#: ../../../../web/UsersPrefsC.class.php:84
+#: ../../../../inc/themes/classic/mail.inc:63
+#: ../../../../inc/themes/material-blue/mail.inc:86
+msgid "Seguridad"
+msgstr ""
+
+#: ../../../../inc/themes/classic/2fa.inc:14
+#: ../../../../inc/themes/material-blue/2fa.inc:14
+msgid "Introducir código"
+msgstr ""
+
+#: ../../../../inc/themes/classic/2fa.inc:26
+msgid "Verificar"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:14
+#: ../../../../inc/themes/material-blue/account.inc:21
+msgid "Nombre de cuenta"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:35
+msgid "Buscar en desplegable o introducir"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:61
+#: ../../../../inc/themes/material-blue/account.inc:72
+msgid "URL o IP de acceso"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:73
+#: ../../../../inc/themes/material-blue/account.inc:86
+msgid "Usuario de acceso"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:90
+#: ../../../../inc/themes/classic/editpass.inc:31
+#: ../../../../inc/themes/classic/users.inc:83
+#: ../../../../inc/themes/classic/userspass.inc:19
+#: ../../../../inc/themes/classic/userspass.inc:21
+#: ../../../../inc/themes/material-blue/account.inc:105
+#: ../../../../inc/themes/material-blue/editpass.inc:36
+#: ../../../../inc/themes/material-blue/install.inc:64
+#: ../../../../inc/themes/material-blue/users.inc:102
+#: ../../../../inc/themes/material-blue/users.inc:109
+#: ../../../../inc/themes/material-blue/userspass.inc:19
+#: ../../../../inc/themes/material-blue/userspass.inc:25
+msgid "Clave (repetir)"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:97
+#: ../../../../inc/themes/classic/search.inc:73
+#: ../../../../inc/themes/classic/users.inc:91
+#: ../../../../inc/themes/material-blue/account.inc:116
+#: ../../../../inc/themes/material-blue/search.inc:82
+#: ../../../../inc/themes/material-blue/users.inc:116
+msgid "Notas"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:99
+#: ../../../../inc/themes/material-blue/account.inc:121
+#: ../../../../inc/themes/material-blue/users.inc:123
+msgid "Notas sobre la cuenta"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:105
+#: ../../../../inc/themes/material-blue/account.inc:130
+#: ../../../../inc/themes/material-blue/search.inc:75
+msgid "Permisos"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:132
+#: ../../../../inc/themes/classic/account.inc:163
+#: ../../../../inc/themes/material-blue/account.inc:159
+#: ../../../../inc/themes/material-blue/account.inc:191
+msgid "Hablitar edición"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:201
+#: ../../../../inc/themes/material-blue/account.inc:243
+msgid "Soltar archivos aquí (max. 5) o click para seleccionar"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:201
+#: ../../../../inc/themes/classic/config.inc:193
+#: ../../../../inc/themes/material-blue/account.inc:243
+#: ../../../../inc/themes/material-blue/config.inc:272
+msgid "Tamaño máximo de archivo"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:213
+#: ../../../../inc/themes/material-blue/account.inc:255
+msgid "Historial"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:232
+#: ../../../../inc/themes/material-blue/account.inc:275
+msgid "Seleccionar fecha"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:241
+#: ../../../../inc/themes/classic/users.inc:164
+#: ../../../../inc/themes/material-blue/account.inc:284
+#: ../../../../inc/themes/material-blue/users.inc:208
+msgid "Última Modificación"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:243
+#: ../../../../inc/themes/material-blue/account.inc:286
+msgid "por"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:286
+#: ../../../../inc/themes/material-blue/account.inc:333
+msgid "Visitas"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:290
+#: ../../../../inc/themes/material-blue/account.inc:337
+msgid "Fecha Alta"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:294
+#: ../../../../inc/themes/material-blue/account.inc:341
+msgid "Creador"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:298
+#: ../../../../inc/themes/material-blue/account.inc:200
+#: ../../../../inc/themes/material-blue/account.inc:345
+msgid "Grupo Principal"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:303
+#: ../../../../inc/themes/material-blue/account.inc:350
+msgid "Usuarios Secundarios"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:322
+#: ../../../../inc/themes/material-blue/account.inc:369
+msgid "Grupos Secundarios"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:342
+#: ../../../../inc/themes/material-blue/account.inc:389
+msgid "Fecha Edición"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:346
+#: ../../../../inc/themes/material-blue/account.inc:393
+msgid "Editor"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:373
+#: ../../../../inc/themes/material-blue/account.inc:456
+msgid "Restaurar cuenta desde este punto"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:385
+#: ../../../../inc/themes/classic/account.inc:468
+#: ../../../../inc/themes/classic/search.inc:103
+#: ../../../../inc/themes/classic/search.inc:183
+#: ../../../../inc/themes/material-blue/account.inc:423
+#: ../../../../inc/themes/material-blue/account.inc:493
+#: ../../../../inc/themes/material-blue/search.inc:118
+#: ../../../../inc/themes/material-blue/search.inc:197
+msgid "Copiar Clave en Portapapeles"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:401
+#: ../../../../inc/themes/material-blue/account.inc:436
+msgid "Ver Actual"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:406
+#: ../../../../inc/themes/classic/editpass.inc:45
+#: ../../../../inc/themes/classic/passreset.inc:46
+#: ../../../../inc/themes/material-blue/passreset.inc:43
+msgid "Volver"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:413
+#: ../../../../inc/themes/classic/search.inc:115
+#: ../../../../inc/themes/material-blue/account.inc:446
+#: ../../../../inc/themes/material-blue/search.inc:130
+msgid "Modificar Cuenta"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:418
+#: ../../../../inc/themes/classic/search.inc:136
+#: ../../../../inc/themes/material-blue/account.inc:450
+#: ../../../../inc/themes/material-blue/search.inc:150
+msgid "Solicitar Modificación"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:425
+#: ../../../../inc/themes/classic/categories.inc:62
+#: ../../../../inc/themes/classic/config.inc:275
+#: ../../../../inc/themes/classic/customers.inc:62
+#: ../../../../inc/themes/classic/customfields.inc:63
+#: ../../../../inc/themes/classic/editpass.inc:50
+#: ../../../../inc/themes/classic/encryption.inc:102
+#: ../../../../inc/themes/classic/groups.inc:77
+#: ../../../../inc/themes/classic/ldap.inc:229
+#: ../../../../inc/themes/classic/mail.inc:107
+#: ../../../../inc/themes/classic/profiles.inc:168
+#: ../../../../inc/themes/classic/security.inc:57
+#: ../../../../inc/themes/classic/tokens.inc:59
+#: ../../../../inc/themes/classic/users.inc:189
+#: ../../../../inc/themes/classic/userspass.inc:35
+#: ../../../../inc/themes/classic/wiki.inc:110
+#: ../../../../inc/themes/material-blue/account.inc:462
+#: ../../../../inc/themes/material-blue/categories.inc:72
+#: ../../../../inc/themes/material-blue/config.inc:388
+#: ../../../../inc/themes/material-blue/customers.inc:73
+#: ../../../../inc/themes/material-blue/customfields.inc:74
+#: ../../../../inc/themes/material-blue/editpass.inc:60
+#: ../../../../inc/themes/material-blue/groups.inc:88
+#: ../../../../inc/themes/material-blue/ldap.inc:257
+#: ../../../../inc/themes/material-blue/mail.inc:145
+#: ../../../../inc/themes/material-blue/profiles.inc:177
+#: ../../../../inc/themes/material-blue/security.inc:61
+#: ../../../../inc/themes/material-blue/tokens.inc:63
+#: ../../../../inc/themes/material-blue/users.inc:235
+#: ../../../../inc/themes/material-blue/userspass.inc:40
+#: ../../../../inc/themes/material-blue/wiki.inc:124
+msgid "Guardar"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:435
+#: ../../../../inc/themes/material-blue/account.inc:472
+msgid "Seleccionar grupos secundarios"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:439
+#: ../../../../inc/themes/material-blue/account.inc:475
+msgid "Seleccionar usuarios"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:472
+#: ../../../../inc/themes/classic/search.inc:187
+#: ../../../../inc/themes/material-blue/account.inc:497
+#: ../../../../inc/themes/material-blue/search.inc:201
+msgid "Clave Copiada al Portapapeles"
+msgstr ""
+
+#: ../../../../inc/themes/classic/backup.inc:10
+#: ../../../../inc/themes/classic/backup.inc:67
+#: ../../../../inc/themes/material-blue/backup.inc:10
+#: ../../../../inc/themes/material-blue/backup.inc:71
+msgid "Resultado"
+msgstr ""
+
+#: ../../../../inc/themes/classic/backup.inc:18
+#: ../../../../inc/themes/classic/backup.inc:75
+#: ../../../../inc/themes/material-blue/backup.inc:18
+#: ../../../../inc/themes/material-blue/backup.inc:79
+msgid "Descargar Actual"
+msgstr ""
+
+#: ../../../../inc/themes/classic/backup.inc:31
+#: ../../../../inc/themes/material-blue/backup.inc:31
+msgid "No hay backups para descargar"
+msgstr ""
+
+#: ../../../../inc/themes/classic/backup.inc:45
+#: ../../../../inc/themes/classic/backup.inc:49
+#: ../../../../inc/themes/classic/backup.inc:113
+#: ../../../../inc/themes/classic/backup.inc:117
+#: ../../../../inc/themes/classic/encryption.inc:93
+#: ../../../../inc/themes/classic/encryption.inc:97
+#: ../../../../inc/themes/classic/encryption.inc:152
+#: ../../../../inc/themes/classic/encryption.inc:156
+#: ../../../../inc/themes/classic/import.inc:15
+#: ../../../../inc/themes/classic/import.inc:37
+#: ../../../../inc/themes/classic/import.inc:51
+#: ../../../../inc/themes/classic/import.inc:97
+#: ../../../../inc/themes/classic/import.inc:118
+#: ../../../../inc/themes/classic/import.inc:170
+#: ../../../../inc/themes/classic/import.inc:174
+#: ../../../../inc/themes/classic/js-common.inc:13
+#: ../../../../inc/themes/classic/ldap.inc:13
+#: ../../../../inc/themes/classic/ldap.inc:33
+#: ../../../../inc/themes/classic/ldap.inc:58
+#: ../../../../inc/themes/classic/ldap.inc:82
+#: ../../../../inc/themes/classic/ldap.inc:93
+#: ../../../../inc/themes/classic/ldap.inc:117
+#: ../../../../inc/themes/classic/ldap.inc:145
+#: ../../../../inc/themes/classic/ldap.inc:166
+#: ../../../../inc/themes/classic/ldap.inc:187
+#: ../../../../inc/themes/classic/wiki.inc:12
+#: ../../../../inc/themes/classic/wiki.inc:28
+#: ../../../../inc/themes/classic/wiki.inc:55
+#: ../../../../inc/themes/classic/wiki.inc:82
+#: ../../../../inc/themes/material-blue/backup.inc:47
+#: ../../../../inc/themes/material-blue/backup.inc:51
+#: ../../../../inc/themes/material-blue/backup.inc:129
+#: ../../../../inc/themes/material-blue/backup.inc:133
+#: ../../../../inc/themes/material-blue/encryption.inc:107
+#: ../../../../inc/themes/material-blue/encryption.inc:111
+#: ../../../../inc/themes/material-blue/encryption.inc:171
+#: ../../../../inc/themes/material-blue/encryption.inc:175
+#: ../../../../inc/themes/material-blue/import.inc:99
+#: ../../../../inc/themes/material-blue/import.inc:103
+#: ../../../../inc/themes/material-blue/js-common.inc:11
+msgid "Ayuda"
+msgstr ""
+
+#: ../../../../inc/themes/classic/backup.inc:50
+#: ../../../../inc/themes/material-blue/backup.inc:52
+msgid ""
+"La copia de seguridad permite guardar y descargar tanto la base de datos de "
+"sysPass como los archivos de la aplicación y su configuración."
+msgstr ""
+
+#: ../../../../inc/themes/classic/backup.inc:52
+#: ../../../../inc/themes/material-blue/backup.inc:54
+msgid ""
+"Con este método es posible guardar todos los datos de sysPass en otro lugar "
+"o utilizarlos para hacer la aplicación portable."
+msgstr ""
+
+#: ../../../../inc/themes/classic/backup.inc:60
+#: ../../../../inc/themes/classic/backup.inc:126
+#: ../../../../inc/themes/material-blue/backup.inc:64
+msgid "Exportar Cuentas"
+msgstr ""
+
+#: ../../../../inc/themes/classic/backup.inc:84
+#: ../../../../inc/themes/material-blue/backup.inc:88
+msgid "No hay archivos XML para descargar"
+msgstr ""
+
+#: ../../../../inc/themes/classic/backup.inc:90
+#: ../../../../inc/themes/material-blue/backup.inc:94
+#: ../../../../inc/themes/material-blue/backup.inc:101
+msgid "Clave de Exportación"
+msgstr ""
+
+#: ../../../../inc/themes/classic/backup.inc:98
+#: ../../../../inc/themes/material-blue/backup.inc:107
+#: ../../../../inc/themes/material-blue/backup.inc:114
+msgid "Clave de Exportación (repetir)"
+msgstr ""
+
+#: ../../../../inc/themes/classic/backup.inc:118
+#: ../../../../inc/themes/material-blue/backup.inc:134
+msgid ""
+"La exportación de cuentas permite guardar las cuentas y sus datos en formato "
+"XML para posteriormente poder ser importados en otras instancias de sysPass."
+msgstr ""
+
+#: ../../../../inc/themes/classic/backup.inc:120
+#: ../../../../inc/themes/material-blue/backup.inc:136
+msgid "Los elementos exportados son cuentas, clientes y categorías."
+msgstr ""
+
+#: ../../../../inc/themes/classic/backup.inc:122
+#: ../../../../inc/themes/material-blue/backup.inc:138
+msgid ""
+"Las claves de las cuentas son exportadas de forma encriptada para mayor "
+"seguridad."
+msgstr ""
+
+#: ../../../../inc/themes/classic/backup.inc:124
+#: ../../../../inc/themes/material-blue/backup.inc:140
+msgid ""
+"Es posible establecer una clave de exportación para guardar todos los datos "
+"encriptados en el archivo XML."
+msgstr ""
+
+#: ../../../../inc/themes/classic/body.inc:4
+#: ../../../../inc/themes/material-blue/body.inc:4
+msgid "Javascript es necesario para el correcto funcionamiento"
+msgstr ""
+
+#: ../../../../inc/themes/classic/categories.inc:10
+#: ../../../../inc/themes/material-blue/categories.inc:14
+msgid "Nombre de la categoría"
+msgstr ""
+
+#: ../../../../inc/themes/classic/categories.inc:18
+#: ../../../../inc/themes/material-blue/categories.inc:26
+msgid "Descripción de la categoría"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:4
+#: ../../../../inc/themes/material-blue/config.inc:4
+msgid "Sitio"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:10
+#: ../../../../inc/themes/material-blue/config.inc:11
+msgid "Idioma"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:21
+#: ../../../../inc/themes/material-blue/config.inc:22
+msgid "Tema Visual"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:33
+#: ../../../../inc/themes/material-blue/config.inc:34
+#: ../../../../inc/themes/material-blue/config.inc:42
+msgid "Timeout de sesión (s)"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:42
+#: ../../../../inc/themes/material-blue/config.inc:48
+msgid "Habilitar log de eventos"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:46
+#: ../../../../inc/themes/material-blue/config.inc:52
+msgid "Guarda las acciones realizadas en la aplicación."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:58
+#: ../../../../inc/themes/material-blue/config.inc:66
+msgid "Habilitar depuración"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:62
+#: ../../../../inc/themes/material-blue/config.inc:70
+msgid ""
+"Muestra información relativa a la configuración de la aplicación y "
+"rendimiento."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:74
+#: ../../../../inc/themes/material-blue/config.inc:84
+msgid "Modo mantenimiento"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:78
+#: ../../../../inc/themes/material-blue/config.inc:88
+msgid ""
+"En este modo no se puede acceder a la aplicación. Para deshabilitarlo es "
+"necesario modificar el archivo de configuración."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:90
+#: ../../../../inc/themes/material-blue/config.inc:102
+msgid "Comprobar actualizaciones"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:94
+#: ../../../../inc/themes/material-blue/config.inc:106
+msgid ""
+"Comprobar actualizaciones de la aplicación (sólo para los usuarios "
+"administradores)."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:106
+#: ../../../../inc/themes/material-blue/config.inc:120
+msgid "Comprobar notificaciones"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:110
+#: ../../../../inc/themes/material-blue/config.inc:124
+msgid ""
+"Comprobar si existen notificaciones de seguridad o avisos de sysPass (sólo "
+"para los usuarios administradores)."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:122
+#: ../../../../inc/themes/material-blue/config.inc:145
+msgid "Nombre de cuenta como enlace"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:126
+#: ../../../../inc/themes/material-blue/config.inc:149
+msgid ""
+"Habilita el nombre de la cuenta de la búsqueda, como enlace a los detalles "
+"de la cuenta."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:138
+#: ../../../../inc/themes/material-blue/config.inc:230
+msgid "Gestión de archivos"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:142
+#: ../../../../inc/themes/material-blue/config.inc:234
+msgid "Habilita la subida/descarga de archivos para las cuentas."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:154
+#: ../../../../inc/themes/material-blue/config.inc:163
+msgid "Búsquedas globales"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:158
+#: ../../../../inc/themes/material-blue/config.inc:167
+msgid ""
+"Permite que todos los usuarios puedan realizar búsquedas en todas las "
+"cuentas, pero no pueden ver el contenido de las que no tienen permisos."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:170
+#: ../../../../inc/themes/material-blue/config.inc:249
+msgid "Extensiones de archivos permitidas"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:174
+#: ../../../../inc/themes/material-blue/config.inc:253
+msgid "Extensiones permitidas para la subida de archivos."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:178
+#: ../../../../inc/themes/material-blue/config.inc:257
+msgid "Se permite un máximo de 4 caracteres."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:182
+#: ../../../../inc/themes/material-blue/config.inc:261
+msgid ""
+"Escribir extensión y pulsar intro para añadir. Es necesario guardar la "
+"configuración."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:197
+#: ../../../../inc/themes/material-blue/config.inc:276
+msgid "Establece el tamaño máximo para subir archivos."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:201
+#: ../../../../inc/themes/material-blue/config.inc:280
+msgid "El máximo absuluto es de 16MB."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:212
+#: ../../../../inc/themes/material-blue/config.inc:181
+msgid "Resultados por página"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:216
+#: ../../../../inc/themes/material-blue/config.inc:185
+msgid "Número de resultados por página a mostrar, al realizar una búsqueda."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:227
+msgid "Resultados en Tarjetas"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:231
+msgid "Muestra los resultados de búsqueda de cuentas en formato tarjeta."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:243
+#: ../../../../inc/themes/material-blue/config.inc:201
+msgid "Imagen para mostrar clave"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:247
+#: ../../../../inc/themes/material-blue/config.inc:205
+msgid "Generar una imagen con el texto de la clave de la cuenta."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:250
+#: ../../../../inc/themes/material-blue/config.inc:208
+msgid "Util para entornos donde copiar la clave supone un riesgo de seguridad."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:285
+#: ../../../../inc/themes/material-blue/config.inc:398
+msgid "Añadir extensión"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:286
+#: ../../../../inc/themes/material-blue/config.inc:399
+msgid "Eliminar extensión"
+msgstr ""
+
+#: ../../../../inc/themes/classic/customers.inc:10
+#: ../../../../inc/themes/material-blue/customers.inc:14
+msgid "Nombre del cliente"
+msgstr ""
+
+#: ../../../../inc/themes/classic/customers.inc:18
+#: ../../../../inc/themes/material-blue/customers.inc:26
+msgid "Descripción del cliente"
+msgstr ""
+
+#: ../../../../inc/themes/classic/customfields.inc:38
+#: ../../../../inc/themes/material-blue/customfields.inc:41
+msgid "Texto Ayuda"
+msgstr ""
+
+#: ../../../../inc/themes/classic/customfields.inc:44
+#: ../../../../inc/themes/material-blue/customfields.inc:52
+msgid "Obligatorio"
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:8
+#: ../../../../inc/themes/classic/install.inc:46
+#: ../../../../inc/themes/classic/install.inc:50
+#: ../../../../inc/themes/classic/install.inc:51
+#: ../../../../inc/themes/classic/login.inc:15
+#: ../../../../inc/themes/classic/login.inc:27
+#: ../../../../inc/themes/material-blue/encryption.inc:8
+#: ../../../../inc/themes/material-blue/install.inc:49
+#: ../../../../inc/themes/material-blue/install.inc:56
+#: ../../../../inc/themes/material-blue/login.inc:25
+#: ../../../../inc/themes/material-blue/login.inc:48
+msgid "Clave Maestra"
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:16
+#: ../../../../inc/themes/classic/encryption.inc:116
+#: ../../../../inc/themes/material-blue/encryption.inc:16
+#: ../../../../inc/themes/material-blue/encryption.inc:131
+msgid "Último cambio"
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:25
+#: ../../../../inc/themes/material-blue/encryption.inc:25
+#: ../../../../inc/themes/material-blue/encryption.inc:31
+msgid "Clave Maestra actual"
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:34
+#: ../../../../inc/themes/material-blue/encryption.inc:37
+#: ../../../../inc/themes/material-blue/encryption.inc:43
+msgid "Nueva Clave Maestra"
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:43
+#: ../../../../inc/themes/material-blue/encryption.inc:49
+#: ../../../../inc/themes/material-blue/encryption.inc:55
+msgid "Nueva Clave Maestra (repetir)"
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:51
+#: ../../../../inc/themes/material-blue/encryption.inc:61
+msgid "No modificar cuentas"
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:56
+#: ../../../../inc/themes/material-blue/encryption.inc:66
+msgid "Establece una nueva clave maestra sin re-encriptar las cuentas"
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:67
+#: ../../../../inc/themes/material-blue/encryption.inc:79
+msgid "Confirmar cambio"
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:70
+#: ../../../../inc/themes/classic/encryption.inc:73
+#: ../../../../inc/themes/classic/encryption.inc:76
+#: ../../../../inc/themes/classic/import.inc:67
+#: ../../../../inc/themes/classic/security.inc:43
+msgid "Atención"
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:71
+#: ../../../../inc/themes/material-blue/encryption.inc:83
+msgid "Guarde la nueva clave en un lugar seguro."
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:74
+#: ../../../../inc/themes/material-blue/encryption.inc:86
+msgid "Se volverán a encriptar las claves de todas las cuentas."
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:77
+#: ../../../../inc/themes/material-blue/encryption.inc:89
+msgid "Los usuarios deberán de introducir la nueva clave maestra."
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:98
+#: ../../../../inc/themes/material-blue/encryption.inc:112
+msgid ""
+"La clave maestra es utilizada para encriptar las claves de las cuentas de "
+"sysPass para mantenerlas seguras."
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:100
+#: ../../../../inc/themes/material-blue/encryption.inc:114
+msgid ""
+"Es recomendable cambiarla cada cierto tiempo y utilizar una clave compleja "
+"que incluya números, letras y símbolos."
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:108
+#: ../../../../inc/themes/material-blue/encryption.inc:124
+msgid "Clave Temporal"
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:119
+#: ../../../../inc/themes/classic/encryption.inc:130
+#: ../../../../inc/themes/material-blue/encryption.inc:134
+#: ../../../../inc/themes/material-blue/encryption.inc:145
+msgid "No generada"
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:124
+#: ../../../../inc/themes/material-blue/encryption.inc:139
+msgid "Válido hasta"
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:136
+#: ../../../../inc/themes/material-blue/encryption.inc:151
+#: ../../../../inc/themes/material-blue/encryption.inc:157
+msgid "Validez (s)"
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:139
+msgid "Validez"
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:157
+#: ../../../../inc/themes/material-blue/encryption.inc:176
+msgid ""
+"La clave temporal es utilizada como clave maestra para los usuarios que "
+"necesitan introducirla al iniciar la sesión, así no es necesario facilitar "
+"la clave maestra original."
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:159
+#: ../../../../inc/themes/material-blue/encryption.inc:180
+msgid "Generar"
+msgstr ""
+
+#: ../../../../inc/themes/classic/eventlog.inc:8
+#: ../../../../inc/themes/classic/search.inc:3
+#: ../../../../inc/themes/material-blue/eventlog.inc:7
+#: ../../../../inc/themes/material-blue/search.inc:3
+msgid "No se encontraron registros"
+msgstr ""
+
+#: ../../../../inc/themes/classic/eventlog.inc:19
+#: ../../../../inc/themes/material-blue/eventlog.inc:18
+msgid "Fecha / Hora"
+msgstr ""
+
+#: ../../../../inc/themes/classic/eventlog.inc:22
+#: ../../../../inc/themes/material-blue/eventlog.inc:21
+msgid "Evento"
+msgstr ""
+
+#: ../../../../inc/themes/classic/eventlog.inc:28
+#: ../../../../inc/themes/material-blue/eventlog.inc:27
+msgid "IP"
+msgstr ""
+
+#: ../../../../inc/themes/classic/eventlog.inc:86
+#: ../../../../inc/themes/classic/search.inc:159
+#: ../../../../inc/themes/material-blue/eventlog.inc:85
+#: ../../../../inc/themes/material-blue/search.inc:173
+msgid "Primera página"
+msgstr ""
+
+#: ../../../../inc/themes/classic/eventlog.inc:88
+#: ../../../../inc/themes/classic/search.inc:161
+#: ../../../../inc/themes/material-blue/eventlog.inc:87
+#: ../../../../inc/themes/material-blue/search.inc:175
+msgid "Página anterior"
+msgstr ""
+
+#: ../../../../inc/themes/classic/eventlog.inc:93
+#: ../../../../inc/themes/classic/search.inc:166
+#: ../../../../inc/themes/material-blue/eventlog.inc:92
+#: ../../../../inc/themes/material-blue/search.inc:180
+msgid "Página siguiente"
+msgstr ""
+
+#: ../../../../inc/themes/classic/eventlog.inc:95
+#: ../../../../inc/themes/classic/search.inc:168
+#: ../../../../inc/themes/material-blue/eventlog.inc:94
+#: ../../../../inc/themes/material-blue/search.inc:182
+msgid "Última página"
+msgstr ""
+
+#: ../../../../inc/themes/classic/files.inc:22
+#: ../../../../inc/themes/material-blue/files.inc:21
+msgid "Ver Archivo"
+msgstr ""
+
+#: ../../../../inc/themes/classic/footer.inc:6
+#: ../../../../inc/themes/material-blue/footer.inc:27
+msgid "Indica si la conexión utiliza HTTPS."
+msgstr ""
+
+#: ../../../../inc/themes/classic/footer.inc:6
+#: ../../../../inc/themes/material-blue/footer.inc:27
+msgid ""
+"Las claves de formularios enviados se encriptan mediante PKI, el resto de "
+"datos no."
+msgstr ""
+
+#: ../../../../inc/themes/classic/footer.inc:6
+#: ../../../../inc/themes/material-blue/footer.inc:27
+msgid "Seguro"
+msgstr ""
+
+#: ../../../../inc/themes/classic/footer.inc:6
+#: ../../../../inc/themes/material-blue/footer.inc:27
+msgid "Inseguro"
+msgstr ""
+
+#: ../../../../inc/themes/classic/footer.inc:11
+#: ../../../../inc/themes/material-blue/footer.inc:18
+msgid "Ayuda :: FAQ :: Changelog"
+msgstr ""
+
+#: ../../../../inc/themes/classic/footer.inc:14
+#: ../../../../inc/themes/material-blue/footer.inc:23
+msgid "Un proyecto de cygnux.org"
+msgstr ""
+
+#: ../../../../inc/themes/classic/groups.inc:10
+#: ../../../../inc/themes/material-blue/groups.inc:14
+msgid "Nombre del grupo"
+msgstr ""
+
+#: ../../../../inc/themes/classic/groups.inc:18
+#: ../../../../inc/themes/material-blue/groups.inc:26
+msgid "Descripción del grupo"
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:7
+#: ../../../../inc/themes/material-blue/import.inc:121
+msgid "Importar phpPMS"
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:14
+#: ../../../../inc/themes/classic/install.inc:63
+#: ../../../../inc/themes/classic/install.inc:64
+#: ../../../../inc/themes/material-blue/import.inc:128
+#: ../../../../inc/themes/material-blue/import.inc:140
+msgid "Usuario BBDD"
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:18
+#: ../../../../inc/themes/material-blue/import.inc:132
+msgid "Indicar el usuario de conexión a la base de datos de phpPMS."
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:28
+#: ../../../../inc/themes/classic/install.inc:71
+#: ../../../../inc/themes/classic/install.inc:73
+#: ../../../../inc/themes/material-blue/import.inc:146
+#: ../../../../inc/themes/material-blue/import.inc:152
+msgid "Clave BBDD"
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:36
+#: ../../../../inc/themes/classic/install.inc:78
+#: ../../../../inc/themes/classic/install.inc:79
+#: ../../../../inc/themes/material-blue/import.inc:158
+#: ../../../../inc/themes/material-blue/import.inc:170
+msgid "Nombre BBDD"
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:40
+#: ../../../../inc/themes/material-blue/import.inc:162
+msgid "Indicar el nombre de la base de datos de phpPMS."
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:50
+#: ../../../../inc/themes/classic/install.inc:87
+#: ../../../../inc/themes/classic/install.inc:88
+#: ../../../../inc/themes/material-blue/import.inc:176
+#: ../../../../inc/themes/material-blue/import.inc:188
+msgid "Servidor BBDD"
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:54
+#: ../../../../inc/themes/material-blue/import.inc:180
+msgid "Indicar el servidor de la base de datos de phpPMS."
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:64
+#: ../../../../inc/themes/material-blue/import.inc:194
+msgid "Confirmar"
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:68
+#: ../../../../inc/themes/material-blue/import.inc:198
+msgid "Los datos actuales serán borrados (excepto el usuario actual)"
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:83
+msgid "Iniciar"
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:89
+#: ../../../../inc/themes/material-blue/import.inc:7
+msgid "Importar CSV/XML"
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:96
+#: ../../../../inc/themes/material-blue/import.inc:14
+msgid "Usuario por Defecto"
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:100
+#: ../../../../inc/themes/material-blue/import.inc:18
+msgid "Define el usuario por defecto para las cuentas importadas."
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:117
+#: ../../../../inc/themes/classic/ldap.inc:144
+#: ../../../../inc/themes/material-blue/import.inc:36
+#: ../../../../inc/themes/material-blue/ldap.inc:170
+msgid "Grupo por Defecto"
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:121
+#: ../../../../inc/themes/material-blue/import.inc:40
+msgid "Define el grupo por defecto para las cuentas importadas."
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:138
+#: ../../../../inc/themes/material-blue/import.inc:58
+#: ../../../../inc/themes/material-blue/import.inc:64
+msgid "Clave de Importación"
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:146
+#: ../../../../inc/themes/material-blue/import.inc:70
+#: ../../../../inc/themes/material-blue/import.inc:76
+msgid "Delimitador CSV"
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:162
+#: ../../../../inc/themes/material-blue/import.inc:90
+msgid "Soltar archivo aquí o click para seleccionar"
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:175
+msgid ""
+"Permite realizar la importación de Cuentas, Categorías y Clientes desde "
+"arhcivos XML y CSV."
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:177
+#: ../../../../inc/themes/material-blue/import.inc:106
+msgid ""
+"Los formatos de archivos XML soportados son: sysPass, KeePass y KeePassX"
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:179
+#: ../../../../inc/themes/material-blue/import.inc:108
+msgid ""
+"Arrastar el archivo a importar a la zona indicada o hacer click sobre la "
+"flecha."
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:181
+#: ../../../../inc/themes/material-blue/import.inc:110
+msgid ""
+"Para archivos de KeePass o KeePassX, el nombre del cliente será igual a "
+"KeePass o KeePassX y la categoría igual al nombre de los grupos."
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:183
+#: ../../../../inc/themes/material-blue/import.inc:112
+msgid "La importación de archivos CSV se realiza con el siguiente formato:"
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:185
+#: ../../../../inc/themes/material-blue/import.inc:114
+msgid "nombre_de_cuenta;cliente;categoría;url;usuario;clave;notas"
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:187
+#: ../../../../inc/themes/material-blue/import.inc:116
+msgid ""
+"En todos los casos, si el cliente o la categoría no están creados, se crean "
+"automáticamente."
+msgstr ""
+
+#: ../../../../inc/themes/classic/info.inc:4
+#: ../../../../inc/themes/material-blue/info.inc:4
+msgid "Información de la Aplicación"
+msgstr ""
+
+#: ../../../../inc/themes/classic/info.inc:10
+#: ../../../../inc/themes/material-blue/info.inc:10
+msgid "Versión sysPass"
+msgstr ""
+
+#: ../../../../inc/themes/classic/info.inc:18
+#: ../../../../inc/themes/material-blue/info.inc:18
+msgid "Base de Datos"
+msgstr ""
+
+#: ../../../../inc/themes/classic/info.inc:30
+#: ../../../../inc/themes/material-blue/info.inc:30
+msgid "PHP"
+msgstr ""
+
+#: ../../../../inc/themes/classic/info.inc:35
+#: ../../../../inc/themes/material-blue/info.inc:35
+msgid "Extensiones"
+msgstr ""
+
+#: ../../../../inc/themes/classic/info.inc:37
+#: ../../../../inc/themes/material-blue/info.inc:37
+msgid "Memoria Usada"
+msgstr ""
+
+#: ../../../../inc/themes/classic/info.inc:44
+#: ../../../../inc/themes/classic/ldap.inc:32
+#: ../../../../inc/themes/classic/mail.inc:21
+#: ../../../../inc/themes/material-blue/config.inc:316
+#: ../../../../inc/themes/material-blue/info.inc:44
+#: ../../../../inc/themes/material-blue/ldap.inc:35
+#: ../../../../inc/themes/material-blue/ldap.inc:58
+#: ../../../../inc/themes/material-blue/ldap.inc:86
+#: ../../../../inc/themes/material-blue/mail.inc:24
+#: ../../../../inc/themes/material-blue/mail.inc:30
+msgid "Servidor"
+msgstr ""
+
+#: ../../../../inc/themes/classic/install.inc:4
+#: ../../../../inc/themes/material-blue/install.inc:4
+msgid "Instalación "
+msgstr ""
+
+#: ../../../../inc/themes/classic/install.inc:25
+#: ../../../../inc/themes/material-blue/install.inc:25
+msgid "Crear cuenta de admin de sysPass"
+msgstr ""
+
+#: ../../../../inc/themes/classic/install.inc:32
+#: ../../../../inc/themes/material-blue/install.inc:36
+msgid "Login del usuario administrador de sysPass"
+msgstr ""
+
+#: ../../../../inc/themes/classic/install.inc:58
+#: ../../../../inc/themes/material-blue/install.inc:69
+msgid "Configurar BBDD"
+msgstr ""
+
+#: ../../../../inc/themes/classic/install.inc:67
+msgid "Login de usuario con permisos de administrador de MySQL"
+msgstr ""
+
+#: ../../../../inc/themes/classic/install.inc:83
+#: ../../../../inc/themes/material-blue/install.inc:102
+msgid "Nombre de la base de datos para sysPass"
+msgstr ""
+
+#: ../../../../inc/themes/classic/install.inc:91
+msgid "Nombre del servidor de la base de datos de sysPass"
+msgstr ""
+
+#: ../../../../inc/themes/classic/install.inc:97
+#: ../../../../inc/themes/material-blue/install.inc:120
+msgid "Modo Hosting"
+msgstr ""
+
+#: ../../../../inc/themes/classic/install.inc:104
+#: ../../../../inc/themes/material-blue/install.inc:127
+msgid "No crea ni verifica los permisos del usuario sobre la BBDD"
+msgstr ""
+
+#: ../../../../inc/themes/classic/install.inc:108
+#: ../../../../inc/themes/material-blue/install.inc:134
+#: ../../../../inc/themes/material-blue/install.inc:135
+msgid "Instalar"
+msgstr ""
+
+#: ../../../../inc/themes/classic/ldap.inc:12
+#: ../../../../inc/themes/material-blue/ldap.inc:12
+msgid "Habilitar LDAP"
+msgstr ""
+
+#: ../../../../inc/themes/classic/ldap.inc:16
+#: ../../../../inc/themes/material-blue/ldap.inc:16
+msgid "Habilita de autentificación mediante servidor LDAP."
+msgstr ""
+
+#: ../../../../inc/themes/classic/ldap.inc:20
+#: ../../../../inc/themes/material-blue/ldap.inc:20
+msgid "Este método utilizará MySQL en caso de fallo."
+msgstr ""
+
+#: ../../../../inc/themes/classic/ldap.inc:36
+#: ../../../../inc/themes/material-blue/ldap.inc:39
+msgid "Nombre o dirección IP del servidor de LDAP."
+msgstr ""
+
+#: ../../../../inc/themes/classic/ldap.inc:40
+#: ../../../../inc/themes/classic/ldap.inc:65
+#: ../../../../inc/themes/classic/ldap.inc:100
+#: ../../../../inc/themes/classic/ldap.inc:128
+#: ../../../../inc/themes/classic/wiki.inc:89
+#: ../../../../inc/themes/material-blue/ldap.inc:43
+#: ../../../../inc/themes/material-blue/ldap.inc:72
+#: ../../../../inc/themes/material-blue/ldap.inc:119
+#: ../../../../inc/themes/material-blue/ldap.inc:151
+#: ../../../../inc/themes/material-blue/wiki.inc:101
+msgid "Ejemplos:"
+msgstr ""
+
+#: ../../../../inc/themes/classic/ldap.inc:57
+#: ../../../../inc/themes/material-blue/ldap.inc:64
+msgid "Usuario de conexión"
+msgstr ""
+
+#: ../../../../inc/themes/classic/ldap.inc:61
+#: ../../../../inc/themes/material-blue/ldap.inc:68
+msgid "Usuario para conectar con el servicio de LDAP."
+msgstr ""
+
+#: ../../../../inc/themes/classic/ldap.inc:81
+#: ../../../../inc/themes/material-blue/ldap.inc:92
+msgid "Clave de conexión"
+msgstr ""
+
+#: ../../../../inc/themes/classic/ldap.inc:92
+#: ../../../../inc/themes/material-blue/ldap.inc:111
+#: ../../../../inc/themes/material-blue/ldap.inc:133
+msgid "Base de búsqueda"
+msgstr ""
+
+#: ../../../../inc/themes/classic/ldap.inc:96
+#: ../../../../inc/themes/material-blue/ldap.inc:115
+msgid "Base en la que realizar la búsqueda de usuarios de LDAP."
+msgstr ""
+
+#: ../../../../inc/themes/classic/ldap.inc:120
+#: ../../../../inc/themes/material-blue/ldap.inc:143
+msgid ""
+"Grupo de LDAP al que debe de pertenecer el usuario para permitir el acceso."
+msgstr ""
+
+#: ../../../../inc/themes/classic/ldap.inc:124
+#: ../../../../inc/themes/material-blue/ldap.inc:147
+msgid "Este grupo debe de estar ubicado en la base de búsquedas de LDAP."
+msgstr ""
+
+#: ../../../../inc/themes/classic/ldap.inc:148
+#: ../../../../inc/themes/material-blue/ldap.inc:174
+msgid ""
+"Define el grupo de usuarios por defecto para los nuevos usuarios de LDAP."
+msgstr ""
+
+#: ../../../../inc/themes/classic/ldap.inc:165
+#: ../../../../inc/themes/material-blue/ldap.inc:190
+msgid "Perfil por Defecto"
+msgstr ""
+
+#: ../../../../inc/themes/classic/ldap.inc:169
+#: ../../../../inc/themes/material-blue/ldap.inc:194
+msgid ""
+"Define el perfil de usuarios por defecto para los nuevos usuarios de LDAP."
+msgstr ""
+
+#: ../../../../inc/themes/classic/ldap.inc:186
+#: ../../../../inc/themes/material-blue/ldap.inc:210
+msgid "Active Directory"
+msgstr ""
+
+#: ../../../../inc/themes/classic/ldap.inc:190
+#: ../../../../inc/themes/material-blue/ldap.inc:214
+msgid "Habilita el modo de conexión con LDAP de Active Directory."
+msgstr ""
+
+#: ../../../../inc/themes/classic/ldap.inc:202
+#: ../../../../inc/themes/material-blue/ldap.inc:228
+msgid "Comprobar"
+msgstr ""
+
+#: ../../../../inc/themes/classic/ldap.inc:206
+#: ../../../../inc/themes/material-blue/ldap.inc:232
+msgid "Comprobar conexión con LDAP"
+msgstr ""
+
+#: ../../../../inc/themes/classic/login.inc:46
+#: ../../../../inc/themes/material-blue/login.inc:73
+msgid "¿Olvidó su clave?"
+msgstr ""
+
+#: ../../../../inc/themes/classic/login.inc:59
+#: ../../../../inc/themes/material-blue/login.inc:85
+msgid "Aplicación actualizada correctamente"
+msgstr ""
+
+#: ../../../../inc/themes/classic/login.inc:64
+#: ../../../../inc/themes/classic/login.inc:65
+#: ../../../../inc/themes/material-blue/login.inc:90
+#: ../../../../inc/themes/material-blue/login.inc:91
+#: ../../../../inc/themes/material-blue/login.inc:93
+msgid "Nuevas Características"
+msgstr ""
+
+#: ../../../../inc/themes/classic/mail.inc:11
+#: ../../../../inc/themes/material-blue/mail.inc:11
+msgid "Habilitar notificaciones de correo"
+msgstr ""
+
+#: ../../../../inc/themes/classic/mail.inc:29
+#: ../../../../inc/themes/material-blue/config.inc:330
+#: ../../../../inc/themes/material-blue/mail.inc:36
+#: ../../../../inc/themes/material-blue/mail.inc:43
+msgid "Puerto"
+msgstr ""
+
+#: ../../../../inc/themes/classic/mail.inc:37
+#: ../../../../inc/themes/material-blue/mail.inc:49
+msgid "Habilitar Autentificación"
+msgstr ""
+
+#: ../../../../inc/themes/classic/mail.inc:68
+#: ../../../../inc/themes/material-blue/mail.inc:91
+msgid "Deshabilitada"
+msgstr ""
+
+#: ../../../../inc/themes/classic/mail.inc:77
+#: ../../../../inc/themes/material-blue/mail.inc:100
+#: ../../../../inc/themes/material-blue/mail.inc:107
+msgid "Dirección de correo de envío"
+msgstr ""
+
+#: ../../../../inc/themes/classic/mail.inc:85
+#: ../../../../inc/themes/material-blue/mail.inc:113
+msgid "Habilitar peticiones por correo"
+msgstr ""
+
+#: ../../../../inc/themes/classic/mgmttabs.inc:66
+#: ../../../../inc/themes/classic/search.inc:110
+#: ../../../../inc/themes/material-blue/search.inc:125
+msgid "Más Acciones"
+msgstr ""
+
+#: ../../../../inc/themes/classic/passreset.inc:13
+#: ../../../../inc/themes/material-blue/passreset.inc:10
+msgid "Solicitud de Cambio de Clave"
+msgstr ""
+
+#: ../../../../inc/themes/classic/passreset.inc:16
+msgid "Login del Usuario"
+msgstr ""
+
+#: ../../../../inc/themes/classic/passreset.inc:21
+#: ../../../../inc/themes/material-blue/passreset.inc:24
+msgid "Email del Usuario"
+msgstr ""
+
+#: ../../../../inc/themes/classic/passreset.inc:22
+#: ../../../../inc/themes/classic/users.inc:61
+#: ../../../../inc/themes/material-blue/users.inc:71
+msgid "Email"
+msgstr ""
+
+#: ../../../../inc/themes/classic/passreset.inc:27
+msgid "Nueva Clave"
+msgstr ""
+
+#: ../../../../inc/themes/classic/passreset.inc:34
+msgid "Nueva Clave (Verificar)"
+msgstr ""
+
+#: ../../../../inc/themes/classic/passreset.inc:35
+msgid "Clave (Verificar)"
+msgstr ""
+
+#: ../../../../inc/themes/classic/passreset.inc:46
+#: ../../../../inc/themes/material-blue/passreset.inc:42
+msgid "Volver a iniciar sesión"
+msgstr ""
+
+#: ../../../../inc/themes/classic/passreset.inc:48
+#: ../../../../inc/themes/material-blue/2fa.inc:27
+#: ../../../../inc/themes/material-blue/passreset.inc:48
+#: ../../../../inc/themes/material-blue/passreset.inc:49
+msgid "Solicitar"
+msgstr ""
+
+#: ../../../../inc/themes/classic/passreset.inc:49
+msgid "Solicitar cambio de clave"
+msgstr ""
+
+#: ../../../../inc/themes/classic/passreset.inc:51
+#: ../../../../inc/themes/material-blue/passreset.inc:53
+#: ../../../../inc/themes/material-blue/passreset.inc:54
+msgid "Cambiar"
+msgstr ""
+
+#: ../../../../inc/themes/classic/passreset.inc:52
+msgid "Cambiar Clave"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:11
+#: ../../../../inc/themes/material-blue/profiles.inc:14
+msgid "Nombre del perfil"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:19
+#: ../../../../inc/themes/material-blue/profiles.inc:30
+msgid "Ver detalles de cuenta"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:19
+#: ../../../../inc/themes/material-blue/profiles.inc:30
+msgid "Ver"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:23
+#: ../../../../inc/themes/material-blue/profiles.inc:35
+msgid "Ver clave de cuenta"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:28
+#: ../../../../inc/themes/material-blue/profiles.inc:40
+msgid "Ver historial de cuenta"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:32
+#: ../../../../inc/themes/material-blue/profiles.inc:45
+msgid "Editar cuenta"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:32
+#: ../../../../inc/themes/material-blue/profiles.inc:45
+msgid "Editar"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:37
+#: ../../../../inc/themes/material-blue/profiles.inc:50
+msgid "Editar clave de cuenta"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:37
+#: ../../../../inc/themes/material-blue/profiles.inc:50
+msgid "Editar Clave"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:41
+msgid "Añadir nueva cuenta"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:41
+msgid "Añadir"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:46
+msgid "Borrar cuenta"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:46
+msgid "Borrar"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:50
+msgid "Ver archivos de cuenta"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:61
+#: ../../../../inc/themes/material-blue/profiles.inc:72
+msgid "Configuración general"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:65
+msgid "Cambiar clave maestra"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:70
+msgid "Realizar copia de seguridad"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:70
+#: ../../../../inc/themes/material-blue/profiles.inc:82
+msgid "Backup"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:74
+#: ../../../../inc/themes/material-blue/profiles.inc:87
+msgid "Realizar importación de cuentas"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:81
+#: ../../../../inc/themes/material-blue/profiles.inc:93
+msgid "Gestión"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:85
+#: ../../../../inc/themes/material-blue/profiles.inc:99
+msgid "Gestión de usuarios"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:89
+#: ../../../../inc/themes/material-blue/profiles.inc:104
+msgid "Gestión de grupos"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:94
+#: ../../../../inc/themes/material-blue/profiles.inc:109
+msgid "Gestión de perfiles"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:94
+#: ../../../../inc/themes/material-blue/profiles.inc:109
+msgid "Perfiles"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:98
+#: ../../../../inc/themes/material-blue/profiles.inc:114
+msgid "Gestión de categorías"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:103
+#: ../../../../inc/themes/material-blue/profiles.inc:119
+msgid "Gestión de clientes"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:107
+#: ../../../../inc/themes/material-blue/profiles.inc:124
+msgid "Gestión de campos personalizados"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:112
+#: ../../../../inc/themes/material-blue/profiles.inc:129
+msgid "Gestión de autorizaciones API"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:112
+#: ../../../../inc/themes/material-blue/profiles.inc:129
+msgid "Autorizaciones API"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:120
+#: ../../../../inc/themes/material-blue/profiles.inc:135
+msgid "Otros"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:124
+#: ../../../../inc/themes/material-blue/profiles.inc:141
+msgid "Ver log de eventos"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:124
+#: ../../../../inc/themes/material-blue/profiles.inc:141
+msgid "Log de Eventos"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:132
+#: ../../../../inc/themes/material-blue/profiles.inc:148
+msgid "Usado por"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:139
+#: ../../../../inc/themes/material-blue/profiles.inc:155
+msgid "No usado"
+msgstr ""
+
+#: ../../../../inc/themes/classic/request.inc:1
+#: ../../../../inc/themes/material-blue/request.inc:1
+msgid "Solicitar Modificación de Cuenta"
+msgstr ""
+
+#: ../../../../inc/themes/classic/request.inc:22
+#: ../../../../inc/themes/material-blue/request.inc:25
+msgid "Petición"
+msgstr ""
+
+#: ../../../../inc/themes/classic/request.inc:24
+#: ../../../../inc/themes/material-blue/request.inc:29
+msgid "Descripción de la petición"
+msgstr ""
+
+#: ../../../../inc/themes/classic/request.inc:33
+#: ../../../../inc/themes/material-blue/account.inc:440
+#: ../../../../inc/themes/material-blue/editpass.inc:55
+#: ../../../../inc/themes/material-blue/request.inc:42
+msgid "Atrás"
+msgstr ""
+
+#: ../../../../inc/themes/classic/request.inc:38
+#: ../../../../inc/themes/material-blue/request.inc:48
+msgid "Enviar"
+msgstr ""
+
+#: ../../../../inc/themes/classic/search.inc:24
+#: ../../../../inc/themes/material-blue/search.inc:29
+msgid "Buscar en Wiki"
+msgstr ""
+
+#: ../../../../inc/themes/classic/search.inc:60
+#: ../../../../inc/themes/material-blue/search.inc:65
+msgid "Abrir enlace a"
+msgstr ""
+
+#: ../../../../inc/themes/classic/search.inc:78
+#: ../../../../inc/themes/material-blue/search.inc:89
+msgid "Archivos adjuntos"
+msgstr ""
+
+#: ../../../../inc/themes/classic/search.inc:85
+#: ../../../../inc/themes/material-blue/search.inc:98
+msgid "Enlace a Wiki"
+msgstr ""
+
+#: ../../../../inc/themes/classic/search.inc:149
+#: ../../../../inc/themes/material-blue/search.inc:163
+msgid "Filtro ON"
+msgstr ""
+
+#: ../../../../inc/themes/classic/search.inc:153
+#: ../../../../inc/themes/material-blue/search.inc:167
+msgid "Global ON"
+msgstr ""
+
+#: ../../../../inc/themes/classic/searchbox.inc:5
+#: ../../../../inc/themes/material-blue/searchbox.inc:5
+msgid "Limpiar"
+msgstr ""
+
+#: ../../../../inc/themes/classic/searchbox.inc:6
+#: ../../../../inc/themes/material-blue/searchbox.inc:10
+msgid "Texto a buscar"
+msgstr ""
+
+#: ../../../../inc/themes/classic/searchbox.inc:10
+#: ../../../../inc/themes/material-blue/searchbox.inc:15
+msgid "Parámetros especiales:"
+msgstr ""
+
+#: ../../../../inc/themes/classic/searchbox.inc:13
+#: ../../../../inc/themes/material-blue/searchbox.inc:18
+msgid "Buscar cuentas a las que 'login' tenga acceso"
+msgstr ""
+
+#: ../../../../inc/themes/classic/searchbox.inc:14
+#: ../../../../inc/themes/material-blue/searchbox.inc:19
+msgid "Buscar cuentas a las que 'group_name' tenga acceso"
+msgstr ""
+
+#: ../../../../inc/themes/classic/searchbox.inc:15
+#: ../../../../inc/themes/material-blue/searchbox.inc:20
+msgid "Buscar cuentas con archivos con el nombre 'file_name'"
+msgstr ""
+
+#: ../../../../inc/themes/classic/searchbox.inc:19
+#: ../../../../inc/themes/material-blue/searchbox.inc:25
+#: ../../../../inc/themes/material-blue/searchbox.inc:28
+msgid "Búsqueda global"
+msgstr ""
+
+#: ../../../../inc/themes/classic/searchbox.inc:42
+#: ../../../../inc/themes/material-blue/searchbox.inc:54
+msgid "CPP"
+msgstr ""
+
+#: ../../../../inc/themes/classic/searchbox.inc:42
+#: ../../../../inc/themes/material-blue/searchbox.inc:54
+msgid "Cuentas por página"
+msgstr ""
+
+#: ../../../../inc/themes/classic/security.inc:4
+msgid "Autenticación"
+msgstr ""
+
+#: ../../../../inc/themes/classic/security.inc:13
+msgid "Autenticación en 2 pasos"
+msgstr ""
+
+#: ../../../../inc/themes/classic/security.inc:17
+#: ../../../../inc/themes/material-blue/security.inc:15
+msgid ""
+"Habilita la autentificación en 2 pasos que requiere de la introducción de un "
+"token generado por una aplicación como Google Authenticator."
+msgstr ""
+
+#: ../../../../inc/themes/classic/security.inc:21
+#: ../../../../inc/themes/material-blue/security.inc:19
+msgid ""
+"Escanee el código QR proporcionado y a continuación introduzca la clave de 6 "
+"dígitos."
+msgstr ""
+
+#: ../../../../inc/themes/classic/security.inc:29
+#: ../../../../inc/themes/material-blue/security.inc:27
+msgid "Activar"
+msgstr ""
+
+#: ../../../../inc/themes/classic/security.inc:34
+#: ../../../../inc/themes/material-blue/security.inc:33
+msgid "Error al obtener el código QR. Inténtelo de nuevo"
+msgstr ""
+
+#: ../../../../inc/themes/classic/security.inc:39
+#: ../../../../inc/themes/material-blue/security.inc:41
+msgid "Código"
+msgstr ""
+
+#: ../../../../inc/themes/classic/security.inc:44
+#: ../../../../inc/themes/material-blue/security.inc:46
+msgid ""
+"Una vez activada, sólo es posible acceder si se dispone del dispositivo "
+"generador de códigos asociado."
+msgstr ""
+
+#: ../../../../inc/themes/classic/sessionbar.inc:6
+#: ../../../../inc/themes/material-blue/footer.inc:7
+msgid "Cambiar clave de usuario"
+msgstr ""
+
+#: ../../../../inc/themes/classic/sessionbar.inc:9
+msgid "Preferencias"
+msgstr ""
+
+#: ../../../../inc/themes/classic/sessionbar.inc:15
+#: ../../../../inc/themes/material-blue/footer.inc:5
+msgid "Salir"
+msgstr ""
+
+#: ../../../../inc/themes/classic/tokens.inc:34
+#: ../../../../inc/themes/classic/users.inc:98
+#: ../../../../inc/themes/material-blue/tokens.inc:34
+#: ../../../../inc/themes/material-blue/users.inc:132
+msgid "Opciones"
+msgstr ""
+
+#: ../../../../inc/themes/classic/tokens.inc:38
+#: ../../../../inc/themes/material-blue/tokens.inc:37
+#: ../../../../inc/themes/material-blue/tokens.inc:40
+msgid "Regenerar Autorización"
+msgstr ""
+
+#: ../../../../inc/themes/classic/tokens.inc:43
+#: ../../../../inc/themes/material-blue/tokens.inc:46
+msgid "Token"
+msgstr ""
+
+#: ../../../../inc/themes/classic/update.inc:18
+#: ../../../../inc/themes/material-blue/update.inc:20
+msgid "Actualizado"
+msgstr ""
+
+#: ../../../../inc/themes/classic/update.inc:23
+#: ../../../../inc/themes/material-blue/update.inc:22
+msgid "Error al comprobar actualizaciones"
+msgstr ""
+
+#: ../../../../inc/themes/classic/upgrade.inc:8
+#: ../../../../inc/themes/material-blue/upgrade.inc:8
+msgid "Actualización de BBDD"
+msgstr ""
+
+#: ../../../../inc/themes/classic/upgrade.inc:10
+msgid "Introducir Código de Seguridad"
+msgstr ""
+
+#: ../../../../inc/themes/classic/upgrade.inc:11
+#: ../../../../inc/themes/material-blue/upgrade.inc:14
+msgid "Código de Seguridad"
+msgstr ""
+
+#: ../../../../inc/themes/classic/upgrade.inc:21
+#: ../../../../inc/themes/material-blue/upgrade.inc:25
+msgid "Iniciar Actualización"
+msgstr ""
+
+#: ../../../../inc/themes/classic/users.inc:12
+#: ../../../../inc/themes/material-blue/users.inc:15
+msgid "Nombre de usuario completo"
+msgstr ""
+
+#: ../../../../inc/themes/classic/users.inc:25
+#: ../../../../inc/themes/material-blue/users.inc:31
+msgid "Login de inicio de sesión"
+msgstr ""
+
+#: ../../../../inc/themes/classic/users.inc:64
+#: ../../../../inc/themes/material-blue/users.inc:78
+msgid "Dirección de correo"
+msgstr ""
+
+#: ../../../../inc/themes/classic/users.inc:103
+#: ../../../../inc/themes/material-blue/users.inc:136
+msgid "Administrador de la aplicación"
+msgstr ""
+
+#: ../../../../inc/themes/classic/users.inc:103
+#: ../../../../inc/themes/material-blue/users.inc:139
+msgid "Admin. Aplicación"
+msgstr ""
+
+#: ../../../../inc/themes/classic/users.inc:107
+#: ../../../../inc/themes/material-blue/users.inc:143
+msgid "Administrador de cuentas"
+msgstr ""
+
+#: ../../../../inc/themes/classic/users.inc:107
+#: ../../../../inc/themes/material-blue/users.inc:146
+msgid "Admin. Cuentas"
+msgstr ""
+
+#: ../../../../inc/themes/classic/users.inc:117
+#: ../../../../inc/themes/material-blue/users.inc:158
+msgid "Forzar cambio de clave"
+msgstr ""
+
+#: ../../../../inc/themes/classic/users.inc:154
+#: ../../../../inc/themes/material-blue/users.inc:198
+msgid "Entradas"
+msgstr ""
+
+#: ../../../../inc/themes/classic/users.inc:159
+#: ../../../../inc/themes/material-blue/users.inc:203
+msgid "Último Acceso"
+msgstr ""
+
+#: ../../../../inc/themes/classic/users.inc:169
+#: ../../../../inc/themes/material-blue/users.inc:213
+msgid "Fecha Clave Maestra"
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:11
+#: ../../../../inc/themes/material-blue/wiki.inc:11
+msgid "Habilitar enlaces Wiki"
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:15
+#: ../../../../inc/themes/material-blue/wiki.inc:15
+msgid ""
+"Habilita la opción de añadir un enlace a Wiki externa para los resultados de "
+"la búsqueda."
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:27
+#: ../../../../inc/themes/material-blue/wiki.inc:30
+#: ../../../../inc/themes/material-blue/wiki.inc:56
+msgid "URL de búsqueda Wiki"
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:31
+#: ../../../../inc/themes/material-blue/wiki.inc:34
+msgid "URL que utiliza la wiki para realizar una búsqueda de una página."
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:35
+#: ../../../../inc/themes/material-blue/wiki.inc:38
+msgid "Como parámetro se utiliza el nombre del cliente."
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:39
+#: ../../../../inc/themes/classic/wiki.inc:66
+#: ../../../../inc/themes/material-blue/wiki.inc:42
+#: ../../../../inc/themes/material-blue/wiki.inc:74
+msgid "Ejemplo:"
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:54
+#: ../../../../inc/themes/material-blue/wiki.inc:62
+#: ../../../../inc/themes/material-blue/wiki.inc:87
+msgid "URL de página en Wiki"
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:58
+#: ../../../../inc/themes/material-blue/wiki.inc:66
+msgid "URL que utiliza la wiki para acceder a los detalles de una página."
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:62
+#: ../../../../inc/themes/material-blue/wiki.inc:70
+msgid ""
+"El nombre de la cuenta se utiliza como parámetro de la variable de búsqueda "
+"de la Wiki."
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:81
+#: ../../../../inc/themes/material-blue/wiki.inc:93
+msgid "Prefijo para nombre de cuenta"
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:85
+#: ../../../../inc/themes/material-blue/wiki.inc:97
+msgid ""
+"Prefijo para determinar qué cuentas tienen un enlace a una página de la Wiki."
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:121
+#: ../../../../inc/themes/material-blue/wiki.inc:135
+msgid "Añadir filtro"
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:122
+#: ../../../../inc/themes/material-blue/wiki.inc:136
+msgid "Eliminar filtro"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/account.inc:4
+msgid "Histórico"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/account.inc:42
+msgid "Seleccionar o escribir para crear uno nuevo"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/account.inc:110
+msgid "Clave (Repetir)"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/backup.inc:58
+#: ../../../../inc/themes/material-blue/backup.inc:144
+#: ../../../../inc/themes/material-blue/encryption.inc:118
+#: ../../../../inc/themes/material-blue/import.inc:217
+msgid "Realizar"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/config.inc:195
+msgid "Número de resultados por página"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/config.inc:290
+msgid "Tamaño máximo de archivo en bytes"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/config.inc:297
+msgid "Proxy"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/config.inc:303
+msgid "Usar Proxy"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/config.inc:324
+msgid "Servidor proxy"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/config.inc:338
+msgid "Puerto del servidor proxy"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/config.inc:352
+msgid "Usuario del servidor proxy"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/config.inc:366
+msgid "Clave del servidor proxy"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/customfields.inc:14
+msgid "Nombre del campo"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/customfields.inc:47
+msgid "Ayuda del campo"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/footer.inc:11
+msgid "Preferencias de usuario"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/import.inc:104
+msgid ""
+"Permite realizar la importación de Cuentas, Categorías y Clientes desde "
+"archivos XML y CSV."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/install.inc:31
+msgid "Usuario administrador de sysPass"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/install.inc:78
+msgid "Usuario acceso BBDD"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/install.inc:83
+msgid "Usuario con permisos de administrador de MySQL"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/install.inc:90
+msgid "Clave acceso BBDD"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/install.inc:97
+msgid "Nombre BBDD para sysPass"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/install.inc:109
+msgid "Servidor BBDD para sysPass"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/install.inc:114
+msgid "Nombre del servidor para instalar la base de datos de sysPass"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/ldap.inc:96
+msgid "Clave del usuario de conexión a LDAP."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/mail.inc:118
+msgid ""
+"Habilita que los usuarios puedan solicitar modificaciones o acceso a las "
+"cuentas sin permisos."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/profiles.inc:25
+msgid "Crear nueva cuenta"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/profiles.inc:25
+msgid "Crear"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/profiles.inc:55
+msgid "Eliminar cuenta"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/profiles.inc:55
+msgid "Eliminar"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/profiles.inc:60
+msgid "Var archivos de cuenta"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/profiles.inc:77
+msgid "Opciones de encriptación"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/profiles.inc:82
+msgid "Realizar copia de seguridad y exportar"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/security.inc:4
+msgid "Autentificación"
+msgstr ""
diff --git a/inc/locales/ru_RU/LC_MESSAGES/messages.mo b/inc/locales/ru_RU/LC_MESSAGES/messages.mo
index d44178d7..19e1c124 100644
Binary files a/inc/locales/ru_RU/LC_MESSAGES/messages.mo and b/inc/locales/ru_RU/LC_MESSAGES/messages.mo differ
diff --git a/inc/locales/ru_RU/LC_MESSAGES/messages.po b/inc/locales/ru_RU/LC_MESSAGES/messages.po
index 4b4836c1..338f63ab 100644
--- a/inc/locales/ru_RU/LC_MESSAGES/messages.po
+++ b/inc/locales/ru_RU/LC_MESSAGES/messages.po
@@ -8,10 +8,10 @@ msgid ""
msgstr ""
"Project-Id-Version: sysPass\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-07-28 18:42+0100\n"
-"PO-Revision-Date: 2015-07-28 18:43+0100\n"
-"Last-Translator: nuxsmin \n"
-"Language-Team: \n"
+"POT-Creation-Date: 2015-09-23 13:00+0100\n"
+"PO-Revision-Date: 2015-09-23 13:00+0100\n"
+"Last-Translator: nuxsmin \n"
+"Language-Team: \n"
"Language: ru_RU\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -24,1805 +24,1995 @@ msgstr ""
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Poedit-SearchPath-0: ../../../..\n"
-#: ../../../../ajax/ajax_accountSave.php:33
-#: ../../../../ajax/ajax_appMgmtSave.php:34
-#: ../../../../ajax/ajax_backup.php:32 ../../../../ajax/ajax_checkLdap.php:32
-#: ../../../../ajax/ajax_configSave.php:33 ../../../../ajax/ajax_import.php:1
-#: ../../../../ajax/ajax_migrate.php:1
-#: ../../../../ajax/ajax_sendRequest.php:32
-msgid "La sesión no se ha iniciado o ha caducado"
-msgstr "Сессия истекла или ошибка сессии"
-
-#: ../../../../ajax/ajax_accountSave.php:39
-#: ../../../../ajax/ajax_appMgmtSave.php:40
-#: ../../../../ajax/ajax_backup.php:38 ../../../../ajax/ajax_checkLdap.php:38
-#: ../../../../ajax/ajax_configSave.php:39 ../../../../ajax/ajax_files.php:40
-#: ../../../../ajax/ajax_getFiles.php:43 ../../../../ajax/ajax_import.php:1
-#: ../../../../ajax/ajax_migrate.php:1 ../../../../ajax/ajax_passReset.php:34
-#: ../../../../ajax/ajax_search.php:38
-#: ../../../../ajax/ajax_sendRequest.php:38
+#: ../../../../ajax/ajax_2fa.php:35 ../../../../ajax/ajax_accountSave.php:41
+#: ../../../../ajax/ajax_appMgmtSave.php:42
+#: ../../../../ajax/ajax_backup.php:39 ../../../../ajax/ajax_checkLdap.php:41
+#: ../../../../ajax/ajax_configSave.php:41 ../../../../ajax/ajax_files.php:41
+#: ../../../../ajax/ajax_getFiles.php:46 ../../../../ajax/ajax_import.php:49
+#: ../../../../ajax/ajax_migrate.php:45 ../../../../ajax/ajax_passReset.php:37
+#: ../../../../ajax/ajax_search.php:41
+#: ../../../../ajax/ajax_sendRequest.php:41
+#: ../../../../ajax/ajax_userPrefsSave.php:42
msgid "CONSULTA INVÁLIDA"
msgstr "ОШИБОЧНЫЙ ЗАПРОС"
-#: ../../../../ajax/ajax_accountSave.php:67
-#: ../../../../ajax/ajax_accountSave.php:92
+#: ../../../../ajax/ajax_2fa.php:55
+#, fuzzy
+msgid "Código correcto"
+msgstr "Введите код безопасности"
+
+#: ../../../../ajax/ajax_2fa.php:58 ../../../../ajax/ajax_userPrefsSave.php:66
+#, fuzzy
+msgid "Código incorrecto"
+msgstr "Ошибка входа"
+
+#: ../../../../ajax/ajax_accountSave.php:35
+#: ../../../../ajax/ajax_appMgmtSave.php:36
+#: ../../../../ajax/ajax_backup.php:33 ../../../../ajax/ajax_checkLdap.php:35
+#: ../../../../ajax/ajax_configSave.php:35 ../../../../ajax/ajax_import.php:35
+#: ../../../../ajax/ajax_migrate.php:35
+#: ../../../../ajax/ajax_sendRequest.php:35
+#: ../../../../ajax/ajax_userPrefsSave.php:36
+#: ../../../../ajax/ajax_viewpass.php:36
+msgid "La sesión no se ha iniciado o ha caducado"
+msgstr "Сессия истекла или ошибка сессии"
+
+#: ../../../../ajax/ajax_accountSave.php:75
+#: ../../../../ajax/ajax_accountSave.php:90
msgid "Es necesario un nombre de cuenta"
msgstr "Необходимо имя учетной записи"
-#: ../../../../ajax/ajax_accountSave.php:71
+#: ../../../../ajax/ajax_accountSave.php:77
#: ../../../../ajax/ajax_accountSave.php:88
-#: ../../../../ajax/ajax_appMgmtSave.php:327
+#: ../../../../ajax/ajax_appMgmtSave.php:337
msgid "Es necesario un nombre de cliente"
msgstr "Необходимо имя заказчика"
-#: ../../../../ajax/ajax_accountSave.php:75
-#: ../../../../ajax/ajax_accountSave.php:96
+#: ../../../../ajax/ajax_accountSave.php:79
+#: ../../../../ajax/ajax_accountSave.php:92
msgid "Es necesario un usuario"
msgstr "Необходимо имя пользователя"
-#: ../../../../ajax/ajax_accountSave.php:79
-msgid "Es necesario una clave"
+#: ../../../../ajax/ajax_accountSave.php:81
+#: ../../../../ajax/ajax_accountSave.php:103
+#, fuzzy
+msgid "Es necesaria una clave"
msgstr "Необходим пароль"
#: ../../../../ajax/ajax_accountSave.php:83
-#: ../../../../ajax/ajax_accountSave.php:109
-#: ../../../../ajax/ajax_appMgmtSave.php:123
-#: ../../../../ajax/ajax_appMgmtSave.php:149
-msgid "Las claves no coinciden"
-msgstr "Пароль и подтверждение не совпадают"
+#: ../../../../ajax/ajax_accountSave.php:94
+#, fuzzy
+msgid "Es necesario una categoría"
+msgstr "Необходим пароль"
-#: ../../../../ajax/ajax_accountSave.php:100
-#: ../../../../ajax/ajax_accountSave.php:113
+#: ../../../../ajax/ajax_accountSave.php:98
+#: ../../../../ajax/ajax_accountSave.php:107
msgid "Id inválido"
msgstr "Ошибочный ID"
-#: ../../../../ajax/ajax_accountSave.php:105
-#: ../../../../ajax/ajax_appMgmtSave.php:119
-#: ../../../../ajax/ajax_appMgmtSave.php:145
-msgid "La clave no puede estar en blanco"
-msgstr "Пароль не может быть пустым"
-
-#: ../../../../ajax/ajax_accountSave.php:116
-#: ../../../../ajax/ajax_accountSave.php:264
-#: ../../../../ajax/ajax_appMgmtSave.php:179
-#: ../../../../ajax/ajax_appMgmtSave.php:240
-#: ../../../../ajax/ajax_appMgmtSave.php:318
-#: ../../../../ajax/ajax_appMgmtSave.php:369
-#: ../../../../ajax/ajax_appMgmtSave.php:418
-#: ../../../../ajax/ajax_configSave.php:239
+#: ../../../../ajax/ajax_accountSave.php:110
+#: ../../../../ajax/ajax_accountSave.php:263
+#: ../../../../ajax/ajax_appMgmtSave.php:543
+#: ../../../../ajax/ajax_configSave.php:297
+#: ../../../../ajax/ajax_userPrefsSave.php:79 ../../../../api.php:53
msgid "Acción Inválida"
msgstr "Ошибочное действие"
#: ../../../../ajax/ajax_accountSave.php:122
-#: ../../../../inc/import.class.php:240
-msgid "No se puede usar el módulo de encriptación"
-msgstr "Модуль криптографии не может быть загружен"
+#: ../../../../ajax/ajax_appMgmtSave.php:111
+#: ../../../../ajax/ajax_appMgmtSave.php:155
+#: ../../../../ajax/ajax_backup.php:70
+msgid "Las claves no coinciden"
+msgstr "Пароль и подтверждение не совпадают"
-#: ../../../../ajax/ajax_accountSave.php:129
-#: ../../../../inc/import.class.php:247
-msgid "Error al generar datos cifrados"
-msgstr "Ошибка при создании шифрованных данных"
-
-#: ../../../../ajax/ajax_accountSave.php:144
-#: ../../../../ajax/ajax_accountSave.php:193
-msgid "Cliente duplicado"
-msgstr "Такой заказчик уже существует"
-
-#: ../../../../ajax/ajax_accountSave.php:148
-#: ../../../../ajax/ajax_accountSave.php:197
-#: ../../../../ajax/ajax_appMgmtSave.php:341
-msgid "Error al crear el cliente"
-msgstr "Ошибка при создании заказчика"
-
-#: ../../../../ajax/ajax_accountSave.php:172
+#: ../../../../ajax/ajax_accountSave.php:173
msgid "Cuenta creada"
msgstr "Аккаунт создан"
-#: ../../../../ajax/ajax_accountSave.php:174
+#: ../../../../ajax/ajax_accountSave.php:176
msgid "Error al crear la cuenta"
msgstr "Ошибка при создании учетной записи"
-#: ../../../../ajax/ajax_accountSave.php:207
+#: ../../../../ajax/ajax_accountSave.php:211
msgid "Sin cambios"
msgstr "Нет изменений"
-#: ../../../../ajax/ajax_accountSave.php:212
-#: ../../../../inc/account.class.php:369
+#: ../../../../ajax/ajax_accountSave.php:223
msgid "Cuenta actualizada"
msgstr "Информация об учетной записи изменена"
-#: ../../../../ajax/ajax_accountSave.php:214
+#: ../../../../ajax/ajax_accountSave.php:226
msgid "Error al modificar la cuenta"
msgstr "Ошибка при изменении учетной записи"
-#: ../../../../ajax/ajax_accountSave.php:221
+#: ../../../../ajax/ajax_accountSave.php:233
msgid "Cuenta eliminada"
msgstr "Аккаунт удален"
-#: ../../../../ajax/ajax_accountSave.php:223
+#: ../../../../ajax/ajax_accountSave.php:236
msgid "Error al eliminar la cuenta"
msgstr "Ошибка при удалении учетной записи"
-#: ../../../../ajax/ajax_accountSave.php:233
-#: ../../../../ajax/ajax_appMgmtSave.php:156
-#: ../../../../ajax/ajax_passReset.php:79
+#: ../../../../ajax/ajax_accountSave.php:246
+#: ../../../../ajax/ajax_appMgmtSave.php:161
+#: ../../../../ajax/ajax_passReset.php:74
msgid "Clave actualizada"
msgstr "Пароль изменен"
-#: ../../../../ajax/ajax_accountSave.php:235
+#: ../../../../ajax/ajax_accountSave.php:249
msgid "Error al actualizar la clave"
msgstr "Ошибка изменения пароля"
-#: ../../../../ajax/ajax_accountSave.php:258
+#: ../../../../ajax/ajax_accountSave.php:256
msgid "Cuenta restaurada"
msgstr "Аккаунт восстановлен"
-#: ../../../../ajax/ajax_accountSave.php:261
+#: ../../../../ajax/ajax_accountSave.php:259
msgid "Error al restaurar cuenta"
msgstr "Ошибка восстановления учетной записи"
-#: ../../../../ajax/ajax_appMgmtData.php:46
-#: ../../../../ajax/ajax_getContent.php:137
+#: ../../../../ajax/ajax_appMgmtData.php:54
+#, fuzzy
+msgid "Ver Usuario"
+msgstr "Просмотр информации пользователя"
+
+#: ../../../../ajax/ajax_appMgmtData.php:61
+#: ../../../../web/UsersMgmtC.class.php:136
msgid "Editar Usuario"
msgstr "Редактировать пользователя"
-#: ../../../../ajax/ajax_appMgmtData.php:51
-#: ../../../../ajax/ajax_getContent.php:135
-#: ../../../../inc/users.class.php:816
+#: ../../../../ajax/ajax_appMgmtData.php:67
+#: ../../../../inc/UserBase.class.php:381
+#: ../../../../web/UsersMgmtC.class.php:121
msgid "Nuevo Usuario"
msgstr "Создать пользователя"
-#: ../../../../ajax/ajax_appMgmtData.php:56
-#: ../../../../ajax/ajax_getContent.php:168
+#: ../../../../ajax/ajax_appMgmtData.php:73
+#, fuzzy
+msgid "Ver Grupo"
+msgstr "Показать"
+
+#: ../../../../ajax/ajax_appMgmtData.php:80
+#: ../../../../web/UsersMgmtC.class.php:202
msgid "Editar Grupo"
msgstr "Редактировать группу"
-#: ../../../../ajax/ajax_appMgmtData.php:61
-#: ../../../../ajax/ajax_getContent.php:167
-#: ../../../../inc/groups.class.php:154
+#: ../../../../ajax/ajax_appMgmtData.php:86
+#: ../../../../inc/Groups.class.php:152 ../../../../inc/Groups.class.php:253
+#: ../../../../web/UsersMgmtC.class.php:194
msgid "Nuevo Grupo"
msgstr "Создать группу"
-#: ../../../../ajax/ajax_appMgmtData.php:66
-#: ../../../../ajax/ajax_getContent.php:200
+#: ../../../../ajax/ajax_appMgmtData.php:92
+#, fuzzy
+msgid "Ver Perfil"
+msgstr "Показать"
+
+#: ../../../../ajax/ajax_appMgmtData.php:99
+#: ../../../../web/UsersMgmtC.class.php:267
msgid "Editar Perfil"
msgstr "Редактировать профиль"
-#: ../../../../ajax/ajax_appMgmtData.php:71
-#: ../../../../ajax/ajax_getContent.php:199
-#: ../../../../inc/profiles.class.php:206
+#: ../../../../ajax/ajax_appMgmtData.php:105
+#: ../../../../inc/ProfileBase.class.php:512
+#: ../../../../web/UsersMgmtC.class.php:252
msgid "Nuevo Perfil"
msgstr "Создать профиль"
-#: ../../../../ajax/ajax_appMgmtData.php:76
-#: ../../../../ajax/ajax_getContent.php:285
+#: ../../../../ajax/ajax_appMgmtData.php:111
+#, fuzzy
+msgid "Ver Cliente"
+msgstr "Показать"
+
+#: ../../../../ajax/ajax_appMgmtData.php:118
+#: ../../../../web/AccountsMgmtC.class.php:152
msgid "Editar Cliente"
msgstr "Редактировать заказчика"
-#: ../../../../ajax/ajax_appMgmtData.php:81
-#: ../../../../ajax/ajax_getContent.php:284
-#: ../../../../inc/customer.class.php:58
+#: ../../../../ajax/ajax_appMgmtData.php:124
+#: ../../../../inc/Customer.class.php:65
+#: ../../../../web/AccountsMgmtC.class.php:145
msgid "Nuevo Cliente"
msgstr "Новый заказчик"
-#: ../../../../ajax/ajax_appMgmtData.php:86
-#: ../../../../ajax/ajax_getContent.php:253
+#: ../../../../ajax/ajax_appMgmtData.php:130
+#, fuzzy
+msgid "Ver Categoría"
+msgstr "Показать"
+
+#: ../../../../ajax/ajax_appMgmtData.php:137
+#: ../../../../web/AccountsMgmtC.class.php:94
msgid "Editar Categoría"
msgstr "Редактировать категорию"
-#: ../../../../ajax/ajax_appMgmtData.php:91
-#: ../../../../ajax/ajax_getContent.php:252
-#: ../../../../inc/category.class.php:79
+#: ../../../../ajax/ajax_appMgmtData.php:143
+#: ../../../../inc/Category.class.php:83
+#: ../../../../web/AccountsMgmtC.class.php:86
msgid "Nueva Categoría"
msgstr "Создать категорию"
-#: ../../../../ajax/ajax_appMgmtSave.php:76
+#: ../../../../ajax/ajax_appMgmtData.php:149
+#, fuzzy
+msgid "Ver Autorización"
+msgstr "Показать"
+
+#: ../../../../ajax/ajax_appMgmtData.php:156
+#: ../../../../inc/ApiTokens.class.php:189
+#: ../../../../web/UsersMgmtC.class.php:399
+#, fuzzy
+msgid "Nueva Autorización"
+msgstr "Создать категорию"
+
+#: ../../../../ajax/ajax_appMgmtData.php:162
+#: ../../../../web/UsersMgmtC.class.php:414
+#, fuzzy
+msgid "Editar Autorización"
+msgstr "Изменить"
+
+#: ../../../../ajax/ajax_appMgmtData.php:168
+#: ../../../../web/AccountsMgmtC.class.php:273
+#, fuzzy
+msgid "Nuevo Campo"
+msgstr "Создать пользователя"
+
+#: ../../../../ajax/ajax_appMgmtData.php:174
+#: ../../../../web/AccountsMgmtC.class.php:280
+#, fuzzy
+msgid "Editar Campo"
+msgstr "Изменить"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:85
msgid "Es necesario un nombre de usuario"
msgstr "Необходимо имя пользователя"
-#: ../../../../ajax/ajax_appMgmtSave.php:80
+#: ../../../../ajax/ajax_appMgmtSave.php:87
msgid "Es necesario un login"
msgstr "Необходим логин"
-#: ../../../../ajax/ajax_appMgmtSave.php:84
+#: ../../../../ajax/ajax_appMgmtSave.php:89
msgid "Es necesario un perfil"
msgstr "Необходим профиль"
-#: ../../../../ajax/ajax_appMgmtSave.php:88
+#: ../../../../ajax/ajax_appMgmtSave.php:91
msgid "Es necesario un grupo"
msgstr "Необходима группа"
-#: ../../../../ajax/ajax_appMgmtSave.php:92
+#: ../../../../ajax/ajax_appMgmtSave.php:93
msgid "Es necesario un email"
msgstr "Необходим email"
-#: ../../../../ajax/ajax_appMgmtSave.php:110
-msgid "Login de usuario duplicado"
-msgstr "Указанный логин уже существует"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:113
-msgid "Email de usuario duplicado"
-msgstr "Указанный email уже существует"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:127
-msgid "Usuario creado"
-msgstr "Пользователь создан"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:130
-msgid "Error al crear el usuario"
-msgstr "Ошибка при создании пользователя"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:133
-#: ../../../../inc/users.class.php:228
-msgid "Usuario actualizado"
-msgstr "Данные пользователя обновлены"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:136
-msgid "Error al actualizar el usuario"
-msgstr "Ошибка при обновлении данных пользователя"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:141
-#: ../../../../ajax/ajax_appMgmtSave.php:163
-#: ../../../../ajax/ajax_configSave.php:214 ../../../../ajax/ajax_import.php:1
-#: ../../../../ajax/ajax_migrate.php:1
+#: ../../../../ajax/ajax_appMgmtSave.php:95
+#: ../../../../ajax/ajax_appMgmtSave.php:144
+#: ../../../../ajax/ajax_appMgmtSave.php:168
+#: ../../../../ajax/ajax_configSave.php:272
+#: ../../../../ajax/ajax_import.php:39 ../../../../ajax/ajax_migrate.php:39
+#: ../../../../ajax/ajax_userPrefsSave.php:55
msgid "Ey, esto es una DEMO!!"
msgstr "Ey, это DEMO!!"
-#: ../../../../ajax/ajax_appMgmtSave.php:159
-#: ../../../../ajax/ajax_passReset.php:83
+#: ../../../../ajax/ajax_appMgmtSave.php:100
+msgid "Login de usuario duplicado"
+msgstr "Указанный логин уже существует"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:103
+msgid "Email de usuario duplicado"
+msgstr "Указанный email уже существует"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:109
+#: ../../../../ajax/ajax_appMgmtSave.php:146
+msgid "La clave no puede estar en blanco"
+msgstr "Пароль не может быть пустым"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:122
+msgid "Usuario creado"
+msgstr "Пользователь создан"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:125
+msgid "Error al crear el usuario"
+msgstr "Ошибка при создании пользователя"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:135
+#: ../../../../inc/UserUtil.class.php:103
+msgid "Usuario actualizado"
+msgstr "Данные пользователя обновлены"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:138
+msgid "Error al actualizar el usuario"
+msgstr "Ошибка при обновлении данных пользователя"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:164
+#: ../../../../ajax/ajax_passReset.php:78
msgid "Error al modificar la clave"
msgstr "Ошибка изменения пароля"
-#: ../../../../ajax/ajax_appMgmtSave.php:169
+#: ../../../../ajax/ajax_appMgmtSave.php:170
msgid "No es posible eliminar, usuario en uso"
msgstr "Не могу удалить, пользователь работает"
-#: ../../../../ajax/ajax_appMgmtSave.php:173
+#: ../../../../ajax/ajax_appMgmtSave.php:174
msgid "Usuario eliminado"
msgstr "Пользователь удален"
-#: ../../../../ajax/ajax_appMgmtSave.php:176
+#: ../../../../ajax/ajax_appMgmtSave.php:177
msgid "Error al eliminar el usuario"
msgstr "Ошибка удаления пользователя"
-#: ../../../../ajax/ajax_appMgmtSave.php:188
+#: ../../../../ajax/ajax_appMgmtSave.php:192
msgid "Es necesario un nombre de grupo"
msgstr "Необходимо имя группы"
-#: ../../../../ajax/ajax_appMgmtSave.php:196
+#: ../../../../ajax/ajax_appMgmtSave.php:200
msgid "Nombre de grupo duplicado"
msgstr "Указанное имя группы уже существует"
-#: ../../../../ajax/ajax_appMgmtSave.php:201
+#: ../../../../ajax/ajax_appMgmtSave.php:212
msgid "Grupo creado"
msgstr "Группа создана"
-#: ../../../../ajax/ajax_appMgmtSave.php:203
+#: ../../../../ajax/ajax_appMgmtSave.php:214
msgid "Error al crear el grupo"
msgstr "Ошибка при создании группы"
-#: ../../../../ajax/ajax_appMgmtSave.php:207
+#: ../../../../ajax/ajax_appMgmtSave.php:225
msgid "Grupo actualizado"
msgstr "Группа обновлена"
-#: ../../../../ajax/ajax_appMgmtSave.php:210
+#: ../../../../ajax/ajax_appMgmtSave.php:228
msgid "Error al actualizar el grupo"
msgstr "Ошибка при обновлении группы"
-#: ../../../../ajax/ajax_appMgmtSave.php:221
-#: ../../../../ajax/ajax_appMgmtSave.php:298
-#: ../../../../inc/tpl/accounts.php:283 ../../../../inc/tpl/profiles.php:88
+#: ../../../../ajax/ajax_appMgmtSave.php:237
+#: ../../../../ajax/ajax_appMgmtSave.php:314
+#: ../../../../inc/CustomFieldsBase.class.php:83
+#: ../../../../inc/themes/classic/account.inc:109
+#: ../../../../inc/themes/classic/groups.inc:24
+#: ../../../../inc/themes/classic/profiles.inc:85
+#: ../../../../inc/themes/material-blue/account.inc:134
+#: ../../../../inc/themes/material-blue/groups.inc:32
+#: ../../../../inc/themes/material-blue/profiles.inc:99
msgid "Usuarios"
msgstr "Пользователи"
-#: ../../../../ajax/ajax_appMgmtSave.php:225
-#: ../../../../ajax/ajax_appMgmtSave.php:356
-#: ../../../../inc/category.class.php:271 ../../../../inc/tpl/profiles.php:45
+#: ../../../../ajax/ajax_appMgmtSave.php:241
+#: ../../../../inc/Category.class.php:266
+#: ../../../../inc/CustomFieldsBase.class.php:80
+#: ../../../../inc/Customer.class.php:150
+#: ../../../../inc/themes/classic/profiles.inc:15
+#: ../../../../inc/themes/material-blue/config.inc:139
+#: ../../../../inc/themes/material-blue/profiles.inc:19
msgid "Cuentas"
msgstr "Учетные записи"
-#: ../../../../ajax/ajax_appMgmtSave.php:228
-#: ../../../../ajax/ajax_appMgmtSave.php:300
-#: ../../../../ajax/ajax_appMgmtSave.php:358
-#: ../../../../ajax/ajax_appMgmtSave.php:407
+#: ../../../../ajax/ajax_appMgmtSave.php:244
+#: ../../../../ajax/ajax_appMgmtSave.php:316
+#: ../../../../inc/Category.class.php:119
+#: ../../../../inc/Customer.class.php:150
msgid "No es posible eliminar"
msgstr "Невозможно удалить"
-#: ../../../../ajax/ajax_appMgmtSave.php:228
+#: ../../../../ajax/ajax_appMgmtSave.php:244
msgid "Grupo en uso por:"
msgstr "Группа используется:"
-#: ../../../../ajax/ajax_appMgmtSave.php:233
+#: ../../../../ajax/ajax_appMgmtSave.php:249
msgid "Grupo eliminado"
msgstr "Группа удалена"
-#: ../../../../ajax/ajax_appMgmtSave.php:236
+#: ../../../../ajax/ajax_appMgmtSave.php:252
msgid "Error al eliminar el grupo"
msgstr "Ошибка при удалении группы"
-#: ../../../../ajax/ajax_appMgmtSave.php:270
+#: ../../../../ajax/ajax_appMgmtSave.php:291
msgid "Es necesario un nombre de perfil"
msgstr "Необходимо имя профиля"
-#: ../../../../ajax/ajax_appMgmtSave.php:276
+#: ../../../../ajax/ajax_appMgmtSave.php:293
msgid "Nombre de perfil duplicado"
msgstr "Профиль с таким именем уже существует"
-#: ../../../../ajax/ajax_appMgmtSave.php:281
+#: ../../../../ajax/ajax_appMgmtSave.php:298
msgid "Perfil creado"
msgstr "Профиль создан"
-#: ../../../../ajax/ajax_appMgmtSave.php:284
+#: ../../../../ajax/ajax_appMgmtSave.php:301
msgid "Error al crear el perfil"
msgstr "Ошибка при создании профиля"
-#: ../../../../ajax/ajax_appMgmtSave.php:287
+#: ../../../../ajax/ajax_appMgmtSave.php:304
msgid "Perfil actualizado"
msgstr "Профиль изменен"
-#: ../../../../ajax/ajax_appMgmtSave.php:290
+#: ../../../../ajax/ajax_appMgmtSave.php:307
msgid "Error al actualizar el perfil"
msgstr "Ошибка при изменении профиля"
-#: ../../../../ajax/ajax_appMgmtSave.php:300
+#: ../../../../ajax/ajax_appMgmtSave.php:316
msgid "Perfil en uso por:"
msgstr "Профиль используется:"
-#: ../../../../ajax/ajax_appMgmtSave.php:305
-#: ../../../../ajax/ajax_getContent.php:201
-msgid "Eliminar Perfil"
-msgstr "Удалить профиль"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:306
-#: ../../../../ajax/ajax_doLogin.php:157
-#: ../../../../ajax/ajax_getContent.php:114
-#: ../../../../inc/profiles.class.php:207
-#: ../../../../inc/profiles.class.php:259 ../../../../inc/tpl/users.php:102
-msgid "Perfil"
-msgstr "Профиль"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:311
+#: ../../../../ajax/ajax_appMgmtSave.php:319
msgid "Perfil eliminado"
msgstr "Профиль удален"
-#: ../../../../ajax/ajax_appMgmtSave.php:314
+#: ../../../../ajax/ajax_appMgmtSave.php:322
msgid "Error al eliminar el perfil"
msgstr "Ошибка при удалении профиля"
-#: ../../../../ajax/ajax_appMgmtSave.php:334
-msgid "Nombre de cliente duplicado"
-msgstr "Заказчик с таким именем уже существует"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:339
+#: ../../../../ajax/ajax_appMgmtSave.php:357
msgid "Cliente creado"
msgstr "Заказчик добавлен"
-#: ../../../../ajax/ajax_appMgmtSave.php:345
+#: ../../../../ajax/ajax_appMgmtSave.php:372
msgid "Cliente actualizado"
msgstr "Информация о заказчике обновлена"
-#: ../../../../ajax/ajax_appMgmtSave.php:348
-msgid "Error al actualizar el cliente"
-msgstr "Ошибка при изменении информации о заказчике"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:358
-msgid "Cliente en uso por:"
-msgstr "Заказчик используется:"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:362
+#: ../../../../ajax/ajax_appMgmtSave.php:382
msgid "Cliente eliminado"
msgstr "Заказчик удален"
-#: ../../../../ajax/ajax_appMgmtSave.php:365
-msgid "Error al eliminar el cliente"
-msgstr "Ошибка при удалении заказчика"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:378
+#: ../../../../ajax/ajax_appMgmtSave.php:396
msgid "Es necesario un nombre de categoría"
msgstr "Необходимо имя категории"
-#: ../../../../ajax/ajax_appMgmtSave.php:385
-msgid "Nombre de categoría duplicado"
-msgstr "Категория с таким именем уже существует"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:390
+#: ../../../../ajax/ajax_appMgmtSave.php:416
msgid "Categoría creada"
msgstr "Категория создана"
-#: ../../../../ajax/ajax_appMgmtSave.php:392
-msgid "Error al crear la categoría"
-msgstr "Ошибка при создании категории"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:396
+#: ../../../../ajax/ajax_appMgmtSave.php:431
msgid "Categoría actualizada"
msgstr "Информация о категории изменена"
-#: ../../../../ajax/ajax_appMgmtSave.php:399
-msgid "Error al actualizar la categoría"
-msgstr "Ошибка изменения информации о категории"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:407
-msgid "Categoría en uso por:"
-msgstr "Категория используется:"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:411
+#: ../../../../ajax/ajax_appMgmtSave.php:442
msgid "Categoría eliminada"
msgstr "Категория удалена"
-#: ../../../../ajax/ajax_appMgmtSave.php:414
-msgid "Error al eliminar la categoría"
-msgstr "Ошибка при удалении категории"
+#: ../../../../ajax/ajax_appMgmtSave.php:458
+#, fuzzy
+msgid "Usuario o acción no indicado"
+msgstr "Пользователь / пароль не введены"
-#: ../../../../ajax/ajax_backup.php:49
-msgid "Error al realizar el backup"
-msgstr "Ошибка при выполнении резервной копии"
+#: ../../../../ajax/ajax_appMgmtSave.php:468
+#, fuzzy
+msgid "Autorización creada"
+msgstr "Аккаунт создан"
-#: ../../../../ajax/ajax_backup.php:49 ../../../../ajax/ajax_checkLdap.php:54
-#: ../../../../inc/import.class.php:90 ../../../../inc/migrate.class.php:118
-msgid "Revise el registro de eventos para más detalles"
-msgstr "Пожалуйста, за деталями обратиться в журнал событий"
+#: ../../../../ajax/ajax_appMgmtSave.php:476
+#, fuzzy
+msgid "Autorización actualizada"
+msgstr "Информация об учетной записи изменена"
-#: ../../../../ajax/ajax_backup.php:52 ../../../../inc/tpl/backup.php:82
+#: ../../../../ajax/ajax_appMgmtSave.php:486
+#, fuzzy
+msgid "Autorización eliminada"
+msgstr "Аккаунт удален"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:503
+#, fuzzy
+msgid "Nombre del campo no indicado"
+msgstr "Имя заказчика"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:505
+#, fuzzy
+msgid "Tipo del campo no indicado"
+msgstr "Данный тип файлов запрещен"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:507
+msgid "Módulo del campo no indicado"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:521
+#, fuzzy
+msgid "Campo creado"
+msgstr "Пользователь создан"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:530
+#, fuzzy
+msgid "Campo actualizado"
+msgstr "Обновлено"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:540
+#, fuzzy
+msgid "Campo eliminado"
+msgstr "Пользователь удален"
+
+#: ../../../../ajax/ajax_backup.php:52 ../../../../ajax/ajax_backup.php:57
+#: ../../../../inc/themes/classic/backup.inc:54
msgid "Realizar Backup"
msgstr "Выполнить резервное копирование"
-#: ../../../../ajax/ajax_backup.php:53
+#: ../../../../ajax/ajax_backup.php:52 ../../../../ajax/ajax_backup.php:54
+msgid "Error al realizar el backup"
+msgstr "Ошибка при выполнении резервной копии"
+
+#: ../../../../ajax/ajax_backup.php:54 ../../../../ajax/ajax_backup.php:76
+#: ../../../../ajax/ajax_checkLdap.php:57 ../../../../inc/Import.class.php:128
+#: ../../../../inc/Migrate.class.php:93
+msgid "Revise el registro de eventos para más detalles"
+msgstr "Пожалуйста, за деталями обратиться в журнал событий"
+
+#: ../../../../ajax/ajax_backup.php:57
msgid "Copia de la aplicación y base de datos realizada correctamente"
msgstr "Резервная копия программы и базы успешно создана"
-#: ../../../../ajax/ajax_backup.php:58
+#: ../../../../ajax/ajax_backup.php:59
msgid "Proceso de backup finalizado"
msgstr "Процесс резервного копирования закончен."
-#: ../../../../ajax/ajax_checkLdap.php:48 ../../../../inc/ldap.class.php:246
+#: ../../../../ajax/ajax_backup.php:66
+#: ../../../../ajax/ajax_configSave.php:244
+#: ../../../../ajax/ajax_doLogin.php:53 ../../../../ajax/ajax_import.php:56
+#, fuzzy
+msgid "Error en clave RSA"
+msgstr "Ошибка запроса"
+
+#: ../../../../ajax/ajax_backup.php:74 ../../../../ajax/ajax_backup.php:79
+#, fuzzy
+msgid "Realizar Exportación"
+msgstr "Выполнить резервное копирование"
+
+#: ../../../../ajax/ajax_backup.php:74
+#, fuzzy
+msgid "Error al realizar la exportación de cuentas"
+msgstr "Ошибка создания файлов учетных записей"
+
+#: ../../../../ajax/ajax_backup.php:76
+#, fuzzy
+msgid "Error al realizar la exportación"
+msgstr "Ошибка при выполнении резервной копии"
+
+#: ../../../../ajax/ajax_backup.php:79
+#, fuzzy
+msgid "Exportación de cuentas realizada correctamente"
+msgstr "Конфигурация была успешно обновлена."
+
+#: ../../../../ajax/ajax_backup.php:81
+#, fuzzy
+msgid "Proceso de exportación finalizado"
+msgstr "Процесс резервного копирования закончен."
+
+#: ../../../../ajax/ajax_checkLdap.php:51 ../../../../inc/Ldap.class.php:265
msgid "Los parámetros de LDAP no están configurados"
msgstr "Параметры LDAP не указаны"
-#: ../../../../ajax/ajax_checkLdap.php:54
+#: ../../../../ajax/ajax_checkLdap.php:57
msgid "Error de conexión a LDAP"
msgstr "Ошибка подключения к LDAP"
-#: ../../../../ajax/ajax_checkLdap.php:56
+#: ../../../../ajax/ajax_checkLdap.php:59
msgid "Conexión a LDAP correcta"
msgstr "Подключение к LDAP успешно"
-#: ../../../../ajax/ajax_checkLdap.php:56
+#: ../../../../ajax/ajax_checkLdap.php:59
msgid "Objetos encontrados"
msgstr "Найдено объектов"
-#: ../../../../ajax/ajax_checkUpds.php:41
-msgid "Descargar nueva versión"
-msgstr "Скачать новую версию"
-
-#: ../../../../ajax/ajax_checkUpds.php:44
-msgid "Actualizado"
-msgstr "Обновлено"
-
-#: ../../../../ajax/ajax_configSave.php:96
-msgid "Faltan parámetros de Wiki"
-msgstr "Пропущены настройки Wiki"
-
-#: ../../../../ajax/ajax_configSave.php:107
-msgid "Faltan parámetros de LDAP"
-msgstr "Пропущены настройки LDAP"
-
-#: ../../../../ajax/ajax_configSave.php:123
-msgid "Faltan parámetros de Correo"
-msgstr "Пропущены настройки почты"
-
-#: ../../../../ajax/ajax_configSave.php:144
-msgid "El tamaño máximo de archivo es de 16MB"
-msgstr "Максимальный размер файла 16MB"
-
-#: ../../../../ajax/ajax_configSave.php:161
+#: ../../../../ajax/ajax_configSave.php:55
msgid "Modificar Configuración"
msgstr "Изменить конфигурацию"
-#: ../../../../ajax/ajax_configSave.php:169
+#: ../../../../ajax/ajax_configSave.php:100
+#, fuzzy
+msgid "El tamaño máximo por archivo es de 16MB"
+msgstr "Максимальный размер файла 16MB"
+
+#: ../../../../ajax/ajax_configSave.php:113
+#, fuzzy
+msgid "Faltan parámetros de Proxy"
+msgstr "Пропущены настройки Wiki"
+
+#: ../../../../ajax/ajax_configSave.php:124
+#: ../../../../web/ConfigC.class.php:126
+#: ../../../../inc/themes/classic/profiles.inc:61
+#: ../../../../inc/themes/material-blue/profiles.inc:72
+msgid "General"
+msgstr "Основное"
+
+#: ../../../../ajax/ajax_configSave.php:134
+msgid "Faltan parámetros de Wiki"
+msgstr "Пропущены настройки Wiki"
+
+#: ../../../../ajax/ajax_configSave.php:144
+#: ../../../../web/ConfigC.class.php:261
+#: ../../../../inc/themes/classic/wiki.inc:4
+#: ../../../../inc/themes/material-blue/wiki.inc:4
+msgid "Wiki"
+msgstr "Wiki"
+
+#: ../../../../ajax/ajax_configSave.php:159
+msgid "Faltan parámetros de LDAP"
+msgstr "Пропущены настройки LDAP"
+
+#: ../../../../ajax/ajax_configSave.php:174
+#: ../../../../web/ConfigC.class.php:293
+#: ../../../../inc/themes/classic/ldap.inc:4
+#: ../../../../inc/themes/material-blue/ldap.inc:4
+msgid "LDAP"
+msgstr "LDAP"
+
+#: ../../../../ajax/ajax_configSave.php:189
+msgid "Faltan parámetros de Correo"
+msgstr "Пропущены настройки почты"
+
+#: ../../../../ajax/ajax_configSave.php:209
+#: ../../../../web/ConfigC.class.php:323
+#: ../../../../inc/themes/classic/mail.inc:4
+#: ../../../../inc/themes/material-blue/mail.inc:4
+msgid "Correo"
+msgstr "Mail"
+
+#: ../../../../ajax/ajax_configSave.php:221
msgid "Configuración actualizada"
msgstr "Конфигурация изменена"
-#: ../../../../ajax/ajax_configSave.php:178
-#: ../../../../ajax/ajax_configSave.php:224
-#: ../../../../ajax/ajax_viewpass.php:68 ../../../../ajax/ajax_viewpass.php:70
-#: ../../../../inc/html.class.php:427
+#: ../../../../ajax/ajax_configSave.php:230
+#: ../../../../ajax/ajax_configSave.php:282
+#: ../../../../ajax/ajax_viewpass.php:60
+#: ../../../../inc/Controller.class.php:169
msgid "Clave maestra actualizada"
msgstr "Мастер-пароль изменен"
-#: ../../../../ajax/ajax_configSave.php:178
-#: ../../../../ajax/ajax_viewpass.php:68 ../../../../ajax/ajax_viewpass.php:70
-#: ../../../../inc/html.class.php:427
+#: ../../../../ajax/ajax_configSave.php:230
+#: ../../../../ajax/ajax_viewpass.php:60
+#: ../../../../inc/Controller.class.php:169
msgid "Reinicie la sesión para cambiarla"
msgstr "Перезайдите для вступления изменений"
-#: ../../../../ajax/ajax_configSave.php:182
+#: ../../../../ajax/ajax_configSave.php:232
msgid "Clave maestra no indicada"
msgstr "Необходим мастер-пароль"
-#: ../../../../ajax/ajax_configSave.php:186
+#: ../../../../ajax/ajax_configSave.php:234
msgid "Se ha de confirmar el cambio de clave"
msgstr "Изменение пароля должно быть подтверждено"
-#: ../../../../ajax/ajax_configSave.php:190
+#: ../../../../ajax/ajax_configSave.php:248
msgid "Las claves son idénticas"
msgstr "Пароли одинаковы"
-#: ../../../../ajax/ajax_configSave.php:194
+#: ../../../../ajax/ajax_configSave.php:250
msgid "Las claves maestras no coinciden"
msgstr "Мастер-пароль не совпадает"
-#: ../../../../ajax/ajax_configSave.php:198
+#: ../../../../ajax/ajax_configSave.php:252
msgid "La clave maestra actual no coincide"
msgstr "Текущий мастер-пароль ошибочен"
-#: ../../../../ajax/ajax_configSave.php:207
+#: ../../../../ajax/ajax_configSave.php:261
msgid "Errores al actualizar las claves de las cuentas"
msgstr "Ошибка при изменении паролей учетной записи"
-#: ../../../../ajax/ajax_configSave.php:221
-#: ../../../../inc/account.class.php:749
+#: ../../../../ajax/ajax_configSave.php:267
+#, fuzzy
+msgid "Errores al actualizar las claves de las cuentas del histórico"
+msgstr "Ошибка при изменении паролей учетной записи"
+
+#: ../../../../ajax/ajax_configSave.php:280
+#: ../../../../inc/Account.class.php:497
msgid "Actualizar Clave Maestra"
msgstr "Изменить мастер-пароль"
-#: ../../../../ajax/ajax_configSave.php:227
+#: ../../../../ajax/ajax_configSave.php:284
msgid "Error al guardar el hash de la clave maestra"
msgstr "Ошибка при сохранении хеша мастер-пароля"
-# Generate Temporary Password
-#: ../../../../ajax/ajax_configSave.php:232
+#: ../../../../ajax/ajax_configSave.php:292
#, fuzzy
msgid "Generar Clave Temporal"
-msgstr "Generate Temporary Password"
+msgstr "Сгенерировать пароль"
-#: ../../../../ajax/ajax_configSave.php:233
-#: ../../../../ajax/ajax_usrpass.php:53 ../../../../ajax/ajax_usrpass.php:56
-#: ../../../../ajax/ajax_viewpass.php:98 ../../../../inc/tpl/accounts.php:251
-#: ../../../../inc/tpl/config.php:462 ../../../../inc/tpl/editpass.php:57
-#: ../../../../inc/tpl/install.php:102 ../../../../inc/tpl/install.php:103
-#: ../../../../inc/tpl/login.php:37 ../../../../inc/tpl/login.php:45
-#: ../../../../inc/tpl/passreset.php:62 ../../../../inc/tpl/users.php:135
+#: ../../../../ajax/ajax_configSave.php:292
+#: ../../../../inc/themes/classic/account.inc:83
+#: ../../../../inc/themes/classic/editpass.inc:25
+#: ../../../../inc/themes/classic/install.inc:38
+#: ../../../../inc/themes/classic/install.inc:39
+#: ../../../../inc/themes/classic/login.inc:10
+#: ../../../../inc/themes/classic/login.inc:22
+#: ../../../../inc/themes/classic/mail.inc:55
+#: ../../../../inc/themes/classic/passreset.inc:29
+#: ../../../../inc/themes/classic/users.inc:75
+#: ../../../../inc/themes/classic/userspass.inc:8
+#: ../../../../inc/themes/classic/userspass.inc:11
+#: ../../../../inc/themes/material-blue/account.inc:95
+#: ../../../../inc/themes/material-blue/account.inc:100
+#: ../../../../inc/themes/material-blue/config.inc:358
+#: ../../../../inc/themes/material-blue/editpass.inc:26
+#: ../../../../inc/themes/material-blue/editpass.inc:31
+#: ../../../../inc/themes/material-blue/editpass.inc:41
+#: ../../../../inc/themes/material-blue/install.inc:44
+#: ../../../../inc/themes/material-blue/ldap.inc:105
+#: ../../../../inc/themes/material-blue/login.inc:17
+#: ../../../../inc/themes/material-blue/login.inc:40
+#: ../../../../inc/themes/material-blue/mail.inc:73
+#: ../../../../inc/themes/material-blue/mail.inc:80
+#: ../../../../inc/themes/material-blue/passreset.inc:31
+#: ../../../../inc/themes/material-blue/users.inc:89
+#: ../../../../inc/themes/material-blue/users.inc:96
+#: ../../../../inc/themes/material-blue/userspass.inc:8
+#: ../../../../inc/themes/material-blue/userspass.inc:13
msgid "Clave"
msgstr "Пароль"
-# Temporary Password Generated
-#: ../../../../ajax/ajax_configSave.php:236
+#: ../../../../ajax/ajax_configSave.php:294
#, fuzzy
msgid "Clave Temporal Generada"
-msgstr "Temporary Password Generated"
+msgstr "Сгенерированный пароль"
-#: ../../../../ajax/ajax_doLogin.php:41
+#: ../../../../ajax/ajax_doLogin.php:46
msgid "Usuario/Clave no introducidos"
msgstr "Пользователь / пароль не введены"
-#: ../../../../ajax/ajax_doLogin.php:54 ../../../../ajax/ajax_doLogin.php:75
-#: ../../../../ajax/ajax_doLogin.php:82 ../../../../ajax/ajax_doLogin.php:89
-msgid "Inicio sesión (LDAP)"
+#: ../../../../ajax/ajax_doLogin.php:65
+#, fuzzy
+msgid "Inicio sesión"
msgstr "Начало сессии (LDAP)"
-#: ../../../../ajax/ajax_doLogin.php:60
+#: ../../../../ajax/ajax_doLogin.php:70
+#, fuzzy
+msgid "Servidor Login"
+msgstr "Логин"
+
+#: ../../../../ajax/ajax_doLogin.php:76
msgid "Error al guardar los datos de LDAP"
msgstr "Ошибка сохранении данных пользователя из LDAP"
-#: ../../../../ajax/ajax_doLogin.php:63 ../../../../ajax/ajax_doLogin.php:71
-#: ../../../../ajax/ajax_doLogin.php:122 ../../../../inc/import.class.php:240
-#: ../../../../inc/import.class.php:247 ../../../../inc/import.class.php:266
+#: ../../../../ajax/ajax_doLogin.php:79 ../../../../ajax/ajax_doLogin.php:87
+#: ../../../../ajax/ajax_doLogin.php:139 ../../../../ajax/ajax_doLogin.php:185
+#: ../../../../inc/ApiTokens.class.php:140
+#: ../../../../inc/ApiTokens.class.php:186
+#: ../../../../inc/ApiTokens.class.php:217
+#: ../../../../inc/ApiTokens.class.php:243
+#: ../../../../inc/ApiTokens.class.php:262
+#: ../../../../inc/ApiTokens.class.php:304
+#: ../../../../inc/ApiTokens.class.php:328 ../../../../inc/Crypt.class.php:235
+#: ../../../../inc/Crypt.class.php:246
+#: ../../../../inc/XmlImportBase.class.php:74
msgid "Error interno"
msgstr "Внутренняя ошибка"
-#: ../../../../ajax/ajax_doLogin.php:68
+#: ../../../../ajax/ajax_doLogin.php:84
msgid "Error al actualizar la clave del usuario en la BBDD"
msgstr "Ошибка изменения пароля пользователя в БД"
-#: ../../../../ajax/ajax_doLogin.php:76 ../../../../ajax/ajax_doLogin.php:100
+#: ../../../../ajax/ajax_doLogin.php:92 ../../../../ajax/ajax_doLogin.php:117
msgid "Login incorrecto"
msgstr "Ошибка входа"
-#: ../../../../ajax/ajax_doLogin.php:77 ../../../../ajax/ajax_doLogin.php:84
-#: ../../../../ajax/ajax_doLogin.php:91 ../../../../ajax/ajax_doLogin.php:101
-#: ../../../../ajax/ajax_doLogin.php:111 ../../../../ajax/ajax_doLogin.php:156
-#: ../../../../ajax/ajax_search.php:131 ../../../../ajax/ajax_search.php:250
-#: ../../../../ajax/ajax_viewpass.php:94 ../../../../inc/init.php:544
-#: ../../../../inc/tpl/accounts.php:234 ../../../../inc/tpl/config.php:453
-#: ../../../../inc/tpl/editpass.php:53 ../../../../inc/tpl/eventlog.php:62
-#: ../../../../inc/tpl/install.php:92 ../../../../inc/tpl/install.php:93
-#: ../../../../inc/tpl/login.php:35 ../../../../inc/tpl/login.php:44
-#: ../../../../inc/tpl/passreset.php:51 ../../../../inc/tpl/request.php:52
-#: ../../../../inc/users.class.php:817 ../../../../inc/users.class.php:859
-#: ../../../../res/test.php:64
+#: ../../../../ajax/ajax_doLogin.php:93 ../../../../ajax/ajax_doLogin.php:100
+#: ../../../../ajax/ajax_doLogin.php:107 ../../../../ajax/ajax_doLogin.php:118
+#: ../../../../ajax/ajax_doLogin.php:128 ../../../../ajax/ajax_doLogin.php:180
+#: ../../../../inc/ApiTokens.class.php:190
+#: ../../../../inc/ApiTokens.class.php:308 ../../../../inc/Auth.class.php:108
+#: ../../../../inc/Init.class.php:517 ../../../../inc/UserBase.class.php:382
+#: ../../../../inc/UserBase.class.php:526 ../../../../res/test.php:64
+#: ../../../../web/SearchC.class.php:289
+#: ../../../../web/UsersMgmtC.class.php:392
+#: ../../../../inc/themes/classic/account.inc:70
+#: ../../../../inc/themes/classic/editpass.inc:21
+#: ../../../../inc/themes/classic/eventlog.inc:25
+#: ../../../../inc/themes/classic/info.inc:39
+#: ../../../../inc/themes/classic/install.inc:27
+#: ../../../../inc/themes/classic/install.inc:28
+#: ../../../../inc/themes/classic/login.inc:7
+#: ../../../../inc/themes/classic/login.inc:20
+#: ../../../../inc/themes/classic/mail.inc:47
+#: ../../../../inc/themes/classic/passreset.inc:17
+#: ../../../../inc/themes/classic/request.inc:17
+#: ../../../../inc/themes/classic/search.inc:50
+#: ../../../../inc/themes/classic/tokens.inc:8
+#: ../../../../inc/themes/material-blue/account.inc:80
+#: ../../../../inc/themes/material-blue/config.inc:344
+#: ../../../../inc/themes/material-blue/editpass.inc:22
+#: ../../../../inc/themes/material-blue/eventlog.inc:24
+#: ../../../../inc/themes/material-blue/info.inc:39
+#: ../../../../inc/themes/material-blue/login.inc:10
+#: ../../../../inc/themes/material-blue/login.inc:33
+#: ../../../../inc/themes/material-blue/mail.inc:61
+#: ../../../../inc/themes/material-blue/mail.inc:67
+#: ../../../../inc/themes/material-blue/passreset.inc:17
+#: ../../../../inc/themes/material-blue/request.inc:20
+#: ../../../../inc/themes/material-blue/search.inc:55
+#: ../../../../inc/themes/material-blue/tokens.inc:8
msgid "Usuario"
msgstr "Пользователь"
-#: ../../../../ajax/ajax_doLogin.php:80 ../../../../ajax/ajax_doLogin.php:94
-#: ../../../../ajax/ajax_doLogin.php:104
+#: ../../../../ajax/ajax_doLogin.php:96 ../../../../ajax/ajax_doLogin.php:110
+#: ../../../../ajax/ajax_doLogin.php:121
msgid "Usuario/Clave incorrectos"
msgstr "Неправильный пользователь / пароль"
-#: ../../../../ajax/ajax_doLogin.php:83 ../../../../ajax/ajax_doLogin.php:87
+#: ../../../../ajax/ajax_doLogin.php:99 ../../../../ajax/ajax_doLogin.php:103
msgid "Cuenta expirada"
msgstr "Аккаунт просрочен"
-#: ../../../../ajax/ajax_doLogin.php:90
+#: ../../../../ajax/ajax_doLogin.php:106
msgid "El usuario no tiene grupos asociados"
msgstr "Для пользователя не указаны группы"
-#: ../../../../ajax/ajax_doLogin.php:96
-msgid "Inicio sesión (MySQL)"
-msgstr "Начало сессии (MySQL)"
-
-#: ../../../../ajax/ajax_doLogin.php:110 ../../../../ajax/ajax_doLogin.php:114
+#: ../../../../ajax/ajax_doLogin.php:127 ../../../../ajax/ajax_doLogin.php:131
msgid "Usuario deshabilitado"
msgstr "Пользователь заблокирован"
-#: ../../../../ajax/ajax_doLogin.php:119
+#: ../../../../ajax/ajax_doLogin.php:136
msgid "Error al obtener los datos del usuario de la BBDD"
msgstr "Ошибка получения данных о пользователе из DB"
-#: ../../../../ajax/ajax_doLogin.php:127
+#: ../../../../ajax/ajax_doLogin.php:146
msgid "La clave maestra no ha sido guardada o es incorrecta"
msgstr "Мастер-пароль не сохранен или ошибочен"
-#: ../../../../ajax/ajax_doLogin.php:134 ../../../../ajax/ajax_doLogin.php:137
+#: ../../../../ajax/ajax_doLogin.php:155 ../../../../ajax/ajax_doLogin.php:158
msgid "Clave maestra incorrecta"
msgstr "Неправильный мастер-пароль"
-#: ../../../../ajax/ajax_doLogin.php:158
-#: ../../../../ajax/ajax_getContent.php:115
-#: ../../../../inc/groups.class.php:155 ../../../../inc/groups.class.php:184
-#: ../../../../inc/groups.class.php:211 ../../../../inc/tpl/config.php:352
-#: ../../../../inc/tpl/users.php:109
+#: ../../../../ajax/ajax_doLogin.php:181
+#: ../../../../inc/ProfileBase.class.php:512
+#: ../../../../inc/ProfileBase.class.php:550
+#: ../../../../inc/ProfileBase.class.php:593
+#: ../../../../web/UsersMgmtC.class.php:89
+#: ../../../../inc/themes/classic/users.inc:37
+#: ../../../../inc/themes/material-blue/users.inc:43
+msgid "Perfil"
+msgstr "Профиль"
+
+#: ../../../../ajax/ajax_doLogin.php:182 ../../../../inc/Groups.class.php:158
+#: ../../../../inc/Groups.class.php:259 ../../../../inc/Groups.class.php:375
+#: ../../../../web/UsersMgmtC.class.php:90
+#: ../../../../inc/themes/classic/ldap.inc:116
+#: ../../../../inc/themes/classic/users.inc:49
+#: ../../../../inc/themes/material-blue/ldap.inc:139
+#: ../../../../inc/themes/material-blue/ldap.inc:164
+#: ../../../../inc/themes/material-blue/users.inc:57
msgid "Grupo"
msgstr "Группа"
-#: ../../../../ajax/ajax_eventlog.php:43
-msgid "Registro de eventos vaciado"
-msgstr "Журнал очищен"
-
-#: ../../../../ajax/ajax_eventlog.php:45
-msgid "Error al vaciar el registro de eventos"
-msgstr "Ошибка очистки журнала"
-
-#: ../../../../ajax/ajax_files.php:44 ../../../../ajax/ajax_getFiles.php:36
+#: ../../../../ajax/ajax_files.php:45 ../../../../ajax/ajax_getFiles.php:39
msgid "Gestión de archivos deshabilitada"
msgstr "Управление файлами отключено"
-#: ../../../../ajax/ajax_files.php:63
-msgid "No hay extensiones permitidas"
-msgstr "Нет доступных расширений файлов"
-
-#: ../../../../ajax/ajax_files.php:71 ../../../../inc/import.class.php:113
-msgid "Tipo de archivo no soportado"
-msgstr "Данный тип файлов запрещен"
-
-#: ../../../../ajax/ajax_files.php:74
-msgid "Archivo inválido"
-msgstr "Ошибочный файл"
-
-#: ../../../../ajax/ajax_files.php:87 ../../../../ajax/ajax_files.php:99
-#: ../../../../ajax/ajax_files.php:103 ../../../../inc/import.class.php:124
-#: ../../../../inc/import.class.php:132
-msgid "Error interno al leer el archivo"
-msgstr "Внутренняя ошибка чтения файла"
-
-#: ../../../../ajax/ajax_files.php:91
-msgid "El archivo es mayor de "
-msgstr "Файл больше чем"
-
-#: ../../../../ajax/ajax_files.php:98 ../../../../inc/files.class.php:52
+#: ../../../../ajax/ajax_files.php:59 ../../../../inc/Files.class.php:63
msgid "Subir Archivo"
msgstr "Загрузить файл"
-#: ../../../../ajax/ajax_files.php:107
+#: ../../../../ajax/ajax_files.php:68
+msgid "No hay extensiones permitidas"
+msgstr "Нет доступных расширений файлов"
+
+#: ../../../../ajax/ajax_files.php:79 ../../../../inc/FileImport.class.php:115
+msgid "Tipo de archivo no soportado"
+msgstr "Данный тип файлов запрещен"
+
+#: ../../../../ajax/ajax_files.php:85
+msgid "Archivo inválido"
+msgstr "Ошибочный файл"
+
+#: ../../../../ajax/ajax_files.php:101 ../../../../ajax/ajax_files.php:118
+#: ../../../../inc/FileImport.class.php:131
+#: ../../../../inc/FileImport.class.php:149
+#: ../../../../inc/FileImport.class.php:167
+msgid "Error interno al leer el archivo"
+msgstr "Внутренняя ошибка чтения файла"
+
+#: ../../../../ajax/ajax_files.php:108
+msgid "El archivo es mayor de "
+msgstr "Файл больше чем"
+
+#: ../../../../ajax/ajax_files.php:125
msgid "Archivo guardado"
msgstr "Файл сохранен"
-#: ../../../../ajax/ajax_files.php:109
+#: ../../../../ajax/ajax_files.php:130
msgid "No se pudo guardar el archivo"
msgstr "Ошибка сохранения файла"
-#: ../../../../ajax/ajax_files.php:116 ../../../../ajax/ajax_files.php:174
+#: ../../../../ajax/ajax_files.php:140 ../../../../ajax/ajax_files.php:199
msgid "No es un ID de archivo válido"
msgstr "Ошибочный ID файла"
-#: ../../../../ajax/ajax_files.php:124 ../../../../inc/files.class.php:143
+#: ../../../../ajax/ajax_files.php:148
msgid "El archivo no existe"
msgstr "Файл не существует"
-#: ../../../../ajax/ajax_files.php:133 ../../../../ajax/ajax_getFiles.php:67
+#: ../../../../ajax/ajax_files.php:157
+#: ../../../../inc/themes/classic/files.inc:19
+#: ../../../../inc/themes/material-blue/files.inc:19
msgid "Descargar Archivo"
msgstr "Скачать файл"
-#: ../../../../ajax/ajax_files.php:134 ../../../../ajax/ajax_viewpass.php:81
-#: ../../../../inc/files.class.php:109 ../../../../inc/tpl/eventlog.php:53
+#: ../../../../ajax/ajax_files.php:158 ../../../../ajax/ajax_viewpass.php:69
+#: ../../../../inc/Files.class.php:112
+#: ../../../../inc/themes/classic/eventlog.inc:16
+#: ../../../../inc/themes/material-blue/eventlog.inc:15
msgid "ID"
msgstr "ID"
-#: ../../../../ajax/ajax_files.php:135 ../../../../inc/files.class.php:54
-#: ../../../../inc/files.class.php:110 ../../../../inc/tpl/migrate.php:110
+#: ../../../../ajax/ajax_files.php:159 ../../../../inc/Files.class.php:65
+#: ../../../../inc/Files.class.php:113
+#: ../../../../inc/themes/classic/import.inc:155
+#: ../../../../inc/themes/material-blue/import.inc:83
msgid "Archivo"
msgstr "Файл"
-#: ../../../../ajax/ajax_files.php:136 ../../../../inc/files.class.php:55
-#: ../../../../inc/files.class.php:111
+#: ../../../../ajax/ajax_files.php:160 ../../../../inc/Files.class.php:66
+#: ../../../../inc/Files.class.php:114
+#: ../../../../web/AccountsMgmtC.class.php:266
+#: ../../../../inc/themes/classic/customfields.inc:16
+#: ../../../../inc/themes/material-blue/customfields.inc:19
msgid "Tipo"
msgstr "Тип"
-#: ../../../../ajax/ajax_files.php:137 ../../../../inc/files.class.php:56
-#: ../../../../inc/files.class.php:112
+#: ../../../../ajax/ajax_files.php:161 ../../../../inc/Files.class.php:67
+#: ../../../../inc/Files.class.php:115
msgid "Tamaño"
msgstr "Размер"
-#: ../../../../ajax/ajax_files.php:178
+#: ../../../../ajax/ajax_files.php:203
msgid "Archivo eliminado"
msgstr "Файл удален"
-#: ../../../../ajax/ajax_files.php:180
+#: ../../../../ajax/ajax_files.php:208
msgid "Error al eliminar el archivo"
msgstr "Ошибка при удалении файла"
-#: ../../../../ajax/ajax_getContent.php:42
+#: ../../../../ajax/ajax_getContent.php:41
+#: ../../../../inc/ApiRequest.class.php:55
+#: ../../../../inc/CustomFieldDef.class.php:38
+#: ../../../../inc/CustomFields.class.php:48
msgid "Parámetros incorrectos"
msgstr "Ошибочные параметры"
-#: ../../../../ajax/ajax_getContent.php:100 ../../../../inc/tpl/main.php:54
-msgid "Gestión de Usuarios"
-msgstr "Управление пользователями"
-
-#: ../../../../ajax/ajax_getContent.php:101
-msgid "Gestión de Grupos"
-msgstr "Управление группами"
-
-#: ../../../../ajax/ajax_getContent.php:102
-msgid "Gestión de Perfiles"
-msgstr "Управление профилями"
-
-#: ../../../../ajax/ajax_getContent.php:112
-#: ../../../../ajax/ajax_getContent.php:158
-#: ../../../../ajax/ajax_getContent.php:190
-#: ../../../../ajax/ajax_getContent.php:243
-#: ../../../../ajax/ajax_getContent.php:275
-#: ../../../../ajax/ajax_search.php:125 ../../../../ajax/ajax_search.php:238
-#: ../../../../inc/tpl/accounts.php:173 ../../../../inc/tpl/categories.php:40
-#: ../../../../inc/tpl/customers.php:40 ../../../../inc/tpl/editpass.php:40
-#: ../../../../inc/tpl/groups.php:39 ../../../../inc/tpl/profiles.php:39
-#: ../../../../inc/tpl/request.php:38 ../../../../inc/tpl/users.php:66
-msgid "Nombre"
-msgstr "Имя"
-
-#: ../../../../ajax/ajax_getContent.php:113
-#: ../../../../ajax/ajax_passReset.php:74 ../../../../inc/tpl/users.php:83
-#: ../../../../inc/users.class.php:897 ../../../../inc/users.class.php:924
-msgid "Login"
-msgstr "Логин"
-
-#: ../../../../ajax/ajax_getContent.php:116
-msgid "Propiedades"
-msgstr "Настройки"
-
-#: ../../../../ajax/ajax_getContent.php:122 ../../../../inc/tpl/main.php:30
-msgid "Admin Aplicación"
-msgstr "Администратор программы"
-
-#: ../../../../ajax/ajax_getContent.php:123
-msgid "Admin Cuentas"
-msgstr "Администратор учетных записей"
-
-#: ../../../../ajax/ajax_getContent.php:124 ../../../../inc/tpl/users.php:91
-msgid "Usuario de LDAP"
-msgstr "Пользователь LDAP"
-
-#: ../../../../ajax/ajax_getContent.php:125 ../../../../inc/tpl/users.php:171
-msgid "Deshabilitado"
-msgstr "Отключен"
-
-#: ../../../../ajax/ajax_getContent.php:136
-msgid "Ver Detalles de Usuario"
-msgstr "Просмотр информации пользователя"
-
-#: ../../../../ajax/ajax_getContent.php:138
-#: ../../../../inc/users.class.php:923
-msgid "Eliminar Usuario"
-msgstr "Удалить пользователя"
-
-#: ../../../../ajax/ajax_getContent.php:139
-msgid "Cambiar Clave de Usuario"
-msgstr "Изменить пароль пользователя"
-
-#: ../../../../ajax/ajax_getContent.php:158
-#: ../../../../ajax/ajax_getContent.php:243
-#: ../../../../ajax/ajax_getContent.php:275
-#: ../../../../ajax/ajax_sendRequest.php:62
-#: ../../../../inc/tpl/categories.php:48 ../../../../inc/tpl/customers.php:48
-#: ../../../../inc/tpl/eventlog.php:68 ../../../../inc/tpl/groups.php:46
-msgid "Descripción"
-msgstr "Описание"
-
-#: ../../../../ajax/ajax_getContent.php:169
-#: ../../../../inc/groups.class.php:210
-msgid "Eliminar Grupo"
-msgstr "Удалить группу"
-
-#: ../../../../ajax/ajax_getContent.php:233
-msgid "Gestión de Categorías"
-msgstr "Управление категориями"
-
-#: ../../../../ajax/ajax_getContent.php:234
-msgid "Gestión de Clientes"
-msgstr "Управление заказчиками"
-
-#: ../../../../ajax/ajax_getContent.php:254
-#: ../../../../inc/category.class.php:135
-msgid "Eliminar Categoría"
-msgstr "Удалить категорию"
-
-#: ../../../../ajax/ajax_getContent.php:286
-#: ../../../../inc/customer.class.php:131
-msgid "Eliminar Cliente"
-msgstr "Удалить заказчика"
-
-#: ../../../../ajax/ajax_getContent.php:319
-#: ../../../../inc/config.class.php:121 ../../../../inc/config.class.php:149
-#: ../../../../inc/tpl/main.php:56 ../../../../inc/tpl/profiles.php:71
-msgid "Configuración"
-msgstr "Конфигурация"
-
-#: ../../../../ajax/ajax_getContent.php:320
-#: ../../../../inc/tpl/install.php:112 ../../../../inc/tpl/install.php:117
-#: ../../../../inc/tpl/install.php:118 ../../../../inc/tpl/login.php:40
-#: ../../../../inc/tpl/login.php:48 ../../../../inc/tpl/profiles.php:76
-msgid "Clave Maestra"
-msgstr "Мастер-пароль"
-
-#: ../../../../ajax/ajax_getContent.php:321
-msgid "Copia de Seguridad"
-msgstr "Backup"
-
-#: ../../../../ajax/ajax_getContent.php:322
-msgid "Importar cuentas desde fuentes externas"
-msgstr "Импорт учетных записей из вне"
-
-#: ../../../../ajax/ajax_getContent.php:322
-#: ../../../../inc/import.class.php:81 ../../../../inc/import.class.php:163
-#: ../../../../inc/migrate.class.php:402
-msgid "Importar Cuentas"
-msgstr "Импорт учетных записей"
-
-#: ../../../../ajax/ajax_getFiles.php:63 ../../../../inc/files.class.php:108
-msgid "Eliminar Archivo"
-msgstr "Удалить файл"
-
-#: ../../../../ajax/ajax_getFiles.php:70
-msgid "Ver Archivo"
-msgstr "Показать файл"
-
-#: ../../../../ajax/ajax_migrate.php:1
+#: ../../../../ajax/ajax_migrate.php:55
msgid "Confirmar la importación de cuentas"
msgstr "Подтвердите импорт учетной записи"
-#: ../../../../ajax/ajax_migrate.php:1
+#: ../../../../ajax/ajax_migrate.php:57
msgid "Es necesario un usuario de conexión"
msgstr "Требуется имя пользовтеля для подключения"
-#: ../../../../ajax/ajax_migrate.php:1
+#: ../../../../ajax/ajax_migrate.php:59
msgid "Es necesaria una clave de conexión"
msgstr "Требуется пароль для подключения"
-#: ../../../../ajax/ajax_migrate.php:1
+#: ../../../../ajax/ajax_migrate.php:61
msgid "Es necesario el nombre de la BBDD"
msgstr "Необходимо имя базы данных"
-#: ../../../../ajax/ajax_migrate.php:1
+#: ../../../../ajax/ajax_migrate.php:63
msgid "Es necesario un nombre de host"
msgstr "Необходимо имя сервера"
-#: ../../../../ajax/ajax_passReset.php:44
+#: ../../../../ajax/ajax_passReset.php:47
+#: ../../../../ajax/ajax_passReset.php:50
msgid "Recuperación de Clave"
msgstr "Восстановление пароля"
-#: ../../../../ajax/ajax_passReset.php:48
-#: ../../../../ajax/ajax_passReset.php:55
+#: ../../../../ajax/ajax_passReset.php:53
+#: ../../../../ajax/ajax_passReset.php:58
msgid "Solicitado para"
msgstr "Запрошено для"
-#: ../../../../ajax/ajax_passReset.php:52
-#: ../../../../ajax/ajax_sendRequest.php:71
+#: ../../../../ajax/ajax_passReset.php:55
+#: ../../../../ajax/ajax_sendRequest.php:75
msgid "Solicitud enviada"
msgstr "Запрос отправлен"
-#: ../../../../ajax/ajax_passReset.php:52
+#: ../../../../ajax/ajax_passReset.php:55
msgid "En breve recibirá un correo para completar la solicitud."
msgstr "В скором времени вы получите email для завершения запроса."
-#: ../../../../ajax/ajax_passReset.php:59
+#: ../../../../ajax/ajax_passReset.php:60
msgid "No se ha podido realizar la solicitud. Consulte con el administrador."
msgstr ""
"Запрос не может быть выполнен. Пожалуйста, свяжитесь с администратором."
-#: ../../../../ajax/ajax_passReset.php:73 ../../../../inc/users.class.php:896
+#: ../../../../ajax/ajax_passReset.php:72
+#: ../../../../inc/UserBase.class.php:568
+#: ../../../../inc/UserUtil.class.php:664
msgid "Modificar Clave Usuario"
msgstr "Изменить пароль пользователя"
-#: ../../../../ajax/ajax_passReset.php:85
+#: ../../../../ajax/ajax_passReset.php:72
+#: ../../../../inc/UserBase.class.php:568
+#: ../../../../inc/UserBase.class.php:592
+#: ../../../../inc/UserUtil.class.php:664
+#: ../../../../web/UsersMgmtC.class.php:88
+#: ../../../../inc/themes/classic/users.inc:21
+#: ../../../../inc/themes/material-blue/users.inc:24
+msgid "Login"
+msgstr "Логин"
+
+#: ../../../../ajax/ajax_passReset.php:80
msgid "La clave es incorrecta o no coincide"
msgstr "Ошибка пароля"
-#: ../../../../ajax/ajax_search.php:108 ../../../../inc/tpl/eventlog.php:42
-msgid "No se encontraron registros"
-msgstr "Записи не найдены"
-
-#: ../../../../ajax/ajax_search.php:122
-msgid "Ordenar por Cliente"
-msgstr "Сортировать по заказчику"
-
-#: ../../../../ajax/ajax_search.php:122 ../../../../ajax/ajax_search.php:233
-#: ../../../../ajax/ajax_sendRequest.php:61
-#: ../../../../inc/account.class.php:370 ../../../../inc/account.class.php:580
-#: ../../../../inc/account.class.php:603 ../../../../inc/account.class.php:879
-#: ../../../../inc/customer.class.php:59
-#: ../../../../inc/customer.class.php:106
-#: ../../../../inc/customer.class.php:132 ../../../../inc/tpl/accounts.php:189
-#: ../../../../inc/tpl/editpass.php:44 ../../../../inc/tpl/request.php:42
-msgid "Cliente"
-msgstr "Заказчик"
-
-#: ../../../../ajax/ajax_search.php:125
-msgid "Ordenar por Nombre"
-msgstr "Сортировать по имени"
-
-#: ../../../../ajax/ajax_search.php:128
-msgid "Ordenar por Categoría"
-msgstr "Сортировать по категории"
-
-#: ../../../../ajax/ajax_search.php:128 ../../../../ajax/ajax_search.php:243
-#: ../../../../inc/category.class.php:80
-#: ../../../../inc/category.class.php:136
-#: ../../../../inc/category.class.php:184 ../../../../inc/tpl/accounts.php:206
-msgid "Categoría"
-msgstr "Категория"
-
-#: ../../../../ajax/ajax_search.php:131
-msgid "Ordenar por Usuario"
-msgstr "Сортировать по имени пользователя"
-
-#: ../../../../ajax/ajax_search.php:134
-msgid "Ordenar por URL / IP"
-msgstr "Сортировать по URL / IP"
-
-#: ../../../../ajax/ajax_search.php:134 ../../../../ajax/ajax_search.php:255
-#: ../../../../inc/tpl/accounts.php:218 ../../../../inc/tpl/editpass.php:48
-#: ../../../../inc/tpl/request.php:47
-msgid "URL / IP"
-msgstr "URL / IP"
-
-#: ../../../../ajax/ajax_search.php:173
-msgid "Buscar en Wiki"
-msgstr "Поиск в Wiki"
-
-#: ../../../../ajax/ajax_search.php:181 ../../../../ajax/ajax_search.php:289
-#: ../../../../inc/tpl/accounts.php:80 ../../../../inc/tpl/accounts.php:91
-msgid "Detalles de Cuenta"
-msgstr "Детали учетной записи"
-
-#: ../../../../ajax/ajax_search.php:199 ../../../../ajax/ajax_search.php:201
-msgid "Abrir enlace a"
-msgstr "Открыть ссылку"
-
-#: ../../../../ajax/ajax_search.php:262 ../../../../inc/tpl/accounts.php:271
-#: ../../../../inc/tpl/users.php:154
-msgid "Notas"
-msgstr "Заметки"
-
-#: ../../../../ajax/ajax_search.php:266
-msgid "Archivos adjuntos"
-msgstr "Вложения"
-
-#: ../../../../ajax/ajax_search.php:277
-msgid "Enlace a Wiki"
-msgstr "Ссылка на Wiki"
-
-#: ../../../../ajax/ajax_search.php:293 ../../../../ajax/ajax_viewpass.php:80
-#: ../../../../inc/tpl/accounts.php:528 ../../../../inc/tpl/profiles.php:50
-msgid "Ver Clave"
-msgstr "Показать пароль"
-
-#: ../../../../ajax/ajax_search.php:294 ../../../../ajax/ajax_search.php:346
-#: ../../../../inc/tpl/accounts.php:533 ../../../../inc/tpl/accounts.php:624
-msgid "Copiar Clave en Portapapeles"
-msgstr "Копировать пароль в буфер"
-
-#: ../../../../ajax/ajax_search.php:298 ../../../../inc/html.class.php:545
-msgid "Más Acciones"
-msgstr "Другие действия"
-
-#: ../../../../ajax/ajax_search.php:302 ../../../../inc/tpl/accounts.php:556
-msgid "Modificar Cuenta"
-msgstr "Редактировать учетную запись"
-
-#: ../../../../ajax/ajax_search.php:306 ../../../../inc/tpl/accounts.php:53
-msgid "Copiar Cuenta"
-msgstr "Скопировать учетную запись"
-
-#: ../../../../ajax/ajax_search.php:310 ../../../../inc/account.class.php:602
-#: ../../../../inc/tpl/accounts.php:73 ../../../../inc/tpl/accounts.php:568
-msgid "Eliminar Cuenta"
-msgstr "Удалить учетную запись"
-
-#: ../../../../ajax/ajax_search.php:317 ../../../../inc/tpl/accounts.php:561
-msgid "Solicitar Modificación"
-msgstr "Запросить изменение"
-
-#: ../../../../ajax/ajax_search.php:350 ../../../../inc/tpl/accounts.php:628
-msgid "Clave Copiada al Portapapeles"
-msgstr "Пароль скопирован в буфер"
-
-#: ../../../../ajax/ajax_sendRequest.php:45
+#: ../../../../ajax/ajax_sendRequest.php:48
msgid "Es necesaria una descripción"
msgstr "Необходимо описание"
-#: ../../../../ajax/ajax_sendRequest.php:58
+#: ../../../../ajax/ajax_sendRequest.php:61
msgid "Solicitud de Modificación de Cuenta"
msgstr "Запрос на изменение учетной записи"
-#: ../../../../ajax/ajax_sendRequest.php:59
+#: ../../../../ajax/ajax_sendRequest.php:62
msgid "Solicitante"
msgstr "Запросил"
-#: ../../../../ajax/ajax_sendRequest.php:60
-#: ../../../../ajax/ajax_viewpass.php:82 ../../../../inc/account.class.php:371
-#: ../../../../inc/account.class.php:581 ../../../../inc/account.class.php:604
-#: ../../../../inc/account.class.php:880 ../../../../inc/files.class.php:53
+#: ../../../../ajax/ajax_sendRequest.php:63
+#: ../../../../ajax/ajax_viewpass.php:70 ../../../../inc/Account.class.php:165
+#: ../../../../inc/Account.class.php:219 ../../../../inc/Account.class.php:402
+#: ../../../../inc/Account.class.php:425 ../../../../inc/Account.class.php:667
+#: ../../../../inc/Files.class.php:64
msgid "Cuenta"
msgstr "Учетная запись"
-#: ../../../../ajax/ajax_sendRequest.php:74
+#: ../../../../ajax/ajax_sendRequest.php:64
+#: ../../../../inc/Account.class.php:164 ../../../../inc/Account.class.php:218
+#: ../../../../inc/Account.class.php:401 ../../../../inc/Account.class.php:424
+#: ../../../../inc/Account.class.php:666 ../../../../inc/Customer.class.php:65
+#: ../../../../inc/Customer.class.php:115
+#: ../../../../inc/Customer.class.php:163
+#: ../../../../web/SearchC.class.php:271
+#: ../../../../inc/themes/classic/account.inc:23
+#: ../../../../inc/themes/classic/editpass.inc:12
+#: ../../../../inc/themes/classic/request.inc:9
+#: ../../../../inc/themes/classic/search.inc:19
+#: ../../../../inc/themes/material-blue/account.inc:29
+#: ../../../../inc/themes/material-blue/editpass.inc:13
+#: ../../../../inc/themes/material-blue/request.inc:10
+#: ../../../../inc/themes/material-blue/search.inc:24
+msgid "Cliente"
+msgstr "Заказчик"
+
+#: ../../../../ajax/ajax_sendRequest.php:65
+#: ../../../../web/AccountsMgmtC.class.php:79
+#: ../../../../web/AccountsMgmtC.class.php:138
+#: ../../../../web/UsersMgmtC.class.php:187
+#: ../../../../inc/themes/classic/categories.inc:16
+#: ../../../../inc/themes/classic/customers.inc:16
+#: ../../../../inc/themes/classic/eventlog.inc:31
+#: ../../../../inc/themes/classic/groups.inc:16
+#: ../../../../inc/themes/material-blue/categories.inc:20
+#: ../../../../inc/themes/material-blue/customers.inc:20
+#: ../../../../inc/themes/material-blue/eventlog.inc:30
+#: ../../../../inc/themes/material-blue/groups.inc:20
+msgid "Descripción"
+msgstr "Описание"
+
+#: ../../../../ajax/ajax_sendRequest.php:78
msgid "Error al enviar la solicitud"
msgstr "Ошибка при отправке запроса"
-#: ../../../../ajax/ajax_usrpass.php:41
-msgid "No tiene permisos para realizar esta operación"
-msgstr "Нет прав для данной операции"
+#: ../../../../ajax/ajax_userPrefsSave.php:74
+#, fuzzy
+msgid "Error al actualizar preferencias"
+msgstr "Ошибка изменения пароля"
-#: ../../../../ajax/ajax_usrpass.php:48 ../../../../inc/auth.class.php:194
-#: ../../../../inc/tpl/users.php:175
-msgid "Cambio de Clave"
-msgstr "Изменение пароля"
+#: ../../../../ajax/ajax_userPrefsSave.php:77
+#, fuzzy
+msgid "Preferencias actualizadas"
+msgstr "Обновлены учетные записи:"
-#: ../../../../ajax/ajax_usrpass.php:57 ../../../../inc/tpl/accounts.php:258
-#: ../../../../inc/tpl/editpass.php:64 ../../../../inc/tpl/users.php:139
-msgid "Generar clave aleatoria"
-msgstr "Сгенерировать пароль"
-
-#: ../../../../ajax/ajax_usrpass.php:63 ../../../../ajax/ajax_usrpass.php:65
-#: ../../../../inc/tpl/accounts.php:263 ../../../../inc/tpl/editpass.php:69
-#: ../../../../inc/tpl/users.php:145
-msgid "Clave (repetir)"
-msgstr "Подтверждение пароля"
-
-#: ../../../../ajax/ajax_usrpass.php:66 ../../../../inc/tpl/accounts.php:266
-#: ../../../../inc/tpl/editpass.php:71 ../../../../inc/tpl/install.php:107
-#: ../../../../inc/tpl/install.php:122 ../../../../inc/tpl/masterpass.php:64
-#: ../../../../inc/tpl/passreset.php:65 ../../../../inc/tpl/passreset.php:73
-#: ../../../../inc/tpl/users.php:148
-msgid "Nivel de fortaleza de la clave"
-msgstr "Уровень длины пароля"
-
-#: ../../../../ajax/ajax_usrpass.php:82 ../../../../ajax/ajax_usrpass.php:83
-#: ../../../../inc/tpl/accounts.php:542 ../../../../inc/tpl/categories.php:68
-#: ../../../../inc/tpl/config.php:522 ../../../../inc/tpl/customers.php:68
-#: ../../../../inc/tpl/editpass.php:89 ../../../../inc/tpl/groups.php:64
-#: ../../../../inc/tpl/masterpass.php:114 ../../../../inc/tpl/profiles.php:138
-#: ../../../../inc/tpl/users.php:220
-msgid "Guardar"
-msgstr "Сохранить"
-
-#: ../../../../ajax/ajax_viewpass.php:52 ../../../../ajax/ajax_viewpass.php:58
-#: ../../../../inc/html.class.php:425
-msgid "No tiene permisos para acceder a esta cuenta"
-msgstr "Нет прав для доступа к данной учетной записи"
-
-#: ../../../../ajax/ajax_viewpass.php:61
+#: ../../../../ajax/ajax_viewpass.php:54
msgid "La clave maestra no coincide"
msgstr "Неверный мастер-пароль"
-#: ../../../../inc/account.class.php:26 ../../../../inc/acl.class.php:27
-#: ../../../../inc/auth.class.php:27 ../../../../inc/backup.class.php:26
-#: ../../../../inc/category.class.php:27 ../../../../inc/common.class.php:26
-#: ../../../../inc/config.class.php:26 ../../../../inc/crypt.class.php:26
-#: ../../../../inc/customer.class.php:27 ../../../../inc/db.class.php:27
-#: ../../../../inc/files.class.php:27 ../../../../inc/groups.class.php:27
-#: ../../../../inc/html.class.php:27 ../../../../inc/import.class.php:27
-#: ../../../../inc/init.php:26 ../../../../inc/installer.class.php:27
-#: ../../../../inc/keepassimport.class.php:27
-#: ../../../../inc/keepassximport.class.php:27
-#: ../../../../inc/ldap.class.php:27 ../../../../inc/log.class.php:26
-#: ../../../../inc/migrate.class.php:26 ../../../../inc/profiles.class.php:27
-#: ../../../../inc/tpl/accounts.php:26 ../../../../inc/tpl/backup.php:26
-#: ../../../../inc/tpl/categories.php:26 ../../../../inc/tpl/config.php:26
-#: ../../../../inc/tpl/customers.php:26 ../../../../inc/tpl/editpass.php:25
-#: ../../../../inc/tpl/eventlog.php:26 ../../../../inc/tpl/groups.php:26
-#: ../../../../inc/tpl/login.php:26 ../../../../inc/tpl/main.php:26
-#: ../../../../inc/tpl/masterpass.php:26 ../../../../inc/tpl/migrate.php:26
-#: ../../../../inc/tpl/profiles.php:26 ../../../../inc/tpl/request.php:25
-#: ../../../../inc/tpl/search.php:26 ../../../../inc/tpl/users.php:26
-#: ../../../../inc/upgrade.class.php:27 ../../../../inc/users.class.php:27
-#: ../../../../inc/util.class.php:26 ../../../../inc/util.class.php:293
+#: ../../../../ajax/ajax_viewpass.php:58
+#: ../../../../inc/Controller.class.php:166
+msgid "No tiene permisos para acceder a esta cuenta"
+msgstr "Нет прав для доступа к данной учетной записи"
+
+#: ../../../../ajax/ajax_viewpass.php:68 ../../../../inc/Acl.class.php:133
+#: ../../../../inc/themes/classic/account.inc:379
+#: ../../../../inc/themes/classic/profiles.inc:23
+#: ../../../../inc/themes/classic/search.inc:100
+#: ../../../../inc/themes/material-blue/account.inc:419
+#: ../../../../inc/themes/material-blue/profiles.inc:35
+#: ../../../../inc/themes/material-blue/search.inc:113
+msgid "Ver Clave"
+msgstr "Показать пароль"
+
+#: ../../../../ajax/ajax_viewpass.php:79
+#, fuzzy
+msgid "Clave de Cuenta"
+msgstr "Изменить пароль учетной записи"
+
+#: ../../../../api.php:56
+#, fuzzy
+msgid "Ayuda Parámetros"
+msgstr "Help :: FAQ :: Changelog"
+
+#: ../../../../inc/Account.class.php:28
+#: ../../../../inc/AccountBase.class.php:28
+#: ../../../../inc/AccountHistory.class.php:28
+#: ../../../../inc/AccountInterface.class.php:28
+#: ../../../../inc/AccountSearch.class.php:28 ../../../../inc/Acl.class.php:29
+#: ../../../../inc/Api.class.php:30 ../../../../inc/ApiRequest.class.php:28
+#: ../../../../inc/ApiTokens.class.php:28 ../../../../inc/Auth.class.php:29
+#: ../../../../inc/Auth2FA.class.php:32 ../../../../inc/Backup.class.php:28
+#: ../../../../inc/Category.class.php:29 ../../../../inc/Common.class.php:28
+#: ../../../../inc/Config.class.php:28 ../../../../inc/Controller.class.php:31
+#: ../../../../inc/Crypt.class.php:28 ../../../../inc/CsvImport.class.php:28
+#: ../../../../inc/CsvImportBase.class.php:28
+#: ../../../../inc/Customer.class.php:29 ../../../../inc/DB.class.php:28
+#: ../../../../inc/DBConnectionFactory.class.php:30
+#: ../../../../inc/FileImport.class.php:28 ../../../../inc/Files.class.php:29
+#: ../../../../inc/Groups.class.php:29 ../../../../inc/Html.class.php:28
+#: ../../../../inc/ImageUtil.class.php:28 ../../../../inc/Import.class.php:29
+#: ../../../../inc/ImportBase.class.php:28 ../../../../inc/Init.class.php:30
+#: ../../../../inc/Installer.class.php:29
+#: ../../../../inc/KeepassImport.class.php:28
+#: ../../../../inc/KeepassXImport.class.php:28
+#: ../../../../inc/Ldap.class.php:29 ../../../../inc/LdapADS.class.php:28
+#: ../../../../inc/Log.class.php:28 ../../../../inc/Migrate.class.php:28
+#: ../../../../inc/Profile.class.php:29
+#: ../../../../inc/ProfileBase.class.php:28
+#: ../../../../inc/Request.class.php:111 ../../../../inc/Session.class.php:28
+#: ../../../../inc/SyspassImport.class.php:28
+#: ../../../../inc/Upgrade.class.php:29 ../../../../inc/User.class.php:28
+#: ../../../../inc/UserLdap.class.php:28
+#: ../../../../inc/UserPreferences.class.php:28
+#: ../../../../inc/UserUtil.class.php:28 ../../../../inc/Util.class.php:31
+#: ../../../../inc/XmlImport.class.php:28
+#: ../../../../inc/XmlImportBase.class.php:28
+#: ../../../../web/AccountC.class.php:38
+#: ../../../../web/AccountsMgmtC.class.php:32
+#: ../../../../web/ConfigC.class.php:31 ../../../../web/EventlogC.class.php:28
+#: ../../../../web/SearchC.class.php:30
+#: ../../../../web/UsersMgmtC.class.php:39
+#: ../../../../web/UsersPrefsC.class.php:32
msgid "No es posible acceder directamente a este archivo"
msgstr "Невозможно обратиться к файлу напрямую"
-#: ../../../../inc/account.class.php:325 ../../../../inc/account.class.php:855
+#: ../../../../inc/Account.class.php:112 ../../../../inc/Account.class.php:185
+#: ../../../../inc/Account.class.php:636
msgid "Error al actualizar el historial"
msgstr "Ошибка при обновлении истории"
-#: ../../../../inc/account.class.php:331
+#: ../../../../inc/Account.class.php:117
msgid "Actualizar Cuenta"
msgstr "Редактировать учетную запись"
-#: ../../../../inc/account.class.php:334 ../../../../inc/account.class.php:562
+#: ../../../../inc/Account.class.php:120 ../../../../inc/Account.class.php:383
msgid "Error al actualizar los grupos secundarios"
msgstr "Ошибка изменения вторичных групп"
-#: ../../../../inc/account.class.php:340 ../../../../inc/account.class.php:570
+#: ../../../../inc/Account.class.php:126 ../../../../inc/Account.class.php:391
msgid "Error al actualizar los usuarios de la cuenta"
msgstr "Ошибка изменения пользователей с доступом к учетной записи"
-#: ../../../../inc/account.class.php:345
+#: ../../../../inc/Account.class.php:217
msgid "Restaurar Cuenta"
msgstr "Восстановление учетной записи"
-#: ../../../../inc/account.class.php:579 ../../../../inc/tpl/accounts.php:47
-#: ../../../../inc/tpl/main.php:53
+#: ../../../../inc/Account.class.php:326
+#: ../../../../inc/AccountHistory.class.php:343
+#: ../../../../inc/AccountHistory.class.php:505
+#, fuzzy
+msgid "No se pudieron obtener los datos de la cuenta"
+msgstr "Ошибка получения паролей для учетной записи"
+
+#: ../../../../inc/Account.class.php:400 ../../../../inc/Acl.class.php:129
+#: ../../../../web/AccountC.class.php:147 ../../../../web/MainC.class.php:161
msgid "Nueva Cuenta"
msgstr "Новая учетная запись"
-#: ../../../../inc/account.class.php:597
+#: ../../../../inc/Account.class.php:418
msgid "ERROR: Error en la operación."
msgstr "ОШИБКА: Сбой операции"
-#: ../../../../inc/account.class.php:614
+#: ../../../../inc/Account.class.php:423 ../../../../inc/Acl.class.php:134
+#: ../../../../web/AccountC.class.php:352
+#: ../../../../inc/themes/classic/account.inc:366
+#: ../../../../inc/themes/classic/search.inc:127
+#: ../../../../inc/themes/material-blue/account.inc:413
+#: ../../../../inc/themes/material-blue/search.inc:142
+msgid "Eliminar Cuenta"
+msgstr "Удалить учетную запись"
+
+#: ../../../../inc/Account.class.php:436
msgid "Error al eliminar grupos asociados a la cuenta"
msgstr "Ошибка удаления групп учетной записи"
-#: ../../../../inc/account.class.php:618
+#: ../../../../inc/Account.class.php:440
msgid "Error al eliminar usuarios asociados a la cuenta"
msgstr "Ошибка удаления пользователей учетной записи"
-#: ../../../../inc/account.class.php:622
+#: ../../../../inc/Account.class.php:444
msgid "Error al eliminar archivos asociados a la cuenta"
msgstr "Ошибка удаления файлов учетной записи"
-#: ../../../../inc/account.class.php:750 ../../../../inc/account.class.php:904
+#: ../../../../inc/Account.class.php:498
+#: ../../../../inc/AccountHistory.class.php:124
+#: ../../../../inc/XmlImport.class.php:62
msgid "Inicio"
msgstr "Старт"
-#: ../../../../inc/account.class.php:758 ../../../../inc/account.class.php:912
+#: ../../../../inc/Account.class.php:503
+#: ../../../../inc/AccountHistory.class.php:130
msgid "Error en el módulo de encriptación"
msgstr "Ошибка в модуле шифрования"
-#: ../../../../inc/account.class.php:766 ../../../../inc/account.class.php:920
+#: ../../../../inc/Account.class.php:511
+#: ../../../../inc/AccountHistory.class.php:138
msgid "Error al obtener las claves de las cuentas"
msgstr "Ошибка получения паролей для учетной записи"
-#: ../../../../inc/account.class.php:792
+#: ../../../../inc/Account.class.php:527
+#: ../../../../inc/AccountHistory.class.php:160
+#, fuzzy
+msgid "Clave de cuenta vacía"
+msgstr "Изменить пароль учетной записи"
+
+#: ../../../../inc/Account.class.php:532
+#: ../../../../inc/AccountHistory.class.php:165
+#, fuzzy
+msgid "IV de encriptación incorrecto"
+msgstr "Количество полей неправильно"
+
+#: ../../../../inc/Account.class.php:541
+#: ../../../../inc/AccountHistory.class.php:174
+#, fuzzy
+msgid "No es posible desencriptar la clave de la cuenta"
+msgstr "Все пароли учетных записей будут зашифрованы вновь."
+
+#: ../../../../inc/Account.class.php:547
msgid "Fallo al actualizar la clave de la cuenta"
msgstr "Ошибка изменения пароля учетной записи"
-#: ../../../../inc/account.class.php:804
-msgid "Cuentas actualizadas:"
+#: ../../../../inc/Account.class.php:561
+#, fuzzy
+msgid "Cuentas actualizadas"
msgstr "Обновлены учетные записи:"
-#: ../../../../inc/account.class.php:809 ../../../../inc/account.class.php:968
+#: ../../../../inc/Account.class.php:566
+#: ../../../../inc/AccountHistory.class.php:199
msgid "Fin"
msgstr "Конец"
-#: ../../../../inc/account.class.php:878
+#: ../../../../inc/Account.class.php:665
msgid "Modificar Clave"
msgstr "Изменить пароль"
-#: ../../../../inc/account.class.php:903
+#: ../../../../inc/Account.class.php:700
+#, fuzzy
+msgid "No se pudieron obtener los datos de las cuentas"
+msgstr "Ошибка получения паролей для учетной записи"
+
+#: ../../../../inc/AccountHistory.class.php:123
msgid "Actualizar Clave Maestra (H)"
msgstr "Изменить мастер-пароль (H)"
-#: ../../../../inc/account.class.php:934
+#: ../../../../inc/AccountHistory.class.php:155
msgid "La clave maestra del registro no coincide"
msgstr "Мастер-пароль не совпадает"
-#: ../../../../inc/account.class.php:950
+#: ../../../../inc/AccountHistory.class.php:180
msgid "Fallo al actualizar la clave del histórico"
msgstr "Ошибка обновления истории мастер-паролей"
-#: ../../../../inc/account.class.php:963
-msgid "Registros actualizados:"
+#: ../../../../inc/AccountHistory.class.php:194
+#, fuzzy
+msgid "Registros actualizados"
msgstr "Записи изменены"
-#: ../../../../inc/acl.class.php:104
+#: ../../../../inc/Acl.class.php:112
msgid "Denegado acceso a"
msgstr "Доступ запрещен к"
-#: ../../../../inc/auth.class.php:195
+#: ../../../../inc/Acl.class.php:126
+#, fuzzy
+msgid "Buscar Cuentas"
+msgstr "Поиск"
+
+#: ../../../../inc/Acl.class.php:127
+#, fuzzy
+msgid "Ver Cuenta"
+msgstr "Просмотр деталей учетной записи"
+
+#: ../../../../inc/Acl.class.php:128 ../../../../web/AccountC.class.php:259
+#: ../../../../inc/themes/classic/search.inc:121
+#: ../../../../inc/themes/material-blue/search.inc:136
+msgid "Copiar Cuenta"
+msgstr "Скопировать учетную запись"
+
+#: ../../../../inc/Acl.class.php:130 ../../../../web/AccountC.class.php:323
+msgid "Editar Cuenta"
+msgstr "Изменить учетную запись"
+
+#: ../../../../inc/Acl.class.php:131
+#, fuzzy
+msgid "Editar Clave de Cuenta"
+msgstr "Изменить пароль учетной записи"
+
+#: ../../../../inc/Acl.class.php:132
+#: ../../../../inc/themes/classic/profiles.inc:28
+#: ../../../../inc/themes/material-blue/profiles.inc:40
+msgid "Ver Historial"
+msgstr "Показать историю"
+
+#: ../../../../inc/Acl.class.php:135
+#: ../../../../inc/themes/classic/account.inc:188
+#: ../../../../inc/themes/classic/profiles.inc:50
+#: ../../../../inc/themes/material-blue/account.inc:230
+#: ../../../../inc/themes/material-blue/config.inc:224
+#: ../../../../inc/themes/material-blue/profiles.inc:60
+msgid "Archivos"
+msgstr "Файлы"
+
+#: ../../../../inc/Acl.class.php:136
+#, fuzzy
+msgid "Peticiones"
+msgstr "Включить запросы по email"
+
+#: ../../../../inc/Acl.class.php:137
+#, fuzzy
+msgid "Gestión Aplicación"
+msgstr "Управление"
+
+#: ../../../../inc/Acl.class.php:138
+#, fuzzy
+msgid "Gestión Categorías"
+msgstr "Управление категориями"
+
+#: ../../../../inc/Acl.class.php:139
+#, fuzzy
+msgid "Gestión Clientes"
+msgstr "Управление заказчиками"
+
+#: ../../../../inc/Acl.class.php:140
+#, fuzzy
+msgid "Gestión Campos Personalizados"
+msgstr "Управление"
+
+#: ../../../../inc/Acl.class.php:141
+#, fuzzy
+msgid "Gestión Autorizaciones API"
+msgstr "Управление"
+
+#: ../../../../inc/Acl.class.php:142 ../../../../inc/Acl.class.php:143
+#, fuzzy
+msgid "Gestión Usuarios"
+msgstr "Управление пользователями"
+
+#: ../../../../inc/Acl.class.php:144
+#, fuzzy
+msgid "Gestión Grupos"
+msgstr "Управление группами"
+
+#: ../../../../inc/Acl.class.php:145
+#, fuzzy
+msgid "Gestión Perfiles"
+msgstr "Управление профилями"
+
+#: ../../../../inc/Acl.class.php:146 ../../../../inc/Config.class.php:118
+#: ../../../../inc/Config.class.php:400 ../../../../web/MainC.class.php:179
+#: ../../../../inc/themes/classic/profiles.inc:57
+#: ../../../../inc/themes/material-blue/profiles.inc:66
+msgid "Configuración"
+msgstr "Конфигурация"
+
+#: ../../../../inc/Acl.class.php:147
+#, fuzzy
+msgid "Configuración General"
+msgstr "Основная конфигурация"
+
+#: ../../../../inc/Acl.class.php:148 ../../../../web/ConfigC.class.php:149
+#: ../../../../inc/themes/classic/profiles.inc:65
+#: ../../../../inc/themes/material-blue/profiles.inc:77
+#, fuzzy
+msgid "Encriptación"
+msgstr "Ошибка в модуле шифрования"
+
+#: ../../../../inc/Acl.class.php:149 ../../../../web/ConfigC.class.php:194
+#: ../../../../inc/themes/classic/backup.inc:4
+#: ../../../../inc/themes/material-blue/backup.inc:4
+msgid "Copia de Seguridad"
+msgstr "Backup"
+
+#: ../../../../inc/Acl.class.php:150
+msgid "Exportar"
+msgstr ""
+
+#: ../../../../inc/Acl.class.php:151
+#: ../../../../inc/themes/classic/profiles.inc:74
+#: ../../../../inc/themes/material-blue/profiles.inc:87
+#, fuzzy
+msgid "Importar"
+msgstr "Импорт учетных записей"
+
+#: ../../../../inc/Api.class.php:65 ../../../../inc/Api.class.php:88
+#: ../../../../inc/Api.class.php:126
+#, fuzzy
+msgid "Acceso no permitido"
+msgstr "Доступ запрещен к"
+
+#: ../../../../inc/Api.class.php:166
+#, fuzzy
+msgid "Error de codificación"
+msgstr "Ошибка подключения к LDAP"
+
+#: ../../../../inc/ApiRequest.class.php:102
+#, fuzzy
+msgid "Token de autorización"
+msgstr "Запрос на изменение учетной записи"
+
+#: ../../../../inc/ApiRequest.class.php:103
+#, fuzzy
+msgid "Acción a realizar"
+msgstr "Действие"
+
+#: ../../../../inc/ApiRequest.class.php:104
+#, fuzzy
+msgid "Clave de usuario (opcional)"
+msgstr "Изменить пароль пользователя"
+
+#: ../../../../inc/ApiRequest.class.php:105
+#, fuzzy
+msgid "Cadena a buscar"
+msgstr "Поиск"
+
+#: ../../../../inc/ApiRequest.class.php:106
+#, fuzzy
+msgid "Numero de cuentas a mostar en la búsqueda"
+msgstr "Число результатов поиска на страницу"
+
+#: ../../../../inc/ApiRequest.class.php:107
+msgid "Item a devolver"
+msgstr ""
+
+#: ../../../../inc/ApiTokens.class.php:221
+#, fuzzy
+msgid "La autorización ya existe"
+msgstr "База данных уже существует"
+
+#: ../../../../inc/ApiTokens.class.php:307
+#, fuzzy
+msgid "Actualizar Autorización"
+msgstr "Обновить"
+
+#: ../../../../inc/ApiTokens.class.php:331
+#: ../../../../web/UsersMgmtC.class.php:421
+#, fuzzy
+msgid "Eliminar Autorización"
+msgstr "Удалить учетную запись"
+
+#: ../../../../inc/Auth.class.php:107
+#, fuzzy
+msgid "Usuario no pertenece al grupo"
+msgstr "Пользователь не состоит в группах"
+
+#: ../../../../inc/Auth.class.php:187
+#: ../../../../inc/themes/classic/users.inc:117
+#: ../../../../inc/themes/classic/userspass.inc:2
+#: ../../../../inc/themes/material-blue/users.inc:161
+#: ../../../../inc/themes/material-blue/userspass.inc:2
+msgid "Cambio de Clave"
+msgstr "Изменение пароля"
+
+#: ../../../../inc/Auth.class.php:189
msgid "Se ha solicitado el cambio de su clave de usuario."
msgstr "Запрос на смену пароля выполнен."
-#: ../../../../inc/auth.class.php:197
+#: ../../../../inc/Auth.class.php:191
msgid "Para completar el proceso es necesario que acceda a la siguiente URL:"
msgstr "Для завершения, пожалуйста пройдите по ссылке :"
-#: ../../../../inc/auth.class.php:201
+#: ../../../../inc/Auth.class.php:195
msgid "Si no ha solicitado esta acción, ignore este mensaje."
msgstr ""
"Если Вы не запрашивали данное действие, пожалуйста, проигнорируйте данное "
"письмо."
-#: ../../../../inc/backup.class.php:159
+#: ../../../../inc/Backup.class.php:166
msgid "Esta operación sólo es posible en entornos Linux"
msgstr "Данная операция возможна только в Linux"
-#: ../../../../inc/backup.class.php:163
+#: ../../../../inc/Backup.class.php:168
msgid "Error al realizar backup en modo compatibilidad"
msgstr "Ошибка при создании резервной копии в режиме совместимости"
-#: ../../../../inc/backup.class.php:222
+#: ../../../../inc/Backup.class.php:222
+#: ../../../../inc/XmlExport.class.php:464
+#, fuzzy
+msgid "No es posible crear el directorio de backups"
+msgstr "Невозможно создать заказчика"
+
+#: ../../../../inc/Backup.class.php:227
+#: ../../../../inc/XmlExport.class.php:469
msgid "Compruebe los permisos del directorio de backups"
msgstr "Проверьте права на папку резервных копий"
-#: ../../../../inc/category.class.php:183
+#: ../../../../inc/Category.class.php:69
+#: ../../../../inc/Category.class.php:165
+msgid "Nombre de categoría duplicado"
+msgstr "Категория с таким именем уже существует"
+
+#: ../../../../inc/Category.class.php:78
+msgid "Error al crear la categoría"
+msgstr "Ошибка при создании категории"
+
+#: ../../../../inc/Category.class.php:83
+#: ../../../../inc/Category.class.php:132
+#: ../../../../inc/Category.class.php:182
+#: ../../../../web/SearchC.class.php:283
+#: ../../../../inc/themes/classic/account.inc:42
+#: ../../../../inc/themes/classic/search.inc:44
+#: ../../../../inc/themes/material-blue/account.inc:50
+#: ../../../../inc/themes/material-blue/search.inc:49
+msgid "Categoría"
+msgstr "Категория"
+
+#: ../../../../inc/Category.class.php:119
+msgid "Categoría en uso por:"
+msgstr "Категория используется:"
+
+#: ../../../../inc/Category.class.php:129
+msgid "Error al eliminar la categoría"
+msgstr "Ошибка при удалении категории"
+
+#: ../../../../inc/Category.class.php:132
+#: ../../../../web/AccountsMgmtC.class.php:101
+msgid "Eliminar Categoría"
+msgstr "Удалить категорию"
+
+#: ../../../../inc/Category.class.php:179
+msgid "Error al actualizar la categoría"
+msgstr "Ошибка изменения информации о категории"
+
+#: ../../../../inc/Category.class.php:182
msgid "Modificar Categoría"
msgstr "Изменить категорию"
-#: ../../../../inc/common.class.php:61 ../../../../inc/users.class.php:108
-msgid "N/D"
-msgstr "N/A"
-
-#: ../../../../inc/common.class.php:62
-msgid "Acción"
-msgstr "Действие"
-
-#: ../../../../inc/common.class.php:63
-msgid "Realizado por"
-msgstr "Выполнено"
-
-#: ../../../../inc/common.class.php:81
-msgid "Correo enviado"
-msgstr "Email выслан"
-
-#: ../../../../inc/common.class.php:83
-msgid "Error al enviar correo"
-msgstr "Ошибка отправка email"
-
-#: ../../../../inc/common.class.php:88
-msgid "Destinatario"
-msgstr "Получатель"
-
-#: ../../../../inc/common.class.php:89
-msgid "CC"
-msgstr "CC"
-
-#: ../../../../inc/common.class.php:91
-msgid "Enviar Email"
-msgstr "Отправить email"
-
-#: ../../../../inc/common.class.php:146
-msgid "Aviso"
-msgstr "Предупреждение"
-
-#: ../../../../inc/common.class.php:210
-msgid "Indicar el usuario de conexión a la base de datos de phpPMS"
-msgstr "Введите пользователя для подключения к базе phpPMS"
-
-#: ../../../../inc/common.class.php:211
-msgid "Indicar el nombre de la base de datos de phpPMS"
-msgstr "Введите имя базы phpPMS"
-
-#: ../../../../inc/common.class.php:212
-msgid "Indicar el servidor de la base de datos de phpPMS"
-msgstr "Введите имя сервера с базой phpPMS"
-
-#: ../../../../inc/common.class.php:213
-msgid ""
-"Habilita el nombre de la cuenta de la búsqueda, como enlace a los detalles "
-"de la cuenta"
-msgstr "Превращает имя учетной записи в ссылку на её детали на странице поиска"
-
-#: ../../../../inc/common.class.php:214
-msgid "Número de resultados por página a mostrar, al realizar una búsqueda"
-msgstr "Число результатов поиска на страницу"
-
-#: ../../../../inc/common.class.php:215
-msgid "Habilita la subida/descarga de archivos para las cuentas"
-msgstr "Включает загрузку/скачивание файлов учетной записи"
-
-#: ../../../../inc/common.class.php:216
-msgid "Establece el tamaño máximo para subir archivos"
-msgstr "Максимальный размер загружаемого файла."
-
-#: ../../../../inc/common.class.php:216
-msgid "El máximo absuluto es de 16MB"
-msgstr "Абсолютный максимум 16MB."
-
-#: ../../../../inc/common.class.php:217
-msgid ""
-"Habilita la opción de añadir un enlace a Wiki externa para los resultados de "
-"la búsqueda"
-msgstr ""
-"Включает возможность добавления внешней ссылки на страницу результатов "
-"поиска учетной записи в Wiki."
-
-#: ../../../../inc/common.class.php:218
-msgid ""
-"URL que utiliza la wiki para realizar una búsqueda de una página en esta"
-msgstr "URL системы поиска в wiki."
-
-#: ../../../../inc/common.class.php:218
-msgid "Como parámetro se utiliza el nombre del cliente"
-msgstr "Использует имя заказчика как параметр."
-
-#: ../../../../inc/common.class.php:218 ../../../../inc/common.class.php:219
-#: ../../../../inc/common.class.php:222 ../../../../inc/common.class.php:223
-#: ../../../../inc/common.class.php:224
-msgid "Ejemplo"
-msgstr "Пример"
-
-#: ../../../../inc/common.class.php:219
-msgid ""
-"URL que utiliza la wiki para acceder a los detalles de una página de ésta"
-msgstr "URL страницы с данными из wiki."
-
-#: ../../../../inc/common.class.php:219
-msgid ""
-"El nombre de la cuenta se utiliza como parámetro de la variable de búsqueda "
-"de la Wiki"
-msgstr "Имя учетной записи используется как параметр поиска в wiki."
-
-#: ../../../../inc/common.class.php:220
-msgid ""
-"Prefijo para determinar qué cuentas tienen un enlace a una página de la Wiki"
-msgstr "Префикс учетных записей, для которых создавать ссылку на wiki"
-
-#: ../../../../inc/common.class.php:220
-msgid "Ejemplos"
-msgstr "Примеры"
-
-#: ../../../../inc/common.class.php:221
-msgid "Habilita de autentificación mediante servidor LDAP"
-msgstr "Включает аутентификацию по LDAP"
-
-#: ../../../../inc/common.class.php:221
-msgid "Este método utilizará MySQL en caso de fallo"
-msgstr "Этот метод будет переключаться на MySQL при сбоях"
-
-#: ../../../../inc/common.class.php:222
-msgid "Usuario para conectar con el servicio de LDAP"
-msgstr "Пользователь для подключения к серверу LDAP"
-
-#: ../../../../inc/common.class.php:223
-msgid "Base en la que realizar la búsqueda de usuarios de LDAP"
-msgstr "Откуда начинать поиск в LDAP."
-
-#: ../../../../inc/common.class.php:224
-msgid ""
-"Grupo de LDAP al que debe de pertenecer el usuario para permitir el acceso"
-msgstr ""
-"Пользователи из LDAP должны состоять в указанной группе для получения доступа"
-
-#: ../../../../inc/common.class.php:225
-msgid "Nombre o dirección IP del servidor de LDAP"
-msgstr "Адрес сервера LDAP"
-
-#: ../../../../inc/common.class.php:226
-msgid "Establece una nueva clave maestra sin re-encriptar las cuentas"
-msgstr "Устанавливает мастер-пароль без повторного шифрования учетных записей."
-
-#: ../../../../inc/common.class.php:227
-msgid "Clave del usuario de conexión a LDAP"
-msgstr "Пароль пользователя для подключения к LDAP"
-
-#: ../../../../inc/common.class.php:228
-msgid ""
-"En este modo no se puede acceder a la aplicación. Para deshabilitarlo es "
-"necesario modificar el archivo de configuración"
-msgstr ""
-"В данном режиме войти в программу невозможно. Для его отключения необходимо "
-"редактировать файл конфигурации."
-
-#: ../../../../inc/common.class.php:229
-msgid ""
-"Muestra información relativa a la configuración de la aplicación y "
-"rendimiento"
-msgstr "Показывает информацию о программе и производительности."
-
-#: ../../../../inc/common.class.php:230
-msgid "Guarda las acciones realizadas en la aplicación"
-msgstr "Ведет запись действий в программе."
-
-#: ../../../../inc/common.class.php:231
-msgid ""
-"Comprobar actualizaciones de la aplicación (sólo para los usuarios "
-"administradores)"
-msgstr "Проверяет обновления программы (только для администраторов)."
-
-#: ../../../../inc/common.class.php:232
-msgid "Extensiones de máximo 4 caracteres."
-msgstr "Максимальная длина расширения 4 символа."
-
-#: ../../../../inc/common.class.php:232
-msgid "Escribir extensión y pulsar intro para añadir."
-msgstr "Введите расширение и нажмите Enter для добавления."
-
-#: ../../../../inc/common.class.php:233
-msgid ""
-"Importar desde KeePass o KeePassX. El nombre del cliente será igual a "
-"KeePass o KeePassX"
-msgstr ""
-"Импорт из KeePass или KeePassX. Имя заказчика будет KeePass или KeePassX."
-
-#: ../../../../inc/common.class.php:233
-msgid "Importar desde un archivo CSV con el formato"
-msgstr "Импорт из CSV в формате"
-
-#: ../../../../inc/common.class.php:233
-msgid "nombre_de_cuenta;cliente;categoría;url;usuario;clave;notas"
-msgstr "account_name;customer;category;url;user;password;notes"
-
-#: ../../../../inc/common.class.php:233
-msgid ""
-"Si el cliente o la categoría no están creados, se crean automáticamente."
-msgstr "Если заказчика или категории нет, они будут автоматически созданы."
-
-#: ../../../../inc/common.class.php:234
-msgid ""
-"Permite que las cuentas sin acceso sean visibles sólo para las búsquedas."
-msgstr "Разрешает показ недоступных учетных записей при поиске."
-
-#: ../../../../inc/common.class.php:235
-msgid "Muestra los resultados de búsqueda de cuentas en formato tarjeta."
-msgstr "Включает показ учетных записей в результатах поиска в виде карточек."
-
-#: ../../../../inc/common.class.php:236
-msgid "Habilita el modo de conexión con LDAP de Active Directory."
-msgstr "Включает режим подключения Active Directory к серверу LDAP."
-
-#: ../../../../inc/common.class.php:237
-msgid ""
-"Define el grupo de usuarios por defecto para los nuevos usuarios de LDAP."
-msgstr "Задает группу по умолчанию для новых пользователей из LDAP"
-
-#: ../../../../inc/common.class.php:238
-msgid ""
-"Define el perfil de usuario por defecto para los nuevos usuarios de LDAP."
-msgstr "Задает профиль по умолчанию для новых пользователей из LDAP"
-
-#: ../../../../inc/config.class.php:122 ../../../../inc/config.class.php:150
+#: ../../../../inc/Config.class.php:118 ../../../../inc/Config.class.php:401
msgid "Modificar configuración"
msgstr "Изменить конфигурацию"
-#: ../../../../inc/config.class.php:151
-msgid "Parámetro"
-msgstr "Параметр"
-
-#: ../../../../inc/config.class.php:152
-msgid "Valor"
-msgstr "Значение"
-
-#: ../../../../inc/config.class.php:310
+#: ../../../../inc/Config.class.php:276
msgid "No es posible escribir el archivo de configuración"
msgstr "Ошибка записи файла конфигурации"
-#: ../../../../inc/config.class.php:311
+#: ../../../../inc/Config.class.php:276
msgid "Compruebe los permisos del directorio \"config\""
msgstr "Пожалуйста, проверьте права на папку \"config\""
-#: ../../../../inc/customer.class.php:105
-msgid "Actualizar Cliente"
-msgstr "Изменить заказчика"
+#: ../../../../inc/Config.class.php:402
+msgid "Parámetro"
+msgstr "Параметр"
-#: ../../../../inc/db.class.php:95 ../../../../inc/db.class.php:109
-#: ../../../../inc/db.class.php:116 ../../../../inc/installer.class.php:214
-msgid "No es posible conectar con la BD"
-msgstr "Невозможно подключиться к базе данных"
+#: ../../../../inc/Config.class.php:403
+msgid "Valor"
+msgstr "Значение"
-#: ../../../../inc/db.class.php:95 ../../../../inc/installer.class.php:215
-msgid "Compruebe los datos de conexión"
-msgstr "Пожалуйста, проверьте параметры подключения"
-
-#: ../../../../inc/groups.class.php:183
-msgid "Modificar Grupo"
-msgstr "Редактировать группу"
-
-#: ../../../../inc/html.class.php:207
-msgid "Javascript es necesario para el correcto funcionamiento"
-msgstr "Javascript необходим для корректной работы"
-
-#: ../../../../inc/html.class.php:231
-msgid "Ayuda :: FAQ :: Changelog"
-msgstr "Help :: FAQ :: Changelog"
-
-#: ../../../../inc/html.class.php:233
-msgid "Un proyecto de cygnux.org"
-msgstr "Проект cygnux.org"
-
-#: ../../../../inc/html.class.php:277
-msgid "Filtro ON"
-msgstr "Включен фильтр"
-
-#: ../../../../inc/html.class.php:279
-msgid "Global ON"
-msgstr "Глобальный"
-
-#: ../../../../inc/html.class.php:284 ../../../../inc/html.class.php:318
-msgid "Primera página"
-msgstr "Первая страница"
-
-#: ../../../../inc/html.class.php:285 ../../../../inc/html.class.php:319
-msgid "Página anterior"
-msgstr "Прошлая страница"
-
-#: ../../../../inc/html.class.php:292 ../../../../inc/html.class.php:326
-msgid "Página siguiente"
-msgstr "Следующая страница"
-
-#: ../../../../inc/html.class.php:293 ../../../../inc/html.class.php:327
-msgid "Última página"
-msgstr "Последняя страница"
-
-#: ../../../../inc/html.class.php:424
+#: ../../../../inc/Controller.class.php:165
msgid "Opción no disponible"
msgstr "Опция недоступна"
-#: ../../../../inc/html.class.php:424 ../../../../inc/html.class.php:425
-#: ../../../../inc/html.class.php:426 ../../../../inc/init.php:630
+#: ../../../../inc/Controller.class.php:165
+#: ../../../../inc/Controller.class.php:166
+#: ../../../../inc/Controller.class.php:167
+#: ../../../../inc/Controller.class.php:168 ../../../../inc/Init.class.php:290
msgid "Consulte con el administrador"
msgstr "Пожалуйста, свяжитесь с администратором"
-#: ../../../../inc/html.class.php:426
+#: ../../../../inc/Controller.class.php:167
msgid "No tiene permisos para acceder a esta página"
msgstr "Нет прав для доступа к данной странице"
-#: ../../../../inc/import.class.php:89 ../../../../inc/migrate.class.php:117
-msgid "Importación finalizada"
-msgstr "Импорт завершен"
+#: ../../../../inc/Controller.class.php:168
+msgid "No tiene permisos para realizar esta operación"
+msgstr "Нет прав для данной операции"
-#: ../../../../inc/import.class.php:105
-msgid "Archivo no subido correctamente"
-msgstr "Файл успешно закачан"
+#: ../../../../inc/Crypt.class.php:236
+msgid "No se puede usar el módulo de encriptación"
+msgstr "Модуль криптографии не может быть загружен"
-#: ../../../../inc/import.class.php:105
-msgid "Verifique los permisos del usuario del servidor web"
-msgstr "Пожалуйста, проверьте права пользователя веб-сервера "
+#: ../../../../inc/Crypt.class.php:247
+msgid "Error al generar datos cifrados"
+msgstr "Ошибка при создании шифрованных данных"
-#: ../../../../inc/import.class.php:113
-msgid "Compruebe la extensión del archivo"
-msgstr "Пожалуйста, проверьте расширение файла"
+#: ../../../../inc/CryptPKI.class.php:44
+#, fuzzy
+msgid "No es posible generar las claves RSA"
+msgstr "Невозможно создать заказчика"
-#: ../../../../inc/import.class.php:124
-msgid "Compruebe la configuración de PHP para subir archivos"
-msgstr "Пожалуйста, проверьте конфигурацию PHP для загрузки файлов"
+#: ../../../../inc/CryptPKI.class.php:110
+#: ../../../../inc/CryptPKI.class.php:141
+#, fuzzy
+msgid "El archivo de clave no existe"
+msgstr "Файл не существует"
-#: ../../../../inc/import.class.php:132
-msgid "Compruebe los permisos del directorio temporal"
-msgstr "Пожалуйста, проверьте права для временной папки"
-
-#: ../../../../inc/import.class.php:141
-msgid "Tipo mime no soportado"
-msgstr "Тип Mime не поддерживается"
-
-#: ../../../../inc/import.class.php:141
-msgid "Compruebe el formato del archivo"
-msgstr "Пожалуйста, проверьте формат файла"
-
-#: ../../../../inc/import.class.php:159
-msgid "El número de campos es incorrecto"
+#: ../../../../inc/CsvImportBase.class.php:109
+#, fuzzy, php-format
+msgid "El número de campos es incorrecto (%d)"
msgstr "Количество полей неправильно"
-#: ../../../../inc/import.class.php:159
-msgid "Compruebe el formato del archivo CSV"
+#: ../../../../inc/CsvImportBase.class.php:110
+#, fuzzy, php-format
+msgid "Compruebe el formato del archivo CSV en línea %s"
msgstr "Пожалуйста, проверьте формат файла CSV"
-#: ../../../../inc/import.class.php:164
+#: ../../../../inc/CsvImportBase.class.php:140
+#: ../../../../inc/CsvImportBase.class.php:145
+#: ../../../../inc/Import.class.php:118 ../../../../inc/Import.class.php:124
+#: ../../../../inc/Migrate.class.php:349
+#: ../../../../inc/XmlImport.class.php:62
+#: ../../../../inc/XmlImport.class.php:63
+#: ../../../../web/ConfigC.class.php:216
+msgid "Importar Cuentas"
+msgstr "Импорт учетных записей"
+
+#: ../../../../inc/CsvImportBase.class.php:141
msgid "Error importando cuenta"
msgstr "Ошибка импорта учетной записи"
-#: ../../../../inc/import.class.php:266
-msgid "No es posible procesar el archivo XML"
-msgstr "Невозможно обработать файл XML"
+#: ../../../../inc/CsvImportBase.class.php:142
+#, fuzzy, php-format
+msgid "Error procesando línea %s"
+msgstr "Ошибка импорта учетной записи"
-#: ../../../../inc/import.class.php:294
-msgid "Archivo XML no soportado"
-msgstr "Файл XML не поддерживается"
+#: ../../../../inc/CsvImportBase.class.php:145
+#, fuzzy, php-format
+msgid "Cuenta importada: %s"
+msgstr "Таймаут сессии (секунды)"
-#: ../../../../inc/import.class.php:294
-msgid "No es posible detectar la aplicación que exportó los datos"
-msgstr "Невозможно определить программу, из которой были экспортированы данные"
+#: ../../../../inc/CustomFieldsBase.class.php:81
+#: ../../../../inc/themes/classic/profiles.inc:98
+#: ../../../../inc/themes/material-blue/profiles.inc:114
+msgid "Categorías"
+msgstr "Категории"
-#: ../../../../inc/init.php:136
+#: ../../../../inc/CustomFieldsBase.class.php:82
+#: ../../../../inc/themes/classic/profiles.inc:103
+#: ../../../../inc/themes/material-blue/profiles.inc:119
+msgid "Clientes"
+msgstr "Заказчики"
+
+#: ../../../../inc/CustomFieldsBase.class.php:84
+#: ../../../../inc/themes/classic/account.inc:140
+#: ../../../../inc/themes/classic/profiles.inc:89
+#: ../../../../inc/themes/material-blue/account.inc:166
+#: ../../../../inc/themes/material-blue/profiles.inc:104
+msgid "Grupos"
+msgstr "Группы"
+
+#: ../../../../inc/Customer.class.php:50 ../../../../inc/Customer.class.php:95
+msgid "Cliente duplicado"
+msgstr "Такой заказчик уже существует"
+
+#: ../../../../inc/Customer.class.php:60
+msgid "Error al crear el cliente"
+msgstr "Ошибка при создании заказчика"
+
+#: ../../../../inc/Customer.class.php:112
+msgid "Error al actualizar el cliente"
+msgstr "Ошибка при изменении информации о заказчике"
+
+#: ../../../../inc/Customer.class.php:115
+msgid "Actualizar Cliente"
+msgstr "Изменить заказчика"
+
+#: ../../../../inc/Customer.class.php:150
+msgid "Cliente en uso por:"
+msgstr "Заказчик используется:"
+
+#: ../../../../inc/Customer.class.php:160
+msgid "Error al eliminar el cliente"
+msgstr "Ошибка при удалении заказчика"
+
+#: ../../../../inc/Customer.class.php:163
+#: ../../../../web/AccountsMgmtC.class.php:159
+msgid "Eliminar Cliente"
+msgstr "Удалить заказчика"
+
+#: ../../../../inc/DBConnectionFactory.class.php:87
+#: ../../../../inc/DBConnectionFactory.class.php:89
+#: ../../../../inc/DBConnectionFactory.class.php:103
+#: ../../../../inc/Installer.class.php:235
+#: ../../../../inc/Migrate.class.php:115
+msgid "No es posible conectar con la BD"
+msgstr "Невозможно подключиться к базе данных"
+
+#: ../../../../inc/DBConnectionFactory.class.php:87
+#: ../../../../inc/DBConnectionFactory.class.php:89
+#: ../../../../inc/Installer.class.php:236
+#: ../../../../inc/Migrate.class.php:116
+msgid "Compruebe los datos de conexión"
+msgstr "Пожалуйста, проверьте параметры подключения"
+
+#: ../../../../inc/Email.class.php:59 ../../../../inc/UserUtil.class.php:567
+msgid "N/D"
+msgstr "N/A"
+
+#: ../../../../inc/Email.class.php:60 ../../../../web/UsersMgmtC.class.php:392
+#: ../../../../inc/themes/classic/tokens.inc:20
+#: ../../../../inc/themes/material-blue/tokens.inc:20
+msgid "Acción"
+msgstr "Действие"
+
+#: ../../../../inc/Email.class.php:61
+msgid "Realizado por"
+msgstr "Выполнено"
+
+#: ../../../../inc/Email.class.php:77
+msgid "Enviar Email"
+msgstr "Отправить email"
+
+#: ../../../../inc/Email.class.php:81
+msgid "Correo enviado"
+msgstr "Email выслан"
+
+#: ../../../../inc/Email.class.php:83
+msgid "Error al enviar correo"
+msgstr "Ошибка отправка email"
+
+#: ../../../../inc/Email.class.php:87
+msgid "Destinatario"
+msgstr "Получатель"
+
+#: ../../../../inc/Email.class.php:90
+msgid "CC"
+msgstr "CC"
+
+#: ../../../../inc/Email.class.php:146
+msgid "Aviso"
+msgstr "Предупреждение"
+
+#: ../../../../inc/FileImport.class.php:105
+msgid "Archivo no subido correctamente"
+msgstr "Файл успешно закачан"
+
+#: ../../../../inc/FileImport.class.php:105
+msgid "Verifique los permisos del usuario del servidor web"
+msgstr "Пожалуйста, проверьте права пользователя веб-сервера "
+
+#: ../../../../inc/FileImport.class.php:116
+msgid "Compruebe la extensión del archivo"
+msgstr "Пожалуйста, проверьте расширение файла"
+
+#: ../../../../inc/FileImport.class.php:132
+msgid "Compruebe la configuración de PHP para subir archivos"
+msgstr "Пожалуйста, проверьте конфигурацию PHP для загрузки файлов"
+
+#: ../../../../inc/FileImport.class.php:150
+#: ../../../../inc/FileImport.class.php:168
+msgid "Compruebe los permisos del directorio temporal"
+msgstr "Пожалуйста, проверьте права для временной папки"
+
+#: ../../../../inc/Files.class.php:111
+#: ../../../../inc/themes/classic/files.inc:15
+#: ../../../../inc/themes/material-blue/files.inc:16
+msgid "Eliminar Archivo"
+msgstr "Удалить файл"
+
+#: ../../../../inc/Groups.class.php:155
+#, fuzzy
+msgid "Error al añadir los usuarios del grupo"
+msgstr "Ошибка изменения пользователей с доступом к учетной записи"
+
+#: ../../../../inc/Groups.class.php:256
+#, fuzzy
+msgid "Error al actualizar los usuarios del grupo"
+msgstr "Ошибка изменения пользователей с доступом к учетной записи"
+
+#: ../../../../inc/Groups.class.php:369
+#: ../../../../web/UsersMgmtC.class.php:209
+msgid "Eliminar Grupo"
+msgstr "Удалить группу"
+
+#: ../../../../inc/Groups.class.php:372
+#, fuzzy
+msgid "Error al eliminar los usuarios del grupo"
+msgstr "Ошибка удаления пользователя"
+
+#: ../../../../inc/Import.class.php:109
+msgid "Tipo mime no soportado"
+msgstr "Тип Mime не поддерживается"
+
+#: ../../../../inc/Import.class.php:110
+msgid "Compruebe el formato del archivo"
+msgstr "Пожалуйста, проверьте формат файла"
+
+#: ../../../../inc/Import.class.php:124 ../../../../inc/Import.class.php:127
+#: ../../../../inc/Migrate.class.php:92
+msgid "Importación finalizada"
+msgstr "Импорт завершен"
+
+#: ../../../../inc/Init.class.php:199
msgid "Error en la verificación de la base de datos"
msgstr "Ошибка проверки базы данных"
-#: ../../../../inc/init.php:343
-msgid "El directorio \"/config\" no existe"
-msgstr "Папка \"/config\" не существует."
-
-#: ../../../../inc/init.php:348
-msgid "No es posible escribir en el directorio \"config\""
-msgstr "Невозможно произвести запись в папку \"/config\""
-
-#: ../../../../inc/init.php:356
-msgid "Los permisos del directorio \"/config\" son incorrectos"
-msgstr "Права для папки \"/config\" заданы неверно "
-
-#: ../../../../inc/init.php:356
-msgid "Actual:"
-msgstr "Текущие:"
-
-#: ../../../../inc/init.php:356
-msgid "Necesario: 750"
-msgstr "Требуемые: 750"
-
-#: ../../../../inc/init.php:423
-msgid "Aplicación en mantenimiento"
-msgstr "Программа на ослуживании"
-
-#: ../../../../inc/init.php:423
-msgid "En breve estará operativa"
-msgstr "Скоро работа будет возобновлена"
-
-#: ../../../../inc/init.php:455
-msgid "La aplicación necesita actualizarse"
-msgstr "Необходимо обновить программу"
-
-#: ../../../../inc/init.php:455
-msgid "Si es un administrador pulse en el enlace:"
-msgstr "Если Вы администратор, нажмите на ссылку:"
-
-#: ../../../../inc/init.php:455 ../../../../inc/tpl/upgrade.php:54
-msgid "Actualizar"
-msgstr "Обновить"
-
-#: ../../../../inc/init.php:484
-msgid "Actualización"
-msgstr "Обновить"
-
-#: ../../../../inc/init.php:485
-msgid "Actualización de versión realizada."
-msgstr "Обновление версии завершено."
-
-#: ../../../../inc/init.php:486
-msgid "Versión"
-msgstr "Версия"
-
-#: ../../../../inc/init.php:543
-msgid "Finalizar sesión"
-msgstr "Завершить сессию"
-
-#: ../../../../inc/init.php:545
-msgid "Tiempo inactivo"
-msgstr "Время бездействия"
-
-#: ../../../../inc/init.php:546
-msgid "Tiempo total"
-msgstr "Общее время"
-
-#: ../../../../inc/init.php:624
+#: ../../../../inc/Init.class.php:286
msgid "Sesion"
msgstr "Сессия"
-#: ../../../../inc/init.php:624 ../../../../inc/init.php:629
+#: ../../../../inc/Init.class.php:286 ../../../../inc/Init.class.php:290
msgid "La sesión no puede ser inicializada"
msgstr "Сессия не может быть запущена"
-#: ../../../../inc/installer.class.php:90
+#: ../../../../inc/Init.class.php:417
+msgid "El directorio \"/config\" no existe"
+msgstr "Папка \"/config\" не существует."
+
+#: ../../../../inc/Init.class.php:422
+msgid "No es posible escribir en el directorio \"config\""
+msgstr "Невозможно произвести запись в папку \"/config\""
+
+#: ../../../../inc/Init.class.php:430
+msgid "Los permisos del directorio \"/config\" son incorrectos"
+msgstr "Права для папки \"/config\" заданы неверно "
+
+#: ../../../../inc/Init.class.php:430
+msgid "Actual:"
+msgstr "Текущие:"
+
+#: ../../../../inc/Init.class.php:430
+msgid "Necesario: 750"
+msgstr "Требуемые: 750"
+
+#: ../../../../inc/Init.class.php:479
+msgid "Aplicación en mantenimiento"
+msgstr "Программа на ослуживании"
+
+#: ../../../../inc/Init.class.php:479
+msgid "En breve estará operativa"
+msgstr "Скоро работа будет возобновлена"
+
+#: ../../../../inc/Init.class.php:516
+msgid "Finalizar sesión"
+msgstr "Завершить сессию"
+
+#: ../../../../inc/Init.class.php:518
+msgid "Tiempo inactivo"
+msgstr "Время бездействия"
+
+#: ../../../../inc/Init.class.php:519
+msgid "Tiempo total"
+msgstr "Общее время"
+
+#: ../../../../inc/Init.class.php:558
+msgid "La aplicación necesita actualizarse"
+msgstr "Необходимо обновить программу"
+
+#: ../../../../inc/Init.class.php:558
+#, fuzzy, php-format
+msgid "Si es un administrador pulse en el enlace: %s"
+msgstr "Если Вы администратор, нажмите на ссылку:"
+
+#: ../../../../inc/Init.class.php:558
+#: ../../../../inc/themes/classic/upgrade.inc:20
+#: ../../../../inc/themes/material-blue/upgrade.inc:24
+msgid "Actualizar"
+msgstr "Обновить"
+
+#: ../../../../inc/Init.class.php:589
+msgid "Actualización"
+msgstr "Обновить"
+
+#: ../../../../inc/Init.class.php:590
+msgid "Actualización de versión realizada."
+msgstr "Обновление версии завершено."
+
+#: ../../../../inc/Init.class.php:591
+#: ../../../../inc/themes/classic/info.inc:33
+#: ../../../../inc/themes/material-blue/info.inc:33
+msgid "Versión"
+msgstr "Версия"
+
+#: ../../../../inc/Installer.class.php:127
msgid "Indicar nombre de usuario admin"
msgstr "Ввведи имя пользователя администратора"
-#: ../../../../inc/installer.class.php:91
+#: ../../../../inc/Installer.class.php:128
msgid "Usuario admin para acceso a la aplicación"
msgstr "Пользователь администратора для входа в программу"
-#: ../../../../inc/installer.class.php:96
+#: ../../../../inc/Installer.class.php:132
msgid "Indicar la clave de admin"
msgstr "Введите административный пароль"
-#: ../../../../inc/installer.class.php:97
+#: ../../../../inc/Installer.class.php:133
msgid "Clave del usuario admin de la aplicación"
msgstr "Пароль администратора программы"
-#: ../../../../inc/installer.class.php:103
+#: ../../../../inc/Installer.class.php:137
msgid "Indicar la clave maestra"
msgstr "Введите мастер-пароль"
-#: ../../../../inc/installer.class.php:104
+#: ../../../../inc/Installer.class.php:138
msgid "Clave maestra para encriptar las claves"
msgstr "Матер-пароль для шифрования паролей "
-#: ../../../../inc/installer.class.php:109
+#: ../../../../inc/Installer.class.php:142
msgid "Clave maestra muy corta"
msgstr "Длина мастер-пароля мала."
-#: ../../../../inc/installer.class.php:110
+#: ../../../../inc/Installer.class.php:143
msgid "La longitud de la clave maestra ha de ser mayor de 11 caracteres"
msgstr "Мастер-пароль должен быть не менее 11 символов"
-#: ../../../../inc/installer.class.php:116
+#: ../../../../inc/Installer.class.php:147
msgid "Indicar el usuario de la BBDD"
msgstr "Введите пользователя базы данных"
-#: ../../../../inc/installer.class.php:117
+#: ../../../../inc/Installer.class.php:148
msgid "Usuario con permisos de administrador de la Base de Datos"
msgstr "Пользователь с правами администратора для базы данных"
-#: ../../../../inc/installer.class.php:122
+#: ../../../../inc/Installer.class.php:152
msgid "Indicar la clave de la BBDD"
msgstr "Введите пароль базы данных"
-#: ../../../../inc/installer.class.php:123
+#: ../../../../inc/Installer.class.php:153
msgid "Clave del usuario administrador de la Base de Datos"
msgstr "Пароль администратора базы данных"
-#: ../../../../inc/installer.class.php:128
+#: ../../../../inc/Installer.class.php:157
msgid "Indicar el nombre de la BBDD"
msgstr "Введите имя базы данных"
-#: ../../../../inc/installer.class.php:129
+#: ../../../../inc/Installer.class.php:158
msgid "Nombre para la BBDD de la aplicación pej. syspass"
msgstr "Имя базы данных программы. Например, syspass"
-#: ../../../../inc/installer.class.php:134
+#: ../../../../inc/Installer.class.php:162
msgid "El nombre de la BBDD no puede contener \".\""
msgstr "Имя базы данных не может содержать \".\""
-#: ../../../../inc/installer.class.php:135
+#: ../../../../inc/Installer.class.php:163
msgid "Elimine los puntos del nombre de la Base de Datos"
msgstr "Пожалуйста, уберите точки из имени базы данных"
-#: ../../../../inc/installer.class.php:141
+#: ../../../../inc/Installer.class.php:167
msgid "Indicar el servidor de la BBDD"
msgstr "Введите сервер баз данных"
-#: ../../../../inc/installer.class.php:142
+#: ../../../../inc/Installer.class.php:168
msgid "Servidor donde se instalará la Base de Datos"
msgstr "Сервер, на котором будет создана база данных"
-#: ../../../../inc/installer.class.php:260
-msgid "La BBDD ya existe"
-msgstr "База данных уже существует"
-
-#: ../../../../inc/installer.class.php:261
-msgid "Indique una nueva Base de Datos o elimine la existente"
-msgstr "Введите новую базу данных или удалите существующую"
-
-#: ../../../../inc/installer.class.php:286
+#: ../../../../inc/Installer.class.php:313
msgid "El usuario de MySQL ya existe"
msgstr "Пользователь MySQL уже существует"
-#: ../../../../inc/installer.class.php:287
+#: ../../../../inc/Installer.class.php:314
msgid "Indique un nuevo usuario o elimine el existente"
msgstr "Введите новое имя пользователя или удалите существующего"
-#: ../../../../inc/installer.class.php:304
-#: ../../../../inc/installer.class.php:382
+#: ../../../../inc/Installer.class.php:327
+msgid "La BBDD ya existe"
+msgstr "База данных уже существует"
+
+#: ../../../../inc/Installer.class.php:328
+msgid "Indique una nueva Base de Datos o elimine la existente"
+msgstr "Введите новую базу данных или удалите существующую"
+
+#: ../../../../inc/Installer.class.php:337
+#: ../../../../inc/Installer.class.php:408
msgid "Error al crear la BBDD"
msgstr "Ошибка при создании БД."
-#: ../../../../inc/installer.class.php:305
-#: ../../../../inc/installer.class.php:317
+#: ../../../../inc/Installer.class.php:338
+#: ../../../../inc/Installer.class.php:349
msgid "Verifique los permisos del usuario de la Base de Datos"
msgstr "Пожалуйста, проверьте права доступа к базе данных "
-#: ../../../../inc/installer.class.php:316
+#: ../../../../inc/Installer.class.php:348
msgid "Error al establecer permisos de la BBDD"
msgstr "Ошибка при установке прав доступа к базе данных"
-#: ../../../../inc/installer.class.php:360
+#: ../../../../inc/Installer.class.php:381
msgid "El archivo de estructura de la BBDD no existe"
msgstr "Файл структуры базы данных не существует"
-#: ../../../../inc/installer.class.php:361
+#: ../../../../inc/Installer.class.php:382
msgid "No es posible crear la BBDD de la aplicación. Descárguela de nuevo."
msgstr ""
"Невозможно создать базу данных программы. Пожалуйста, скачайте её заново."
-#: ../../../../inc/installer.class.php:367
+#: ../../../../inc/Installer.class.php:390
msgid "Error al seleccionar la BBDD"
msgstr "Ошибка выбора базы данных."
-#: ../../../../inc/installer.class.php:368
+#: ../../../../inc/Installer.class.php:391
msgid ""
"No es posible usar la Base de Datos para crear la estructura. Compruebe los "
"permisos y que no exista."
@@ -1830,1324 +2020,2955 @@ msgstr ""
"Невозможно использовать базу данных для создания её структуры. Проверьте "
"права доступа к базе данных."
-#: ../../../../inc/installer.class.php:383
+#: ../../../../inc/Installer.class.php:409
msgid "Error al crear la estructura de la Base de Datos."
msgstr "Ошибка создания структуры базы данных."
-#: ../../../../inc/installer.class.php:409
+#: ../../../../inc/Installer.class.php:432
msgid "Error al crear el grupo \"admin\""
msgstr "Ошибка создания группы \"admin\""
-#: ../../../../inc/installer.class.php:410
-#: ../../../../inc/installer.class.php:441
-#: ../../../../inc/installer.class.php:459
-#: ../../../../inc/installer.class.php:474
+#: ../../../../inc/Installer.class.php:433
+#: ../../../../inc/Installer.class.php:466
+#: ../../../../inc/Installer.class.php:483
+#: ../../../../inc/Installer.class.php:496
msgid "Informe al desarrollador"
msgstr "Предупреждение разработчику"
-#: ../../../../inc/installer.class.php:440
+#: ../../../../inc/Installer.class.php:465
msgid "Error al crear el perfil \"admin\""
msgstr "Ошибка создания профиля \"admin\""
-#: ../../../../inc/installer.class.php:458
+#: ../../../../inc/Installer.class.php:482
msgid "Error al crear el usuario \"admin\""
msgstr "Ошибка создания пользователя \"admin\""
-#: ../../../../inc/installer.class.php:473
+#: ../../../../inc/Installer.class.php:495
msgid "Error al actualizar la clave maestra del usuario \"admin\""
msgstr "Ошибка обновления мастер-пароля для пользователя \"admin\""
-#: ../../../../inc/ldap.class.php:100 ../../../../inc/ldap.class.php:105
+#: ../../../../inc/Ldap.class.php:127 ../../../../inc/Ldap.class.php:131
msgid "No es posible conectar con el servidor de LDAP"
msgstr "Невозможно подключиться к серверу LDAP"
-#: ../../../../inc/ldap.class.php:130 ../../../../inc/ldap.class.php:136
+#: ../../../../inc/Ldap.class.php:156 ../../../../inc/Ldap.class.php:161
msgid "Error al conectar (BIND)"
msgstr "Ошибка подключения (BIND)"
-#: ../../../../inc/ldap.class.php:159 ../../../../inc/ldap.class.php:165
+#: ../../../../inc/Ldap.class.php:184 ../../../../inc/Ldap.class.php:189
msgid "Error al buscar objetos en DN base"
msgstr "Ошибка поиска объектов в DN"
-#: ../../../../inc/ldap.class.php:193 ../../../../inc/ldap.class.php:199
-#: ../../../../inc/ldap.class.php:206 ../../../../inc/ldap.class.php:211
-#: ../../../../inc/ldap.class.php:221 ../../../../inc/ldap.class.php:226
+#: ../../../../inc/Ldap.class.php:217 ../../../../inc/Ldap.class.php:222
+#: ../../../../inc/Ldap.class.php:229 ../../../../inc/Ldap.class.php:233
+#: ../../../../inc/Ldap.class.php:242 ../../../../inc/Ldap.class.php:246
msgid "Error al buscar RDN de grupo"
msgstr "Ошибка поиска группы в RDN"
-#: ../../../../inc/ldap.class.php:214
-msgid "RDN de grupo encontrado"
-msgstr "Группа в RDN найдена"
-
-#: ../../../../inc/ldap.class.php:278 ../../../../inc/ldap.class.php:284
-#: ../../../../inc/ldap.class.php:299 ../../../../inc/ldap.class.php:304
+#: ../../../../inc/Ldap.class.php:295 ../../../../inc/Ldap.class.php:300
+#: ../../../../inc/Ldap.class.php:314 ../../../../inc/Ldap.class.php:318
msgid "Error al buscar el DN del usuario"
msgstr "Ошибка поиска пользователя в DN"
-#: ../../../../inc/ldap.class.php:291 ../../../../inc/ldap.class.php:296
+#: ../../../../inc/Ldap.class.php:307 ../../../../inc/Ldap.class.php:311
msgid "Error al localizar el usuario en LDAP"
msgstr "Ошибка поиска пользователя в LDAP"
-#: ../../../../inc/ldap.class.php:380 ../../../../inc/ldap.class.php:386
+#: ../../../../inc/Ldap.class.php:392 ../../../../inc/Ldap.class.php:397
+#: ../../../../inc/LdapADS.class.php:99 ../../../../inc/LdapADS.class.php:104
msgid "Error al buscar el grupo de usuarios"
msgstr "Ошибка поиска групп пользователя"
-#: ../../../../inc/ldap.class.php:392 ../../../../inc/ldap.class.php:398
-msgid "El usuario no pertenece al grupo"
-msgstr "Пользователь не состоит в группах"
+#: ../../../../inc/Ldap.class.php:404
+#, fuzzy
+msgid "Usuario verificado en grupo"
+msgstr "Группа используется:"
-#: ../../../../inc/log.class.php:82
+#: ../../../../inc/LdapADS.class.php:108 ../../../../inc/LdapADS.class.php:113
+msgid "No se encontró el grupo con ese nombre"
+msgstr "No group found with that name"
+
+#: ../../../../inc/Log.class.php:88
msgid "Vaciar Eventos"
msgstr "Очистить записи"
-#: ../../../../inc/log.class.php:83 ../../../../inc/tpl/eventlog.php:129
+#: ../../../../inc/Log.class.php:88
+#: ../../../../inc/themes/classic/eventlog.inc:100
+#: ../../../../inc/themes/material-blue/eventlog.inc:100
msgid "Vaciar registro de eventos"
msgstr "Очистить журнал событий"
-#: ../../../../inc/migrate.class.php:81
+#: ../../../../inc/Migrate.class.php:52
msgid "Faltan parámetros"
msgstr "Пропущены параметры"
-#: ../../../../inc/migrate.class.php:140
-msgid "El usuario/clave de MySQL no es correcto"
-msgstr "Неверный логин/пароль MySQL "
-
-#: ../../../../inc/migrate.class.php:141
-msgid "Verifique el usuario de conexión con la Base de Datos"
-msgstr "Пожалуйста, проверьте указанного пользователя и пароль."
-
-#: ../../../../inc/migrate.class.php:185
+#: ../../../../inc/Migrate.class.php:149
msgid "La versión no es compatible"
msgstr "Несовместимая версия"
-#: ../../../../inc/migrate.class.php:186
+#: ../../../../inc/Migrate.class.php:150
msgid "Actualice a la última versión de phpPMS"
msgstr "Пожалуйста, обновите phpPMS до последней версии"
-#: ../../../../inc/migrate.class.php:205
+#: ../../../../inc/Migrate.class.php:168
msgid "Error al obtener la configuración"
msgstr "Ошибка получения конфигурации"
-#: ../../../../inc/migrate.class.php:256 ../../../../inc/migrate.class.php:270
+#: ../../../../inc/Migrate.class.php:211 ../../../../inc/Migrate.class.php:224
msgid "Error al vaciar tabla"
msgstr "Ошибка очистки таблицы"
-#: ../../../../inc/migrate.class.php:275
+#: ../../../../inc/Migrate.class.php:229
msgid "Usuario actual no es administrador de la aplicación"
msgstr "Текущий пользователь не является администратором программы"
-#: ../../../../inc/migrate.class.php:323
+#: ../../../../inc/Migrate.class.php:274
msgid "No es posible crear el cliente"
msgstr "Невозможно создать заказчика"
-#: ../../../../inc/migrate.class.php:324
+#: ../../../../inc/Migrate.class.php:275
msgid "Contacte con el desarrollador"
msgstr "Пожалуйста, свяжитесь с разработчиками"
-#: ../../../../inc/migrate.class.php:328
+#: ../../../../inc/Migrate.class.php:279
msgid "Importar Clientes"
msgstr "Импорт заказчиков"
-#: ../../../../inc/migrate.class.php:330 ../../../../inc/migrate.class.php:404
-#: ../../../../inc/migrate.class.php:493 ../../../../inc/migrate.class.php:567
-#: ../../../../inc/migrate.class.php:659 ../../../../inc/migrate.class.php:722
-#: ../../../../inc/migrate.class.php:798 ../../../../inc/migrate.class.php:877
-#: ../../../../inc/migrate.class.php:948
+#: ../../../../inc/Migrate.class.php:281 ../../../../inc/Migrate.class.php:351
+#: ../../../../inc/Migrate.class.php:452 ../../../../inc/Migrate.class.php:525
+#: ../../../../inc/Migrate.class.php:633 ../../../../inc/Migrate.class.php:698
+#: ../../../../inc/Migrate.class.php:772 ../../../../inc/Migrate.class.php:862
+#: ../../../../inc/Migrate.class.php:933
msgid "Registros"
msgstr "Записи"
-#: ../../../../inc/migrate.class.php:350
+#: ../../../../inc/Migrate.class.php:303
msgid "Error al obtener los clientes"
msgstr "Ошибка получения заказчиков"
-#: ../../../../inc/migrate.class.php:389
+#: ../../../../inc/Migrate.class.php:345
msgid "Error al obtener cuentas"
msgstr "Ошибка получения учетных записей"
-#: ../../../../inc/migrate.class.php:430
+#: ../../../../inc/Migrate.class.php:374
msgid "Cliente no encontrado"
msgstr "Заказчик не найден"
-#: ../../../../inc/migrate.class.php:456
+#: ../../../../inc/Migrate.class.php:417
msgid "Error al migrar cuenta"
msgstr "Ошибка импорта учетной записи"
-#: ../../../../inc/migrate.class.php:478
+#: ../../../../inc/Migrate.class.php:446
msgid "Error al obtener los grupos de cuentas"
msgstr "Ошибка получения групп учетных записей"
-#: ../../../../inc/migrate.class.php:491
+#: ../../../../inc/Migrate.class.php:450
msgid "Importar Grupos de Cuentas"
msgstr "Импорт групп учетных записей"
-#: ../../../../inc/migrate.class.php:514
+#: ../../../../inc/Migrate.class.php:472
msgid "Error al crear grupos de cuentas"
msgstr "Ошибка при создании групп учетных записей"
-#: ../../../../inc/migrate.class.php:552
+#: ../../../../inc/Migrate.class.php:519
msgid "Error al obtener el historico de cuentas"
msgstr "Ошибка при получении истории учетных записей"
-#: ../../../../inc/migrate.class.php:565
+#: ../../../../inc/Migrate.class.php:523
msgid "Importar Histórico de Cuentas"
msgstr "Импорт истории учетных записей"
-#: ../../../../inc/migrate.class.php:618
+#: ../../../../inc/Migrate.class.php:592
msgid "Error al crear historico de cuentas"
msgstr "Ошибка создания истории учетных записей"
-#: ../../../../inc/migrate.class.php:644
+#: ../../../../inc/Migrate.class.php:627
msgid "Error al obtener los archivos de cuentas"
msgstr "Ошибка получения файлов учетных записей"
-#: ../../../../inc/migrate.class.php:657
+#: ../../../../inc/Migrate.class.php:631
msgid "Importar Archivos de Cuentas"
msgstr "Импорт файлов учетных записей"
-#: ../../../../inc/migrate.class.php:685
+#: ../../../../inc/Migrate.class.php:663
msgid "Error al crear archivos de cuentas"
msgstr "Ошибка создания файлов учетных записей"
-#: ../../../../inc/migrate.class.php:707
+#: ../../../../inc/Migrate.class.php:692
msgid "Error al obtener las categorías de cuentas"
msgstr "Ошибка получения категорий учетных записей"
-#: ../../../../inc/migrate.class.php:720
+#: ../../../../inc/Migrate.class.php:696
msgid "Importar Categorías de Cuentas"
msgstr "Импорт категорий учетных записей"
-#: ../../../../inc/migrate.class.php:744
+#: ../../../../inc/Migrate.class.php:718
msgid "Error al crear categorías de cuentas"
msgstr "Ошибка получения категорий учетных записей"
-#: ../../../../inc/migrate.class.php:783
+#: ../../../../inc/Migrate.class.php:766
msgid "Error al obtener los usuarios"
msgstr "Ошибка получения пользователей"
-#: ../../../../inc/migrate.class.php:796
+#: ../../../../inc/Migrate.class.php:770
msgid "Importar Usuarios"
msgstr "Импорт пользователей"
-#: ../../../../inc/migrate.class.php:839
+#: ../../../../inc/Migrate.class.php:827
msgid "Error al crear usuarios"
msgstr "Ошибка создания пользователей"
-#: ../../../../inc/migrate.class.php:862
+#: ../../../../inc/Migrate.class.php:856
msgid "Error al obtener los grupos de usuarios"
msgstr "Ошибка получения групп пользователей"
-#: ../../../../inc/migrate.class.php:875
+#: ../../../../inc/Migrate.class.php:860
msgid "Importar Grupos de Usuarios"
msgstr "Импорт групп пользователей"
-#: ../../../../inc/migrate.class.php:900
+#: ../../../../inc/Migrate.class.php:886
msgid "Error al crear los grupos de usuarios"
msgstr "Ошибка добавления групп пользователей"
-#: ../../../../inc/migrate.class.php:946
+#: ../../../../inc/Migrate.class.php:931
msgid "Importar Configuración"
msgstr "Импорт конфигурации"
-#: ../../../../inc/profiles.class.php:258
+#: ../../../../inc/Profile.class.php:69 ../../../../inc/Profile.class.php:123
+#: ../../../../inc/Profile.class.php:128
+#, fuzzy
+msgid "Migrar Perfiles"
+msgstr "Профили"
+
+#: ../../../../inc/Profile.class.php:69
+#, fuzzy
+msgid "Error al obtener perfiles"
+msgstr "Ошибка получения учетных записей"
+
+#: ../../../../inc/Profile.class.php:126
+#, fuzzy
+msgid "Operación realizada correctamente"
+msgstr "Программа успешно обновлена"
+
+#: ../../../../inc/Profile.class.php:128
+#, fuzzy
+msgid "Fallo al realizar la operación"
+msgstr "Ошибка обновления истории мастер-паролей"
+
+#: ../../../../inc/ProfileBase.class.php:164
+#, fuzzy
+msgid "Datos de perfil incorrectos"
+msgstr "Профиль с таким именем уже существует"
+
+#: ../../../../inc/ProfileBase.class.php:550
+#: ../../../../web/UsersMgmtC.class.php:274
+msgid "Eliminar Perfil"
+msgstr "Удалить профиль"
+
+#: ../../../../inc/ProfileBase.class.php:593
msgid "Modificar Perfil"
msgstr "Редактировать профиль"
-#: ../../../../inc/tpl/accounts.php:63
-msgid "Editar Cuenta"
-msgstr "Изменить учетную запись"
+#: ../../../../inc/SyspassImport.class.php:111
+#: ../../../../inc/SyspassImport.class.php:136
+#: ../../../../inc/SyspassImport.class.php:161
+#, fuzzy
+msgid "Formato de XML inválido"
+msgstr "Ошибочный ID"
-#: ../../../../inc/tpl/accounts.php:178
-msgid "Nombre de cuenta"
-msgstr "Имя учетной записи"
-
-#: ../../../../inc/tpl/accounts.php:197
-msgid "Buscar en desplegable o introducir"
-msgstr "Выберите снизу или введите"
-
-#: ../../../../inc/tpl/accounts.php:223
-msgid "URL o IP de acceso"
-msgstr "URL или IP доступа"
-
-#: ../../../../inc/tpl/accounts.php:239
-msgid "Usuario de acceso"
-msgstr "Пользователь доступа"
-
-#: ../../../../inc/tpl/accounts.php:255 ../../../../inc/tpl/editpass.php:61
-msgid "La clave generada se mostrará aquí"
-msgstr "Здесь будет показан сгенерированный пароль"
-
-#: ../../../../inc/tpl/accounts.php:273
-msgid "Notas sobre la cuenta"
-msgstr "Заметки по учетной записи"
-
-#: ../../../../inc/tpl/accounts.php:279
-msgid "Permisos"
-msgstr "Разрешения"
-
-#: ../../../../inc/tpl/accounts.php:306 ../../../../inc/tpl/accounts.php:337
-msgid "Hablitar edición"
-msgstr "Разрешить изменения"
-
-#: ../../../../inc/tpl/accounts.php:307 ../../../../inc/tpl/accounts.php:338
-#: ../../../../inc/tpl/accounts.php:601 ../../../../inc/tpl/masterpass.php:178
-#: ../../../../inc/tpl/migrate.php:132
-msgid "SI"
-msgstr "ДА"
-
-#: ../../../../inc/tpl/accounts.php:307 ../../../../inc/tpl/accounts.php:338
-#: ../../../../inc/tpl/accounts.php:599 ../../../../inc/tpl/masterpass.php:81
-#: ../../../../inc/tpl/masterpass.php:100
-#: ../../../../inc/tpl/masterpass.php:176 ../../../../inc/tpl/migrate.php:81
-#: ../../../../inc/tpl/migrate.php:130
-msgid "NO"
-msgstr "НЕТ"
-
-#: ../../../../inc/tpl/accounts.php:314 ../../../../inc/tpl/profiles.php:90
-msgid "Grupos"
-msgstr "Группы"
-
-#: ../../../../inc/tpl/accounts.php:360 ../../../../inc/tpl/profiles.php:65
-msgid "Archivos"
-msgstr "Файлы"
-
-#: ../../../../inc/tpl/accounts.php:373
-msgid "Soltar archivos aquí (max. 5) o click para seleccionar"
-msgstr "Перетащите файлы сюда (не более 5) или нажмите для выбора"
-
-#: ../../../../inc/tpl/accounts.php:373 ../../../../inc/tpl/config.php:204
-msgid "Tamaño máximo de archivo"
-msgstr "Максимальный размер файла"
-
-#: ../../../../inc/tpl/accounts.php:385
-msgid "Historial"
-msgstr "История"
-
-#: ../../../../inc/tpl/accounts.php:402
-msgid "Seleccionar fecha"
-msgstr "Выберите дату"
-
-#: ../../../../inc/tpl/accounts.php:410 ../../../../inc/tpl/users.php:193
-msgid "Última Modificación"
-msgstr "Последнее изменение"
-
-#: ../../../../inc/tpl/accounts.php:412
-msgid "por"
-msgstr "выполнено"
-
-#: ../../../../inc/tpl/accounts.php:422
-msgid "Visitas"
-msgstr "Просмотров"
-
-#: ../../../../inc/tpl/accounts.php:426
-msgid "Fecha Alta"
-msgstr "Дата создания"
-
-#: ../../../../inc/tpl/accounts.php:430
-msgid "Creador"
-msgstr "Создатель"
-
-#: ../../../../inc/tpl/accounts.php:434
-msgid "Grupo Principal"
-msgstr "Основная группа"
-
-#: ../../../../inc/tpl/accounts.php:439
-msgid "Usuarios Secundarios"
-msgstr "Вторичные пользователи"
-
-#: ../../../../inc/tpl/accounts.php:460
-msgid "Grupos Secundarios"
-msgstr "Вторичные группы"
-
-#: ../../../../inc/tpl/accounts.php:482
-msgid "Fecha Edición"
-msgstr "Дата изменения"
-
-#: ../../../../inc/tpl/accounts.php:486
-msgid "Editor"
-msgstr "Изменил"
-
-#: ../../../../inc/tpl/accounts.php:508
-msgid "Ver Actual"
-msgstr "Просмотр текущей версии"
-
-#: ../../../../inc/tpl/accounts.php:513 ../../../../inc/tpl/editpass.php:85
-#: ../../../../inc/tpl/request.php:72
-msgid "Atrás"
-msgstr "Назад"
-
-#: ../../../../inc/tpl/accounts.php:520
-msgid "Restaurar cuenta desde este punto"
-msgstr "Восстановить учетную запись из текущей точки"
-
-#: ../../../../inc/tpl/accounts.php:549 ../../../../inc/tpl/editpass.php:35
-msgid "Modificar Clave de Cuenta"
-msgstr "Изменить пароль учетной записи"
-
-#: ../../../../inc/tpl/accounts.php:578 ../../../../inc/tpl/search.php:89
-msgid "Seleccionar Cliente"
-msgstr "Выбрать заказчика"
-
-#: ../../../../inc/tpl/accounts.php:580 ../../../../inc/tpl/accounts.php:585
-#: ../../../../inc/tpl/config.php:601 ../../../../inc/tpl/config.php:606
-#: ../../../../inc/tpl/search.php:89 ../../../../inc/tpl/search.php:90
-#: ../../../../inc/tpl/users.php:231 ../../../../inc/tpl/users.php:236
-msgid "Sin resultados"
-msgstr "Нет результатов"
-
-#: ../../../../inc/tpl/accounts.php:583 ../../../../inc/tpl/search.php:90
-msgid "Seleccionar Categoría"
-msgstr "Выбрать категорию"
-
-#: ../../../../inc/tpl/accounts.php:588
-msgid "Seleccionar grupos secundarios"
-msgstr "Выберите вторичные группы"
-
-#: ../../../../inc/tpl/accounts.php:591
-msgid "Seleccionar usuarios"
-msgstr "Выберите пользователей"
-
-#: ../../../../inc/tpl/backup.php:42
-msgid "Último backup"
-msgstr "Последняя резервная копия"
-
-#: ../../../../inc/tpl/backup.php:42
-msgid "No se encontraron backups"
-msgstr "Резервные копии не найдены"
-
-#: ../../../../inc/tpl/backup.php:48
-msgid "Resultado"
-msgstr "Результат"
-
-#: ../../../../inc/tpl/backup.php:56
-msgid "Descargar Actual"
-msgstr "Скачать текущий"
-
-#: ../../../../inc/tpl/backup.php:64
-msgid "No hay backups para descargar"
+#: ../../../../inc/SyspassImport.class.php:111
+#, fuzzy
+msgid "No hay categorías para importar"
msgstr "Нет резервных копий для скачивания"
-#: ../../../../inc/tpl/categories.php:42
-msgid "Nombre de la categoría"
-msgstr "Имя категории"
+#: ../../../../inc/SyspassImport.class.php:136
+#, fuzzy
+msgid "No hay clientes para importar"
+msgstr "Импорт заказчиков"
-#: ../../../../inc/tpl/categories.php:50
-msgid "Descripción de la categoría"
-msgstr "Описание категории"
+#: ../../../../inc/SyspassImport.class.php:161
+#, fuzzy
+msgid "No hay cuentas para importar"
+msgstr "Нет резервных копий для скачивания"
-#: ../../../../inc/tpl/config.php:87
-msgid "Sitio"
-msgstr "Сайт"
+#: ../../../../inc/Upgrade.class.php:51
+msgid "Error al aplicar la actualización de la Base de Datos"
+msgstr "Ошибка обновления базы данных"
-#: ../../../../inc/tpl/config.php:95
-msgid "Idioma"
-msgstr "Язык"
+#: ../../../../inc/Upgrade.class.php:52 ../../../../inc/Upgrade.class.php:58
+msgid "Compruebe el registro de eventos para más detalles"
+msgstr "См. журнал событий для получения подробностей."
-#: ../../../../inc/tpl/config.php:109
-msgid "Timeout de sesión (s)"
-msgstr "Таймаут сессии (секунды)"
+#: ../../../../inc/Upgrade.class.php:52 ../../../../inc/Upgrade.class.php:58
+#: ../../../../inc/themes/classic/login.inc:32
+#: ../../../../inc/themes/material-blue/2fa.inc:26
+#: ../../../../inc/themes/material-blue/login.inc:64
+msgid "Acceder"
+msgstr "Войти"
-#: ../../../../inc/tpl/config.php:118
-msgid "Habilitar log de eventos"
-msgstr "Включить журнал событий"
+#: ../../../../inc/Upgrade.class.php:57
+#, fuzzy
+msgid "Error al aplicar la actualización auxiliar"
+msgstr "Ошибка обновления базы данных"
-#: ../../../../inc/tpl/config.php:129
-msgid "Habilitar depuración"
-msgstr "Включить отладку"
+#: ../../../../inc/Upgrade.class.php:74
+msgid "Actualizar BBDD"
+msgstr "Обновление БД"
-#: ../../../../inc/tpl/config.php:140
-msgid "Modo mantenimiento"
-msgstr "Режим обслуживания"
+#: ../../../../inc/Upgrade.class.php:121
+msgid "No es necesario actualizar la Base de Datos."
+msgstr "Обновление базы данных не требуется."
-#: ../../../../inc/tpl/config.php:151
-msgid "Comprobar actualizaciones"
-msgstr "Проверка обновлений"
+#: ../../../../inc/Upgrade.class.php:129
+msgid "Error al aplicar la actualización de la Base de Datos."
+msgstr "Ошибка обновления базы данных."
-#: ../../../../inc/tpl/config.php:162
-msgid "Nombre de cuenta como enlace"
-msgstr "Имя учетной записи как ссылка"
+#: ../../../../inc/Upgrade.class.php:138
+msgid "Actualización de la Base de Datos realizada correctamente."
+msgstr "Обновление базы данных завершено успешно."
-#: ../../../../inc/tpl/config.php:173
-msgid "Gestión de archivos"
-msgstr "Управление файлами"
+#: ../../../../inc/Upgrade.class.php:215
+msgid "Actualizar Configuración"
+msgstr "Обновить конфигурацию"
-#: ../../../../inc/tpl/config.php:184
-msgid "Búsquedas globales"
-msgstr "Глобальные поиски"
+#: ../../../../inc/Upgrade.class.php:215
+msgid "Actualización de la Configuración realizada correctamente."
+msgstr "Конфигурация была успешно обновлена."
-#: ../../../../inc/tpl/config.php:195
-msgid "Extensiones de archivos permitidas"
-msgstr "Разрешенные расширения файлов"
+#: ../../../../inc/UserBase.class.php:386
+#: ../../../../inc/UserBase.class.php:530
+msgid "No se pudo realizar la petición de cambio de clave."
+msgstr "Выполнить запрос на смену пароля невозможно."
-#: ../../../../inc/tpl/config.php:215
-msgid "Resultados por página"
-msgstr "Результатов на страницу"
+#: ../../../../inc/UserBase.class.php:525
+msgid "Modificar Usuario"
+msgstr "Изменить пользователя"
-#: ../../../../inc/tpl/config.php:231
-msgid "Resultados en Tarjetas"
-msgstr "Результаты в виде карточек"
+#: ../../../../inc/UserBase.class.php:592
+#: ../../../../web/UsersMgmtC.class.php:150
+msgid "Eliminar Usuario"
+msgstr "Удалить пользователя"
-#: ../../../../inc/tpl/config.php:244
-msgid "Wiki"
-msgstr "Wiki"
+#: ../../../../inc/UserLdap.class.php:78
+msgid "Activación Cuenta"
+msgstr "Активация учетной записи"
-#: ../../../../inc/tpl/config.php:250
-msgid "Habilitar enlaces Wiki"
-msgstr "Включить ссылки Wiki"
+#: ../../../../inc/UserLdap.class.php:79
+msgid "Su cuenta está pendiente de activación."
+msgstr "Активация Вашей учетной записи в процессе."
-#: ../../../../inc/tpl/config.php:261
-msgid "URL de búsqueda Wiki"
-msgstr "URL для поиска в Wiki"
+#: ../../../../inc/UserLdap.class.php:80
+msgid "En breve recibirá un email de confirmación."
+msgstr "Вы получите письмо в скором времени."
-#: ../../../../inc/tpl/config.php:271
-msgid "URL de página en Wiki"
-msgstr "URL на страницы Wiki"
+#: ../../../../inc/UserLdap.class.php:86
+#, fuzzy
+msgid "Nuevo usuario de LDAP"
+msgstr "Пользователь LDAP"
-#: ../../../../inc/tpl/config.php:281
-msgid "Prefijo para nombre de cuenta"
-msgstr "Префикс учетной записи"
+#: ../../../../inc/UserUtil.class.php:705
+#, fuzzy
+msgid "Migrar Grupos"
+msgstr "Ошибка импорта учетной записи"
-#: ../../../../inc/tpl/config.php:294
-msgid "LDAP"
-msgstr "LDAP"
+#: ../../../../inc/UserUtil.class.php:705
+#, fuzzy
+msgid "Error al migrar grupo del usuario"
+msgstr "Ошибка поиска пользователя в DN"
-#: ../../../../inc/tpl/config.php:301
-msgid "Habilitar LDAP"
-msgstr "Включить LDAP"
+#: ../../../../inc/Util.class.php:123
+#, fuzzy
+msgid "Versión de PHP requerida >= "
+msgstr "Необходим PHP версии >= 5.1"
-#: ../../../../inc/tpl/config.php:312 ../../../../inc/tpl/config.php:425
-msgid "Servidor"
-msgstr "Сервер"
+#: ../../../../inc/Util.class.php:124
+msgid ""
+"Actualice la versión de PHP para que la aplicación funcione correctamente"
+msgstr "Пожалуйста, обновите PHP для использования sysPass"
-#: ../../../../inc/tpl/config.php:322
-msgid "Usuario de conexión"
-msgstr "Пользователь для подключения"
-
-#: ../../../../inc/tpl/config.php:332
-msgid "Clave de conexión"
-msgstr "Пароль для подключения"
-
-#: ../../../../inc/tpl/config.php:342
-msgid "Base de búsqueda"
-msgstr "Начинать поиск с"
-
-#: ../../../../inc/tpl/config.php:362
-msgid "Grupo por Defecto"
-msgstr "Группа по умолчанию"
-
-#: ../../../../inc/tpl/config.php:371
-msgid "Perfil por Defecto"
-msgstr "Профиль по умолчанию"
-
-#: ../../../../inc/tpl/config.php:380
-msgid "Active Directory"
-msgstr "Active Directory"
-
-#: ../../../../inc/tpl/config.php:391
-msgid "Comprobar"
-msgstr "Проверить"
-
-#: ../../../../inc/tpl/config.php:394
-msgid "Comprobar conexión con LDAP"
-msgstr "Проверить подключение к LDAP"
-
-#: ../../../../inc/tpl/config.php:401 ../../../../inc/util.class.php:141
+#: ../../../../inc/Util.class.php:160
+#: ../../../../inc/themes/classic/ldap.inc:212
+#: ../../../../inc/themes/material-blue/ldap.inc:238
msgid "Módulo no disponible"
msgstr "Модуль недоступен"
-#: ../../../../inc/tpl/config.php:409
-msgid "Correo"
-msgstr "Mail"
+#: ../../../../inc/Util.class.php:161
+msgid "Sin este módulo la aplicación puede no funcionar correctamente."
+msgstr "Без этого модуля программа не может работать корректно"
-#: ../../../../inc/tpl/config.php:415
-msgid "Habilitar notificaciones de correo"
-msgstr "Включить уведомления по email"
+#: ../../../../inc/XmlExport.class.php:124
+#, fuzzy
+msgid "Exportar XML"
+msgstr "Импорт CSV/XML"
-#: ../../../../inc/tpl/config.php:434
-msgid "Puerto"
-msgstr "Порт"
+#: ../../../../inc/XmlExport.class.php:409
+#, fuzzy
+msgid "Error al crear el archivo XML"
+msgstr "Ошибка при создании пользователя"
-#: ../../../../inc/tpl/config.php:443
-msgid "Habilitar Autentificación"
-msgstr "Включить аутентификацию"
+#: ../../../../inc/XmlImport.class.php:63
+msgid "Formato detectado"
+msgstr ""
-#: ../../../../inc/tpl/config.php:471
-msgid "Seguridad"
-msgstr "Безопасность"
+#: ../../../../inc/XmlImportBase.class.php:75
+msgid "No es posible procesar el archivo XML"
+msgstr "Невозможно обработать файл XML"
-#: ../../../../inc/tpl/config.php:477
-msgid "Deshabilitada"
-msgstr "Отключена"
+#: ../../../../inc/XmlImportBase.class.php:103
+msgid "Archivo XML no soportado"
+msgstr "Файл XML не поддерживается"
-#: ../../../../inc/tpl/config.php:488
-msgid "Dirección de correo de envío"
-msgstr "Email получателя"
+#: ../../../../inc/XmlImportBase.class.php:104
+msgid "No es posible detectar la aplicación que exportó los datos"
+msgstr "Невозможно определить программу, из которой были экспортированы данные"
-#: ../../../../inc/tpl/config.php:497
-msgid "Habilitar peticiones por correo"
-msgstr "Включить запросы по email"
+#: ../../../../js/strings.js.php:27
+msgid "Error en la consulta"
+msgstr "Ошибка запроса"
-#: ../../../../inc/tpl/config.php:541
-msgid "Añadir extensión"
-msgstr "Добавить расширение"
+#: ../../../../js/strings.js.php:28
+msgid "Ha ocurrido un error"
+msgstr "Произошла ошибка"
-#: ../../../../inc/tpl/config.php:542
-msgid "Eliminar extensión"
-msgstr "Удалить расширение"
+#: ../../../../js/strings.js.php:29
+#: ../../../../inc/themes/classic/login.inc:52
+#: ../../../../inc/themes/material-blue/login.inc:77
+msgid "Sesión finalizada"
+msgstr "Сессия завершена"
-#: ../../../../inc/tpl/config.php:570
-msgid "Añadir filtro"
-msgstr "Добавить фильтр"
+#: ../../../../js/strings.js.php:30
+msgid "Borrar la cuenta?"
+msgstr "Удалить учетную запись?"
-#: ../../../../inc/tpl/config.php:571
-msgid "Eliminar filtro"
-msgstr "Удалить фильтр"
+#: ../../../../js/strings.js.php:31
+msgid "Borrar el usuario?"
+msgstr "Удалить пользователя?"
-#: ../../../../inc/tpl/config.php:599 ../../../../inc/tpl/users.php:234
+#: ../../../../js/strings.js.php:32
+msgid "Guarde la configuración para que sea efectiva"
+msgstr "Необходимо сохранить конфигурацию для вступления изменений в силу"
+
+#: ../../../../js/strings.js.php:33
+msgid "Clave Generada"
+msgstr "Сгенерированный пароль"
+
+#: ../../../../js/strings.js.php:34
+msgid "Nivel alto"
+msgstr "Высокий уровень"
+
+#: ../../../../js/strings.js.php:35
+msgid "Nivel medio"
+msgstr "Средний уровень"
+
+#: ../../../../js/strings.js.php:36
+msgid "Nivel bajo"
+msgstr "Низкий уровень"
+
+#: ../../../../js/strings.js.php:37
+msgid "Nivel muy alto"
+msgstr "Очень высокий уровень"
+
+#: ../../../../js/strings.js.php:38
+msgid "Utilizar al menos 8 caracteres"
+msgstr "Необходимо использовать минимум 8 символов"
+
+#: ../../../../js/strings.js.php:39
+msgid "Borrar elemento?"
+msgstr "Удалить элемент?"
+
+#: ../../../../js/strings.js.php:40
+msgid "Página no encontrada"
+msgstr "Страница не найдена"
+
+#: ../../../../js/strings.js.php:41
+msgid "Archivo no soportado para visualizar"
+msgstr "Предпросмотр файла недоступен"
+
+#: ../../../../js/strings.js.php:42
+msgid "Eliminar archivo?"
+msgstr "Удалить файл?"
+
+#: ../../../../js/strings.js.php:43
+msgid "Su navegador no soporta subir archivos con HTML5"
+msgstr "Ваш браузер не поддерживает загрузку файлов с HTML5"
+
+#: ../../../../js/strings.js.php:44
+msgid "Demasiados archivos"
+msgstr "Слишком много файлов"
+
+#: ../../../../js/strings.js.php:45
+#, fuzzy, php-format
+msgid "No es posible guardar el archivo.%sTamaño máximo:"
+msgstr "Сохранить файл невозможно. Максимальный размер:"
+
+#: ../../../../js/strings.js.php:46
+msgid "Extensión no permitida"
+msgstr "Данный тип файла заблокирован"
+
+#: ../../../../js/strings.js.php:47
+msgid "Vaciar el registro de eventos?"
+msgstr "Очистить журнал событий?"
+
+#: ../../../../js/strings.js.php:48
msgid "Seleccionar Grupo"
msgstr "Выбрать группу"
-#: ../../../../inc/tpl/config.php:604 ../../../../inc/tpl/users.php:229
+#: ../../../../js/strings.js.php:49
+#, fuzzy
+msgid "Seleccionar Usuario"
+msgstr "Выбрать группу"
+
+#: ../../../../js/strings.js.php:50
msgid "Seleccionar Perfil"
msgstr "Выбрать профиль"
-#: ../../../../inc/tpl/customers.php:42
-msgid "Nombre del cliente"
-msgstr "Имя заказчика"
+#: ../../../../js/strings.js.php:51
+msgid "Seleccionar Cliente"
+msgstr "Выбрать заказчика"
-#: ../../../../inc/tpl/customers.php:50
-msgid "Descripción del cliente"
-msgstr "Описание заказчика"
+#: ../../../../js/strings.js.php:52
+msgid "Seleccionar Categoría"
+msgstr "Выбрать категорию"
-#: ../../../../inc/tpl/eventlog.php:37 ../../../../inc/tpl/main.php:57
+#: ../../../../js/strings.js.php:53
+msgid "Sin resultados"
+msgstr "Нет результатов"
+
+#: ../../../../js/strings.js.php:54
+#, fuzzy
+msgid "Opciones de clave"
+msgstr "Опции"
+
+#: ../../../../js/strings.js.php:55
+msgid "Generar clave aleatoria"
+msgstr "Сгенерировать пароль"
+
+#: ../../../../js/strings.js.php:56
+msgid "Complejidad"
+msgstr ""
+
+#: ../../../../js/strings.js.php:57
+msgid "Reset"
+msgstr ""
+
+#: ../../../../js/strings.js.php:58
+#: ../../../../inc/themes/classic/editpass.inc:33
+msgid "Nivel de fortaleza de la clave"
+msgstr "Уровень длины пароля"
+
+#: ../../../../js/strings.js.php:59
+msgid "Mostrar Clave"
+msgstr "Показать пароль"
+
+#: ../../../../js/strings.js.php:60
+#, fuzzy
+msgid "Copiar Usuario"
+msgstr "Скопировать учетную запись"
+
+#: ../../../../js/strings.js.php:61
+#, fuzzy
+msgid "Copiar Clave"
+msgstr "Копирование пароля в буфер"
+
+#: ../../../../js/strings.js.php:62
+msgid "Incluir Números"
+msgstr ""
+
+#: ../../../../js/strings.js.php:63
+msgid "Incluir Mayúsculas"
+msgstr ""
+
+#: ../../../../js/strings.js.php:64
+msgid "Incluir Símbolos"
+msgstr ""
+
+#: ../../../../js/strings.js.php:65
+#, fuzzy
+msgid "Longitud"
+msgstr "Мастер-пароль должен быть не менее 11 символов"
+
+#: ../../../../js/strings.js.php:66
+#, fuzzy
+msgid "Seleccionar Acción"
+msgstr "Действие"
+
+#: ../../../../js/strings.js.php:67
+#: ../../../../inc/themes/classic/account.inc:133
+#: ../../../../inc/themes/classic/account.inc:164
+#: ../../../../inc/themes/classic/account.inc:449
+#: ../../../../inc/themes/classic/install.inc:99
+msgid "SI"
+msgstr "ДА"
+
+#: ../../../../js/strings.js.php:68
+#: ../../../../inc/themes/classic/account.inc:133
+#: ../../../../inc/themes/classic/account.inc:164
+#: ../../../../inc/themes/classic/account.inc:447
+#: ../../../../inc/themes/classic/encryption.inc:61
+#: ../../../../inc/themes/classic/encryption.inc:80
+#: ../../../../inc/themes/classic/import.inc:70
+#: ../../../../inc/themes/classic/install.inc:99
+#: ../../../../inc/themes/classic/tokens.inc:36
+msgid "NO"
+msgstr "НЕТ"
+
+#: ../../../../js/strings.js.php:69
+msgid "Aceptar"
+msgstr ""
+
+#: ../../../../js/strings.js.php:70
+msgid "Cancelar"
+msgstr ""
+
+#: ../../../../web/AccountC.class.php:380
+#: ../../../../web/AccountC.class.php:411
+#: ../../../../inc/themes/classic/search.inc:36
+#: ../../../../inc/themes/classic/search.inc:95
+#: ../../../../inc/themes/material-blue/search.inc:41
+#: ../../../../inc/themes/material-blue/search.inc:108
+msgid "Detalles de Cuenta"
+msgstr "Детали учетной записи"
+
+#: ../../../../web/AccountC.class.php:468
+#: ../../../../inc/themes/classic/account.inc:394
+#: ../../../../inc/themes/material-blue/account.inc:430
+msgid "Modificar Clave de Cuenta"
+msgstr "Изменить пароль учетной записи"
+
+#: ../../../../web/AccountsMgmtC.class.php:79
+#: ../../../../web/AccountsMgmtC.class.php:138
+#: ../../../../web/AccountsMgmtC.class.php:266
+#: ../../../../web/SearchC.class.php:277
+#: ../../../../web/UsersMgmtC.class.php:87
+#: ../../../../web/UsersMgmtC.class.php:187
+#: ../../../../web/UsersMgmtC.class.php:245
+#: ../../../../inc/themes/classic/account.inc:11
+#: ../../../../inc/themes/classic/categories.inc:8
+#: ../../../../inc/themes/classic/customers.inc:8
+#: ../../../../inc/themes/classic/customfields.inc:9
+#: ../../../../inc/themes/classic/editpass.inc:8
+#: ../../../../inc/themes/classic/groups.inc:8
+#: ../../../../inc/themes/classic/info.inc:25
+#: ../../../../inc/themes/classic/profiles.inc:8
+#: ../../../../inc/themes/classic/request.inc:6
+#: ../../../../inc/themes/classic/search.inc:34
+#: ../../../../inc/themes/classic/users.inc:8
+#: ../../../../inc/themes/material-blue/account.inc:15
+#: ../../../../inc/themes/material-blue/categories.inc:8
+#: ../../../../inc/themes/material-blue/customers.inc:8
+#: ../../../../inc/themes/material-blue/customfields.inc:8
+#: ../../../../inc/themes/material-blue/editpass.inc:9
+#: ../../../../inc/themes/material-blue/groups.inc:8
+#: ../../../../inc/themes/material-blue/info.inc:25
+#: ../../../../inc/themes/material-blue/profiles.inc:8
+#: ../../../../inc/themes/material-blue/request.inc:6
+#: ../../../../inc/themes/material-blue/search.inc:39
+#: ../../../../inc/themes/material-blue/users.inc:8
+msgid "Nombre"
+msgstr "Имя"
+
+#: ../../../../web/AccountsMgmtC.class.php:115
+msgid "Gestión de Categorías"
+msgstr "Управление категориями"
+
+#: ../../../../web/AccountsMgmtC.class.php:172
+msgid "Gestión de Clientes"
+msgstr "Управление заказчиками"
+
+#: ../../../../web/AccountsMgmtC.class.php:266
+#: ../../../../inc/themes/classic/customfields.inc:27
+#: ../../../../inc/themes/material-blue/customfields.inc:30
+#, fuzzy
+msgid "Módulo"
+msgstr "Модуль недоступен"
+
+#: ../../../../web/AccountsMgmtC.class.php:287
+#, fuzzy
+msgid "Eliminar Campo"
+msgstr "Удалить учетную запись"
+
+#: ../../../../web/AccountsMgmtC.class.php:300
+#: ../../../../inc/themes/classic/profiles.inc:107
+#: ../../../../inc/themes/material-blue/profiles.inc:124
+msgid "Campos Personalizados"
+msgstr ""
+
+#: ../../../../web/ConfigC.class.php:185
+msgid "Último backup"
+msgstr "Последняя резервная копия"
+
+#: ../../../../web/ConfigC.class.php:185
+msgid "No se encontraron backups"
+msgstr "Резервные копии не найдены"
+
+#: ../../../../web/ConfigC.class.php:192
+#, fuzzy
+msgid "Última exportación"
+msgstr "Последнее изменение"
+
+#: ../../../../web/ConfigC.class.php:192
+#, fuzzy
+msgid "No se encontró archivo de exportación"
+msgstr "Ошибка записи файла конфигурации"
+
+#: ../../../../web/ConfigC.class.php:237
+#, fuzzy
+msgid "Información"
+msgstr "Показывает информацию о программе и производительности."
+
+#: ../../../../web/EventlogC.class.php:93
+msgid "Registro de eventos vaciado"
+msgstr "Журнал очищен"
+
+#: ../../../../web/EventlogC.class.php:95
+msgid "Error al vaciar el registro de eventos"
+msgstr "Ошибка очистки журнала"
+
+#: ../../../../web/MainC.class.php:137
+#: ../../../../web/UsersMgmtC.class.php:100
+msgid "Admin Aplicación"
+msgstr "Администратор программы"
+
+#: ../../../../web/MainC.class.php:155
+msgid "Buscar"
+msgstr "Поиск"
+
+#: ../../../../web/MainC.class.php:167
+#: ../../../../web/UsersMgmtC.class.php:163
+msgid "Gestión de Usuarios"
+msgstr "Управление пользователями"
+
+#: ../../../../web/MainC.class.php:173
+msgid "Gestión de Clientes y Categorías"
+msgstr "Управление заказчиками и категориями"
+
+#: ../../../../web/MainC.class.php:185
+#: ../../../../inc/themes/classic/eventlog.inc:4
+#: ../../../../inc/themes/material-blue/eventlog.inc:3
msgid "Registro de Eventos"
msgstr "Журнал событий"
-#: ../../../../inc/tpl/eventlog.php:56
-msgid "Fecha / Hora"
-msgstr "Дата / Время"
+#: ../../../../web/MainC.class.php:205
+msgid "Nuevo estilo visual basado en Material Design Lite by Google"
+msgstr ""
-#: ../../../../inc/tpl/eventlog.php:59
-msgid "Evento"
-msgstr "Событие"
+#: ../../../../web/MainC.class.php:206
+#, fuzzy
+msgid "Usuarios en múltiples grupos"
+msgstr "Импорт групп пользователей"
-#: ../../../../inc/tpl/eventlog.php:65
-msgid "IP"
-msgstr "IP"
+#: ../../../../web/MainC.class.php:207
+#, fuzzy
+msgid "Previsualización de imágenes"
+msgstr "Запрос на изменение учетной записи"
-#: ../../../../inc/tpl/groups.php:41
-msgid "Nombre del grupo"
-msgstr "Имя группы"
+#: ../../../../web/MainC.class.php:208
+msgid "Mostrar claves como imágenes"
+msgstr ""
-#: ../../../../inc/tpl/groups.php:47
-msgid "Descripción del grupo"
-msgstr "Описание группы"
+#: ../../../../web/MainC.class.php:209
+msgid "Campos personalizados"
+msgstr ""
-#: ../../../../inc/tpl/install.php:36
-msgid "Instalación finalizada"
-msgstr "Установка завершена"
+#: ../../../../web/MainC.class.php:210
+#, fuzzy
+msgid "API de consultas"
+msgstr "Запрос на изменение учетной записи"
-#: ../../../../inc/tpl/install.php:37
-msgid "Pulse aquí para acceder"
-msgstr "Назмите здесь для входа"
+#: ../../../../web/MainC.class.php:211
+#: ../../../../inc/themes/classic/2fa.inc:9
+#: ../../../../inc/themes/material-blue/2fa.inc:9
+#: ../../../../inc/themes/material-blue/security.inc:11
+#, fuzzy
+msgid "Autentificación en 2 pasos"
+msgstr "Включить аутентификацию"
-#: ../../../../inc/tpl/install.php:47
-msgid "Instalación "
-msgstr "Установка"
+#: ../../../../web/MainC.class.php:212
+#, fuzzy
+msgid "Complejidad de generador de claves"
+msgstr "Не могу найти генератор случайных чисел."
-#: ../../../../inc/tpl/install.php:55
+#: ../../../../web/MainC.class.php:213
+msgid "Consultas especiales"
+msgstr ""
+
+#: ../../../../web/MainC.class.php:214
+#, fuzzy
+msgid "Exportación a XML"
+msgstr "Файл XML не поддерживается"
+
+#: ../../../../web/MainC.class.php:215
+#, fuzzy
+msgid "Clave maestra temporal"
+msgstr "Мастер-пароль"
+
+#: ../../../../web/MainC.class.php:216
+#, fuzzy
+msgid "Importación de cuentas desde sysPass, KeePass, KeePassX y CSV"
+msgstr "Импорт учетных записей из KeePass, KeePassX и CSV"
+
+#: ../../../../web/MainC.class.php:217
+msgid "Optimización del código y mayor rapidez de carga"
+msgstr "Оптимизация кода"
+
+#: ../../../../web/MainC.class.php:218
+msgid "Mejoras de seguridad en XSS e inyección SQL"
+msgstr "Улучшена защита от XSS и SQL инъекций"
+
+#: ../../../../web/MainC.class.php:260
msgid "La version de PHP es vulnerable al ataque NULL Byte (CVE-2006-7243)"
msgstr "Данная версия PHP уязвима NULL Byte attack (CVE-2006-7243)"
-#: ../../../../inc/tpl/install.php:56
+#: ../../../../web/MainC.class.php:261
msgid "Actualice la versión de PHP para usar sysPass de forma segura"
msgstr "Пожалуйста, обновите версию PHP для безопасного использования sysPass"
-#: ../../../../inc/tpl/install.php:60
+#: ../../../../web/MainC.class.php:268
msgid "No se encuentra el generador de números aleatorios."
msgstr "Не могу найти генератор случайных чисел."
-#: ../../../../inc/tpl/install.php:61
+#: ../../../../web/MainC.class.php:269
msgid ""
"Sin esta función un atacante puede utilizar su cuenta al resetear la clave"
msgstr ""
"Без этой функции, атакующий может завладеть вашим аккаунтом при сбросе "
"пароля."
-#: ../../../../inc/tpl/install.php:88
-msgid "Crear cuenta de admin de sysPass"
-msgstr "Создать аккаунт администратора sysPass"
+#: ../../../../web/MainC.class.php:288
+msgid "Instalación finalizada"
+msgstr "Установка завершена"
-#: ../../../../inc/tpl/install.php:91
-msgid "Login del usuario administrador de sysPass"
-msgstr "Учетная запись администратора sysPass"
+#: ../../../../web/MainC.class.php:289
+msgid "Pulse aquí para acceder"
+msgstr "Назмите здесь для входа"
-#: ../../../../inc/tpl/install.php:99 ../../../../inc/tpl/install.php:100
-#: ../../../../inc/tpl/install.php:114 ../../../../inc/tpl/install.php:115
-#: ../../../../inc/tpl/install.php:140 ../../../../inc/tpl/install.php:141
-msgid "Mostrar Clave"
-msgstr "Показать пароль"
+#: ../../../../web/MainC.class.php:384
+msgid "Descargar nueva versión"
+msgstr "Скачать новую версию"
-#: ../../../../inc/tpl/install.php:127
-msgid "Configurar BBDD"
-msgstr "Конфигурация БД"
-
-#: ../../../../inc/tpl/install.php:133
-msgid "Login de usuario con permisos de administrador de MySQL"
-msgstr "Используйте учетную запись с правами администратора базы данных"
-
-#: ../../../../inc/tpl/install.php:134 ../../../../inc/tpl/install.php:135
-#: ../../../../inc/tpl/migrate.php:40
-msgid "Usuario BBDD"
-msgstr "Имя пользователя DB"
-
-#: ../../../../inc/tpl/install.php:142 ../../../../inc/tpl/install.php:143
-#: ../../../../inc/tpl/migrate.php:49
-msgid "Clave BBDD"
-msgstr "Пароль DB"
-
-#: ../../../../inc/tpl/install.php:149
-msgid "Nombre de la base de datos para sysPass"
-msgstr "Имя базы данных sysPass"
-
-#: ../../../../inc/tpl/install.php:150 ../../../../inc/tpl/install.php:151
-#: ../../../../inc/tpl/migrate.php:57
-msgid "Nombre BBDD"
-msgstr "Имя DB"
-
-#: ../../../../inc/tpl/install.php:158
-msgid "Nombre del servidor de la base de datos de sysPass"
-msgstr "Имя сервера базы данных sysPass"
-
-#: ../../../../inc/tpl/install.php:159 ../../../../inc/tpl/install.php:160
-#: ../../../../inc/tpl/migrate.php:66
-msgid "Servidor BBDD"
-msgstr "Сервер DB"
-
-#: ../../../../inc/tpl/install.php:168
-msgid "No crea ni verifica los permisos del usuario sobre la BBDD"
-msgstr "Права доступа к БД не создаются и не проеряются"
-
-#: ../../../../inc/tpl/install.php:170 ../../../../inc/tpl/install.php:191
-#: ../../../../inc/tpl/install.php:194
-msgid "Modo Hosting"
-msgstr "Режим хостинга"
-
-#: ../../../../inc/tpl/install.php:177
-msgid "Instalar"
-msgstr "Установка"
-
-#: ../../../../inc/tpl/login.php:51 ../../../../inc/upgrade.class.php:50
-msgid "Acceder"
-msgstr "Войти"
-
-#: ../../../../inc/tpl/login.php:65
-msgid "¿Olvidó su clave?"
-msgstr "Забыли пароль?"
-
-#: ../../../../inc/tpl/login.php:71 ../../../../js/js.php:47
-msgid "Sesión finalizada"
-msgstr "Сессия завершена"
-
-#: ../../../../inc/tpl/login.php:78
-msgid "Aplicación actualizada correctamente"
-msgstr "Программа успешно обновлена"
-
-#: ../../../../inc/tpl/login.php:84
-msgid "Nuevo interface de búsqueda con estilo de lista o tipo tarjeta"
-msgstr "Новый интерфейс поиска с разными стилями: список или карточки"
-
-#: ../../../../inc/tpl/login.php:85
-msgid "Selección de grupos y usuarios de acceso a cuentas"
-msgstr "Указание пользователей или групп, имеющих доступ к учетной записи"
-
-#: ../../../../inc/tpl/login.php:86
-msgid "Drag&Drop para subida de archivos"
-msgstr "Drag&Drop для загрузки файлов"
-
-#: ../../../../inc/tpl/login.php:87
-msgid "Copiar clave al portapapeles"
-msgstr "Копирование пароля в буфер"
-
-#: ../../../../inc/tpl/login.php:88
-msgid "Historial de cuentas y restauración"
-msgstr "История учетных записей и точки восстановления"
-
-#: ../../../../inc/tpl/login.php:89
-msgid "Nueva gestión de categorías y clientes"
-msgstr "Новое управление категориями и заказчиками"
-
-#: ../../../../inc/tpl/login.php:90
-msgid "Función de olvido de claves para usuarios"
-msgstr "Функция восстановления паролей для пользователей"
-
-#: ../../../../inc/tpl/login.php:91
-msgid "Integración con Active Directory y LDAP mejorada"
-msgstr "Улучшена интеграция с Active Directory и LDAP"
-
-#: ../../../../inc/tpl/login.php:92
-msgid "Autentificación para notificaciones por correo"
-msgstr "Уведомления по Email с аутентификацией"
-
-#: ../../../../inc/tpl/login.php:93
-msgid "Búsqueda global de cuentas para usuarios sin permisos"
-msgstr "Глобальный поиск учетных записей для непривилегированных пользователей"
-
-#: ../../../../inc/tpl/login.php:94
-msgid "Solicitudes de modificación de cuentas para usuarios sin permisos"
+#: ../../../../web/MainC.class.php:395
+msgid "Avisos de sysPass"
msgstr ""
-"Запрос на изменение учетных записей для непривилегированных пользователей"
-#: ../../../../inc/tpl/login.php:95
-msgid "Importación de cuentas desde KeePass, KeePassX y CSV"
-msgstr "Импорт учетных записей из KeePass, KeePassX и CSV"
+#: ../../../../web/SearchC.class.php:270
+msgid "Ordenar por Cliente"
+msgstr "Сортировать по заказчику"
-#: ../../../../inc/tpl/login.php:96
-msgid "Función de copiar cuentas"
-msgstr "Функция клонирования учетных записей"
+#: ../../../../web/SearchC.class.php:276
+msgid "Ordenar por Nombre"
+msgstr "Сортировать по имени"
-#: ../../../../inc/tpl/login.php:97
-msgid "Optimización del código y mayor rapidez de carga"
-msgstr "Оптимизация кода"
+#: ../../../../web/SearchC.class.php:282
+msgid "Ordenar por Categoría"
+msgstr "Сортировать по категории"
-#: ../../../../inc/tpl/login.php:98
-msgid "Mejoras de seguridad en XSS e inyección SQL"
-msgstr "Улучшена защита от XSS и SQL инъекций"
+#: ../../../../web/SearchC.class.php:288
+msgid "Ordenar por Usuario"
+msgstr "Сортировать по имени пользователя"
-#: ../../../../inc/tpl/login.php:101 ../../../../inc/tpl/login.php:102
-msgid "Nuevas Características"
-msgstr "Новые возможности"
+#: ../../../../web/SearchC.class.php:294
+msgid "Ordenar por URL / IP"
+msgstr "Сортировать по URL / IP"
-#: ../../../../inc/tpl/main.php:37
-msgid "Cambiar clave de usuario"
-msgstr "Изменение пароля"
+#: ../../../../web/SearchC.class.php:295
+#: ../../../../inc/themes/classic/account.inc:58
+#: ../../../../inc/themes/classic/editpass.inc:16
+#: ../../../../inc/themes/classic/request.inc:13
+#: ../../../../inc/themes/classic/search.inc:57
+#: ../../../../inc/themes/material-blue/account.inc:66
+#: ../../../../inc/themes/material-blue/editpass.inc:17
+#: ../../../../inc/themes/material-blue/request.inc:15
+#: ../../../../inc/themes/material-blue/search.inc:62
+msgid "URL / IP"
+msgstr "URL / IP"
-#: ../../../../inc/tpl/main.php:44
-msgid "Salir"
-msgstr "Выйти"
+#: ../../../../web/UsersMgmtC.class.php:91
+msgid "Propiedades"
+msgstr "Настройки"
-#: ../../../../inc/tpl/main.php:52
-msgid "Buscar"
-msgstr "Поиск"
+#: ../../../../web/UsersMgmtC.class.php:104
+msgid "Admin Cuentas"
+msgstr "Администратор учетных записей"
-#: ../../../../inc/tpl/main.php:55
-msgid "Gestión de Clientes y Categorías"
-msgstr "Управление заказчиками и категориями"
+#: ../../../../web/UsersMgmtC.class.php:108
+#: ../../../../inc/themes/classic/users.inc:28
+#: ../../../../inc/themes/material-blue/users.inc:34
+msgid "Usuario de LDAP"
+msgstr "Пользователь LDAP"
-#: ../../../../inc/tpl/masterpass.php:43
-#: ../../../../inc/tpl/masterpass.php:128
-msgid "Último cambio"
-msgstr "Последнее изменение"
+#: ../../../../web/UsersMgmtC.class.php:112
+#: ../../../../inc/themes/classic/users.inc:113
+#: ../../../../inc/themes/material-blue/users.inc:151
+#: ../../../../inc/themes/material-blue/users.inc:154
+msgid "Deshabilitado"
+msgstr "Отключен"
-#: ../../../../inc/tpl/masterpass.php:52
-msgid "Clave Maestra actual"
-msgstr "Текущий мастер-пароль"
+#: ../../../../web/UsersMgmtC.class.php:129
+msgid "Ver Detalles de Usuario"
+msgstr "Просмотр информации пользователя"
-#: ../../../../inc/tpl/masterpass.php:60
-msgid "Nueva Clave Maestra"
-msgstr "Новый мастер-пароль"
+#: ../../../../web/UsersMgmtC.class.php:143
+msgid "Cambiar Clave de Usuario"
+msgstr "Изменить пароль пользователя"
-#: ../../../../inc/tpl/masterpass.php:69
-msgid "Nueva Clave Maestra (repetir)"
-msgstr "Новый мастер-пароль (подтверждение)"
+#: ../../../../web/UsersMgmtC.class.php:222
+msgid "Gestión de Grupos"
+msgstr "Управление группами"
-#: ../../../../inc/tpl/masterpass.php:77
-msgid "No modificar cuentas"
-msgstr "Не изменять учетные записи"
-
-#: ../../../../inc/tpl/masterpass.php:87
-msgid "Confirmar cambio"
-msgstr "Подтвердите изменение"
-
-#: ../../../../inc/tpl/masterpass.php:90 ../../../../inc/tpl/masterpass.php:93
-#: ../../../../inc/tpl/masterpass.php:96 ../../../../inc/tpl/migrate.php:78
-msgid "Atención"
-msgstr "Предупреждение"
-
-#: ../../../../inc/tpl/masterpass.php:91
-msgid "Guarde la nueva clave en un lugar seguro."
-msgstr "Необходимо сохранить новый пароль в надежном месте"
-
-#: ../../../../inc/tpl/masterpass.php:94
-msgid "Se volverán a encriptar las claves de todas las cuentas."
-msgstr "Все пароли учетных записей будут зашифрованы вновь."
-
-#: ../../../../inc/tpl/masterpass.php:97
-msgid "Los usuarios deberán de introducir la nueva clave maestra."
-msgstr "Пользователям потребуется ввести новый мастер-пароль."
-
-# Temporary Password
-#: ../../../../inc/tpl/masterpass.php:121
+#: ../../../../web/UsersMgmtC.class.php:260
#, fuzzy
-msgid "Clave Temporal"
-msgstr "Temporary Password"
+msgid "Ver Detalles de Perfil"
+msgstr "Просмотр информации пользователя"
-# Not generated
-#: ../../../../inc/tpl/masterpass.php:135
-#: ../../../../inc/tpl/masterpass.php:149
+#: ../../../../web/UsersMgmtC.class.php:287
+msgid "Gestión de Perfiles"
+msgstr "Управление профилями"
+
+#: ../../../../web/UsersMgmtC.class.php:407
#, fuzzy
-msgid "No generada"
-msgstr "Not generated"
+msgid "Ver token de Autorización"
+msgstr "Просмотр информации пользователя"
-# Valid until
-#: ../../../../inc/tpl/masterpass.php:142
+#: ../../../../web/UsersMgmtC.class.php:434
#, fuzzy
-msgid "Válido hasta"
-msgstr "Valid until"
+msgid "Gestión de Autorizaciones API"
+msgstr "Управление файлами отключено"
-# Generate
-#: ../../../../inc/tpl/masterpass.php:164
+#: ../../../../web/UsersMgmtC.class.php:456
#, fuzzy
-msgid "Generar"
-msgstr "Generate"
+msgid "Token de autorización visualizado"
+msgstr "Конфигурация изменена"
-#: ../../../../inc/tpl/migrate.php:33
-msgid "Importar phpPMS"
-msgstr "Импорт phpPMS"
+#: ../../../../web/UsersMgmtC.class.php:457
+msgid "Autorizaciones"
+msgstr ""
-#: ../../../../inc/tpl/migrate.php:75
-msgid "Confirmar"
-msgstr "Подтвердить"
+#: ../../../../web/UsersPrefsC.class.php:84
+#: ../../../../inc/themes/classic/mail.inc:63
+#: ../../../../inc/themes/material-blue/mail.inc:86
+msgid "Seguridad"
+msgstr "Безопасность"
-#: ../../../../inc/tpl/migrate.php:79
-msgid "Los datos actuales serán borrados (excepto el usuario actual)"
-msgstr "Текущие данные будут удалены (кроме текущего пользователя)"
+#: ../../../../inc/themes/classic/2fa.inc:14
+#: ../../../../inc/themes/material-blue/2fa.inc:14
+#, fuzzy
+msgid "Introducir código"
+msgstr "Введите код безопасности"
-#: ../../../../inc/tpl/migrate.php:97
-msgid "Iniciar"
-msgstr "Старт"
-
-#: ../../../../inc/tpl/migrate.php:103
-msgid "Importar CSV/XML"
-msgstr "Импорт CSV/XML"
-
-#: ../../../../inc/tpl/migrate.php:117
-msgid "Soltar archivo aquí o click para seleccionar"
-msgstr "Перетащите файлы сюда или нажниме для выбора"
-
-#: ../../../../inc/tpl/passreset.php:47
-msgid "Solicitud de Cambio de Clave"
-msgstr "Запросить смену пароля"
-
-#: ../../../../inc/tpl/passreset.php:50
-msgid "Login del Usuario"
-msgstr "Логин"
-
-#: ../../../../inc/tpl/passreset.php:55
-msgid "Email del Usuario"
-msgstr "Email"
-
-#: ../../../../inc/tpl/passreset.php:56 ../../../../inc/tpl/users.php:116
-msgid "Email"
-msgstr "Email"
-
-#: ../../../../inc/tpl/passreset.php:61
-msgid "Nueva Clave"
-msgstr "Новый пароль"
-
-#: ../../../../inc/tpl/passreset.php:69
-msgid "Nueva Clave (Verificar)"
-msgstr "Новый пароль (подтверждение)"
-
-#: ../../../../inc/tpl/passreset.php:70
-msgid "Clave (Verificar)"
+#: ../../../../inc/themes/classic/2fa.inc:26
+#, fuzzy
+msgid "Verificar"
msgstr "Пароль (подтверждение)"
-#: ../../../../inc/tpl/passreset.php:83
+#: ../../../../inc/themes/classic/account.inc:14
+#: ../../../../inc/themes/material-blue/account.inc:21
+msgid "Nombre de cuenta"
+msgstr "Имя учетной записи"
+
+#: ../../../../inc/themes/classic/account.inc:35
+msgid "Buscar en desplegable o introducir"
+msgstr "Выберите снизу или введите"
+
+#: ../../../../inc/themes/classic/account.inc:61
+#: ../../../../inc/themes/material-blue/account.inc:72
+msgid "URL o IP de acceso"
+msgstr "URL или IP доступа"
+
+#: ../../../../inc/themes/classic/account.inc:73
+#: ../../../../inc/themes/material-blue/account.inc:86
+msgid "Usuario de acceso"
+msgstr "Пользователь доступа"
+
+#: ../../../../inc/themes/classic/account.inc:90
+#: ../../../../inc/themes/classic/editpass.inc:31
+#: ../../../../inc/themes/classic/users.inc:83
+#: ../../../../inc/themes/classic/userspass.inc:19
+#: ../../../../inc/themes/classic/userspass.inc:21
+#: ../../../../inc/themes/material-blue/account.inc:105
+#: ../../../../inc/themes/material-blue/editpass.inc:36
+#: ../../../../inc/themes/material-blue/install.inc:64
+#: ../../../../inc/themes/material-blue/users.inc:102
+#: ../../../../inc/themes/material-blue/users.inc:109
+#: ../../../../inc/themes/material-blue/userspass.inc:19
+#: ../../../../inc/themes/material-blue/userspass.inc:25
+msgid "Clave (repetir)"
+msgstr "Подтверждение пароля"
+
+#: ../../../../inc/themes/classic/account.inc:97
+#: ../../../../inc/themes/classic/search.inc:73
+#: ../../../../inc/themes/classic/users.inc:91
+#: ../../../../inc/themes/material-blue/account.inc:116
+#: ../../../../inc/themes/material-blue/search.inc:82
+#: ../../../../inc/themes/material-blue/users.inc:116
+msgid "Notas"
+msgstr "Заметки"
+
+#: ../../../../inc/themes/classic/account.inc:99
+#: ../../../../inc/themes/material-blue/account.inc:121
+#: ../../../../inc/themes/material-blue/users.inc:123
+msgid "Notas sobre la cuenta"
+msgstr "Заметки по учетной записи"
+
+#: ../../../../inc/themes/classic/account.inc:105
+#: ../../../../inc/themes/material-blue/account.inc:130
+#: ../../../../inc/themes/material-blue/search.inc:75
+msgid "Permisos"
+msgstr "Разрешения"
+
+#: ../../../../inc/themes/classic/account.inc:132
+#: ../../../../inc/themes/classic/account.inc:163
+#: ../../../../inc/themes/material-blue/account.inc:159
+#: ../../../../inc/themes/material-blue/account.inc:191
+msgid "Hablitar edición"
+msgstr "Разрешить изменения"
+
+#: ../../../../inc/themes/classic/account.inc:201
+#: ../../../../inc/themes/material-blue/account.inc:243
+msgid "Soltar archivos aquí (max. 5) o click para seleccionar"
+msgstr "Перетащите файлы сюда (не более 5) или нажмите для выбора"
+
+#: ../../../../inc/themes/classic/account.inc:201
+#: ../../../../inc/themes/classic/config.inc:193
+#: ../../../../inc/themes/material-blue/account.inc:243
+#: ../../../../inc/themes/material-blue/config.inc:272
+msgid "Tamaño máximo de archivo"
+msgstr "Максимальный размер файла"
+
+#: ../../../../inc/themes/classic/account.inc:213
+#: ../../../../inc/themes/material-blue/account.inc:255
+msgid "Historial"
+msgstr "История"
+
+#: ../../../../inc/themes/classic/account.inc:232
+#: ../../../../inc/themes/material-blue/account.inc:275
+msgid "Seleccionar fecha"
+msgstr "Выберите дату"
+
+#: ../../../../inc/themes/classic/account.inc:241
+#: ../../../../inc/themes/classic/users.inc:164
+#: ../../../../inc/themes/material-blue/account.inc:284
+#: ../../../../inc/themes/material-blue/users.inc:208
+msgid "Última Modificación"
+msgstr "Последнее изменение"
+
+#: ../../../../inc/themes/classic/account.inc:243
+#: ../../../../inc/themes/material-blue/account.inc:286
+msgid "por"
+msgstr "выполнено"
+
+#: ../../../../inc/themes/classic/account.inc:286
+#: ../../../../inc/themes/material-blue/account.inc:333
+msgid "Visitas"
+msgstr "Просмотров"
+
+#: ../../../../inc/themes/classic/account.inc:290
+#: ../../../../inc/themes/material-blue/account.inc:337
+msgid "Fecha Alta"
+msgstr "Дата создания"
+
+#: ../../../../inc/themes/classic/account.inc:294
+#: ../../../../inc/themes/material-blue/account.inc:341
+msgid "Creador"
+msgstr "Создатель"
+
+#: ../../../../inc/themes/classic/account.inc:298
+#: ../../../../inc/themes/material-blue/account.inc:200
+#: ../../../../inc/themes/material-blue/account.inc:345
+msgid "Grupo Principal"
+msgstr "Основная группа"
+
+#: ../../../../inc/themes/classic/account.inc:303
+#: ../../../../inc/themes/material-blue/account.inc:350
+msgid "Usuarios Secundarios"
+msgstr "Вторичные пользователи"
+
+#: ../../../../inc/themes/classic/account.inc:322
+#: ../../../../inc/themes/material-blue/account.inc:369
+msgid "Grupos Secundarios"
+msgstr "Вторичные группы"
+
+#: ../../../../inc/themes/classic/account.inc:342
+#: ../../../../inc/themes/material-blue/account.inc:389
+msgid "Fecha Edición"
+msgstr "Дата изменения"
+
+#: ../../../../inc/themes/classic/account.inc:346
+#: ../../../../inc/themes/material-blue/account.inc:393
+msgid "Editor"
+msgstr "Изменил"
+
+#: ../../../../inc/themes/classic/account.inc:373
+#: ../../../../inc/themes/material-blue/account.inc:456
+msgid "Restaurar cuenta desde este punto"
+msgstr "Восстановить учетную запись из текущей точки"
+
+#: ../../../../inc/themes/classic/account.inc:385
+#: ../../../../inc/themes/classic/account.inc:468
+#: ../../../../inc/themes/classic/search.inc:103
+#: ../../../../inc/themes/classic/search.inc:183
+#: ../../../../inc/themes/material-blue/account.inc:423
+#: ../../../../inc/themes/material-blue/account.inc:493
+#: ../../../../inc/themes/material-blue/search.inc:118
+#: ../../../../inc/themes/material-blue/search.inc:197
+msgid "Copiar Clave en Portapapeles"
+msgstr "Копировать пароль в буфер"
+
+#: ../../../../inc/themes/classic/account.inc:401
+#: ../../../../inc/themes/material-blue/account.inc:436
+msgid "Ver Actual"
+msgstr "Просмотр текущей версии"
+
+#: ../../../../inc/themes/classic/account.inc:406
+#: ../../../../inc/themes/classic/editpass.inc:45
+#: ../../../../inc/themes/classic/passreset.inc:46
+#: ../../../../inc/themes/material-blue/passreset.inc:43
msgid "Volver"
msgstr "Назад"
-#: ../../../../inc/tpl/passreset.php:83
+#: ../../../../inc/themes/classic/account.inc:413
+#: ../../../../inc/themes/classic/search.inc:115
+#: ../../../../inc/themes/material-blue/account.inc:446
+#: ../../../../inc/themes/material-blue/search.inc:130
+msgid "Modificar Cuenta"
+msgstr "Редактировать учетную запись"
+
+#: ../../../../inc/themes/classic/account.inc:418
+#: ../../../../inc/themes/classic/search.inc:136
+#: ../../../../inc/themes/material-blue/account.inc:450
+#: ../../../../inc/themes/material-blue/search.inc:150
+msgid "Solicitar Modificación"
+msgstr "Запросить изменение"
+
+#: ../../../../inc/themes/classic/account.inc:425
+#: ../../../../inc/themes/classic/categories.inc:62
+#: ../../../../inc/themes/classic/config.inc:275
+#: ../../../../inc/themes/classic/customers.inc:62
+#: ../../../../inc/themes/classic/customfields.inc:63
+#: ../../../../inc/themes/classic/editpass.inc:50
+#: ../../../../inc/themes/classic/encryption.inc:102
+#: ../../../../inc/themes/classic/groups.inc:77
+#: ../../../../inc/themes/classic/ldap.inc:229
+#: ../../../../inc/themes/classic/mail.inc:107
+#: ../../../../inc/themes/classic/profiles.inc:168
+#: ../../../../inc/themes/classic/security.inc:57
+#: ../../../../inc/themes/classic/tokens.inc:59
+#: ../../../../inc/themes/classic/users.inc:189
+#: ../../../../inc/themes/classic/userspass.inc:35
+#: ../../../../inc/themes/classic/wiki.inc:110
+#: ../../../../inc/themes/material-blue/account.inc:462
+#: ../../../../inc/themes/material-blue/categories.inc:72
+#: ../../../../inc/themes/material-blue/config.inc:388
+#: ../../../../inc/themes/material-blue/customers.inc:73
+#: ../../../../inc/themes/material-blue/customfields.inc:74
+#: ../../../../inc/themes/material-blue/editpass.inc:60
+#: ../../../../inc/themes/material-blue/groups.inc:88
+#: ../../../../inc/themes/material-blue/ldap.inc:257
+#: ../../../../inc/themes/material-blue/mail.inc:145
+#: ../../../../inc/themes/material-blue/profiles.inc:177
+#: ../../../../inc/themes/material-blue/security.inc:61
+#: ../../../../inc/themes/material-blue/tokens.inc:63
+#: ../../../../inc/themes/material-blue/users.inc:235
+#: ../../../../inc/themes/material-blue/userspass.inc:40
+#: ../../../../inc/themes/material-blue/wiki.inc:124
+msgid "Guardar"
+msgstr "Сохранить"
+
+#: ../../../../inc/themes/classic/account.inc:435
+#: ../../../../inc/themes/material-blue/account.inc:472
+msgid "Seleccionar grupos secundarios"
+msgstr "Выберите вторичные группы"
+
+#: ../../../../inc/themes/classic/account.inc:439
+#: ../../../../inc/themes/material-blue/account.inc:475
+msgid "Seleccionar usuarios"
+msgstr "Выберите пользователей"
+
+#: ../../../../inc/themes/classic/account.inc:472
+#: ../../../../inc/themes/classic/search.inc:187
+#: ../../../../inc/themes/material-blue/account.inc:497
+#: ../../../../inc/themes/material-blue/search.inc:201
+msgid "Clave Copiada al Portapapeles"
+msgstr "Пароль скопирован в буфер"
+
+#: ../../../../inc/themes/classic/backup.inc:10
+#: ../../../../inc/themes/classic/backup.inc:67
+#: ../../../../inc/themes/material-blue/backup.inc:10
+#: ../../../../inc/themes/material-blue/backup.inc:71
+msgid "Resultado"
+msgstr "Результат"
+
+#: ../../../../inc/themes/classic/backup.inc:18
+#: ../../../../inc/themes/classic/backup.inc:75
+#: ../../../../inc/themes/material-blue/backup.inc:18
+#: ../../../../inc/themes/material-blue/backup.inc:79
+msgid "Descargar Actual"
+msgstr "Скачать текущий"
+
+#: ../../../../inc/themes/classic/backup.inc:31
+#: ../../../../inc/themes/material-blue/backup.inc:31
+msgid "No hay backups para descargar"
+msgstr "Нет резервных копий для скачивания"
+
+#: ../../../../inc/themes/classic/backup.inc:45
+#: ../../../../inc/themes/classic/backup.inc:49
+#: ../../../../inc/themes/classic/backup.inc:113
+#: ../../../../inc/themes/classic/backup.inc:117
+#: ../../../../inc/themes/classic/encryption.inc:93
+#: ../../../../inc/themes/classic/encryption.inc:97
+#: ../../../../inc/themes/classic/encryption.inc:152
+#: ../../../../inc/themes/classic/encryption.inc:156
+#: ../../../../inc/themes/classic/import.inc:15
+#: ../../../../inc/themes/classic/import.inc:37
+#: ../../../../inc/themes/classic/import.inc:51
+#: ../../../../inc/themes/classic/import.inc:97
+#: ../../../../inc/themes/classic/import.inc:118
+#: ../../../../inc/themes/classic/import.inc:170
+#: ../../../../inc/themes/classic/import.inc:174
+#: ../../../../inc/themes/classic/js-common.inc:13
+#: ../../../../inc/themes/classic/ldap.inc:13
+#: ../../../../inc/themes/classic/ldap.inc:33
+#: ../../../../inc/themes/classic/ldap.inc:58
+#: ../../../../inc/themes/classic/ldap.inc:82
+#: ../../../../inc/themes/classic/ldap.inc:93
+#: ../../../../inc/themes/classic/ldap.inc:117
+#: ../../../../inc/themes/classic/ldap.inc:145
+#: ../../../../inc/themes/classic/ldap.inc:166
+#: ../../../../inc/themes/classic/ldap.inc:187
+#: ../../../../inc/themes/classic/wiki.inc:12
+#: ../../../../inc/themes/classic/wiki.inc:28
+#: ../../../../inc/themes/classic/wiki.inc:55
+#: ../../../../inc/themes/classic/wiki.inc:82
+#: ../../../../inc/themes/material-blue/backup.inc:47
+#: ../../../../inc/themes/material-blue/backup.inc:51
+#: ../../../../inc/themes/material-blue/backup.inc:129
+#: ../../../../inc/themes/material-blue/backup.inc:133
+#: ../../../../inc/themes/material-blue/encryption.inc:107
+#: ../../../../inc/themes/material-blue/encryption.inc:111
+#: ../../../../inc/themes/material-blue/encryption.inc:171
+#: ../../../../inc/themes/material-blue/encryption.inc:175
+#: ../../../../inc/themes/material-blue/import.inc:99
+#: ../../../../inc/themes/material-blue/import.inc:103
+#: ../../../../inc/themes/material-blue/js-common.inc:11
+#, fuzzy
+msgid "Ayuda"
+msgstr "Help :: FAQ :: Changelog"
+
+#: ../../../../inc/themes/classic/backup.inc:50
+#: ../../../../inc/themes/material-blue/backup.inc:52
+msgid ""
+"La copia de seguridad permite guardar y descargar tanto la base de datos de "
+"sysPass como los archivos de la aplicación y su configuración."
+msgstr ""
+
+#: ../../../../inc/themes/classic/backup.inc:52
+#: ../../../../inc/themes/material-blue/backup.inc:54
+msgid ""
+"Con este método es posible guardar todos los datos de sysPass en otro lugar "
+"o utilizarlos para hacer la aplicación portable."
+msgstr ""
+
+#: ../../../../inc/themes/classic/backup.inc:60
+#: ../../../../inc/themes/classic/backup.inc:126
+#: ../../../../inc/themes/material-blue/backup.inc:64
+#, fuzzy
+msgid "Exportar Cuentas"
+msgstr "Учетные записи"
+
+#: ../../../../inc/themes/classic/backup.inc:84
+#: ../../../../inc/themes/material-blue/backup.inc:88
+#, fuzzy
+msgid "No hay archivos XML para descargar"
+msgstr "Нет резервных копий для скачивания"
+
+#: ../../../../inc/themes/classic/backup.inc:90
+#: ../../../../inc/themes/material-blue/backup.inc:94
+#: ../../../../inc/themes/material-blue/backup.inc:101
+#, fuzzy
+msgid "Clave de Exportación"
+msgstr "Восстановление пароля"
+
+#: ../../../../inc/themes/classic/backup.inc:98
+#: ../../../../inc/themes/material-blue/backup.inc:107
+#: ../../../../inc/themes/material-blue/backup.inc:114
+#, fuzzy
+msgid "Clave de Exportación (repetir)"
+msgstr "Подтверждение пароля"
+
+#: ../../../../inc/themes/classic/backup.inc:118
+#: ../../../../inc/themes/material-blue/backup.inc:134
+msgid ""
+"La exportación de cuentas permite guardar las cuentas y sus datos en formato "
+"XML para posteriormente poder ser importados en otras instancias de sysPass."
+msgstr ""
+
+#: ../../../../inc/themes/classic/backup.inc:120
+#: ../../../../inc/themes/material-blue/backup.inc:136
+msgid "Los elementos exportados son cuentas, clientes y categorías."
+msgstr ""
+
+#: ../../../../inc/themes/classic/backup.inc:122
+#: ../../../../inc/themes/material-blue/backup.inc:138
+msgid ""
+"Las claves de las cuentas son exportadas de forma encriptada para mayor "
+"seguridad."
+msgstr ""
+
+#: ../../../../inc/themes/classic/backup.inc:124
+#: ../../../../inc/themes/material-blue/backup.inc:140
+msgid ""
+"Es posible establecer una clave de exportación para guardar todos los datos "
+"encriptados en el archivo XML."
+msgstr ""
+
+#: ../../../../inc/themes/classic/body.inc:4
+#: ../../../../inc/themes/material-blue/body.inc:4
+msgid "Javascript es necesario para el correcto funcionamiento"
+msgstr "Javascript необходим для корректной работы"
+
+#: ../../../../inc/themes/classic/categories.inc:10
+#: ../../../../inc/themes/material-blue/categories.inc:14
+msgid "Nombre de la categoría"
+msgstr "Имя категории"
+
+#: ../../../../inc/themes/classic/categories.inc:18
+#: ../../../../inc/themes/material-blue/categories.inc:26
+msgid "Descripción de la categoría"
+msgstr "Описание категории"
+
+#: ../../../../inc/themes/classic/config.inc:4
+#: ../../../../inc/themes/material-blue/config.inc:4
+msgid "Sitio"
+msgstr "Сайт"
+
+#: ../../../../inc/themes/classic/config.inc:10
+#: ../../../../inc/themes/material-blue/config.inc:11
+msgid "Idioma"
+msgstr "Язык"
+
+#: ../../../../inc/themes/classic/config.inc:21
+#: ../../../../inc/themes/material-blue/config.inc:22
+msgid "Tema Visual"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:33
+#: ../../../../inc/themes/material-blue/config.inc:34
+#: ../../../../inc/themes/material-blue/config.inc:42
+msgid "Timeout de sesión (s)"
+msgstr "Таймаут сессии (секунды)"
+
+#: ../../../../inc/themes/classic/config.inc:42
+#: ../../../../inc/themes/material-blue/config.inc:48
+msgid "Habilitar log de eventos"
+msgstr "Включить журнал событий"
+
+#: ../../../../inc/themes/classic/config.inc:46
+#: ../../../../inc/themes/material-blue/config.inc:52
+#, fuzzy
+msgid "Guarda las acciones realizadas en la aplicación."
+msgstr "Ведет запись действий в программе."
+
+#: ../../../../inc/themes/classic/config.inc:58
+#: ../../../../inc/themes/material-blue/config.inc:66
+msgid "Habilitar depuración"
+msgstr "Включить отладку"
+
+#: ../../../../inc/themes/classic/config.inc:62
+#: ../../../../inc/themes/material-blue/config.inc:70
+#, fuzzy
+msgid ""
+"Muestra información relativa a la configuración de la aplicación y "
+"rendimiento."
+msgstr "Показывает информацию о программе и производительности."
+
+#: ../../../../inc/themes/classic/config.inc:74
+#: ../../../../inc/themes/material-blue/config.inc:84
+msgid "Modo mantenimiento"
+msgstr "Режим обслуживания"
+
+#: ../../../../inc/themes/classic/config.inc:78
+#: ../../../../inc/themes/material-blue/config.inc:88
+#, fuzzy
+msgid ""
+"En este modo no se puede acceder a la aplicación. Para deshabilitarlo es "
+"necesario modificar el archivo de configuración."
+msgstr ""
+"В данном режиме войти в программу невозможно. Для его отключения необходимо "
+"редактировать файл конфигурации."
+
+#: ../../../../inc/themes/classic/config.inc:90
+#: ../../../../inc/themes/material-blue/config.inc:102
+msgid "Comprobar actualizaciones"
+msgstr "Проверка обновлений"
+
+#: ../../../../inc/themes/classic/config.inc:94
+#: ../../../../inc/themes/material-blue/config.inc:106
+#, fuzzy
+msgid ""
+"Comprobar actualizaciones de la aplicación (sólo para los usuarios "
+"administradores)."
+msgstr "Проверяет обновления программы (только для администраторов)."
+
+#: ../../../../inc/themes/classic/config.inc:106
+#: ../../../../inc/themes/material-blue/config.inc:120
+#, fuzzy
+msgid "Comprobar notificaciones"
+msgstr "Проверить"
+
+#: ../../../../inc/themes/classic/config.inc:110
+#: ../../../../inc/themes/material-blue/config.inc:124
+#, fuzzy
+msgid ""
+"Comprobar si existen notificaciones de seguridad o avisos de sysPass (sólo "
+"para los usuarios administradores)."
+msgstr "Проверяет обновления программы (только для администраторов)."
+
+#: ../../../../inc/themes/classic/config.inc:122
+#: ../../../../inc/themes/material-blue/config.inc:145
+msgid "Nombre de cuenta como enlace"
+msgstr "Имя учетной записи как ссылка"
+
+#: ../../../../inc/themes/classic/config.inc:126
+#: ../../../../inc/themes/material-blue/config.inc:149
+#, fuzzy
+msgid ""
+"Habilita el nombre de la cuenta de la búsqueda, como enlace a los detalles "
+"de la cuenta."
+msgstr "Превращает имя учетной записи в ссылку на её детали на странице поиска"
+
+#: ../../../../inc/themes/classic/config.inc:138
+#: ../../../../inc/themes/material-blue/config.inc:230
+msgid "Gestión de archivos"
+msgstr "Управление файлами"
+
+#: ../../../../inc/themes/classic/config.inc:142
+#: ../../../../inc/themes/material-blue/config.inc:234
+#, fuzzy
+msgid "Habilita la subida/descarga de archivos para las cuentas."
+msgstr "Включает загрузку/скачивание файлов учетной записи"
+
+#: ../../../../inc/themes/classic/config.inc:154
+#: ../../../../inc/themes/material-blue/config.inc:163
+msgid "Búsquedas globales"
+msgstr "Глобальные поиски"
+
+#: ../../../../inc/themes/classic/config.inc:158
+#: ../../../../inc/themes/material-blue/config.inc:167
+msgid ""
+"Permite que todos los usuarios puedan realizar búsquedas en todas las "
+"cuentas, pero no pueden ver el contenido de las que no tienen permisos."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:170
+#: ../../../../inc/themes/material-blue/config.inc:249
+msgid "Extensiones de archivos permitidas"
+msgstr "Разрешенные расширения файлов"
+
+#: ../../../../inc/themes/classic/config.inc:174
+#: ../../../../inc/themes/material-blue/config.inc:253
+#, fuzzy
+msgid "Extensiones permitidas para la subida de archivos."
+msgstr "Включает загрузку/скачивание файлов учетной записи"
+
+#: ../../../../inc/themes/classic/config.inc:178
+#: ../../../../inc/themes/material-blue/config.inc:257
+#, fuzzy
+msgid "Se permite un máximo de 4 caracteres."
+msgstr "Максимальная длина расширения 4 символа."
+
+#: ../../../../inc/themes/classic/config.inc:182
+#: ../../../../inc/themes/material-blue/config.inc:261
+#, fuzzy
+msgid ""
+"Escribir extensión y pulsar intro para añadir. Es necesario guardar la "
+"configuración."
+msgstr "Введите расширение и нажмите Enter для добавления."
+
+#: ../../../../inc/themes/classic/config.inc:197
+#: ../../../../inc/themes/material-blue/config.inc:276
+#, fuzzy
+msgid "Establece el tamaño máximo para subir archivos."
+msgstr "Максимальный размер загружаемого файла."
+
+#: ../../../../inc/themes/classic/config.inc:201
+#: ../../../../inc/themes/material-blue/config.inc:280
+#, fuzzy
+msgid "El máximo absuluto es de 16MB."
+msgstr "Абсолютный максимум 16MB."
+
+#: ../../../../inc/themes/classic/config.inc:212
+#: ../../../../inc/themes/material-blue/config.inc:181
+msgid "Resultados por página"
+msgstr "Результатов на страницу"
+
+#: ../../../../inc/themes/classic/config.inc:216
+#: ../../../../inc/themes/material-blue/config.inc:185
+#, fuzzy
+msgid "Número de resultados por página a mostrar, al realizar una búsqueda."
+msgstr "Число результатов поиска на страницу"
+
+#: ../../../../inc/themes/classic/config.inc:227
+msgid "Resultados en Tarjetas"
+msgstr "Результаты в виде карточек"
+
+#: ../../../../inc/themes/classic/config.inc:231
+msgid "Muestra los resultados de búsqueda de cuentas en formato tarjeta."
+msgstr "Включает показ учетных записей в результатах поиска в виде карточек."
+
+#: ../../../../inc/themes/classic/config.inc:243
+#: ../../../../inc/themes/material-blue/config.inc:201
+#, fuzzy
+msgid "Imagen para mostrar clave"
+msgstr "Показать пароль"
+
+#: ../../../../inc/themes/classic/config.inc:247
+#: ../../../../inc/themes/material-blue/config.inc:205
+#, fuzzy
+msgid "Generar una imagen con el texto de la clave de la cuenta."
+msgstr "Ошибка получения паролей для учетной записи"
+
+#: ../../../../inc/themes/classic/config.inc:250
+#: ../../../../inc/themes/material-blue/config.inc:208
+msgid "Util para entornos donde copiar la clave supone un riesgo de seguridad."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config.inc:285
+#: ../../../../inc/themes/material-blue/config.inc:398
+msgid "Añadir extensión"
+msgstr "Добавить расширение"
+
+#: ../../../../inc/themes/classic/config.inc:286
+#: ../../../../inc/themes/material-blue/config.inc:399
+msgid "Eliminar extensión"
+msgstr "Удалить расширение"
+
+#: ../../../../inc/themes/classic/customers.inc:10
+#: ../../../../inc/themes/material-blue/customers.inc:14
+msgid "Nombre del cliente"
+msgstr "Имя заказчика"
+
+#: ../../../../inc/themes/classic/customers.inc:18
+#: ../../../../inc/themes/material-blue/customers.inc:26
+msgid "Descripción del cliente"
+msgstr "Описание заказчика"
+
+#: ../../../../inc/themes/classic/customfields.inc:38
+#: ../../../../inc/themes/material-blue/customfields.inc:41
+#, fuzzy
+msgid "Texto Ayuda"
+msgstr "Текст для поиска"
+
+#: ../../../../inc/themes/classic/customfields.inc:44
+#: ../../../../inc/themes/material-blue/customfields.inc:52
+msgid "Obligatorio"
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:8
+#: ../../../../inc/themes/classic/install.inc:46
+#: ../../../../inc/themes/classic/install.inc:50
+#: ../../../../inc/themes/classic/install.inc:51
+#: ../../../../inc/themes/classic/login.inc:15
+#: ../../../../inc/themes/classic/login.inc:27
+#: ../../../../inc/themes/material-blue/encryption.inc:8
+#: ../../../../inc/themes/material-blue/install.inc:49
+#: ../../../../inc/themes/material-blue/install.inc:56
+#: ../../../../inc/themes/material-blue/login.inc:25
+#: ../../../../inc/themes/material-blue/login.inc:48
+msgid "Clave Maestra"
+msgstr "Мастер-пароль"
+
+#: ../../../../inc/themes/classic/encryption.inc:16
+#: ../../../../inc/themes/classic/encryption.inc:116
+#: ../../../../inc/themes/material-blue/encryption.inc:16
+#: ../../../../inc/themes/material-blue/encryption.inc:131
+msgid "Último cambio"
+msgstr "Последнее изменение"
+
+#: ../../../../inc/themes/classic/encryption.inc:25
+#: ../../../../inc/themes/material-blue/encryption.inc:25
+#: ../../../../inc/themes/material-blue/encryption.inc:31
+msgid "Clave Maestra actual"
+msgstr "Текущий мастер-пароль"
+
+#: ../../../../inc/themes/classic/encryption.inc:34
+#: ../../../../inc/themes/material-blue/encryption.inc:37
+#: ../../../../inc/themes/material-blue/encryption.inc:43
+msgid "Nueva Clave Maestra"
+msgstr "Новый мастер-пароль"
+
+#: ../../../../inc/themes/classic/encryption.inc:43
+#: ../../../../inc/themes/material-blue/encryption.inc:49
+#: ../../../../inc/themes/material-blue/encryption.inc:55
+msgid "Nueva Clave Maestra (repetir)"
+msgstr "Новый мастер-пароль (подтверждение)"
+
+#: ../../../../inc/themes/classic/encryption.inc:51
+#: ../../../../inc/themes/material-blue/encryption.inc:61
+msgid "No modificar cuentas"
+msgstr "Не изменять учетные записи"
+
+#: ../../../../inc/themes/classic/encryption.inc:56
+#: ../../../../inc/themes/material-blue/encryption.inc:66
+msgid "Establece una nueva clave maestra sin re-encriptar las cuentas"
+msgstr "Устанавливает мастер-пароль без повторного шифрования учетных записей."
+
+#: ../../../../inc/themes/classic/encryption.inc:67
+#: ../../../../inc/themes/material-blue/encryption.inc:79
+msgid "Confirmar cambio"
+msgstr "Подтвердите изменение"
+
+#: ../../../../inc/themes/classic/encryption.inc:70
+#: ../../../../inc/themes/classic/encryption.inc:73
+#: ../../../../inc/themes/classic/encryption.inc:76
+#: ../../../../inc/themes/classic/import.inc:67
+#: ../../../../inc/themes/classic/security.inc:43
+msgid "Atención"
+msgstr "Предупреждение"
+
+#: ../../../../inc/themes/classic/encryption.inc:71
+#: ../../../../inc/themes/material-blue/encryption.inc:83
+msgid "Guarde la nueva clave en un lugar seguro."
+msgstr "Необходимо сохранить новый пароль в надежном месте"
+
+#: ../../../../inc/themes/classic/encryption.inc:74
+#: ../../../../inc/themes/material-blue/encryption.inc:86
+msgid "Se volverán a encriptar las claves de todas las cuentas."
+msgstr "Все пароли учетных записей будут зашифрованы вновь."
+
+#: ../../../../inc/themes/classic/encryption.inc:77
+#: ../../../../inc/themes/material-blue/encryption.inc:89
+msgid "Los usuarios deberán de introducir la nueva clave maestra."
+msgstr "Пользователям потребуется ввести новый мастер-пароль."
+
+#: ../../../../inc/themes/classic/encryption.inc:98
+#: ../../../../inc/themes/material-blue/encryption.inc:112
+msgid ""
+"La clave maestra es utilizada para encriptar las claves de las cuentas de "
+"sysPass para mantenerlas seguras."
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:100
+#: ../../../../inc/themes/material-blue/encryption.inc:114
+msgid ""
+"Es recomendable cambiarla cada cierto tiempo y utilizar una clave compleja "
+"que incluya números, letras y símbolos."
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:108
+#: ../../../../inc/themes/material-blue/encryption.inc:124
+#, fuzzy
+msgid "Clave Temporal"
+msgstr "Мастер-пароль"
+
+#: ../../../../inc/themes/classic/encryption.inc:119
+#: ../../../../inc/themes/classic/encryption.inc:130
+#: ../../../../inc/themes/material-blue/encryption.inc:134
+#: ../../../../inc/themes/material-blue/encryption.inc:145
+#, fuzzy
+msgid "No generada"
+msgstr "Сгенерированный пароль"
+
+#: ../../../../inc/themes/classic/encryption.inc:124
+#: ../../../../inc/themes/material-blue/encryption.inc:139
+msgid "Válido hasta"
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:136
+#: ../../../../inc/themes/material-blue/encryption.inc:151
+#: ../../../../inc/themes/material-blue/encryption.inc:157
+#, fuzzy
+msgid "Validez (s)"
+msgstr "Таймаут сессии (секунды)"
+
+#: ../../../../inc/themes/classic/encryption.inc:139
+msgid "Validez"
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:157
+#: ../../../../inc/themes/material-blue/encryption.inc:176
+msgid ""
+"La clave temporal es utilizada como clave maestra para los usuarios que "
+"necesitan introducirla al iniciar la sesión, así no es necesario facilitar "
+"la clave maestra original."
+msgstr ""
+
+#: ../../../../inc/themes/classic/encryption.inc:159
+#: ../../../../inc/themes/material-blue/encryption.inc:180
+#, fuzzy
+msgid "Generar"
+msgstr "Сгенерировать пароль"
+
+#: ../../../../inc/themes/classic/eventlog.inc:8
+#: ../../../../inc/themes/classic/search.inc:3
+#: ../../../../inc/themes/material-blue/eventlog.inc:7
+#: ../../../../inc/themes/material-blue/search.inc:3
+msgid "No se encontraron registros"
+msgstr "Записи не найдены"
+
+#: ../../../../inc/themes/classic/eventlog.inc:19
+#: ../../../../inc/themes/material-blue/eventlog.inc:18
+msgid "Fecha / Hora"
+msgstr "Дата / Время"
+
+#: ../../../../inc/themes/classic/eventlog.inc:22
+#: ../../../../inc/themes/material-blue/eventlog.inc:21
+msgid "Evento"
+msgstr "Событие"
+
+#: ../../../../inc/themes/classic/eventlog.inc:28
+#: ../../../../inc/themes/material-blue/eventlog.inc:27
+msgid "IP"
+msgstr "IP"
+
+#: ../../../../inc/themes/classic/eventlog.inc:86
+#: ../../../../inc/themes/classic/search.inc:159
+#: ../../../../inc/themes/material-blue/eventlog.inc:85
+#: ../../../../inc/themes/material-blue/search.inc:173
+msgid "Primera página"
+msgstr "Первая страница"
+
+#: ../../../../inc/themes/classic/eventlog.inc:88
+#: ../../../../inc/themes/classic/search.inc:161
+#: ../../../../inc/themes/material-blue/eventlog.inc:87
+#: ../../../../inc/themes/material-blue/search.inc:175
+msgid "Página anterior"
+msgstr "Прошлая страница"
+
+#: ../../../../inc/themes/classic/eventlog.inc:93
+#: ../../../../inc/themes/classic/search.inc:166
+#: ../../../../inc/themes/material-blue/eventlog.inc:92
+#: ../../../../inc/themes/material-blue/search.inc:180
+msgid "Página siguiente"
+msgstr "Следующая страница"
+
+#: ../../../../inc/themes/classic/eventlog.inc:95
+#: ../../../../inc/themes/classic/search.inc:168
+#: ../../../../inc/themes/material-blue/eventlog.inc:94
+#: ../../../../inc/themes/material-blue/search.inc:182
+msgid "Última página"
+msgstr "Последняя страница"
+
+#: ../../../../inc/themes/classic/files.inc:22
+#: ../../../../inc/themes/material-blue/files.inc:21
+msgid "Ver Archivo"
+msgstr "Показать файл"
+
+#: ../../../../inc/themes/classic/footer.inc:6
+#: ../../../../inc/themes/material-blue/footer.inc:27
+msgid "Indica si la conexión utiliza HTTPS."
+msgstr ""
+
+#: ../../../../inc/themes/classic/footer.inc:6
+#: ../../../../inc/themes/material-blue/footer.inc:27
+msgid ""
+"Las claves de formularios enviados se encriptan mediante PKI, el resto de "
+"datos no."
+msgstr ""
+
+#: ../../../../inc/themes/classic/footer.inc:6
+#: ../../../../inc/themes/material-blue/footer.inc:27
+#, fuzzy
+msgid "Seguro"
+msgstr "Безопасность"
+
+#: ../../../../inc/themes/classic/footer.inc:6
+#: ../../../../inc/themes/material-blue/footer.inc:27
+msgid "Inseguro"
+msgstr ""
+
+#: ../../../../inc/themes/classic/footer.inc:11
+#: ../../../../inc/themes/material-blue/footer.inc:18
+msgid "Ayuda :: FAQ :: Changelog"
+msgstr "Help :: FAQ :: Changelog"
+
+#: ../../../../inc/themes/classic/footer.inc:14
+#: ../../../../inc/themes/material-blue/footer.inc:23
+msgid "Un proyecto de cygnux.org"
+msgstr "Проект cygnux.org"
+
+#: ../../../../inc/themes/classic/groups.inc:10
+#: ../../../../inc/themes/material-blue/groups.inc:14
+msgid "Nombre del grupo"
+msgstr "Имя группы"
+
+#: ../../../../inc/themes/classic/groups.inc:18
+#: ../../../../inc/themes/material-blue/groups.inc:26
+msgid "Descripción del grupo"
+msgstr "Описание группы"
+
+#: ../../../../inc/themes/classic/import.inc:7
+#: ../../../../inc/themes/material-blue/import.inc:121
+msgid "Importar phpPMS"
+msgstr "Импорт phpPMS"
+
+#: ../../../../inc/themes/classic/import.inc:14
+#: ../../../../inc/themes/classic/install.inc:63
+#: ../../../../inc/themes/classic/install.inc:64
+#: ../../../../inc/themes/material-blue/import.inc:128
+#: ../../../../inc/themes/material-blue/import.inc:140
+msgid "Usuario BBDD"
+msgstr "Имя пользователя DB"
+
+#: ../../../../inc/themes/classic/import.inc:18
+#: ../../../../inc/themes/material-blue/import.inc:132
+#, fuzzy
+msgid "Indicar el usuario de conexión a la base de datos de phpPMS."
+msgstr "Введите пользователя для подключения к базе phpPMS"
+
+#: ../../../../inc/themes/classic/import.inc:28
+#: ../../../../inc/themes/classic/install.inc:71
+#: ../../../../inc/themes/classic/install.inc:73
+#: ../../../../inc/themes/material-blue/import.inc:146
+#: ../../../../inc/themes/material-blue/import.inc:152
+msgid "Clave BBDD"
+msgstr "Пароль DB"
+
+#: ../../../../inc/themes/classic/import.inc:36
+#: ../../../../inc/themes/classic/install.inc:78
+#: ../../../../inc/themes/classic/install.inc:79
+#: ../../../../inc/themes/material-blue/import.inc:158
+#: ../../../../inc/themes/material-blue/import.inc:170
+msgid "Nombre BBDD"
+msgstr "Имя DB"
+
+#: ../../../../inc/themes/classic/import.inc:40
+#: ../../../../inc/themes/material-blue/import.inc:162
+#, fuzzy
+msgid "Indicar el nombre de la base de datos de phpPMS."
+msgstr "Введите имя базы phpPMS"
+
+#: ../../../../inc/themes/classic/import.inc:50
+#: ../../../../inc/themes/classic/install.inc:87
+#: ../../../../inc/themes/classic/install.inc:88
+#: ../../../../inc/themes/material-blue/import.inc:176
+#: ../../../../inc/themes/material-blue/import.inc:188
+msgid "Servidor BBDD"
+msgstr "Сервер DB"
+
+#: ../../../../inc/themes/classic/import.inc:54
+#: ../../../../inc/themes/material-blue/import.inc:180
+#, fuzzy
+msgid "Indicar el servidor de la base de datos de phpPMS."
+msgstr "Введите имя сервера с базой phpPMS"
+
+#: ../../../../inc/themes/classic/import.inc:64
+#: ../../../../inc/themes/material-blue/import.inc:194
+msgid "Confirmar"
+msgstr "Подтвердить"
+
+#: ../../../../inc/themes/classic/import.inc:68
+#: ../../../../inc/themes/material-blue/import.inc:198
+msgid "Los datos actuales serán borrados (excepto el usuario actual)"
+msgstr "Текущие данные будут удалены (кроме текущего пользователя)"
+
+#: ../../../../inc/themes/classic/import.inc:83
+msgid "Iniciar"
+msgstr "Старт"
+
+#: ../../../../inc/themes/classic/import.inc:89
+#: ../../../../inc/themes/material-blue/import.inc:7
+msgid "Importar CSV/XML"
+msgstr "Импорт CSV/XML"
+
+#: ../../../../inc/themes/classic/import.inc:96
+#: ../../../../inc/themes/material-blue/import.inc:14
+#, fuzzy
+msgid "Usuario por Defecto"
+msgstr "Задает профиль по умолчанию для новых пользователей из LDAP"
+
+#: ../../../../inc/themes/classic/import.inc:100
+#: ../../../../inc/themes/material-blue/import.inc:18
+#, fuzzy
+msgid "Define el usuario por defecto para las cuentas importadas."
+msgstr "Задает профиль по умолчанию для новых пользователей из LDAP"
+
+#: ../../../../inc/themes/classic/import.inc:117
+#: ../../../../inc/themes/classic/ldap.inc:144
+#: ../../../../inc/themes/material-blue/import.inc:36
+#: ../../../../inc/themes/material-blue/ldap.inc:170
+msgid "Grupo por Defecto"
+msgstr "Группа по умолчанию"
+
+#: ../../../../inc/themes/classic/import.inc:121
+#: ../../../../inc/themes/material-blue/import.inc:40
+#, fuzzy
+msgid "Define el grupo por defecto para las cuentas importadas."
+msgstr "Задает группу по умолчанию для новых пользователей из LDAP"
+
+#: ../../../../inc/themes/classic/import.inc:138
+#: ../../../../inc/themes/material-blue/import.inc:58
+#: ../../../../inc/themes/material-blue/import.inc:64
+#, fuzzy
+msgid "Clave de Importación"
+msgstr "Подтвердите импорт учетной записи"
+
+#: ../../../../inc/themes/classic/import.inc:146
+#: ../../../../inc/themes/material-blue/import.inc:70
+#: ../../../../inc/themes/material-blue/import.inc:76
+#, fuzzy
+msgid "Delimitador CSV"
+msgstr "Импорт CSV/XML"
+
+#: ../../../../inc/themes/classic/import.inc:162
+#: ../../../../inc/themes/material-blue/import.inc:90
+msgid "Soltar archivo aquí o click para seleccionar"
+msgstr "Перетащите файлы сюда или нажниме для выбора"
+
+#: ../../../../inc/themes/classic/import.inc:175
+msgid ""
+"Permite realizar la importación de Cuentas, Categorías y Clientes desde "
+"arhcivos XML y CSV."
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:177
+#: ../../../../inc/themes/material-blue/import.inc:106
+msgid ""
+"Los formatos de archivos XML soportados son: sysPass, KeePass y KeePassX"
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:179
+#: ../../../../inc/themes/material-blue/import.inc:108
+msgid ""
+"Arrastar el archivo a importar a la zona indicada o hacer click sobre la "
+"flecha."
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:181
+#: ../../../../inc/themes/material-blue/import.inc:110
+#, fuzzy
+msgid ""
+"Para archivos de KeePass o KeePassX, el nombre del cliente será igual a "
+"KeePass o KeePassX y la categoría igual al nombre de los grupos."
+msgstr ""
+"Импорт из KeePass или KeePassX. Имя заказчика будет KeePass или KeePassX."
+
+#: ../../../../inc/themes/classic/import.inc:183
+#: ../../../../inc/themes/material-blue/import.inc:112
+#, fuzzy
+msgid "La importación de archivos CSV se realiza con el siguiente formato:"
+msgstr "Импорт из CSV в формате"
+
+#: ../../../../inc/themes/classic/import.inc:185
+#: ../../../../inc/themes/material-blue/import.inc:114
+msgid "nombre_de_cuenta;cliente;categoría;url;usuario;clave;notas"
+msgstr "account_name;customer;category;url;user;password;notes"
+
+#: ../../../../inc/themes/classic/import.inc:187
+#: ../../../../inc/themes/material-blue/import.inc:116
+#, fuzzy
+msgid ""
+"En todos los casos, si el cliente o la categoría no están creados, se crean "
+"automáticamente."
+msgstr "Если заказчика или категории нет, они будут автоматически созданы."
+
+#: ../../../../inc/themes/classic/info.inc:4
+#: ../../../../inc/themes/material-blue/info.inc:4
+#, fuzzy
+msgid "Información de la Aplicación"
+msgstr "Описание запроса"
+
+#: ../../../../inc/themes/classic/info.inc:10
+#: ../../../../inc/themes/material-blue/info.inc:10
+#, fuzzy
+msgid "Versión sysPass"
+msgstr "Версия"
+
+#: ../../../../inc/themes/classic/info.inc:18
+#: ../../../../inc/themes/material-blue/info.inc:18
+#, fuzzy
+msgid "Base de Datos"
+msgstr "Обновление базы данных не требуется."
+
+#: ../../../../inc/themes/classic/info.inc:30
+#: ../../../../inc/themes/material-blue/info.inc:30
+#, fuzzy
+msgid "PHP"
+msgstr "Необходим PHP версии >= 5.1"
+
+#: ../../../../inc/themes/classic/info.inc:35
+#: ../../../../inc/themes/material-blue/info.inc:35
+#, fuzzy
+msgid "Extensiones"
+msgstr "Нет доступных расширений файлов"
+
+#: ../../../../inc/themes/classic/info.inc:37
+#: ../../../../inc/themes/material-blue/info.inc:37
+msgid "Memoria Usada"
+msgstr ""
+
+#: ../../../../inc/themes/classic/info.inc:44
+#: ../../../../inc/themes/classic/ldap.inc:32
+#: ../../../../inc/themes/classic/mail.inc:21
+#: ../../../../inc/themes/material-blue/config.inc:316
+#: ../../../../inc/themes/material-blue/info.inc:44
+#: ../../../../inc/themes/material-blue/ldap.inc:35
+#: ../../../../inc/themes/material-blue/ldap.inc:58
+#: ../../../../inc/themes/material-blue/ldap.inc:86
+#: ../../../../inc/themes/material-blue/mail.inc:24
+#: ../../../../inc/themes/material-blue/mail.inc:30
+msgid "Servidor"
+msgstr "Сервер"
+
+#: ../../../../inc/themes/classic/install.inc:4
+#: ../../../../inc/themes/material-blue/install.inc:4
+msgid "Instalación "
+msgstr "Установка"
+
+#: ../../../../inc/themes/classic/install.inc:25
+#: ../../../../inc/themes/material-blue/install.inc:25
+msgid "Crear cuenta de admin de sysPass"
+msgstr "Создать аккаунт администратора sysPass"
+
+#: ../../../../inc/themes/classic/install.inc:32
+#: ../../../../inc/themes/material-blue/install.inc:36
+msgid "Login del usuario administrador de sysPass"
+msgstr "Учетная запись администратора sysPass"
+
+#: ../../../../inc/themes/classic/install.inc:58
+#: ../../../../inc/themes/material-blue/install.inc:69
+msgid "Configurar BBDD"
+msgstr "Конфигурация БД"
+
+#: ../../../../inc/themes/classic/install.inc:67
+msgid "Login de usuario con permisos de administrador de MySQL"
+msgstr "Используйте учетную запись с правами администратора базы данных"
+
+#: ../../../../inc/themes/classic/install.inc:83
+#: ../../../../inc/themes/material-blue/install.inc:102
+msgid "Nombre de la base de datos para sysPass"
+msgstr "Имя базы данных sysPass"
+
+#: ../../../../inc/themes/classic/install.inc:91
+msgid "Nombre del servidor de la base de datos de sysPass"
+msgstr "Имя сервера базы данных sysPass"
+
+#: ../../../../inc/themes/classic/install.inc:97
+#: ../../../../inc/themes/material-blue/install.inc:120
+msgid "Modo Hosting"
+msgstr "Режим хостинга"
+
+#: ../../../../inc/themes/classic/install.inc:104
+#: ../../../../inc/themes/material-blue/install.inc:127
+msgid "No crea ni verifica los permisos del usuario sobre la BBDD"
+msgstr "Права доступа к БД не создаются и не проеряются"
+
+#: ../../../../inc/themes/classic/install.inc:108
+#: ../../../../inc/themes/material-blue/install.inc:134
+#: ../../../../inc/themes/material-blue/install.inc:135
+msgid "Instalar"
+msgstr "Установка"
+
+#: ../../../../inc/themes/classic/ldap.inc:12
+#: ../../../../inc/themes/material-blue/ldap.inc:12
+msgid "Habilitar LDAP"
+msgstr "Включить LDAP"
+
+#: ../../../../inc/themes/classic/ldap.inc:16
+#: ../../../../inc/themes/material-blue/ldap.inc:16
+#, fuzzy
+msgid "Habilita de autentificación mediante servidor LDAP."
+msgstr "Включает аутентификацию по LDAP"
+
+#: ../../../../inc/themes/classic/ldap.inc:20
+#: ../../../../inc/themes/material-blue/ldap.inc:20
+#, fuzzy
+msgid "Este método utilizará MySQL en caso de fallo."
+msgstr "Этот метод будет переключаться на MySQL при сбоях"
+
+#: ../../../../inc/themes/classic/ldap.inc:36
+#: ../../../../inc/themes/material-blue/ldap.inc:39
+#, fuzzy
+msgid "Nombre o dirección IP del servidor de LDAP."
+msgstr "Адрес сервера LDAP"
+
+#: ../../../../inc/themes/classic/ldap.inc:40
+#: ../../../../inc/themes/classic/ldap.inc:65
+#: ../../../../inc/themes/classic/ldap.inc:100
+#: ../../../../inc/themes/classic/ldap.inc:128
+#: ../../../../inc/themes/classic/wiki.inc:89
+#: ../../../../inc/themes/material-blue/ldap.inc:43
+#: ../../../../inc/themes/material-blue/ldap.inc:72
+#: ../../../../inc/themes/material-blue/ldap.inc:119
+#: ../../../../inc/themes/material-blue/ldap.inc:151
+#: ../../../../inc/themes/material-blue/wiki.inc:101
+#, fuzzy
+msgid "Ejemplos:"
+msgstr "Примеры"
+
+#: ../../../../inc/themes/classic/ldap.inc:57
+#: ../../../../inc/themes/material-blue/ldap.inc:64
+msgid "Usuario de conexión"
+msgstr "Пользователь для подключения"
+
+#: ../../../../inc/themes/classic/ldap.inc:61
+#: ../../../../inc/themes/material-blue/ldap.inc:68
+#, fuzzy
+msgid "Usuario para conectar con el servicio de LDAP."
+msgstr "Пользователь для подключения к серверу LDAP"
+
+#: ../../../../inc/themes/classic/ldap.inc:81
+#: ../../../../inc/themes/material-blue/ldap.inc:92
+msgid "Clave de conexión"
+msgstr "Пароль для подключения"
+
+#: ../../../../inc/themes/classic/ldap.inc:92
+#: ../../../../inc/themes/material-blue/ldap.inc:111
+#: ../../../../inc/themes/material-blue/ldap.inc:133
+msgid "Base de búsqueda"
+msgstr "Начинать поиск с"
+
+#: ../../../../inc/themes/classic/ldap.inc:96
+#: ../../../../inc/themes/material-blue/ldap.inc:115
+#, fuzzy
+msgid "Base en la que realizar la búsqueda de usuarios de LDAP."
+msgstr "Откуда начинать поиск в LDAP."
+
+#: ../../../../inc/themes/classic/ldap.inc:120
+#: ../../../../inc/themes/material-blue/ldap.inc:143
+#, fuzzy
+msgid ""
+"Grupo de LDAP al que debe de pertenecer el usuario para permitir el acceso."
+msgstr ""
+"Пользователи из LDAP должны состоять в указанной группе для получения доступа"
+
+#: ../../../../inc/themes/classic/ldap.inc:124
+#: ../../../../inc/themes/material-blue/ldap.inc:147
+msgid "Este grupo debe de estar ubicado en la base de búsquedas de LDAP."
+msgstr ""
+
+#: ../../../../inc/themes/classic/ldap.inc:148
+#: ../../../../inc/themes/material-blue/ldap.inc:174
+msgid ""
+"Define el grupo de usuarios por defecto para los nuevos usuarios de LDAP."
+msgstr "Задает группу по умолчанию для новых пользователей из LDAP"
+
+#: ../../../../inc/themes/classic/ldap.inc:165
+#: ../../../../inc/themes/material-blue/ldap.inc:190
+msgid "Perfil por Defecto"
+msgstr "Профиль по умолчанию"
+
+#: ../../../../inc/themes/classic/ldap.inc:169
+#: ../../../../inc/themes/material-blue/ldap.inc:194
+#, fuzzy
+msgid ""
+"Define el perfil de usuarios por defecto para los nuevos usuarios de LDAP."
+msgstr "Задает профиль по умолчанию для новых пользователей из LDAP"
+
+#: ../../../../inc/themes/classic/ldap.inc:186
+#: ../../../../inc/themes/material-blue/ldap.inc:210
+msgid "Active Directory"
+msgstr "Active Directory"
+
+#: ../../../../inc/themes/classic/ldap.inc:190
+#: ../../../../inc/themes/material-blue/ldap.inc:214
+msgid "Habilita el modo de conexión con LDAP de Active Directory."
+msgstr "Включает режим подключения Active Directory к серверу LDAP."
+
+#: ../../../../inc/themes/classic/ldap.inc:202
+#: ../../../../inc/themes/material-blue/ldap.inc:228
+msgid "Comprobar"
+msgstr "Проверить"
+
+#: ../../../../inc/themes/classic/ldap.inc:206
+#: ../../../../inc/themes/material-blue/ldap.inc:232
+msgid "Comprobar conexión con LDAP"
+msgstr "Проверить подключение к LDAP"
+
+#: ../../../../inc/themes/classic/login.inc:46
+#: ../../../../inc/themes/material-blue/login.inc:73
+msgid "¿Olvidó su clave?"
+msgstr "Забыли пароль?"
+
+#: ../../../../inc/themes/classic/login.inc:59
+#: ../../../../inc/themes/material-blue/login.inc:85
+msgid "Aplicación actualizada correctamente"
+msgstr "Программа успешно обновлена"
+
+#: ../../../../inc/themes/classic/login.inc:64
+#: ../../../../inc/themes/classic/login.inc:65
+#: ../../../../inc/themes/material-blue/login.inc:90
+#: ../../../../inc/themes/material-blue/login.inc:91
+#: ../../../../inc/themes/material-blue/login.inc:93
+msgid "Nuevas Características"
+msgstr "Новые возможности"
+
+#: ../../../../inc/themes/classic/mail.inc:11
+#: ../../../../inc/themes/material-blue/mail.inc:11
+msgid "Habilitar notificaciones de correo"
+msgstr "Включить уведомления по email"
+
+#: ../../../../inc/themes/classic/mail.inc:29
+#: ../../../../inc/themes/material-blue/config.inc:330
+#: ../../../../inc/themes/material-blue/mail.inc:36
+#: ../../../../inc/themes/material-blue/mail.inc:43
+msgid "Puerto"
+msgstr "Порт"
+
+#: ../../../../inc/themes/classic/mail.inc:37
+#: ../../../../inc/themes/material-blue/mail.inc:49
+msgid "Habilitar Autentificación"
+msgstr "Включить аутентификацию"
+
+#: ../../../../inc/themes/classic/mail.inc:68
+#: ../../../../inc/themes/material-blue/mail.inc:91
+msgid "Deshabilitada"
+msgstr "Отключена"
+
+#: ../../../../inc/themes/classic/mail.inc:77
+#: ../../../../inc/themes/material-blue/mail.inc:100
+#: ../../../../inc/themes/material-blue/mail.inc:107
+msgid "Dirección de correo de envío"
+msgstr "Email получателя"
+
+#: ../../../../inc/themes/classic/mail.inc:85
+#: ../../../../inc/themes/material-blue/mail.inc:113
+msgid "Habilitar peticiones por correo"
+msgstr "Включить запросы по email"
+
+#: ../../../../inc/themes/classic/mgmttabs.inc:66
+#: ../../../../inc/themes/classic/search.inc:110
+#: ../../../../inc/themes/material-blue/search.inc:125
+msgid "Más Acciones"
+msgstr "Другие действия"
+
+#: ../../../../inc/themes/classic/passreset.inc:13
+#: ../../../../inc/themes/material-blue/passreset.inc:10
+msgid "Solicitud de Cambio de Clave"
+msgstr "Запросить смену пароля"
+
+#: ../../../../inc/themes/classic/passreset.inc:16
+msgid "Login del Usuario"
+msgstr "Логин"
+
+#: ../../../../inc/themes/classic/passreset.inc:21
+#: ../../../../inc/themes/material-blue/passreset.inc:24
+msgid "Email del Usuario"
+msgstr "Email"
+
+#: ../../../../inc/themes/classic/passreset.inc:22
+#: ../../../../inc/themes/classic/users.inc:61
+#: ../../../../inc/themes/material-blue/users.inc:71
+msgid "Email"
+msgstr "Email"
+
+#: ../../../../inc/themes/classic/passreset.inc:27
+msgid "Nueva Clave"
+msgstr "Новый пароль"
+
+#: ../../../../inc/themes/classic/passreset.inc:34
+msgid "Nueva Clave (Verificar)"
+msgstr "Новый пароль (подтверждение)"
+
+#: ../../../../inc/themes/classic/passreset.inc:35
+msgid "Clave (Verificar)"
+msgstr "Пароль (подтверждение)"
+
+#: ../../../../inc/themes/classic/passreset.inc:46
+#: ../../../../inc/themes/material-blue/passreset.inc:42
msgid "Volver a iniciar sesión"
msgstr "Назад ко входу"
-#: ../../../../inc/tpl/passreset.php:85
+#: ../../../../inc/themes/classic/passreset.inc:48
+#: ../../../../inc/themes/material-blue/2fa.inc:27
+#: ../../../../inc/themes/material-blue/passreset.inc:48
+#: ../../../../inc/themes/material-blue/passreset.inc:49
msgid "Solicitar"
msgstr "Запрос"
-#: ../../../../inc/tpl/passreset.php:86
+#: ../../../../inc/themes/classic/passreset.inc:49
msgid "Solicitar cambio de clave"
msgstr "Запрос на изменение пароля"
-#: ../../../../inc/tpl/passreset.php:88
+#: ../../../../inc/themes/classic/passreset.inc:51
+#: ../../../../inc/themes/material-blue/passreset.inc:53
+#: ../../../../inc/themes/material-blue/passreset.inc:54
msgid "Cambiar"
msgstr "Изменение"
-#: ../../../../inc/tpl/passreset.php:89
+#: ../../../../inc/themes/classic/passreset.inc:52
msgid "Cambiar Clave"
msgstr "Изменение пароля"
-#: ../../../../inc/tpl/profiles.php:41
+#: ../../../../inc/themes/classic/profiles.inc:11
+#: ../../../../inc/themes/material-blue/profiles.inc:14
msgid "Nombre del perfil"
msgstr "Имя профиля"
-#: ../../../../inc/tpl/profiles.php:48
+#: ../../../../inc/themes/classic/profiles.inc:19
+#: ../../../../inc/themes/material-blue/profiles.inc:30
msgid "Ver detalles de cuenta"
msgstr "Просмотр деталей учетной записи"
-#: ../../../../inc/tpl/profiles.php:48
+#: ../../../../inc/themes/classic/profiles.inc:19
+#: ../../../../inc/themes/material-blue/profiles.inc:30
msgid "Ver"
msgstr "Показать"
-#: ../../../../inc/tpl/profiles.php:50
+#: ../../../../inc/themes/classic/profiles.inc:23
+#: ../../../../inc/themes/material-blue/profiles.inc:35
msgid "Ver clave de cuenta"
msgstr "Показать пароль учетной записи"
-#: ../../../../inc/tpl/profiles.php:53
+#: ../../../../inc/themes/classic/profiles.inc:28
+#: ../../../../inc/themes/material-blue/profiles.inc:40
msgid "Ver historial de cuenta"
msgstr "Показать историю учетной записи"
-#: ../../../../inc/tpl/profiles.php:53
-msgid "Ver Historial"
-msgstr "Показать историю"
-
-#: ../../../../inc/tpl/profiles.php:55
+#: ../../../../inc/themes/classic/profiles.inc:32
+#: ../../../../inc/themes/material-blue/profiles.inc:45
msgid "Editar cuenta"
msgstr "Изменить учетную запись"
-#: ../../../../inc/tpl/profiles.php:55
+#: ../../../../inc/themes/classic/profiles.inc:32
+#: ../../../../inc/themes/material-blue/profiles.inc:45
msgid "Editar"
msgstr "Изменить"
-#: ../../../../inc/tpl/profiles.php:58
+#: ../../../../inc/themes/classic/profiles.inc:37
+#: ../../../../inc/themes/material-blue/profiles.inc:50
msgid "Editar clave de cuenta"
msgstr "Изменить пароль учетной записи"
-#: ../../../../inc/tpl/profiles.php:58
+#: ../../../../inc/themes/classic/profiles.inc:37
+#: ../../../../inc/themes/material-blue/profiles.inc:50
msgid "Editar Clave"
msgstr "Изменить пароль"
-#: ../../../../inc/tpl/profiles.php:60
+#: ../../../../inc/themes/classic/profiles.inc:41
msgid "Añadir nueva cuenta"
msgstr "Добавить новую учетную запись"
-#: ../../../../inc/tpl/profiles.php:60
+#: ../../../../inc/themes/classic/profiles.inc:41
msgid "Añadir"
msgstr "Добавить"
-#: ../../../../inc/tpl/profiles.php:63
+#: ../../../../inc/themes/classic/profiles.inc:46
msgid "Borrar cuenta"
msgstr "Удалить учетную запись"
-#: ../../../../inc/tpl/profiles.php:63
+#: ../../../../inc/themes/classic/profiles.inc:46
msgid "Borrar"
msgstr "Удалить"
-#: ../../../../inc/tpl/profiles.php:65
+#: ../../../../inc/themes/classic/profiles.inc:50
msgid "Ver archivos de cuenta"
msgstr "Просмотр файлов учетной записи"
-#: ../../../../inc/tpl/profiles.php:74
+#: ../../../../inc/themes/classic/profiles.inc:61
+#: ../../../../inc/themes/material-blue/profiles.inc:72
msgid "Configuración general"
msgstr "Основная конфигурация"
-#: ../../../../inc/tpl/profiles.php:74
-msgid "General"
-msgstr "Основное"
-
-#: ../../../../inc/tpl/profiles.php:76
+#: ../../../../inc/themes/classic/profiles.inc:65
msgid "Cambiar clave maestra"
msgstr "Изменить мастер-пароль"
-#: ../../../../inc/tpl/profiles.php:79
+#: ../../../../inc/themes/classic/profiles.inc:70
msgid "Realizar copia de seguridad"
msgstr "Выполнить резервное копирование"
-#: ../../../../inc/tpl/profiles.php:79
+#: ../../../../inc/themes/classic/profiles.inc:70
+#: ../../../../inc/themes/material-blue/profiles.inc:82
msgid "Backup"
msgstr "Резервное копирование"
-#: ../../../../inc/tpl/profiles.php:85
+#: ../../../../inc/themes/classic/profiles.inc:74
+#: ../../../../inc/themes/material-blue/profiles.inc:87
+#, fuzzy
+msgid "Realizar importación de cuentas"
+msgstr "Подтвердите импорт учетной записи"
+
+#: ../../../../inc/themes/classic/profiles.inc:81
+#: ../../../../inc/themes/material-blue/profiles.inc:93
msgid "Gestión"
msgstr "Управление"
-#: ../../../../inc/tpl/profiles.php:88
+#: ../../../../inc/themes/classic/profiles.inc:85
+#: ../../../../inc/themes/material-blue/profiles.inc:99
msgid "Gestión de usuarios"
msgstr "Управление пользователями"
-#: ../../../../inc/tpl/profiles.php:90
+#: ../../../../inc/themes/classic/profiles.inc:89
+#: ../../../../inc/themes/material-blue/profiles.inc:104
msgid "Gestión de grupos"
msgstr "Управление группами"
-#: ../../../../inc/tpl/profiles.php:93
+#: ../../../../inc/themes/classic/profiles.inc:94
+#: ../../../../inc/themes/material-blue/profiles.inc:109
msgid "Gestión de perfiles"
msgstr "Управление профилями"
-#: ../../../../inc/tpl/profiles.php:93
+#: ../../../../inc/themes/classic/profiles.inc:94
+#: ../../../../inc/themes/material-blue/profiles.inc:109
msgid "Perfiles"
msgstr "Профили"
-#: ../../../../inc/tpl/profiles.php:96
+#: ../../../../inc/themes/classic/profiles.inc:98
+#: ../../../../inc/themes/material-blue/profiles.inc:114
msgid "Gestión de categorías"
msgstr "Управление категориями"
-#: ../../../../inc/tpl/profiles.php:96
-msgid "Categorías"
-msgstr "Категории"
-
-#: ../../../../inc/tpl/profiles.php:101
+#: ../../../../inc/themes/classic/profiles.inc:103
+#: ../../../../inc/themes/material-blue/profiles.inc:119
msgid "Gestión de clientes"
msgstr "Управление заказчиками"
-#: ../../../../inc/tpl/profiles.php:101
-msgid "Clientes"
-msgstr "Заказчики"
+#: ../../../../inc/themes/classic/profiles.inc:107
+#: ../../../../inc/themes/material-blue/profiles.inc:124
+#, fuzzy
+msgid "Gestión de campos personalizados"
+msgstr "Количество полей неправильно"
-#: ../../../../inc/tpl/profiles.php:108
+#: ../../../../inc/themes/classic/profiles.inc:112
+#: ../../../../inc/themes/material-blue/profiles.inc:129
+#, fuzzy
+msgid "Gestión de autorizaciones API"
+msgstr "Управление файлами отключено"
+
+#: ../../../../inc/themes/classic/profiles.inc:112
+#: ../../../../inc/themes/material-blue/profiles.inc:129
+msgid "Autorizaciones API"
+msgstr ""
+
+#: ../../../../inc/themes/classic/profiles.inc:120
+#: ../../../../inc/themes/material-blue/profiles.inc:135
msgid "Otros"
msgstr "Другие"
-#: ../../../../inc/tpl/profiles.php:111
+#: ../../../../inc/themes/classic/profiles.inc:124
+#: ../../../../inc/themes/material-blue/profiles.inc:141
msgid "Ver log de eventos"
msgstr "Просмотр журнала событий"
-#: ../../../../inc/tpl/profiles.php:111
+#: ../../../../inc/themes/classic/profiles.inc:124
+#: ../../../../inc/themes/material-blue/profiles.inc:141
msgid "Log de Eventos"
msgstr "Журнал событий"
-#: ../../../../inc/tpl/request.php:33
+#: ../../../../inc/themes/classic/profiles.inc:132
+#: ../../../../inc/themes/material-blue/profiles.inc:148
+#, fuzzy
+msgid "Usado por"
+msgstr "выполнено"
+
+#: ../../../../inc/themes/classic/profiles.inc:139
+#: ../../../../inc/themes/material-blue/profiles.inc:155
+msgid "No usado"
+msgstr ""
+
+#: ../../../../inc/themes/classic/request.inc:1
+#: ../../../../inc/themes/material-blue/request.inc:1
msgid "Solicitar Modificación de Cuenta"
msgstr "Запрос изменения учетной записи"
-#: ../../../../inc/tpl/request.php:57
+#: ../../../../inc/themes/classic/request.inc:22
+#: ../../../../inc/themes/material-blue/request.inc:25
msgid "Petición"
msgstr "Запрос"
-#: ../../../../inc/tpl/request.php:60
+#: ../../../../inc/themes/classic/request.inc:24
+#: ../../../../inc/themes/material-blue/request.inc:29
msgid "Descripción de la petición"
msgstr "Описание запроса"
-#: ../../../../inc/tpl/request.php:76
+#: ../../../../inc/themes/classic/request.inc:33
+#: ../../../../inc/themes/material-blue/account.inc:440
+#: ../../../../inc/themes/material-blue/editpass.inc:55
+#: ../../../../inc/themes/material-blue/request.inc:42
+msgid "Atrás"
+msgstr "Назад"
+
+#: ../../../../inc/themes/classic/request.inc:38
+#: ../../../../inc/themes/material-blue/request.inc:48
msgid "Enviar"
msgstr "Отправить"
-#: ../../../../inc/tpl/search.php:59
+#: ../../../../inc/themes/classic/search.inc:24
+#: ../../../../inc/themes/material-blue/search.inc:29
+msgid "Buscar en Wiki"
+msgstr "Поиск в Wiki"
+
+#: ../../../../inc/themes/classic/search.inc:60
+#: ../../../../inc/themes/material-blue/search.inc:65
+msgid "Abrir enlace a"
+msgstr "Открыть ссылку"
+
+#: ../../../../inc/themes/classic/search.inc:78
+#: ../../../../inc/themes/material-blue/search.inc:89
+msgid "Archivos adjuntos"
+msgstr "Вложения"
+
+#: ../../../../inc/themes/classic/search.inc:85
+#: ../../../../inc/themes/material-blue/search.inc:98
+msgid "Enlace a Wiki"
+msgstr "Ссылка на Wiki"
+
+#: ../../../../inc/themes/classic/search.inc:149
+#: ../../../../inc/themes/material-blue/search.inc:163
+msgid "Filtro ON"
+msgstr "Включен фильтр"
+
+#: ../../../../inc/themes/classic/search.inc:153
+#: ../../../../inc/themes/material-blue/search.inc:167
+msgid "Global ON"
+msgstr "Глобальный"
+
+#: ../../../../inc/themes/classic/searchbox.inc:5
+#: ../../../../inc/themes/material-blue/searchbox.inc:5
msgid "Limpiar"
msgstr "Очистить"
-#: ../../../../inc/tpl/search.php:63
+#: ../../../../inc/themes/classic/searchbox.inc:6
+#: ../../../../inc/themes/material-blue/searchbox.inc:10
msgid "Texto a buscar"
msgstr "Текст для поиска"
-#: ../../../../inc/tpl/search.php:68
+#: ../../../../inc/themes/classic/searchbox.inc:10
+#: ../../../../inc/themes/material-blue/searchbox.inc:15
+#, fuzzy
+msgid "Parámetros especiales:"
+msgstr "Ошибочные параметры"
+
+#: ../../../../inc/themes/classic/searchbox.inc:13
+#: ../../../../inc/themes/material-blue/searchbox.inc:18
+msgid "Buscar cuentas a las que 'login' tenga acceso"
+msgstr ""
+
+#: ../../../../inc/themes/classic/searchbox.inc:14
+#: ../../../../inc/themes/material-blue/searchbox.inc:19
+msgid "Buscar cuentas a las que 'group_name' tenga acceso"
+msgstr ""
+
+#: ../../../../inc/themes/classic/searchbox.inc:15
+#: ../../../../inc/themes/material-blue/searchbox.inc:20
+msgid "Buscar cuentas con archivos con el nombre 'file_name'"
+msgstr ""
+
+#: ../../../../inc/themes/classic/searchbox.inc:19
+#: ../../../../inc/themes/material-blue/searchbox.inc:25
+#: ../../../../inc/themes/material-blue/searchbox.inc:28
msgid "Búsqueda global"
msgstr "Глобальный поиск"
-#: ../../../../inc/tpl/search.php:82
+#: ../../../../inc/themes/classic/searchbox.inc:42
+#: ../../../../inc/themes/material-blue/searchbox.inc:54
msgid "CPP"
msgstr "APP"
-#: ../../../../inc/tpl/search.php:82
+#: ../../../../inc/themes/classic/searchbox.inc:42
+#: ../../../../inc/themes/material-blue/searchbox.inc:54
msgid "Cuentas por página"
msgstr "Учетных записей на страницу"
-#: ../../../../inc/tpl/upgrade.php:42
-msgid "Actualización de BBDD"
-msgstr "Обновление БД"
+#: ../../../../inc/themes/classic/security.inc:4
+#, fuzzy
+msgid "Autenticación"
+msgstr "Предупреждение"
-#: ../../../../inc/tpl/upgrade.php:44
-msgid "Introducir Código de Seguridad"
+#: ../../../../inc/themes/classic/security.inc:13
+#, fuzzy
+msgid "Autenticación en 2 pasos"
+msgstr "Активация учетной записи"
+
+#: ../../../../inc/themes/classic/security.inc:17
+#: ../../../../inc/themes/material-blue/security.inc:15
+msgid ""
+"Habilita la autentificación en 2 pasos que requiere de la introducción de un "
+"token generado por una aplicación como Google Authenticator."
+msgstr ""
+
+#: ../../../../inc/themes/classic/security.inc:21
+#: ../../../../inc/themes/material-blue/security.inc:19
+msgid ""
+"Escanee el código QR proporcionado y a continuación introduzca la clave de 6 "
+"dígitos."
+msgstr ""
+
+#: ../../../../inc/themes/classic/security.inc:29
+#: ../../../../inc/themes/material-blue/security.inc:27
+msgid "Activar"
+msgstr ""
+
+#: ../../../../inc/themes/classic/security.inc:34
+#: ../../../../inc/themes/material-blue/security.inc:33
+#, fuzzy
+msgid "Error al obtener el código QR. Inténtelo de nuevo"
+msgstr "Ошибка при получении истории учетных записей"
+
+#: ../../../../inc/themes/classic/security.inc:39
+#: ../../../../inc/themes/material-blue/security.inc:41
+#, fuzzy
+msgid "Código"
msgstr "Введите код безопасности"
-#: ../../../../inc/tpl/upgrade.php:45
-msgid "Código de Seguridad"
-msgstr "Код безопасности"
+#: ../../../../inc/themes/classic/security.inc:44
+#: ../../../../inc/themes/material-blue/security.inc:46
+msgid ""
+"Una vez activada, sólo es posible acceder si se dispone del dispositivo "
+"generador de códigos asociado."
+msgstr ""
-#: ../../../../inc/tpl/upgrade.php:55
-msgid "Iniciar Actualización"
-msgstr "Начать обновление"
+#: ../../../../inc/themes/classic/sessionbar.inc:6
+#: ../../../../inc/themes/material-blue/footer.inc:7
+msgid "Cambiar clave de usuario"
+msgstr "Изменение пароля"
-#: ../../../../inc/tpl/users.php:72
-msgid "Nombre de usuario completo"
-msgstr "Полное имя пользователя"
+#: ../../../../inc/themes/classic/sessionbar.inc:9
+msgid "Preferencias"
+msgstr ""
-#: ../../../../inc/tpl/users.php:88
-msgid "Login de inicio de sesión"
-msgstr "Session login"
+#: ../../../../inc/themes/classic/sessionbar.inc:15
+#: ../../../../inc/themes/material-blue/footer.inc:5
+msgid "Salir"
+msgstr "Выйти"
-#: ../../../../inc/tpl/users.php:122
-msgid "Dirección de correo"
-msgstr "Адрес email"
-
-#: ../../../../inc/tpl/users.php:161
+#: ../../../../inc/themes/classic/tokens.inc:34
+#: ../../../../inc/themes/classic/users.inc:98
+#: ../../../../inc/themes/material-blue/tokens.inc:34
+#: ../../../../inc/themes/material-blue/users.inc:132
msgid "Opciones"
msgstr "Опции"
-#: ../../../../inc/tpl/users.php:165
+#: ../../../../inc/themes/classic/tokens.inc:38
+#: ../../../../inc/themes/material-blue/tokens.inc:37
+#: ../../../../inc/themes/material-blue/tokens.inc:40
+#, fuzzy
+msgid "Regenerar Autorización"
+msgstr "Начать обновление"
+
+#: ../../../../inc/themes/classic/tokens.inc:43
+#: ../../../../inc/themes/material-blue/tokens.inc:46
+msgid "Token"
+msgstr ""
+
+#: ../../../../inc/themes/classic/update.inc:18
+#: ../../../../inc/themes/material-blue/update.inc:20
+msgid "Actualizado"
+msgstr "Обновлено"
+
+#: ../../../../inc/themes/classic/update.inc:23
+#: ../../../../inc/themes/material-blue/update.inc:22
+#, fuzzy
+msgid "Error al comprobar actualizaciones"
+msgstr "Проверка обновлений"
+
+#: ../../../../inc/themes/classic/upgrade.inc:8
+#: ../../../../inc/themes/material-blue/upgrade.inc:8
+msgid "Actualización de BBDD"
+msgstr "Обновление БД"
+
+#: ../../../../inc/themes/classic/upgrade.inc:10
+msgid "Introducir Código de Seguridad"
+msgstr "Введите код безопасности"
+
+#: ../../../../inc/themes/classic/upgrade.inc:11
+#: ../../../../inc/themes/material-blue/upgrade.inc:14
+msgid "Código de Seguridad"
+msgstr "Код безопасности"
+
+#: ../../../../inc/themes/classic/upgrade.inc:21
+#: ../../../../inc/themes/material-blue/upgrade.inc:25
+msgid "Iniciar Actualización"
+msgstr "Начать обновление"
+
+#: ../../../../inc/themes/classic/users.inc:12
+#: ../../../../inc/themes/material-blue/users.inc:15
+msgid "Nombre de usuario completo"
+msgstr "Полное имя пользователя"
+
+#: ../../../../inc/themes/classic/users.inc:25
+#: ../../../../inc/themes/material-blue/users.inc:31
+msgid "Login de inicio de sesión"
+msgstr "Session login"
+
+#: ../../../../inc/themes/classic/users.inc:64
+#: ../../../../inc/themes/material-blue/users.inc:78
+msgid "Dirección de correo"
+msgstr "Адрес email"
+
+#: ../../../../inc/themes/classic/users.inc:103
+#: ../../../../inc/themes/material-blue/users.inc:136
msgid "Administrador de la aplicación"
msgstr "Администратор программы"
-#: ../../../../inc/tpl/users.php:165
+#: ../../../../inc/themes/classic/users.inc:103
+#: ../../../../inc/themes/material-blue/users.inc:139
msgid "Admin. Aplicación"
msgstr "Администратор программы"
-#: ../../../../inc/tpl/users.php:167
+#: ../../../../inc/themes/classic/users.inc:107
+#: ../../../../inc/themes/material-blue/users.inc:143
msgid "Administrador de cuentas"
msgstr "Администратор учетных записей"
-#: ../../../../inc/tpl/users.php:167
+#: ../../../../inc/themes/classic/users.inc:107
+#: ../../../../inc/themes/material-blue/users.inc:146
msgid "Admin. Cuentas"
msgstr "Администратор учетных записей"
-#: ../../../../inc/tpl/users.php:175
+#: ../../../../inc/themes/classic/users.inc:117
+#: ../../../../inc/themes/material-blue/users.inc:158
msgid "Forzar cambio de clave"
msgstr "Запросить изменение пароля при следующем входе в систему"
-#: ../../../../inc/tpl/users.php:183
+#: ../../../../inc/themes/classic/users.inc:154
+#: ../../../../inc/themes/material-blue/users.inc:198
msgid "Entradas"
msgstr "Записи"
-#: ../../../../inc/tpl/users.php:188
+#: ../../../../inc/themes/classic/users.inc:159
+#: ../../../../inc/themes/material-blue/users.inc:203
msgid "Último Acceso"
msgstr "Последний доступ"
-#: ../../../../inc/tpl/users.php:198
+#: ../../../../inc/themes/classic/users.inc:169
+#: ../../../../inc/themes/material-blue/users.inc:213
msgid "Fecha Clave Maestra"
msgstr "Дата мастер-пароля"
-#: ../../../../inc/upgrade.class.php:49
-msgid "Error al aplicar la actualización de la Base de Datos"
-msgstr "Ошибка обновления базы данных"
+#: ../../../../inc/themes/classic/wiki.inc:11
+#: ../../../../inc/themes/material-blue/wiki.inc:11
+msgid "Habilitar enlaces Wiki"
+msgstr "Включить ссылки Wiki"
-#: ../../../../inc/upgrade.class.php:50
-msgid "Compruebe el registro de eventos para más detalles"
-msgstr "См. журнал событий для получения подробностей."
-
-#: ../../../../inc/upgrade.class.php:66
-msgid "Actualizar BBDD"
-msgstr "Обновление БД"
-
-#: ../../../../inc/upgrade.class.php:97
-msgid "No es necesario actualizar la Base de Datos."
-msgstr "Обновление базы данных не требуется."
-
-#: ../../../../inc/upgrade.class.php:103
-msgid "Error al aplicar la actualización de la Base de Datos."
-msgstr "Ошибка обновления базы данных."
-
-#: ../../../../inc/upgrade.class.php:110
-msgid "Actualización de la Base de Datos realizada correctamente."
-msgstr "Обновление базы данных завершено успешно."
-
-#: ../../../../inc/upgrade.class.php:185
-msgid "Actualizar Configuración"
-msgstr "Обновить конфигурацию"
-
-#: ../../../../inc/upgrade.class.php:186
-msgid "Actualización de la Configuración realizada correctamente."
-msgstr "Конфигурация была успешно обновлена."
-
-#: ../../../../inc/users.class.php:774
-msgid "Activación Cuenta"
-msgstr "Активация учетной записи"
-
-#: ../../../../inc/users.class.php:775
-msgid "Su cuenta está pendiente de activación."
-msgstr "Активация Вашей учетной записи в процессе."
-
-#: ../../../../inc/users.class.php:776
-msgid "En breve recibirá un email de confirmación."
-msgstr "Вы получите письмо в скором времени."
-
-#: ../../../../inc/users.class.php:821 ../../../../inc/users.class.php:863
-msgid "No se pudo realizar la petición de cambio de clave."
-msgstr "Выполнить запрос на смену пароля невозможно."
-
-#: ../../../../inc/users.class.php:858
-msgid "Modificar Usuario"
-msgstr "Изменить пользователя"
-
-#: ../../../../inc/util.class.php:119
-msgid "Versión de PHP requerida >= 5.1"
-msgstr "Необходим PHP версии >= 5.1"
-
-#: ../../../../inc/util.class.php:120
+#: ../../../../inc/themes/classic/wiki.inc:15
+#: ../../../../inc/themes/material-blue/wiki.inc:15
+#, fuzzy
msgid ""
-"Actualice la versión de PHP para que la aplicación funcione correctamente"
-msgstr "Пожалуйста, обновите PHP для использования sysPass"
+"Habilita la opción de añadir un enlace a Wiki externa para los resultados de "
+"la búsqueda."
+msgstr ""
+"Включает возможность добавления внешней ссылки на страницу результатов "
+"поиска учетной записи в Wiki."
-#: ../../../../inc/util.class.php:142
-msgid "Sin este módulo la aplicación puede no funcionar correctamente."
-msgstr "Без этого модуля программа не может работать корректно"
+#: ../../../../inc/themes/classic/wiki.inc:27
+#: ../../../../inc/themes/material-blue/wiki.inc:30
+#: ../../../../inc/themes/material-blue/wiki.inc:56
+msgid "URL de búsqueda Wiki"
+msgstr "URL для поиска в Wiki"
-#: ../../../../js/js.php:45
-msgid "Error en la consulta"
-msgstr "Ошибка запроса"
+#: ../../../../inc/themes/classic/wiki.inc:31
+#: ../../../../inc/themes/material-blue/wiki.inc:34
+#, fuzzy
+msgid "URL que utiliza la wiki para realizar una búsqueda de una página."
+msgstr "URL системы поиска в wiki."
-#: ../../../../js/js.php:46
-msgid "Ha ocurrido un error"
-msgstr "Произошла ошибка"
+#: ../../../../inc/themes/classic/wiki.inc:35
+#: ../../../../inc/themes/material-blue/wiki.inc:38
+#, fuzzy
+msgid "Como parámetro se utiliza el nombre del cliente."
+msgstr "Использует имя заказчика как параметр."
-#: ../../../../js/js.php:48
-msgid "Borrar la cuenta?"
-msgstr "Удалить учетную запись?"
+#: ../../../../inc/themes/classic/wiki.inc:39
+#: ../../../../inc/themes/classic/wiki.inc:66
+#: ../../../../inc/themes/material-blue/wiki.inc:42
+#: ../../../../inc/themes/material-blue/wiki.inc:74
+#, fuzzy
+msgid "Ejemplo:"
+msgstr "Пример"
-#: ../../../../js/js.php:49
-msgid "Borrar el usuario?"
-msgstr "Удалить пользователя?"
+#: ../../../../inc/themes/classic/wiki.inc:54
+#: ../../../../inc/themes/material-blue/wiki.inc:62
+#: ../../../../inc/themes/material-blue/wiki.inc:87
+msgid "URL de página en Wiki"
+msgstr "URL на страницы Wiki"
-#: ../../../../js/js.php:50
-msgid "Guarde la configuración para que sea efectiva"
-msgstr "Необходимо сохранить конфигурацию для вступления изменений в силу"
+#: ../../../../inc/themes/classic/wiki.inc:58
+#: ../../../../inc/themes/material-blue/wiki.inc:66
+#, fuzzy
+msgid "URL que utiliza la wiki para acceder a los detalles de una página."
+msgstr "URL страницы с данными из wiki."
-#: ../../../../js/js.php:51
-msgid "Clave Generada"
-msgstr "Сгенерированный пароль"
+#: ../../../../inc/themes/classic/wiki.inc:62
+#: ../../../../inc/themes/material-blue/wiki.inc:70
+#, fuzzy
+msgid ""
+"El nombre de la cuenta se utiliza como parámetro de la variable de búsqueda "
+"de la Wiki."
+msgstr "Имя учетной записи используется как параметр поиска в wiki."
-#: ../../../../js/js.php:52
-msgid "Nivel alto"
-msgstr "Высокий уровень"
+#: ../../../../inc/themes/classic/wiki.inc:81
+#: ../../../../inc/themes/material-blue/wiki.inc:93
+msgid "Prefijo para nombre de cuenta"
+msgstr "Префикс учетной записи"
-#: ../../../../js/js.php:53
-msgid "Nivel medio"
-msgstr "Средний уровень"
+#: ../../../../inc/themes/classic/wiki.inc:85
+#: ../../../../inc/themes/material-blue/wiki.inc:97
+#, fuzzy
+msgid ""
+"Prefijo para determinar qué cuentas tienen un enlace a una página de la Wiki."
+msgstr "Префикс учетных записей, для которых создавать ссылку на wiki"
-#: ../../../../js/js.php:54
-msgid "Nivel bajo"
-msgstr "Низкий уровень"
+#: ../../../../inc/themes/classic/wiki.inc:121
+#: ../../../../inc/themes/material-blue/wiki.inc:135
+msgid "Añadir filtro"
+msgstr "Добавить фильтр"
-#: ../../../../js/js.php:55
-msgid "Nivel muy alto"
-msgstr "Очень высокий уровень"
+#: ../../../../inc/themes/classic/wiki.inc:122
+#: ../../../../inc/themes/material-blue/wiki.inc:136
+msgid "Eliminar filtro"
+msgstr "Удалить фильтр"
-#: ../../../../js/js.php:56
-msgid "Utilizar al menos 8 caracteres"
-msgstr "Необходимо использовать минимум 8 символов"
+#: ../../../../inc/themes/material-blue/account.inc:4
+#, fuzzy
+msgid "Histórico"
+msgstr "Импорт истории учетных записей"
-#: ../../../../js/js.php:57
-msgid "Borrar elemento?"
-msgstr "Удалить элемент?"
+#: ../../../../inc/themes/material-blue/account.inc:42
+msgid "Seleccionar o escribir para crear uno nuevo"
+msgstr ""
-#: ../../../../js/js.php:58
-msgid "Página no encontrada"
-msgstr "Страница не найдена"
+#: ../../../../inc/themes/material-blue/account.inc:110
+#, fuzzy
+msgid "Clave (Repetir)"
+msgstr "Подтверждение пароля"
-#: ../../../../js/js.php:59
-msgid "Archivo no soportado para visualizar"
-msgstr "Предпросмотр файла недоступен"
+#: ../../../../inc/themes/material-blue/backup.inc:58
+#: ../../../../inc/themes/material-blue/backup.inc:144
+#: ../../../../inc/themes/material-blue/encryption.inc:118
+#: ../../../../inc/themes/material-blue/import.inc:217
+#, fuzzy
+msgid "Realizar"
+msgstr "Выполнить резервное копирование"
-#: ../../../../js/js.php:60
-msgid "Eliminar archivo?"
-msgstr "Удалить файл?"
+#: ../../../../inc/themes/material-blue/config.inc:195
+#, fuzzy
+msgid "Número de resultados por página"
+msgstr "Число результатов поиска на страницу"
-#: ../../../../js/js.php:61
-msgid "Su navegador no soporta subir archivos con HTML5"
-msgstr "Ваш браузер не поддерживает загрузку файлов с HTML5"
+#: ../../../../inc/themes/material-blue/config.inc:290
+#, fuzzy
+msgid "Tamaño máximo de archivo en bytes"
+msgstr "Максимальный размер файла"
-#: ../../../../js/js.php:62
-msgid "Demasiados archivos"
-msgstr "Слишком много файлов"
+#: ../../../../inc/themes/material-blue/config.inc:297
+msgid "Proxy"
+msgstr ""
-#: ../../../../js/js.php:63
-msgid "No es posible guardar el archivo. Tamaño máximo:"
-msgstr "Сохранить файл невозможно. Максимальный размер:"
+#: ../../../../inc/themes/material-blue/config.inc:303
+msgid "Usar Proxy"
+msgstr ""
-#: ../../../../js/js.php:64
-msgid "Extensión no permitida"
-msgstr "Данный тип файла заблокирован"
+#: ../../../../inc/themes/material-blue/config.inc:324
+#, fuzzy
+msgid "Servidor proxy"
+msgstr "Сервер"
-#: ../../../../js/js.php:65
-msgid "Vaciar el registro de eventos?"
-msgstr "Очистить журнал событий?"
+#: ../../../../inc/themes/material-blue/config.inc:338
+msgid "Puerto del servidor proxy"
+msgstr ""
-#~ msgid "No se encontró el grupo con ese nombre"
-#~ msgstr "No group found with that name"
+#: ../../../../inc/themes/material-blue/config.inc:352
+#, fuzzy
+msgid "Usuario del servidor proxy"
+msgstr "Пользователь доступа"
+
+#: ../../../../inc/themes/material-blue/config.inc:366
+msgid "Clave del servidor proxy"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/customfields.inc:14
+#, fuzzy
+msgid "Nombre del campo"
+msgstr "Имя заказчика"
+
+#: ../../../../inc/themes/material-blue/customfields.inc:47
+#, fuzzy
+msgid "Ayuda del campo"
+msgstr "Help :: FAQ :: Changelog"
+
+#: ../../../../inc/themes/material-blue/footer.inc:11
+#, fuzzy
+msgid "Preferencias de usuario"
+msgstr "Указанный логин уже существует"
+
+#: ../../../../inc/themes/material-blue/import.inc:104
+msgid ""
+"Permite realizar la importación de Cuentas, Categorías y Clientes desde "
+"archivos XML y CSV."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/install.inc:31
+#, fuzzy
+msgid "Usuario administrador de sysPass"
+msgstr "Учетная запись администратора sysPass"
+
+#: ../../../../inc/themes/material-blue/install.inc:78
+#, fuzzy
+msgid "Usuario acceso BBDD"
+msgstr "Пользователь доступа"
+
+#: ../../../../inc/themes/material-blue/install.inc:83
+#, fuzzy
+msgid "Usuario con permisos de administrador de MySQL"
+msgstr "Используйте учетную запись с правами администратора базы данных"
+
+#: ../../../../inc/themes/material-blue/install.inc:90
+#, fuzzy
+msgid "Clave acceso BBDD"
+msgstr "Пароль DB"
+
+#: ../../../../inc/themes/material-blue/install.inc:97
+#, fuzzy
+msgid "Nombre BBDD para sysPass"
+msgstr "Имя базы данных sysPass"
+
+#: ../../../../inc/themes/material-blue/install.inc:109
+#, fuzzy
+msgid "Servidor BBDD para sysPass"
+msgstr "Сервер DB"
+
+#: ../../../../inc/themes/material-blue/install.inc:114
+#, fuzzy
+msgid "Nombre del servidor para instalar la base de datos de sysPass"
+msgstr "Имя сервера базы данных sysPass"
+
+#: ../../../../inc/themes/material-blue/ldap.inc:96
+#, fuzzy
+msgid "Clave del usuario de conexión a LDAP."
+msgstr "Пароль пользователя для подключения к LDAP"
+
+#: ../../../../inc/themes/material-blue/mail.inc:118
+msgid ""
+"Habilita que los usuarios puedan solicitar modificaciones o acceso a las "
+"cuentas sin permisos."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/profiles.inc:25
+#, fuzzy
+msgid "Crear nueva cuenta"
+msgstr "Новая учетная запись"
+
+#: ../../../../inc/themes/material-blue/profiles.inc:25
+#, fuzzy
+msgid "Crear"
+msgstr "Ошибка создания пользователей"
+
+#: ../../../../inc/themes/material-blue/profiles.inc:55
+#, fuzzy
+msgid "Eliminar cuenta"
+msgstr "Удалить учетную запись"
+
+#: ../../../../inc/themes/material-blue/profiles.inc:55
+#, fuzzy
+msgid "Eliminar"
+msgstr "Удалить учетную запись"
+
+#: ../../../../inc/themes/material-blue/profiles.inc:60
+#, fuzzy
+msgid "Var archivos de cuenta"
+msgstr "Просмотр файлов учетной записи"
+
+#: ../../../../inc/themes/material-blue/profiles.inc:77
+#, fuzzy
+msgid "Opciones de encriptación"
+msgstr "Опции"
+
+#: ../../../../inc/themes/material-blue/profiles.inc:82
+#, fuzzy
+msgid "Realizar copia de seguridad y exportar"
+msgstr "Выполнить резервное копирование"
+
+#: ../../../../inc/themes/material-blue/security.inc:4
+#, fuzzy
+msgid "Autentificación"
+msgstr "Включить аутентификацию"
diff --git a/inc/log.class.php b/inc/log.class.php
deleted file mode 100644
index 21e4ceeb..00000000
--- a/inc/log.class.php
+++ /dev/null
@@ -1,123 +0,0 @@
-.
- *
- */
-
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
-
-/**
- * Esta clase es la encargada de manejar el registro de eventos
- */
-class SP_Log
-{
- static $numRows;
-
- /**
- * Obtener los eventos guardados.
- *
- * @param int $start con el número de registro desde el que empezar
- * @return false|array con el resultado de la consulta
- */
- public static function getEvents($start)
- {
- $query = 'SELECT SQL_CALC_FOUND_ROWS ' .
- 'log_id,' .
- 'FROM_UNIXTIME(log_date) as date,' .
- 'log_action,' .
- 'log_login,' .
- 'log_ipAddress,' .
- 'log_description ' .
- 'FROM log ' .
- 'ORDER BY log_id DESC ' .
- 'LIMIT ' . $start . ', 50';
-
- $queryRes = DB::getResults($query, __FUNCTION__, true);
-
- if ($queryRes === false) {
- return false;
- }
-
- $numRows = DB::getResults("SELECT FOUND_ROWS() as numRows", __FUNCTION__);
-
- self::$numRows = $numRows->numRows;
-
- return $queryRes;
- }
-
- /**
- * Limpiar el registro de eventos.
- *
- * @return bool con el resultado
- */
- public static function clearEvents()
- {
- $query = 'TRUNCATE TABLE log';
-
- $queryRes = DB::doQuery($query, __FUNCTION__);
-
- if ($queryRes === false) {
- return false;
- }
-
- $message['action'] = _('Vaciar Eventos');
- $message['text'][] = _('Vaciar registro de eventos');
- self::wrLogInfo($message);
- SP_Common::sendEmail($message);
-
- return true;
- }
-
- /**
- * Crear un nuevo registro en el registro de eventos.
- *
- * @param array $message con el nombre de la accióm y el texto del mensaje
- * @return bool
- */
- public static function wrLogInfo($message)
- {
- if (!SP_Util::logIsEnabled() || !is_array($message)) {
- return false;
- }
-
- $login = (isset($_SESSION["ulogin"])) ? $_SESSION["ulogin"] : "-";
- $userId = (isset($_SESSION['uid'])) ? $_SESSION['uid'] : 0;
- $action = strip_tags(utf8_encode($message['action']));
- $description = (isset($message['text'])) ? strip_tags(utf8_encode(implode(';;', $message['text']))) : '';
-
- if (defined('IS_INSTALLER') && IS_INSTALLER === 1) {
- error_log('Action: ' . $action . ' -- Description: ' . $description);
- }
-
- $query = "INSERT INTO log SET " .
- "log_date = UNIX_TIMESTAMP()," .
- "log_login = '" . DB::escape($login) . "'," .
- "log_userId = " . $userId . "," .
- "log_ipAddress = '" . DB::escape($_SERVER['REMOTE_ADDR']) . "'," .
- "log_action = '" . DB::escape($action) . "'," .
- "log_description = '" . DB::escape($description) . "'";
-
- if (DB::doQuery($query, __FUNCTION__) === false) {
- return false;
- }
- }
-}
\ No newline at end of file
diff --git a/inc/migrate.class.php b/inc/migrate.class.php
deleted file mode 100644
index a6819cfc..00000000
--- a/inc/migrate.class.php
+++ /dev/null
@@ -1,954 +0,0 @@
-.
- *
- */
-
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
-
-/**
- * Extender la clase Exception para mostrar ayuda en los mensajes
- */
-class MigrateException extends Exception
-{
- private $type;
- private $hint;
-
- public function __construct($type, $message, $hint, $code = 0, Exception $previous = null)
- {
- $this->type = $type;
- $this->hint = $hint;
- parent::__construct($message, $code, $previous);
- }
-
- public function __toString()
- {
- return __CLASS__ . ": [{$this->code}]: {$this->message} ({$this->hint})\n";
- }
-
- public function getHint()
- {
- return $this->hint;
- }
-
- public function getType()
- {
- return $this->type;
- }
-
-}
-
-/**
- * Esta clase es la encargada de realizar la migración de datos desde phpPMS.
- */
-class SP_Migrate
-{
- private static $dbc; // Database connection
- private static $customersByName;
- private static $currentQuery;
- private static $result = array();
- private static $oldConfig = array();
-
- /**
- * Iniciar migración desde phpPMS.
- *
- * @param array $options datos de conexión
- * @return array resultado del proceso
- */
- public static function migrate($options)
- {
-
- if (!is_array($options)) {
- $result['error'][]['description'] = _('Faltan parámetros');
- return $result;
- }
-
- $dbname = $options['dbname'];
-
- if (preg_match('/(.*):(\d{1,5})/', $options['dbhost'], $match)){
- $dbhost = $match[1];
- $dbport = $match[2];
- } else {
- $dbhost = $options['dbhost'];
- $dbport = 3306;
- }
-
- $dbadmin = $options['dbuser'];
- $dbpass = $options['dbpass'];
-
- try {
- self::checkDatabaseAdmin($dbhost, $dbadmin, $dbpass, $dbname, $dbport);
- self::checkDatabaseExist($dbname);
- self::checkSourceVersion();
- self::cleanCurrentDB();
- self::migrateCustomers();
- self::migrateAccounts();
- self::migrateAccountsGroups();
- self::migrateAccountsHistory();
- self::migrateAcountsFiles();
- self::migrateAccountsCategories();
- self::migrateUsers();
- self::migrateUsersGroups();
- self::migrateConfig();
- } catch (MigrateException $e) {
- self::$result['error'][] = array('type' => $e->getType(), 'description' => $e->getMessage(), 'hint' => $e->getHint());
- return (self::$result);
- }
-
- self::$result['ok'][] = _('Importación finalizada');
- self::$result['ok'][] = _('Revise el registro de eventos para más detalles');
-
- return (self::$result);
- }
-
- /**
- * Comprobar si la conexión con la BBDD de phpPMS es posible.
- *
- * @param string $dbhost host de conexión
- * @param string $dbadmin usuario de conexión
- * @param string $dbpass clave de conexión
- * @param string $dbname nombre de la base de datos
- * @param string $dbport puerto de conexión a la base de datos
- * @throws MigrateException
- * @return none
- */
- private static function checkDatabaseAdmin($dbhost, $dbadmin, $dbpass, $dbname, $dbport)
- {
- self::$dbc = new mysqli($dbhost, $dbadmin, $dbpass, $dbname, $dbport);
-
- if (self::$dbc->connect_errno) {
- throw new MigrateException('critical',
- _('El usuario/clave de MySQL no es correcto'),
- _('Verifique el usuario de conexión con la Base de Datos'));
- }
- }
-
- /**
- * Comprobar si la BBDD existe.
- *
- * @param string $dbname nombre de la base de datos
- * @return none
- */
- private static function checkDatabaseExist($dbname)
- {
- $query = "SELECT COUNT(*) "
- . "FROM information_schema.tables "
- . "WHERE table_schema='" . $dbname . "' "
- . "AND table_name = 'users';";
-
- $queryRes = self::$dbc->query($query);
-
- if ($queryRes) {
- $row = $queryRes->fetch_row();
- }
-
- if (!$queryRes || $row[0] == 0) {
- return false;
- }
-
- return true;
- }
-
- /**
- * Comprobar la versión de phpPMS.
- *
- * @throws MigrateException
- * @return none
- */
- private static function checkSourceVersion()
- {
- if (!isset(self::$oldConfig['version'])) {
- self::getSourceConfig();
- }
-
- if (self::$oldConfig['version'] != "0.973b") {
- throw new MigrateException('critical',
- _('La versión no es compatible') . '(' . self::$oldConfig['version'] . ')',
- _('Actualice a la última versión de phpPMS'));
- }
- }
-
- /**
- * Obtener la configuración desde desde phpPMS.
- *
- * @throws MigrateException
- * @return none
- */
- private static function getSourceConfig()
- {
- $query = 'SELECT vacValue as value,'
- . 'vacParameter as parameter '
- . 'FROM config';
- $queryRes = self::$dbc->query($query);
-
- if (!$queryRes) {
- throw new MigrateException('critical',
- _('Error al obtener la configuración'),
- self::$dbc->error);
- }
-
- while ($row = @$queryRes->fetch_assoc()) {
- self::parseSourceConfig($row);
- }
- }
-
- /**
- * Parsear los valores de configuración de phpPMS y adaptarlos a sysPass.
- *
- * @param array $config con los datos de configuración
- * @return bool
- */
- private static function parseSourceConfig($config)
- {
- if (!is_array($config)) {
- return false;
- }
-
- if (strtolower($config['value']) == 'true' || strtolower($config['value']) == 'on') {
- $value = 1;
- } else {
- $value = (is_numeric($config['value'])) ? (int)$config['value'] : trim($config['value']);
- }
-
- // Guardar la configuración anterior
- self::$oldConfig[$config['parameter']] = $value;
-
- //error_log($config['parameter'].' >> '.$value);
- }
-
- /**
- * Limpiar los datos de sysPass.
- * Limpiar las tablas de la base de sysPass para la importación.
- *
- * @throws MigrateException
- * @return none
- */
- private static function cleanCurrentDB()
- {
- $tables = array('accounts', 'accHistory', 'accFiles', 'accGroups', 'categories', 'customers', 'usrGroups');
-
- // Limpiar datos de las tablas
- foreach ($tables as $table) {
- $query = 'TRUNCATE TABLE ' . $table;
- $queryRes = DB::doQuery($query, __FUNCTION__);
-
- if ($queryRes === false) {
- throw new MigrateException('critical',
- _('Error al vaciar tabla') . ' (' . $table . ')',
- DB::$txtError);
- }
- }
-
- $currentUserId = $_SESSION['uid'];
-
- // Limpiar datos de usuarios manteniendo el usuario actual
- if (self::checkAdminAccount($currentUserId)) {
- $query = 'DELETE FROM usrData WHERE user_id != ' . $currentUserId;
- $queryRes = DB::doQuery($query, __FUNCTION__);
-
- if ($queryRes === false) {
- throw new MigrateException('critical',
- _('Error al vaciar tabla') . ' (' . $table . ')',
- DB::$txtError);
- }
- } else {
- throw new MigrateException('critical',
- _('Usuario actual no es administrador de la aplicación'),
- DB::$txtError);
- }
- }
-
- /**
- * Comprobar si el usuario actual es administrador de la aplicación.
- *
- * @param int $currentUserId con el Id del usuario de la sesión actual
- * @return bool
- */
- private static function checkAdminAccount($currentUserId)
- {
- $query = 'SELECT COUNT(*) '
- . 'FROM usrData '
- . 'WHERE user_id = ' . $currentUserId . ' AND user_isAdminApp = 1';
- $queryRes = DB::doQuery($query, __FUNCTION__);
-
- if ($queryRes !== 1) {
- return false;
- }
-
- return true;
- }
-
- /**
- * Migrar los clientes desde phpPMS.
- *
- * @throws MigrateException
- * @return array resultado
- */
- private static function migrateCustomers()
- {
- $customers = self::getCustomers();
-
- $totalRecords = count($customers);
- $num = 0;
-
- foreach ($customers as $customer) {
- SP_Customer::$customerName = $customer;
-
- if (!SP_Customer::checkDupCustomer()) {
- $num++;
- continue;
- }
-
- if (!SP_Customer::addCustomer()) {
- throw new MigrateException('critical',
- _('No es posible crear el cliente'),
- _('Contacte con el desarrollador'));
- }
- }
-
- $message['action'] = _('Importar Clientes');
- $message['text'][] = 'OK';
- $message['text'][] = _('Registros') . ': ' . $num . ' / ' . $totalRecords;
-
- SP_Log::wrLogInfo($message);
-
-// self::$result['ok'][] = _('Importar Clientes')." - $num / $totalRecords";
- }
-
- /**
- * Obtener los clientes desde phpPMS.
- *
- * @throws MigrateException
- * @return array con los clientes
- */
- private static function getCustomers()
- {
- $query = 'SELECT DISTINCT vacCliente FROM accounts';
- $queryRes = self::$dbc->query($query);
-
- if (!$queryRes) {
- throw new MigrateException('critical',
- _('Error al obtener los clientes'),
- self::$dbc->error);
- }
-
- while ($row = @$queryRes->fetch_row()) {
- $customers[] = trim($row[0]);
- }
-
- return $customers;
- }
-
- /**
- * Migrar las cuentas desde phpPMS.
- *
- * @throws MigrateException
- * @return array resultado
- */
- private static function migrateAccounts()
- {
- $query = 'SELECT intAccountId,'
- . 'intUGroupFId,'
- . 'intUserFId,'
- . 'intUEditFId,'
- . 'vacCliente,vacName,'
- . 'intCategoryFid,'
- . 'vacLogin,'
- . 'vacUrl,'
- . 'vacPassword,'
- . 'vacMd5Password,'
- . 'vacInitialValue,'
- . 'txtNotice,'
- . 'intCountView,'
- . 'intCountDecrypt,'
- . 'datAdded,datChanged '
- . 'FROM accounts ';
- $queryRes = self::$dbc->query($query);
-
- if (!$queryRes) {
- throw new MigrateException('critical',
- _('Error al obtener cuentas'),
- self::$dbc->error);
- }
-
- $totalRecords = $queryRes->num_rows;
- $num = 0;
-
- while ($row = @$queryRes->fetch_assoc()) {
- if (self::insertAccounts($row)) {
- $num++;
- }
- }
-
- $message['action'] = _('Importar Cuentas');
- $message['text'][] = 'OK';
- $message['text'][] = _('Registros') . ': ' . $num . ' / ' . $totalRecords;
-
- SP_Log::wrLogInfo($message);
-
-// self::$result['ok'][] = _('Importar Cuentas')." - $num / $totalRecords";
- }
-
- /**
- * Insertar una cuenta en sysPass.
- *
- * @param array $account con los datos de la cuenta
- * @throws MigrateException
- * @return bool
- */
- private static function insertAccounts($account)
- {
- if (!is_array(self::$customersByName)) {
- $customers = SP_Customer::getCustomers(NULL, true);
- self::$customersByName = array_flip($customers);
- }
-
- $customer = trim($account['vacCliente']);
-
- if (array_key_exists($customer, self::$customersByName)) {
- $customerId = self::$customersByName[$customer];
- } else {
- self::$result['error'][] = _('Cliente no encontrado') . ": " . $account['vacCliente'];
-
- return false;
- }
-
- $query = "INSERT INTO accounts SET
- account_id = " . $account['intAccountId'] . ",
- account_userGroupId = " . $account['intUGroupFId'] . ",
- account_userId = " . $account['intUserFId'] . ",
- account_userEditId = " . $account['intUEditFId'] . ",
- account_customerId = " . $customerId . ",
- account_name = '" . DB::escape($account['vacName']) . "',
- account_categoryId = " . $account['intCategoryFid'] . ",
- account_login = '" . DB::escape($account['vacLogin']) . "',
- account_url = '" . DB::escape($account['vacUrl']) . "',
- account_pass = '" . $account['vacPassword'] . "',
- account_IV = '" . $account['vacInitialValue'] . "',
- account_notes = '" . DB::escape($account['txtNotice']) . "',
- account_countView = " . $account['intCountView'] . ",
- account_countDecrypt = " . $account['intCountDecrypt'] . ",
- account_dateAdd = '" . $account['datAdded'] . "',
- account_dateEdit = '" . $account['datChanged'] . "'";
-
- if (DB::doQuery($query, __FUNCTION__) === false) {
- self::$currentQuery = DB::escape($query);
- throw new MigrateException('critical',
- _('Error al migrar cuenta'),
- DB::$txtError);
- }
-
- return true;
- }
-
- /**
- * Migrar las grupos secundarios de las cuentas desde phpPMS.
- *
- * @throws MigrateException
- * @return array resultado
- */
- private static function migrateAccountsGroups()
- {
- $query = 'SELECT intAccId,'
- . 'intUGroupId '
- . 'FROM acc_usergroups';
- $queryRes = self::$dbc->query($query);
-
- if (!$queryRes) {
- throw new MigrateException('critical',
- _('Error al obtener los grupos de cuentas'),
- self::$dbc->error);
- }
-
- $totalRecords = $queryRes->num_rows;
- $num = 0;
-
- while ($row = @$queryRes->fetch_assoc()) {
- if (self::insertAccountsGroups($row)) {
- $num++;
- }
- }
-
- $message['action'] = _('Importar Grupos de Cuentas');
- $message['text'][] = 'OK';
- $message['text'][] = _('Registros') . ': ' . $num . ' / ' . $totalRecords;
-
- SP_Log::wrLogInfo($message);
-// self::$result['ok'][] = _('Importar Grupos de Cuentas')." - $num / $totalRecords";
- }
-
- /**
- * Insertar los grupos secundarios de una cuenta en sysPass.
- *
- * @param array $accountGroup con los datos de los grupos secundarios
- * @throws MigrateException
- * @return bool
- */
- private static function insertAccountsGroups($accountGroup)
- {
- $query = "INSERT INTO accGroups "
- . "SET accgroup_accountId = " . $accountGroup['intAccId'] . ","
- . "accgroup_groupId = " . $accountGroup['intUGroupId'];
-
- if (DB::doQuery($query, __FUNCTION__) === false) {
- throw new MigrateException('critical',
- _('Error al crear grupos de cuentas'),
- DB::$txtError);
- }
-
- return true;
- }
-
- /**
- * Migrar el historail de las cuentas desde phpPMS.
- *
- * @throws MigrateException
- * @return array resultado
- */
- private static function migrateAccountsHistory()
- {
- $query = 'SELECT intAccountId,'
- . 'intUGroupFId,'
- . 'intUserFId,'
- . 'intUEditFId,'
- . 'vacCliente,'
- . 'vacName,'
- . 'intCategoryFid,'
- . 'vacLogin,'
- . 'vacUrl,'
- . 'vacPassword,'
- . 'vacInitialValue,'
- . 'txtNotice,'
- . 'intCountView,'
- . 'intCountDecrypt,'
- . 'datAdded,'
- . 'datChanged,'
- . 'blnModificada,'
- . 'blnEliminada '
- . 'FROM acc_history';
- $queryRes = self::$dbc->query($query);
-
- if (!$queryRes) {
- throw new MigrateException('critical',
- _('Error al obtener el historico de cuentas'),
- self::$dbc->error);
- }
-
- $totalRecords = $queryRes->num_rows;
- $num = 0;
-
- while ($row = @$queryRes->fetch_assoc()) {
- if (self::insertAccountsHistory($row)) {
- $num++;
- }
- }
-
- $message['action'] = _('Importar Histórico de Cuentas');
- $message['text'][] = 'OK';
- $message['text'][] = _('Registros') . ': ' . $num . ' / ' . $totalRecords;
-
- SP_Log::wrLogInfo($message);
-
-// self::$result['ok'][] = _('Importar Histórico de Cuentas')." - $num / $totalRecords";
- }
-
- /**
- * Insertar el historial de una cuenta en sysPass.
- *
- * @param array $accountHistory con los datos del historial de la cuenta
- * @throws MigrateException
- * @return bool
- */
- private static function insertAccountsHistory($accountHistory)
- {
- if (!is_array(self::$customersByName)) {
- $customers = SP_Customer::getCustomers(NULL, true);
- self::$customersByName = array_flip($customers);
- }
-
- $customer = trim($accountHistory['vacCliente']);
-
- if (array_key_exists($customer, self::$customersByName)) {
- $customerId = self::$customersByName[$customer];
- } else {
- return false;
- }
-
- $query = "INSERT INTO accHistory SET
- acchistory_accountId = " . $accountHistory['intAccountId'] . ",
- acchistory_userGroupId = " . $accountHistory['intUGroupFId'] . ",
- acchistory_userId = " . $accountHistory['intUserFId'] . ",
- acchistory_userEditId = " . $accountHistory['intUEditFId'] . ",
- acchistory_customerId = " . $customerId . ",
- acchistory_name = '" . DB::escape($accountHistory['vacName']) . "',
- acchistory_categoryId = " . $accountHistory['intCategoryFid'] . ",
- acchistory_login = '" . DB::escape($accountHistory['vacLogin']) . "',
- acchistory_url = '" . DB::escape($accountHistory['vacUrl']) . "',
- acchistory_pass = '" . $accountHistory['vacPassword'] . "',
- acchistory_IV = '" . $accountHistory['vacInitialValue'] . "',
- acchistory_notes = '" . DB::escape($accountHistory['txtNotice']) . "',
- acchistory_countView = " . $accountHistory['intCountView'] . ",
- acchistory_countDecrypt = " . $accountHistory['intCountDecrypt'] . ",
- acchistory_dateAdd = '" . $accountHistory['datAdded'] . "',
- acchistory_dateEdit = '" . $accountHistory['datChanged'] . "',
- acchistory_isModify = " . $accountHistory['blnModificada'] . ",
- acchistory_isDeleted = " . $accountHistory['blnEliminada'];
-
- if (DB::doQuery($query, __FUNCTION__) === false) {
- throw new MigrateException('critical',
- _('Error al crear historico de cuentas'),
- DB::$txtError);
- }
-
- return true;
- }
-
- /**
- * Migrar los archivos de de las cuentas desde phpPMS.
- *
- * @throws MigrateException
- * @return array resultado
- */
- private static function migrateAcountsFiles()
- {
- $query = 'SELECT intAccountId,'
- . 'vacName,'
- . 'vacType,'
- . 'intSize,'
- . 'blobContent,'
- . 'vacExtension '
- . 'FROM files';
- $queryRes = self::$dbc->query($query);
-
- if (!$queryRes) {
- throw new MigrateException('critical',
- _('Error al obtener los archivos de cuentas'),
- self::$dbc->error);
- }
-
- $totalRecords = $queryRes->num_rows;
- $num = 0;
-
- while ($row = @$queryRes->fetch_assoc()) {
- if (self::insertAccountsFiles($row)) {
- $num++;
- }
- }
-
- $message['action'] = _('Importar Archivos de Cuentas');
- $message['text'][] = 'OK';
- $message['text'][] = _('Registros') . ': ' . $num . ' / ' . $totalRecords;
-
- SP_Log::wrLogInfo($message);
-
-// self::$result['ok'][] = _('Importar Archivos de Cuentas')." - $num / $totalRecords";
- }
-
- /**
- * Insertar los archivos de una cuenta en sysPass.
- *
- * @param array $accountFile con los datos del archivo
- * @throws MigrateException
- * @return bool
- */
- private static function insertAccountsFiles($accountFile)
- {
- $query = "INSERT INTO accFiles "
- . "SET accfile_accountId = " . $accountFile['intAccountId'] . ","
- . "accfile_name = '" . DB::escape($accountFile['vacName']) . "',"
- . "accfile_type = '" . DB::escape($accountFile['vacType']) . "',"
- . "accfile_size = " . $accountFile['intSize'] . ","
- . "accfile_content = '" . DB::escape($accountFile['blobContent']) . "',"
- . "accfile_extension = '" . DB::escape($accountFile['vacExtension']) . "'";
-
- if (DB::doQuery($query, __FUNCTION__) === false) {
- throw new MigrateException('critical',
- _('Error al crear archivos de cuentas'),
- DB::$txtError);
- }
-
- return true;
- }
-
- /**
- * Migrar las categorías de las cuentas desde phpPMS.
- *
- * @throws MigrateException
- * @return array resultado
- */
- private static function migrateAccountsCategories()
- {
- $query = 'SELECT intCategoryId,'
- . 'vacCategoryName '
- . 'FROM categories';
- $queryRes = self::$dbc->query($query);
-
- if (!$queryRes) {
- throw new MigrateException('critical',
- _('Error al obtener las categorías de cuentas'),
- self::$dbc->error);
- }
-
- $totalRecords = $queryRes->num_rows;
- $num = 0;
-
- while ($row = @$queryRes->fetch_assoc()) {
- if (self::insertAccountsCategories($row)) {
- $num++;
- }
- }
-
- $message['action'] = _('Importar Categorías de Cuentas');
- $message['text'][] = 'OK';
- $message['text'][] = _('Registros') . ': ' . $num . ' / ' . $totalRecords;
-
- SP_Log::wrLogInfo($message);
-
-// self::$result['ok'][] = _('Importar Categorías de Cuentas')." - $num / $totalRecords";
- }
-
- /**
- * Insertar las categorías en sysPass.
- *
- * @param array $accountCategory con los datos de la categoría
- * @throws MigrateException
- * @return bool
- */
- private static function insertAccountsCategories($accountCategory)
- {
- $query = "INSERT INTO categories "
- . "SET category_id = " . $accountCategory['intCategoryId'] . ","
- . "category_name = '" . DB::escape($accountCategory['vacCategoryName']) . "'";
-
- if (DB::doQuery($query, __FUNCTION__) === false) {
- throw new MigrateException('critical',
- _('Error al crear categorías de cuentas'),
- DB::$txtError);
- }
-
- return true;
- }
-
- /**
- * Migrar los usuarios desde desde phpPMS.
- *
- * @throws MigrateException
- * @return array resultado
- */
- private static function migrateUsers()
- {
- $query = 'SELECT intUserId,'
- . 'vacUName,'
- . 'intUGroupFid,'
- . 'vacULogin,'
- . 'vacUPassword,'
- . 'vacUEmail,'
- . 'txtUNotes,'
- . 'intUCount,'
- . 'intUProfile,'
- . 'datULastLogin,'
- . 'blnIsAdminApp,'
- . 'blnIsAdminAcc,'
- . 'vacUserMPwd,'
- . 'vacUserMIv,'
- . 'datULastUpdate,'
- . 'datUserLastUpdateMPass,'
- . 'blnFromLdap,'
- . 'blnDisabled '
- . 'FROM users '
- . 'WHERE intUserId <> ' . $_SESSION['uid'];
- $queryRes = self::$dbc->query($query);
-
- if (!$queryRes) {
- throw new MigrateException('critical',
- _('Error al obtener los usuarios'),
- self::$dbc->error);
- }
-
- $totalRecords = $queryRes->num_rows;
- $num = 0;
-
- while ($row = @$queryRes->fetch_assoc()) {
- if (self::insertUsers($row)) {
- $num++;
- }
- }
-
- $message['action'] = _('Importar Usuarios');
- $message['text'][] = 'OK';
- $message['text'][] = _('Registros') . ': ' . $num . ' / ' . $totalRecords;
-
- SP_Log::wrLogInfo($message);
-
-// self::$result['ok'][] = _('Importar Usuarios')." - $num / $totalRecords";
- }
-
- /**
- * Insertar los usuarios en sysPass.
- *
- * @param array $users con los datos del usuario
- * @throws MigrateException
- * @return bool
- *
- * El usuario importado está deshabilitado
- */
- private static function insertUsers($users)
- {
- $query = "INSERT INTO usrData "
- . "SET user_id = " . $users['intUserId'] . ","
- . "user_name = '" . DB::escape($users['vacUName']) . "',"
- . "user_groupId = " . $users['intUGroupFid'] . ","
- . "user_login = '" . DB::escape($users['vacULogin']) . "',"
- . "user_pass = '" . DB::escape($users['vacUPassword']) . "',"
- . "user_mPass = '" . DB::escape($users['vacUserMPwd']) . "',"
- . "user_mIV = '" . DB::escape($users['vacUserMIv']) . "',"
- . "user_email = '" . DB::escape($users['vacUEmail']) . "',"
- . "user_notes = '" . DB::escape($users['txtUNotes']) . "',"
- . "user_count = " . $users['intUCount'] . ","
- . "user_profileId = 0,"
- . "user_lastLogin = '" . $users['datULastLogin'] . "',"
- . "user_lastUpdate = '" . $users['datULastUpdate'] . "',"
- . "user_lastUpdateMPass = " . $users['datUserLastUpdateMPass'] . ","
- . "user_isAdminApp = " . $users['blnIsAdminApp'] . ","
- . "user_isAdminAcc = " . $users['blnIsAdminAcc'] . ","
- . "user_isLdap = " . $users['blnFromLdap'] . ","
- . "user_isDisabled = 1,"
- . "user_isMigrate = 1";
-
- if (DB::doQuery($query, __FUNCTION__) === false) {
- throw new MigrateException('critical',
- _('Error al crear usuarios'),
- DB::$txtError);
- }
-
- return true;
- }
-
- /**
- * Migrar los grupos de usuarios desde desde phpPMS.
- *
- * @throws MigrateException
- * @return array resultado
- */
- private static function migrateUsersGroups()
- {
- $query = 'SELECT intUGroupId,'
- . 'vacUGroupName,'
- . 'vacUGroupDesc '
- . 'FROM usergroups';
- $queryRes = self::$dbc->query($query);
-
- if (!$queryRes) {
- throw new MigrateException('critical',
- _('Error al obtener los grupos de usuarios'),
- self::$dbc->error);
- }
-
- $totalRecords = $queryRes->num_rows;
- $num = 0;
-
- while ($row = @$queryRes->fetch_assoc()) {
- if (self::insertUsersGroups($row)) {
- $num++;
- }
- }
-
- $message['action'] = _('Importar Grupos de Usuarios');
- $message['text'][] = 'OK';
- $message['text'][] = _('Registros') . ': ' . $num . ' / ' . $totalRecords;
-
- SP_Log::wrLogInfo($message);
-
-// self::$result['ok'][] = _('Importar Grupos de Usuarios')." - $num / $totalRecords";
- }
-
- /**
- * Insertar los grupos de usuarios en sysPass.
- *
- * @param array $usersGroups con los datos del grupo
- * @throws MigrateException
- * @return bool
- */
- private static function insertUsersGroups($usersGroups)
- {
- $query = "INSERT INTO usrGroups "
- . "SET usergroup_id = " . $usersGroups['intUGroupId'] . ","
- . "usergroup_name = '" . DB::escape($usersGroups['vacUGroupName']) . "',"
- . "usergroup_description = '" . DB::escape($usersGroups['vacUGroupDesc']) . "'";
-
- if (DB::doQuery($query, __FUNCTION__) === false) {
- throw new MigrateException('critical',
- _('Error al crear los grupos de usuarios'),
- DB::$txtError);
- }
-
- return true;
- }
-
- /**
- * Migrar la configuración desde phpPMS.
- *
- * @return array resultado
- */
- private static function migrateConfig()
- {
- // Obtener la configuración actual
- self::getSourceConfig();
-
- $skip = array('version',
- 'installed',
- 'install',
- 'dbhost',
- 'dbname',
- 'dbuser',
- 'dbpass',
- 'siteroot',
- 'sitelang',
- 'sitename',
- 'siteshortname',
- 'md5_pass',
- 'password_show',
- 'lastupdatempass',
- 'passwordsalt');
- //$savedConfig = array_diff_key($skip, SP_Config::getKeys());
-
- $totalParams = count(self::$oldConfig);
- $num = 0;
-
- // Guardar la nueva configuración
- foreach (self::$oldConfig as $key => $value) {
- if (array_key_exists($key, $skip)) {
- continue;
- }
- SP_Config::setValue($key, $value);
- $num++;
- }
-
- $message['action'] = _('Importar Configuración');
- $message['text'][] = 'OK';
- $message['text'][] = _('Registros') . ': ' . $num . ' / ' . $totalParams;
-
- SP_Log::wrLogInfo($message);
-
-// self::$result['ok'][] = _('Importar Configuración')." - $num / $totalParams";
- }
-}
\ No newline at end of file
diff --git a/inc/profiles.class.php b/inc/profiles.class.php
deleted file mode 100644
index 0cb079cf..00000000
--- a/inc/profiles.class.php
+++ /dev/null
@@ -1,386 +0,0 @@
-.
- *
- */
-
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
-
-/**
- * Esta clase es la encargada de realizar las operaciones sobre los perfiles de usuarios.
- */
-class SP_Profiles
-{
- static $profileId;
- static $profileName;
- static $queryLastId;
-
- /**
- * Obtener los datos de un perfil
- *
- * @param int $id con el Id del perfil a consultar
- * @return array con el nombre de la columna como clave y los datos como valor
- */
- public static function getProfileData($id = 0)
- {
-
- $profile = array('userprofile_id' => 0,
- 'userprofile_name' => '',
- 'userProfile_pView' => 0,
- 'userProfile_pViewPass' => 0,
- 'userProfile_pViewHistory' => 0,
- 'userProfile_pEdit' => 0,
- 'userProfile_pEditPass' => 0,
- 'userProfile_pAdd' => 0,
- 'userProfile_pDelete' => 0,
- 'userProfile_pFiles' => 0,
- 'userProfile_pConfig' => 0,
- 'userProfile_pConfigMasterPass' => 0,
- 'userProfile_pConfigBackup' => 0,
- 'userProfile_pAppMgmtCategories' => 0,
- 'userProfile_pAppMgmtCustomers' => 0,
- 'userProfile_pUsers' => 0,
- 'userProfile_pGroups' => 0,
- 'userProfile_pProfiles' => 0,
- 'userProfile_pEventlog' => 0,
- 'action' => 1);
-
- if ($id > 0) {
- $usersProfiles = self::getProfiles($id);
-
- if ($usersProfiles) {
- foreach ($usersProfiles[0] as $name => $value) {
- if (preg_match('/^.*_p[A-Z].*$/', $name)) {
- $profile[$name] = ((int)$value === 1) ? "CHECKED" : "";
- } else {
- $profile[$name] = $value;
- }
- }
-
- $profile['action'] = 2;
- }
- }
-
- return $profile;
- }
-
- /**
- * Obtener los datos de un perfil
- *
- * @param int $profileId opcional, con el Id del perfil a consultar
- * @return array con la lista de perfiles
- */
- public static function getProfiles($profileId = NULL)
- {
- if (!is_null($profileId)) {
- $query = 'SELECT userprofile_id,'
- . 'userprofile_name,'
- . 'userProfile_pView,'
- . 'userProfile_pViewPass,'
- . 'userProfile_pViewHistory,'
- . 'userProfile_pEdit,'
- . 'userProfile_pEditPass,'
- . 'userProfile_pAdd,'
- . 'userProfile_pDelete,'
- . 'userProfile_pFiles,'
- . 'userProfile_pConfig,'
- . 'userProfile_pConfigMasterPass,'
- . 'userProfile_pConfigBackup,'
- . 'userProfile_pAppMgmtCategories,'
- . 'userProfile_pAppMgmtCustomers,'
- . 'userProfile_pUsers,'
- . 'userProfile_pGroups,'
- . 'userProfile_pProfiles,'
- . 'userProfile_pEventlog '
- . 'FROM usrProfiles '
- . 'WHERE userprofile_id = ' . (int)$profileId . ' LIMIT 1';
- } else {
- $query = 'SELECT userprofile_id,'
- . 'userprofile_name '
- . 'FROM usrProfiles '
- . 'ORDER BY userprofile_name';
- }
-
- $queryRes = DB::getResults($query, __FUNCTION__, true);
-
- if ($queryRes === false) {
- return false;
- }
-
- return $queryRes;
- }
-
- /**
- * Comprobar si un perfil existe
- *
- * @return bool
- */
- public static function checkProfileExist()
- {
- $profileId = (int)strtoupper(self::$profileId);
- $profileName = strtoupper(self::$profileName);
-
- if ($profileId) {
- $query = "SELECT userprofile_name "
- . "FROM usrProfiles "
- . "WHERE UPPER(userprofile_name) = '" . DB::escape($profileName) . "' "
- . "AND userprofile_id != " . $profileId;
- } else {
- $query = "SELECT userprofile_name "
- . "FROM usrProfiles "
- . "WHERE UPPER(userprofile_name) = '" . DB::escape($profileName) . "'";
- }
-
- if (DB::doQuery($query, __FUNCTION__) === false) {
- return false;
- }
-
- if (count(DB::$last_result) >= 1) {
- return false;
- }
-
- return true;
- }
-
- /**
- * Añadir un nuevo perfil
- *
- * @param array $profileProp con las propiedades del perfil
- * @return bool
- */
- public static function addProfile($profileProp = NULL)
- {
- $enableConfig = (int)($profileProp["pConfig"] || $profileProp["pConfigCat"] || $profileProp["pConfigMpw"] || $profileProp["pConfigBack"]);
- $enableAppMgmt = (int)($profileProp["pAppMgmtCat"] || $profileProp["pAppMgmtCust"]);
- $enableUsers = (int)($profileProp["pUsers"] || $profileProp["pGroups"] || $profileProp["pProfiles"]);
-
- $query = "INSERT INTO usrProfiles SET "
- . "userprofile_name = '" . DB::escape(self::$profileName) . "',"
- . "userProfile_pView = " . $profileProp["pAccView"] . ","
- . "userProfile_pViewPass = " . $profileProp["pAccViewPass"] . ","
- . "userProfile_pViewHistory = " . $profileProp["pAccViewHistory"] . ","
- . "userProfile_pEdit = " . $profileProp["pAccEdit"] . ","
- . "userProfile_pEditPass = " . $profileProp["pAccEditPass"] . ","
- . "userProfile_pAdd = " . $profileProp["pAccAdd"] . ","
- . "userProfile_pDelete = " . $profileProp["pAccDel"] . ","
- . "userProfile_pFiles = " . $profileProp["pAccFiles"] . ","
- . "userProfile_pConfigMenu = " . $enableConfig . ","
- . "userProfile_pConfig = " . $profileProp["pConfig"] . ","
- . "userProfile_pConfigMasterPass = " . $profileProp["pConfigMpw"] . ","
- . "userProfile_pConfigBackup = " . $profileProp["pConfigBack"] . ","
- . "userProfile_pAppMgmtMenu = " . $enableAppMgmt . ","
- . "userProfile_pAppMgmtCategories = " . $profileProp["pAppMgmtCat"] . ","
- . "userProfile_pAppMgmtCustomers = " . $profileProp["pAppMgmtCust"] . ","
- . "userProfile_pUsersMenu = " . $enableUsers . ","
- . "userProfile_pUsers = " . $profileProp["pUsers"] . ","
- . "userProfile_pGroups = " . $profileProp["pGroups"] . ","
- . "userProfile_pProfiles = " . $profileProp["pProfiles"] . ","
- . "userProfile_pEventlog = " . $profileProp["pEventlog"];
-
- if (DB::doQuery($query, __FUNCTION__) === false) {
- return false;
- }
-
- self::$queryLastId = DB::$lastId;
-
- $message['action'] = _('Nuevo Perfil');
- $message['text'][] = SP_Html::strongText(_('Perfil') . ': ') . self::$profileName;
-
- SP_Log::wrLogInfo($message);
- SP_Common::sendEmail($message);
-
- return true;
- }
-
- /**
- * Modificar un perfil.
- *
- * @param array $profileProp con las propiedades del perfil
- * @return bool
- */
- public static function updateProfile($profileProp = NULL)
- {
- $enableConfig = (int)($profileProp["pConfig"] || $profileProp["pConfigMpw"] || $profileProp["pConfigBack"]);
- $enableAppMgmt = (int)($profileProp["pAppMgmtCat"] || $profileProp["pAppMgmtCust"]);
- $enableUsers = (int)($profileProp["pUsers"] || $profileProp["pGroups"] || $profileProp["pProfiles"]);
- $profileName = self::getProfileNameById(self::$profileId);
-
- $query = "UPDATE usrProfiles SET "
- . "userprofile_name = '" . DB::escape(self::$profileName) . "',"
- . "userProfile_pView = " . $profileProp["pAccView"] . ","
- . "userProfile_pViewPass = " . $profileProp["pAccViewPass"] . ","
- . "userProfile_pViewHistory = " . $profileProp["pAccViewHistory"] . ","
- . "userProfile_pEdit = " . $profileProp["pAccEdit"] . ","
- . "userProfile_pEditPass = " . $profileProp["pAccEditPass"] . ","
- . "userProfile_pAdd = " . $profileProp["pAccAdd"] . ","
- . "userProfile_pDelete = " . $profileProp["pAccDel"] . ","
- . "userProfile_pFiles = " . $profileProp["pAccFiles"] . ","
- . "userProfile_pConfigMenu = " . $enableConfig . ","
- . "userProfile_pConfig = " . $profileProp["pConfig"] . ","
- . "userProfile_pConfigMasterPass = " . $profileProp["pConfigMpw"] . ","
- . "userProfile_pConfigBackup = " . $profileProp["pConfigBack"] . ","
- . "userProfile_pAppMgmtMenu = " . $enableAppMgmt . ","
- . "userProfile_pAppMgmtCategories = " . $profileProp["pAppMgmtCat"] . ","
- . "userProfile_pAppMgmtCustomers = " . $profileProp["pAppMgmtCust"] . ","
- . "userProfile_pUsersMenu = " . $enableUsers . ","
- . "userProfile_pUsers = " . $profileProp["pUsers"] . ","
- . "userProfile_pGroups = " . $profileProp["pGroups"] . ","
- . "userProfile_pProfiles = " . $profileProp["pProfiles"] . ","
- . "userProfile_pEventlog = " . $profileProp["pEventlog"] . " "
- . "WHERE userprofile_id = " . (int)self::$profileId . " LIMIT 1";
-
- if (DB::doQuery($query, __FUNCTION__) === false) {
- return false;
- }
-
- self::$queryLastId = DB::$lastId;
-
- $message['action'] = _('Modificar Perfil');
- $message['text'][] = SP_Html::strongText(_('Perfil') . ': ') . $profileName . ' > ' . self::$profileName;
-
- SP_Log::wrLogInfo($message);
- SP_Common::sendEmail($message);
-
- return true;
- }
-
- /**
- * Eliminar un perfil.
- *
- * @return bool
- */
- public static function deleteProfile()
- {
- $query = "DELETE FROM usrProfiles "
- . "WHERE userprofile_id = " . (int)self::$profileId . " LIMIT 1";
-
- if (DB::doQuery($query, __FUNCTION__) === false) {
- return false;
- }
-
- self::$queryLastId = DB::$lastId;
-
- return true;
- }
-
- /**
- * Comprobar si un perfil está en uso.
- *
- * @return bool|int Cadena con el número de usuarios, o bool si no está en uso
- */
- public static function checkProfileInUse()
- {
- $count['users'] = self::getProfileInUsers();
- return $count;
- }
-
- /**
- * Obtener el número de usuarios que usan un perfil.
- *
- * @return false|int con el número total de cuentas
- */
- private static function getProfileInUsers()
- {
- $query = "SELECT COUNT(*) as uses "
- . "FROM usrData "
- . "WHERE user_profileId = " . (int)self::$profileId;
-
- $queryRes = DB::getResults($query, __FUNCTION__);
-
- if ($queryRes === false) {
- return false;
- }
-
- return $queryRes->uses;
- }
-
- /**
- * Obtener el nombre de un perfil por a partir del Id.
- *
- * @param int $id con el Id del perfil
- * @return false|string con el nombre del perfil
- */
- public static function getProfileNameById($id)
- {
- $query = "SELECT userprofile_name "
- . "FROM usrProfiles "
- . "WHERE userprofile_id = " . (int)$id . " LIMIT 1";
-
- $queryRes = DB::getResults($query, __FUNCTION__);
-
- if ($queryRes === false) {
- return false;
- }
-
- return $queryRes->userprofile_name;
- }
-
- /**
- * Obtener el perfil de un usuario.
- * Si el usuario no es indicado, se obtiene el perfil del suuario de la sesión actual
- *
- * @param int $userId opcional con el Id del usuario
- * @return false|object con los permisos del perfil del usuario
- */
- public static function getProfileForUser($userId = 0)
- {
- $userId = SP_Common::parseParams('s', 'uid', 0);
-
- if (!$userId) {
- return false;
- }
-
- $query = "SELECT user_profileId,"
- . "userProfile_pView,"
- . "userProfile_pViewPass,"
- . "userProfile_pViewHistory,"
- . "userProfile_pEdit,"
- . "userProfile_pEditPass,"
- . "userProfile_pAdd,"
- . "userProfile_pDelete,"
- . "userProfile_pFiles,"
- . "userProfile_pConfigMenu,"
- . "userProfile_pConfig,"
- . "userProfile_pConfigMasterPass,"
- . "userProfile_pConfigBackup,"
- . "userProfile_pAppMgmtMenu,"
- . 'userProfile_pAppMgmtCategories,'
- . 'userProfile_pAppMgmtCustomers,'
- . "userProfile_pUsersMenu,"
- . "userProfile_pUsers,"
- . "userProfile_pGroups,"
- . "userProfile_pProfiles,"
- . "userProfile_pEventlog "
- . "FROM usrData "
- . "JOIN usrProfiles ON userProfile_Id = user_profileId "
- . "WHERE user_id = " . $userId . " LIMIT 1";
-
- $queryRes = DB::getResults($query, __FUNCTION__);
-
- if ($queryRes === false) {
- return false;
- }
-
- return $queryRes;
- }
-}
diff --git a/inc/themes/classic/2fa.inc b/inc/themes/classic/2fa.inc
new file mode 100644
index 00000000..1d5fb435
--- /dev/null
+++ b/inc/themes/classic/2fa.inc
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/inc/themes/classic/account.inc b/inc/themes/classic/account.inc
new file mode 100644
index 00000000..33c4f3dc
--- /dev/null
+++ b/inc/themes/classic/account.inc
@@ -0,0 +1,483 @@
+
+
+