diff --git a/.gitignore b/.gitignore
index 6830801a..db2c3a6c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,10 +1,51 @@
-.idea/
-config/config.php
-config/key.pem
-config/pubkey.pem
-/res/*
-/tools/*
-/patches/*
-/backup/*
-/js/jquery-1.11.2.min.map
-msg.po
+# Created by .ignore support plugin (hsz.mobi)
+### JetBrains template
+# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
+# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
+
+# User-specific stuff:
+.idea/workspace.xml
+.idea/tasks.xml
+.idea/dictionaries
+.idea/vcs.xml
+.idea/jsLibraryMappings.xml
+
+# Sensitive or high-churn files:
+.idea/dataSources.ids
+.idea/dataSources.xml
+.idea/dataSources.local.xml
+.idea/sqlDataSources.xml
+.idea/dynamic.xml
+.idea/uiDesigner.xml
+
+# Gradle:
+.idea/gradle.xml
+.idea/libraries
+
+# Mongo Explorer plugin:
+.idea/mongoSettings.xml
+
+## File-based project format:
+*.iws
+
+## Plugin-specific files:
+
+# IntelliJ
+/out/
+
+# mpeltonen/sbt-idea plugin
+.idea_modules/
+
+# JIRA plugin
+atlassian-ide-plugin.xml
+
+# Crashlytics plugin (for Android Studio and IntelliJ)
+com_crashlytics_export_strings.xml
+crashlytics.properties
+crashlytics-build.properties
+fabric.properties
+
+backup/*
+config/*
+res/
+tools/
diff --git a/ajax/ajax_getFiles.php b/ajax/ajax_accGetFiles.php
similarity index 58%
rename from ajax/ajax_getFiles.php
rename to ajax/ajax_accGetFiles.php
index eddf762b..b1344b02 100644
--- a/ajax/ajax_getFiles.php
+++ b/ajax/ajax_accGetFiles.php
@@ -2,9 +2,9 @@
/**
* sysPass
*
- * @author nuxsmin
- * @link http://syspass.org
- * @copyright 2012-2015 Rubén Domínguez nuxsmin@syspass.org
+ * @author nuxsmin
+ * @link http://syspass.org
+ * @copyright 2012-2017, Rubén Domínguez nuxsmin@$syspass.org
*
* This file is part of sysPass.
*
@@ -19,12 +19,15 @@
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with sysPass. If not, see
' . htmlentities($fileData) . '
' . htmlentities($FileData->getAccfileContent()) . ''); + } else { + exit(); + } + } +} elseif ($actionId === ActionsInterface::ACTION_ACC_FILES_DELETE) { + // Verificamos que el ID sea numérico + if (!is_numeric($fileId) || $fileId === 0) { + Response::printJson(__('No es un ID de archivo válido')); + } + + try { + File::getItem()->delete($fileId); + + Response::printJson(__('Archivo eliminado'), 0); + } catch (SPException $e) { + Response::printJson(__('Error al eliminar el archivo')); + } +} else { + Response::printJson(__('Acción Inválida')); +} \ No newline at end of file diff --git a/ajax/ajax_getContent.php b/ajax/ajax_getContent.php index fe2cfb93..401f8602 100644 --- a/ajax/ajax_getContent.php +++ b/ajax/ajax_getContent.php @@ -2,9 +2,9 @@ /** * sysPass * - * @author nuxsmin - * @link http://syspass.org - * @copyright 2012-2015 Rubén Domínguez nuxsmin@syspass.org + * @author nuxsmin + * @link http://syspass.org + * @copyright 2012-2017, Rubén Domínguez nuxsmin@$syspass.org * * This file is part of sysPass. * @@ -19,165 +19,124 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with sysPass. If not, see
+ * $mail->Debugoutput = function($str, $level) {echo "debug level $level; message: $str";};
+ *
+ * @var string|callable
* @see SMTP::$Debugoutput
*/
- public $Debugoutput = "echo";
+ public $Debugoutput = 'echo';
/**
* Whether to keep SMTP connection open after each message.
* If this is set to true then to close the connection
* requires an explicit call to smtpClose().
- *
- * @type bool
+ * @var boolean
*/
public $SMTPKeepAlive = false;
/**
* Whether to split multiple to addresses into multiple messages
* or send them all in one message.
- *
- * @type bool
+ * Only supported in `mail` and `sendmail` transports, not in SMTP.
+ * @var boolean
*/
public $SingleTo = false;
/**
* Storage for addresses when SingleTo is enabled.
- *
- * @type array
- * @todo This should really not be public
+ * @var array
+ * @TODO This should really not be public
*/
public $SingleToArray = array();
/**
* Whether to generate VERP addresses on send.
* Only applicable when sending via SMTP.
- *
- * @link http://en.wikipedia.org/wiki/Variable_envelope_return_path
- * @type bool
+ * @link https://en.wikipedia.org/wiki/Variable_envelope_return_path
+ * @link http://www.postfix.org/VERP_README.html Postfix VERP info
+ * @var boolean
*/
public $do_verp = false;
/**
* Whether to allow sending messages with an empty body.
- *
- * @type bool
+ * @var boolean
*/
public $AllowEmpty = false;
/**
* The default line ending.
- *
- * @note The default remains "\n". We force CRLF where we know
+ * @note The default remains "\n". We force CRLF where we know
* it must be used via self::CRLF.
- * @type string
+ * @var string
*/
public $LE = "\n";
/**
* DKIM selector.
- *
- * @type string
+ * @var string
*/
public $DKIM_selector = '';
/**
* DKIM Identity.
- * Usually the email address used as the source of the email
- *
- * @type string
+ * Usually the email address used as the source of the email.
+ * @var string
*/
public $DKIM_identity = '';
/**
* DKIM passphrase.
* Used if your key is encrypted.
- *
- * @type string
+ * @var string
*/
public $DKIM_passphrase = '';
/**
* DKIM signing domain name.
- *
* @example 'example.com'
- * @type string
+ * @var string
*/
public $DKIM_domain = '';
/**
* DKIM private key file path.
- *
- * @type string
+ * @var string
*/
public $DKIM_private = '';
+ /**
+ * DKIM private key string.
+ * If set, takes precedence over `$DKIM_private`.
+ * @var string
+ */
+ public $DKIM_private_string = '';
+
/**
* Callback Action function name.
*
@@ -451,199 +443,226 @@ class PHPMailer
* Value can be any php callable: http://www.php.net/is_callable
*
* Parameters:
- * bool $result result of the send action
+ * boolean $result result of the send action
* string $to email address of the recipient
* string $cc cc email addresses
* string $bcc bcc email addresses
* string $subject the subject
* string $body the email body
* string $from email address of sender
- *
- * @type string
+ * @var string
*/
public $action_function = '';
/**
- * What to use in the X-Mailer header.
- * Options: null for default, whitespace for none, or a string to use
- *
- * @type string
+ * What to put in the X-Mailer header.
+ * Options: An empty string for PHPMailer default, whitespace for none, or a string to use
+ * @var string
*/
public $XMailer = '';
+ /**
+ * Which validator to use by default when validating email addresses.
+ * May be a callable to inject your own validator, but there are several built-in validators.
+ * @see PHPMailer::validateAddress()
+ * @var string|callable
+ * @static
+ */
+ public static $validator = 'auto';
+
/**
* An instance of the SMTP sender class.
- *
- * @type SMTP
+ * @var SMTP
* @access protected
*/
protected $smtp = null;
/**
- * The array of 'to' addresses.
- *
- * @type array
+ * The array of 'to' names and addresses.
+ * @var array
* @access protected
*/
protected $to = array();
/**
- * The array of 'cc' addresses.
- *
- * @type array
+ * The array of 'cc' names and addresses.
+ * @var array
* @access protected
*/
protected $cc = array();
/**
- * The array of 'bcc' addresses.
- *
- * @type array
+ * The array of 'bcc' names and addresses.
+ * @var array
* @access protected
*/
protected $bcc = array();
/**
* The array of reply-to names and addresses.
- *
- * @type array
+ * @var array
* @access protected
*/
protected $ReplyTo = array();
/**
* An array of all kinds of addresses.
- * Includes all of $to, $cc, $bcc, $replyto
- *
- * @type array
+ * Includes all of $to, $cc, $bcc
+ * @var array
* @access protected
+ * @see PHPMailer::$to @see PHPMailer::$cc @see PHPMailer::$bcc
*/
protected $all_recipients = array();
+ /**
+ * An array of names and addresses queued for validation.
+ * In send(), valid and non duplicate entries are moved to $all_recipients
+ * and one of $to, $cc, or $bcc.
+ * This array is used only for addresses with IDN.
+ * @var array
+ * @access protected
+ * @see PHPMailer::$to @see PHPMailer::$cc @see PHPMailer::$bcc
+ * @see PHPMailer::$all_recipients
+ */
+ protected $RecipientsQueue = array();
+
+ /**
+ * An array of reply-to names and addresses queued for validation.
+ * In send(), valid and non duplicate entries are moved to $ReplyTo.
+ * This array is used only for addresses with IDN.
+ * @var array
+ * @access protected
+ * @see PHPMailer::$ReplyTo
+ */
+ protected $ReplyToQueue = array();
+
/**
* The array of attachments.
- *
- * @type array
+ * @var array
* @access protected
*/
protected $attachment = array();
/**
* The array of custom headers.
- *
- * @type array
+ * @var array
* @access protected
*/
protected $CustomHeader = array();
/**
* The most recent Message-ID (including angular brackets).
- *
- * @type string
+ * @var string
* @access protected
*/
protected $lastMessageID = '';
/**
* The message's MIME type.
- *
- * @type string
+ * @var string
* @access protected
*/
protected $message_type = '';
/**
* The array of MIME boundary strings.
- *
- * @type array
+ * @var array
* @access protected
*/
protected $boundary = array();
/**
* The array of available languages.
- *
- * @type array
+ * @var array
* @access protected
*/
protected $language = array();
/**
* The number of errors encountered.
- *
- * @type integer
+ * @var integer
* @access protected
*/
protected $error_count = 0;
/**
* The S/MIME certificate file path.
- *
- * @type string
+ * @var string
* @access protected
*/
protected $sign_cert_file = '';
/**
* The S/MIME key file path.
- *
- * @type string
+ * @var string
* @access protected
*/
protected $sign_key_file = '';
+ /**
+ * The optional S/MIME extra certificates ("CA Chain") file path.
+ * @var string
+ * @access protected
+ */
+ protected $sign_extracerts_file = '';
+
/**
* The S/MIME password for the key.
* Used only if the key is encrypted.
- *
- * @type string
+ * @var string
* @access protected
*/
protected $sign_key_pass = '';
/**
* Whether to throw exceptions for errors.
- *
- * @type bool
+ * @var boolean
* @access protected
*/
protected $exceptions = false;
/**
- * Error severity: message only, continue processing
+ * Unique ID used for message ID and boundaries.
+ * @var string
+ * @access protected
+ */
+ protected $uniqueid = '';
+
+ /**
+ * Error severity: message only, continue processing.
*/
const STOP_MESSAGE = 0;
/**
- * Error severity: message, likely ok to continue processing
+ * Error severity: message, likely ok to continue processing.
*/
const STOP_CONTINUE = 1;
/**
- * Error severity: message, plus full stop, critical error reached
+ * Error severity: message, plus full stop, critical error reached.
*/
const STOP_CRITICAL = 2;
/**
- * SMTP RFC standard line ending
+ * SMTP RFC standard line ending.
*/
const CRLF = "\r\n";
/**
- * Constructor
- *
- * @param bool $exceptions Should we throw external exceptions?
+ * The maximum line length allowed by RFC 2822 section 2.1.1
+ * @var integer
*/
- public function __construct($exceptions = false)
+ const MAX_LINE_LENGTH = 998;
+
+ /**
+ * Constructor.
+ * @param boolean $exceptions Should we throw external exceptions?
+ */
+ public function __construct($exceptions = null)
{
- $this->exceptions = ($exceptions == true);
- //Make sure our autoloader is loaded
-// if (version_compare(PHP_VERSION, '5.1.2', '>=')) {
-// $al = spl_autoload_functions();
-// if ($al === false or !in_array('PHPMailerAutoload', $al)) {
-// require 'PHPMailerAutoload.php';
-// }
-// }
+ if ($exceptions !== null) {
+ $this->exceptions = (boolean)$exceptions;
+ }
}
/**
@@ -651,9 +670,8 @@ class PHPMailer
*/
public function __destruct()
{
- if ($this->Mailer == 'smtp') { //close any open SMTP connection nicely
- $this->smtpClose();
- }
+ //Close any open SMTP connection nicely
+ $this->smtpClose();
}
/**
@@ -661,14 +679,13 @@ class PHPMailer
* Also, unless sendmail_path points to sendmail (or something that
* claims to be sendmail), don't pass params (not a perfect fix,
* but it will do)
- *
- * @param string $to To
+ * @param string $to To
* @param string $subject Subject
- * @param string $body Message Body
- * @param string $header Additional Header(s)
- * @param string $params Params
+ * @param string $body Message Body
+ * @param string $header Additional Header(s)
+ * @param string $params Params
* @access private
- * @return bool
+ * @return boolean
*/
private function mailPassthru($to, $subject, $body, $header, $params)
{
@@ -678,50 +695,67 @@ class PHPMailer
} else {
$subject = $this->encodeHeader($this->secureHeader($subject));
}
- if (ini_get('safe_mode') || !($this->UseSendmailOptions)) {
- $rt = @mail($to, $subject, $body, $header);
- } else {
- $rt = @mail($to, $subject, $body, $header, $params);
- }
- return $rt;
- }
+ //Can't use additional_parameters in safe_mode, calling mail() with null params breaks
+ //@link http://php.net/manual/en/function.mail.php
+ if (ini_get('safe_mode') or !$this->UseSendmailOptions or is_null($params)) {
+ $result = @mail($to, $subject, $body, $header);
+ } else {
+ $result = @mail($to, $subject, $body, $header, $params);
+ }
+ return $result;
+ }
/**
* Output debugging info via user-defined method.
- * Only if debug output is enabled.
- *
+ * Only generates output if SMTP debug output is enabled (@see SMTP::$do_debug).
* @see PHPMailer::$Debugoutput
* @see PHPMailer::$SMTPDebug
* @param string $str
*/
protected function edebug($str)
{
- if (!$this->SMTPDebug) {
+ if ($this->SMTPDebug <= 0) {
+ return;
+ }
+ //Avoid clash with built-in function names
+ if (!in_array($this->Debugoutput, array('error_log', 'html', 'echo')) and is_callable($this->Debugoutput)) {
+ call_user_func($this->Debugoutput, $str, $this->SMTPDebug);
return;
}
switch ($this->Debugoutput) {
case 'error_log':
+ //Don't output, just log
error_log($str);
break;
case 'html':
- //Cleans up output a bit for a better looking display that's HTML-safe
- echo htmlentities(preg_replace('/[\r\n]+/', '', $str), ENT_QUOTES, $this->CharSet) . "' . $this->lang('smtp_error') . $lasterror['smtp_msg'] . "
\n"; + if (!empty($lasterror['error'])) { + $msg .= $this->lang('smtp_error') . $lasterror['error']; + if (!empty($lasterror['detail'])) { + $msg .= ' Detail: '. $lasterror['detail']; + } + if (!empty($lasterror['smtp_code'])) { + $msg .= ' SMTP code: ' . $lasterror['smtp_code']; + } + if (!empty($lasterror['smtp_code_ex'])) { + $msg .= ' Additional SMTP info: ' . $lasterror['smtp_code_ex']; + } } } $this->ErrorInfo = $msg; @@ -2848,15 +3267,14 @@ class PHPMailer /** * Return an RFC 822 formatted date. - * * @access public * @return string * @static */ public static function rfcDate() { - //Set the time zone to whatever the default is to avoid 500 errors - //Will default to UTC if it's not set properly in php.ini + // Set the time zone to whatever the default is to avoid 500 errors + // Will default to UTC if it's not set properly in php.ini date_default_timezone_set(@date_default_timezone_get()); return date('D, j M Y H:i:s O'); } @@ -2864,7 +3282,6 @@ class PHPMailer /** * Get the server hostname. * Returns 'localhost.localdomain' if unknown. - * * @access protected * @return string */ @@ -2885,7 +3302,6 @@ class PHPMailer /** * Get an error message in the current language. - * * @access protected * @param string $key * @return string @@ -2896,18 +3312,24 @@ class PHPMailer $this->setLanguage('en'); // set the default language } - if (isset($this->language[$key])) { + if (array_key_exists($key, $this->language)) { + if ($key == 'smtp_connect_failed') { + //Include a link to troubleshooting docs on SMTP connection failure + //this is by far the biggest cause of support questions + //but it's usually not PHPMailer's fault. + return $this->language[$key] . ' https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting'; + } return $this->language[$key]; } else { - return 'Language string failed to load: ' . $key; + //Return the key as a fallback + return $key; } } /** * Check if an error occurred. - * * @access public - * @return bool True if an error did occur. + * @return boolean True if an error did occur. */ public function isError() { @@ -2917,7 +3339,6 @@ class PHPMailer /** * Ensure consistent line endings in a string. * Changes every end of line from CRLF, CR or LF to $this->LE. - * * @access public * @param string $str String to fixEOL * @return string @@ -2937,9 +3358,8 @@ class PHPMailer * Add a custom header. * $name value can be overloaded to contain * both header name and value (name:value) - * * @access public - * @param string $name Custom header name + * @param string $name Custom header name * @param string $value Header value * @return void */ @@ -2954,33 +3374,73 @@ class PHPMailer } /** - * Create a message from an HTML string. - * Automatically makes modifications for inline images and backgrounds - * and creates a plain-text version by converting the HTML. - * Overwrites any existing values in $this->Body and $this->AltBody - * + * Returns all custom headers. + * @return array + */ + public function getCustomHeaders() + { + return $this->CustomHeader; + } + + /** + * Create a message body from an HTML string. + * Automatically inlines images and creates a plain-text version by converting the HTML, + * overwriting any existing values in Body and AltBody. + * Do not source $message content from user input! + * $basedir is prepended when handling relative URLs, e.g.
and must not be empty
+ * will look for an image file in $basedir/images/a.png and convert it to inline.
+ * If you don't provide a $basedir, relative paths will be left untouched (and thus probably break in email)
+ * If you don't want to apply these transformations to your HTML, just set Body and AltBody directly.
* @access public
* @param string $message HTML message string
- * @param string $basedir baseline directory for path
- * @param bool $advanced Whether to use the advanced HTML to text converter
- * @return string $message
+ * @param string $basedir Absolute path to a base directory to prepend to relative paths to images
+ * @param boolean|callable $advanced Whether to use the internal HTML to text converter
+ * or your own custom converter @see PHPMailer::html2text()
+ * @return string $message The transformed message Body
*/
public function msgHTML($message, $basedir = '', $advanced = false)
{
- preg_match_all("/(src|background)=[\"'](.*)[\"']/Ui", $message, $images);
- if (isset($images[2])) {
- foreach ($images[2] as $i => $url) {
- // do not change urls for absolute images (thanks to corvuscorax)
- if (!preg_match('#^[A-z]+://#', $url)) {
+ preg_match_all('/(src|background)=["\'](.*)["\']/Ui', $message, $images);
+ if (array_key_exists(2, $images)) {
+ if (strlen($basedir) > 1 && substr($basedir, -1) != '/') {
+ // Ensure $basedir has a trailing /
+ $basedir .= '/';
+ }
+ foreach ($images[2] as $imgindex => $url) {
+ // Convert data URIs into embedded images
+ if (preg_match('#^data:(image[^;,]*)(;base64)?,#', $url, $match)) {
+ $data = substr($url, strpos($url, ','));
+ if ($match[2]) {
+ $data = base64_decode($data);
+ } else {
+ $data = rawurldecode($data);
+ }
+ $cid = md5($url) . '@phpmailer.0'; // RFC2392 S 2
+ if ($this->addStringEmbeddedImage($data, $cid, 'embed' . $imgindex, 'base64', $match[1])) {
+ $message = str_replace(
+ $images[0][$imgindex],
+ $images[1][$imgindex] . '="cid:' . $cid . '"',
+ $message
+ );
+ }
+ continue;
+ }
+ if (
+ // Only process relative URLs if a basedir is provided (i.e. no absolute local paths)
+ !empty($basedir)
+ // Ignore URLs containing parent dir traversal (..)
+ && (strpos($url, '..') === false)
+ // Do not change urls that are already inline images
+ && substr($url, 0, 4) !== 'cid:'
+ // Do not change absolute URLs, including anonymous protocol
+ && !preg_match('#^[a-z][a-z0-9+.-]*:?//#i', $url)
+ ) {
$filename = basename($url);
$directory = dirname($url);
if ($directory == '.') {
$directory = '';
}
- $cid = md5($url) . '@phpmailer.0'; //RFC2392 S 2
- if (strlen($basedir) > 1 && substr($basedir, -1) != '/') {
- $basedir .= '/';
- }
+ $cid = md5($url) . '@phpmailer.0'; // RFC2392 S 2
if (strlen($directory) > 1 && substr($directory, -1) != '/') {
$directory .= '/';
}
@@ -2989,12 +3449,12 @@ class PHPMailer
$cid,
$filename,
'base64',
- self::_mime_types(self::mb_pathinfo($filename, PATHINFO_EXTENSION))
+ self::_mime_types((string)self::mb_pathinfo($filename, PATHINFO_EXTENSION))
)
) {
$message = preg_replace(
- "/" . $images[1][$i] . "=[\"']" . preg_quote($url, '/') . "[\"']/Ui",
- $images[1][$i] . "=\"cid:" . $cid . "\"",
+ '/' . $images[1][$imgindex] . '=["\']' . preg_quote($url, '/') . '["\']/Ui',
+ $images[1][$imgindex] . '="cid:' . $cid . '"',
$message
);
}
@@ -3002,10 +3462,10 @@ class PHPMailer
}
}
$this->isHTML(true);
- //Convert all message body line breaks to CRLF, makes quoted-printable encoding work much better
+ // Convert all message body line breaks to CRLF, makes quoted-printable encoding work much better
$this->Body = $this->normalizeBreaks($message);
$this->AltBody = $this->normalizeBreaks($this->html2text($message, $advanced));
- if (empty($this->AltBody)) {
+ if (!$this->alternativeExists()) {
$this->AltBody = 'To view this email message, open it in a program that understands HTML!' .
self::CRLF . self::CRLF;
}
@@ -3014,17 +3474,28 @@ class PHPMailer
/**
* Convert an HTML string into plain text.
- *
- * @param string $html The HTML text to convert
- * @param bool $advanced Should this use the more complex html2text converter or just a simple one?
+ * This is used by msgHTML().
+ * Note - older versions of this function used a bundled advanced converter
+ * which was been removed for license reasons in #232.
+ * Example usage:
+ *
+ * // Use default conversion
+ * $plain = $mail->html2text($html);
+ * // Use your own custom converter
+ * $plain = $mail->html2text($html, function($html) {
+ * $converter = new MyHtml2text($html);
+ * return $converter->get_text();
+ * });
+ *
+ * @param string $html The HTML text to convert
+ * @param boolean|callable $advanced Any boolean value to use the internal converter,
+ * or provide your own callable for custom conversion.
* @return string
*/
public function html2text($html, $advanced = false)
{
- if ($advanced) {
- require_once 'extras/class.html2text.php';
- $h = new html2text($html);
- return $h->get_text();
+ if (is_callable($advanced)) {
+ return call_user_func($advanced, $html);
}
return html_entity_decode(
trim(strip_tags(preg_replace('/<(head|title|style|script)[^>]*>.*?<\/\\1>/si', '', $html))),
@@ -3035,7 +3506,6 @@ class PHPMailer
/**
* Get the MIME type for a file extension.
- *
* @param string $ext File extension
* @access public
* @return string MIME type of file.
@@ -3044,109 +3514,123 @@ class PHPMailer
public static function _mime_types($ext = '')
{
$mimes = array(
- 'xl' => 'application/excel',
- 'hqx' => 'application/mac-binhex40',
- 'cpt' => 'application/mac-compactpro',
- 'bin' => 'application/macbinary',
- 'doc' => 'application/msword',
- 'word' => 'application/msword',
+ 'xl' => 'application/excel',
+ 'js' => 'application/javascript',
+ 'hqx' => 'application/mac-binhex40',
+ 'cpt' => 'application/mac-compactpro',
+ 'bin' => 'application/macbinary',
+ 'doc' => 'application/msword',
+ 'word' => 'application/msword',
+ 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+ 'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
+ 'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template',
+ 'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
+ 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
+ 'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide',
+ 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
+ 'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
+ 'xlam' => 'application/vnd.ms-excel.addin.macroEnabled.12',
+ 'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12',
'class' => 'application/octet-stream',
- 'dll' => 'application/octet-stream',
- 'dms' => 'application/octet-stream',
- 'exe' => 'application/octet-stream',
- 'lha' => 'application/octet-stream',
- 'lzh' => 'application/octet-stream',
- 'psd' => 'application/octet-stream',
- 'sea' => 'application/octet-stream',
- 'so' => 'application/octet-stream',
- 'oda' => 'application/oda',
- 'pdf' => 'application/pdf',
- 'ai' => 'application/postscript',
- 'eps' => 'application/postscript',
- 'ps' => 'application/postscript',
- 'smi' => 'application/smil',
- 'smil' => 'application/smil',
- 'mif' => 'application/vnd.mif',
- 'xls' => 'application/vnd.ms-excel',
- 'ppt' => 'application/vnd.ms-powerpoint',
+ 'dll' => 'application/octet-stream',
+ 'dms' => 'application/octet-stream',
+ 'exe' => 'application/octet-stream',
+ 'lha' => 'application/octet-stream',
+ 'lzh' => 'application/octet-stream',
+ 'psd' => 'application/octet-stream',
+ 'sea' => 'application/octet-stream',
+ 'so' => 'application/octet-stream',
+ 'oda' => 'application/oda',
+ 'pdf' => 'application/pdf',
+ 'ai' => 'application/postscript',
+ 'eps' => 'application/postscript',
+ 'ps' => 'application/postscript',
+ 'smi' => 'application/smil',
+ 'smil' => 'application/smil',
+ 'mif' => 'application/vnd.mif',
+ 'xls' => 'application/vnd.ms-excel',
+ 'ppt' => 'application/vnd.ms-powerpoint',
'wbxml' => 'application/vnd.wap.wbxml',
- 'wmlc' => 'application/vnd.wap.wmlc',
- 'dcr' => 'application/x-director',
- 'dir' => 'application/x-director',
- 'dxr' => 'application/x-director',
- 'dvi' => 'application/x-dvi',
- 'gtar' => 'application/x-gtar',
- 'php3' => 'application/x-httpd-php',
- 'php4' => 'application/x-httpd-php',
- 'php' => 'application/x-httpd-php',
+ 'wmlc' => 'application/vnd.wap.wmlc',
+ 'dcr' => 'application/x-director',
+ 'dir' => 'application/x-director',
+ 'dxr' => 'application/x-director',
+ 'dvi' => 'application/x-dvi',
+ 'gtar' => 'application/x-gtar',
+ 'php3' => 'application/x-httpd-php',
+ 'php4' => 'application/x-httpd-php',
+ 'php' => 'application/x-httpd-php',
'phtml' => 'application/x-httpd-php',
- 'phps' => 'application/x-httpd-php-source',
- 'js' => 'application/x-javascript',
- 'swf' => 'application/x-shockwave-flash',
- 'sit' => 'application/x-stuffit',
- 'tar' => 'application/x-tar',
- 'tgz' => 'application/x-tar',
- 'xht' => 'application/xhtml+xml',
+ 'phps' => 'application/x-httpd-php-source',
+ 'swf' => 'application/x-shockwave-flash',
+ 'sit' => 'application/x-stuffit',
+ 'tar' => 'application/x-tar',
+ 'tgz' => 'application/x-tar',
+ 'xht' => 'application/xhtml+xml',
'xhtml' => 'application/xhtml+xml',
- 'zip' => 'application/zip',
- 'mid' => 'audio/midi',
- 'midi' => 'audio/midi',
- 'mp2' => 'audio/mpeg',
- 'mp3' => 'audio/mpeg',
- 'mpga' => 'audio/mpeg',
- 'aif' => 'audio/x-aiff',
- 'aifc' => 'audio/x-aiff',
- 'aiff' => 'audio/x-aiff',
- 'ram' => 'audio/x-pn-realaudio',
- 'rm' => 'audio/x-pn-realaudio',
- 'rpm' => 'audio/x-pn-realaudio-plugin',
- 'ra' => 'audio/x-realaudio',
- 'wav' => 'audio/x-wav',
- 'bmp' => 'image/bmp',
- 'gif' => 'image/gif',
- 'jpeg' => 'image/jpeg',
- 'jpe' => 'image/jpeg',
- 'jpg' => 'image/jpeg',
- 'png' => 'image/png',
- 'tiff' => 'image/tiff',
- 'tif' => 'image/tiff',
- 'eml' => 'message/rfc822',
- 'css' => 'text/css',
- 'html' => 'text/html',
- 'htm' => 'text/html',
+ 'zip' => 'application/zip',
+ 'mid' => 'audio/midi',
+ 'midi' => 'audio/midi',
+ 'mp2' => 'audio/mpeg',
+ 'mp3' => 'audio/mpeg',
+ 'mpga' => 'audio/mpeg',
+ 'aif' => 'audio/x-aiff',
+ 'aifc' => 'audio/x-aiff',
+ 'aiff' => 'audio/x-aiff',
+ 'ram' => 'audio/x-pn-realaudio',
+ 'rm' => 'audio/x-pn-realaudio',
+ 'rpm' => 'audio/x-pn-realaudio-plugin',
+ 'ra' => 'audio/x-realaudio',
+ 'wav' => 'audio/x-wav',
+ 'bmp' => 'image/bmp',
+ 'gif' => 'image/gif',
+ 'jpeg' => 'image/jpeg',
+ 'jpe' => 'image/jpeg',
+ 'jpg' => 'image/jpeg',
+ 'png' => 'image/png',
+ 'tiff' => 'image/tiff',
+ 'tif' => 'image/tiff',
+ 'eml' => 'message/rfc822',
+ 'css' => 'text/css',
+ 'html' => 'text/html',
+ 'htm' => 'text/html',
'shtml' => 'text/html',
- 'log' => 'text/plain',
- 'text' => 'text/plain',
- 'txt' => 'text/plain',
- 'rtx' => 'text/richtext',
- 'rtf' => 'text/rtf',
- 'xml' => 'text/xml',
- 'xsl' => 'text/xml',
- 'mpeg' => 'video/mpeg',
- 'mpe' => 'video/mpeg',
- 'mpg' => 'video/mpeg',
- 'mov' => 'video/quicktime',
- 'qt' => 'video/quicktime',
- 'rv' => 'video/vnd.rn-realvideo',
- 'avi' => 'video/x-msvideo',
+ 'log' => 'text/plain',
+ 'text' => 'text/plain',
+ 'txt' => 'text/plain',
+ 'rtx' => 'text/richtext',
+ 'rtf' => 'text/rtf',
+ 'vcf' => 'text/vcard',
+ 'vcard' => 'text/vcard',
+ 'xml' => 'text/xml',
+ 'xsl' => 'text/xml',
+ 'mpeg' => 'video/mpeg',
+ 'mpe' => 'video/mpeg',
+ 'mpg' => 'video/mpeg',
+ 'mov' => 'video/quicktime',
+ 'qt' => 'video/quicktime',
+ 'rv' => 'video/vnd.rn-realvideo',
+ 'avi' => 'video/x-msvideo',
'movie' => 'video/x-sgi-movie'
);
- return (array_key_exists(strtolower($ext), $mimes) ? $mimes[strtolower($ext)] : 'application/octet-stream');
+ if (array_key_exists(strtolower($ext), $mimes)) {
+ return $mimes[strtolower($ext)];
+ }
+ return 'application/octet-stream';
}
/**
* Map a file name to a MIME type.
* Defaults to 'application/octet-stream', i.e.. arbitrary binary data.
- *
* @param string $filename A file name or full path, does not need to exist as a file
* @return string
* @static
*/
public static function filenameToType($filename)
{
- //In case the path is a URL, strip any query string before getting extension
+ // In case the path is a URL, strip any query string before getting extension
$qpos = strpos($filename, '?');
- if ($qpos !== false) {
+ if (false !== $qpos) {
$filename = substr($filename, 0, $qpos);
}
$pathinfo = self::mb_pathinfo($filename);
@@ -3157,48 +3641,44 @@ class PHPMailer
* Multi-byte-safe pathinfo replacement.
* Drop-in replacement for pathinfo(), but multibyte-safe, cross-platform-safe, old-version-safe.
* Works similarly to the one in PHP >= 5.2.0
- *
* @link http://www.php.net/manual/en/function.pathinfo.php#107461
- * @param string $path A filename or path, does not need to exist as a file
+ * @param string $path A filename or path, does not need to exist as a file
* @param integer|string $options Either a PATHINFO_* constant,
- * or a string name to return only the specified piece, allows 'filename' to work on PHP < 5.2
+ * or a string name to return only the specified piece, allows 'filename' to work on PHP < 5.2
* @return string|array
* @static
*/
public static function mb_pathinfo($path, $options = null)
{
$ret = array('dirname' => '', 'basename' => '', 'extension' => '', 'filename' => '');
- $m = array();
- preg_match('%^(.*?)[\\\\/]*(([^/\\\\]*?)(\.([^\.\\\\/]+?)|))[\\\\/\.]*$%im', $path, $m);
- if (array_key_exists(1, $m)) {
- $ret['dirname'] = $m[1];
- }
- if (array_key_exists(2, $m)) {
- $ret['basename'] = $m[2];
- }
- if (array_key_exists(5, $m)) {
- $ret['extension'] = $m[5];
- }
- if (array_key_exists(3, $m)) {
- $ret['filename'] = $m[3];
+ $pathinfo = array();
+ if (preg_match('%^(.*?)[\\\\/]*(([^/\\\\]*?)(\.([^\.\\\\/]+?)|))[\\\\/\.]*$%im', $path, $pathinfo)) {
+ if (array_key_exists(1, $pathinfo)) {
+ $ret['dirname'] = $pathinfo[1];
+ }
+ if (array_key_exists(2, $pathinfo)) {
+ $ret['basename'] = $pathinfo[2];
+ }
+ if (array_key_exists(5, $pathinfo)) {
+ $ret['extension'] = $pathinfo[5];
+ }
+ if (array_key_exists(3, $pathinfo)) {
+ $ret['filename'] = $pathinfo[3];
+ }
}
switch ($options) {
case PATHINFO_DIRNAME:
case 'dirname':
return $ret['dirname'];
- break;
case PATHINFO_BASENAME:
case 'basename':
return $ret['basename'];
- break;
case PATHINFO_EXTENSION:
case 'extension':
return $ret['extension'];
- break;
case PATHINFO_FILENAME:
case 'filename':
return $ret['filename'];
- break;
default:
return $ret;
}
@@ -3206,38 +3686,31 @@ class PHPMailer
/**
* Set or reset instance properties.
- *
+ * You should avoid this function - it's more verbose, less efficient, more error-prone and
+ * harder to debug than setting properties directly.
* Usage Example:
- * $page->set('X-Priority', '3');
- *
+ * `$mail->set('SMTPSecure', 'tls');`
+ * is the same as:
+ * `$mail->SMTPSecure = 'tls';`
* @access public
- * @param string $name
- * @param mixed $value
- * NOTE: will not work with arrays, there are no arrays to set/reset
- * @throws phpmailerException
- * @return bool
- * @todo Should this not be using __set() magic function?
+ * @param string $name The property name to set
+ * @param mixed $value The value to set the property to
+ * @return boolean
+ * @TODO Should this not be using the __set() magic function?
*/
public function set($name, $value = '')
{
- try {
- if (isset($this->$name)) {
- $this->$name = $value;
- } else {
- throw new phpmailerException($this->lang('variable_set') . $name, self::STOP_CRITICAL);
- }
- } catch (Exception $e) {
- $this->setError($e->getMessage());
- if ($e->getCode() == self::STOP_CRITICAL) {
- return false;
- }
+ if (property_exists($this, $name)) {
+ $this->$name = $value;
+ return true;
+ } else {
+ $this->setError($this->lang('variable_set') . $name);
+ return false;
}
- return true;
}
/**
* Strip newlines to prevent header injection.
- *
* @access public
* @param string $str
* @return string
@@ -3251,7 +3724,6 @@ class PHPMailer
* Normalize line breaks in a string.
* Converts UNIX LF, Mac CR and Windows CRLF line breaks into a single line break format.
* Defaults to CRLF (for message bodies) and preserves consecutive breaks.
- *
* @param string $text
* @param string $breaktype What kind of line break to use, defaults to CRLF
* @return string
@@ -3263,25 +3735,24 @@ class PHPMailer
return preg_replace('/(\r\n|\r|\n)/ms', $breaktype, $text);
}
-
/**
* Set the public and private key files and password for S/MIME signing.
- *
* @access public
* @param string $cert_filename
* @param string $key_filename
* @param string $key_pass Password for private key
+ * @param string $extracerts_filename Optional path to chain certificate
*/
- public function sign($cert_filename, $key_filename, $key_pass)
+ public function sign($cert_filename, $key_filename, $key_pass, $extracerts_filename = '')
{
$this->sign_cert_file = $cert_filename;
$this->sign_key_file = $key_filename;
$this->sign_key_pass = $key_pass;
+ $this->sign_extracerts_file = $extracerts_filename;
}
/**
* Quoted-Printable-encode a DKIM header.
- *
* @access public
* @param string $txt
* @return string
@@ -3294,7 +3765,7 @@ class PHPMailer
if (((0x21 <= $ord) && ($ord <= 0x3A)) || $ord == 0x3C || ((0x3E <= $ord) && ($ord <= 0x7E))) {
$line .= $txt[$i];
} else {
- $line .= "=" . sprintf("%02X", $ord);
+ $line .= '=' . sprintf('%02X', $ord);
}
}
return $line;
@@ -3302,56 +3773,73 @@ class PHPMailer
/**
* Generate a DKIM signature.
- *
* @access public
- * @param string $s Header
+ * @param string $signHeader
* @throws phpmailerException
- * @return string
+ * @return string The DKIM signature value
*/
- public function DKIM_Sign($s)
+ public function DKIM_Sign($signHeader)
{
if (!defined('PKCS7_TEXT')) {
if ($this->exceptions) {
- throw new phpmailerException($this->lang("signing") . ' OpenSSL extension missing.');
+ throw new phpmailerException($this->lang('extension_missing') . 'openssl');
}
return '';
}
- $privKeyStr = file_get_contents($this->DKIM_private);
- if ($this->DKIM_passphrase != '') {
+ $privKeyStr = !empty($this->DKIM_private_string) ? $this->DKIM_private_string : file_get_contents($this->DKIM_private);
+ if ('' != $this->DKIM_passphrase) {
$privKey = openssl_pkey_get_private($privKeyStr, $this->DKIM_passphrase);
} else {
- $privKey = $privKeyStr;
+ $privKey = openssl_pkey_get_private($privKeyStr);
}
- if (openssl_sign($s, $signature, $privKey)) {
- return base64_encode($signature);
+ //Workaround for missing digest algorithms in old PHP & OpenSSL versions
+ //@link http://stackoverflow.com/a/11117338/333340
+ if (version_compare(PHP_VERSION, '5.3.0') >= 0 and
+ in_array('sha256WithRSAEncryption', openssl_get_md_methods(true))) {
+ if (openssl_sign($signHeader, $signature, $privKey, 'sha256WithRSAEncryption')) {
+ openssl_pkey_free($privKey);
+ return base64_encode($signature);
+ }
+ } else {
+ $pinfo = openssl_pkey_get_details($privKey);
+ $hash = hash('sha256', $signHeader);
+ //'Magic' constant for SHA256 from RFC3447
+ //@link https://tools.ietf.org/html/rfc3447#page-43
+ $t = '3031300d060960864801650304020105000420' . $hash;
+ $pslen = $pinfo['bits'] / 8 - (strlen($t) / 2 + 3);
+ $eb = pack('H*', '0001' . str_repeat('FF', $pslen) . '00' . $t);
+
+ if (openssl_private_encrypt($eb, $signature, $privKey, OPENSSL_NO_PADDING)) {
+ openssl_pkey_free($privKey);
+ return base64_encode($signature);
+ }
}
+ openssl_pkey_free($privKey);
return '';
}
/**
* Generate a DKIM canonicalization header.
- *
* @access public
- * @param string $s Header
+ * @param string $signHeader Header
* @return string
*/
- public function DKIM_HeaderC($s)
+ public function DKIM_HeaderC($signHeader)
{
- $s = preg_replace("/\r\n\s+/", " ", $s);
- $lines = explode("\r\n", $s);
+ $signHeader = preg_replace('/\r\n\s+/', ' ', $signHeader);
+ $lines = explode("\r\n", $signHeader);
foreach ($lines as $key => $line) {
- list($heading, $value) = explode(":", $line, 2);
+ list($heading, $value) = explode(':', $line, 2);
$heading = strtolower($heading);
- $value = preg_replace("/\s+/", " ", $value); // Compress useless spaces
- $lines[$key] = $heading . ":" . trim($value); // Don't forget to remove WSP around the value
+ $value = preg_replace('/\s{2,}/', ' ', $value); // Compress useless spaces
+ $lines[$key] = $heading . ':' . trim($value); // Don't forget to remove WSP around the value
}
- $s = implode("\r\n", $lines);
- return $s;
+ $signHeader = implode("\r\n", $lines);
+ return $signHeader;
}
/**
* Generate a DKIM canonicalization body.
- *
* @access public
* @param string $body Message Body
* @return string
@@ -3373,16 +3861,15 @@ class PHPMailer
/**
* Create the DKIM header and body in a new message header.
- *
* @access public
* @param string $headers_line Header lines
- * @param string $subject Subject
- * @param string $body Body
+ * @param string $subject Subject
+ * @param string $body Body
* @return string
*/
public function DKIM_Add($headers_line, $subject, $body)
{
- $DKIMsignatureType = 'rsa-sha1'; // Signature & hash algorithms
+ $DKIMsignatureType = 'rsa-sha256'; // Signature & hash algorithms
$DKIMcanonicalization = 'relaxed/simple'; // Canonicalization of header/body
$DKIMquery = 'dns/txt'; // Query method
$DKIMtime = time(); // Signature Timestamp = seconds since 00:00:00 - Jan 1, 1970 (UTC time zone)
@@ -3390,6 +3877,7 @@ class PHPMailer
$headers = explode($this->LE, $headers_line);
$from_header = '';
$to_header = '';
+ $date_header = '';
$current = '';
foreach ($headers as $header) {
if (strpos($header, 'From:') === 0) {
@@ -3398,9 +3886,12 @@ class PHPMailer
} elseif (strpos($header, 'To:') === 0) {
$to_header = $header;
$current = 'to_header';
+ } elseif (strpos($header, 'Date:') === 0) {
+ $date_header = $header;
+ $current = 'date_header';
} else {
- if ($current && strpos($header, ' =?') === 0) {
- $current .= $header;
+ if (!empty($$current) && strpos($header, ' =?') === 0) {
+ $$current .= $header;
} else {
$current = '';
}
@@ -3408,6 +3899,7 @@ class PHPMailer
}
$from = str_replace('|', '=7C', $this->DKIM_QP($from_header));
$to = str_replace('|', '=7C', $this->DKIM_QP($to_header));
+ $date = str_replace('|', '=7C', $this->DKIM_QP($date_header));
$subject = str_replace(
'|',
'=7C',
@@ -3415,32 +3907,53 @@ class PHPMailer
); // Copied header fields (dkim-quoted-printable)
$body = $this->DKIM_BodyC($body);
$DKIMlen = strlen($body); // Length of body
- $DKIMb64 = base64_encode(pack("H*", sha1($body))); // Base64 of packed binary SHA-1 hash of body
- $ident = ($this->DKIM_identity == '') ? '' : " i=" . $this->DKIM_identity . ";";
- $dkimhdrs = "DKIM-Signature: v=1; a=" .
- $DKIMsignatureType . "; q=" .
- $DKIMquery . "; l=" .
- $DKIMlen . "; s=" .
+ $DKIMb64 = base64_encode(pack('H*', hash('sha256', $body))); // Base64 of packed binary SHA-256 hash of body
+ if ('' == $this->DKIM_identity) {
+ $ident = '';
+ } else {
+ $ident = ' i=' . $this->DKIM_identity . ';';
+ }
+ $dkimhdrs = 'DKIM-Signature: v=1; a=' .
+ $DKIMsignatureType . '; q=' .
+ $DKIMquery . '; l=' .
+ $DKIMlen . '; s=' .
$this->DKIM_selector .
";\r\n" .
- "\tt=" . $DKIMtime . "; c=" . $DKIMcanonicalization . ";\r\n" .
- "\th=From:To:Subject;\r\n" .
- "\td=" . $this->DKIM_domain . ";" . $ident . "\r\n" .
+ "\tt=" . $DKIMtime . '; c=' . $DKIMcanonicalization . ";\r\n" .
+ "\th=From:To:Date:Subject;\r\n" .
+ "\td=" . $this->DKIM_domain . ';' . $ident . "\r\n" .
"\tz=$from\r\n" .
"\t|$to\r\n" .
+ "\t|$date\r\n" .
"\t|$subject;\r\n" .
"\tbh=" . $DKIMb64 . ";\r\n" .
"\tb=";
$toSign = $this->DKIM_HeaderC(
- $from_header . "\r\n" . $to_header . "\r\n" . $subject_header . "\r\n" . $dkimhdrs
+ $from_header . "\r\n" .
+ $to_header . "\r\n" .
+ $date_header . "\r\n" .
+ $subject_header . "\r\n" .
+ $dkimhdrs
);
$signed = $this->DKIM_Sign($toSign);
return $dkimhdrs . $signed . "\r\n";
}
+ /**
+ * Detect if a string contains a line longer than the maximum line length allowed.
+ * @param string $str
+ * @return boolean
+ * @static
+ */
+ public static function hasLineLongerThanMax($str)
+ {
+ //+2 to include CRLF line break for a 1000 total
+ return (boolean)preg_match('/^(.{'.(self::MAX_LINE_LENGTH + 2).',})/m', $str);
+ }
+
/**
* Allows for public read access to 'to' property.
- *
+ * @note: Before the send() call, queued addresses (i.e. with IDN) are not yet included.
* @access public
* @return array
*/
@@ -3451,7 +3964,7 @@ class PHPMailer
/**
* Allows for public read access to 'cc' property.
- *
+ * @note: Before the send() call, queued addresses (i.e. with IDN) are not yet included.
* @access public
* @return array
*/
@@ -3462,7 +3975,7 @@ class PHPMailer
/**
* Allows for public read access to 'bcc' property.
- *
+ * @note: Before the send() call, queued addresses (i.e. with IDN) are not yet included.
* @access public
* @return array
*/
@@ -3473,7 +3986,7 @@ class PHPMailer
/**
* Allows for public read access to 'ReplyTo' property.
- *
+ * @note: Before the send() call, queued addresses (i.e. with IDN) are not yet included.
* @access public
* @return array
*/
@@ -3484,7 +3997,7 @@ class PHPMailer
/**
* Allows for public read access to 'all_recipients' property.
- *
+ * @note: Before the send() call, queued addresses (i.e. with IDN) are not yet included.
* @access public
* @return array
*/
@@ -3495,16 +4008,15 @@ class PHPMailer
/**
* Perform a callback.
- *
- * @param bool $isSent
- * @param string $to
- * @param string $cc
- * @param string $bcc
+ * @param boolean $isSent
+ * @param array $to
+ * @param array $cc
+ * @param array $bcc
* @param string $subject
* @param string $body
* @param string $from
*/
- protected function doCallback($isSent, $to, $cc, $bcc, $subject, $body, $from = null)
+ protected function doCallback($isSent, $to, $cc, $bcc, $subject, $body, $from)
{
if (!empty($this->action_function) && is_callable($this->action_function)) {
$params = array($isSent, $to, $cc, $bcc, $subject, $body, $from);
@@ -3515,14 +4027,12 @@ class PHPMailer
/**
* PHPMailer exception handler
- *
* @package PHPMailer
*/
class phpmailerException extends Exception
{
/**
* Prettify error message output
- *
* @return string
*/
public function errorMessage()
diff --git a/inc/Exts/phpmailer/SMTP.php b/inc/Exts/phpmailer/SMTP.php
new file mode 100644
index 00000000..e8d9f2d0
--- /dev/null
+++ b/inc/Exts/phpmailer/SMTP.php
@@ -0,0 +1,1251 @@
+
+ * @author Jim Jagielski (jimjag)
+ * $smtp->Debugoutput = function($str, $level) {echo "debug level $level; message: $str";};
+ *
+ * @var string|callable
+ */
+ public $Debugoutput = 'echo';
+
+ /**
+ * Whether to use VERP.
+ * @link http://en.wikipedia.org/wiki/Variable_envelope_return_path
+ * @link http://www.postfix.org/VERP_README.html Info on VERP
+ * @var boolean
+ */
+ public $do_verp = false;
+
+ /**
+ * The timeout value for connection, in seconds.
+ * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2
+ * This needs to be quite high to function correctly with hosts using greetdelay as an anti-spam measure.
+ * @link http://tools.ietf.org/html/rfc2821#section-4.5.3.2
+ * @var integer
+ */
+ public $Timeout = 300;
+
+ /**
+ * How long to wait for commands to complete, in seconds.
+ * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2
+ * @var integer
+ */
+ public $Timelimit = 300;
+
+ /**
+ * @var array patterns to extract smtp transaction id from smtp reply
+ * Only first capture group will be use, use non-capturing group to deal with it
+ * Extend this class to override this property to fulfil your needs.
+ */
+ protected $smtp_transaction_id_patterns = array(
+ 'exim' => '/[0-9]{3} OK id=(.*)/',
+ 'sendmail' => '/[0-9]{3} 2.0.0 (.*) Message/',
+ 'postfix' => '/[0-9]{3} 2.0.0 Ok: queued as (.*)/'
+ );
+
+ /**
+ * The socket for the server connection.
+ * @var resource
+ */
+ protected $smtp_conn;
+
+ /**
+ * Error information, if any, for the last SMTP command.
+ * @var array
+ */
+ protected $error = array(
+ 'error' => '',
+ 'detail' => '',
+ 'smtp_code' => '',
+ 'smtp_code_ex' => ''
+ );
+
+ /**
+ * The reply the server sent to us for HELO.
+ * If null, no HELO string has yet been received.
+ * @var string|null
+ */
+ protected $helo_rply = null;
+
+ /**
+ * The set of SMTP extensions sent in reply to EHLO command.
+ * Indexes of the array are extension names.
+ * Value at index 'HELO' or 'EHLO' (according to command that was sent)
+ * represents the server name. In case of HELO it is the only element of the array.
+ * Other values can be boolean TRUE or an array containing extension options.
+ * If null, no HELO/EHLO string has yet been received.
+ * @var array|null
+ */
+ protected $server_caps = null;
+
+ /**
+ * The most recent reply received from the server.
+ * @var string
+ */
+ protected $last_reply = '';
+
+ /**
+ * Output debugging info via a user-selected method.
+ * @see SMTP::$Debugoutput
+ * @see SMTP::$do_debug
+ * @param string $str Debug string to output
+ * @param integer $level The debug level of this message; see DEBUG_* constants
+ * @return void
+ */
+ protected function edebug($str, $level = 0)
+ {
+ if ($level > $this->do_debug) {
+ return;
+ }
+ //Avoid clash with built-in function names
+ if (!in_array($this->Debugoutput, array('error_log', 'html', 'echo')) and is_callable($this->Debugoutput)) {
+ call_user_func($this->Debugoutput, $str, $level);
+ return;
+ }
+ switch ($this->Debugoutput) {
+ case 'error_log':
+ //Don't output, just log
+ error_log($str);
+ break;
+ case 'html':
+ //Cleans up output a bit for a better looking, HTML-safe output
+ echo htmlentities(
+ preg_replace('/[\r\n]+/', '', $str),
+ ENT_QUOTES,
+ 'UTF-8'
+ )
+ . "
diff --git a/inc/ext/phpseclib/Crypt/DES.php b/inc/Exts/phpseclib/Crypt/DES.php
similarity index 100%
rename from inc/ext/phpseclib/Crypt/DES.php
rename to inc/Exts/phpseclib/Crypt/DES.php
diff --git a/inc/ext/phpseclib/Crypt/Hash.php b/inc/Exts/phpseclib/Crypt/Hash.php
similarity index 100%
rename from inc/ext/phpseclib/Crypt/Hash.php
rename to inc/Exts/phpseclib/Crypt/Hash.php
diff --git a/inc/ext/phpseclib/Crypt/RC2.php b/inc/Exts/phpseclib/Crypt/RC2.php
similarity index 100%
rename from inc/ext/phpseclib/Crypt/RC2.php
rename to inc/Exts/phpseclib/Crypt/RC2.php
diff --git a/inc/ext/phpseclib/Crypt/RC4.php b/inc/Exts/phpseclib/Crypt/RC4.php
similarity index 100%
rename from inc/ext/phpseclib/Crypt/RC4.php
rename to inc/Exts/phpseclib/Crypt/RC4.php
diff --git a/inc/ext/phpseclib/Crypt/RSA.php b/inc/Exts/phpseclib/Crypt/RSA.php
similarity index 99%
rename from inc/ext/phpseclib/Crypt/RSA.php
rename to inc/Exts/phpseclib/Crypt/RSA.php
index 9570f0b1..e0b17f80 100644
--- a/inc/ext/phpseclib/Crypt/RSA.php
+++ b/inc/Exts/phpseclib/Crypt/RSA.php
@@ -2908,10 +2908,11 @@ class RSA
/**
* Decryption
*
- * @see encrypt()
- * @access public
- * @param string $plaintext
+ * @see encrypt()
+ * @access public
+ * @param $ciphertext
* @return string
+ * @internal param string $plaintext
*/
function decrypt($ciphertext)
{
diff --git a/inc/ext/phpseclib/Crypt/Random.php b/inc/Exts/phpseclib/Crypt/Random.php
similarity index 100%
rename from inc/ext/phpseclib/Crypt/Random.php
rename to inc/Exts/phpseclib/Crypt/Random.php
diff --git a/inc/ext/phpseclib/Crypt/Rijndael.php b/inc/Exts/phpseclib/Crypt/Rijndael.php
similarity index 100%
rename from inc/ext/phpseclib/Crypt/Rijndael.php
rename to inc/Exts/phpseclib/Crypt/Rijndael.php
diff --git a/inc/ext/phpseclib/Crypt/TripleDES.php b/inc/Exts/phpseclib/Crypt/TripleDES.php
similarity index 100%
rename from inc/ext/phpseclib/Crypt/TripleDES.php
rename to inc/Exts/phpseclib/Crypt/TripleDES.php
diff --git a/inc/ext/phpseclib/Crypt/Twofish.php b/inc/Exts/phpseclib/Crypt/Twofish.php
similarity index 100%
rename from inc/ext/phpseclib/Crypt/Twofish.php
rename to inc/Exts/phpseclib/Crypt/Twofish.php
diff --git a/inc/ext/phpseclib/Exception/BadConfigurationException.php b/inc/Exts/phpseclib/Exception/BadConfigurationException.php
similarity index 100%
rename from inc/ext/phpseclib/Exception/BadConfigurationException.php
rename to inc/Exts/phpseclib/Exception/BadConfigurationException.php
diff --git a/inc/ext/phpseclib/Exception/FileNotFoundException.php b/inc/Exts/phpseclib/Exception/FileNotFoundException.php
similarity index 100%
rename from inc/ext/phpseclib/Exception/FileNotFoundException.php
rename to inc/Exts/phpseclib/Exception/FileNotFoundException.php
diff --git a/inc/ext/phpseclib/Exception/NoSupportedAlgorithmsException.php b/inc/Exts/phpseclib/Exception/NoSupportedAlgorithmsException.php
similarity index 100%
rename from inc/ext/phpseclib/Exception/NoSupportedAlgorithmsException.php
rename to inc/Exts/phpseclib/Exception/NoSupportedAlgorithmsException.php
diff --git a/inc/ext/phpseclib/Exception/UnsupportedAlgorithmException.php b/inc/Exts/phpseclib/Exception/UnsupportedAlgorithmException.php
similarity index 100%
rename from inc/ext/phpseclib/Exception/UnsupportedAlgorithmException.php
rename to inc/Exts/phpseclib/Exception/UnsupportedAlgorithmException.php
diff --git a/inc/ext/phpseclib/File/ANSI.php b/inc/Exts/phpseclib/File/ANSI.php
similarity index 100%
rename from inc/ext/phpseclib/File/ANSI.php
rename to inc/Exts/phpseclib/File/ANSI.php
diff --git a/inc/ext/phpseclib/File/ASN1.php b/inc/Exts/phpseclib/File/ASN1.php
similarity index 100%
rename from inc/ext/phpseclib/File/ASN1.php
rename to inc/Exts/phpseclib/File/ASN1.php
diff --git a/inc/ext/phpseclib/File/ASN1/Element.php b/inc/Exts/phpseclib/File/ASN1/Element.php
similarity index 100%
rename from inc/ext/phpseclib/File/ASN1/Element.php
rename to inc/Exts/phpseclib/File/ASN1/Element.php
diff --git a/inc/ext/phpseclib/File/X509.php b/inc/Exts/phpseclib/File/X509.php
similarity index 100%
rename from inc/ext/phpseclib/File/X509.php
rename to inc/Exts/phpseclib/File/X509.php
diff --git a/inc/ext/phpseclib/Math/BigInteger.php b/inc/Exts/phpseclib/Math/BigInteger.php
similarity index 100%
rename from inc/ext/phpseclib/Math/BigInteger.php
rename to inc/Exts/phpseclib/Math/BigInteger.php
diff --git a/inc/ext/phpseclib/Net/SCP.php b/inc/Exts/phpseclib/Net/SCP.php
similarity index 99%
rename from inc/ext/phpseclib/Net/SCP.php
rename to inc/Exts/phpseclib/Net/SCP.php
index a2818970..4c28d8b0 100644
--- a/inc/ext/phpseclib/Net/SCP.php
+++ b/inc/Exts/phpseclib/Net/SCP.php
@@ -32,8 +32,6 @@
namespace phpseclib\Net;
-use phpseclib\Net\SSH1;
-use phpseclib\Net\SSH2;
use phpseclib\Exception\FileNotFoundException;
/**
diff --git a/inc/ext/phpseclib/Net/SFTP.php b/inc/Exts/phpseclib/Net/SFTP.php
similarity index 100%
rename from inc/ext/phpseclib/Net/SFTP.php
rename to inc/Exts/phpseclib/Net/SFTP.php
diff --git a/inc/ext/phpseclib/Net/SFTP/Stream.php b/inc/Exts/phpseclib/Net/SFTP/Stream.php
similarity index 100%
rename from inc/ext/phpseclib/Net/SFTP/Stream.php
rename to inc/Exts/phpseclib/Net/SFTP/Stream.php
diff --git a/inc/ext/phpseclib/Net/SSH1.php b/inc/Exts/phpseclib/Net/SSH1.php
similarity index 100%
rename from inc/ext/phpseclib/Net/SSH1.php
rename to inc/Exts/phpseclib/Net/SSH1.php
diff --git a/inc/ext/phpseclib/Net/SSH2.php b/inc/Exts/phpseclib/Net/SSH2.php
similarity index 100%
rename from inc/ext/phpseclib/Net/SSH2.php
rename to inc/Exts/phpseclib/Net/SSH2.php
diff --git a/inc/ext/phpseclib/System/SSH/Agent.php b/inc/Exts/phpseclib/System/SSH/Agent.php
similarity index 99%
rename from inc/ext/phpseclib/System/SSH/Agent.php
rename to inc/Exts/phpseclib/System/SSH/Agent.php
index 783fa0ab..11a1f83f 100644
--- a/inc/ext/phpseclib/System/SSH/Agent.php
+++ b/inc/Exts/phpseclib/System/SSH/Agent.php
@@ -35,7 +35,6 @@ namespace phpseclib\System\SSH;
use phpseclib\Crypt\RSA;
use phpseclib\System\SSH\Agent\Identity;
-use phpseclib\Exception\BadConfigurationException;
/**
* Pure-PHP ssh-agent client identity factory
diff --git a/inc/ext/phpseclib/System/SSH/Agent/Identity.php b/inc/Exts/phpseclib/System/SSH/Agent/Identity.php
similarity index 100%
rename from inc/ext/phpseclib/System/SSH/Agent/Identity.php
rename to inc/Exts/phpseclib/System/SSH/Agent/Identity.php
diff --git a/inc/ext/phpseclib/openssl.cnf b/inc/Exts/phpseclib/openssl.cnf
similarity index 100%
rename from inc/ext/phpseclib/openssl.cnf
rename to inc/Exts/phpseclib/openssl.cnf
diff --git a/inc/Files.class.php b/inc/Files.class.php
deleted file mode 100644
index 11299c8b..00000000
--- a/inc/Files.class.php
+++ /dev/null
@@ -1,221 +0,0 @@
-.
- *
- */
-
-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 Files
-{
- /**
- * Guardar un archivo en la BBDD.
- *
- * @param int $accountId
- * @param array $fileData con los datos y el contenido del archivo
- * @return bool
- */
- public static function fileUpload($accountId, &$fileData = array())
- {
- $query = "INSERT INTO accFiles "
- . "SET accfile_accountId = :accountId,"
- . "accfile_name = :name,"
- . "accfile_type = :type,"
- . "accfile_size = :size,"
- . "accfile_content = :blobcontent,"
- . "accfile_extension = :extension,"
- . "accfile_thumb = :thumbnail";
-
- $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']);
-
- 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;
- }
-
- return false;
- }
-
- /**
- * Obtener un archivo desde la BBDD.
- * Función para obtener un archivo y pasarlo al navegador como descarga o imagen en línea
- *
- * @param int $fileId con el Id del archivo
- * @return false|object con los datos del archivo
- */
- public static function fileDownload($fileId)
- {
- // Obtenemos el archivo de la BBDD
- $query = 'SELECT * FROM accFiles WHERE accfile_id = :id LIMIT 1';
-
- $data['id'] = $fileId;
-
- return DB::getResults($query, __FUNCTION__, $data);
- }
-
- /**
- * Eliminar un archivo de la BBDD.
- *
- * @param int $fileId con el Id del archivo
- * @return bool
- */
- public static function fileDelete($fileId)
- {
- $fileInfo = self::getFileInfo($fileId);
-
- // Eliminamos el archivo de la BBDD
- $query = 'DELETE FROM accFiles WHERE accfile_id = :id LIMIT 1';
-
- $data['id'] = $fileId;
-
- 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;
- }
-
- return false;
- }
-
- /**
- * Obtener información de un archivo almacenado en la BBDD.
- *
- * @param int $fileId con el Id del archivo
- * @return false|object con el resultado de la consulta
- */
- public static function getFileInfo($fileId)
- {
- $query = "SELECT accfile_name,"
- . "accfile_size,"
- . "accfile_type "
- . "FROM accFiles "
- . "WHERE accfile_id = :id LIMIT 1";
-
- $data['id'] = $fileId;
-
- $queryRes = DB::getResults($query, __FUNCTION__, $data);
-
- return $queryRes;
- }
-
- /**
- * Obtener el listado de archivos de una cuenta.
- *
- * @param int $accountId con el Id de la cuenta
- * @return false|array con los archivos de la cuenta.
- */
- public static function getFileList($accountId)
- {
- $query = "SELECT accfile_id,"
- . "accfile_name,"
- . "accfile_size, "
- . "accfile_thumb, "
- . "accfile_type "
- . "FROM accFiles "
- . "WHERE accfile_accountId = :id";
-
- $data['id'] = $accountId;
-
- DB::setReturnArray();
-
- $queryRes = DB::getResults($query, __FUNCTION__, $data);
-
- if ($queryRes === false) {
- return false;
- }
-
- $files = array();
-
- foreach ($queryRes as $file) {
- $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;
- }
-
- /**
- * Obtener el número de archivo de una cuenta.
- *
- * @param int $accountId con el Id de la cuenta
- * @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 = :id';
-
- $data['id'] = $accountId;
-
- DB::getQuery($query, __FUNCTION__, $data);
-
- return DB::$lastNumRows;
- }
-
-
- /**
- * Elimina los archivos de una cuenta en la BBDD.
- *
- * @param int $accountId con el Id de la cuenta
- * @return bool
- */
- public static function deleteAccountFiles($accountId)
- {
- $query = 'DELETE FROM accFiles WHERE accfile_accountId = :id';
-
- $data['id'] = $accountId;
-
- return DB::getQuery($query, __FUNCTION__, $data);
- }
-}
\ No newline at end of file
diff --git a/inc/Groups.class.php b/inc/Groups.class.php
deleted file mode 100644
index 1cdc2ab5..00000000
--- a/inc/Groups.class.php
+++ /dev/null
@@ -1,581 +0,0 @@
-.
- *
- */
-
-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/Import.class.php b/inc/Import.class.php
deleted file mode 100644
index 9cbfb814..00000000
--- a/inc/Import.class.php
+++ /dev/null
@@ -1,133 +0,0 @@
-.
- *
- */
-
-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
deleted file mode 100644
index 0c1cafee..00000000
--- a/inc/ImportBase.class.php
+++ /dev/null
@@ -1,456 +0,0 @@
-.
- *
- */
-
-namespace SP;
-
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
-
-/**
- * Class ImportBase abstracta para manejo de archivos de importación
- *
- * @package SP
- */
-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.class.php b/inc/Init.class.php
deleted file mode 100644
index 6e7e0fee..00000000
--- a/inc/Init.class.php
+++ /dev/null
@@ -1,714 +0,0 @@
-.
- *
- */
-
-namespace SP;
-
-use SP\Controller\ActionsInterface;
-
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
-
-/**
- * Clase Init para la inicialización del entorno de sysPass
- *
- * @package SP
- */
-class Init
-{
- /**
- * Nombre de la sesión
- */
- const SESSION_NAME = 'SYSPASS';
- /**
- * @var array Associative array for autoloading. classname => filename
- */
- public static $CLASSPATH = array();
- /**
- * @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 bool True if sysPass has been updated. Only for notices.
- */
- public static $UPDATED = false;
- /**
- * @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.
- */
- 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('SP\Init::loadClass', true);
- } else {
- spl_autoload_register(array('SP\Init', 'loadClass'));
- }
- } else {
- /**
- * Fall back to traditional autoload for old PHP versions
- *
- * @param string $classname The name of the class to load
- */
- function __autoload($classname)
- {
- \SP\Init::loadClass($classname);
- }
- }
-
- date_default_timezone_set('UTC');
-
- // Intentar desactivar magic quotes.
- if (get_magic_quotes_gpc() == 1) {
- ini_set('magic_quotes_runtime', 0);
- }
-
- // Variables de autentificación
- self::setAuth();
-
- // Establecer el nivel de logging
- self::setLogging();
-
- // Cargar las extensiones
- self::loadExtensions();
-
- // Iniciar la sesión de PHP
- self::startSession();
-
- // Establecer las rutas de la aplicación
- self::setPaths();
-
- // Cargar el lenguaje
- Language::setLanguage();
-
- // Establecer el tema de sysPass
- Themes::setTheme();
-
- // Comprobar si es necesario cambiar a HTTPS
- self::checkHttps();
-
- // Comprobar si es necesario inicialización
- if (self::checkInitSourceInclude()) {
- return;
- }
-
- // Comprobar la configuración
- self::checkConfig();
-
- // 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()) {
- self::initError(_('Error en la verificación de la base de datos'));
- }
-
- // Comprobar si es cierre de sesión
- self::checkLogout();
-
- // Comprobar la versión y actualizarla
- self::checkVersion();
-
- // Inicializar la sesión
- self::initSession();
-
- // Comprobar acciones en URL
- self::checkPreLoginActions();
-
- // Intentar establecer el tiempo de vida de la sesión en PHP
- @ini_set('gc_maxlifetime', (string)self::getSessionLifeTime());
-
- if (!Config::getValue("installed", false)) {
- Session::setUserId('');
- }
-
- // Comprobar si se ha identificado mediante el servidor web y el usuario coincide
- if (self::isLoggedIn() && !Auth::checkServerAuthUser(Session::getUserLogin())) {
- self::logout();
- }
-
- // Manejar la redirección para usuarios logeados
- if (Request::analyze('redirect_url', '', true) && self::isLoggedIn()) {
- $location = 'index.php';
-
- // Denegar la redirección si la URL contiene una @
- // Esto previene redirecciones como ?redirect_url=:user@domain.com
- if (strpos($location, '@') === false) {
- header('Location: ' . $location);
- return;
- }
- }
-
- // Volver a cargar la configuración si se recarga la página
- if (Request::checkReload()) {
- Config::readConfig();
-
- // Restablecer el idioma y el tema visual
- Language::setLanguage();
- Themes::setTheme();
- }
-
- if (self::isLoggedIn() || Request::analyze('isAjax', false, true)) {
- return;
- }
-
- // El usuario no está logado y no es una petición, redirigir al login
- self::goLogin();
- }
-
- /**
- * Establecer las rutas de sysPass en el PATH de PHP
- */
- public static function setIncludes()
- {
- set_include_path(MODEL_PATH . PATH_SEPARATOR . CONTROLLER_PATH . PATH_SEPARATOR . EXTENSIONS_PATH . PATH_SEPARATOR . get_include_path());
- }
-
- /**
- * 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
- if (strripos($class, '\\')) {
- $class = substr($class, strripos($class, '\\') + 1);
- }
-
- // Buscar la clase en los directorios de include
- foreach (explode(PATH_SEPARATOR, get_include_path()) as $includePath) {
- $classFile = $includePath . DIRECTORY_SEPARATOR . $class . '.class.php';
- if (is_readable($classFile)) {
- require $classFile;
- }
- }
- }
-
- /**
- * Establecer variables de autentificación
- */
- private static function setAuth()
- {
- // Copiar la cabecera http de autentificación para apache+php-fcgid
- if (isset($_SERVER['HTTP_XAUTHORIZATION']) && !isset($_SERVER['HTTP_AUTHORIZATION'])) {
- $_SERVER['HTTP_AUTHORIZATION'] = $_SERVER['HTTP_XAUTHORIZATION'];
- }
-
- // Establecer las cabeceras de autentificación para apache+php-cgi
- if (isset($_SERVER['HTTP_AUTHORIZATION'])
- && preg_match('/Basic\s+(.*)$/i', $_SERVER['HTTP_AUTHORIZATION'], $matches)
- ) {
- list($name, $password) = explode(':', base64_decode($matches[1]), 2);
- $_SERVER['PHP_AUTH_USER'] = strip_tags($name);
- $_SERVER['PHP_AUTH_PW'] = strip_tags($password);
- }
-
- // Establecer las cabeceras de autentificación para que apache+php-cgi funcione si la variable es renombrada por apache
- if (isset($_SERVER['REDIRECT_HTTP_AUTHORIZATION'])
- && preg_match('/Basic\s+(.*)$/i', $_SERVER['REDIRECT_HTTP_AUTHORIZATION'], $matches)
- ) {
- list($name, $password) = explode(':', base64_decode($matches[1]), 2);
- $_SERVER['PHP_AUTH_USER'] = strip_tags($name);
- $_SERVER['PHP_AUTH_PW'] = strip_tags($password);
- }
- }
-
- /**
- * Establecer el nivel de logging
- */
- private static function setLogging()
- {
- // Establecer el modo debug si una sesión de xdebug está activa
- if (isset($_COOKIE['XDEBUG_SESSION']) && !defined('DEBUG')) {
- define('DEBUG', true);
- }
-
- if (defined('DEBUG') && 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 clases de las extensiones de sysPass
- */
- private static function loadExtensions()
- {
- // Utilizar un cargador de clases PSR-0
- require EXTENSIONS_PATH . DIRECTORY_SEPARATOR . 'SplClassLoader.php';
-
- $phpSecLoader = new \SplClassLoader('phpseclib', EXTENSIONS_PATH);
- $phpSecLoader->register();
- }
-
- /**
- * 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');
-
- session_name(self::SESSION_NAME);
-
- // 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
- */
- private static function setPaths()
- {
- // Calcular los directorios raíz
- $dir = (defined(__DIR__)) ? __DIR__ : dirname(__FILE__);
-
- self::$SERVERROOT = substr($dir, 0, strripos($dir, DIRECTORY_SEPARATOR));
-
- 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 .= '/';
- }
- self::$_SUBURI .= 'index.php';
- }
- }
-
- $pos = strpos($scriptName, self::$_SUBURI);
-
- if ($pos === false) {
- $pos = strpos($scriptName, '?');
- }
-
- self::$WEBROOT = substr($scriptName, 0, $pos);
-
- if (self::$WEBROOT != '' && self::$WEBROOT[0] !== '/') {
- self::$WEBROOT = '/' . self::$WEBROOT;
- }
-
- self::$WEBURI .= Request::getProtocol() . $_SERVER['HTTP_HOST'] . self::$WEBROOT;
- }
-
- /**
- * Comprobar y forzar (si es necesario) la coneción HTTPS
- */
- private static function checkHttps()
- {
- if (Util::forceHttpsIsEnabled() && !Util::httpsEnabled()) {
- $port = ($_SERVER['SERVER_PORT'] != 443) ? ':' . $_SERVER['SERVER_PORT'] : '';
- $fullUrl = 'https://' . $_SERVER['SERVER_NAME'] . $port . $_SERVER['REQUEST_URI'];
- header('Location: ' . $fullUrl);
- }
- }
-
- /**
- * Comprobar el archivo que realiza el include necesita inicialización.
- *
- * @returns bool
- */
- private static function checkInitSourceInclude()
- {
- $srcScript = pathinfo($_SERVER["SCRIPT_NAME"], PATHINFO_BASENAME);
- $skipInit = array('js.php', 'css.php', 'api.php', 'ajax_getEnvironment.php');
-
- return (in_array($srcScript, $skipInit));
- }
-
- /**
- * Comprobar el archivo de configuración.
- * Esta función comprueba que el archivo de configuración exista y los permisos sean correctos.
- */
- private static function checkConfig()
- {
- if (!is_dir(self::$SERVERROOT . DIRECTORY_SEPARATOR . 'config')) {
- clearstatcache();
- self::initError(_('El directorio "/config" no existe'));
- }
-
- if (!is_writable(self::$SERVERROOT . DIRECTORY_SEPARATOR . 'config')) {
- clearstatcache();
- self::initError(_('No es posible escribir en el directorio "config"'));
- }
-
- //$configPerms = substr(sprintf('%o', fileperms(self::$SERVERROOT.'/config')), -4);
- $configPerms = decoct(fileperms(self::$SERVERROOT . DIRECTORY_SEPARATOR . 'config') & 0777);
-
- if (!Util::runningOnWindows() && $configPerms != "750") {
- clearstatcache();
- self::initError(_('Los permisos del directorio "/config" son incorrectos'), _('Actual:') . ' ' . $configPerms . ' - ' . _('Necesario: 750'));
- }
- }
-
- /**
- * Comprueba que la aplicación esté instalada
- * Esta función comprueba si la aplicación está instalada. Si no lo está, redirige al instalador.
- */
- private static function checkInstalled()
- {
- // Redirigir al instalador si no está instalada
- if (!Config::getValue('installed', false)) {
- if (self::$_SUBURI != '/index.php') {
- $url = Request::getProtocol() . $_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();
- }
- }
- }
-
- /**
- * Comprobar si el modo mantenimeinto está activado
- * Esta función comprueba si el modo mantenimiento está activado.
- * Devuelve un error 503 y un reintento de 120s al cliente.
- *
- * @param bool $check sólo comprobar si está activado el modo
- * @return bool
- */
- public static function checkMaintenanceMode($check = false)
- {
- if (Config::getValue('maintenance', false)) {
- if ($check === true
- || Request::analyze('isAjax', 0) === 1
- || Request::analyze('upgrade', 0) === 1
- || Request::analyze('nodbupgrade', 0) === 1
- ) {
- return true;
- }
-
- header('HTTP/1.1 503 Service Temporarily Unavailable');
- header('Status: 503 Service Temporarily Unavailable');
- header('Retry-After: 120');
-
- self::initError(_('Aplicación en mantenimiento'), _('En breve estará operativa'));
- }
-
- 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();
-
- SessionUtil::cleanSession();
- }
-
- /**
- * 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.
- */
- private static function checkVersion()
- {
- if (substr(self::$_SUBURI, -9) != 'index.php' || Request::analyze('logout', 0) === 1) {
- return;
- }
-
- $update = false;
- $configVersion = (int)str_replace('.', '', Config::getValue('version'));
- $databaseVersion = (int)str_replace('.', '', ConfigDB::getValue('version'));
- $appVersion = (int)implode(Util::getVersion(true));
-
- if ($databaseVersion < $appVersion
- && Request::analyze('nodbupgrade', 0) === 0
- ) {
- if (Upgrade::needDBUpgrade($databaseVersion)) {
- if (!self::checkMaintenanceMode(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'), sprintf(_('Si es un administrador pulse en el enlace: %s'), '' . _('Actualizar') . ''));
- }
-
- $action = Request::analyze('a');
- $hash = Request::analyze('h');
-
- if ($action === 'upgrade' && $hash === Config::getValue('upgrade_key', 0)) {
- if ($update = Upgrade::doUpgrade($databaseVersion)) {
- ConfigDB::setValue('version', $appVersion);
- Config::setValue('maintenance', false);
- Config::deleteParam('upgrade_key');
- }
- } else {
- $controller = new Controller\MainC();
- $controller->getUpgrade();
- $controller->view();
- exit();
- }
- }
- }
-
- if ($configVersion < $appVersion
- && Upgrade::needConfigUpgrade($appVersion)
- && Upgrade::upgradeConfig($appVersion)
- ) {
- Config::setValue('version', $appVersion);
- $update = true;
- }
-
- if ($update === true) {
- $log = new Log(_('Actualización'));
- $log->addDescription(_('Actualización de versión realizada.'));
- $log->addDescription(_('Versión') . ': ' . $appVersion);
- $log->writeLog();
-
- Email::sendEmail($log);
-
- self::$UPDATED = true;
- }
- }
-
- /**
- * Inicializar la sesión de usuario
- */
- private static function initSession()
- {
- $sessionLifeTime = self::getSessionLifeTime();
-
- // Timeout de sesión
- if (Session::getLastActivity() && (time() - Session::getLastActivity() > $sessionLifeTime)) {
- if (isset($_COOKIE[self::SESSION_NAME])) {
- setcookie(self::SESSION_NAME, '', time() - 42000, '/');
- }
-
- self::logout();
-
- return;
- }
-
- // Regenerar el Id de sesión periódicamente para evitar fijación
- if (Session::getSidStartTime() === 0) {
- Session::setSidStartTime(time());
- Session::setStartActivity(time());
- } else if (Session::getUserId() && time() - Session::getSidStartTime() > $sessionLifeTime / 2) {
- $sessionMPass = SessionUtil::getSessionMPass();
- session_regenerate_id(true);
- Session::setSidStartTime(time());
- // Recargar los permisos del perfil de usuario
- Session::setUserProfile(Profile::getProfile(Session::getUserProfileId()));
- // Regenerar la clave maestra
- SessionUtil::saveSessionMPass($sessionMPass);
- }
-
- Session::setLastActivity(time());
- }
-
- /**
- * Obtener el timeout de sesión desde la configuración.
- *
- * @return int con el tiempo en segundos
- */
- private static function getSessionLifeTime()
- {
- if (is_null(Session::getSessionTimeout())) {
- Session::setSessionTimeout(Config::getValue('session_timeout', 60 * 5));
- }
-
- 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':
- $controller->getPassReset();
- $controller->view();
- break;
- case '2fa':
- $controller->get2FA();
- $controller->view();
- break;
- default:
- return false;
- }
-
- exit();
- }
-
- /**
- * Comprobar si el usuario está logado.
- *
- * @returns bool
- */
- public static function isLoggedIn()
- {
- if (Session::getUserLogin()
- && Session::get2FApassed()
- ) {
- return true;
- }
-
- return false;
- }
-
- /**
- * Comprobar si hay que ejecutar acciones de URL después del login.
- *
- * @return bool
- */
- public static function checkPostLoginActions()
- {
- if (!Request::analyze('a', '', true)) {
- return false;
- }
-
- $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;
- }
-
- /**
- * Devuelve el tiempo actual en coma flotante.
- * Esta función se utiliza para calcular el tiempo de renderizado con coma flotante
- *
- * @returns float con el tiempo actual
- */
- public static function microtime_float()
- {
- list($usec, $sec) = explode(" ", microtime());
- return ((float)$usec + (float)$sec);
- }
-}
\ No newline at end of file
diff --git a/inc/Installer.class.php b/inc/Installer.class.php
deleted file mode 100644
index 09c8d477..00000000
--- a/inc/Installer.class.php
+++ /dev/null
@@ -1,529 +0,0 @@
-.
- *
- */
-
-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::$_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;
- }
-
- ConfigDB::setValue('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(Util::generate_random_bytes(16, true));
- self::setDbuser(substr('sp_' . self::$_username, 0, 16));
-
- // Comprobar si el usuario sumistrado existe
- $query = 'SELECT COUNT(*) FROM mysql.user WHERE user=\'sp_' . self::$_username . '\' AND host=\'' . self::getAdminHost() . '\'';
-
- try {
- // Si no existe el usuario o es distinto del anterior, se intenta crear
- if ((int)self::$_dbc->query($query)->fetchColumn() === 0
- || self::$_dbuser != Config::getValue('dbuser')
- ) {
- self::createDBUser();
- }
- } catch (\PDOException $e) {
- throw new SPException(SPException::SP_CRITICAL
- , _('No es posible comprobar el usuario de sysPass') . ' (' . self::$_username . ')'
- , _('Compruebe los permisos del usuario de conexión a la BD'));
- }
- }
-
- // 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;
- }
-
- /**
- * @return string
- */
- private static function getAdminHost()
- {
- return preg_match('/(localhost|127\.0\.0\.1)/i', self::$_dbhost) ? self::$_dbhost : $_SERVER['SERVER_ADDR'];
- }
-
- /**
- * 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;
- }
-
- if (self::$_dbpass === '') {
- $query = 'CREATE USER `' . self::$_dbuser . '`@`' . self::getAdminHost() . '`';
- } else {
- $query = 'CREATE USER `' . self::$_dbuser . '`@`' . self::getAdminHost() . '`' .
- ' 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::getAdminHost() . '`';
-
- 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 ((int)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
- ConfigDB::setCacheConfigValue('masterPwd', Crypt::mkHashPassword(self::$_masterPassword));
- ConfigDB::setCacheConfigValue('lastupdatempass', time());
- ConfigDB::writeConfig(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::getAdminHost() . '`');
- self::$_dbc->query('DROP USER `' . self::$_dbuser . '`@`%`');
- } catch (\PDOException $e) {
- Config::deleteParam('dbuser');
- Config::deleteParam('dbpass');
- }
- }
-
-}
\ No newline at end of file
diff --git a/inc/KeepassImport.class.php b/inc/KeepassImport.class.php
deleted file mode 100644
index 58278dcf..00000000
--- a/inc/KeepassImport.class.php
+++ /dev/null
@@ -1,119 +0,0 @@
-.
- *
- */
-
-namespace SP;
-
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
-
-/**
- * Esta clase es la encargada de importar cuentas desde KeePass
- */
-class KeepassImport extends XmlImportBase
-{
- /**
- * Iniciar la importación desde KeePass
- */
- public function doImport()
- {
- $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 \SimpleXMLElement $entries El objeto XML con las entradas
- */
- 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':
- $this->setAccountNotes($value);
- break;
- case 'Password':
- $passData = Crypt::encryptData($value);
-
- $this->setAccountPass($passData['data']);
- $this->setAccountPassIV($passData['iv']);
- break;
- case 'Title':
- $this->setAccountName($value);
- break;
- case 'URL':
- $this->setAccountUrl($value);
- break;
- case 'UserName':
- $this->setAccountLogin($value);
- break;
- }
- }
-
- $this->addAccount();
- }
- }
-}
\ No newline at end of file
diff --git a/inc/KeepassXImport.class.php b/inc/KeepassXImport.class.php
deleted file mode 100644
index 780c8c6f..00000000
--- a/inc/KeepassXImport.class.php
+++ /dev/null
@@ -1,115 +0,0 @@
-.
- *
- */
-
-namespace SP;
-
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
-
-/**
- * Esta clase es la encargada de importar cuentas desde KeePassX
- */
-class KeepassXImport extends XmlImportBase
-{
- /**
- * Iniciar la importación desde KeePassX.
- *
- * @throws SPException
- * @return bool
- */
- public function doImport()
- {
- $this->setCustomerName('KeePassX');
- $this->setCustomerId($this->addCustomer());
-
- self::processCategories($this->_xml);
- }
-
-
- /**
- * Obtener los grupos y procesar lan entradas de KeePass.
- *
- * @param \SimpleXMLElement $xml con 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->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 \SimpleXMLElement $entries El objeto XML con las entradas
- * @param string $groupName con nombre del grupo a procesar
- */
- protected function processAccounts(\SimpleXMLElement $entries, $groupName)
- {
- foreach ($entries as $entry) {
- $notes = (isset($entry->comment)) ? (string)$entry->comment : '';
- $password = (isset($entry->password)) ? (string)$entry->password : '';
- $name = (isset($entry->title)) ? (string)$entry->title : '';
- $url = (isset($entry->url)) ? (string)$entry->url : '';
- $username = (isset($entry->username)) ? (string)$entry->username : '';
-
- $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();
- }
- }
-}
\ No newline at end of file
diff --git a/inc/Ldap.class.php b/inc/Ldap.class.php
deleted file mode 100644
index ea4c7d0d..00000000
--- a/inc/Ldap.class.php
+++ /dev/null
@@ -1,470 +0,0 @@
-.
- *
- */
-
-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 $_ADS = 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',
- 'givenname' => 'givenname',
- 'sn' => 'sn',
- 'mail' => 'mail',
- 'mailPrimaryAddress' => '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__);
-
- // Habilitar la traza si el modo debug está habilitado
- if (Config::getValue('debug')) {
- @ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);
- }
-
- // 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
-
- if (self::$_ADS) {
- @ldap_set_option(self::$_ldapConn, LDAP_OPT_REFERRALS, 0);
- }
-
- 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 ?: self::$_bindDN;
- $pass = $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() : '*';
-
- if (self::$_ADS === true) {
- $filter = '(&(|(memberOf=' . $groupDN . ')(groupMembership=' . $groupDN . ')(memberof:1.2.840.113556.1.4.1941:=' . $groupDN . '))(|(objectClass=inetOrgPerson)(objectClass=person)(objectClass=simpleSecurityObject)))';
- } else {
- $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 = self::getGroupName();
- $filter = $groupName ?: self::$_ldapGroup;
- $filter = '(cn=' . $filter . ')';
- $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('%s: %s', _('Grupo'), $filter));
- $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) > 0) {
- $ldapSearchData = @ldap_get_entries(self::$_ldapConn, $searchRes);
-
- if (!$ldapSearchData) {
- $log->addDescription(_('Error al buscar RDN de grupo'));
- $log->addDescription(sprintf('%s: %s', _('Grupo'), $filter));
- $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'));
- }
-
- return $ldapSearchData[0]['dn'];
- } else {
- $log->addDescription(_('Error al buscar RDN de grupo'));
- $log->addDescription(sprintf('%s: %s', _('Grupo'), $filter));
- $log->addDescription('LDAP FILTER: ' . $filter);
- $log->writeLog();
-
- throw new \Exception(_('Error al buscar RDN de grupo'));
- }
- }
-
- /**
- * Obtener el nombre del grupo a partir del CN
- *
- * @return bool
- */
- private static function getGroupName()
- {
- if (isset(self::$_ldapGroup)
- && preg_match('/^cn=([\w\s\d-]+)(,.*)?$/i', self::$_ldapGroup, $groupName)
- ) {
- return $groupName[1];
- }
-
- return false;
- }
-
- /**
- * Comprobar si los parámetros necesario de LDAP están establecidos.
- *
- * @return bool
- */
- public static function checkLDAPParams()
- {
- self::$_ADS = Config::getValue('ldap_ads', false);
- self::$_searchBase = Config::getValue('ldap_base');
- self::$_ldapServer = (!self::$_ADS) ? 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 void
- */
- public static function getUserDN($userLogin)
- {
- $log = new Log(__FUNCTION__);
-
- if (self::$_ADS === 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', 'sn', 'givenname');
-
- $searchRes = @ldap_search(self::$_ldapConn, self::$_searchBase, $filter, $filterAttr);
-
- if (!$searchRes) {
- $log->addDescription(_('Error al buscar el DN del usuario'));
- $log->addDescription(sprintf('%s: %s', _('Usuario'), $userLogin));
- $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('%s: %s', _('Usuario'), $userLogin));
- $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(sprintf('%s: %s', _('Usuario'), $userLogin));
- $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]] = implode(',', $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');
-
- // Comprobar el filtro de grupo y obtener el nombre
- if (empty($ldapGroup) || !$groupDN = self::getGroupName()) {
- return true;
- }
-
- $userDN = self::escapeLdapDN($userDN);
-
- $filter = '(&(cn=' . $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) {
- $log->addDescription(_('Error al buscar el grupo de usuarios'));
- $log->addDescription(sprintf('%s: %s', _('Grupo'), $ldapGroup));
- $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);
- }
-
- /**
- * @return boolean
- */
- public static function isADS()
- {
- return self::$_ADS;
- }
-
-}
\ No newline at end of file
diff --git a/inc/LdapADS.class.php b/inc/LdapADS.class.php
deleted file mode 100644
index ffb7e6f6..00000000
--- a/inc/LdapADS.class.php
+++ /dev/null
@@ -1,130 +0,0 @@
-.
- *
- */
-
-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)
- {
- if (preg_match('/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/', $server)){
- return $server;
- }
-
- $serverDomain = '';
- $serverFQDN = explode('.', preg_replace('#ldaps?://#i', '', $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 $server;
- }
-
- $ads = array();
-
- foreach ($records as $record) {
- $ads[] = $record['target'];
- };
-
- return (count($ads) > 0) ? $ads[mt_rand(0, count($ads) - 1)] : $server;
- }
-
- /**
- * 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::$_ADS === 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
deleted file mode 100644
index 57e325a9..00000000
--- a/inc/Log.class.php
+++ /dev/null
@@ -1,171 +0,0 @@
-.
- *
- */
-
-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
-{
- public 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
- *
- * @param bool $resetDescription Restablecer la descripción
- * @return bool
- */
- public function writeLog($resetDescription = false){
- if (defined('IS_INSTALLER') && IS_INSTALLER === 1) {
- error_log('Action: ' . $this->getAction() . ' -- Description: ' . $this->getDescription());
- return false;
- }
-
- 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();
-
- if ($resetDescription === true){
- $this->resetDescription();
- }
-
- return DB::getQuery($query, __FUNCTION__, $data);
- }
-}
\ No newline at end of file
diff --git a/inc/Migrate.class.php b/inc/Migrate.class.php
deleted file mode 100644
index d0223b91..00000000
--- a/inc/Migrate.class.php
+++ /dev/null
@@ -1,935 +0,0 @@
-.
- *
- */
-
-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 $_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/Plugins/Authenticator/ActionController.class.php b/inc/Plugins/Authenticator/ActionController.class.php
new file mode 100644
index 00000000..7b40ea81
--- /dev/null
+++ b/inc/Plugins/Authenticator/ActionController.class.php
@@ -0,0 +1,183 @@
+.
+ */
+
+namespace Plugins\Authenticator;
+
+use SP\Controller\ItemControllerInterface;
+use SP\Controller\RequestControllerTrait;
+use SP\Core\ActionsInterface;
+use SP\Core\Plugin\PluginDataStore;
+use SP\Core\Session as CoreSession;
+use SP\DataModel\PluginData;
+use SP\Http\Request;
+use SP\Mgmt\Plugins\Plugin;
+use SP\Util\ArrayUtil;
+use SP\Util\Checks;
+use SP\Util\Json;
+
+/**
+ * Class ActionController
+ *
+ * @package Plugins\Authenticator
+ */
+class ActionController implements ItemControllerInterface
+{
+ const ACTION_TWOFA_SAVE = 1;
+ const ACTION_TWOFA_CHECKCODE = 2;
+
+ use RequestControllerTrait;
+
+ /**
+ * @var AuthenticatorPlugin
+ */
+ protected $Plugin;
+
+ /**
+ * ActionController constructor.
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function __construct()
+ {
+ $this->Plugin = new AuthenticatorPlugin();
+
+ PluginDataStore::load($this->Plugin);
+
+ $this->init();
+ }
+
+ /**
+ * Realizar la acción solicitada en la la petición HTTP
+ *
+ * @throws \InvalidArgumentException
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function doAction()
+ {
+ try {
+ switch ($this->actionId) {
+ case ActionController::ACTION_TWOFA_SAVE:
+ $this->save();
+ break;
+ case ActionController::ACTION_TWOFA_CHECKCODE:
+ $this->checkCode();
+ break;
+ default:
+ $this->invalidAction();
+ }
+ } catch (\Exception $e) {
+ $this->JsonResponse->setDescription($e->getMessage());
+ Json::returnJson($this->JsonResponse);
+ }
+ }
+
+ /**
+ * Guardar los datos del plugin
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \InvalidArgumentException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ */
+ protected function save()
+ {
+ $pin = Request::analyze('security_pin');
+ $twofa_enabled = Request::analyze('security_2faenabled', 0, false, 1);
+
+ $AuthenticatorData = Session::getUserData();
+
+ $twoFa = new Authenticator($this->itemId, CoreSession::getUserData()->getUserLogin(), $AuthenticatorData->getIV());
+
+ if (!$twoFa->verifyKey($pin)) {
+ $this->JsonResponse->setDescription(_t('authenticator', 'Código incorrecto'));
+ Json::returnJson($this->JsonResponse);
+ }
+
+ if (Checks::demoIsEnabled()) {
+ $this->JsonResponse->setDescription(_t('authenticator', 'Ey, esto es una DEMO!!'));
+ Json::returnJson($this->JsonResponse);
+ }
+
+ $data = $this->Plugin->getData();
+
+ if ($twofa_enabled) {
+ /** @var AuthenticatorData $AuthenticatorData */
+ $AuthenticatorData->setUserId($this->itemId);
+ $AuthenticatorData->setTwofaEnabled($twofa_enabled);
+ $AuthenticatorData->setExpireDays(Request::analyze('expiredays', 0));
+ $AuthenticatorData->setDate(time());
+
+ $data[$this->itemId] = $AuthenticatorData;
+ } elseif (!$twofa_enabled) {
+ unset($data[$this->itemId]);
+ }
+
+ $PluginData = new PluginData();
+ $PluginData->setPluginName($this->Plugin->getName());
+ $PluginData->setPluginEnabled(1);
+ $PluginData->setPluginData(serialize($data));
+
+ Plugin::getItem($PluginData)->update();
+
+ $this->JsonResponse->setStatus(0);
+ $this->JsonResponse->setDescription(_t('authenticator', 'Preferencias actualizadas'));
+
+ Json::returnJson($this->JsonResponse);
+ }
+
+ /**
+ * Comprobar el código 2FA
+ *
+ * @throws \InvalidArgumentException
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ protected function checkCode()
+ {
+ $userId = Request::analyze('itemId', 0);
+ $pin = Request::analyze('security_pin');
+
+ // Buscar al usuario en los datos del plugin
+ /** @var AuthenticatorData $AuthenticatorData */
+ $AuthenticatorData = ArrayUtil::searchInObject($this->Plugin->getData(), 'userId', $userId, new AuthenticatorData());
+
+ $TwoFa = new Authenticator($userId, CoreSession::getUserData()->getUserLogin(), $AuthenticatorData->getIV());
+
+ if ($userId
+ && $pin
+ && $TwoFa->verifyKey($pin)
+ ) {
+ Session::setTwoFApass(true);
+ CoreSession::setAuthCompleted(true);
+
+ $this->JsonResponse->setDescription(_t('authenticator', 'Código correcto'));
+ $this->JsonResponse->setStatus(0);
+ } else {
+ Session::setTwoFApass(false);
+ CoreSession::setAuthCompleted(false);
+
+ $this->JsonResponse->setDescription(_t('authenticator', 'Código incorrecto'));
+ }
+
+ Json::returnJson($this->JsonResponse);
+ }
+}
\ No newline at end of file
diff --git a/inc/Auth2FA.class.php b/inc/Plugins/Authenticator/Authenticator.class.php
similarity index 58%
rename from inc/Auth2FA.class.php
rename to inc/Plugins/Authenticator/Authenticator.class.php
index df461ed9..fec709a0 100644
--- a/inc/Auth2FA.class.php
+++ b/inc/Plugins/Authenticator/Authenticator.class.php
@@ -2,9 +2,9 @@
/**
* sysPass
*
- * @author nuxsmin
- * @link http://syspass.org
- * @copyright 2012-2015 Rubén Domínguez nuxsmin@syspass.org
+ * @author nuxsmin
+ * @link http://syspass.org
+ * @copyright 2012-2017, Rubén Domínguez nuxsmin@$syspass.org
*
* This file is part of sysPass.
*
@@ -19,70 +19,72 @@
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with sysPass. If not, see .
- *
+ * along with sysPass. If not, see .
*/
-namespace SP\Auth;
+namespace Plugins\Authenticator;
-use SP\Exts\Google2FA;
-use SP\Exts\Base2n;
-use SP\UserPass;
-use SP\Util;
+use Exts\Base2n;
+use SP\Core\Exceptions\SPException;
+use SP\Mgmt\Users\UserPass;
+use SP\Util\Util;
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+defined('APP_ROOT') || die();
/**
* Class Auth2FA
*
* @package SP\Auth
*/
-class Auth2FA
+class Authenticator
{
/**
* @var int
*/
- private $_timestamp = 0;
+ private $timestamp = 0;
/**
* @var string
*/
- private $_initializationKey = '';
+ private $initializationKey = '';
/**
* @var string
*/
- private $_totp = '';
+ private $totp = '';
/**
* @var int
*/
- private $_userId = 0;
+ private $userId = 0;
/**
* @var string
*/
- private $_userLogin = '';
+ private $userLogin = '';
/**
* @param int $userId El Id de usuario
* @param string $userLogin El login de usuario
+ * @param string $IV
+ * @throws \InvalidArgumentException
*/
- public function __construct($userId, $userLogin = null)
+ public function __construct($userId, $userLogin = null, $IV = null)
{
- $this->_userId = $userId;
- $this->_userLogin = $userLogin;
- $this->_initializationKey = $this->genUserInitializationKey();
+ $this->userId = $userId;
+ $this->userLogin = $userLogin;
+ $this->initializationKey = $this->genUserInitializationKey($IV);
}
/**
* Generar una clave de inicialización codificada en Base32
*
+ * @param string $IV
* @return string
+ * @throws \InvalidArgumentException
*/
- private function genUserInitializationKey()
+ private function genUserInitializationKey($IV = null)
{
- $userIV = UserPass::getUserIVById($this->_userId);
+ $userIV = $IV === null ? UserPass::getUserIVById($this->userId) : $IV;
$base32 = new Base2n(5, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567', false, true, true);
- $key = substr($base32->encode($userIV), 0, 16);
- return $key;
+ return substr($base32->encode($userIV), 0, 16);
}
/**
@@ -90,7 +92,7 @@ class Auth2FA
*/
public function setUserId($userId)
{
- $this->_userId = $userId;
+ $this->userId = $userId;
}
/**
@@ -98,7 +100,7 @@ class Auth2FA
*/
public function setUserLogin($userLogin)
{
- $this->_userLogin = $userLogin;
+ $this->userLogin = $userLogin;
}
/**
@@ -106,10 +108,11 @@ class Auth2FA
*
* @param $key
* @return bool
+ * @throws \Exception
*/
public function verifyKey($key)
{
- return Google2FA::verify_key($this->_initializationKey, $key);
+ return Google2FA::verify_key($this->initializationKey, $key);
}
/**
@@ -119,13 +122,12 @@ class Auth2FA
*/
public function getUserQRCode()
{
- $data = Util::getDataFromUrl($this->getUserQRUrl());
-
- if ($data === false) {
+ try {
+ $data = Util::getDataFromUrl($this->getUserQRUrl());
+ return base64_encode($data);
+ } catch (SPException $e) {
return false;
}
-
- return base64_encode($data);
}
/**
@@ -136,7 +138,7 @@ class Auth2FA
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');
+ $qrUrl .= urlencode('otpauth://totp/sysPass:syspass/' . $this->userLogin . '?secret=' . $this->initializationKey . '&issuer=sysPass');
return $qrUrl;
}
@@ -151,11 +153,17 @@ class Auth2FA
public function checkUserToken($userToken)
{
$timeStamp = Google2FA::get_timestamp();
- $secretkey = Google2FA::base32_decode($this->_initializationKey);
+ $secretkey = Google2FA::base32_decode($this->initializationKey);
$totp = Google2FA::oath_totp($secretkey, $timeStamp);
- error_log($totp . '/' . $userToken);
+ return ($totp === $userToken);
+ }
- return ($totp == $userToken);
+ /**
+ * @return string
+ */
+ public function getInitializationKey()
+ {
+ return $this->initializationKey;
}
}
\ No newline at end of file
diff --git a/inc/Plugins/Authenticator/AuthenticatorData.class.php b/inc/Plugins/Authenticator/AuthenticatorData.class.php
new file mode 100644
index 00000000..7c948c3c
--- /dev/null
+++ b/inc/Plugins/Authenticator/AuthenticatorData.class.php
@@ -0,0 +1,144 @@
+.
+ */
+
+namespace Plugins\Authenticator;
+
+/**
+ * Class AuthenticatorData
+ *
+ * @package Plugins\Authenticator
+ */
+class AuthenticatorData
+{
+ /**
+ * Id de usuario
+ *
+ * @var
+ */
+ public $userId;
+ /**
+ * Si está habilitado 2FA
+ *
+ * @var int
+ */
+ public $twofaEnabled = 0;
+ /**
+ * Fecha de activación
+ *
+ * @var int
+ */
+ public $date;
+ /**
+ * Días de caducidad
+ *
+ * @var int
+ */
+ public $expireDays;
+ /**
+ * Vector de inicialización
+ *
+ * @var string
+ */
+ public $IV;
+
+ /**
+ * @return mixed
+ */
+ public function getUserId()
+ {
+ return (int)$this->userId;
+ }
+
+ /**
+ * @param mixed $userId
+ */
+ public function setUserId($userId)
+ {
+ $this->userId = (int)$userId;
+ }
+
+ /**
+ * @return bool
+ */
+ public function isTwofaEnabled()
+ {
+ return (bool)$this->twofaEnabled;
+ }
+
+ /**
+ * @param int $twofaEnabled
+ */
+ public function setTwofaEnabled($twofaEnabled)
+ {
+ $this->twofaEnabled = (int)$twofaEnabled;
+ }
+
+ /**
+ * @return int
+ */
+ public function getDate()
+ {
+ return $this->date;
+ }
+
+ /**
+ * @param int $date
+ */
+ public function setDate($date)
+ {
+ $this->date = $date;
+ }
+
+ /**
+ * @return int
+ */
+ public function getExpireDays()
+ {
+ return $this->expireDays;
+ }
+
+ /**
+ * @param int $expireDays
+ */
+ public function setExpireDays($expireDays)
+ {
+ $this->expireDays = $expireDays;
+ }
+
+ /**
+ * @return string
+ */
+ public function getIV()
+ {
+ return $this->IV;
+ }
+
+ /**
+ * @param string $IV
+ */
+ public function setIV($IV)
+ {
+ $this->IV = $IV;
+ }
+}
\ No newline at end of file
diff --git a/inc/Plugins/Authenticator/AuthenticatorPlugin.class.php b/inc/Plugins/Authenticator/AuthenticatorPlugin.class.php
new file mode 100644
index 00000000..280efe23
--- /dev/null
+++ b/inc/Plugins/Authenticator/AuthenticatorPlugin.class.php
@@ -0,0 +1,172 @@
+.
+ */
+
+namespace Plugins\Authenticator;
+
+use SP\Core\DiFactory;
+use SP\Core\Plugin\PluginBase;
+use SplSubject;
+
+/**
+ * Class Plugin
+ *
+ * @package Plugins\Authenticator
+ */
+class AuthenticatorPlugin extends PluginBase
+{
+ const PLUGIN_NAME = 'Authenticator';
+
+ /**
+ * Receive update from subject
+ *
+ * @link http://php.net/manual/en/splobserver.update.php
+ * @param SplSubject $subject
+ * The SplSubject notifying the observer of an update.
+ *
+ * @return void
+ * @since 5.1.0
+ */
+ public function update(SplSubject $subject)
+ {
+ }
+
+ /**
+ * Inicialización del plugin
+ */
+ public function init()
+ {
+ if (!is_array($this->data)) {
+ $this->data = [];
+ }
+
+ $this->base = __DIR__;
+ $this->themeDir = __DIR__ . DIRECTORY_SEPARATOR . 'themes' . DIRECTORY_SEPARATOR . DiFactory::getTheme()->getThemeName();
+
+ $this->setLocales();
+ }
+
+ /**
+ * Evento de actualización
+ *
+ * @param string $event Nombre del evento
+ * @param mixed $object
+ * @throws \SP\Core\Exceptions\FileNotFoundException
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function updateEvent($event, $object)
+ {
+ switch ($event){
+ case 'user.preferences':
+ $Controller = new PreferencesController($object, $this);
+ $Controller->getSecurityTab();
+ break;
+ case 'main.prelogin.2fa':
+ $Controller = new LoginController($this);
+ $Controller->get2FA($object);
+ break;
+ case 'login.preferences':
+ $Controller = new LoginController($this);
+ $Controller->checkLogin();
+ break;
+ }
+ }
+
+ /**
+ * Devuelve los eventos que implementa el observador
+ *
+ * @return array
+ */
+ public function getEvents()
+ {
+ return ['user.preferences', 'main.prelogin.2fa', 'login.preferences'];
+ }
+
+ /**
+ * Devuelve los recursos JS y CSS necesarios para el plugin
+ *
+ * @return array
+ */
+ public function getJsResources()
+ {
+ return ['plugin.min.js'];
+ }
+
+ /**
+ * Devuelve el autor del plugin
+ *
+ * @return string
+ */
+ public function getAuthor()
+ {
+ return 'Rubén D.';
+ }
+
+ /**
+ * Devuelve la versión del plugin
+ *
+ * @return array
+ */
+ public function getVersion()
+ {
+ return [1, 0];
+ }
+
+ /**
+ * Devuelve la versión compatible de sysPass
+ *
+ * @return array
+ */
+ public function getCompatibleVersion()
+ {
+ return [2, 0];
+ }
+
+ /**
+ * Devuelve los recursos CSS necesarios para el plugin
+ *
+ * @return array
+ */
+ public function getCssResources()
+ {
+ return [];
+ }
+
+ /**
+ * Devuelve el nombre del plugin
+ *
+ * @return string
+ */
+ public function getName()
+ {
+ return self::PLUGIN_NAME;
+ }
+
+ /**
+ * @return array|AuthenticatorData[]
+ */
+ public function getData()
+ {
+ return (array)parent::getData();
+ }
+}
\ No newline at end of file
diff --git a/inc/ext/Google2FA.class.php b/inc/Plugins/Authenticator/Google2FA.class.php
similarity index 50%
rename from inc/ext/Google2FA.class.php
rename to inc/Plugins/Authenticator/Google2FA.class.php
index 28681af4..9b047a36 100644
--- a/inc/ext/Google2FA.class.php
+++ b/inc/Plugins/Authenticator/Google2FA.class.php
@@ -1,4 +1,27 @@
.
+ */
+
/**
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,7 +44,7 @@
* @author Phil
**/
-namespace SP\Exts;
+namespace Plugins\Authenticator;
/**
* Class Google2FA
@@ -44,71 +67,106 @@ class Google2FA
*
* @var array
*/
- private static $lut = array( // Lookup needed for Base32 encoding
- "A" => 0, "B" => 1,
- "C" => 2, "D" => 3,
- "E" => 4, "F" => 5,
- "G" => 6, "H" => 7,
- "I" => 8, "J" => 9,
- "K" => 10, "L" => 11,
- "M" => 12, "N" => 13,
- "O" => 14, "P" => 15,
- "Q" => 16, "R" => 17,
- "S" => 18, "T" => 19,
- "U" => 20, "V" => 21,
- "W" => 22, "X" => 23,
- "Y" => 24, "Z" => 25,
- "2" => 26, "3" => 27,
- "4" => 28, "5" => 29,
- "6" => 30, "7" => 31
- );
+ private static $lut = [ // Lookup needed for Base32 encoding
+ 'A' => 0, 'B' => 1,
+ 'C' => 2, 'D' => 3,
+ 'E' => 4, 'F' => 5,
+ 'G' => 6, 'H' => 7,
+ 'I' => 8, 'J' => 9,
+ 'K' => 10, 'L' => 11,
+ 'M' => 12, 'N' => 13,
+ 'O' => 14, 'P' => 15,
+ 'Q' => 16, 'R' => 17,
+ 'S' => 18, 'T' => 19,
+ 'U' => 20, 'V' => 21,
+ 'W' => 22, 'X' => 23,
+ 'Y' => 24, 'Z' => 25,
+ '2' => 26, '3' => 27,
+ '4' => 28, '5' => 29,
+ '6' => 30, '7' => 31
+ ];
/**
* Generates a 16 digit secret key in base32 format
+ *
+ * @param int $length
* @return string
- **/
- public static function generate_secret_key($length = 16) {
- $b32 = "234567QWERTYUIOPASDFGHJKLZXCVBNM";
- $s = "";
+ */
+ public static function generate_secret_key($length = 16)
+ {
+ $b32 = '234567QWERTYUIOPASDFGHJKLZXCVBNM';
+ $s = '';
- for ($i = 0; $i < $length; $i++)
- $s .= $b32[rand(0,31)];
+ for ($i = 0; $i < $length; $i++) {
+ $s .= $b32[mt_rand(0, 31)];
+ }
return $s;
}
+ /**
+ * Verifys a user inputted key against the current timestamp. Checks $window
+ * keys either side of the timestamp.
+ *
+ * @param string $b32seed
+ * @param string $key - User specified key
+ * @param integer $window
+ * @param boolean $useTimeStamp
+ * @return boolean
+ * @throws \Exception
+ **/
+ public static function verify_key($b32seed, $key, $window = 4, $useTimeStamp = true)
+ {
+
+ $timeStamp = ($useTimeStamp !== true) ? (int)$useTimeStamp : self::get_timestamp();
+
+ $binarySeed = self::base32_decode($b32seed);
+
+ for ($ts = $timeStamp - $window; $ts <= $timeStamp + $window; $ts++) {
+ if (self::oath_totp($binarySeed, $ts) == $key) {
+ return true;
+ }
+ }
+
+ return false;
+
+ }
+
/**
* Returns the current Unix Timestamp devided by the keyRegeneration
* period.
+ *
* @return integer
**/
- public static function get_timestamp() {
- return floor(microtime(true)/self::keyRegeneration);
+ public static function get_timestamp()
+ {
+ return floor(microtime(true) / self::keyRegeneration);
}
/**
* Decodes a base32 string into a binary string.
**/
- public static function base32_decode($b32) {
+ public static function base32_decode($b32)
+ {
- $b32 = strtoupper($b32);
+ $b32 = strtoupper($b32);
- if (!preg_match('/^[ABCDEFGHIJKLMNOPQRSTUVWXYZ234567]+$/', $b32, $match))
+ if (!preg_match('/^[ABCDEFGHIJKLMNOPQRSTUVWXYZ234567]+$/', $b32, $match)) {
throw new \Exception('Invalid characters in the base32 string.');
+ }
- $l = strlen($b32);
- $n = 0;
- $j = 0;
- $binary = "";
+ $l = strlen($b32);
+ $n = 0;
+ $j = 0;
+ $binary = '';
for ($i = 0; $i < $l; $i++) {
-
- $n = $n << 5; // Move buffer left by 5 to make room
- $n = $n + self::$lut[$b32[$i]]; // Add value into buffer
- $j = $j + 5; // Keep track of number of bits in buffer
+ $n <<= 5; // Move buffer left by 5 to make room
+ $n += self::$lut[$b32[$i]]; // Add value into buffer
+ $j += 5; // Keep track of number of bits in buffer
if ($j >= 8) {
- $j = $j - 8;
+ $j -= 8;
$binary .= chr(($n & (0xFF << $j)) >> $j);
}
}
@@ -127,43 +185,19 @@ class Google2FA
*/
public static function oath_totp($key, $counter)
{
- if (strlen($key) < 8)
+ if (strlen($key) < 8) {
throw new \Exception('Secret key is too short. Must be at least 16 base 32 characters');
+ }
- $bin_counter = pack('N*', 0) . pack('N*', $counter); // Counter must be 64-bit int
- $hash = hash_hmac ('sha1', $bin_counter, $key, true);
+ $bin_counter = pack('N*', 0) . pack('N*', $counter); // Counter must be 64-bit int
+ $hash = hash_hmac('sha1', $bin_counter, $key, true);
return str_pad(self::oath_truncate($hash), self::otpLength, '0', STR_PAD_LEFT);
}
- /**
- * Verifys a user inputted key against the current timestamp. Checks $window
- * keys either side of the timestamp.
- *
- * @param string $b32seed
- * @param string $key - User specified key
- * @param integer $window
- * @param boolean $useTimeStamp
- * @return boolean
- **/
- public static function verify_key($b32seed, $key, $window = 4, $useTimeStamp = true) {
-
- $timeStamp = self::get_timestamp();
-
- if ($useTimeStamp !== true) $timeStamp = (int)$useTimeStamp;
-
- $binarySeed = self::base32_decode($b32seed);
-
- for ($ts = $timeStamp - $window; $ts <= $timeStamp + $window; $ts++)
- if (self::oath_totp($binarySeed, $ts) == $key)
- return true;
-
- return false;
-
- }
-
/**
* Extracts the OTP from the SHA1 hash.
+ *
* @param string $hash
* @return integer
**/
@@ -172,10 +206,10 @@ class Google2FA
$offset = ord($hash[19]) & 0xf;
return (
- ((ord($hash[$offset+0]) & 0x7f) << 24 ) |
- ((ord($hash[$offset+1]) & 0xff) << 16 ) |
- ((ord($hash[$offset+2]) & 0xff) << 8 ) |
- (ord($hash[$offset+3]) & 0xff)
- ) % pow(10, self::otpLength);
+ ((ord($hash[$offset + 0]) & 0x7f) << 24) |
+ ((ord($hash[$offset + 1]) & 0xff) << 16) |
+ ((ord($hash[$offset + 2]) & 0xff) << 8) |
+ (ord($hash[$offset + 3]) & 0xff)
+ ) % pow(10, self::otpLength);
}
}
\ No newline at end of file
diff --git a/inc/Plugins/Authenticator/LoginController.class.php b/inc/Plugins/Authenticator/LoginController.class.php
new file mode 100644
index 00000000..bb963721
--- /dev/null
+++ b/inc/Plugins/Authenticator/LoginController.class.php
@@ -0,0 +1,172 @@
+.
+ */
+
+namespace Plugins\Authenticator;
+
+use SP\Controller\ControllerBase;
+use SP\Core\Init;
+use SP\Core\Messages\NoticeMessage;
+use SP\Core\Plugin\PluginBase;
+use SP\Core\Session as CoreSession;
+use SP\DataModel\NoticeData;
+use SP\Http\JsonResponse;
+use SP\Http\Request;
+use SP\Mgmt\Notices\Notice;
+use SP\Util\Json;
+
+/**
+ * Class LoginController
+ *
+ * @package Plugins\Authenticator
+ */
+class LoginController
+{
+ const WARNING_TIME = 432000;
+
+ /**
+ * @var PluginBase
+ */
+ protected $Plugin;
+
+ /**
+ * Controller constructor.
+ *
+ * @param PluginBase $Plugin
+ */
+ public function __construct(PluginBase $Plugin)
+ {
+ $this->Plugin = $Plugin;
+ }
+
+ /**
+ * Obtener los datos para el interface de autentificación en 2 pasos
+ *
+ * @param ControllerBase $Controller
+ * @throws \SP\Core\Exceptions\FileNotFoundException
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ */
+ public function get2FA(ControllerBase $Controller)
+ {
+ $Controller->view->addTemplate('body-header');
+
+ if (Request::analyze('f', 0) === 1) {
+ $base = $this->Plugin->getThemeDir() . DIRECTORY_SEPARATOR . 'views' . DIRECTORY_SEPARATOR . 'main';
+
+ $Controller->view->addTemplate('login-2fa', $base);
+
+ $Controller->view->assign('action', Request::analyze('a'));
+ $Controller->view->assign('userId', Request::analyze('i', 0));
+ $Controller->view->assign('time', Request::analyze('t', 0));
+
+ $Controller->view->assign('actionId', ActionController::ACTION_TWOFA_CHECKCODE);
+
+ $this->checkExpireTime();
+ } else {
+ $Controller->showError(ControllerBase::ERR_UNAVAILABLE, false);
+ }
+
+ $Controller->view->addTemplate('body-footer');
+ $Controller->view->addTemplate('body-end');
+
+ $Controller->view();
+ exit();
+ }
+
+ /**
+ * Comprobar la caducidad del código
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ */
+ protected function checkExpireTime()
+ {
+ /** @var AuthenticatorData[] $data */
+ $data = $this->Plugin->getData();
+
+ $userId = Request::analyze('i', 0);
+
+ if (!isset($data[$userId]) || $data[$userId]->getExpireDays() === null) {
+ return;
+ }
+
+
+
+ if (count(Notice::getItem($NoticeData)->getByUserCurrentDate()) > 0) {
+ return;
+ }
+
+ $expireTime = $data[$userId]->getDate() + ($data[$userId]->getExpireDays() * 86400);
+ $timeRemaining = $expireTime - time();
+
+ $NoticeData = new NoticeData();
+ $NoticeData->setNoticeComponent($this->Plugin->getName());
+ $NoticeData->setNoticeUserId($userId);
+ $NoticeData->setNoticeType(_t('authenticator', 'Aviso Caducidad'));
+
+ $Message = new NoticeMessage();
+
+ if ($timeRemaining <= self::WARNING_TIME) {
+ $Message->addDescription(sprintf(_t('authenticator', 'El código 2FA se ha de restablecer en %d días'), $timeRemaining / 86400));
+
+ $NoticeData->setNoticeDescription($Message);
+
+ Notice::getItem($NoticeData)->add();
+ } elseif (time() > $expireTime) {
+ $Message->addDescription(_t('authenticator', 'El código 2FA ha caducado. Es necesario restablecerlo desde las preferencias'));
+
+ $NoticeData->setNoticeDescription($Message);
+
+ Notice::getItem($NoticeData)->add();
+ }
+ }
+
+ /**
+ * Comprobar 2FA en el login
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function checkLogin()
+ {
+ /** @var AuthenticatorData[] $data */
+ $data = $this->Plugin->getData();
+
+ $userId = CoreSession::getUserData()->getUserId();
+
+ if (isset($data[$userId]) && $data[$userId]->isTwofaEnabled()) {
+ Session::setTwoFApass(false);
+ CoreSession::setAuthCompleted(false);
+
+ $data = ['url' => Init::$WEBURI . '/index.php?a=2fa&i=' . $userId . '&t=' . time() . '&f=1'];
+
+ $JsonResponse = new JsonResponse();
+ $JsonResponse->setData($data);
+ $JsonResponse->setStatus(0);
+
+ Json::returnJson($JsonResponse);
+ } else {
+ Session::setTwoFApass(true);
+ }
+ }
+}
\ No newline at end of file
diff --git a/inc/Plugins/Authenticator/PreferencesController.class.php b/inc/Plugins/Authenticator/PreferencesController.class.php
new file mode 100644
index 00000000..6b38a302
--- /dev/null
+++ b/inc/Plugins/Authenticator/PreferencesController.class.php
@@ -0,0 +1,102 @@
+.
+ */
+
+namespace Plugins\Authenticator;
+
+use InvalidArgumentException;
+use SP\Controller\TabControllerBase;
+use SP\Core\Crypt;
+use SP\Core\Plugin\PluginBase;
+use SP\Core\Plugin\PluginInterface;
+use SP\Util\ArrayUtil;
+
+/**
+ * Class Controller
+ *
+ * @package Plugins\Authenticator
+ */
+class PreferencesController
+{
+ /**
+ * @var TabControllerBase
+ */
+ protected $Controller;
+ /**
+ * @var PluginBase
+ */
+ protected $Plugin;
+
+ /**
+ * Controller constructor.
+ *
+ * @param TabControllerBase $Controller
+ * @param PluginInterface $Plugin
+ */
+ public function __construct(TabControllerBase $Controller, PluginInterface $Plugin)
+ {
+ $this->Controller = $Controller;
+ $this->Plugin = $Plugin;
+ }
+
+ /**
+ * Obtener la pestaña de seguridad
+ */
+ public function getSecurityTab()
+ {
+ $base = $this->Plugin->getThemeDir() . DIRECTORY_SEPARATOR . 'views' . DIRECTORY_SEPARATOR . 'userpreferences';
+
+ // Datos del usuario de la sesión
+ $UserData = $this->Controller->getUserData();
+
+ // Buscar al usuario en los datos del plugin
+ /** @var AuthenticatorData $AuthenticatorData */
+ $AuthenticatorData = ArrayUtil::searchInObject($this->Plugin->getData(), 'userId', $UserData->getUserId(), new AuthenticatorData());
+
+ $this->Controller->view->addTemplate('preferences-security', $base);
+
+ try {
+ $IV = null;
+
+ if (!$AuthenticatorData->isTwofaEnabled()) {
+ $IV = Crypt::getIV();
+ $AuthenticatorData->setIV($IV);
+
+ Session::setUserData($AuthenticatorData);
+ } else {
+ $IV = $AuthenticatorData->getIV();
+ }
+
+ $twoFa = new Authenticator($UserData->getUserId(), $UserData->getUserLogin(), $IV);
+
+ $this->Controller->view->assign('qrCode', !$AuthenticatorData->isTwofaEnabled() ? $twoFa->getUserQRCode() : '');
+ $this->Controller->view->assign('userId', $UserData->getUserId());
+ $this->Controller->view->assign('chk2FAEnabled', $AuthenticatorData->isTwofaEnabled());
+ $this->Controller->view->assign('expireDays', $AuthenticatorData->getExpireDays());
+
+ $this->Controller->view->assign('tabIndex', $this->Controller->addTab(_t('authenticator', 'Seguridad')), 'security');
+ $this->Controller->view->assign('actionId', ActionController::ACTION_TWOFA_SAVE, 'security');
+ } catch (InvalidArgumentException $e) {
+ }
+ }
+}
\ No newline at end of file
diff --git a/inc/Plugins/Authenticator/Session.class.php b/inc/Plugins/Authenticator/Session.class.php
new file mode 100644
index 00000000..d0bd441f
--- /dev/null
+++ b/inc/Plugins/Authenticator/Session.class.php
@@ -0,0 +1,82 @@
+.
+ */
+
+/**
+ * Created by PhpStorm.
+ * User: rdb
+ * Date: 4/01/17
+ * Time: 8:32
+ */
+
+namespace Plugins\Authenticator;
+
+use SP\Core\Session as CoreSession;
+
+/**
+ * Class Session
+ *
+ * @package Plugins\Authenticator
+ */
+class Session
+{
+ /**
+ * Establecer el estado de 2FA del usuario
+ *
+ * @param bool $pass
+ */
+ public static function setTwoFApass($pass)
+ {
+ CoreSession::setPluginKey(AuthenticatorPlugin::PLUGIN_NAME, 'twofapass', $pass);
+ }
+
+ /**
+ * Devolver el estado de 2FA del usuario
+ *
+ * @return bool
+ */
+ public static function getTwoFApass()
+ {
+ return CoreSession::getPluginKey(AuthenticatorPlugin::PLUGIN_NAME, 'twofapass');
+ }
+
+ /**
+ * Establecer los datos del usuario
+ *
+ * @param AuthenticatorData $data
+ */
+ public static function setUserData(AuthenticatorData $data)
+ {
+ CoreSession::setPluginKey(AuthenticatorPlugin::PLUGIN_NAME, 'userdata', $data);
+ }
+
+ /**
+ * Devolver los datos del usuario
+ *
+ * @return AuthenticatorData
+ */
+ public static function getUserData()
+ {
+ return CoreSession::getPluginKey(AuthenticatorPlugin::PLUGIN_NAME, 'userdata');
+ }
+}
\ No newline at end of file
diff --git a/inc/Plugins/Authenticator/ajax/ajax_actions.php b/inc/Plugins/Authenticator/ajax/ajax_actions.php
new file mode 100644
index 00000000..dc5ca813
--- /dev/null
+++ b/inc/Plugins/Authenticator/ajax/ajax_actions.php
@@ -0,0 +1,35 @@
+.
+ */
+
+use Plugins\Authenticator\ActionController;
+use SP\Http\Request;
+
+define('APP_ROOT', '../../../..');
+
+require_once APP_ROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Base.php';
+
+Request::checkReferer('POST');
+
+$Controller = new ActionController();
+$Controller->doAction();
\ No newline at end of file
diff --git a/inc/Plugins/Authenticator/js/plugin.js b/inc/Plugins/Authenticator/js/plugin.js
new file mode 100644
index 00000000..81e98a21
--- /dev/null
+++ b/inc/Plugins/Authenticator/js/plugin.js
@@ -0,0 +1,77 @@
+/*
+ * sysPass
+ *
+ * @author nuxsmin
+ * @link http://syspass.org
+ * @copyright 2012-2017, Rubén Domínguez nuxsmin@$syspass.org
+ *
+ * This file is part of sysPass.
+ *
+ * sysPass is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * sysPass is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with sysPass. If not, see .
+ */
+
+sysPass.Plugin.Authenticator = function (Common) {
+ "use strict";
+
+ var log = Common.log;
+ var base = "/inc/Plugins/Authenticator";
+
+ var twofa = {
+ check: function ($obj) {
+ log.info("Authenticator:twofa:check");
+
+ var opts = Common.appRequests().getRequestOpts();
+ opts.url = base + "/ajax/ajax_actions.php";
+ opts.data = $obj.serialize();
+
+ Common.appRequests().getActionCall(opts, function (json) {
+ Common.msg.out(json);
+
+ if (json.status == 0) {
+ setTimeout(function () {
+ Common.redirect("index.php");
+ }, 1000);
+ }
+ });
+ },
+ save: function ($obj) {
+ log.info("Authenticator:twofa:save");
+
+ var opts = Common.appRequests().getRequestOpts();
+ opts.url = base + "/ajax/ajax_actions.php";
+ opts.data = $obj.serialize();
+
+ Common.appRequests().getActionCall(opts, function (json) {
+ Common.msg.out(json);
+
+ if (json.status === 0) {
+ Common.appActions().doAction({
+ actionId: $obj.data("nextaction-id"),
+ itemId: $obj.data("activetab")
+ });
+ }
+ });
+ }
+ };
+
+ var init = function () {
+
+ };
+
+ init();
+
+ return {
+ twofa: twofa
+ };
+};
diff --git a/inc/Plugins/Authenticator/js/plugin.min.js b/inc/Plugins/Authenticator/js/plugin.min.js
new file mode 100644
index 00000000..78aa8e97
--- /dev/null
+++ b/inc/Plugins/Authenticator/js/plugin.min.js
@@ -0,0 +1,2 @@
+sysPass.Plugin.Authenticator=function(b){var d=b.log;return{twofa:{check:function(c){d.info("Authenticator:twofa:check");var a=b.appRequests().getRequestOpts();a.url="/inc/Plugins/Authenticator/ajax/ajax_actions.php";a.data=c.serialize();b.appRequests().getActionCall(a,function(a){b.msg.out(a);0==a.status&&setTimeout(function(){b.redirect("index.php")},1E3)})},save:function(c){d.info("Authenticator:twofa:save");var a=b.appRequests().getRequestOpts();a.url="/inc/Plugins/Authenticator/ajax/ajax_actions.php";
+a.data=c.serialize();b.appRequests().getActionCall(a,function(a){b.msg.out(a);0===a.status&&b.appActions().doAction({actionId:c.data("nextaction-id"),itemId:c.data("activetab")})})}}}};
diff --git a/inc/Plugins/Authenticator/locales/ca_ES/LC_MESSAGES/authenticator.mo b/inc/Plugins/Authenticator/locales/ca_ES/LC_MESSAGES/authenticator.mo
new file mode 100644
index 00000000..09f3aaf8
Binary files /dev/null and b/inc/Plugins/Authenticator/locales/ca_ES/LC_MESSAGES/authenticator.mo differ
diff --git a/inc/Plugins/Authenticator/locales/ca_ES/LC_MESSAGES/authenticator.po b/inc/Plugins/Authenticator/locales/ca_ES/LC_MESSAGES/authenticator.po
new file mode 100644
index 00000000..c0cd9b44
--- /dev/null
+++ b/inc/Plugins/Authenticator/locales/ca_ES/LC_MESSAGES/authenticator.po
@@ -0,0 +1,128 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: sysPass\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-02-03 22:10+0100\n"
+"PO-Revision-Date: 2017-02-03 22:10+0100\n"
+"Last-Translator: nuxsmin \n"
+"Language-Team: \n"
+"Language: ca_ES\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-SourceCharset: UTF-8\n"
+"X-Poedit-Basepath: .\n"
+"X-Poedit-KeywordsList: _t:2\n"
+"X-Poedit-SearchPath-0: ../../..\n"
+
+#: ../../../ActionController.class.php:112
+#: ../../../ActionController.class.php:178
+msgid "Código incorrecto"
+msgstr "Codi incorrecte"
+
+#: ../../../ActionController.class.php:117
+msgid "Ey, esto es una DEMO!!"
+msgstr "Ey, això és una DEMO!!"
+
+#: ../../../ActionController.class.php:143
+msgid "Preferencias actualizadas"
+msgstr "Preferències actualitzades"
+
+#: ../../../ActionController.class.php:172
+msgid "Código correcto"
+msgstr "Codi correcte"
+
+#: ../../../LoginController.class.php:126
+#, fuzzy
+msgid "Aviso Caducidad"
+msgstr "Data Edició"
+
+#: ../../../LoginController.class.php:131
+#, php-format
+msgid "El código 2FA se ha de restablecer en %d días"
+msgstr "El codi 2FA s'ha de restablir en %d dies."
+
+#: ../../../LoginController.class.php:137
+msgid ""
+"El código 2FA ha caducado. Es necesario restablecerlo desde las preferencias"
+msgstr ""
+"El codi 2FA ha caducat. Es necessari restablir-ho des de les preferències."
+
+#: ../../../PreferencesController.class.php:97
+msgid "Seguridad"
+msgstr "Seguretat"
+
+#: ../../../themes/material-blue/views/main/login-2fa.inc:7
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:40
+msgid "Autentificación en 2 pasos"
+msgstr "Autenticació en 2 passos"
+
+#: ../../../themes/material-blue/views/main/login-2fa.inc:13
+msgid "Introducir código"
+msgstr "Introduir codi"
+
+#: ../../../themes/material-blue/views/main/login-2fa.inc:27
+msgid "Volver a iniciar sesión"
+msgstr "Tornar a iniciar sessió"
+
+#: ../../../themes/material-blue/views/main/login-2fa.inc:28
+msgid "Volver"
+msgstr "Tornar"
+
+#: ../../../themes/material-blue/views/main/login-2fa.inc:32
+msgid "Acceder"
+msgstr "Accedir"
+
+#: ../../../themes/material-blue/views/main/login-2fa.inc:34
+msgid "Solicitar"
+msgstr "Sol·licitar"
+
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:29
+msgid "Autentificación"
+msgstr "Autenticació"
+
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:45
+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 ""
+"Habilita l'autenticació en 2 passos que requereix de la introducció d'un "
+"token generat per una aplicació com Google Authenticator."
+
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:49
+msgid ""
+"Escanee el código QR proporcionado y a continuación introduzca la clave de 6 "
+"dígitos."
+msgstr ""
+"Escanegi el codi QR proporcionat i a continuació introdueixi la clau de 6 "
+"dígits."
+
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:58
+msgid "Activar"
+msgstr "Activar"
+
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:64
+msgid "Error al obtener el código QR. Inténtelo de nuevo"
+msgstr "Error en obtenir el codi QR. Intenti-ho de nou"
+
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:74
+msgid "Código"
+msgstr "Codi"
+
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:80
+msgid ""
+"Una vez activada, sólo es posible acceder si se dispone del dispositivo "
+"generador de códigos asociado."
+msgstr ""
+"Una vegada activada, només és possible accedir si es disposa del dispositiu "
+"generador de codis associat."
+
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:84
+#, fuzzy
+msgid "Días Caducidad"
+msgstr "Data Edició"
+
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:91
+msgid "Días"
+msgstr "Dies"
diff --git a/inc/Plugins/Authenticator/locales/de_DE/LC_MESSAGES/authenticator.mo b/inc/Plugins/Authenticator/locales/de_DE/LC_MESSAGES/authenticator.mo
new file mode 100644
index 00000000..42142ce6
Binary files /dev/null and b/inc/Plugins/Authenticator/locales/de_DE/LC_MESSAGES/authenticator.mo differ
diff --git a/inc/Plugins/Authenticator/locales/de_DE/LC_MESSAGES/authenticator.po b/inc/Plugins/Authenticator/locales/de_DE/LC_MESSAGES/authenticator.po
new file mode 100644
index 00000000..7e2f43fa
--- /dev/null
+++ b/inc/Plugins/Authenticator/locales/de_DE/LC_MESSAGES/authenticator.po
@@ -0,0 +1,125 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: sysPass\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-02-03 22:09+0100\n"
+"PO-Revision-Date: 2017-02-03 22:09+0100\n"
+"Last-Translator: nuxsmin \n"
+"Language-Team: \n"
+"Language: de_DE\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-SourceCharset: UTF-8\n"
+"X-Poedit-Basepath: .\n"
+"X-Poedit-KeywordsList: _t:2\n"
+"X-Poedit-SearchPath-0: ../../..\n"
+
+#: ../../../ActionController.class.php:112
+#: ../../../ActionController.class.php:178
+msgid "Código incorrecto"
+msgstr "Falscher Code"
+
+#: ../../../ActionController.class.php:117
+msgid "Ey, esto es una DEMO!!"
+msgstr "Hey, dies ist eine DEMO!!"
+
+#: ../../../ActionController.class.php:143
+msgid "Preferencias actualizadas"
+msgstr "Einstellungen aktualisiert"
+
+#: ../../../ActionController.class.php:172
+msgid "Código correcto"
+msgstr "Code bestätigt"
+
+#: ../../../LoginController.class.php:126
+#, fuzzy
+msgid "Aviso Caducidad"
+msgstr "Änderungsdatum"
+
+#: ../../../LoginController.class.php:131
+#, php-format
+msgid "El código 2FA se ha de restablecer en %d días"
+msgstr "Der 2FA-Code muss innerhalb von %d Tagen zurückgesetzt werden"
+
+#: ../../../LoginController.class.php:137
+msgid ""
+"El código 2FA ha caducado. Es necesario restablecerlo desde las preferencias"
+msgstr ""
+"Der 2FA Code ist abgelaufen. Du musst es auf der Registerkarte Einstellungen "
+"zurücksetzen"
+
+#: ../../../PreferencesController.class.php:97
+msgid "Seguridad"
+msgstr "Sicherheit"
+
+#: ../../../themes/material-blue/views/main/login-2fa.inc:7
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:40
+msgid "Autentificación en 2 pasos"
+msgstr "Zwei-Faktor Authentifizierung"
+
+#: ../../../themes/material-blue/views/main/login-2fa.inc:13
+msgid "Introducir código"
+msgstr "Code eingeben"
+
+#: ../../../themes/material-blue/views/main/login-2fa.inc:27
+msgid "Volver a iniciar sesión"
+msgstr "Zurück zur Anmeldung"
+
+#: ../../../themes/material-blue/views/main/login-2fa.inc:28
+msgid "Volver"
+msgstr "Zurück"
+
+#: ../../../themes/material-blue/views/main/login-2fa.inc:32
+msgid "Acceder"
+msgstr "Anmeldung"
+
+#: ../../../themes/material-blue/views/main/login-2fa.inc:34
+msgid "Solicitar"
+msgstr "Anfrage"
+
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:29
+msgid "Autentificación"
+msgstr "Authentifizierung"
+
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:45
+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 "Aktiviert Zwei-Faktor-Authentifizierung"
+
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:49
+msgid ""
+"Escanee el código QR proporcionado y a continuación introduzca la clave de 6 "
+"dígitos."
+msgstr "Scanne den angegebenen QR-Code und gib den sechs stelligen Code ein."
+
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:58
+msgid "Activar"
+msgstr "Aktivieren"
+
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:64
+msgid "Error al obtener el código QR. Inténtelo de nuevo"
+msgstr "Fehler beim Abrufen des QR-Codes. Bitte erneut versuchen."
+
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:74
+msgid "Código"
+msgstr "Code"
+
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:80
+msgid ""
+"Una vez activada, sólo es posible acceder si se dispone del dispositivo "
+"generador de códigos asociado."
+msgstr ""
+"Sobald aktiviert, kannst du dich nur mit dem Codegenerator verbundenen Gerät "
+"anmelden."
+
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:84
+#, fuzzy
+msgid "Días Caducidad"
+msgstr "Änderungsdatum"
+
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:91
+msgid "Días"
+msgstr "Tage"
diff --git a/inc/Plugins/Authenticator/locales/en_US/LC_MESSAGES/authenticator.mo b/inc/Plugins/Authenticator/locales/en_US/LC_MESSAGES/authenticator.mo
new file mode 100644
index 00000000..7d8198d1
Binary files /dev/null and b/inc/Plugins/Authenticator/locales/en_US/LC_MESSAGES/authenticator.mo differ
diff --git a/inc/Plugins/Authenticator/locales/en_US/LC_MESSAGES/authenticator.po b/inc/Plugins/Authenticator/locales/en_US/LC_MESSAGES/authenticator.po
new file mode 100644
index 00000000..580e7916
--- /dev/null
+++ b/inc/Plugins/Authenticator/locales/en_US/LC_MESSAGES/authenticator.po
@@ -0,0 +1,126 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Authenticator\n"
+"POT-Creation-Date: 2017-01-28 12:51+0100\n"
+"PO-Revision-Date: 2017-01-28 12:52+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"
+"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-KeywordsList: _t:2\n"
+"X-Poedit-SearchPath-0: ../../..\n"
+
+#: ../../../ActionController.class.php:112
+#: ../../../ActionController.class.php:178
+msgid "Código incorrecto"
+msgstr "Wrong code"
+
+#: ../../../ActionController.class.php:117
+msgid "Ey, esto es una DEMO!!"
+msgstr "Ey, this is a DEMO!!"
+
+#: ../../../ActionController.class.php:143
+msgid "Preferencias actualizadas"
+msgstr "Preferences updated"
+
+#: ../../../ActionController.class.php:172
+msgid "Código correcto"
+msgstr "Rigth code"
+
+#: ../../../LoginController.class.php:126
+msgid "Aviso Caducidad"
+msgstr "Expire Notice"
+
+#: ../../../LoginController.class.php:131
+#, php-format
+msgid "El código 2FA se ha de restablecer en %d días"
+msgstr "The 2FA code will need to be reset within %d days"
+
+#: ../../../LoginController.class.php:137
+msgid ""
+"El código 2FA ha caducado. Es necesario restablecerlo desde las preferencias"
+msgstr "The 2FA code is expired. You need to reset it on preferences tab"
+
+#: ../../../PreferencesController.class.php:97
+msgid "Seguridad"
+msgstr "Security"
+
+#: ../../../themes/material-blue/views/main/login-2fa.inc:7
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:40
+msgid "Autentificación en 2 pasos"
+msgstr "Two Factor Authentication"
+
+#: ../../../themes/material-blue/views/main/login-2fa.inc:13
+msgid "Introducir código"
+msgstr "Enter code"
+
+#: ../../../themes/material-blue/views/main/login-2fa.inc:27
+msgid "Volver a iniciar sesión"
+msgstr "Back to log in"
+
+#: ../../../themes/material-blue/views/main/login-2fa.inc:28
+msgid "Volver"
+msgstr "Back"
+
+#: ../../../themes/material-blue/views/main/login-2fa.inc:32
+msgid "Acceder"
+msgstr "Log in"
+
+#: ../../../themes/material-blue/views/main/login-2fa.inc:34
+msgid "Solicitar"
+msgstr "Request"
+
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:29
+msgid "Autentificación"
+msgstr "Authentication"
+
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:45
+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 the two factor authentication that requires entering a token that is "
+"generated by an application like Google Authenticator."
+
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:49
+msgid ""
+"Escanee el código QR proporcionado y a continuación introduzca la clave de 6 "
+"dígitos."
+msgstr "Please, scan the provided QR code and then enter the 6 digits key."
+
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:58
+msgid "Activar"
+msgstr "Enable"
+
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:64
+msgid "Error al obtener el código QR. Inténtelo de nuevo"
+msgstr "Error while getting the QR code. Please, try it again"
+
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:74
+msgid "Código"
+msgstr "Code"
+
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:80
+msgid ""
+"Una vez activada, sólo es posible acceder si se dispone del dispositivo "
+"generador de códigos asociado."
+msgstr ""
+"Once enabled, you wil only be able to log in by using the code generator "
+"linked device."
+
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:84
+msgid "Días Caducidad"
+msgstr "Expiry Days"
+
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:91
+msgid "Días"
+msgstr "Days"
+
+#~ msgid "No es posible acceder directamente a este archivo"
+#~ msgstr "Unable to access directly to this file"
diff --git a/inc/Plugins/Authenticator/locales/ru_RU/LC_MESSAGES/authenticator.mo b/inc/Plugins/Authenticator/locales/ru_RU/LC_MESSAGES/authenticator.mo
new file mode 100644
index 00000000..fdcce95b
Binary files /dev/null and b/inc/Plugins/Authenticator/locales/ru_RU/LC_MESSAGES/authenticator.mo differ
diff --git a/inc/Plugins/Authenticator/locales/ru_RU/LC_MESSAGES/authenticator.po b/inc/Plugins/Authenticator/locales/ru_RU/LC_MESSAGES/authenticator.po
new file mode 100644
index 00000000..0735306c
--- /dev/null
+++ b/inc/Plugins/Authenticator/locales/ru_RU/LC_MESSAGES/authenticator.po
@@ -0,0 +1,122 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: sysPass\n"
+"POT-Creation-Date: 2017-02-03 22:12+0100\n"
+"PO-Revision-Date: \n"
+"Last-Translator: nuxsmin \n"
+"Language-Team: Alexander Titov,Alex Us\n"
+"Language: ru\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-SourceCharset: UTF-8\n"
+"X-Poedit-Basepath: .\n"
+"X-Poedit-KeywordsList: _t:2\n"
+"X-Poedit-SearchPath-0: ../../..\n"
+
+#: ../../../ActionController.class.php:112
+#: ../../../ActionController.class.php:178
+msgid "Código incorrecto"
+msgstr "Неправильный код"
+
+#: ../../../ActionController.class.php:117
+msgid "Ey, esto es una DEMO!!"
+msgstr "Эй, это Демо-версия!!"
+
+#: ../../../ActionController.class.php:143
+msgid "Preferencias actualizadas"
+msgstr "Настройки изменены"
+
+#: ../../../ActionController.class.php:172
+msgid "Código correcto"
+msgstr "Правильный код"
+
+#: ../../../LoginController.class.php:126
+#, fuzzy
+msgid "Aviso Caducidad"
+msgstr "Действует до"
+
+#: ../../../LoginController.class.php:131
+#, php-format
+msgid "El código 2FA se ha de restablecer en %d días"
+msgstr "2FA код будет сброшен через %d дней."
+
+#: ../../../LoginController.class.php:137
+msgid ""
+"El código 2FA ha caducado. Es necesario restablecerlo desde las preferencias"
+msgstr "2FA код просрочен. Вам нужно сбросить его на странице настроек"
+
+#: ../../../PreferencesController.class.php:97
+msgid "Seguridad"
+msgstr "Безопасность"
+
+#: ../../../themes/material-blue/views/main/login-2fa.inc:7
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:40
+msgid "Autentificación en 2 pasos"
+msgstr "Двухфакторная аутентификация"
+
+#: ../../../themes/material-blue/views/main/login-2fa.inc:13
+msgid "Introducir código"
+msgstr "Введите код"
+
+#: ../../../themes/material-blue/views/main/login-2fa.inc:27
+msgid "Volver a iniciar sesión"
+msgstr "Назад ко входу"
+
+#: ../../../themes/material-blue/views/main/login-2fa.inc:28
+msgid "Volver"
+msgstr "Назад"
+
+#: ../../../themes/material-blue/views/main/login-2fa.inc:32
+msgid "Acceder"
+msgstr "Войти"
+
+#: ../../../themes/material-blue/views/main/login-2fa.inc:34
+msgid "Solicitar"
+msgstr "Запрос"
+
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:29
+msgid "Autentificación"
+msgstr "Аутентификация"
+
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:45
+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 "Включает двухфакторную аутентификацию, например Google Authenticator."
+
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:49
+msgid ""
+"Escanee el código QR proporcionado y a continuación introduzca la clave de 6 "
+"dígitos."
+msgstr "Отсканируйте QR-код и затем введите шестизначный пароль."
+
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:58
+msgid "Activar"
+msgstr "Активировать"
+
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:64
+msgid "Error al obtener el código QR. Inténtelo de nuevo"
+msgstr "Ошибка получения QR-кода. Попробуйте еще раз."
+
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:74
+msgid "Código"
+msgstr "Пароль"
+
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:80
+msgid ""
+"Una vez activada, sólo es posible acceder si se dispone del dispositivo "
+"generador de códigos asociado."
+msgstr ""
+"После включения, Вы можете получить доступ только при наличии привязанного "
+"устройства."
+
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:84
+#, fuzzy
+msgid "Días Caducidad"
+msgstr "Действует до"
+
+#: ../../../themes/material-blue/views/userpreferences/preferences-security.inc:91
+msgid "Días"
+msgstr "Дни"
diff --git a/inc/Plugins/Authenticator/themes/material-blue/views/main/login-2fa.inc b/inc/Plugins/Authenticator/themes/material-blue/views/main/login-2fa.inc
new file mode 100644
index 00000000..5fd5e812
--- /dev/null
+++ b/inc/Plugins/Authenticator/themes/material-blue/views/main/login-2fa.inc
@@ -0,0 +1,39 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/inc/Plugins/Authenticator/themes/material-blue/views/userpreferences/preferences-security.inc b/inc/Plugins/Authenticator/themes/material-blue/views/userpreferences/preferences-security.inc
new file mode 100644
index 00000000..c3391b05
--- /dev/null
+++ b/inc/Plugins/Authenticator/themes/material-blue/views/userpreferences/preferences-security.inc
@@ -0,0 +1,115 @@
+.
+ */ /** @var $icons \Theme\Icons */ ?>
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/inc/Profile.class.php b/inc/Profile.class.php
deleted file mode 100644
index ea3eedfa..00000000
--- a/inc/Profile.class.php
+++ /dev/null
@@ -1,228 +0,0 @@
-.
- *
- */
-
-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
deleted file mode 100644
index 3ef6c002..00000000
--- a/inc/ProfileBase.class.php
+++ /dev/null
@@ -1,597 +0,0 @@
-.
- *
- */
-
-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/SP/Account/Account.class.php b/inc/SP/Account/Account.class.php
new file mode 100644
index 00000000..fd7f7015
--- /dev/null
+++ b/inc/SP/Account/Account.class.php
@@ -0,0 +1,558 @@
+.
+ */
+
+namespace SP\Account;
+
+use SP\Core\Crypt;
+use SP\Core\Exceptions\SPException;
+use SP\Core\Session;
+use SP\DataModel\AccountData;
+use SP\DataModel\AccountExtData;
+use SP\DataModel\GroupAccountsData;
+use SP\Log\Email;
+use SP\Log\Log;
+use SP\Mgmt\Groups\GroupAccounts;
+use SP\Mgmt\Groups\GroupAccountsUtil;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+use SP\Util\Checks;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Esta clase es la encargada de realizar las operaciones sobre las cuentas de sysPass.
+ */
+class Account extends AccountBase implements AccountInterface
+{
+ /**
+ * Actualiza los datos de una cuenta en la BBDD.
+ *
+ * @return bool
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function updateAccount()
+ {
+ $Acl = Session::getAccountAcl($this->accountData->getAccountId());
+
+ // Guardamos una copia de la cuenta en el histórico
+ AccountHistory::addHistory($this->accountData->getAccountId(), false);
+
+ try {
+ if ($Acl->getStoredAcl()->isShowPermission()) {
+ $GroupAccountsData = new GroupAccountsData();
+ $GroupAccountsData->setAccgroupAccountId($this->accountData->getAccountId());
+ $GroupAccountsData->setGroups($this->accountData->getUserGroupsId());
+
+ GroupAccounts::getItem($GroupAccountsData)->update();
+ UserAccounts::updateUsersForAccount($this->accountData->getAccountId(), $this->accountData->getUsersId());
+ }
+ } catch (SPException $e) {
+ Log::writeNewLog(__FUNCTION__, $e->getMessage(), Log::ERROR);
+ }
+
+ if (is_array($this->accountData->getTags())) {
+ $AccountTags = new AccountTags();
+ $AccountTags->addTags($this->accountData, true);
+ }
+
+ $Data = new QueryData();
+
+ $fields = [
+ 'account_customerId = :accountCustomerId',
+ 'account_categoryId = :accountCategoryId',
+ 'account_name = :accountName',
+ 'account_login = :accountLogin',
+ 'account_url = :accountUrl',
+ 'account_notes = :accountNotes',
+ 'account_userEditId = :accountUserEditId',
+ 'account_dateEdit = NOW()',
+ 'account_passDateChange = :accountPassDateChange',
+ 'account_isPrivate = :accountIsPrivate',
+ 'account_isPrivateGroup = :accountIsPrivateGroup',
+ 'account_parentId = :accountParentId'
+ ];
+
+ if ($this->accountData->getAccountUserGroupId()) {
+ $fields[] = 'account_userGroupId = :accountUserGroupId';
+
+ $Data->addParam($this->accountData->getAccountUserGroupId(), 'accountUserGroupId');
+ }
+
+ if ($Acl->getStoredAcl()->isShowPermission()) {
+ $fields[] = 'account_otherUserEdit = :accountOtherUserEdit';
+ $fields[] = 'account_otherGroupEdit = :accountOtherGroupEdit';
+
+ $Data->addParam($this->accountData->getAccountOtherUserEdit(), 'accountOtherUserEdit');
+ $Data->addParam($this->accountData->getAccountOtherGroupEdit(), 'accountOtherGroupEdit');
+ }
+
+ $query = /** @lang SQL */
+ 'UPDATE accounts SET ' . implode(',', $fields) . ' WHERE account_id = :accountId';
+
+ $Data->setQuery($query);
+ $Data->addParam($this->accountData->getAccountCustomerId(), 'accountCustomerId');
+ $Data->addParam($this->accountData->getAccountCategoryId(), 'accountCategoryId');
+ $Data->addParam($this->accountData->getAccountName(), 'accountName');
+ $Data->addParam($this->accountData->getAccountLogin(), 'accountLogin');
+ $Data->addParam($this->accountData->getAccountUrl(), 'accountUrl');
+ $Data->addParam($this->accountData->getAccountNotes(), 'accountNotes');
+ $Data->addParam($this->accountData->getAccountUserEditId(), 'accountUserEditId');
+ $Data->addParam($this->accountData->getAccountPassDateChange(), 'accountPassDateChange');
+ $Data->addParam($this->accountData->getAccountIsPrivate(), 'accountIsPrivate');
+ $Data->addParam($this->accountData->getAccountIsPrivateGroup(), 'accountIsPrivateGroup');
+ $Data->addParam($this->accountData->getAccountParentId(), 'accountParentId');
+ $Data->addParam($this->accountData->getAccountId(), 'accountId');
+ $Data->setOnErrorMessage(__('Error al modificar la cuenta', false));
+
+ DB::getQuery($Data);
+
+ return true;
+ }
+
+ /**
+ * Restaurar una cuenta desde el histórico.
+ *
+ * @param $id int El Id del registro en el histórico
+ * @return bool
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function restoreFromHistory($id)
+ {
+ // Guardamos una copia de la cuenta en el histórico
+ AccountHistory::addHistory($this->accountData->getAccountId(), false);
+
+ $query = /** @lang SQL */
+ '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_userGroupId = src.acchistory_userGroupId,'
+ . '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,'
+ . 'dst.account_passDate = src.acchistory_passDate,'
+ . 'dst.account_passDateChange = src.acchistory_passDateChange, '
+ . 'dst.account_parentId = src.acchistory_parentId, '
+ . 'dst.account_isPrivate = src.accHistory_isPrivate, '
+ . 'dst.account_isPrivateGroup = src.accHistory_isPrivateGroup '
+ . 'WHERE dst.account_id = src.acchistory_accountId';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($id, 'id');
+ $Data->addParam($this->accountData->getAccountUserEditId(), 'accountUserEditId');
+ $Data->setOnErrorMessage(__('Error al restaurar cuenta', false));
+
+ DB::getQuery($Data);
+
+ 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 AccountExtData
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function getData()
+ {
+ $query = /** @lang SQL */
+ 'SELECT * FROM account_data_v WHERE account_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->setMapClass($this->accountData);
+ $Data->addParam($this->accountData->getAccountId());
+
+ /** @var AccountExtData|array $queryRes */
+ $queryRes = DB::getResults($Data);
+
+ if ($queryRes === false) {
+ throw new SPException(SPException::SP_CRITICAL, __('No se pudieron obtener los datos de la cuenta', false));
+ } elseif (is_array($queryRes) && count($queryRes) === 0) {
+ throw new SPException(SPException::SP_CRITICAL, __('La cuenta no existe', false));
+ }
+
+ // Obtener los usuarios y grupos secundarios y las etiquetas
+ $this->accountData->setUsersId(UserAccounts::getUsersForAccount($this->accountData->getAccountId()));
+ $this->accountData->setUserGroupsId(GroupAccountsUtil::getGroupsForAccount($this->accountData->getAccountId()));
+ $this->accountData->setTags(AccountTags::getTags($queryRes));
+
+ return $this->accountData;
+ }
+
+ /**
+ * Crea una nueva cuenta en la BBDD
+ *
+ * @param bool $encryptPass Encriptar la clave?
+ * @return $this
+ * @throws SPException
+ */
+ public function createAccount($encryptPass = true)
+ {
+ if ($encryptPass === true) {
+ $this->setPasswordEncrypted();
+ }
+
+ $query = /** @lang SQL */
+ '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_userEditId = :accountUserEditId,'
+ . 'account_otherUserEdit = :accountOtherUserEdit,'
+ . 'account_otherGroupEdit = :accountOtherGroupEdit,'
+ . 'account_isPrivate = :accountIsPrivate,'
+ . 'account_isPrivateGroup = :accountIsPrivateGroup,'
+ . 'account_passDate = UNIX_TIMESTAMP(),'
+ . 'account_passDateChange = :accountPassDateChange,'
+ . 'account_parentId = :accountParentId';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->accountData->getAccountCustomerId(), 'accountCustomerId');
+ $Data->addParam($this->accountData->getAccountCategoryId(), 'accountCategoryId');
+ $Data->addParam($this->accountData->getAccountName(), 'accountName');
+ $Data->addParam($this->accountData->getAccountLogin(), 'accountLogin');
+ $Data->addParam($this->accountData->getAccountUrl(), 'accountUrl');
+ $Data->addParam($this->accountData->getAccountPass(), 'accountPass');
+ $Data->addParam($this->accountData->getAccountIV(), 'accountIV');
+ $Data->addParam($this->accountData->getAccountNotes(), 'accountNotes');
+ $Data->addParam($this->accountData->getAccountUserId(), 'accountUserId');
+ $Data->addParam($this->accountData->getAccountUserGroupId() ?: Session::getUserData()->getUserGroupId(), 'accountUserGroupId');
+ $Data->addParam($this->accountData->getAccountUserId(), 'accountUserEditId');
+ $Data->addParam($this->accountData->getAccountOtherUserEdit(), 'accountOtherUserEdit');
+ $Data->addParam($this->accountData->getAccountOtherGroupEdit(), 'accountOtherGroupEdit');
+ $Data->addParam($this->accountData->getAccountIsPrivate(), 'accountIsPrivate');
+ $Data->addParam($this->accountData->getAccountIsPrivateGroup(), 'accountIsPrivateGroup');
+ $Data->addParam($this->accountData->getAccountPassDateChange(), 'accountPassDateChange');
+ $Data->addParam($this->accountData->getAccountParentId(), 'accountParentId');
+ $Data->setOnErrorMessage(__('Error al crear la cuenta', false));
+
+ DB::getQuery($Data);
+
+ $this->accountData->setAccountId(DB::$lastId);
+
+ try {
+ if (is_array($this->accountData->getAccountUserGroupsId())) {
+ $GroupAccounsData = new GroupAccountsData();
+ $GroupAccounsData->setAccgroupAccountId($this->accountData->getAccountId());
+ $GroupAccounsData->setGroups($this->accountData->getAccountUserGroupsId());
+
+ GroupAccounts::getItem($GroupAccounsData)->add();
+ }
+
+ if (is_array($this->accountData->getAccountUsersId())) {
+ UserAccounts::addUsersForAccount($this->accountData->getAccountId(), $this->accountData->getAccountUsersId());
+ }
+
+ if (is_array($this->accountData->getTags())) {
+ $AccountTags = new AccountTags();
+ $AccountTags->addTags($this->accountData);
+ }
+ } catch (SPException $e) {
+ Log::writeNewLog(__FUNCTION__, $e->getMessage(), Log::ERROR);
+ }
+
+
+ return $this;
+ }
+
+ /**
+ * Devolver los datos de la clave encriptados
+ *
+ * @param string $masterPass Clave maestra a utilizar
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ protected function setPasswordEncrypted($masterPass = null)
+ {
+ $pass = Crypt::encryptData($this->accountData->getAccountPass(), $masterPass);
+
+ $this->accountData->setAccountPass($pass['data']);
+ $this->accountData->setAccountIV($pass['iv']);
+ }
+
+ /**
+ * Elimina los datos de una cuenta en la BBDD.
+ *
+ * @param int|array $id
+ * @return bool Los ids de las cuentas eliminadas
+ * @throws SPException
+ */
+ public function deleteAccount($id)
+ {
+ if (is_array($id)) {
+ foreach ($id as $accountId) {
+ $this->deleteAccount($accountId);
+ }
+
+ return true;
+ }
+
+ // Guardamos una copia de la cuenta en el histórico
+ AccountHistory::addHistory($id, true);
+
+ $Data = new QueryData();
+
+ $query = /** @lang SQL */
+ 'DELETE FROM accounts WHERE account_id = ? LIMIT 1';
+
+ $Data->setQuery($query);
+ $Data->addParam($id);
+ $Data->setOnErrorMessage(__('Error al eliminar la cuenta', false));
+
+ DB::getQuery($Data);
+
+ return $Data->getQueryNumRows() === 1;
+ }
+
+ /**
+ * Incrementa el contador de visitas de una cuenta en la BBDD
+ *
+ * @return bool
+ * @throws \SP\Core\Exceptions\QueryException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ */
+ public function incrementViewCounter()
+ {
+ $query = /** @lang SQL */
+ 'UPDATE accounts SET account_countView = (account_countView + 1) WHERE account_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->accountData->getAccountId());
+
+ return DB::getQuery($Data);
+ }
+
+ /**
+ * Incrementa el contador de vista de clave de una cuenta en la BBDD
+ *
+ * @return bool
+ * @throws \SP\Core\Exceptions\QueryException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ */
+ public function incrementDecryptCounter()
+ {
+ $query = /** @lang SQL */
+ 'UPDATE accounts SET account_countDecrypt = (account_countDecrypt + 1) WHERE account_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->accountData->getAccountId());
+
+ return DB::getQuery($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
+ * @throws \phpmailer\phpmailerException
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function updateAccountsMasterPass($currentMasterPass, $newMasterPass, $newHash = null)
+ {
+ $accountsOk = [];
+ $userId = Session::getUserData()->getUserId();
+ $demoEnabled = Checks::demoIsEnabled();
+ $errorCount = 0;
+
+ $Log = new Log();
+ $LogMessage = $Log->getLogMessage();
+ $LogMessage->setAction(__('Actualizar Clave Maestra', false));
+ $LogMessage->addDescription(__('Inicio', false));
+ $Log->writeLog(true);
+
+ if (!Crypt::checkCryptModule()) {
+ $LogMessage->addDescription(__('Error en el módulo de encriptación', false));
+ $Log->setLogLevel(Log::ERROR);
+ $Log->writeLog();
+ return false;
+ }
+
+ $accountsPass = $this->getAccountsPassData();
+
+ if (!$accountsPass) {
+ $LogMessage->addDescription(__('Error al obtener las claves de las cuentas', false));
+ $Log->setLogLevel(Log::ERROR);
+ $Log->writeLog();
+ return false;
+ }
+
+ foreach ($accountsPass as $account) {
+ $this->accountData->setAccountId($account->account_id);
+ $this->accountData->setAccountUserEditId($userId);
+
+ // No realizar cambios si está en modo demo
+ if ($demoEnabled) {
+ $accountsOk[] = $this->accountData->getAccountId();
+ continue;
+ }
+
+ if (empty($account->account_pass)) {
+ $LogMessage->addDetails(__('Clave de cuenta vacía', false), sprintf(' % s(%d)', $account->account_name, $account->account_id));
+ continue;
+ }
+
+ if (strlen($account->account_IV) < 32) {
+ $LogMessage->addDetails(__('IV de encriptación incorrecto', false), sprintf(' % s(%d)', $account->account_name, $account->account_id));
+ }
+
+ $decryptedPass = Crypt::getDecrypt($account->account_pass, $account->account_IV, $currentMasterPass);
+ $this->accountData->setAccountPass($decryptedPass);
+ $this->setPasswordEncrypted($newMasterPass);
+
+ if ($this->accountData->getAccountPass() === false) {
+ $errorCount++;
+ $LogMessage->addDetails(__('No es posible desencriptar la clave de la cuenta', false), sprintf(' % s(%d)', $account->account_name, $account->account_id));
+ continue;
+ }
+
+ try {
+ $this->updateAccountPass(true);
+ $accountsOk[] = $this->accountData->getAccountId();
+ } catch (SPException $e) {
+ $errorCount++;
+ $LogMessage->addDetails(__('Fallo al actualizar la clave de la cuenta', false), sprintf(' % s(%d)', $account->account_name, $account->account_id));
+ continue;
+ }
+ }
+
+ $LogMessage->addDetails(__('Cuentas actualizadas', false), implode(',', $accountsOk));
+ $LogMessage->addDetails(__('Errores', false), $errorCount);
+ $Log->writeLog();
+
+ Email::sendEmail($LogMessage);
+
+ return true;
+ }
+
+ /**
+ * Obtener los datos relativos a la clave de todas las cuentas.
+ *
+ * @return array Con los datos de la clave
+ */
+ protected function getAccountsPassData()
+ {
+ $query = /** @lang SQL */
+ 'SELECT account_id, account_name, account_pass, account_IV FROM accounts';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+
+ return DB::getResultsArray($Data);
+ }
+
+ /**
+ * Actualiza la clave de una cuenta en la BBDD.
+ *
+ * @param bool $isMassive para no actualizar el histórico ni enviar mensajes
+ * @return bool
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function updateAccountPass($isMassive = false)
+ {
+ // No actualizar el histórico si es por cambio de clave maestra o restauración
+ if (!$isMassive) {
+ AccountHistory::addHistory($this->accountData->getAccountId(), false);
+
+ $this->setPasswordEncrypted();
+ }
+
+ $query = /** @lang SQL */
+ 'UPDATE accounts SET '
+ . 'account_pass = :accountPass,'
+ . 'account_IV = :accountIV,'
+ . 'account_userEditId = :accountUserEditId,'
+ . 'account_dateEdit = NOW(), '
+ . 'account_passDate = UNIX_TIMESTAMP(), '
+ . 'account_passDateChange = :accountPassDateChange '
+ . 'WHERE account_id = :accountId';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->accountData->getAccountPass(), 'accountPass');
+ $Data->addParam($this->accountData->getAccountIV(), 'accountIV');
+ $Data->addParam($this->accountData->getAccountUserEditId(), 'accountUserEditId');
+ $Data->addParam($this->accountData->getAccountPassDateChange(), 'accountPassDateChange');
+ $Data->addParam($this->accountData->getAccountId(), 'accountId');
+ $Data->setOnErrorMessage(__('Error al actualizar la clave', false));
+
+ DB::getQuery($Data);
+
+ return true;
+ }
+
+ /**
+ * Obtener los datos de una cuenta para mostrar la clave
+ * Esta funcion realiza la consulta a la BBDD y devuelve los datos.
+ *
+ * @return AccountData|false
+ */
+ public function getAccountPassData()
+ {
+ $query = /** @lang SQL */
+ 'SELECT account_name,'
+ . 'account_userId,'
+ . 'account_userGroupId,'
+ . 'account_login,'
+ . 'account_pass,'
+ . 'account_IV,'
+ . 'customer_name '
+ . 'FROM accounts '
+ . 'LEFT JOIN customers ON account_customerId = customer_id '
+ . 'WHERE account_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->setMapClass($this->accountData);
+ $Data->addParam($this->accountData->getAccountId());
+
+ // Obtener los usuarios y grupos secundarios
+ $this->accountData->setUsersId(UserAccounts::getUsersForAccount($this->accountData->getAccountId()));
+ $this->accountData->setUserGroupsId(GroupAccountsUtil::getGroupsForAccount($this->accountData->getAccountId()));
+
+ return DB::getResults($Data);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Account/AccountAcl.class.php b/inc/SP/Account/AccountAcl.class.php
new file mode 100644
index 00000000..c50f8cb3
--- /dev/null
+++ b/inc/SP/Account/AccountAcl.class.php
@@ -0,0 +1,556 @@
+.
+ */
+
+namespace SP\Account;
+
+use SP\Core\Acl;
+use SP\Core\ActionsInterface;
+use SP\Core\Session;
+use SP\DataModel\UserData;
+use SP\Mgmt\Groups\GroupUsers;
+use SP\Util\Checks;
+
+/**
+ * Class AccountAcl
+ *
+ * @package SP\Account
+ */
+class AccountAcl
+{
+ /**
+ * @var AccountBase
+ */
+ protected $Account;
+ /**
+ * @var int
+ */
+ protected $accountId;
+ /**
+ * @var int
+ */
+ protected $action;
+ /**
+ * @var int
+ */
+ protected $time = 0;
+ /**
+ * @var bool
+ */
+ protected $userInGroups = false;
+ /**
+ * @var bool
+ */
+ protected $userInUsers = false;
+ /**
+ * @var bool
+ */
+ protected $resultView = false;
+ /**
+ * @var bool
+ */
+ protected $resultEdit = false;
+ /**
+ * @var bool
+ */
+ protected $modified = false;
+ /**
+ * @var bool
+ */
+ protected $showView = false;
+ /**
+ * @var bool
+ */
+ protected $showHistory = false;
+ /**
+ * @var bool
+ */
+ protected $showDetails = false;
+ /**
+ * @var bool
+ */
+ protected $showPass = false;
+ /**
+ * @var bool
+ */
+ protected $showFiles = false;
+ /**
+ * @var bool
+ */
+ protected $showViewPass = false;
+ /**
+ * @var bool
+ */
+ protected $showSave = false;
+ /**
+ * @var bool
+ */
+ protected $showEdit = false;
+ /**
+ * @var bool
+ */
+ protected $showEditPass = false;
+ /**
+ * @var bool
+ */
+ protected $showDelete = false;
+ /**
+ * @var bool
+ */
+ protected $showRestore = false;
+ /**
+ * @var bool
+ */
+ protected $showLink = false;
+ /**
+ * @var bool
+ */
+ protected $showCopy = false;
+ /**
+ * @var bool
+ */
+ protected $showPermission = false;
+ /**
+ * @var UserData
+ */
+ protected $UserData;
+ /**
+ * @var bool
+ */
+ protected $compiled = false;
+
+ /**
+ * AccountAcl constructor.
+ *
+ * @param AccountBase $Account
+ * @param int $action
+ */
+ public function __construct(AccountBase $Account = null, $action)
+ {
+ $this->action = $action;
+ $this->UserData = Session::getUserData();
+
+ if (null !== $Account) {
+ $this->Account = $Account;
+ $this->accountId = $Account->getAccountData()->getAccountId();
+ }
+ }
+
+ /**
+ * Resetaear los datos de ACL en la sesión
+ */
+ public static function resetData()
+ {
+ unset($_SESSION['accountAcl']);
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isShowDetails()
+ {
+ return $this->action === Acl::ACTION_ACC_VIEW
+ || $this->action === Acl::ACTION_ACC_VIEW_HISTORY
+ || $this->action === Acl::ACTION_ACC_DELETE;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isShowPass()
+ {
+ return ($this->action === Acl::ACTION_ACC_NEW
+ || $this->action === Acl::ACTION_ACC_COPY);
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isShowFiles()
+ {
+ return Checks::fileIsEnabled() &&
+ ($this->action === Acl::ACTION_ACC_EDIT
+ || $this->action === Acl::ACTION_ACC_VIEW
+ || $this->action === Acl::ACTION_ACC_VIEW_HISTORY)
+ && $this->showFiles;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isShowViewPass()
+ {
+ return ($this->action === Acl::ACTION_ACC_SEARCH
+ || $this->action === Acl::ACTION_ACC_VIEW
+ || $this->action === Acl::ACTION_ACC_VIEW_PASS
+ || $this->action === Acl::ACTION_ACC_VIEW_HISTORY
+ || $this->action === Acl::ACTION_ACC_EDIT)
+ && $this->showViewPass;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isShowSave()
+ {
+ return $this->action === Acl::ACTION_ACC_EDIT
+ || $this->action === Acl::ACTION_ACC_NEW
+ || $this->action === Acl::ACTION_ACC_COPY;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isShowEdit()
+ {
+ return ($this->action === Acl::ACTION_ACC_SEARCH
+ || $this->action === Acl::ACTION_ACC_VIEW)
+ && $this->showEdit;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isShowEditPass()
+ {
+ return ($this->action === Acl::ACTION_ACC_EDIT
+ || $this->action === Acl::ACTION_ACC_VIEW)
+ && $this->showEditPass;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isShowDelete()
+ {
+ return ($this->action === Acl::ACTION_ACC_SEARCH
+ || $this->action === Acl::ACTION_ACC_DELETE
+ || $this->action === Acl::ACTION_ACC_EDIT)
+ && $this->showDelete;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isShowRestore()
+ {
+ return $this->action === Acl::ACTION_ACC_VIEW_HISTORY && $this->showRestore;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isShowLink()
+ {
+ return Checks::publicLinksIsEnabled() && $this->showLink;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isShowHistory()
+ {
+ return ($this->action === Acl::ACTION_ACC_VIEW
+ || $this->action === Acl::ACTION_ACC_VIEW_HISTORY)
+ && $this->showHistory;
+ }
+
+ /**
+ * Obtener la ACL de una cuenta
+ *
+ * @return $this
+ */
+ public function getAcl()
+ {
+ $sessionAcl = $this->getStoredAcl();
+
+ if (null !== $sessionAcl
+ && !($this->modified = (int)strtotime($this->Account->getAccountData()->getAccountDateEdit()) > $sessionAcl->getTime())
+ ) {
+ return $sessionAcl;
+ }
+
+ return $this->updateAcl();
+ }
+
+ /**
+ * Devolver una ACL almacenada
+ *
+ * @return AccountAcl
+ */
+ public function getStoredAcl()
+ {
+ $sessionAcl = Session::getAccountAcl($this->accountId);
+
+ if (null !== $sessionAcl && $sessionAcl->getAction() !== $this->action) {
+ $sessionAcl->setAction($this->action);
+ }
+
+ return $sessionAcl;
+ }
+
+ /**
+ * @return int
+ */
+ public function getAction()
+ {
+ return (int)$this->action;
+ }
+
+ /**
+ * @param int $action
+ */
+ public function setAction($action)
+ {
+ $this->action = (int)$action;
+ }
+
+ /**
+ * @return int
+ */
+ public function getTime()
+ {
+ return $this->time;
+ }
+
+ /**
+ * Actualizar la ACL
+ *
+ * @return $this
+ */
+ public function updateAcl()
+ {
+ $this->makeAcl();
+ $this->saveAcl();
+
+ return $this;
+ }
+
+ /**
+ * Crear la ACL de una cuenta
+ */
+ protected function makeAcl()
+ {
+ $this->compileAccountAccess();
+
+ // Mostrar historial
+ $this->showHistory = Acl::checkUserAccess(Acl::ACTION_ACC_VIEW_HISTORY);
+
+ // Mostrar lista archivos
+ $this->showFiles = Acl::checkUserAccess(Acl::ACTION_ACC_FILES);
+
+ // Mostrar acción de ver clave
+ $this->showViewPass = $this->checkAccountAccess(Acl::ACTION_ACC_VIEW_PASS)
+ && Acl::checkUserAccess(Acl::ACTION_ACC_VIEW_PASS);
+
+ // Mostrar acción de editar
+ $this->showEdit = $this->checkAccountAccess(Acl::ACTION_ACC_EDIT)
+ && Acl::checkUserAccess(Acl::ACTION_ACC_EDIT)
+ && !$this->Account->getAccountIsHistory();
+
+ // Mostrar acción de editar clave
+ $this->showEditPass = $this->checkAccountAccess(Acl::ACTION_ACC_EDIT_PASS)
+ && Acl::checkUserAccess(Acl::ACTION_ACC_EDIT_PASS)
+ && !$this->Account->getAccountIsHistory();
+
+ // Mostrar acción de eliminar
+ $this->showDelete = $this->checkAccountAccess(Acl::ACTION_ACC_DELETE)
+ && Acl::checkUserAccess(Acl::ACTION_ACC_DELETE);
+
+ // Mostrar acción de restaurar
+ $this->showRestore = $this->checkAccountAccess(Acl::ACTION_ACC_EDIT)
+ && Acl::checkUserAccess(Acl::ACTION_ACC_EDIT);
+
+ // Mostrar acción de enlace público
+ $this->showLink = Acl::checkUserAccess(Acl::ACTION_MGM_PUBLICLINKS_NEW);
+
+ // Mostrar acción de ver cuenta
+ $this->showView = $this->checkAccountAccess(Acl::ACTION_ACC_VIEW)
+ && Acl::checkUserAccess(Acl::ACTION_ACC_VIEW);
+
+ // Mostrar acción de copiar cuenta
+ $this->showCopy = $this->checkAccountAccess(Acl::ACTION_ACC_COPY)
+ && Acl::checkUserAccess(Acl::ACTION_ACC_COPY);
+ }
+
+ /**
+ * Evaluar la ACL
+ */
+ protected function compileAccountAccess()
+ {
+ if ($this->UserData->isUserIsAdminApp()
+ || $this->UserData->isUserIsAdminAcc()
+ ) {
+ $this->resultView = true;
+ $this->resultEdit = true;
+
+ return;
+ }
+
+ $AccountData = $this->Account->getAccountData();
+
+ $this->userInGroups = $this->getIsUserInGroups();
+ $this->userInUsers = in_array($this->UserData->getUserId(), $AccountData->getAccountUsersId());
+
+ $this->resultView = ($this->UserData->getUserId() === $AccountData->getAccountUserId()
+ || $this->UserData->getUserGroupId() === $AccountData->getAccountUserGroupId()
+ || $this->userInUsers
+ || $this->userInGroups);
+
+ $this->resultEdit = ($this->UserData->getUserId() === $AccountData->getAccountUserId()
+ || $this->UserData->getUserGroupId() === $AccountData->getAccountUserGroupId()
+ || ($this->userInUsers && $AccountData->getAccountOtherUserEdit())
+ || ($this->userInGroups && $AccountData->getAccountOtherGroupEdit()));
+ }
+
+ /**
+ * Comprobar si el usuario o el grupo del usuario se encuentran los grupos asociados a la
+ * cuenta.
+ *
+ * @return bool
+ */
+ protected function getIsUserInGroups()
+ {
+ $AccountData = $this->Account->getAccountData();
+
+ // Comprobar si el usuario está vinculado desde un grupo
+ foreach (GroupUsers::getItem()->getById($AccountData->getAccountUserGroupId()) as $GroupUsersData) {
+ if ($GroupUsersData->getUsertogroupUserId() === $this->UserData->getUserId()) {
+ return true;
+ }
+ }
+
+ // Comprobar si el grupo del usuario está vinculado como grupo secundario de la cuenta
+ foreach ($AccountData->getUserGroupsId() as $groupId) {
+ if ($groupId === $this->UserData->getUserGroupId()) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Comprueba los permisos de acceso a una cuenta.
+ *
+ * @param null $actionId
+ * @return bool
+ */
+ public function checkAccountAccess($actionId = null)
+ {
+ $action = null === $actionId ? $this->getAction() : $actionId;
+
+ switch ($action) {
+ case ActionsInterface::ACTION_ACC_VIEW:
+ case ActionsInterface::ACTION_ACC_VIEW_PASS:
+ case ActionsInterface::ACTION_ACC_VIEW_HISTORY:
+ case ActionsInterface::ACTION_ACC_COPY:
+ return $this->resultView;
+ case ActionsInterface::ACTION_ACC_EDIT:
+ case ActionsInterface::ACTION_ACC_DELETE:
+ case ActionsInterface::ACTION_ACC_EDIT_PASS:
+ return $this->resultEdit;
+ default:
+ return false;
+ }
+ }
+
+ /**
+ * Guardar la ACL
+ */
+ protected function saveAcl()
+ {
+ $this->time = time();
+
+ // No guardar el objeto de la cuenta ni de usuario
+ unset($this->Account, $this->UserData);
+
+ Session::setAccountAcl($this);
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isModified()
+ {
+ return $this->modified;
+ }
+
+ /**
+ * @param boolean $modified
+ */
+ public function setModified($modified)
+ {
+ $this->modified = $modified;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isShowView()
+ {
+ return $this->showView;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isShowCopy()
+ {
+ return ($this->action === Acl::ACTION_ACC_SEARCH
+ || $this->action === Acl::ACTION_ACC_VIEW
+ || $this->action === Acl::ACTION_ACC_EDIT)
+ && $this->showCopy;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isShowPermission()
+ {
+ $UserProfile = Session::getUserProfile();
+ $UserData = Session::getUserData();
+
+ return $UserData->isUserIsAdminAcc()
+ || $UserData->isUserIsAdminApp()
+ || $UserProfile->isAccPermission()
+ || $UserProfile->isAccPrivateGroup()
+ || $UserProfile->isAccPrivate();
+ }
+
+ /**
+ * @param boolean $showPermission
+ */
+ public function setShowPermission($showPermission)
+ {
+ $this->showPermission = $showPermission;
+ }
+
+ /**
+ * @return int
+ */
+ public function getAccountId()
+ {
+ return $this->accountId;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Account/AccountBase.class.php b/inc/SP/Account/AccountBase.class.php
new file mode 100644
index 00000000..4f7808c2
--- /dev/null
+++ b/inc/SP/Account/AccountBase.class.php
@@ -0,0 +1,116 @@
+.
+ */
+
+namespace SP\Account;
+
+use SP\DataModel\AccountData;
+use SP\DataModel\AccountExtData;
+use SP\DataModel\AccountHistoryData;
+use SP\Mgmt\Groups\GroupAccountsUtil;
+
+defined('APP_ROOT') || die();
+
+/**
+ * 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 AccountData|AccountExtData|AccountHistoryData
+ */
+ protected $accountData;
+ /**
+ * @var int Id de la cuenta padre.
+ */
+ private $accountParentId;
+ /**
+ * @var int Indica si la cuenta es un registro del histórico.
+ */
+ private $accountIsHistory = 0;
+
+ /**
+ * Constructor
+ *
+ * @param AccountData $accountData
+ */
+ public function __construct(AccountData $accountData = null)
+ {
+ $this->accountData = (null !== $accountData) ? $accountData : new AccountData();
+ }
+
+ /**
+ * @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;
+ }
+
+ /**
+ * @return AccountData|AccountExtData
+ */
+ public function getAccountData()
+ {
+ return $this->accountData;
+ }
+
+ /**
+ * 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/SP/Account/AccountFavorites.class.php b/inc/SP/Account/AccountFavorites.class.php
new file mode 100644
index 00000000..a1d16d95
--- /dev/null
+++ b/inc/SP/Account/AccountFavorites.class.php
@@ -0,0 +1,106 @@
+.
+ */
+
+namespace SP\Account;
+
+use SP\Core\Exceptions\SPException;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+
+/**
+ * Class AccountFavorites para la gestión de las cuentas favoritas de los usuarios
+ *
+ * @package SP\Account
+ */
+class AccountFavorites
+{
+ /**
+ * Obtener un array con los Ids de cuentas favoritas
+ *
+ * @param $userId int El Id de usuario
+ * @return array
+ */
+ public static function getFavorites($userId)
+ {
+ $query = /** @lang SQL */
+ 'SELECT accfavorite_accountId FROM accFavorites WHERE accfavorite_userId = ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($userId);
+
+ $queryRes = DB::getResultsArray($Data);
+
+ $favorites = [];
+
+ foreach($queryRes as $favorite){
+ $favorites[] = (int)$favorite->accfavorite_accountId;
+ }
+
+ return $favorites;
+ }
+
+ /**
+ * Añadir una cuenta a la lista de favoritos
+ *
+ * @param $accountId int El Id de la cuenta
+ * @param $userId int El Id del usuario
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public static function addFavorite($accountId, $userId)
+ {
+ $query = /** @lang SQL */
+ 'INSERT INTO accFavorites SET accfavorite_accountId = ?, accfavorite_userId = ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($accountId);
+ $Data->addParam($userId);
+ $Data->setOnErrorMessage(__('Error al añadir favorito', false));
+
+ DB::getQuery($Data);
+ }
+
+ /**
+ * Eliminar una cuenta de la lista de favoritos
+ *
+ * @param $accountId int El Id de la cuenta
+ * @param $userId int El Id del usuario
+ * @return bool
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public static function deleteFavorite($accountId, $userId)
+ {
+ $query = /** @lang SQL */
+ 'DELETE FROM accFavorites WHERE accfavorite_accountId = ? AND accfavorite_userId = ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($accountId);
+ $Data->addParam($userId);
+ $Data->setOnErrorMessage(__('Error al eliminar favorito', false));
+
+ DB::getQuery($Data);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Account/AccountHistory.class.php b/inc/SP/Account/AccountHistory.class.php
new file mode 100644
index 00000000..b9a46783
--- /dev/null
+++ b/inc/SP/Account/AccountHistory.class.php
@@ -0,0 +1,632 @@
+.
+ */
+
+namespace SP\Account;
+
+use SP\Config\ConfigDB;
+use SP\Core\Crypt;
+use SP\Core\Exceptions\SPException;
+use SP\Log\Log;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+use SP\Util\Checks;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class AccountHistory par el manejo del historial de cuentas
+ *
+ * @package SP
+ */
+class AccountHistory extends AccountBase implements AccountInterface
+{
+ protected $id;
+ /**
+ * @var bool
+ */
+ private $isDelete = false;
+ /**
+ * @var bool
+ */
+ private $isModify = false;
+
+ /**
+ * Obtiene el listado del histórico de una cuenta.
+ *
+ * @param $accountId
+ * @return array|false Con los registros con id como clave y fecha - usuario como valor
+ */
+ public static function getAccountList($accountId)
+ {
+ $query = /** @lang SQL */
+ '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 = ? '
+ . 'ORDER BY acchistory_id DESC';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($accountId);
+
+ $arrHistory = [];
+
+ foreach (DB::getResultsArray($Data) as $history) {
+ // Comprobamos si la entrada en el historial es la primera (no tiene editor ni fecha de edición)
+ if (empty($history->acchistory_dateEdit) || $history->acchistory_dateEdit === '0000-00-00 00:00:00') {
+ $date = $history->acchistory_dateAdd . ' - ' . $history->user_add;
+ } else {
+ $date = $history->acchistory_dateEdit . ' - ' . $history->user_edit;
+ }
+
+ $arrHistory[$history->acchistory_id] = $date;
+ }
+
+ return $arrHistory;
+ }
+
+ /**
+ * Crear un nuevo registro de histório de cuenta en la BBDD.
+ *
+ * @param int|array $id Id de la cuenta primaria
+ * @param bool $isDelete indica que la cuenta es eliminada
+ * @return bool
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public static function addHistory($id, $isDelete = false)
+ {
+ $Data = new QueryData();
+ $Data->addParam(($isDelete === false) ? 1 : 0);
+ $Data->addParam(($isDelete === true) ? 1 : 0);
+ $Data->addParam(ConfigDB::getValue('masterPwd'));
+
+ if (is_array($id)) {
+ $querySelect = /** @lang SQL */
+ '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,'
+ . 'account_isPrivate,'
+ . 'account_isPrivateGroup,'
+ . '?,?,? '
+ . 'FROM accounts WHERE account_id IN (' . implode(',', array_fill(0, count($id), '?')) . ')';
+
+ foreach ($id as $param) {
+ $Data->addParam($param);
+ }
+ } else {
+ $querySelect = /** @lang SQL */
+ '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,'
+ . 'account_isPrivate,'
+ . 'account_isPrivateGroup,'
+ . '?,?,? '
+ . 'FROM accounts WHERE account_id = ?';
+
+ $Data->addParam($id);
+ }
+
+ $query = /** @lang SQL */
+ '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_isPrivate,'
+ . 'accHistory_isPrivateGroup,'
+ . 'acchistory_isModify,'
+ . 'acchistory_isDeleted,'
+ . 'acchistory_mPassHash)';
+
+ $Data->setQuery($query . ' ' . $querySelect);
+ $Data->setOnErrorMessage(__('Error al actualizar el historial', false));
+
+ return DB::getQuery($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 = /** @lang SQL */
+ 'SELECT acchistory_accountId FROM accHistory WHERE acchistory_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($historyId);
+
+ $queryRes = DB::getResults($Data);
+
+ if ($queryRes === false) {
+ throw new SPException(SPException::SP_CRITICAL, __('No se pudieron obtener los datos de la cuenta', false), 0);
+ }
+
+ return $queryRes->acchistory_accountId;
+ }
+
+ /**
+ * Actualiza el hash de las cuentas en el histórico.
+ *
+ * @param $newHash string El nuevo hash de la clave maestra
+ * @return bool
+ * @throws \SP\Core\Exceptions\QueryException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ */
+ public static function updateAccountsMPassHash($newHash)
+ {
+ $query = /** @lang SQL */
+ 'UPDATE accHistory SET '
+ . 'acchistory_mPassHash = ? '
+ . 'WHERE acchistory_mPassHash = ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($newHash);
+ $Data->addParam(ConfigDB::getValue('masterPwd'));
+
+ return DB::getQuery($Data);
+ }
+
+ /**
+ * 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
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function updateAccountsMasterPass($currentMasterPass, $newMasterPass, $newHash = null)
+ {
+ $accountsOk = [];
+ $errorCount = 0;
+ $demoEnabled = Checks::demoIsEnabled();
+
+ $Log = new Log();
+ $LogMessage = $Log->getLogMessage();
+ $LogMessage->setAction(__('Actualizar Clave Maestra (H)', false));
+ $LogMessage->addDescription(__('Inicio', false));
+ $Log->writeLog(true);
+
+ if (!Crypt::checkCryptModule()) {
+ $Log->setLogLevel(Log::ERROR);
+ $LogMessage->addDescription(__('Error en el módulo de encriptación', false));
+ $Log->writeLog();
+ return false;
+ }
+
+ $accountsPass = $this->getAccountsPassData();
+
+ if (!$accountsPass) {
+ $Log->setLogLevel(Log::ERROR);
+ $LogMessage->addDescription(__('Error al obtener las claves de las cuentas', false));
+ $Log->writeLog();
+ return false;
+ }
+
+ $AccountDataBase = new \stdClass();
+ $AccountDataBase->id = 0;
+ $AccountDataBase->pass = '';
+ $AccountDataBase->iv = '';
+ $AccountDataBase->hash = $newHash;
+
+ foreach ($accountsPass as $account) {
+ $AccountData = clone $AccountDataBase;
+ $AccountData->id = $account->acchistory_id;
+
+ // No realizar cambios si está en modo demo
+ if ($demoEnabled) {
+ $accountsOk[] = $account->acchistory_id;
+ continue;
+ }
+
+ if (!$this->checkAccountMPass()) {
+ $errorCount++;
+ $LogMessage->addDetails(__('La clave maestra del registro no coincide', false), sprintf('%s (%d)', $account->acchistory_name, $account->acchistory_id));
+ continue;
+ }
+
+ if ($account->acchistory_pass === '') {
+ $LogMessage->addDetails(__('Clave de cuenta vacía', false), sprintf('%s (%d)', $account->acchistory_name, $account->acchistory_id));
+ continue;
+ }
+
+ if (strlen($account->acchistory_IV) < 32) {
+ $LogMessage->addDetails(__('IV de encriptación incorrecto', false), sprintf('%s (%d)', $account->acchistory_name, $account->acchistory_id));
+ }
+
+ $decryptedPass = Crypt::getDecrypt($account->acchistory_pass, $account->acchistory_IV, $currentMasterPass);
+ $AccountData->pass = Crypt::mkEncrypt($decryptedPass, $newMasterPass);
+ $AccountData->iv = Crypt::$strInitialVector;
+
+ if ($AccountData->pass === false) {
+ $errorCount++;
+ $LogMessage->addDetails(__('No es posible desencriptar la clave de la cuenta', false), sprintf('%s (%d)', $account->acchistory_name, $account->acchistory_id));
+ continue;
+ }
+
+ try {
+ $this->updateAccountPass($AccountData);
+ $accountsOk[] = $account->acchistory_id;
+ } catch (SPException $e) {
+ $errorCount++;
+ $LogMessage->addDetails(__('Fallo al actualizar la clave del histórico', false), sprintf('%s (%d)', $account->acchistory_name, $account->acchistory_id));
+ }
+ }
+
+ $LogMessage->addDetails(__('Cuentas actualizadas', false), implode(',', $accountsOk));
+ $LogMessage->addDetails(__('Errores', false), $errorCount);
+ $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 = /** @lang SQL */
+ 'SELECT acchistory_id, acchistory_name, acchistory_pass, acchistory_IV FROM accHistory';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+
+ return DB::getResultsArray($Data);
+ }
+
+ /**
+ * 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 = /** @lang SQL */
+ 'SELECT acchistory_mPassHash ' .
+ 'FROM accHistory ' .
+ 'WHERE acchistory_id = ? ' .
+ 'AND acchistory_mPassHash = ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam(null === $id ? $this->accountData->getAccountId() : $id);
+ $Data->addParam(ConfigDB::getValue('masterPwd'));
+
+ return (DB::getResults($Data) !== false);
+ }
+
+ /**
+ * Actualiza la clave del histórico de una cuenta en la BBDD.
+ *
+ * @param object $AccountData Objeto con los datos de la cuenta
+ * @return bool
+ * @throws \SP\Core\Exceptions\QueryException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ */
+ public function updateAccountPass($AccountData)
+ {
+ $query = /** @lang SQL */
+ 'UPDATE accHistory SET '
+ . 'acchistory_pass = :accountPass,'
+ . 'acchistory_IV = :accountIV,'
+ . 'acchistory_mPassHash = :newHash '
+ . 'WHERE acchistory_id = :id';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($AccountData->id, 'id');
+ $Data->addParam($AccountData->pass, 'accountPass');
+ $Data->addParam($AccountData->iv, 'accountIV');
+ $Data->addParam($AccountData->hash, 'newHash');
+
+ return DB::getQuery($Data);
+ }
+
+ /**
+ * 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 = /** @lang SQL */
+ 'SELECT acchistory_name AS account_name,'
+ . 'acchistory_userId AS account_userId,'
+ . 'acchistory_userGroupId AS account_userGroupId,'
+ . 'acchistory_login AS account_login,'
+ . 'acchistory_pass AS account_pass,'
+ . 'acchistory_IV AS account_IV,'
+ . 'customer_name '
+ . 'FROM accHistory '
+ . 'LEFT JOIN customers ON acchistory_customerId = customer_id '
+ . 'WHERE acchistory_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->setMapClass($this->accountData);
+ $Data->addParam($this->getId());
+
+ return DB::getResults($Data);
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * @param mixed $id
+ */
+ public function setId($id)
+ {
+ $this->id = $id;
+ }
+
+ /**
+ * 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 getData()
+ {
+ $query = /** @lang SQL */
+ '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,'
+ . 'acchistory_isPrivate + 0 AS account_isPrivate,'
+ . 'acchistory_isPrivateGroup + 0 AS account_isPrivateGroup,'
+ . '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 = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->setMapClass($this->accountData);
+ $Data->addParam($this->getId());
+
+ $queryRes = DB::getResults($Data);
+
+ if ($queryRes === false) {
+ throw new SPException(SPException::SP_CRITICAL, __('No se pudieron obtener los datos de la cuenta', false));
+ }
+
+ $this->accountData = $queryRes;
+
+ return $queryRes;
+ }
+
+ /**
+ * Crear una cuenta en el historial
+ *
+ * @param bool $encryptPass
+ * @return bool
+ * @throws \SP\Core\Exceptions\QueryException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ */
+ public function createAccount($encryptPass = true)
+ {
+ $query = /** @lang SQL */
+ '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_isPrivate = :isPrivate,'
+ . 'acchistory_isPrivateGroup = :isPrivateGroup,'
+ . 'acchistory_isModify = :isModify,'
+ . 'acchistory_isDeleted = :isDelete,'
+ . 'acchistory_mPassHash = :masterPwd';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->accountData->getAccountId(), 'account_id');
+ $Data->addParam($this->accountData->getAccountCustomerId(), 'accountCustomerId');
+ $Data->addParam($this->accountData->getAccountCategoryId(), 'accountCategoryId');
+ $Data->addParam($this->accountData->getAccountName(), 'accountName');
+ $Data->addParam($this->accountData->getAccountLogin(), 'accountLogin');
+ $Data->addParam($this->accountData->getAccountUrl(), 'accountUrl');
+ $Data->addParam($this->accountData->getAccountPass(), 'accountPass');
+ $Data->addParam($this->accountData->getAccountIV(), 'accountIV');
+ $Data->addParam($this->accountData->getAccountNotes(), 'accountNotes');
+ $Data->addParam($this->accountData->getAccountUserId(), 'accountUserId');
+ $Data->addParam($this->accountData->getAccountUserGroupId(), 'accountUserGroupId');
+ $Data->addParam($this->accountData->getAccountOtherUserEdit(), 'accountOtherUserEdit');
+ $Data->addParam($this->accountData->getAccountOtherGroupEdit(), 'accountOtherGroupEdit');
+ $Data->addParam($this->accountData->getAccountIsPrivate(), 'isPrivate');
+ $Data->addParam($this->accountData->getAccountIsPrivateGroup(), 'isPrivateGroup');
+ $Data->addParam($this->isIsModify(), 'isModify');
+ $Data->addParam($this->isIsDelete(), 'isDelete');
+ $Data->addParam(ConfigDB::getValue('masterPwd'), 'masterPwd');
+
+ return DB::getQuery($Data);
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isIsModify()
+ {
+ return $this->isModify;
+ }
+
+ /**
+ * @param boolean $isModify
+ */
+ public function setIsModify($isModify)
+ {
+ $this->isModify = $isModify;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isIsDelete()
+ {
+ return $this->isDelete;
+ }
+
+ /**
+ * @param boolean $isDelete
+ */
+ public function setIsDelete($isDelete)
+ {
+ $this->isDelete = $isDelete;
+ }
+
+ /**
+ * Eliminar una cuenta del historial
+ *
+ * @param $id
+ * @return bool
+ * @throws \SP\Core\Exceptions\QueryException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ */
+ public function deleteAccount($id)
+ {
+ if (is_array($id)) {
+ foreach ($id as $accountId) {
+ $this->deleteAccount($accountId);
+ }
+
+ return true;
+ }
+
+ $query = /** @lang SQL */
+ 'DELETE FROM accHistory WHERE acchistory_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($id);
+ $Data->setOnErrorMessage(__('Error al eliminar la cuenta', false));
+
+ DB::getQuery($Data);
+
+ return $Data->getQueryNumRows() === 1;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Account/AccountHistoryUtil.class.php b/inc/SP/Account/AccountHistoryUtil.class.php
new file mode 100644
index 00000000..566eb6df
--- /dev/null
+++ b/inc/SP/Account/AccountHistoryUtil.class.php
@@ -0,0 +1,159 @@
+.
+ */
+
+namespace SP\Account;
+
+use SP\Core\Session;
+use SP\DataModel\ItemSearchData;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class AccountUtil con utilidades para la gestión de cuentas
+ *
+ * @package SP
+ */
+class AccountHistoryUtil
+{
+ /**
+ * Devolver el nombre de la cuenta a partir del Id
+ *
+ * @param int $accountId El Id de la cuenta
+ * @return string|bool
+ */
+ public static function getAccountNameById($accountId)
+ {
+ $query = /** @lang SQL */
+ 'SELECT acchistory_name FROM accHistory WHERE acchistory_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($accountId);
+
+ $queryRes = DB::getResults($Data);
+
+ return is_object($queryRes) ? $queryRes : false;
+ }
+
+ /**
+ * Devolver el nombre de la cuenta a partir del Id
+ *
+ * @param array $ids Id de la cuenta
+ * @return array
+ * @internal param int $accountId El Id de la cuenta
+ */
+ public static function getAccountNameByIdBatch(array $ids)
+ {
+ $query = /** @lang SQL */
+ 'SELECT acchistory_name FROM accHistory WHERE acchistory_id IN (' . implode(',', array_fill(0, count($ids), '?')) . ')';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->setParams($ids);
+
+ return DB::getResultsArray($Data);
+ }
+
+ /**
+ * Obtener los datos de todas las cuentas y el cliente mediante una búsqueda
+ *
+ * @param ItemSearchData $SearchData
+ * @return array|bool
+ */
+ public static function getAccountsMgmtSearch(ItemSearchData $SearchData)
+ {
+ $Data = new QueryData();
+ $Data->setSelect('acchistory_id, acchistory_name, customer_name, IFNULL(acchistory_dateEdit,acchistory_dateAdd) as acchistory_date, BIN(acchistory_isModify) as acchistory_isModify, BIN(acchistory_isDeleted) as acchistory_isDeleted');
+ $Data->setFrom('accHistory LEFT JOIN customers ON acchistory_customerId = customer_id');
+ $Data->setOrder('acchistory_name, customer_name, acchistory_id DESC');
+
+ if ($SearchData->getSeachString() !== '') {
+ $Data->setWhere('acchistory_name LIKE ? OR customer_name LIKE ?');
+
+ $search = '%' . $SearchData->getSeachString() . '%';
+ $Data->addParam($search);
+ $Data->addParam($search);
+ }
+
+ $Data->setLimit('?,?');
+ $Data->addParam($SearchData->getLimitStart());
+ $Data->addParam($SearchData->getLimitCount());
+
+ DB::setFullRowCount();
+
+ $queryRes = DB::getResultsArray($Data);
+
+ $queryRes['count'] = $Data->getQueryNumRows();
+
+ return $queryRes;
+ }
+
+ /**
+ * Restaurar una cuenta desde el histórico.
+ *
+ * @param $id int El Id del registro en el histórico
+ * @param $accountId
+ * @return bool
+ */
+ public static function restoreFromHistory($id, $accountId)
+ {
+ // Guardamos una copia de la cuenta en el histórico
+ AccountHistory::addHistory($accountId, false);
+
+ $query = /** @lang SQL */
+ 'UPDATE accounts dst, '
+ . '(SELECT * FROM accHistory WHERE acchistory_id = :id LIMIT 1) 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_userGroupId = src.acchistory_userGroupId,'
+ . '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,'
+ . 'dst.account_passDate = src.acchistory_passDate,'
+ . 'dst.account_passDateChange = src.acchistory_passDateChange, '
+ . 'dst.account_parentId = src.acchistory_parentId, '
+ . 'dst.account_isPrivate = src.accHistory_isPrivate, '
+ . 'dst.account_isPrivateGroup = src.accHistory_isPrivateGroup '
+ . 'WHERE dst.account_id = src.acchistory_accountId';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($id, 'id');
+ $Data->addParam(Session::getUserData()->getUserId(), 'accountUserEditId');
+ $Data->setOnErrorMessage(__('Error al restaurar cuenta', false));
+
+ DB::getQuery($Data);
+
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Account/AccountInterface.class.php b/inc/SP/Account/AccountInterface.class.php
new file mode 100644
index 00000000..8dba73aa
--- /dev/null
+++ b/inc/SP/Account/AccountInterface.class.php
@@ -0,0 +1,62 @@
+.
+ */
+
+namespace SP\Account;
+
+use SP\DataModel\AccountData;
+use SP\DataModel\AccountExtData;
+use SP\DataModel\AccountHistoryData;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Interface AccountInterface con la definición de métodos comunes a las cuentas
+ */
+interface AccountInterface
+{
+ /**
+ * @return AccountExtData|AccountData|AccountHistoryData
+ */
+ public function getData();
+
+ /**
+ * @param bool $encryptPass Si se encripta la clave de la cuenta
+ * @return mixed
+ */
+ public function createAccount($encryptPass = true);
+
+ /**
+ * @param $id
+ * @return mixed
+ */
+ public function deleteAccount($id);
+
+ /**
+ * @param $currentMasterPass
+ * @param $newMasterPass
+ * @param null $newHash
+ * @return mixed
+ */
+ public function updateAccountsMasterPass($currentMasterPass, $newMasterPass, $newHash = null);
+}
\ No newline at end of file
diff --git a/inc/SP/Account/AccountSearch.class.php b/inc/SP/Account/AccountSearch.class.php
new file mode 100644
index 00000000..bc7bda09
--- /dev/null
+++ b/inc/SP/Account/AccountSearch.class.php
@@ -0,0 +1,689 @@
+.
+ */
+
+namespace SP\Account;
+
+use SP\Config\Config;
+use SP\Core\Acl;
+use SP\Core\Session;
+use SP\DataModel\AccountSearchData;
+use SP\Mgmt\Groups\GroupUtil;
+use SP\Mgmt\Users\User;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+use SP\Util\Checks;
+
+defined('APP_ROOT') || die();
+
+/**
+ * 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;
+ const SORT_DIR_ASC = 0;
+ const SORT_DIR_DESC = 1;
+ /**
+ * @var int El número de registros de la última consulta
+ */
+ public static $queryNumRows;
+ /**
+ * Colores para resaltar las cuentas
+ *
+ * @var array
+ */
+ private static $colors = [
+ '2196F3',
+ '03A9F4',
+ '00BCD4',
+ '009688',
+ '4CAF50',
+ '8BC34A',
+ 'CDDC39',
+ 'FFC107',
+ '795548',
+ '607D8B',
+ '9E9E9E',
+ 'FF5722',
+ 'F44336',
+ 'E91E63',
+ '9C27B0',
+ '673AB7',
+ '3F51B5',
+ ];
+
+ /**
+ * @var bool
+ */
+ private $globalSearch = false;
+ /**
+ * @var string
+ */
+ private $txtSearch;
+ /**
+ * @var int
+ */
+ private $customerId = 0;
+ /**
+ * @var int
+ */
+ private $categoryId = 0;
+ /**
+ * @var array
+ */
+ private $tagsId = [];
+ /**
+ * @var int
+ */
+ private $sortOrder = 0;
+ /**
+ * @var int
+ */
+ private $sortKey = 0;
+ /**
+ * @var int
+ */
+ private $limitStart = 0;
+ /**
+ * @var int
+ */
+ private $limitCount = 12;
+ /**
+ * @var bool
+ */
+ private $sortViews = false;
+ /**
+ * @var bool
+ */
+ private $searchFavorites = false;
+
+ /**
+ * Constructor
+ */
+ public function __construct()
+ {
+ $userResultsPerPage = (Session::getSessionType() === Session::SESSION_INTERACTIVE) ? Session::getUserPreferences()->getResultsPerPage() : 0;
+
+ $this->limitCount = ($userResultsPerPage > 0) ? $userResultsPerPage : Config::getConfig()->getAccountCount();
+ $this->sortViews = (Session::getSessionType() === Session::SESSION_INTERACTIVE) ? Session::getUserPreferences()->isSortViews() : false;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isSearchFavorites()
+ {
+ return $this->searchFavorites;
+ }
+
+ /**
+ * @param boolean $searchFavorites
+ * @return $this
+ */
+ public function setSearchFavorites($searchFavorites)
+ {
+ $this->searchFavorites = (bool)$searchFavorites;
+
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getGlobalSearch()
+ {
+ return $this->globalSearch;
+ }
+
+ /**
+ * @param int $globalSearch
+ * @return $this
+ */
+ public function setGlobalSearch($globalSearch)
+ {
+ $this->globalSearch = $globalSearch;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getTxtSearch()
+ {
+ return $this->txtSearch;
+ }
+
+ /**
+ * @param string $txtSearch
+ * @return $this
+ */
+ public function setTxtSearch($txtSearch)
+ {
+ $this->txtSearch = (string)$txtSearch;
+
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getCustomerId()
+ {
+ return $this->customerId;
+ }
+
+ /**
+ * @param int $customerId
+ * @return $this
+ */
+ public function setCustomerId($customerId)
+ {
+ $this->customerId = $customerId;
+
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getCategoryId()
+ {
+ return $this->categoryId;
+ }
+
+ /**
+ * @param int $categoryId
+ * @return $this
+ */
+ public function setCategoryId($categoryId)
+ {
+ $this->categoryId = $categoryId;
+
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getSortOrder()
+ {
+ return $this->sortOrder;
+ }
+
+ /**
+ * @param int $sortOrder
+ * @return $this
+ */
+ public function setSortOrder($sortOrder)
+ {
+ $this->sortOrder = $sortOrder;
+
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getLimitStart()
+ {
+ return $this->limitStart;
+ }
+
+ /**
+ * @param int $limitStart
+ * @return $this
+ */
+ public function setLimitStart($limitStart)
+ {
+ $this->limitStart = $limitStart;
+
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getLimitCount()
+ {
+ return $this->limitCount;
+ }
+
+ /**
+ * @param int $limitCount
+ * @return $this
+ */
+ public function setLimitCount($limitCount)
+ {
+ $this->limitCount = $limitCount;
+
+ return $this;
+ }
+
+ /**
+ * Procesar los resultados de la búsqueda y crear la variable que contiene los datos de cada cuenta
+ * a mostrar.
+ *
+ * @return array
+ */
+ public function processSearchResults()
+ {
+ if (!$results = $this->getAccounts()) {
+ return [];
+ }
+
+ // Variables de configuración
+ $maxTextLength = Checks::resultsCardsIsEnabled() ? 40 : 60;
+
+ $accountsData['count'] = self::$queryNumRows;
+
+ $accountLinkEnabled = Session::getUserPreferences()->isAccountLink() || Config::getConfig()->isAccountLink();
+ $favorites = AccountFavorites::getFavorites(Session::getUserData()->getUserId());
+
+ foreach ($results as $AccountSearchData) {
+ // Establecer los datos de la cuenta
+ $Account = new Account($AccountSearchData);
+
+ // Propiedades de búsqueda de cada cuenta
+ $AccountSearchItems = new AccountsSearchItem($AccountSearchData);
+
+ // Obtener la ACL de la cuenta
+ $AccountAcl = new AccountAcl($Account, Acl::ACTION_ACC_SEARCH);
+
+ if (!$AccountSearchData->getAccountIsPrivate()) {
+ $AccountSearchData->setUsersId($AccountSearchItems->getCacheUsers(true));
+ $AccountSearchData->setUserGroupsId($AccountSearchItems->getCacheGroups(true));
+ }
+
+ $AccountSearchData->setTags(AccountTags::getTags($Account->getAccountData()));
+
+ // Obtener la ACL
+ $Acl = $AccountAcl->getAcl();
+
+ $AccountSearchItems->setTextMaxLength($maxTextLength);
+ $AccountSearchItems->setColor($this->pickAccountColor($AccountSearchData->getAccountCustomerId()));
+ $AccountSearchItems->setShowView($Acl->isShowView());
+ $AccountSearchItems->setShowViewPass($Acl->isShowViewPass());
+ $AccountSearchItems->setShowEdit($Acl->isShowEdit());
+ $AccountSearchItems->setShowCopy($Acl->isShowCopy());
+ $AccountSearchItems->setShowDelete($Acl->isShowDelete());
+ $AccountSearchItems->setLink($accountLinkEnabled);
+ $AccountSearchItems->setFavorite(in_array($AccountSearchData->getAccountId(), $favorites, true));
+
+ $accountsData[] = $AccountSearchItems;
+ }
+
+ return $accountsData;
+ }
+
+ /**
+ * Obtener las cuentas de una búsqueda.
+ *
+ * @return AccountSearchData[] Resultado de la consulta
+ */
+ public function getAccounts()
+ {
+ $arrFilterCommon = [];
+ $arrFilterSelect = [];
+ $arrayQueryJoin = [];
+ $arrQueryWhere = [];
+ $queryLimit = '';
+
+ $Data = new QueryData();
+ $Data->setMapClassName(AccountSearchData::class);
+
+ if ($this->txtSearch !== null && $this->txtSearch !== '') {
+ // Analizar la cadena de búsqueda por etiquetas especiales
+ $stringFilters = $this->analyzeQueryString();
+
+ if (count($stringFilters) > 0) {
+ foreach ($stringFilters as $filter) {
+ $arrFilterCommon[] = $filter['query'];
+
+ foreach ($filter['values'] as $value) {
+ $Data->addParam($value);
+ }
+ }
+ } else {
+ $txtSearch = '%' . $this->txtSearch . '%';
+
+ $arrFilterCommon[] = 'account_name LIKE ?';
+ $Data->addParam($txtSearch);
+
+ $arrFilterCommon[] = 'account_login LIKE ?';
+ $Data->addParam($txtSearch);
+
+ $arrFilterCommon[] = 'account_url LIKE ?';
+ $Data->addParam($txtSearch);
+
+ $arrFilterCommon[] = 'account_notes LIKE ?';
+ $Data->addParam($txtSearch);
+ }
+ }
+
+ if ($this->categoryId !== 0) {
+ $arrFilterSelect[] = 'account_categoryId = ?';
+ $Data->addParam($this->categoryId);
+ }
+
+ if ($this->customerId !== 0) {
+ $arrFilterSelect[] = 'account_customerId = ?';
+ $Data->addParam($this->customerId);
+ }
+
+ $numTags = count($this->tagsId);
+
+ if ($numTags > 0) {
+ $tags = str_repeat('?,', $numTags - 1) . '?';
+
+ $arrFilterSelect[] = 'account_id IN (SELECT acctag_accountId FROM accTags WHERE acctag_tagId IN (' . $tags . '))';
+
+ for ($i = 0; $i <= $numTags - 1; $i++) {
+ $Data->addParam($this->tagsId[$i]);
+ }
+ }
+
+ if ($this->searchFavorites === true) {
+ $arrayQueryJoin[] = 'INNER JOIN accFavorites ON (accfavorite_accountId = account_id AND accfavorite_userId = ?)';
+ $Data->addParam(Session::getUserData()->getUserId());
+ }
+
+ if (count($arrFilterCommon) > 0) {
+ $arrQueryWhere[] = '(' . implode(' OR ', $arrFilterCommon) . ')';
+ }
+
+ if (count($arrFilterSelect) > 0) {
+ $arrQueryWhere[] = '(' . implode(' AND ', $arrFilterSelect) . ')';
+ }
+
+ $arrQueryWhere = array_merge($arrQueryWhere, AccountUtil::getAccountFilterUser($Data));
+
+ if ($this->limitCount > 0) {
+ $queryLimit = '?, ?';
+
+ $Data->addParam($this->limitStart);
+ $Data->addParam($this->limitCount);
+ }
+
+ $queryWhere = '';
+
+ if (count($arrQueryWhere) === 1) {
+ $queryWhere = implode($arrQueryWhere);
+ } elseif (count($arrQueryWhere) > 1) {
+ $queryWhere = implode(' AND ', $arrQueryWhere);
+ }
+
+ $queryJoin = implode('', $arrayQueryJoin);
+
+ $Data->setSelect('*');
+ $Data->setFrom('account_search_v ' . $queryJoin);
+ $Data->setWhere($queryWhere);
+ $Data->setOrder($this->getOrderString());
+ $Data->setLimit($queryLimit);
+
+ // Obtener el número total de cuentas visibles por el usuario
+ DB::setFullRowCount();
+
+// Log::writeNewLog(__FUNCTION__, $Data->getQuery(), Log::DEBUG);
+// Log::writeNewLog(__FUNCTION__, print_r($Data->getParams(), true), Log::DEBUG);
+
+ // Consulta de la búsqueda de cuentas
+ $queryRes = DB::getResultsArray($Data);
+
+ // Obtenemos el número de registros totales de la consulta sin contar el LIMIT
+ self::$queryNumRows = $Data->getQueryNumRows();
+
+ // 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
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ private function analyzeQueryString()
+ {
+ if (!preg_match('/^(user|group|file|owner|maingroup):"([\w\.]+)"$/i', $this->txtSearch, $filters)
+ && !preg_match('/^(expired|private):$/i', $this->txtSearch, $filters)
+ ) {
+ return [];
+ }
+
+ $filtersData = [];
+
+ switch ($filters[1]) {
+ case 'user':
+ $UserData = User::getItem()->getByLogin($filters[2]);
+
+ if (!is_object($UserData)) {
+ return [];
+ }
+
+ $filtersData[] = [
+ 'type' => 'user',
+ 'query' => 'account_userId = ? OR account_id IN (SELECT accuser_accountId AS accountId FROM accUsers WHERE accuser_accountId = account_id AND accuser_userId = ? UNION ALL SELECT accgroup_accountId AS accountId FROM accGroups WHERE accgroup_accountId = account_id AND accgroup_groupId = ?)',
+ 'values' => [$UserData->getUserId(), $UserData->getUserId(), $UserData->getUserGroupId()]
+ ];
+ break;
+ case 'owner':
+ $UserData = User::getItem()->getByLogin($filters[2]);
+
+ if (!is_object($UserData)) {
+ return [];
+ }
+
+ $filtersData[] = [
+ 'type' => 'user',
+ 'query' => 'account_userId = ?',
+ 'values' => [$UserData->getUserId()]
+ ];
+ break;
+ case 'group':
+ $GroupData = GroupUtil::getGroupIdByName($filters[2]);
+
+ if (!is_object($GroupData)) {
+ return [];
+ }
+
+ $filtersData[] = [
+ 'type' => 'group',
+ 'query' => 'account_userGroupId = ? OR account_id IN (SELECT accgroup_accountId AS accountId FROM accGroups WHERE accgroup_accountId = account_id AND accgroup_groupId = ?)',
+ 'values' => [$GroupData->getUsergroupId(), $GroupData->getUsergroupId()]
+ ];
+ break;
+ case 'maingroup':
+ $GroupData = GroupUtil::getGroupIdByName($filters[2]);
+
+ if (!is_object($GroupData)) {
+ return [];
+ }
+
+ $filtersData[] = [
+ 'type' => 'group',
+ 'query' => 'account_userGroupId = ?',
+ 'values' => [$GroupData->getUsergroupId()]
+ ];
+ break;
+ case 'file':
+ $filtersData[] = [
+ 'type' => 'file',
+ 'query' => 'account_id IN (SELECT accfile_accountId FROM accFiles WHERE accfile_name LIKE ?)',
+ 'values' => ['%' . $filters[2] . '%']
+ ];
+ break;
+ case 'expired':
+ $filtersData[] =
+ [
+ 'type' => 'expired',
+ 'query' => 'account_passDateChange > 0 AND UNIX_TIMESTAMP() > account_passDateChange',
+ 'values' => []
+ ];
+ break;
+ case 'private':
+ $filtersData[] =
+ [
+ 'type' => 'private',
+ 'query' => '(account_isPrivate = 1 AND account_userId = ?) OR (account_isPrivateGroup = 1 AND account_userGroupId = ?)',
+ 'values' => [Session::getUserData()->getUserId(), Session::getUserData()->getUserGroupId()]
+ ];
+ break;
+ default:
+ return $filtersData;
+ }
+
+ return $filtersData;
+ }
+
+ /**
+ * Devuelve la cadena de ordenación de la consulta
+ *
+ * @return string
+ */
+ private function getOrderString()
+ {
+ 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';
+ $orderKey[] = 'account_name';
+ break;
+ }
+
+ if ($this->isSortViews() && !$this->getSortKey()) {
+ array_unshift($orderKey, 'account_countView DESC');
+ $this->setSortOrder(self::SORT_DIR_DESC);
+ }
+
+ $orderDir = ($this->sortOrder === self::SORT_DIR_ASC) ? 'ASC' : 'DESC';
+ return sprintf('%s %s', implode(',', $orderKey), $orderDir);
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isSortViews()
+ {
+ return $this->sortViews;
+ }
+
+ /**
+ * @param boolean $sortViews
+ * @return $this
+ */
+ public function setSortViews($sortViews)
+ {
+ $this->sortViews = $sortViews;
+
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getSortKey()
+ {
+ return $this->sortKey;
+ }
+
+ /**
+ * @param int $sortKey
+ * @return $this
+ */
+ public function setSortKey($sortKey)
+ {
+ $this->sortKey = $sortKey;
+
+ return $this;
+ }
+
+ /**
+ * Seleccionar un color para la cuenta
+ *
+ * @param int $id El id del elemento a asignar
+ * @return mixed
+ */
+ private function pickAccountColor($id)
+ {
+ $accountColor = Session::getAccountColor();
+
+ if (!is_array($accountColor)
+ || !isset($accountColor, $accountColor[$id])
+ ) {
+ // Se asigna el color de forma aleatoria a cada id
+ $color = array_rand(self::$colors);
+
+ $accountColor[$id] = '#' . self::$colors[$color];
+ Session::setAccountColor($accountColor);
+ }
+
+ return $accountColor[$id];
+ }
+
+ /**
+ * @return array
+ */
+ public function getTagsId()
+ {
+ return $this->tagsId;
+ }
+
+ /**
+ * @param array $tagsId
+ * @return $this
+ */
+ public function setTagsId($tagsId)
+ {
+ if (is_array($tagsId)) {
+ $this->tagsId = $tagsId;
+ }
+
+ return $this;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Account/AccountTags.class.php b/inc/SP/Account/AccountTags.class.php
new file mode 100644
index 00000000..703fd7f0
--- /dev/null
+++ b/inc/SP/Account/AccountTags.class.php
@@ -0,0 +1,133 @@
+.
+ */
+
+namespace SP\Account;
+
+use SP\Core\Exceptions\SPException;
+use SP\DataModel\AccountData;
+use SP\DataModel\AccountExtData;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class AccountTags
+ *
+ * @package SP\Account
+ */
+class AccountTags
+{
+ /**
+ * Devolver las etiquetas de una cuenta
+ *
+ * @param AccountData $accountData
+ * @return array
+ */
+ public static function getTags(AccountData $accountData)
+ {
+ $query = /** @lang SQL */
+ 'SELECT tag_id, tag_name
+ FROM accTags
+ JOIN tags ON tag_id = acctag_tagId
+ WHERE acctag_accountId = ?
+ ORDER BY tag_name';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->setUseKeyPair(true);
+ $Data->addParam($accountData->getAccountId());
+
+ return DB::getResultsArray($Data);
+ }
+
+ /**
+ * Actualizar las etiquetas de una cuenta
+ *
+ * @param AccountExtData $accountData
+ * @param bool $isUpdate
+ * @return bool
+ * @throws SPException
+ */
+ public function addTags(AccountExtData $accountData, $isUpdate = false)
+ {
+ if ($isUpdate === true) {
+ $this->deleteTags($accountData);
+ }
+
+ $numTags = count($accountData->getTags());
+
+ if ($numTags === 0) {
+ return true;
+ }
+
+ $query = /** @lang SQL */
+ 'INSERT INTO accTags (acctag_accountId, acctag_tagId) VALUES ' . implode(',', array_fill(0, $numTags, '(?,?)'));
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->setOnErrorMessage(__('Error al añadir las etiquetas de la cuenta', false));
+
+ foreach ($accountData->getTags() as $tag) {
+ $Data->addParam($accountData->getAccountId());
+ $Data->addParam($tag);
+ }
+
+ return DB::getQuery($Data);
+ }
+
+ /**
+ * Eliminar las etiquetas de una cuenta
+ *
+ * @param AccountExtData $accountData
+ * @return bool
+ * @throws \SP\Core\Exceptions\QueryException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ */
+ public function deleteTags(AccountExtData $accountData)
+ {
+ $numTags = count($accountData->getTags());
+
+ $Data = new QueryData();
+
+ if ($numTags > 0) {
+ $params = implode(',', array_fill(0, $numTags, '?'));
+
+ $query = /** @lang SQL */
+ 'DELETE FROM accTags WHERE acctag_accountId = ? AND acctag_tagId NOT IN (' . $params . ')';
+
+ $Data->setParams(array_merge((array)$accountData->getAccountId(), $accountData->getTags()));
+ } else {
+ $query = /** @lang SQL */
+ 'DELETE FROM accTags WHERE acctag_accountId = ?';
+
+ $Data->addParam($accountData->getAccountId());
+ }
+
+ $Data->setQuery($query);
+ $Data->setOnErrorMessage(__('Error al eliminar las etiquetas de la cuenta', false));
+
+ return DB::getQuery($Data);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Account/AccountUtil.class.php b/inc/SP/Account/AccountUtil.class.php
new file mode 100644
index 00000000..1905d25a
--- /dev/null
+++ b/inc/SP/Account/AccountUtil.class.php
@@ -0,0 +1,299 @@
+.
+ */
+
+namespace SP\Account;
+
+use SP\Config\Config;
+use SP\Core\Exceptions\SPException;
+use SP\Core\Session;
+use SP\DataModel\ItemSearchData;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class AccountUtil con utilidades para la gestión de cuentas
+ *
+ * @package SP
+ */
+class AccountUtil
+{
+ /**
+ * Obtener los datos de usuario y modificador de una cuenta.
+ *
+ * @param int $id con el Id de la cuenta
+ * @return false|object con el id de usuario y modificador.
+ */
+ public static function getAccountRequestData($id)
+ {
+ $query = /** @lang SQL */
+ 'SELECT account_userId,
+ account_userEditId,
+ account_name,
+ customer_name
+ FROM accounts
+ LEFT JOIN customers ON account_customerId = customer_id
+ WHERE account_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($id);
+
+ $queryRes = DB::getResults($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 = /** @lang SQL */
+ 'SELECT user_name
+ FROM accUsers
+ JOIN usrData ON accuser_userId = user_id
+ WHERE accuser_accountId = ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($accountId);
+
+ $queryRes = DB::getResultsArray($Data);
+
+ if ($queryRes === false) {
+ return false;
+ }
+
+ foreach ($queryRes as $users) {
+ $usersName[] = $users->user_name;
+ }
+
+ sort($usersName, SORT_STRING);
+
+ return $usersName;
+ }
+
+ /**
+ * Obtener los datos de todas las cuentas
+ *
+ * @return array
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public static function getAccountsData()
+ {
+ $query = /** @lang SQL */
+ 'SELECT account_id,
+ account_name,
+ account_categoryId,
+ account_customerId,
+ account_login,
+ account_url,
+ account_pass,
+ account_IV,
+ account_notes
+ FROM accounts';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+
+ try {
+ return DB::getResultsArray($Data);
+ } catch (SPException $e) {
+ throw new SPException(SPException::SP_CRITICAL, __('No se pudieron obtener los datos de las cuentas', false));
+ }
+ }
+
+ /**
+ * Devolver el nombre de la cuenta a partir del Id
+ *
+ * @param int $accountId El Id de la cuenta
+ * @return string|bool
+ */
+ public static function getAccountNameById($accountId)
+ {
+ $query = /** @lang SQL */
+ 'SELECT account_name FROM accounts WHERE account_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($accountId);
+
+ $queryRes = DB::getResults($Data);
+
+ return is_object($queryRes) ? $queryRes->account_name : false;
+ }
+
+ /**
+ * Devolver el nombre de la cuenta a partir del Id
+ *
+ * @param array $ids Id de la cuenta
+ * @return array
+ * @internal param int $accountId El Id de la cuenta
+ */
+ public static function getAccountNameByIdBatch(array $ids)
+ {
+ $query = /** @lang SQL */
+ 'SELECT account_name FROM accounts WHERE account_id IN (' . implode(',', array_fill(0, count($ids), '?')) . ')';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->setParams($ids);
+
+ return DB::getResultsArray($Data);
+ }
+
+ /**
+ * Obtener los datos de todas las cuentas y el cliente mediante una búsqueda
+ *
+ * @param ItemSearchData $SearchData
+ * @return array|bool
+ */
+ public static function getAccountsMgmtSearch(ItemSearchData $SearchData)
+ {
+ $Data = new QueryData();
+ $Data->setSelect('account_id, account_name, customer_name');
+ $Data->setFrom('accounts LEFT JOIN customers ON account_customerId = customer_id');
+ $Data->setOrder('account_name');
+
+ if ($SearchData->getSeachString() !== '') {
+ $Data->setWhere('account_name LIKE ? OR customer_name LIKE ?');
+
+ $search = '%' . $SearchData->getSeachString() . '%';
+ $Data->addParam($search);
+ $Data->addParam($search);
+ }
+
+ $Data->setLimit('?,?');
+ $Data->addParam($SearchData->getLimitStart());
+ $Data->addParam($SearchData->getLimitCount());
+
+ DB::setFullRowCount();
+
+ $queryRes = DB::getResultsArray($Data);
+
+ $queryRes['count'] = $Data->getQueryNumRows();
+
+ return $queryRes;
+ }
+
+ /**
+ * Devolver las cuentas enlazadas
+ *
+ * @param $accountId
+ * @return array
+ */
+ public static function getLinkedAccounts($accountId)
+ {
+ if ($accountId === 0) {
+ return [];
+ }
+
+ $Data = new QueryData();
+
+ $queryWhere = self::getAccountFilterUser($Data);
+
+ $queryWhere[] = 'account_parentId = ?';
+ $Data->addParam($accountId);
+
+ $query = /** @lang SQL */
+ 'SELECT account_id, account_name, customer_name
+ FROM accounts
+ LEFT JOIN customers ON customer_id = account_customerId
+ WHERE ' . implode(' AND ', $queryWhere) . ' ORDER BY customer_name';
+
+ $Data->setQuery($query);
+
+ return DB::getResultsArray($Data);
+ }
+
+ /**
+ * Devuelve el filtro para la consulta SQL de cuentas que un usuario puede acceder
+ *
+ * @param QueryData $Data
+ * @return array
+ */
+ public static function getAccountFilterUser(QueryData $Data)
+ {
+ if (!Session::getUserData()->isUserIsAdminApp()
+ && !Session::getUserData()->isUserIsAdminAcc()
+ && !(Session::getUserProfile()->isAccGlobalSearch() && Config::getConfig()->isGlobalSearch())
+ ) {
+ $filterUser[] = 'account_userId = ?';
+ $Data->addParam(Session::getUserData()->getUserId());
+ $filterUser[] = 'account_userGroupId = ?';
+ $Data->addParam(Session::getUserData()->getUserGroupId());
+ $filterUser[] = 'account_id IN (SELECT accuser_accountId AS accountId FROM accUsers WHERE accuser_accountId = account_id AND accuser_userId = ? UNION ALL SELECT accgroup_accountId AS accountId FROM accGroups WHERE accgroup_accountId = account_id AND accgroup_groupId = ?)';
+ $Data->addParam(Session::getUserData()->getUserId());
+ $Data->addParam(Session::getUserData()->getUserGroupId());
+ $filterUser[] = 'account_userGroupId IN (SELECT usertogroup_groupId FROM usrToGroups WHERE usertogroup_groupId = account_userGroupId AND usertogroup_userId = ?)';
+ $Data->addParam(Session::getUserData()->getUserId());
+
+ $queryWhere[] = '(' . implode(' OR ', $filterUser) . ')';
+ }
+
+ $queryWhere[] = '(account_isPrivate = 0 OR (account_isPrivate = 1 AND account_userId = ?))';
+ $Data->addParam(Session::getUserData()->getUserId());
+ $queryWhere[] = '(account_isPrivateGroup = 0 OR (account_isPrivateGroup = 1 AND account_userGroupId = ?))';
+ $Data->addParam(Session::getUserData()->getUserGroupId());
+
+ return $queryWhere;
+ }
+
+ /**
+ * Obtiene los datos de las cuentas visibles por el usuario
+ *
+ * @param int $accountId Cuenta actual
+ * @return array
+ */
+ public static function getAccountsForUser($accountId = 0)
+ {
+ $Data = new QueryData();
+
+ $queryWhere = self::getAccountFilterUser($Data);
+
+ if (!empty($accountId)) {
+ $queryWhere[] = 'account_id <> ? AND (account_parentId = 0 OR account_parentId IS NULL)';
+ $Data->addParam($accountId);
+ }
+
+ $query = /** @lang SQL */
+ 'SELECT account_id, account_name, customer_name
+ FROM accounts
+ LEFT JOIN customers ON customer_id = account_customerId
+ WHERE ' . implode(' AND ', $queryWhere) . ' ORDER BY customer_name';
+
+ $Data->setQuery($query);
+
+ return DB::getResultsArray($Data);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Account/AccountsSearchItem.class.php b/inc/SP/Account/AccountsSearchItem.class.php
new file mode 100644
index 00000000..48857543
--- /dev/null
+++ b/inc/SP/Account/AccountsSearchItem.class.php
@@ -0,0 +1,437 @@
+.
+ */
+
+namespace SP\Account;
+
+defined('APP_ROOT') || die();
+
+use SP\Config\Config;
+use SP\Core\Session;
+use SP\DataModel\AccountSearchData;
+use SP\Html\Html;
+use SP\Mgmt\Groups\GroupAccountsUtil;
+use SP\Util\Checks;
+
+/**
+ * Class AccountsSearchData para contener los datos de cada cuenta en la búsqueda
+ *
+ * @package SP\Controller
+ */
+class AccountsSearchItem
+{
+ /** @var bool */
+ public static $accountLink = false;
+ /** @var bool */
+ public static $topNavbar = false;
+ /** @var bool */
+ public static $optionalActions = false;
+ /** @var bool */
+ public static $requestEnabled = true;
+ /** @var bool */
+ public static $wikiEnabled = false;
+ /** @var bool */
+ public static $dokuWikiEnabled = false;
+ /** @var bool */
+ public static $isDemoMode = false;
+
+ /**
+ * @var AccountSearchData
+ */
+ protected $AccountSearchData;
+ /** @var string */
+ protected $color;
+ /** @var string */
+ protected $link;
+ /** @var bool */
+ protected $url_islink = false;
+ /** @var string */
+ protected $numFiles;
+ /** @var bool */
+ protected $favorite = false;
+ /** @var bool */
+ protected $showView = false;
+ /** @var bool */
+ protected $showViewPass = false;
+ /** @var bool */
+ protected $showEdit = false;
+ /** @var bool */
+ protected $showCopy = false;
+ /** @var bool */
+ protected $showDelete = false;
+ /** @var int */
+ protected $textMaxLength = 60;
+
+ /**
+ * AccountsSearchItem constructor.
+ *
+ * @param AccountSearchData $AccountSearchData
+ */
+ public function __construct(AccountSearchData $AccountSearchData)
+ {
+ $this->AccountSearchData = $AccountSearchData;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isFavorite()
+ {
+ return $this->favorite;
+ }
+
+ /**
+ * @param boolean $favorite
+ */
+ public function setFavorite($favorite)
+ {
+ $this->favorite = $favorite;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isShowRequest()
+ {
+ return (!$this->isShow()
+ && (AccountsSearchItem::$requestEnabled || AccountsSearchItem::$isDemoMode));
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isShow()
+ {
+ return ($this->showView || $this->showEdit || $this->showViewPass || $this->showCopy || $this->showDelete);
+ }
+
+ /**
+ * @return bool
+ */
+ public function isShowCopyPass()
+ {
+ return ($this->isShowViewPass() && !Checks::accountPassToImageIsEnabled());
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isShowViewPass()
+ {
+ return $this->showViewPass;
+ }
+
+ /**
+ * @param boolean $showViewPass
+ */
+ public function setShowViewPass($showViewPass)
+ {
+ $this->showViewPass = $showViewPass;
+ }
+
+ /**
+ * @return bool
+ */
+ public function isShowOptional()
+ {
+ return (!AccountsSearchItem::$optionalActions
+ && ($this->showEdit || $this->showViewPass || $this->showCopy || $this->showDelete));
+ }
+
+ /**
+ * @param int $textMaxLength
+ */
+ public function setTextMaxLength($textMaxLength)
+ {
+ $this->textMaxLength = $textMaxLength;
+ }
+
+ /**
+ * @return string
+ */
+ public function getShortUrl()
+ {
+ return Html::truncate($this->AccountSearchData->getAccountUrl(), $this->textMaxLength);
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isUrlIslink()
+ {
+ return preg_match('#^https?://#i', $this->AccountSearchData->getAccountUrl());
+ }
+
+ /**
+ * @return string
+ */
+ public function getShortLogin()
+ {
+ return Html::truncate($this->AccountSearchData->getAccountLogin(), $this->textMaxLength);
+ }
+
+ /**
+ * @return string
+ */
+ public function getShortCustomerName()
+ {
+ return Html::truncate($this->AccountSearchData->getCustomerName(), $this->textMaxLength / 3);
+ }
+
+ /**
+ * @return string
+ */
+ public function getCustomerLink()
+ {
+ return self::$wikiEnabled ? Config::getConfig()->getWikiSearchurl() . $this->AccountSearchData->getCustomerName() : '';
+ }
+
+ /**
+ * @return string
+ */
+ public function getColor()
+ {
+ return $this->color;
+ }
+
+ /**
+ * @param string $color
+ */
+ public function setColor($color)
+ {
+ $this->color = $color;
+ }
+
+ /**
+ * @return string
+ */
+ public function getLink()
+ {
+ return $this->link;
+ }
+
+ /**
+ * @param string $link
+ */
+ public function setLink($link)
+ {
+ $this->link = $link;
+ }
+
+ /**
+ * @return string
+ */
+ public function getAccesses()
+ {
+ $accesses = sprintf('(G) %s*
', $this->AccountSearchData->getUsergroupName());
+
+ foreach ($this->getCacheGroups() as $group) {
+ $accesses .= sprintf('(G) %s
', $group->getUsergroupName());
+ }
+
+ foreach ($this->getCacheUsers() as $user) {
+ $accesses .= sprintf('(U) %s
', $user->getUserLogin());
+ }
+
+ return $accesses;
+ }
+
+ /**
+ * Devuelve los grupos de la cuenta desde la cache
+ *
+ * @param bool $keys
+ * @return array
+ */
+ public function getCacheGroups($keys = false)
+ {
+ $cache = $this->getCache();
+
+ return $keys === true ? array_keys($cache['groups']) : $cache['groups'];
+ }
+
+ /**
+ * Devolver los accesos desde la caché
+ *
+ * @return array
+ */
+ protected function getCache()
+ {
+ $accountId = $this->AccountSearchData->getAccountId();
+ $cacheName = 'accountsCache';
+
+ if (!isset($_SESSION[$cacheName][$accountId])
+ || $_SESSION[$cacheName][$accountId]['time'] < (int)strtotime($this->AccountSearchData->getAccountDateEdit())
+ ) {
+ $session =& $_SESSION[$cacheName][$accountId];
+
+ $session['users'] = [];
+ $session['groups'] = [];
+
+ foreach (UserAccounts::getUsersInfoForAccount($accountId) as $UserData) {
+ $session['users'][$UserData->getUserId()] = $UserData;
+ }
+
+ foreach (GroupAccountsUtil::getGroupsInfoForAccount($accountId) as $GroupData) {
+ $session['groups'][$GroupData->getUsergroupId()] = $GroupData;
+ }
+
+ $session['time'] = time();
+ }
+
+ return $_SESSION[$cacheName][$accountId];
+ }
+
+ /**
+ * Devuelve los usuarios de la cuenta desde la cache
+ *
+ * @param bool $keys
+ * @return array
+ */
+ public function getCacheUsers($keys = false)
+ {
+ $cache = $this->getCache();
+
+ return $keys === true ? array_keys($cache['users']) : $cache['users'];
+ }
+
+ /**
+ * @return string
+ */
+ public function getNumFiles()
+ {
+ return Checks::fileIsEnabled() ? $this->AccountSearchData->getNumFiles() : 0;
+ }
+
+ /**
+ * @param string $numFiles
+ */
+ public function setNumFiles($numFiles)
+ {
+ $this->numFiles = $numFiles;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isShowView()
+ {
+ return $this->showView;
+ }
+
+ /**
+ * @param boolean $showView
+ */
+ public function setShowView($showView)
+ {
+ $this->showView = $showView;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isShowEdit()
+ {
+ return $this->showEdit;
+ }
+
+ /**
+ * @param boolean $showEdit
+ */
+ public function setShowEdit($showEdit)
+ {
+ $this->showEdit = $showEdit;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isShowCopy()
+ {
+ return $this->showCopy;
+ }
+
+ /**
+ * @param boolean $showCopy
+ */
+ public function setShowCopy($showCopy)
+ {
+ $this->showCopy = $showCopy;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isShowDelete()
+ {
+ return $this->showDelete;
+ }
+
+ /**
+ * @param boolean $showDelete
+ */
+ public function setShowDelete($showDelete)
+ {
+ $this->showDelete = $showDelete;
+ }
+
+ /**
+ * @return AccountSearchData
+ */
+ public function getAccountSearchData()
+ {
+ return $this->AccountSearchData;
+ }
+
+ /**
+ * @param AccountSearchData $AccountSearchData
+ */
+ public function setAccountSearchData($AccountSearchData)
+ {
+ $this->AccountSearchData = $AccountSearchData;
+ }
+
+ /**
+ * @return string
+ */
+ public function getShortNotes()
+ {
+ $accountNotes = '';
+
+ if ($this->AccountSearchData->getAccountNotes()) {
+ $accountNotes = (strlen($this->AccountSearchData->getAccountNotes()) > 300) ? substr($this->AccountSearchData->getAccountNotes(), 0, 300) . '...' : $this->AccountSearchData->getAccountNotes();
+ $accountNotes = nl2br(wordwrap(htmlspecialchars($accountNotes), 50, '
', true));
+ }
+
+ return $accountNotes;
+ }
+
+ /**
+ * Develve si la clave ha caducado
+ *
+ * @return bool
+ */
+ public function isPasswordExpired()
+ {
+ return $this->AccountSearchData->getAccountPassDateChange() > 0 && time() > $this->AccountSearchData->getAccountPassDateChange();
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Account/UserAccounts.class.php b/inc/SP/Account/UserAccounts.class.php
new file mode 100644
index 00000000..38a8bade
--- /dev/null
+++ b/inc/SP/Account/UserAccounts.class.php
@@ -0,0 +1,188 @@
+.
+ */
+
+namespace SP\Account;
+
+use SP\DataModel\UserData;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class UserAccounts para la gestión de usuarios en las cuentas
+ *
+ * @package SP
+ */
+class UserAccounts
+{
+ /**
+ * 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
+ * @throws \SP\Core\Exceptions\QueryException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ */
+ 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
+ * @throws \SP\Core\Exceptions\QueryException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ */
+ public static function deleteUsersForAccount($accountId, array $usersId = [])
+ {
+ $Data = new QueryData();
+
+ $numUsers = count($usersId);
+
+ // Excluimos los usuarios actuales
+ if ($numUsers > 0) {
+ $params = implode(',', array_fill(0, $numUsers, '?'));
+
+ $query = /** @lang SQL */
+ 'DELETE FROM accUsers WHERE accuser_accountId = ? AND accuser_userId NOT IN (' . $params . ')';
+
+ $Data->setParams(array_merge((array)$accountId, $usersId));
+ } else {
+ $query = /** @lang SQL */
+ 'DELETE FROM accUsers WHERE accuser_accountId = ?';
+
+ $Data->addParam($accountId);
+ }
+
+ $Data->setQuery($query);
+ $Data->setOnErrorMessage(__('Error al eliminar usuarios asociados a la cuenta', false));
+
+ return DB::getQuery($Data);
+ }
+
+ /**
+ * Crear asociación de usuarios con cuentas.
+ *
+ * @param int $accountId con el Id de la cuenta
+ * @param array $usersId con los usuarios de la cuenta
+ * @return bool
+ * @throws \SP\Core\Exceptions\QueryException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ */
+ public static function addUsersForAccount($accountId, array $usersId = [])
+ {
+ $numUsers = count($usersId);
+
+ if ($numUsers === 0) {
+ return true;
+ }
+
+ // Obtenemos los usuarios actuales
+ $usersExcluded = self::getUsersForAccount($accountId);
+
+ // Excluimos los usuarios actuales
+ if (count($usersExcluded) > 0) {
+ $usersId = array_diff($usersId, $usersExcluded);
+ }
+
+ $params = array_fill(0, count($usersId), '(?,?)');
+
+ if (count($params) === 0) {
+ return true;
+ }
+
+ $query = /** @lang SQL */
+ 'INSERT INTO accUsers (accuser_accountId, accuser_userId) VALUES ' . implode(',', $params);
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->setOnErrorMessage(__('Error al actualizar los usuarios de la cuenta', false));
+
+ foreach ($usersId as $userId) {
+ $Data->addParam($accountId);
+ $Data->addParam($userId);
+ }
+
+ return DB::getQuery($Data);
+ }
+
+ /**
+ * 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 = /** @lang SQL */
+ 'SELECT accuser_userId FROM accUsers WHERE accuser_accountId = ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($accountId);
+
+ $users = [];
+
+ foreach (DB::getResultsArray($Data) as $user) {
+ $users[] = (int)$user->accuser_userId;
+ }
+
+ return $users;
+ }
+
+ /**
+ * Obtiene el listado con el nombre de los usuarios de una cuenta.
+ *
+ * @param int $accountId con el id de la cuenta
+ * @return UserData[]
+ */
+ public static function getUsersInfoForAccount($accountId)
+ {
+ $query = /** @lang SQL */
+ 'SELECT user_id,
+ user_login,
+ user_name
+ FROM accUsers
+ JOIN usrData ON user_Id = accuser_userId
+ WHERE accuser_accountId = ?
+ ORDER BY user_login';
+
+ $Data = new QueryData();
+ $Data->setMapClassName(UserData::class);
+ $Data->setQuery($query);
+ $Data->addParam($accountId);
+
+ return DB::getResultsArray($Data);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Api/ApiBase.class.php b/inc/SP/Api/ApiBase.class.php
new file mode 100644
index 00000000..474e8732
--- /dev/null
+++ b/inc/SP/Api/ApiBase.class.php
@@ -0,0 +1,247 @@
+.
+ */
+
+namespace SP\Api;
+
+defined('APP_ROOT') || die();
+
+use SP\Auth\Auth;
+use SP\Auth\AuthResult;
+use SP\Auth\AuthUtil;
+use SP\Core\Exceptions\InvalidArgumentException;
+use SP\Core\Exceptions\SPException;
+use SP\Core\Session;
+use SP\Core\SessionUtil;
+use SP\DataModel\UserData;
+use SP\Log\Log;
+use SP\Mgmt\Users\User;
+use SP\Mgmt\Users\UserPass;
+use SP\Util\Json;
+
+/**
+ * Class ApiBase
+ *
+ * @package SP\Api
+ */
+abstract class ApiBase implements ApiInterface
+{
+ /**
+ * El ID de la acción
+ *
+ * @var int
+ */
+ protected $actionId = 0;
+ /**
+ * El ID de usuario resuelto
+ *
+ * @var int
+ */
+ protected $userId = 0;
+ /**
+ * Indica si la autentificación es correcta
+ *
+ * @var bool
+ */
+ protected $auth = false;
+ /**
+ * Los parámetros de la acción a ejecutar
+ *
+ * @var mixed
+ */
+ protected $data;
+ /**
+ * @var string
+ */
+ protected $mPass = '';
+ /**
+ * @var UserData
+ */
+ protected $UserData;
+ /**
+ * @var Log
+ */
+ protected $Log;
+
+ /**
+ * @param $data
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function __construct($data)
+ {
+ $this->actionId = $this->getActionId($data->method);
+
+ if (!AuthUtil::checkAuthToken($this->actionId, $data->params->authToken)) {
+ throw new SPException(SPException::SP_CRITICAL, __('Acceso no permitido', false));
+ }
+
+ $this->data = $data;
+
+ $this->userId = ApiTokensUtil::getUserIdForToken($data->params->authToken);
+
+ $this->loadUserData();
+
+ if ($this->getParam('userPass') !== null) {
+ $this->doAuth();
+ }
+
+ Session::setSessionType(Session::SESSION_API);
+
+ $this->Log = new Log();
+ }
+
+ /**
+ * Devolver el código de acción a realizar a partir del nombre
+ *
+ * @param $action string El nombre de la acción
+ * @return int
+ */
+ protected function getActionId($action)
+ {
+ $actions = $this->getActions();
+
+ return isset($actions[$action]) ? $actions[$action]['id'] : 0;
+ }
+
+ /**
+ * Cargar los datos del usuario
+ *
+ * @return UserData
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ protected function loadUserData()
+ {
+ $UserData = new UserData();
+ $UserData->setUserId($this->userId);
+ $UserData->setUserPass($this->getParam('userPass'));
+
+ $this->UserData = User::getItem($UserData)->getById($this->userId);
+
+ SessionUtil::loadUserSession($this->UserData);
+ }
+
+ /**
+ * Devolver el valor de un parámetro
+ *
+ * @param string $name Nombre del parámetro
+ * @param bool $required Si es requerido
+ * @param mixed $default Valor por defecto
+ * @return int|string
+ * @throws SPException
+ */
+ protected function getParam($name, $required = false, $default = null)
+ {
+ if ($required === true && !isset($this->data->params->$name)) {
+ throw new InvalidArgumentException(SPException::SP_WARNING, __('Parámetros incorrectos', false), $this->getHelp($this->data->method));
+ }
+
+ if (isset($this->data->params->$name)) {
+ return $this->data->params->$name;
+ }
+
+ return $default;
+ }
+
+ /**
+ * Realizar la autentificación del usuario
+ *
+ * @throws SPException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ */
+ protected function doAuth()
+ {
+ $Auth = new Auth($this->UserData);
+ $resAuth = $Auth->doAuth();
+
+ if ($resAuth !== false) {
+ /** @var AuthResult $AuthResult */
+ foreach ($resAuth as $AuthResult) {
+ $data = $AuthResult->getData();
+
+ if ($data->getAuthenticated() && $data->getStatusCode() === 0) {
+ break;
+ }
+ }
+ } else {
+ throw new SPException(SPException::SP_CRITICAL, __('Acceso no permitido', false));
+ }
+
+ $UserPass = UserPass::getItem($this->UserData);
+
+ if (!$this->UserData->isUserIsDisabled()
+ && $UserPass->checkUserUpdateMPass()
+ && $UserPass->loadUserMPass()
+ ) {
+ $this->auth = true;
+ $this->mPass = $UserPass->getClearUserMPass();
+ } else {
+ throw new SPException(SPException::SP_CRITICAL, __('Acceso no permitido', false));
+ }
+ }
+
+ /**
+ * Comprobar el acceso a la acción
+ *
+ * @param $action
+ * @throws SPException
+ */
+ protected function checkActionAccess($action)
+ {
+ if ($this->actionId !== $action) {
+ throw new SPException(SPException::SP_CRITICAL, __('Acceso no permitido', false));
+ }
+ }
+
+ /**
+ * Devuelve una respuesta en formato JSON con el estado y el mensaje.
+ *
+ * {"jsonrpc": "2.0", "result": 19, "id": 3}
+ *
+ * @param string $data Los datos a devolver
+ * @return string La cadena en formato JSON
+ * @throws SPException
+ */
+ protected function wrapJSON(&$data)
+ {
+ $json = [
+ 'jsonrpc' => '2.0',
+ 'result' => $data,
+ 'id' => $this->data->id
+ ];
+
+ return Json::getJson($json);
+ }
+
+ /**
+ * Comprobar si se ha realizado la autentificación
+ *
+ * @throws SPException
+ */
+ protected function checkAuth()
+ {
+ if ($this->auth === false) {
+ throw new SPException(SPException::SP_CRITICAL, __('Acceso no permitido', false));
+ }
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Api/ApiInterface.class.php b/inc/SP/Api/ApiInterface.class.php
new file mode 100644
index 00000000..75b4c5f4
--- /dev/null
+++ b/inc/SP/Api/ApiInterface.class.php
@@ -0,0 +1,48 @@
+.
+ */
+
+namespace SP\Api;
+
+/**
+ * Interface ApiInterface
+ *
+ * @package SP\Api
+ */
+interface ApiInterface
+{
+ /**
+ * Devuelve las acciones que implementa la API
+ *
+ * @return array
+ */
+ public function getActions();
+
+ /**
+ * Devuelve la ayuda para una acción
+ *
+ * @param string $action
+ * @return array
+ */
+ public function getHelp($action);
+}
\ No newline at end of file
diff --git a/inc/SP/Api/ApiRequest.class.php b/inc/SP/Api/ApiRequest.class.php
new file mode 100644
index 00000000..eccc763f
--- /dev/null
+++ b/inc/SP/Api/ApiRequest.class.php
@@ -0,0 +1,205 @@
+.
+ */
+
+namespace SP\Api;
+
+use ReflectionClass;
+use SP\Core\Exceptions\InvalidArgumentException;
+use SP\Core\Exceptions\SPException;
+use SP\Http\Request;
+use SP\Util\Json;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class ApiRequest encargada de atender la peticiones a la API de sysPass
+ *
+ * Procesa peticiones en formato JSON-RPC 2.0
+ *
+ * {"jsonrpc": "2.0", "method": "subtract", "params": {"minuend": 42, "subtrahend": 23}, "id": 3}
+ *
+ * @see http://www.jsonrpc.org/specification
+ * @package SP
+ */
+class ApiRequest
+{
+ /**
+ * Constantes de acciones
+ */
+ const ACTION = 'action';
+ const AUTH_TOKEN = 'authToken';
+
+ /**
+ * @var \stdClass
+ */
+ private $data;
+ /** @var string */
+ private $verb;
+ /** @var ReflectionClass */
+ private $ApiReflection;
+
+ /**
+ * Devolver un error formateado en JSON-RPC 2.0
+ *
+ * @param \Exception|SPException $e
+ * @return string
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function formatJsonError($e)
+ {
+ $class = get_class($e);
+ $code = $e->getCode();
+
+ $error = [
+ 'jsonrpc' => '2.0',
+ 'error' => [
+ 'code' => $code,
+ 'message' => __($e->getMessage()),
+ 'data' => $class === SPException::class || $class === InvalidArgumentException::class ? $e->getHint() : ''
+ ],
+ 'id' => ($code === -32700 || $code === -32600) ? null : $this->getId()
+ ];
+
+ return Json::getJson($error);
+ }
+
+ /**
+ * Devielve el Id de la petición
+ *
+ * @return int
+ */
+ public function getId()
+ {
+ return (int)$this->data->id;
+ }
+
+ /**
+ * Obtiene una nueva instancia de la Api
+ *
+ * @return SyspassApi
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function runApi()
+ {
+ $this->init();
+
+ return $this->ApiReflection->getMethod($this->data->method)->invoke(new SyspassApi($this->data));
+ }
+
+ /**
+ * Inicializar la API
+ *
+ * @throws SPException
+ */
+ protected function init()
+ {
+ try {
+ $this->analyzeRequestMethod();
+ $this->getRequestData();
+ $this->checkBasicData();
+ $this->checkAction();
+ } catch (SPException $e) {
+ throw $e;
+ }
+ }
+
+ /**
+ * Analizar y establecer el método HTTP a utilizar
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ private function analyzeRequestMethod()
+ {
+ $requestMethod = $_SERVER['REQUEST_METHOD'];
+
+ // Sólo se permiten estos métodos
+ switch ($requestMethod) {
+ case 'GET':
+ case 'POST':
+ case 'PUT':
+ case 'DELETE':
+ $this->verb = $requestMethod;
+ break;
+ default:
+ throw new SPException(SPException::SP_WARNING, __('Método inválido', false), '', -32600);
+ }
+ }
+
+ /**
+ * Obtener los datos de la petición
+ *
+ * Comprueba que el JSON esté bien formado
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ private function getRequestData()
+ {
+ $request = file_get_contents('php://input');
+ $data = json_decode(Request::parse($request, '', true));
+
+ if (!is_object($data) || json_last_error() !== JSON_ERROR_NONE) {
+ throw new SPException(SPException::SP_WARNING, __('Datos inválidos', false), '', -32700);
+ } elseif (!isset($data->jsonrpc, $data->method, $data->params, $data->id)) {
+ throw new SPException(SPException::SP_WARNING, __('Formato incorrecto', false), '', -32600);
+ }
+
+ $this->data = $data;
+ }
+
+ /**
+ * Comprobar los datos básicos de la petición
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ private function checkBasicData()
+ {
+ if (!isset($this->data->params->authToken)) {
+ throw new SPException(SPException::SP_WARNING, __('Parámetros incorrectos', false), '', -32602);
+ }
+ }
+
+ /**
+ * Comprobar si la API tiene implementada dicha acción
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ private function checkAction()
+ {
+ $this->ApiReflection = new ReflectionClass(SyspassApi::class);
+
+ if (!$this->ApiReflection->hasMethod($this->data->method)) {
+ throw new SPException(SPException::SP_WARNING, __('Acción Inválida', false), '', -32601);
+ }
+ }
+
+ /**
+ * Obtener el id de la acción
+ *
+ * @return int
+ */
+ public function getAction()
+ {
+ return $this->data->method;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Api/ApiTokens.class.php b/inc/SP/Api/ApiTokens.class.php
new file mode 100644
index 00000000..bf06a0e1
--- /dev/null
+++ b/inc/SP/Api/ApiTokens.class.php
@@ -0,0 +1,314 @@
+.
+ */
+
+namespace SP\Api;
+
+defined('APP_ROOT') || die();
+
+use SP\Core\Exceptions\SPException;
+use SP\Core\Session;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+
+/**
+ * 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;
+
+ /**
+ * @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 = /** @lang SQL */
+ 'INSERT INTO authTokens
+ SET authtoken_userId = :userid,
+ authtoken_actionId = :actionid,
+ authtoken_createdBy = :createdby,
+ authtoken_token = :token,
+ authtoken_startDate = UNIX_TIMESTAMP()';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->userId, 'userid');
+ $Data->addParam($this->actionId, 'actionid');
+ $Data->addParam(Session::getUserData()->getUserId(), 'createdby');
+ $Data->addParam($this->getUserToken() ? $this->token : $this->generateToken(), 'token');
+ $Data->setOnErrorMessage(__('Error interno', false));
+
+ DB::getQuery($Data);
+ }
+
+ /**
+ * Comprobar si el token ya existe
+ *
+ * @return bool
+ * @throws SPException
+ */
+ private function checkTokenExist()
+ {
+ $query = /** @lang SQL */
+ 'SELECT authtoken_id FROM authTokens
+ WHERE authtoken_userId = :userid
+ AND authtoken_actionId = :actionid
+ AND authtoken_id <> :id LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->tokenId, 'id');
+ $Data->addParam($this->userId, 'userid');
+ $Data->addParam($this->actionId, 'actionid');
+
+ try {
+ DB::getResults($Data);
+ } catch (SPException $e) {
+ throw new SPException(SPException::SP_CRITICAL, __('Error interno', false));
+ }
+
+ if ($Data->getQueryNumRows() === 1) {
+ throw new SPException(SPException::SP_WARNING, __('La autorización ya existe', false));
+ }
+ }
+
+ /**
+ * Regenerar el hash de los tokens de un usuario
+ *
+ * @throws SPException
+ */
+ private function refreshToken()
+ {
+ $query = /** @lang SQL */
+ 'UPDATE authTokens SET
+ authtoken_token = :token,
+ authtoken_startDate = UNIX_TIMESTAMP()
+ WHERE authtoken_userId = :userid';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->userId, 'userid');
+ $Data->addParam($this->generateToken(), 'token');
+ $Data->setOnErrorMessage(__('Error interno', false));
+
+ DB::getQuery($Data);
+ }
+
+ /**
+ * Generar un token de acceso
+ *
+ * @return string
+ */
+ private function generateToken()
+ {
+ return sha1(uniqid('sysPass-API', true) . time());
+ }
+
+ /**
+ * Obtener el token de la API de un usuario
+ *
+ * @return bool
+ * @throws SPException
+ */
+ private function getUserToken()
+ {
+ $query = /** @lang SQL */
+ 'SELECT authtoken_token FROM authTokens WHERE authtoken_userId = :userid LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->userId, 'userid');
+
+ try {
+ $queryRes = DB::getResults($Data);
+ } catch (SPException $e) {
+ throw new SPException(SPException::SP_CRITICAL, __('Error interno', false));
+ }
+
+ if ($Data->getQueryNumRows() === 0) {
+ return false;
+ }
+
+ $this->token = $queryRes->authtoken_token;
+
+ return true;
+ }
+
+ /**
+ * Actualizar un token
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function updateToken()
+ {
+ $this->checkTokenExist();
+
+ if ($this->refreshToken) {
+ $this->refreshToken();
+ }
+
+ $query = /** @lang SQL */
+ '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 = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->tokenId, 'id');
+ $Data->addParam($this->userId, 'userid');
+ $Data->addParam($this->actionId, 'actionid');
+ $Data->addParam(Session::getUserData()->getUserId(), 'createdby');
+ $Data->addParam($this->getUserToken() ? $this->token : $this->generateToken(), 'token');
+ $Data->setOnErrorMessage(__('Error interno', false));
+
+ DB::getQuery($Data);
+ }
+
+ /**
+ * Eliminar token
+ *
+ * @param $id
+ */
+ public function deleteToken($id)
+ {
+ $query = /** @lang SQL */
+ 'DELETE FROM authTokens WHERE authtoken_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($id);
+ $Data->setOnErrorMessage(__('Error interno', false));
+
+ DB::getQuery($Data);
+ }
+
+
+ /**
+ * Eliminar token
+ *
+ * @param array $ids
+ * @throws \SP\Core\Exceptions\ConstraintException
+ */
+ public function deleteTokenBatch(array $ids)
+ {
+ $query = /** @lang SQL */
+ 'DELETE FROM authTokens WHERE authtoken_id IN (' . implode(',', array_fill(0, count($ids), '?')) . ')';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->setParams($ids);
+ $Data->setOnErrorMessage(__('Error interno', false));
+
+ DB::getQuery($Data);
+ }
+
+ /**
+ * @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/SP/Api/ApiTokensUtil.class.php b/inc/SP/Api/ApiTokensUtil.class.php
new file mode 100644
index 00000000..724735fb
--- /dev/null
+++ b/inc/SP/Api/ApiTokensUtil.class.php
@@ -0,0 +1,177 @@
+.
+ */
+
+namespace SP\Api;
+
+use SP\Core\Acl;
+use SP\Core\ActionsInterface;
+use SP\Core\Exceptions\SPException;
+use SP\DataModel\ItemSearchData;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class ApiTokensUtil con utilidades para la gestión de tokens API
+ *
+ * @package SP\Api
+ */
+class ApiTokensUtil
+{
+ /**
+ * 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 = new QueryData();
+
+ if (null !== $tokenId) {
+ $query .= 'WHERE authtoken_id = ? LIMIT 1';
+ $Data->addParam($tokenId);
+ } else {
+ $query .= 'ORDER BY user_login';
+ }
+
+ $Data->setQuery($query);
+
+ if (!$returnRawData) {
+ $queryRes = DB::getResultsArray($Data);
+
+ foreach ($queryRes as &$token) {
+ $token->authtoken_actionId = Acl::getActionName($token->authtoken_actionId);
+ }
+ } else {
+ $queryRes = DB::getResults($Data);
+ }
+
+ return $queryRes;
+ }
+
+ /**
+ * Obtener los tokens de la API de una búsqueda
+ * @param ItemSearchData $SearchData
+ * @return array|object con la lista de tokens
+ */
+ public static function getTokensMgmtSearch(ItemSearchData $SearchData)
+ {
+ $query = 'SELECT authtoken_id,' .
+ 'authtoken_userId,' .
+ 'authtoken_actionId, ' .
+ 'authtoken_token, ' .
+ 'user_login ' .
+ 'FROM authTokens ' .
+ 'LEFT JOIN usrData ON user_id = authtoken_userId ';
+
+ $Data = new QueryData();
+
+ if ($SearchData->getSeachString() !== '') {
+ $search = '%' . $SearchData->getSeachString() . '%';
+ $query .= ' WHERE user_login LIKE ?';
+
+ $Data->addParam($search);
+ }
+
+ $query .= ' ORDER BY user_login';
+ $query .= ' LIMIT ?, ?';
+
+ $Data->addParam($SearchData->getLimitStart());
+ $Data->addParam($SearchData->getLimitCount());
+
+ $Data->setQuery($query);
+
+ DB::setFullRowCount();
+
+ $queryRes = DB::getResultsArray($Data);
+
+ foreach ($queryRes as &$token) {
+ $token->authtoken_actionId = Acl::getActionName($token->authtoken_actionId);
+ }
+
+ $queryRes['count'] = $Data->getQueryNumRows();
+
+ return $queryRes;
+ }
+
+ /**
+ * Devuelver un array de acciones posibles para los tokens
+ *
+ * @return array
+ */
+ public static function getTokenActions()
+ {
+ $actions = [
+ 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_ACC_NEW => Acl::getActionName(ActionsInterface::ACTION_ACC_NEW),
+ ActionsInterface::ACTION_CFG_BACKUP => Acl::getActionName(ActionsInterface::ACTION_CFG_BACKUP),
+ ActionsInterface::ACTION_MGM_CATEGORIES => Acl::getActionName(ActionsInterface::ACTION_MGM_CATEGORIES),
+ ActionsInterface::ACTION_MGM_CUSTOMERS => Acl::getActionName(ActionsInterface::ACTION_MGM_CUSTOMERS)
+ ];
+
+ return $actions;
+ }
+
+ /**
+ * Obtener el usuario a partir del token
+ *
+ * @param $token string El token de autorización
+ * @return bool|mixed
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public static function getUserIdForToken($token)
+ {
+ $query = 'SELECT authtoken_userId FROM authTokens WHERE authtoken_token = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($token);
+
+ try {
+ $queryRes = DB::getResults($Data);
+ } catch (SPException $e) {
+ throw new SPException(SPException::SP_CRITICAL, __('Error interno', false));
+ }
+
+ if ($Data->getQueryNumRows() === 0) {
+ return false;
+ }
+
+ return $queryRes->authtoken_userId;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Api/SyspassApi.class.php b/inc/SP/Api/SyspassApi.class.php
new file mode 100644
index 00000000..8361bc2a
--- /dev/null
+++ b/inc/SP/Api/SyspassApi.class.php
@@ -0,0 +1,541 @@
+.
+ */
+
+namespace SP\Api;
+
+use SP\Account\Account;
+use SP\Account\AccountAcl;
+use SP\Account\AccountSearch;
+use SP\Account\AccountUtil;
+use SP\Core\Acl;
+use SP\Core\ActionsInterface;
+use SP\Core\Backup;
+use SP\Core\Crypt;
+use SP\Core\Exceptions\SPException;
+use SP\DataModel\AccountExtData;
+use SP\DataModel\CategoryData;
+use SP\DataModel\CustomerData;
+use SP\DataModel\ItemSearchData;
+use SP\Mgmt\Categories\Category;
+use SP\Mgmt\Categories\CategorySearch;
+use SP\Mgmt\Customers\Customer;
+use SP\Mgmt\Customers\CustomerSearch;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class Api para la gestión de peticiones a la API de sysPass
+ *
+ * @package SP
+ */
+class SyspassApi extends ApiBase
+{
+ /**
+ * Devolver la clave de una cuenta
+ *
+ * @return string La cadena en formato JSON
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function getAccountPassword()
+ {
+ $this->checkActionAccess(ActionsInterface::ACTION_ACC_VIEW_PASS);
+
+ $accountId = $this->getParam('id', true, 0);
+
+ $AccountData = new AccountExtData($accountId);
+ $Account = new Account($AccountData);
+ $Account->getData();
+
+ $AccountAcl = new AccountAcl($Account, ActionsInterface::ACTION_ACC_VIEW_PASS);
+ $Acl = $AccountAcl->getAcl();
+
+ if (!$Acl->isShowViewPass()) {
+ throw new SPException(SPException::SP_WARNING, __('Acceso no permitido', false));
+ }
+
+ $Account->getAccountPassData();
+ $Account->incrementDecryptCounter();
+
+ $LogMessage = $this->Log->getLogMessage();
+ $LogMessage->setAction(__('Ver Clave', false));
+ $LogMessage->addDetails(__('ID', false), $accountId);
+ $LogMessage->addDetails(__('Cuenta', false), $AccountData->getCustomerName() . ' / ' . $AccountData->getAccountName());
+ $LogMessage->addDetails(__('Origen', false), 'API');
+ $this->Log->writeLog();
+
+ $ret = [
+ 'itemId' => $accountId,
+ 'pass' => Crypt::getDecrypt($AccountData->getAccountPass(), $AccountData->getAccountIV(), $this->mPass)
+ ];
+
+ if ($this->getParam('details', false, 0)) {
+ // Para evitar los caracteres especiales
+ $AccountData->setAccountPass('');
+ $AccountData->setAccountIV('');
+
+ $ret['details'] = $AccountData;
+ }
+
+ return $this->wrapJSON($ret);
+ }
+
+ /**
+ * Devolver los resultados de una búsqueda
+ *
+ * @return string La cadena en formato JSON
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function getAccountSearch()
+ {
+ $this->checkActionAccess(ActionsInterface::ACTION_ACC_SEARCH);
+
+ $Search = new AccountSearch();
+ $Search->setTxtSearch($this->getParam('text'));
+ $Search->setLimitCount($this->getParam('count', false, 100));
+ $Search->setCategoryId($this->getParam('categoryId', false, 0));
+ $Search->setCustomerId($this->getParam('customerId', false, 0));
+
+ $ret = $Search->getAccounts();
+
+ return $this->wrapJSON($ret);
+ }
+
+ /**
+ * Devolver los detalles de una cuenta
+ *
+ * @return string La cadena en formato JSON
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function getAccountData()
+ {
+ $this->checkActionAccess(ActionsInterface::ACTION_ACC_VIEW);
+
+ $accountId = $this->getParam('id', true, 0);
+
+ $Account = new Account(new AccountExtData($accountId));
+ $ret = $Account->getData();
+
+ $AccountAcl = new AccountAcl($Account, ActionsInterface::ACTION_ACC_VIEW);
+ $Acl = $AccountAcl->getAcl();
+
+ if (!$Acl->isShowView()) {
+ throw new SPException(SPException::SP_WARNING, __('Acceso no permitido', false));
+ }
+
+ $Account->incrementViewCounter();
+
+ return $this->wrapJSON($ret);
+ }
+
+ /**
+ * Añadir una nueva cuenta
+ *
+ * @return string La cadena en formato JSON
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function addAccount()
+ {
+ $this->checkAuth();
+ $this->checkActionAccess(ActionsInterface::ACTION_ACC_NEW);
+
+ $AccountData = new AccountExtData();
+ $AccountData->setAccountUserId($this->UserData->getUserId());
+ $AccountData->setAccountUserGroupId($this->UserData->getUserGroupId());
+ $AccountData->setAccountName($this->getParam('name', true));
+ $AccountData->setAccountPass($this->getParam('pass', true));
+ $AccountData->setAccountCustomerId($this->getParam('customerId', true));
+ $AccountData->setAccountCategoryId($this->getParam('categoryId', true));
+ $AccountData->setAccountLogin($this->getParam('login', true));
+ $AccountData->setAccountUrl($this->getParam('url'));
+ $AccountData->setAccountNotes($this->getParam('notes'));
+
+ $Account = new Account($AccountData);
+
+ $Account->createAccount();
+
+ $LogMessage = $this->Log->getLogMessage();
+ $LogMessage->setAction(__('Crear Cuenta', false));
+ $LogMessage->addDescription(__('Cuenta creada', false));
+ $LogMessage->addDetails(__('Nombre', false), $AccountData->getAccountName());
+ $LogMessage->addDetails(__('Origen', false), 'API');
+ $this->Log->writeLog();
+
+ $ret = [
+ 'itemId' => $AccountData->getAccountId(),
+ 'result' => $LogMessage->getDescription(true),
+ 'resultCode' => 0
+ ];
+
+ return $this->wrapJSON($ret);
+ }
+
+ /**
+ * Eliminar una cuenta
+ *
+ * @return string La cadena en formato JSON
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function deleteAccount()
+ {
+ $this->checkActionAccess(ActionsInterface::ACTION_ACC_DELETE);
+
+ $accountId = $this->getParam('id', true);
+
+ $AccountData = AccountUtil::getAccountNameById($accountId);
+
+ if ($AccountData === false) {
+ throw new SPException(SPException::SP_ERROR, __('Cuenta no encontrada', false));
+ }
+
+ $Account = new Account();
+ $Account->deleteAccount($accountId);
+
+ $LogMessage = $this->Log->getLogMessage();
+ $LogMessage->setAction(__('Eliminar Cuenta', false));
+ $LogMessage->addDescription(__('Cuenta eliminada', false));
+ $LogMessage->addDetails(__('Nombre', false), $AccountData->account_name);
+ $LogMessage->addDetails(__('Origen', false), 'API');
+ $this->Log->writeLog();
+
+ $ret = [
+ 'itemId' => $accountId,
+ 'result' => $LogMessage->getDescription(true),
+ 'resultCode' => 0
+ ];
+
+ return $this->wrapJSON($ret);
+ }
+
+ /**
+ * Devuelve el listado de categorías
+ *
+ * @return string La cadena en formato JSON
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function getCategories()
+ {
+ $this->checkActionAccess(ActionsInterface::ACTION_MGM_CATEGORIES);
+
+ $SearchData = new ItemSearchData();
+ $SearchData->setSeachString($this->getParam('name', false, ''));
+ $SearchData->setLimitCount($this->getParam('count', false, 100));
+
+ $ret = CategorySearch::getItem()->getMgmtSearch($SearchData);
+
+ return $this->wrapJSON($ret);
+ }
+
+ /**
+ * Añade una nueva categoría
+ *
+ * @return string La cadena en formato JSON
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function addCategory()
+ {
+ $this->checkActionAccess(ActionsInterface::ACTION_MGM_CATEGORIES);
+
+ $CategoryData = new CategoryData();
+ $CategoryData->setCategoryName($this->getParam('name', true));
+ $CategoryData->setCategoryDescription($this->getParam('description'));
+
+ Category::getItem($CategoryData)->add();
+
+ $LogMessage = $this->Log->getLogMessage();
+ $LogMessage->setAction(__('Crear Categoría', false));
+ $LogMessage->addDescription(__('Categoría creada', false));
+ $LogMessage->addDetails(__('Nombre', false), $CategoryData->getCategoryName());
+ $LogMessage->addDetails(__('Origen', false), 'API');
+ $this->Log->writeLog();
+
+ $ret = [
+ 'itemId' => $CategoryData->getCategoryId(),
+ 'result' => $LogMessage->getDescription(true),
+ 'resultCode' => 0
+ ];
+
+ return $this->wrapJSON($ret);
+ }
+
+ /**
+ * Elimina una categoría
+ *
+ * @return string La cadena en formato JSON
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function deleteCategory()
+ {
+ $this->checkActionAccess(ActionsInterface::ACTION_MGM_CATEGORIES);
+
+ $id = $this->getParam('id', true);
+
+ $CategoryData = Category::getItem()->getById($id);
+
+ if (!is_object($CategoryData)) {
+ throw new SPException(SPException::SP_ERROR, __('Categoría no encontrada', false));
+ }
+
+ Category::getItem()->delete($id);
+
+ $LogMessage = $this->Log->getLogMessage();
+ $LogMessage->setAction(__('Eliminar Categoría', false));
+ $LogMessage->addDescription(__('Categoría eliminada', false));
+ $LogMessage->addDetails(__('Nombre', false), $CategoryData->getCategoryName());
+ $LogMessage->addDetails(__('Origen', false), 'API');
+ $this->Log->writeLog();
+
+ $ret = [
+ 'itemId' => $id,
+ 'result' => $LogMessage->getDescription(true),
+ 'resultCode' => 0
+ ];
+
+ return $this->wrapJSON($ret);
+ }
+
+ /**
+ * Devuelve el listado de clientes
+ *
+ * @return string La cadena en formato JSON
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function getCustomers()
+ {
+ $this->checkActionAccess(ActionsInterface::ACTION_MGM_CUSTOMERS);
+
+ $SearchData = new ItemSearchData();
+ $SearchData->setSeachString($this->getParam('name', false, ''));
+ $SearchData->setLimitCount($this->getParam('count', false, 100));
+
+ $ret = CustomerSearch::getItem()->getMgmtSearch($SearchData);
+
+ return $this->wrapJSON($ret);
+ }
+
+ /**
+ * Añade un nuevo cliente
+ *
+ * @return string La cadena en formato JSON
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function addCustomer()
+ {
+ $this->checkActionAccess(ActionsInterface::ACTION_MGM_CUSTOMERS);
+
+ $CustomerData = new CustomerData();
+ $CustomerData->setCustomerName($this->getParam('name', true));
+ $CustomerData->setCustomerDescription($this->getParam('description'));
+
+ Customer::getItem($CustomerData)->add();
+
+ $LogMessage = $this->Log->getLogMessage();
+ $LogMessage->setAction(__('Crear Cliente', false));
+ $LogMessage->addDescription(__('Cliente creado', false));
+ $LogMessage->addDetails(__('Nombre', false), $CustomerData->getCustomerName());
+ $LogMessage->addDetails(__('Origen', false), 'API');
+ $this->Log->writeLog();
+
+ $ret = [
+ 'itemId' => $CustomerData->getCustomerId(),
+ 'result' => $LogMessage->getDescription(true),
+ 'resultCode' => 0
+ ];
+
+ return $this->wrapJSON($ret);
+ }
+
+ /**
+ * Elimina un cñiente
+ *
+ * @return string La cadena en formato JSON
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function deleteCustomer()
+ {
+ $this->checkActionAccess(ActionsInterface::ACTION_MGM_CUSTOMERS);
+
+ $id = $this->getParam('id', true);
+
+ $CustomerData = Customer::getItem()->getById($id);
+
+ if (!is_object($CustomerData)) {
+ throw new SPException(SPException::SP_ERROR, __('Cliente no encontrado', false));
+ }
+
+ Customer::getItem()->delete($id);
+
+ $LogMessage = $this->Log->getLogMessage();
+ $LogMessage->setAction(__('Eliminar Cliente', false));
+ $LogMessage->addDescription(__('Cliente eliminado', false));
+ $LogMessage->addDetails(__('Nombre', false), $CustomerData->getCustomerName());
+ $LogMessage->addDetails(__('Origen', false), 'API');
+ $this->Log->writeLog();
+
+ $ret = [
+ 'itemId' => $id,
+ 'result' => $LogMessage->getDescription(true),
+ 'resultCode' => 0
+ ];
+
+ return $this->wrapJSON($ret);
+ }
+
+ /**
+ * Realizar un backup de sysPass
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \phpmailer\phpmailerException
+ */
+ public function backup()
+ {
+ $ret = [
+ 'result' => __('Proceso de backup finalizado'),
+ 'resultCode' => 0
+ ];
+
+ if (!Backup::doBackup()) {
+ $ret = [
+ 'result' => __('Error al realizar el backup'),
+ 'hint' => __('Revise el registro de eventos para más detalles'),
+ 'resultCode' => 1
+ ];
+ }
+
+ return $this->wrapJSON($ret);
+ }
+
+ /**
+ * Devuelve la ayuda para una acción
+ *
+ * @param string $action
+ * @return array
+ */
+ public function getHelp($action)
+ {
+ return $this->getActions()[$action]['help'];
+ }
+
+ /**
+ * Devuelve las acciones que implementa la API
+ *
+ * @return array
+ */
+ public function getActions()
+ {
+ return [
+ 'getAccountPassword' => [
+ 'id' => ActionsInterface::ACTION_ACC_VIEW_PASS,
+ 'help' => [
+ 'id' => __('Id de la cuenta'),
+ 'userPass' => __('Clave del usuario asociado al token'),
+ 'details' => __('Devolver detalles en la respuesta')
+ ]
+ ],
+ 'getAccountSearch' => [
+ 'id' => ActionsInterface::ACTION_ACC_SEARCH,
+ 'help' => [
+ 'text' => __('Texto a buscar'),
+ 'count' => __('Número de resultados a mostrar'),
+ 'categoryId' => __('Id de categoría a filtrar'),
+ 'customerId' => __('Id de cliente a filtrar')
+ ]
+ ],
+ 'getAccountData' => [
+ 'id' => ActionsInterface::ACTION_ACC_VIEW,
+ 'help' => [
+ 'id' => __('Id de la cuenta'),
+ 'userPass' => __('Clave del usuario asociado al token')
+ ]
+ ],
+ 'deleteAccount' => [
+ 'id' => ActionsInterface::ACTION_ACC_DELETE,
+ 'help' => [
+ 'id' => __('Id de la cuenta')
+ ]
+ ],
+ 'addAccount' => [
+ 'id' => ActionsInterface::ACTION_ACC_NEW,
+ 'help' => [
+ 'userPass' => __('Clave del usuario asociado al token'),
+ 'name' => __('Nombre de cuenta'),
+ 'categoryId' => __('Id de categoría'),
+ 'customerId' => __('Id de cliente'),
+ 'pass' => __('Clave'),
+ 'login' => __('Usuario de acceso'),
+ 'url' => __('URL o IP de acceso'),
+ 'notes' => __('Notas sobre la cuenta')
+ ]
+ ],
+ 'backup' => [
+ 'id' => ActionsInterface::ACTION_CFG_BACKUP,
+ 'help' => ''
+ ],
+ 'getCategories' => [
+ 'id' => ActionsInterface::ACTION_MGM_CATEGORIES,
+ 'help' => [
+ 'name' => __('Nombre de categoría a buscar'),
+ 'count' => __('Número de resultados a mostrar')
+ ]
+ ],
+ 'addCategory' => [
+ 'id' => ActionsInterface::ACTION_MGM_CATEGORIES,
+ 'help' => [
+ 'name' => __('Nombre de la categoría'),
+ 'description' => __('Descripción de la categoría')
+ ]
+ ],
+ 'deleteCategory' => [
+ 'id' => ActionsInterface::ACTION_MGM_CATEGORIES,
+ 'help' => [
+ 'id' => __('Id de categoría')
+ ]
+ ],
+ 'getCustomers' => [
+ 'id' => ActionsInterface::ACTION_MGM_CUSTOMERS,
+ 'help' => [
+ 'name' => __('Nombre de cliente a buscar'),
+ 'count' => __('Número de resultados a mostrar')
+ ]
+ ],
+ 'addCustomer' => [
+ 'id' => ActionsInterface::ACTION_MGM_CUSTOMERS,
+ 'help' => [
+ 'name' => __('Nombre del cliente'),
+ 'description' => __('Descripción del cliente')
+ ]
+ ],
+ 'deleteCustomer' => [
+ 'id' => ActionsInterface::ACTION_MGM_CUSTOMERS,
+ 'help' => [
+ 'id' => __('Id de cliente')
+ ]
+ ]
+ ];
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Auth/Auth.class.php b/inc/SP/Auth/Auth.class.php
new file mode 100644
index 00000000..a8fc93c8
--- /dev/null
+++ b/inc/SP/Auth/Auth.class.php
@@ -0,0 +1,166 @@
+.
+ */
+
+namespace SP\Auth;
+
+use SP\Auth\Browser\Browser;
+use SP\Auth\Browser\BrowserAuthData;
+use SP\Auth\Database\Database;
+use SP\Auth\Database\DatabaseAuthData;
+use SP\Auth\Ldap\LdapAuthData;
+use SP\Auth\Ldap\LdapMsAds;
+use SP\Auth\Ldap\LdapStd;
+use SP\Config\Config;
+use SP\Core\Exceptions\SPException;
+use SP\DataModel\UserData;
+use SP\Util\Checks;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class Auth
+ *
+ * Esta clase es la encargada de realizar la autentificación de usuarios de sysPass.
+ *
+ * @package SP\Auth
+ */
+class Auth
+{
+ /**
+ * @var array
+ */
+ protected $auths = [];
+ /**
+ * @var UserData
+ */
+ protected $UserData;
+
+ /**
+ * Auth constructor.
+ *
+ * @param UserData $UserData
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function __construct(UserData $UserData)
+ {
+ $this->UserData = $UserData;
+
+ $this->registerAuth('authBrowser');
+
+ if (Checks::ldapIsAvailable() && Checks::ldapIsEnabled()) {
+ $this->registerAuth('authLdap');
+ }
+
+ $this->registerAuth('authDatabase');
+ }
+
+ /**
+ * Registrar un método de autentificación primarios
+ *
+ * @param string $auth Función de autentificación
+ * @throws SPException
+ */
+ protected function registerAuth($auth)
+ {
+ if (array_key_exists($auth, $this->auths)) {
+ throw new SPException(SPException::SP_ERROR, __('Método ya inicializado', false), __FUNCTION__);
+ } elseif (!method_exists($this, $auth)) {
+ throw new SPException(SPException::SP_ERROR, __('Método no disponible', false), __FUNCTION__);
+ }
+
+ $this->auths[$auth] = $auth;
+ }
+
+ /**
+ * Probar los métodos de autentificación
+ *
+ * @return bool|array
+ */
+ public function doAuth()
+ {
+ $auths = [];
+
+ foreach ($this->auths as $pAuth) {
+ $pResult = call_user_func([$this, $pAuth]);
+
+ if ($pResult !== false) {
+ $auths[] = new AuthResult($pAuth, $pResult);
+ }
+ }
+
+ return (count($auths) > 0) ? $auths : false;
+ }
+
+ /**
+ * Autentificación de usuarios con LDAP.
+ *
+ * @return bool|LdapAuthData
+ */
+ public function authLdap()
+ {
+ $Ldap = Config::getConfig()->isLdapAds() ? new LdapMsAds() : new LdapStd();
+
+ $LdapAuthData = $Ldap->getLdapAuthData();
+
+ if (!$Ldap->authenticate($this->UserData)) {
+ return $LdapAuthData->getAuthenticated() === 1 ? $LdapAuthData : false;
+ }
+
+ // Comprobamos si la cuenta está bloqueada o expirada
+ if ($LdapAuthData->getExpire() > 0) {
+ $LdapAuthData->setStatusCode(701);
+ } elseif (!$LdapAuthData->isInGroup()) {
+ $LdapAuthData->setStatusCode(702);
+ }
+
+ $LdapAuthData->setAuthenticated(1);
+
+ return $LdapAuthData;
+ }
+
+ /**
+ * Autentificación de usuarios con base de datos
+ *
+ * Esta función comprueba la clave del usuario. Si el usuario necesita ser migrado,
+ * se ejecuta el proceso para actualizar la clave.
+ *
+ * @return DatabaseAuthData
+ */
+ public function authDatabase()
+ {
+ $AuthDatabase = new Database();
+ return $AuthDatabase->authenticate($this->UserData);
+ }
+
+ /**
+ * Autentificación de usuario con credenciales del navegador
+ *
+ * @return BrowserAuthData
+ */
+ public function authBrowser()
+ {
+ $AuthBrowser = new Browser();
+ return $AuthBrowser->authenticate($this->UserData);
+ }
+}
diff --git a/inc/SP/Auth/AuthDataBase.class.php b/inc/SP/Auth/AuthDataBase.class.php
new file mode 100644
index 00000000..05e5eb5b
--- /dev/null
+++ b/inc/SP/Auth/AuthDataBase.class.php
@@ -0,0 +1,174 @@
+.
+ */
+
+namespace SP\Auth;
+
+/**
+ * Class AuthData
+ *
+ * @package Auth
+ */
+abstract class AuthDataBase
+{
+ /**
+ * @var string
+ */
+ protected $name;
+ /**
+ * @var string
+ */
+ protected $email;
+ /**
+ * @var int
+ */
+ protected $authenticated;
+ /**
+ * @var int
+ */
+ protected $statusCode = 0;
+ /**
+ * @var string
+ */
+ protected $server;
+ /**
+ * @var bool
+ */
+ protected $required = false;
+ /**
+ * @var bool
+ */
+ protected $failed = false;
+
+ /**
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ /**
+ * @param string $name
+ */
+ public function setName($name)
+ {
+ $this->name = $name;
+ }
+
+ /**
+ * @return string
+ */
+ public function getEmail()
+ {
+ return $this->email;
+ }
+
+ /**
+ * @param string $email
+ */
+ public function setEmail($email)
+ {
+ $this->email = $email;
+ }
+
+ /**
+ * @return int
+ */
+ public function getAuthenticated()
+ {
+ return $this->authenticated;
+ }
+
+ /**
+ * @param int $authenticated
+ */
+ public function setAuthenticated($authenticated)
+ {
+ $this->authenticated = (int)$authenticated;
+ }
+
+ /**
+ * @return string
+ */
+ public function getServer()
+ {
+ return $this->server;
+ }
+
+ /**
+ * @param string $server
+ */
+ public function setServer($server)
+ {
+ $this->server = $server;
+ }
+
+ /**
+ * @return int
+ */
+ public function getStatusCode()
+ {
+ return (int)$this->statusCode;
+ }
+
+ /**
+ * @param int $statusCode
+ */
+ public function setStatusCode($statusCode)
+ {
+ $this->statusCode = (int)$statusCode;
+ }
+
+ /**
+ * @return bool
+ */
+ public function isRequired()
+ {
+ return (bool)$this->required;
+ }
+
+ /**
+ * @param bool $required
+ */
+ public function setRequired($required)
+ {
+ $this->required = (bool)$required;
+ }
+
+ /**
+ * @return bool
+ */
+ public function isFailed()
+ {
+ return $this->failed;
+ }
+
+ /**
+ * @param bool $failed
+ */
+ public function setFailed($failed)
+ {
+ $this->failed = $failed;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Auth/AuthInterface.class.php b/inc/SP/Auth/AuthInterface.class.php
new file mode 100644
index 00000000..7324486a
--- /dev/null
+++ b/inc/SP/Auth/AuthInterface.class.php
@@ -0,0 +1,42 @@
+.
+ */
+
+namespace SP\Auth;
+
+use SP\DataModel\UserData;
+
+/**
+ * Interface AuthInterface
+ * @package Auth
+ */
+interface AuthInterface
+{
+ /**
+ * Autentificar al usuario
+ *
+ * @param UserData $UserData Datos del usuario
+ * @return mixed|AuthDataBase
+ */
+ public function authenticate(UserData $UserData);
+}
\ No newline at end of file
diff --git a/inc/SP/Auth/AuthResult.class.php b/inc/SP/Auth/AuthResult.class.php
new file mode 100644
index 00000000..27aa3bdc
--- /dev/null
+++ b/inc/SP/Auth/AuthResult.class.php
@@ -0,0 +1,70 @@
+.
+ */
+
+namespace SP\Auth;
+
+/**
+ * Class AuthData
+ *
+ * @package SP\Auth
+ */
+class AuthResult
+{
+ /**
+ * @var string
+ */
+ public $auth;
+ /**
+ * @var AuthDataBase
+ */
+ public $data;
+
+ /**
+ * AuthResult constructor.
+ *
+ * @param string $auth
+ * @param AuthDataBase $data
+ */
+ public function __construct($auth, AuthDataBase $data)
+ {
+ $this->auth = $auth;
+ $this->data = $data;
+ }
+
+ /**
+ * @return string
+ */
+ public function getAuth()
+ {
+ return $this->auth;
+ }
+
+ /**
+ * @return AuthDataBase
+ */
+ public function getData()
+ {
+ return $this->data;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Auth/AuthUtil.class.php b/inc/SP/Auth/AuthUtil.class.php
new file mode 100644
index 00000000..e44237ba
--- /dev/null
+++ b/inc/SP/Auth/AuthUtil.class.php
@@ -0,0 +1,117 @@
+.
+ */
+
+namespace SP\Auth;
+
+use SP\Core\Init;
+use SP\Core\Messages\LogMessage;
+use SP\DataModel\UserData;
+use SP\DataModel\UserPassRecoverData;
+use SP\Html\Html;
+use SP\Log\Email;
+use SP\Mgmt\Users\UserPassRecover;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+use SP\Util\Util;
+
+/**
+ * Class AuthUtil
+ *
+ * @package SP\Auth
+ */
+class AuthUtil
+{
+ /**
+ * Proceso para la recuperación de clave.
+ *
+ * @param UserData $UserData
+ * @return bool
+ * @throws \phpmailer\phpmailerException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public static function mailPassRecover(UserData $UserData)
+ {
+ if (!$UserData->isUserIsDisabled()
+ && !$UserData->isUserIsLdap()
+ && !UserPassRecover::checkPassRecoverLimit($UserData)
+ ) {
+ $hash = Util::generateRandomBytes();
+
+ $LogMessage = new LogMessage();
+ $LogMessage->setAction(__('Cambio de Clave'));
+ $LogMessage->addDescriptionHtml(__('Se ha solicitado el cambio de su clave de usuario.'));
+ $LogMessage->addDescriptionLine();
+ $LogMessage->addDescription(__('Para completar el proceso es necesario que acceda a la siguiente URL:'));
+ $LogMessage->addDescriptionLine();
+ $LogMessage->addDescription(Html::anchorText(Init::$WEBURI . '/index.php?a=passreset&h=' . $hash . '&t=' . time()));
+ $LogMessage->addDescriptionLine();
+ $LogMessage->addDescription(__('Si no ha solicitado esta acción, ignore este mensaje.'));
+
+ $UserPassRecoverData = new UserPassRecoverData();
+ $UserPassRecoverData->setUserpassrUserId($UserData->getUserId());
+ $UserPassRecoverData->setUserpassrHash($hash);
+
+ return (Email::sendEmail($LogMessage, $UserData->getUserEmail(), false) && UserPassRecover::getItem($UserPassRecoverData)->add());
+ }
+
+ return false;
+ }
+
+ /**
+ * Comprobar el token de seguridad
+ *
+ * @param $actionId int El id de la accion
+ * @param $token string El token de seguridad
+ * @return bool
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public static function checkAuthToken($actionId, $token)
+ {
+ $query = /** @lang SQL */
+ 'SELECT authtoken_id
+ FROM authTokens
+ WHERE authtoken_actionId = ?
+ AND authtoken_token = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($actionId);
+ $Data->addParam($token);
+
+ DB::getQuery($Data);
+
+ return $Data->getQueryNumRows() === 1;
+ }
+
+ /**
+ * Devuelve el typo de autentificación del servidor web
+ *
+ * @return string
+ */
+ public static function getServerAuthType()
+ {
+ return strtoupper($_SERVER['AUTH_TYPE']);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Auth/Browser/Browser.class.php b/inc/SP/Auth/Browser/Browser.class.php
new file mode 100644
index 00000000..995d14d0
--- /dev/null
+++ b/inc/SP/Auth/Browser/Browser.class.php
@@ -0,0 +1,81 @@
+.
+ */
+
+namespace SP\Auth\Browser;
+
+use SP\Auth\AuthInterface;
+use SP\DataModel\UserData;
+
+/**
+ * Class Browser
+ *
+ * Autentificación basada en credenciales del navegador
+ *
+ * @package SP\Auth\Browser
+ */
+class Browser implements AuthInterface
+{
+ /**
+ * Autentificar al usuario
+ *
+ * @param UserData $UserData Datos del usuario
+ * @return BrowserAuthData
+ */
+ public function authenticate(UserData $UserData)
+ {
+ $AuthData = new BrowserAuthData();
+ $AuthData->setAuthenticated($this->checkServerAuthUser($UserData->getUserLogin()));
+
+ return $AuthData;
+ }
+
+ /**
+ * Comprobar si el usuario es autentificado por el servidor web
+ *
+ * @param $login string El login del usuario a comprobar
+ * @return bool
+ */
+ public function checkServerAuthUser($login)
+ {
+ $authUser = $this->getServerAuthUser();
+
+ return $authUser === null ?: $authUser === $login;
+ }
+
+ /**
+ * Devolver el nombre del usuario autentificado por el servidor web
+ *
+ * @return string
+ */
+ public function getServerAuthUser()
+ {
+ if (isset($_SERVER['PHP_AUTH_USER']) && !empty($_SERVER['PHP_AUTH_USER'])) {
+ return $_SERVER['PHP_AUTH_USER'];
+ } elseif (isset($_SERVER['REMOTE_USER']) && !empty($_SERVER['REMOTE_USER'])) {
+ return $_SERVER['REMOTE_USER'];
+ }
+
+ return null;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Auth/Browser/BrowserAuthData.class.php b/inc/SP/Auth/Browser/BrowserAuthData.class.php
new file mode 100644
index 00000000..3eeb1970
--- /dev/null
+++ b/inc/SP/Auth/Browser/BrowserAuthData.class.php
@@ -0,0 +1,37 @@
+.
+ */
+
+namespace SP\Auth\Browser;
+
+use SP\Auth\AuthDataBase;
+
+/**
+ * Class BrowserAuthData
+ *
+ * @package SP\Auth\Browser
+ */
+class BrowserAuthData extends AuthDataBase
+{
+
+}
\ No newline at end of file
diff --git a/inc/SP/Auth/Database/Database.class.php b/inc/SP/Auth/Database/Database.class.php
new file mode 100644
index 00000000..6b325e8c
--- /dev/null
+++ b/inc/SP/Auth/Database/Database.class.php
@@ -0,0 +1,109 @@
+.
+ */
+
+namespace SP\Auth\Database;
+
+use SP\Auth\AuthInterface;
+use SP\Core\Exceptions\SPException;
+use SP\DataModel\UserData;
+use SP\DataModel\UserPassData;
+use SP\Log\Log;
+use SP\Mgmt\Users\UserMigrate;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+
+/**
+ * Class Database
+ *
+ * Autentificación basada en base de datos
+ *
+ * @package SP\Auth\Database
+ */
+class Database implements AuthInterface
+{
+ /**
+ * @var UserData $UserData
+ */
+ protected $UserData;
+
+ /**
+ * Autentificación de usuarios con BD.
+ *
+ * Esta función comprueba la clave del usuario. Si el usuario necesita ser migrado desde phpPMS,
+ * se ejecuta el proceso para actualizar la clave.
+ *
+ * @return bool
+ */
+ protected function authUser()
+ {
+ if (UserMigrate::checkUserIsMigrate($this->UserData->getUserLogin())) {
+ try {
+ UserMigrate::migrateUser($this->UserData->getUserLogin(), $this->UserData->getUserPass());
+ } catch (SPException $e) {
+ $Log = new Log();
+ $LogMessage = $Log->getLogMessage();
+ $LogMessage->setAction(__FUNCTION__);
+ $LogMessage->addDescription($e->getMessage());
+ $LogMessage->addDetails(__('Login', false), $this->UserData->getUserLogin());
+ $Log->writeLog();
+
+ return false;
+ }
+ }
+
+ $query = /** @lang SQL */
+ 'SELECT user_pass, user_hashSalt
+ FROM usrData
+ WHERE user_login = ?
+ AND user_isMigrate = 0 LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setMapClassName(UserPassData::class);
+ $Data->setQuery($query);
+ $Data->addParam($this->UserData->getUserLogin());
+
+ /** @var UserPassData $queryRes */
+ $queryRes = DB::getResults($Data);
+
+ return ($queryRes !== false
+ && $Data->getQueryNumRows() === 1
+ && $queryRes->getUserPass() === crypt($this->UserData->getUserPass(), $queryRes->getUserHashSalt()));
+ }
+
+ /**
+ * Autentificar al usuario
+ *
+ * @param UserData $UserData Datos del usuario
+ * @return DatabaseAuthData
+ */
+ public function authenticate(UserData $UserData)
+ {
+ $this->UserData = $UserData;
+
+ $AuthData = new DatabaseAuthData();
+ $AuthData->setAuthenticated($this->authUser());
+
+ return $AuthData;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Auth/Database/DatabaseAuthData.class.php b/inc/SP/Auth/Database/DatabaseAuthData.class.php
new file mode 100644
index 00000000..3d8c9c02
--- /dev/null
+++ b/inc/SP/Auth/Database/DatabaseAuthData.class.php
@@ -0,0 +1,37 @@
+.
+ */
+
+namespace SP\Auth\Database;
+
+use SP\Auth\AuthDataBase;
+
+/**
+ * Class DatabaseAuthData
+ *
+ * @package SP\Auth\Database
+ */
+class DatabaseAuthData extends AuthDataBase
+{
+
+}
\ No newline at end of file
diff --git a/inc/SP/Auth/Ldap/LdapAuthData.class.php b/inc/SP/Auth/Ldap/LdapAuthData.class.php
new file mode 100644
index 00000000..9916bd7e
--- /dev/null
+++ b/inc/SP/Auth/Ldap/LdapAuthData.class.php
@@ -0,0 +1,136 @@
+.
+ */
+
+namespace SP\Auth\Ldap;
+
+use SP\Auth\AuthDataBase;
+
+/**
+ * Class LdapUserData
+ *
+ * @package SP\Auth\Ldap
+ */
+class LdapAuthData extends AuthDataBase
+{
+ /**
+ * @var string
+ */
+ protected $dn;
+ /**
+ * @var string
+ */
+ protected $groupDn;
+ /**
+ * @var array
+ */
+ protected $groups = [];
+ /**
+ * @var int
+ */
+ protected $expire = 0;
+ /**
+ * @var bool
+ */
+ protected $inGroup = false;
+
+ /**
+ * @return string
+ */
+ public function getDn()
+ {
+ return $this->dn;
+ }
+
+ /**
+ * @param string $dn
+ */
+ public function setDn($dn)
+ {
+ $this->dn = $dn;
+ }
+
+ /**
+ * @return array
+ */
+ public function getGroups()
+ {
+ return $this->groups;
+ }
+
+ /**
+ * @param array|string $groups
+ */
+ public function setGroups($groups)
+ {
+ $this->groups = is_string($groups) ? [$groups] : $groups;
+ }
+
+ /**
+ * @return int
+ */
+ public function getExpire()
+ {
+ return (int)$this->expire;
+ }
+
+ /**
+ * @param int $expire
+ */
+ public function setExpire($expire)
+ {
+ $this->expire = (int)$expire;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isInGroup()
+ {
+ return $this->inGroup;
+ }
+
+ /**
+ * @param boolean $inGroup
+ */
+ public function setInGroup($inGroup)
+ {
+ $this->inGroup = $inGroup;
+ }
+
+ /**
+ * @return string
+ */
+ public function getGroupDn()
+ {
+ return $this->groupDn;
+ }
+
+ /**
+ * @param string $groupDn
+ */
+ public function setGroupDn($groupDn)
+ {
+ $this->groupDn = $groupDn;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Auth/Ldap/LdapBase.class.php b/inc/SP/Auth/Ldap/LdapBase.class.php
new file mode 100644
index 00000000..fb9f0a0b
--- /dev/null
+++ b/inc/SP/Auth/Ldap/LdapBase.class.php
@@ -0,0 +1,741 @@
+.
+ */
+
+namespace SP\Auth\Ldap;
+
+use SP\Auth\AuthInterface;
+use SP\Config\Config;
+use SP\Core\Exceptions\SPException;
+use SP\Core\Messages\LogMessage;
+use SP\DataModel\UserData;
+use SP\Log\Log;
+
+/**
+ * Class LdapBase
+ *
+ * @package Auth\Ldap
+ */
+abstract class LdapBase implements LdapInterface, AuthInterface
+{
+ /**
+ * Atributos de búsqueda
+ */
+ const SEARCH_ATTRIBUTES = [
+ 'dn',
+ 'displayname',
+ 'samaccountname',
+ 'mail',
+ 'memberof',
+ 'lockouttime',
+ 'fullname',
+ 'groupmembership',
+ 'uid',
+ 'givenname',
+ 'sn'
+ ];
+ /**
+ * @var resource
+ */
+ protected $ldapHandler;
+ /**
+ * @var string
+ */
+ protected $server;
+ /**
+ * @var string
+ */
+ protected $searchBase;
+ /**
+ * @var string
+ */
+ protected $bindDn;
+ /**
+ * @var string
+ */
+ protected $bindPass;
+ /**
+ * @var string
+ */
+ protected $group;
+ /**
+ * @var array
+ */
+ protected $searchData;
+ /**
+ * @var string
+ */
+ protected $userLogin;
+ /**
+ * @var LdapAuthData
+ */
+ protected $LdapAuthData;
+ /**
+ * @var LogMessage
+ */
+ protected $LogMessage;
+
+ /**
+ * LdapBase constructor.
+ */
+ public function __construct()
+ {
+ $this->LdapAuthData = new LdapAuthData();
+ $this->LogMessage = new LogMessage();
+ }
+
+ /**
+ * Comprobar la conexión al servidor de LDAP.
+ *
+ * @return false|array Con el número de entradas encontradas
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function checkConnection()
+ {
+ $this->LogMessage->setAction(__FUNCTION__);
+
+ if (!$this->searchBase || !$this->server || !$this->bindDn || !$this->bindPass) {
+ $this->LogMessage->addDescription(__('Los parámetros de LDAP no están configurados', false));
+ $this->writeLog();
+
+ return false;
+ }
+
+ try {
+ $this->connect();
+ $this->bind();
+ $results = $this->searchBase();
+ } catch (SPException $e) {
+ throw $e;
+ }
+
+ $this->LogMessage->addDescription(__('Conexión a LDAP correcta', false));
+ $this->LogMessage->addDetails(__('Objetos encontrados', false), (int)$results['count']);
+ $this->writeLog(Log::INFO);
+
+ return $results;
+ }
+
+ /**
+ * Escribir en el registro de eventos
+ *
+ * @param string $level
+ */
+ protected function writeLog($level = Log::ERROR)
+ {
+ $Log = new Log($this->LogMessage);
+ $Log->setLogLevel($level);
+ $Log->writeLog();
+ }
+
+ /**
+ * Realizar la conexión al servidor de LDAP.
+ *
+ * @throws SPException
+ * @return bool
+ */
+ protected function connect()
+ {
+ // Habilitar la traza si el modo debug está habilitado
+ if (Config::getConfig()->isDebug()) {
+ @ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);
+ }
+
+ $this->ldapHandler = @ldap_connect($this->server);
+
+ // Conexión al servidor LDAP
+ if (!is_resource($this->ldapHandler)) {
+ $this->LogMessage->setAction(__FUNCTION__);
+ $this->LogMessage->addDescription(__('No es posible conectar con el servidor de LDAP', false));
+ $this->LogMessage->addDetails(__('Servidor'), $this->server);
+ $this->LogMessage->addDetails('LDAP ERROR', $this->ldapError());
+ $this->writeLog();
+
+ throw new SPException(SPException::SP_ERROR, $this->LogMessage->getDescription(), $this->LogMessage->getDetails());
+ }
+
+ @ldap_set_option($this->ldapHandler, LDAP_OPT_NETWORK_TIMEOUT, 10);
+ @ldap_set_option($this->ldapHandler, LDAP_OPT_PROTOCOL_VERSION, 3);
+
+ return true;
+ }
+
+ /**
+ * Registrar error de LDAP y devolver el mensaje de error
+ *
+ * @return string
+ */
+ protected function ldapError()
+ {
+ $error = ldap_error($this->ldapHandler);
+ $errno = ldap_errno($this->ldapHandler);
+
+ $this->LdapAuthData->setAuthenticated(0);
+ $this->LdapAuthData->setStatusCode($errno);
+
+ return sprintf('%s (%d)', $error, $errno);
+ }
+
+ /**
+ * Realizar la autentificación con el servidor de LDAP.
+ *
+ * @param string $bindDn con el DN del usuario
+ * @param string $bindPass con la clave del usuario
+ * @throws SPException
+ * @return bool
+ */
+ protected function bind($bindDn = '', $bindPass = '')
+ {
+ $dn = $bindDn ?: $this->bindDn;
+ $pass = $bindPass ?: $this->bindPass;
+
+ if (!@ldap_bind($this->ldapHandler, $dn, $pass)) {
+ $this->LogMessage->setAction(__FUNCTION__);
+ $this->LogMessage->addDescription(__('Error al conectar (BIND)', false));
+ $this->LogMessage->addDetails('LDAP ERROR', $this->ldapError());
+ $this->LogMessage->addDetails('LDAP DN', $dn);
+ $this->writeLog();
+
+ throw new SPException(SPException::SP_ERROR, __($this->LogMessage->getDescription()));
+ }
+
+ return true;
+ }
+
+ /**
+ * @return LdapAuthData
+ */
+ public function getLdapAuthData()
+ {
+ return $this->LdapAuthData;
+ }
+
+ /**
+ * Realizar una búsqueda de objetos en la ruta indicada.
+ *
+ * @throws SPException
+ * @return array Con los resultados de la búsqueda
+ */
+ protected function searchBase()
+ {
+ $this->LogMessage->setAction(__FUNCTION__);
+ $filter = $this->getGroupDnFilter();
+
+ $searchRes = @ldap_search($this->ldapHandler, $this->searchBase, $filter, ['dn']);
+
+ if (!$searchRes) {
+ $this->LogMessage->addDescription(__('Error al buscar objetos en DN base', false));
+ $this->LogMessage->addDetails('LDAP ERROR', $this->ldapError());
+ $this->LogMessage->addDetails('LDAP FILTER', $filter);
+ $this->writeLog();
+
+ throw new SPException(SPException::SP_ERROR, $this->LogMessage->getDescription());
+ }
+
+ if (@ldap_count_entries($this->ldapHandler, $searchRes) > 0) {
+ $searchResults = @ldap_get_entries($this->ldapHandler, $searchRes);
+
+ if (!$searchResults) {
+ $this->LogMessage->addDescription(__('Error al buscar objetos en DN base', false));
+ $this->LogMessage->addDetails('LDAP ERROR', $this->ldapError());
+ $this->LogMessage->addDetails('LDAP FILTER', $this->getGroupDnFilter());
+ $this->writeLog();
+
+ throw new SPException(SPException::SP_ERROR, $this->LogMessage->getDescription());
+ }
+
+ return $searchResults;
+ } else {
+ $this->LogMessage->addDescription(__('Error al buscar objetos en DN base', false));
+ $this->LogMessage->addDetails('LDAP ERROR', $this->ldapError());
+ $this->LogMessage->addDetails('LDAP FILTER', $this->getGroupDnFilter());
+ $this->writeLog();
+
+ throw new SPException(SPException::SP_ERROR, $this->LogMessage->getDescription());
+ }
+ }
+
+ /**
+ * Devolver el filtro para comprobar la pertenecia al grupo
+ *
+ * @return mixed
+ */
+ protected abstract function getGroupDnFilter();
+
+ /**
+ * Obtener el recurso de conexión a LDAP.
+ *
+ * @return resource|false
+ */
+ public function getConnect()
+ {
+ return is_resource($this->ldapHandler) ? $this->ldapHandler : false;
+ }
+
+ /**
+ * @return string
+ */
+ public function getServer()
+ {
+ return $this->server;
+ }
+
+ /**
+ * @param string $server
+ */
+ public function setServer($server)
+ {
+ $this->server = $server;
+ }
+
+ /**
+ * @return string
+ */
+ public function getSearchBase()
+ {
+ return $this->searchBase;
+ }
+
+ /**
+ * @param string $searchBase
+ */
+ public function setSearchBase($searchBase)
+ {
+ $this->searchBase = $searchBase;
+ }
+
+ /**
+ * @return string
+ */
+ public function getBindDn()
+ {
+ return $this->bindDn;
+ }
+
+ /**
+ * @param string $bindDn
+ */
+ public function setBindDn($bindDn)
+ {
+ $this->bindDn = $bindDn;
+ }
+
+ /**
+ * @return string
+ */
+ public function getBindPass()
+ {
+ return $this->bindPass;
+ }
+
+ /**
+ * @param string $bindPass
+ */
+ public function setBindPass($bindPass)
+ {
+ $this->bindPass = $bindPass;
+ }
+
+ /**
+ * @return string
+ */
+ public function getGroup()
+ {
+ return $this->group;
+ }
+
+ /**
+ * @param string $group
+ */
+ public function setGroup($group)
+ {
+ $this->group = $group;
+ }
+
+ /**
+ * @return string
+ */
+ public function getUserLogin()
+ {
+ return $this->userLogin;
+ }
+
+ /**
+ * @param string $userLogin
+ */
+ public function setUserLogin($userLogin)
+ {
+ $this->userLogin = strtolower($userLogin);
+ }
+
+ /**
+ * Autentificar al usuario
+ *
+ * @param UserData $UserData Datos del usuario
+ * @return bool
+ */
+ public function authenticate(UserData $UserData)
+ {
+ if (!$this->checkParams()) {
+ return false;
+ }
+
+ try {
+ $this->setUserLogin($UserData->getUserLogin());
+
+ $this->connect();
+ $this->bind();
+ $this->getAttributes();
+ $this->bind($this->LdapAuthData->getDn(), $UserData->getUserPass());
+ } catch (SPException $e) {
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Comprobar si los parámetros necesario de LDAP están establecidos.
+ *
+ * @return bool
+ */
+ public function checkParams()
+ {
+ $this->searchBase = Config::getConfig()->getLdapBase();
+ $this->server = $this->pickServer();
+ $this->bindDn = Config::getConfig()->getLdapBindUser();
+ $this->bindPass = Config::getConfig()->getLdapBindPass();
+ $this->group = Config::getConfig()->getLdapGroup();
+
+ if (!$this->searchBase || !$this->server || !$this->bindDn || !$this->bindPass) {
+ $this->LogMessage->setAction(__FUNCTION__);
+ $this->LogMessage->addDescription(__('Los parámetros de LDAP no están configurados', false));
+ $this->writeLog();
+
+ return false;
+ }
+
+ $this->LdapAuthData->setServer($this->server);
+
+ return true;
+ }
+
+ /**
+ * Obtener el servidor de LDAP a utilizar
+ *
+ * @return mixed
+ */
+ protected abstract function pickServer();
+
+ /**
+ * Obtener los atributos del usuario.
+ *
+ * @return LdapAuthData con los atributos disponibles y sus valores
+ * @throws SPException
+ */
+ public function getAttributes()
+ {
+ $searchResults = $this->getUserAttributes();
+
+ $validAttributes = [
+ 'groupmembership' => 'group',
+ 'memberof' => 'group',
+ 'displayname' => 'fullname',
+ 'fullname' => 'fullname',
+ 'givenname' => 'name',
+ 'sn' => 'sn',
+ 'mail' => 'mail',
+ 'lockouttime' => 'expire'
+ ];
+
+ $res = [
+ 'name' => '',
+ 'sn' => '',
+ 'mail' => '',
+ 'group' => [],
+ 'expire' => 0
+ ];
+
+ foreach ($searchResults as $result) {
+ if (is_array($result)) {
+ foreach ($result as $attribute => $values) {
+ $normalizedAttribute = strtolower($attribute);
+
+ if (is_array($values) && array_key_exists($normalizedAttribute, $validAttributes)) {
+ $count = (int)$values['count'];
+
+ if ($count > 1) {
+ unset($values['count']);
+
+ $res[$validAttributes[$normalizedAttribute]] = $values;
+ } else {
+ // Almacenamos 1 solo valor
+ $res[$validAttributes[$normalizedAttribute]] = trim($values[0]);
+ }
+ }
+ }
+ }
+ }
+
+ if (!empty($res["fullname"])) {
+ $this->LdapAuthData->setName($res['fullname']);
+ } else {
+ $this->LdapAuthData->setName($res['name'] . ' ' . $res['sn']);
+ }
+
+ $this->LdapAuthData->setDn($searchResults[0]['dn']);
+ $this->LdapAuthData->setEmail($res['mail']);
+ $this->LdapAuthData->setExpire($res['expire']);
+ $this->LdapAuthData->setGroups($res['group']);
+
+ if (!empty($this->group) && $this->group !== '*') {
+ $this->LdapAuthData->setGroupDn($this->searchGroupDN());
+ }
+
+ $this->LdapAuthData->setInGroup($this->searchUserInGroup());
+
+ return $this->LdapAuthData;
+ }
+
+ /**
+ * Obtener el RDN del usuario que realiza el login.
+ *
+ * @return array
+ * @throws SPException
+ */
+ protected function getUserAttributes()
+ {
+ $this->LogMessage->setAction(__FUNCTION__);
+
+ $searchRes = @ldap_search($this->ldapHandler, $this->searchBase, $this->getUserDnFilter(), self::SEARCH_ATTRIBUTES);
+
+ if (!$searchRes) {
+ $this->LogMessage->addDescription(__('Error al buscar el DN del usuario', false));
+ $this->LogMessage->addDetails(__('Usuario', false), $this->userLogin);
+ $this->LogMessage->addDetails('LDAP ERROR', $this->ldapError());
+ $this->LogMessage->addDetails('LDAP FILTER', $this->getUserDnFilter());
+ $this->writeLog();
+
+ throw new SPException(SPException::SP_ERROR, $this->LogMessage->getDescription());
+ }
+
+ if (@ldap_count_entries($this->ldapHandler, $searchRes) === 1) {
+ $searchResults = @ldap_get_entries($this->ldapHandler, $searchRes);
+
+ if (!$searchResults) {
+ $this->LogMessage->addDescription(__('Error al localizar el usuario en LDAP', false));
+ $this->LogMessage->addDetails(__('Usuario', false), $this->userLogin);
+ $this->LogMessage->addDetails('LDAP ERROR', $this->ldapError());
+ $this->writeLog();
+
+ throw new SPException(SPException::SP_ERROR, $this->LogMessage->getDescription());
+ }
+
+ return $searchResults;
+ } else {
+ $this->LogMessage->addDescription(__('Error al buscar el DN del usuario', false));
+ $this->LogMessage->addDetails(__('Usuario', false), $this->userLogin);
+ $this->LogMessage->addDetails('LDAP FILTER', $this->getUserDnFilter());
+ $this->writeLog();
+
+ throw new SPException(SPException::SP_ERROR, $this->LogMessage->getDescription());
+ }
+ }
+
+ /**
+ * Obtener el filtro para buscar el usuario
+ *
+ * @return mixed
+ */
+ protected abstract function getUserDnFilter();
+
+ /**
+ * Obtener el RDN del grupo.
+ *
+ * @throws SPException
+ * @return string con el RDN del grupo
+ */
+ protected function searchGroupDN()
+ {
+ $this->LogMessage->setAction(__FUNCTION__);
+ $group = $this->getGroupName() ?: $this->group;
+ $filter = '(cn=' . $group . ')';
+
+ $searchRes = @ldap_search($this->ldapHandler, $this->searchBase, $filter, ['dn', 'cn']);
+
+ if (!$searchRes) {
+ $this->LogMessage->addDescription(__('Error al buscar RDN de grupo', false));
+ $this->LogMessage->addDetails(__('Grupo', false), $filter);
+ $this->LogMessage->addDetails('LDAP ERROR', $this->ldapError());
+ $this->LogMessage->addDetails('LDAP FILTER', $filter);
+ $this->writeLog();
+
+ throw new SPException(SPException::SP_ERROR, $this->LogMessage->getDescription());
+ }
+
+ if (@ldap_count_entries($this->ldapHandler, $searchRes) === 1) {
+ $ldapSearchData = @ldap_get_entries($this->ldapHandler, $searchRes);
+
+ if (!$ldapSearchData) {
+ $this->LogMessage->addDescription(__('Error al buscar RDN de grupo', false));
+ $this->LogMessage->addDetails(__('Grupo', false), $filter);
+ $this->LogMessage->addDetails('LDAP ERROR', $this->ldapError());
+ $this->LogMessage->addDetails('LDAP FILTER', $filter);
+ $this->writeLog();
+
+ throw new SPException(SPException::SP_ERROR, $this->LogMessage->getDescription());
+ }
+
+ return $ldapSearchData[0]['dn'];
+ } else {
+ $this->LogMessage->addDescription(__('Error al buscar RDN de grupo', false));
+ $this->LogMessage->addDetails(__('Grupo', false), $filter);
+ $this->LogMessage->addDetails('LDAP FILTER', $filter);
+ $this->writeLog();
+
+ throw new SPException(SPException::SP_ERROR, $this->LogMessage->getDescription());
+ }
+ }
+
+ /**
+ * Obtener el nombre del grupo a partir del CN
+ *
+ * @return bool
+ */
+ protected function getGroupName()
+ {
+ if (null !== $this->group
+ && preg_match('/^cn=([\w\s-]+)(,.*)?/i', $this->group, $groupName)
+ ) {
+ return $groupName[1];
+ }
+
+ return false;
+ }
+
+ /**
+ * Buscar al usuario en un grupo.
+ *
+ * @throws SPException
+ * @return bool
+ */
+ protected abstract function searchUserInGroup();
+
+ /**
+ * Devolver los objetos disponibles
+ *
+ * @return array|bool
+ */
+ public function findObjects()
+ {
+ if (!$this->checkParams()) {
+ return false;
+ }
+
+ try {
+ $this->connect();
+ $this->bind();
+ return $this->getObjects();
+ } catch (SPException $e) {
+ return false;
+ }
+ }
+
+ /**
+ * Obtener los objetos que se pertenecen al grupo filtrado
+ *
+ * @return int
+ * @throws SPException
+ */
+ protected function getObjects()
+ {
+ $this->LogMessage->setAction(__FUNCTION__);
+
+ $filter = $this->getGroupDnFilter();
+
+ $searchRes = @ldap_search($this->ldapHandler, $this->searchBase, $filter, self::SEARCH_ATTRIBUTES);
+
+ if (!$searchRes) {
+ $this->LogMessage->addDescription(__('Error al buscar objetos en DN base', false));
+ $this->LogMessage->addDetails('LDAP ERROR', $this->ldapError());
+ $this->LogMessage->addDetails('LDAP FILTER', $filter);
+ $this->writeLog();
+
+ throw new SPException(SPException::SP_ERROR, $this->LogMessage->getDescription());
+ }
+
+ if (@ldap_count_entries($this->ldapHandler, $searchRes) > 0) {
+ $searchResults = @ldap_get_entries($this->ldapHandler, $searchRes);
+
+ if (!$searchResults) {
+ $this->LogMessage->addDescription(__('Error al buscar objetos en DN base', false));
+ $this->LogMessage->addDetails('LDAP ERROR', $this->ldapError());
+ $this->LogMessage->addDetails('LDAP FILTER', $this->getGroupDnFilter());
+ $this->writeLog();
+
+ throw new SPException(SPException::SP_ERROR, $this->LogMessage->getDescription());
+ }
+
+ return $searchResults;
+ } else {
+ $this->LogMessage->addDescription(__('Error al buscar objetos en DN base', false));
+ $this->LogMessage->addDetails('LDAP ERROR', $this->ldapError());
+ $this->LogMessage->addDetails('LDAP FILTER', $this->getGroupDnFilter());
+ $this->writeLog();
+
+ throw new SPException(SPException::SP_ERROR, $this->LogMessage->getDescription());
+ }
+ }
+
+ /**
+ * Realizar la desconexión del servidor de LDAP.
+ */
+ protected function unbind()
+ {
+ @ldap_unbind($this->ldapHandler);
+ }
+
+ /**
+ * Escapar carácteres especiales en el RDN de LDAP.
+ *
+ * @param string $dn con el RDN del usuario
+ * @return string
+ */
+ protected function escapeLdapDN($dn)
+ {
+ $chars = [
+ '/(,)(?!uid|cn|ou|dc)/i',
+ '/(?)/',
+ '/(<)/',
+ '/(\+)/',
+ '/(#)/',
+ '/\G(\s)/',
+ '/(\s)(?=\s*$)/',
+ '/(\/)/'
+ ];
+ return preg_replace($chars, '\\\$1', $dn);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Auth/Ldap/LdapInterface.class.php b/inc/SP/Auth/Ldap/LdapInterface.class.php
new file mode 100644
index 00000000..0eaa35db
--- /dev/null
+++ b/inc/SP/Auth/Ldap/LdapInterface.class.php
@@ -0,0 +1,55 @@
+.
+ */
+
+namespace SP\Auth\Ldap;
+
+/**
+ * Interface LdapInterface
+ *
+ * @package Auth\Ldap
+ */
+interface LdapInterface
+{
+ /**
+ * Comprobar la conexión al servidor de LDAP.
+ *
+ * @return bool
+ */
+ public function checkConnection();
+
+
+ /**
+ * Comprobar si los parámetros necesarios de LDAP están establecidos.
+ *
+ * @return bool
+ */
+ public function checkParams();
+
+ /**
+ * Obtener los atributos del usuario.
+ *
+ * @return LdapAuthData
+ */
+ public function getAttributes();
+}
\ No newline at end of file
diff --git a/inc/SP/Auth/Ldap/LdapMsAds.class.php b/inc/SP/Auth/Ldap/LdapMsAds.class.php
new file mode 100644
index 00000000..4bb5f1d5
--- /dev/null
+++ b/inc/SP/Auth/Ldap/LdapMsAds.class.php
@@ -0,0 +1,186 @@
+.
+ */
+
+namespace SP\Auth\Ldap;
+
+use SP\Config\Config;
+use SP\Core\Exceptions\SPException;
+use SP\Log\Log;
+
+/**
+ * Class LdapAds
+ *
+ * Autentificación basada en Active Directory
+ *
+ * @package SP\Auth\Ldap
+ */
+class LdapMsAds extends LdapBase
+{
+
+ /**
+ * Devolver el filtro para comprobar la pertenecia al grupo
+ *
+ * @return mixed
+ */
+ protected function getGroupDnFilter()
+ {
+ if (empty($this->group)) {
+ return '(|(objectClass=inetOrgPerson)(objectClass=person)(objectClass=simpleSecurityObject))';
+ } else {
+ $groupDN = $this->searchGroupDN();
+
+ return '(&(|(memberOf=' . $groupDN . ')(groupMembership=' . $groupDN . ')(memberof:1.2.840.113556.1.4.1941:=' . $groupDN . '))(|(objectClass=inetOrgPerson)(objectClass=person)(objectClass=simpleSecurityObject)))';
+ }
+ }
+
+ /**
+ * Obtener el servidor de LDAP a utilizar
+ *
+ * @return mixed
+ */
+ protected function pickServer()
+ {
+ $server = Config::getConfig()->getLdapServer();
+
+ if (preg_match('/[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}/', $server)) {
+ return $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 $server;
+ }
+
+ $ads = [];
+
+ foreach ($records as $record) {
+ $ads[] = $record['target'];
+ };
+
+ $nAds = count($ads);
+
+ return $nAds > 0 ? $ads[mt_rand(0, $nAds)] : $server;
+ }
+
+ /**
+ * Obtener el filtro para buscar el usuario
+ *
+ * @return mixed
+ */
+ protected function getUserDnFilter()
+ {
+ return '(&(|(samaccountname=' . $this->userLogin . ')(cn=' . $this->userLogin . ')(uid=' . $this->userLogin . '))(|(objectClass=inetOrgPerson)(objectClass=person)(objectClass=simpleSecurityObject))(objectCategory=person))';
+ }
+
+ /**
+ * Buscar al usuario en un grupo.
+ *
+ * @throws SPException
+ * @return bool
+ */
+ protected function searchUserInGroup()
+ {
+ $this->LogMessage->setAction(__FUNCTION__);
+
+ // Comprobar si está establecido el filtro de grupo o el grupo coincide con
+ // los grupos del usuario
+ if (!$this->group
+ || $this->group === '*'
+ || in_array($this->LdapAuthData->getGroupDn(), $this->LdapAuthData->getGroups())
+ ) {
+ $this->LogMessage->addDescription(__('Usuario verificado en grupo', false));
+ $this->writeLog(Log::INFO);
+
+ return true;
+ }
+
+ $groupDN = $this->LdapAuthData->getGroupDn();
+ $filter = '(memberof:1.2.840.113556.1.4.1941:=' . $groupDN . ')';
+
+ $searchRes = @ldap_search($this->ldapHandler, $this->searchBase, $filter, ['sAMAccountName']);
+
+ if (!$searchRes) {
+ $this->LogMessage->addDescription(__('Error al buscar el grupo de usuarios', false));
+ $this->LogMessage->addDetails(__('Grupo', false), $groupDN);
+ $this->LogMessage->addDetails('LDAP ERROR', sprintf('%s (%d)', ldap_error($this->ldapHandler), ldap_errno($this->ldapHandler)));
+ $this->LogMessage->addDetails('LDAP FILTER', $filter);
+ $this->writeLog();
+
+ throw new SPException(SPException::SP_ERROR, $this->LogMessage->getDescription());
+ }
+
+ if (@ldap_count_entries($this->ldapHandler, $searchRes) === 0) {
+ $this->LogMessage->addDescription(__('No se encontró el grupo con ese nombre', false));
+ $this->LogMessage->addDetails(__('Grupo', false), $groupDN);
+ $this->LogMessage->addDetails('LDAP ERROR', sprintf('%s (%d)', ldap_error($this->ldapHandler), ldap_errno($this->ldapHandler)));
+ $this->LogMessage->addDetails('LDAP FILTER', $filter);
+ $this->writeLog();
+
+ throw new SPException(SPException::SP_ERROR, $this->LogMessage->getDescription());
+ }
+
+ $entries = ldap_get_entries($this->ldapHandler, $searchRes);
+
+ foreach ($entries as $entry) {
+ if (is_array($entry)) {
+ if ($this->userLogin === strtolower($entry['samaccountname'][0])) {
+ $this->LogMessage->addDescription(__('Usuario verificado en grupo', false));
+ $this->LogMessage->addDetails(__('Grupo', false), $groupDN);
+ $this->writeLog(Log::INFO);
+
+ return true;
+ }
+ }
+ }
+
+ $this->LogMessage->addDescription(__('Usuario no pertenece al grupo', false));
+ $this->LogMessage->addDetails(__('Usuario', false), $this->LdapAuthData->getDn());
+ $this->LogMessage->addDetails(__('Grupo', false), $groupDN);
+ $this->writeLog();
+
+ return false;
+ }
+
+ /**
+ * @return bool
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ protected function connect()
+ {
+ parent::connect();
+
+ @ldap_set_option($this->ldapHandler, LDAP_OPT_REFERRALS, 0);
+
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Auth/Ldap/LdapStd.class.php b/inc/SP/Auth/Ldap/LdapStd.class.php
new file mode 100644
index 00000000..882380e5
--- /dev/null
+++ b/inc/SP/Auth/Ldap/LdapStd.class.php
@@ -0,0 +1,132 @@
+.
+ */
+
+namespace SP\Auth\Ldap;
+
+use SP\Config\Config;
+use SP\Core\Exceptions\SPException;
+use SP\Log\Log;
+
+/**
+ * Class LdapStd
+ *
+ * Autentificación basada en LDAP estándard
+ *
+ * @package SP\Auth\Ldap
+ */
+class LdapStd extends LdapBase
+{
+ /**
+ * Devolver el filtro para comprobar la pertenecia al grupo
+ *
+ * @return mixed
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ protected function getGroupDnFilter()
+ {
+ if (empty($this->group)){
+ return '(|(objectClass=inetOrgPerson)(objectClass=person)(objectClass=simpleSecurityObject))';
+ } else {
+ $groupDN = $this->searchGroupDN();
+
+ return '(&(|(memberOf=' . $groupDN . ')(groupMembership=' . $groupDN . '))(|(objectClass=inetOrgPerson)(objectClass=person)(objectClass=simpleSecurityObject)))';
+ }
+ }
+
+ /**
+ * Obtener el servidor de LDAP a utilizar
+ *
+ * @return mixed
+ */
+ protected function pickServer()
+ {
+ return Config::getConfig()->getLdapServer();
+ }
+
+ /**
+ * Obtener el filtro para buscar el usuario
+ *
+ * @return mixed
+ */
+ protected function getUserDnFilter()
+ {
+ return '(&(|(samaccountname=' . $this->userLogin . ')(cn=' . $this->userLogin . ')(uid=' . $this->userLogin . '))(|(objectClass=inetOrgPerson)(objectClass=person)(objectClass=simpleSecurityObject)))';
+ }
+
+ /**
+ * Buscar al usuario en un grupo.
+ *
+ * @throws SPException
+ * @return bool
+ */
+ protected function searchUserInGroup()
+ {
+ $this->LogMessage->setAction(__FUNCTION__);
+
+ // Comprobar si está establecido el filtro de grupo o el grupo coincide con
+ // los grupos del usuario
+ if (!$this->group
+ || $this->group === '*'
+ || in_array($this->LdapAuthData->getGroupDn(), $this->LdapAuthData->getGroups())
+ ) {
+ $this->LogMessage->addDescription(__('Usuario verificado en grupo', false));
+ $this->writeLog(Log::INFO);
+
+ return true;
+ }
+
+ $userDN = $this->LdapAuthData->getDn();
+ $groupName = $this->getGroupName() ?: $this->group;
+
+ $filter = '(&(cn=' . $groupName . ')(|(member=' . $userDN . ')(uniqueMember=' . $userDN . '))(|(objectClass=groupOfNames)(objectClass=groupOfUniqueNames)(objectClass=group)))';
+
+ $searchRes = @ldap_search($this->ldapHandler, $this->searchBase, $filter, ['member', 'uniqueMember']);
+
+ if (!$searchRes) {
+ $this->LogMessage->addDescription(__('Error al buscar el grupo de usuarios', false));
+ $this->LogMessage->addDetails(__('Grupo', false), $groupName);
+ $this->LogMessage->addDetails(__('Usuario', false), $userDN);
+ $this->LogMessage->addDetails('LDAP ERROR', sprintf('%s (%d)', ldap_error($this->ldapHandler), ldap_errno($this->ldapHandler)));
+ $this->LogMessage->addDetails('LDAP FILTER', $filter);
+ $this->writeLog();
+
+ throw new SPException(SPException::SP_ERROR, $this->LogMessage->getDescription());
+ }
+
+ if (@ldap_count_entries($this->ldapHandler, $searchRes) === 0) {
+ $this->LogMessage->addDescription(__('Usuario no pertenece al grupo', false));
+ $this->LogMessage->addDetails(__('Usuario', false), $userDN);
+ $this->LogMessage->addDetails(__('Grupo', false), $groupName);
+ $this->writeLog();
+
+ return false;
+ }
+
+ $this->LogMessage->addDescription(__('Usuario verificado en grupo', false));
+ $this->LogMessage->addDescription($groupName);
+ $this->writeLog(Log::INFO);
+
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Auth/Ldap/LdapUtil.class.php b/inc/SP/Auth/Ldap/LdapUtil.class.php
new file mode 100644
index 00000000..86a66fef
--- /dev/null
+++ b/inc/SP/Auth/Ldap/LdapUtil.class.php
@@ -0,0 +1,58 @@
+.
+ */
+
+namespace SP\Auth\Ldap;
+
+
+/**
+ * Class LdapUtil
+ *
+ * @package SP\Auth\Ldap
+ */
+class LdapUtil
+{
+ /**
+ * Obtener los datos de una búsqueda de LDAP de un atributo
+ *
+ * @param array $results
+ * @param string $attribute
+ * @return array
+ */
+ public static function getResultsData(array &$results, $attribute)
+ {
+ $out = [];
+
+ foreach ($results as $result) {
+ if (is_array($result)) {
+ foreach ($result as $ldapAttribute => $value) {
+ if (strtolower($ldapAttribute) === $attribute) {
+ $out[] = $value;
+ }
+ }
+ }
+ }
+
+ return $out;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Config/Config.class.php b/inc/SP/Config/Config.class.php
new file mode 100644
index 00000000..af006136
--- /dev/null
+++ b/inc/SP/Config/Config.class.php
@@ -0,0 +1,149 @@
+.
+ */
+
+namespace SP\Config;
+
+use ReflectionObject;
+use SP\Core\DiFactory;
+use SP\Core\Session;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Esta clase es responsable de leer y escribir la configuración del archivo config.php
+ */
+class Config
+{
+ /**
+ * @var ConfigData
+ */
+ private static $Config;
+
+ /**
+ * Cargar la configuración desde el archivo
+ *
+ * @param bool $reload
+ */
+ public static function loadConfig($reload = false)
+ {
+ $ConfigData = Session::getConfig();
+
+ if ($reload === true
+ || Session::getReload()
+ || !is_object($ConfigData)
+ || time() >= (Session::getConfigTime() + $ConfigData->getSessionTimeout() / 2)
+ ) {
+ Session::setConfig(self::arrayMapper());
+ Session::setConfigTime(time());
+ }
+ }
+
+ /**
+ * Mapear el array de elementos de configuración con las propieades de la
+ * clase ConfigData
+ *
+ * @return ConfigData
+ */
+ private static function arrayMapper()
+ {
+ if (is_object(self::$Config)) {
+ return self::$Config;
+ }
+
+ self::$Config = new ConfigData();
+
+ if (!file_exists(XML_CONFIG_FILE)) {
+ return self::$Config;
+ }
+
+ try {
+ $items = DiFactory::getConfigStorage()->load('config')->getItems();
+ $Reflection = new ReflectionObject(self::$Config);
+
+ foreach ($Reflection->getProperties() as $property) {
+ $property->setAccessible(true);
+ $property->setValue(self::$Config, @$items[$property->getName()]);
+ $property->setAccessible(false);
+ }
+ } catch (\Exception $e) {
+ }
+
+ return self::$Config;
+ }
+
+ /**
+ * @param ConfigData $Config
+ * @param bool $backup
+ */
+ public static function saveConfig(ConfigData $Config = null, $backup = true)
+ {
+ $ConfigData = null === $Config ? self::getConfig() : $Config;
+ $ConfigData->setConfigDate(time());
+ $ConfigData->setConfigSaver(Session::getUserData()->getUserLogin());
+ $ConfigData->setConfigHash();
+
+ DiFactory::getConfigStorage()->setItems($ConfigData);
+ DiFactory::getConfigStorage()->save('config');
+
+ if ($backup) {
+ self::backupToDB();
+ }
+ }
+
+ /**
+ * Obtener la configuración o devolver una nueva
+ *
+ * @return ConfigData
+ */
+ public static function getConfig()
+ {
+ $Config = Session::getConfig();
+
+ return is_object($Config) ? $Config : self::arrayMapper();
+ }
+
+ /**
+ * Realizar un backup de la configuración en la BD
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ private static function backupToDB()
+ {
+ $config = json_encode(self::getConfig());
+ ConfigDB::setValue('config_backup', $config, true, true);
+ ConfigDB::setValue('config_backupdate', time());
+ }
+
+ /**
+ * Restaurar la configuración desde la BD
+ *
+ * @return array
+ */
+ private static function restoreBackupFromDB()
+ {
+ $configBackup = ConfigDB::getValue('config_backup');
+
+ return json_decode($configBackup);
+ }
+}
diff --git a/inc/SP/Config/ConfigDB.class.php b/inc/SP/Config/ConfigDB.class.php
new file mode 100644
index 00000000..98167509
--- /dev/null
+++ b/inc/SP/Config/ConfigDB.class.php
@@ -0,0 +1,232 @@
+.
+ */
+
+namespace SP\Config;
+
+use SP\Core\Exceptions\SPException;
+use SP\Log\Email;
+use SP\Log\Log;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class ConfigDB para la gestión de la configuración en la BD
+ *
+ * @package SP
+ */
+class ConfigDB implements ConfigInterface
+{
+ /**
+ * @var array
+ */
+ protected static $cache;
+ /**
+ * @var bool
+ */
+ protected static $init;
+
+ /**
+ * Obtener un array con la configuración almacenada en la BBDD.
+ *
+ * @return bool
+ */
+ public static function readConfig()
+ {
+ $query = 'SELECT config_parameter, config_value FROM config';
+
+ $Data = new QueryData();
+ $Data->setUseKeyPair(true);
+ $Data->setQuery($query);
+
+ $queryRes = DB::getResults($Data);
+
+ if ($queryRes === false) {
+ return false;
+ }
+
+ self::$cache = $queryRes;
+
+ return $queryRes;
+ }
+
+ /**
+ * Guardar la configuración en la BBDD.
+ *
+ * @param bool $isInsert realizar un 'insert'?
+ * @return bool
+ */
+ public static function writeConfig($isInsert = false)
+ {
+ foreach (self::$cache as $param => $value) {
+ $Data = new QueryData();
+
+ if ($isInsert) {
+ $query = 'INSERT INTO config VALUES (:param,:value) ON DUPLICATE KEY UPDATE config_value = :valuedup';
+
+ $Data->addParam($value, 'valuedup');
+ } else {
+ $query = 'UPDATE config SET config_value = :value WHERE config_parameter = :param';
+ }
+
+ $Data->setQuery($query);
+ $Data->addParam($param, 'param');
+ $Data->addParam($value, 'value');
+
+ try {
+ DB::getQuery($Data);
+ } catch (SPException $e) {
+ return false;
+ }
+ }
+
+ $Log = new Log();
+ $LogMessage = $Log->getLogMessage();
+ $LogMessage->setAction(__('Configuración', false));
+ $LogMessage->addDescription(__('Modificar configuración', false));
+ $Log->writeLog();
+
+ Email::sendEmail($LogMessage);
+
+ return true;
+ }
+
+ /**
+ * Guardar un parámetro de configuración en la BBDD.
+ *
+ * @param string $param con el parámetro a guardar
+ * @param string $value con el valor a guardar
+ * @param bool $email enviar email?
+ * @param bool $hideValue Ocultar el valor del registro en el log
+ * @return bool
+ */
+ public static function setValue($param, $value, $email = true, $hideValue = false)
+ {
+ $query = /** @lang SQL */
+ 'INSERT INTO config '
+ . 'SET config_parameter = :param,'
+ . 'config_value = :value '
+ . 'ON DUPLICATE KEY UPDATE config_value = :valuedup';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($param, 'param');
+ $Data->addParam($value, 'value');
+ $Data->addParam($value, 'valuedup');
+
+ try {
+ DB::getQuery($Data);
+ } catch (SPException $e) {
+ return false;
+ }
+
+ $Log = new Log();
+ $LogMessage = $Log->getLogMessage();
+ $LogMessage->setAction(__('Configuración', false));
+ $LogMessage->addDescription(__('Modificar configuración', false));
+ $LogMessage->addDetails(__('Parámetro', false), $param);
+
+ if ($hideValue === false) {
+ $LogMessage->addDetails(__('Valor', false), $value);
+ }
+
+ $Log->writeLog();
+
+ if ($email === true) {
+ Email::sendEmail($LogMessage);
+ }
+
+ return true;
+ }
+
+ /**
+ * Actualizar el array de parámetros de configuración
+ *
+ * @param $param string La clave a actualizar
+ * @param $value mixed El valor a actualizar
+ */
+ public static function setCacheConfigValue($param, $value)
+ {
+ self::$cache[$param] = $value;
+ }
+
+ /**
+ * Obtener un parámetro del el array de parámetros de configuración
+ *
+ * @param null $param La clave a obtener
+ * @return mixed
+ */
+ public static function getCacheConfigValue($param = null)
+ {
+ if (null !== $param && isset(self::$cache[$param])) {
+ return self::$cache[$param];
+ }
+
+ return self::$cache;
+ }
+
+ /**
+ * Obtiene un valor desde la configuración en la BBDD.
+ *
+ * @param string $param con el parámetro de configuración
+ * @param string $default El valor por defecto
+ * @return false|string con el valor
+ */
+ public static function getValue($param, $default = null)
+ {
+ $query = 'SELECT config_value FROM config WHERE config_parameter = :param LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($param, 'param');
+
+ $queryRes = DB::getResults($Data);
+
+ if ($queryRes === false) {
+ return false;
+ }
+
+ return is_object($queryRes) ? $queryRes->config_value : $default;
+ }
+
+ /**
+ * Elimina un parámetro de la configuración.
+ *
+ * @param string $param clave
+ * @return bool
+ * @throws \SP\Core\Exceptions\QueryException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ */
+ public static function deleteParam($param)
+ {
+ $query = 'DELETE FROM config WHERE config_parameter = :param LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($param, 'param');
+
+ return DB::getQuery($Data);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Config/ConfigData.class.php b/inc/SP/Config/ConfigData.class.php
new file mode 100644
index 00000000..98d43b45
--- /dev/null
+++ b/inc/SP/Config/ConfigData.class.php
@@ -0,0 +1,1790 @@
+.
+ */
+
+namespace SP\Config;
+
+use JsonSerializable;
+
+/**
+ * Class ConfigData
+ *
+ * @package SP\Config
+ */
+class ConfigData implements JsonSerializable
+{
+ /**
+ * @var string
+ */
+ private $upgradeKey = '';
+ /**
+ * @var bool
+ */
+ private $dokuwikiEnabled = false;
+ /**
+ * @var string
+ */
+ private $dokuwikiUrl = '';
+ /**
+ * @var string
+ */
+ private $dokuwikiUrlBase = '';
+ /**
+ * @var string
+ */
+ private $dokuwikiUser = '';
+ /**
+ * @var string
+ */
+ private $dokuwikiPass = '';
+ /**
+ * @var string
+ */
+ private $dokuwikiNamespace = '';
+ /**
+ * @var int
+ */
+ private $ldapDefaultGroup = 0;
+ /**
+ * @var int
+ */
+ private $ldapDefaultProfile = 0;
+ /**
+ * @var bool
+ */
+ private $proxyEnabled = false;
+ /**
+ * @var string
+ */
+ private $proxyServer = '';
+ /**
+ * @var int
+ */
+ private $proxyPort = 8080;
+ /**
+ * @var string
+ */
+ private $proxyUser = '';
+ /**
+ * @var string
+ */
+ private $proxyPass = '';
+ /**
+ * @var int
+ */
+ private $publinksMaxViews = 3;
+ /**
+ * @var int
+ */
+ private $publinksMaxTime = 600;
+ /**
+ * @var bool
+ */
+ private $publinksEnabled = false;
+ /**
+ * @var int
+ */
+ private $accountCount = 12;
+ /**
+ * @var bool
+ */
+ private $accountLink = true;
+ /**
+ * @var bool
+ */
+ private $checkUpdates = false;
+ /**
+ * @var bool
+ */
+ private $checknotices = false;
+ /**
+ * @var string
+ */
+ private $configHash = '';
+ /**
+ * @var string
+ */
+ private $dbHost = '';
+ /**
+ * @var string
+ */
+ private $dbSocket;
+ /**
+ * @var string
+ */
+ private $dbName = '';
+ /**
+ * @var string
+ */
+ private $dbPass = '';
+ /**
+ * @var string
+ */
+ private $dbUser = '';
+ /**
+ * @var int
+ */
+ private $dbPort = 3306;
+ /**
+ * @var bool
+ */
+ private $debug = false;
+ /**
+ * @var bool
+ */
+ private $demoEnabled = false;
+ /**
+ * @var array
+ */
+ private $filesAllowedExts = ['PDF', 'JPG', 'GIF', 'PNG', 'ODT', 'ODS', 'DOC', 'DOCX', 'XLS', 'XSL', 'VSD', 'TXT', 'CSV', 'BAK'];
+ /**
+ * @var int
+ */
+ private $filesAllowedSize = 1024;
+ /**
+ * @var bool
+ */
+ private $filesEnabled = true;
+ /**
+ * @var bool
+ */
+ private $globalSearch = true;
+ /**
+ * @var bool
+ */
+ private $installed = false;
+ /**
+ * @var string
+ */
+ private $ldapBase = '';
+ /**
+ * @var string
+ */
+ private $ldapBindUser = '';
+ /**
+ * @var string
+ */
+ private $ldapBindPass = '';
+ /**
+ * @var string
+ */
+ private $ldapProxyUser = '';
+ /**
+ * @var bool
+ */
+ private $ldapEnabled = false;
+ /**
+ * @var bool
+ */
+ private $ldapAds = false;
+ /**
+ * @var string
+ */
+ private $ldapGroup = '';
+ /**
+ * @var string
+ */
+ private $ldapServer = '';
+ /**
+ * @var string
+ */
+ private $ldapUserattr = '';
+ /**
+ * @var bool
+ */
+ private $logEnabled = true;
+ /**
+ * @var bool
+ */
+ private $mailAuthenabled = false;
+ /**
+ * @var bool
+ */
+ private $mailEnabled = false;
+ /**
+ * @var string
+ */
+ private $mailFrom = '';
+ /**
+ * @var string
+ */
+ private $mailPass = '';
+ /**
+ * @var int
+ */
+ private $mailPort = 25;
+ /**
+ * @var bool
+ */
+ private $mailRequestsEnabled = false;
+ /**
+ * @var string
+ */
+ private $mailSecurity = '';
+ /**
+ * @var string
+ */
+ private $mailServer = '';
+ /**
+ * @var string
+ */
+ private $mailUser = '';
+ /**
+ * @var bool
+ */
+ private $maintenance = false;
+ /**
+ * @var string
+ */
+ private $passwordSalt = '';
+ /**
+ * @var bool
+ */
+ private $resultsAsCards = false;
+ /**
+ * @var int
+ */
+ private $sessionTimeout = 300;
+ /**
+ * @var string
+ */
+ private $siteLang = '';
+ /**
+ * @var string
+ */
+ private $siteTheme = 'material-blue';
+ /**
+ * @var int
+ */
+ private $configVersion = 0;
+ /**
+ * @var bool
+ */
+ private $wikiEnabled = false;
+ /**
+ * @var array
+ */
+ private $wikiFilter = [];
+ /**
+ * @var string
+ */
+ private $wikiPageurl = '';
+ /**
+ * @var string
+ */
+ private $wikiSearchurl = '';
+ /**
+ * @var int
+ */
+ private $configDate = 0;
+ /**
+ * @var bool
+ */
+ private $publinksImageEnabled = false;
+ /**
+ * @var string
+ */
+ private $backup_hash = '';
+ /**
+ * @var string
+ */
+ private $export_hash = '';
+ /**
+ * @var bool
+ */
+ private $httpsEnabled = false;
+ /**
+ * @var bool
+ */
+ private $syslogEnabled = false;
+ /**
+ * @var bool
+ */
+ private $syslogRemoteEnabled = false;
+ /**
+ * @var string
+ */
+ private $syslogServer = '';
+ /**
+ * @var int
+ */
+ private $syslogPort = 514;
+ /**
+ * @var bool
+ */
+ private $accountPassToImage = false;
+ /**
+ * @var string
+ */
+ private $configSaver = '';
+
+ /**
+ * @return boolean
+ */
+ public function isDokuwikiEnabled()
+ {
+ return $this->dokuwikiEnabled;
+ }
+
+ /**
+ * @param boolean $dokuwikiEnabled
+ * @return $this
+ */
+ public function setDokuwikiEnabled($dokuwikiEnabled)
+ {
+ $this->dokuwikiEnabled = (bool)$dokuwikiEnabled;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getDokuwikiUrl()
+ {
+ return $this->dokuwikiUrl;
+ }
+
+ /**
+ * @param string $dokuwikiUrl
+ * @return $this
+ */
+ public function setDokuwikiUrl($dokuwikiUrl)
+ {
+ $this->dokuwikiUrl = $dokuwikiUrl;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getDokuwikiUrlBase()
+ {
+ return $this->dokuwikiUrlBase;
+ }
+
+ /**
+ * @param string $dokuwikiUrlBase
+ * @return $this
+ */
+ public function setDokuwikiUrlBase($dokuwikiUrlBase)
+ {
+ $this->dokuwikiUrlBase = $dokuwikiUrlBase;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getDokuwikiUser()
+ {
+ return $this->dokuwikiUser;
+ }
+
+ /**
+ * @param string $dokuwikiUser
+ * @return $this
+ */
+ public function setDokuwikiUser($dokuwikiUser)
+ {
+ $this->dokuwikiUser = $dokuwikiUser;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getDokuwikiPass()
+ {
+ return $this->dokuwikiPass;
+ }
+
+ /**
+ * @param string $dokuwikiPass
+ * @return $this
+ */
+ public function setDokuwikiPass($dokuwikiPass)
+ {
+ $this->dokuwikiPass = $dokuwikiPass;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getDokuwikiNamespace()
+ {
+ return $this->dokuwikiNamespace;
+ }
+
+ /**
+ * @param string $dokuwikiNamespace
+ * @return $this
+ */
+ public function setDokuwikiNamespace($dokuwikiNamespace)
+ {
+ $this->dokuwikiNamespace = $dokuwikiNamespace;
+
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getLdapDefaultGroup()
+ {
+ return $this->ldapDefaultGroup;
+ }
+
+ /**
+ * @param int $ldapDefaultGroup
+ * @return $this
+ */
+ public function setLdapDefaultGroup($ldapDefaultGroup)
+ {
+ $this->ldapDefaultGroup = (int)$ldapDefaultGroup;
+
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getLdapDefaultProfile()
+ {
+ return $this->ldapDefaultProfile;
+ }
+
+ /**
+ * @param int $ldapDefaultProfile
+ * @return $this
+ */
+ public function setLdapDefaultProfile($ldapDefaultProfile)
+ {
+ $this->ldapDefaultProfile = (int)$ldapDefaultProfile;
+
+ return $this;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isProxyEnabled()
+ {
+ return $this->proxyEnabled;
+ }
+
+ /**
+ * @param boolean $proxyEnabled
+ * @return $this
+ */
+ public function setProxyEnabled($proxyEnabled)
+ {
+ $this->proxyEnabled = (bool)$proxyEnabled;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getProxyServer()
+ {
+ return $this->proxyServer;
+ }
+
+ /**
+ * @param string $proxyServer
+ * @return $this
+ */
+ public function setProxyServer($proxyServer)
+ {
+ $this->proxyServer = $proxyServer;
+
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getProxyPort()
+ {
+ return $this->proxyPort;
+ }
+
+ /**
+ * @param int $proxyPort
+ * @return $this
+ */
+ public function setProxyPort($proxyPort)
+ {
+ $this->proxyPort = (int)$proxyPort;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getProxyUser()
+ {
+ return $this->proxyUser;
+ }
+
+ /**
+ * @param string $proxyUser
+ * @return $this
+ */
+ public function setProxyUser($proxyUser)
+ {
+ $this->proxyUser = $proxyUser;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getProxyPass()
+ {
+ return $this->proxyPass;
+ }
+
+ /**
+ * @param string $proxyPass
+ * @return $this
+ */
+ public function setProxyPass($proxyPass)
+ {
+ $this->proxyPass = $proxyPass;
+
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getPublinksMaxViews()
+ {
+ return $this->publinksMaxViews;
+ }
+
+
+ /**
+ * @param int $publinksMaxViews
+ * @return $this
+ */
+ public function setPublinksMaxViews($publinksMaxViews)
+ {
+ $this->publinksMaxViews = (int)$publinksMaxViews;
+
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getPublinksMaxTime()
+ {
+ return $this->publinksMaxTime;
+ }
+
+ /**
+ * @param int $publinksMaxTime
+ * @return $this
+ */
+ public function setPublinksMaxTime($publinksMaxTime)
+ {
+ $this->publinksMaxTime = (int)$publinksMaxTime;
+
+ return $this;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isSyslogEnabled()
+ {
+ return $this->syslogEnabled;
+ }
+
+ /**
+ * @param boolean $syslogEnabled
+ * @return $this
+ */
+ public function setSyslogEnabled($syslogEnabled)
+ {
+ $this->syslogEnabled = (bool)$syslogEnabled;
+
+ return $this;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isSyslogRemoteEnabled()
+ {
+ return $this->syslogRemoteEnabled;
+ }
+
+ /**
+ * @param boolean $syslogRemoteEnabled
+ * @return $this
+ */
+ public function setSyslogRemoteEnabled($syslogRemoteEnabled)
+ {
+ $this->syslogRemoteEnabled = (bool)$syslogRemoteEnabled;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getSyslogServer()
+ {
+ return $this->syslogServer;
+ }
+
+ /**
+ * @param string $syslogServer
+ * @return $this
+ */
+ public function setSyslogServer($syslogServer)
+ {
+ $this->syslogServer = $syslogServer;
+
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getSyslogPort()
+ {
+ return $this->syslogPort;
+ }
+
+ /**
+ * @param int $syslogPort
+ * @return $this
+ */
+ public function setSyslogPort($syslogPort)
+ {
+ $this->syslogPort = (int)$syslogPort;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getBackupHash()
+ {
+ return $this->backup_hash;
+ }
+
+ /**
+ * @param string $backup_hash
+ * @return $this
+ */
+ public function setBackupHash($backup_hash)
+ {
+ $this->backup_hash = $backup_hash;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getExportHash()
+ {
+ return $this->export_hash;
+ }
+
+ /**
+ * @param string $export_hash
+ * @return $this
+ */
+ public function setExportHash($export_hash)
+ {
+ $this->export_hash = $export_hash;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getLdapBindUser()
+ {
+ return $this->ldapBindUser;
+ }
+
+ /**
+ * @param string $ldapBindUser
+ * @return $this
+ */
+ public function setLdapBindUser($ldapBindUser)
+ {
+ $this->ldapBindUser = $ldapBindUser;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getLdapProxyUser()
+ {
+ return $this->ldapProxyUser;
+ }
+
+ /**
+ * @param string $ldapProxyUser
+ * @return $this
+ */
+ public function setLdapProxyUser($ldapProxyUser)
+ {
+ $this->ldapProxyUser = $ldapProxyUser;
+
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getAccountCount()
+ {
+ return $this->accountCount;
+ }
+
+ /**
+ * @param int $accountCount
+ * @return $this
+ */
+ public function setAccountCount($accountCount)
+ {
+ $this->accountCount = (int)$accountCount;
+
+ return $this;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isAccountLink()
+ {
+ return $this->accountLink;
+ }
+
+ /**
+ * @param boolean $accountLink
+ * @return $this
+ */
+ public function setAccountLink($accountLink)
+ {
+ $this->accountLink = (bool)$accountLink;
+
+ return $this;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isCheckUpdates()
+ {
+ return $this->checkUpdates;
+ }
+
+ /**
+ * @param boolean $checkUpdates
+ * @return $this
+ */
+ public function setCheckUpdates($checkUpdates)
+ {
+ $this->checkUpdates = (bool)$checkUpdates;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getConfigHash()
+ {
+ return $this->configHash;
+ }
+
+ /**
+ *
+ */
+ public function setConfigHash()
+ {
+ $this->configHash = md5(serialize($this));
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getDbHost()
+ {
+ return $this->dbHost;
+ }
+
+ /**
+ * @param string $dbHost
+ * @return $this
+ */
+ public function setDbHost($dbHost)
+ {
+ $this->dbHost = $dbHost;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getDbName()
+ {
+ return $this->dbName;
+ }
+
+ /**
+ * @param string $dbName
+ * @return $this
+ */
+ public function setDbName($dbName)
+ {
+ $this->dbName = $dbName;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getDbPass()
+ {
+ return $this->dbPass;
+ }
+
+ /**
+ * @param string $dbPass
+ * @return $this
+ */
+ public function setDbPass($dbPass)
+ {
+ $this->dbPass = $dbPass;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getDbUser()
+ {
+ return $this->dbUser;
+ }
+
+ /**
+ * @param string $dbUser
+ * @return $this
+ */
+ public function setDbUser($dbUser)
+ {
+ $this->dbUser = $dbUser;
+
+ return $this;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isDebug()
+ {
+ return $this->debug;
+ }
+
+ /**
+ * @param boolean $debug
+ * @return $this
+ */
+ public function setDebug($debug)
+ {
+ $this->debug = (bool)$debug;
+
+ return $this;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isDemoEnabled()
+ {
+ return $this->demoEnabled;
+ }
+
+ /**
+ * @param boolean $demoEnabled
+ * @return $this
+ */
+ public function setDemoEnabled($demoEnabled)
+ {
+ $this->demoEnabled = (bool)$demoEnabled;
+
+ return $this;
+ }
+
+ /**
+ * @return array
+ */
+ public function getFilesAllowedExts()
+ {
+ return is_array($this->filesAllowedExts) ? $this->filesAllowedExts : [];
+ }
+
+ /**
+ * @param array $filesAllowedExts
+ * @return $this
+ */
+ public function setFilesAllowedExts($filesAllowedExts = [])
+ {
+ if (!is_array($filesAllowedExts)) {
+ $filesAllowedExts = ConfigUtil::filesExtsAdapter($filesAllowedExts);
+ }
+
+ $this->filesAllowedExts = $filesAllowedExts;
+
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getFilesAllowedSize()
+ {
+ return $this->filesAllowedSize;
+ }
+
+ /**
+ * @param int $filesAllowedSize
+ * @return $this
+ */
+ public function setFilesAllowedSize($filesAllowedSize)
+ {
+ $this->filesAllowedSize = (int)$filesAllowedSize;
+
+ return $this;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isFilesEnabled()
+ {
+ return $this->filesEnabled;
+ }
+
+ /**
+ * @param boolean $filesEnabled
+ * @return $this
+ */
+ public function setFilesEnabled($filesEnabled)
+ {
+ $this->filesEnabled = (bool)$filesEnabled;
+
+ return $this;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isGlobalSearch()
+ {
+ return $this->globalSearch;
+ }
+
+ /**
+ * @param boolean $globalSearch
+ * @return $this
+ */
+ public function setGlobalSearch($globalSearch)
+ {
+ $this->globalSearch = (bool)$globalSearch;
+
+ return $this;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isInstalled()
+ {
+ return $this->installed;
+ }
+
+ /**
+ * @param boolean $installed
+ * @return $this
+ */
+ public function setInstalled($installed)
+ {
+ $this->installed = (bool)$installed;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getLdapBase()
+ {
+ return $this->ldapBase;
+ }
+
+ /**
+ * @param string $ldapBase
+ * @return $this
+ */
+ public function setLdapBase($ldapBase)
+ {
+ $this->ldapBase = $ldapBase;
+
+ return $this;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isLdapEnabled()
+ {
+ return $this->ldapEnabled;
+ }
+
+ /**
+ * @param boolean $ldapEnabled
+ * @return $this
+ */
+ public function setLdapEnabled($ldapEnabled)
+ {
+ $this->ldapEnabled = (bool)$ldapEnabled;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getLdapGroup()
+ {
+ return $this->ldapGroup;
+ }
+
+ /**
+ * @param string $ldapGroup
+ * @return $this
+ */
+ public function setLdapGroup($ldapGroup)
+ {
+ $this->ldapGroup = $ldapGroup;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getLdapServer()
+ {
+ return $this->ldapServer;
+ }
+
+ /**
+ * @param string $ldapServer
+ * @return $this
+ */
+ public function setLdapServer($ldapServer)
+ {
+ $this->ldapServer = $ldapServer;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getLdapUserattr()
+ {
+ return $this->ldapUserattr;
+ }
+
+ /**
+ * @param string $ldapUserattr
+ * @return $this
+ */
+ public function setLdapUserattr($ldapUserattr)
+ {
+ $this->ldapUserattr = $ldapUserattr;
+
+ return $this;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isLogEnabled()
+ {
+ return $this->logEnabled;
+ }
+
+ /**
+ * @param boolean $logEnabled
+ * @return $this
+ */
+ public function setLogEnabled($logEnabled)
+ {
+ $this->logEnabled = (bool)$logEnabled;
+
+ return $this;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isMailAuthenabled()
+ {
+ return $this->mailAuthenabled;
+ }
+
+ /**
+ * @param boolean $mailAuthenabled
+ * @return $this
+ */
+ public function setMailAuthenabled($mailAuthenabled)
+ {
+ $this->mailAuthenabled = (bool)$mailAuthenabled;
+
+ return $this;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isMailEnabled()
+ {
+ return $this->mailEnabled;
+ }
+
+ /**
+ * @param boolean $mailEnabled
+ * @return $this
+ */
+ public function setMailEnabled($mailEnabled)
+ {
+ $this->mailEnabled = (bool)$mailEnabled;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getMailFrom()
+ {
+ return $this->mailFrom;
+ }
+
+ /**
+ * @param string $mailFrom
+ * @return $this
+ */
+ public function setMailFrom($mailFrom)
+ {
+ $this->mailFrom = $mailFrom;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getMailPass()
+ {
+ return $this->mailPass;
+ }
+
+ /**
+ * @param string $mailPass
+ * @return $this
+ */
+ public function setMailPass($mailPass)
+ {
+ $this->mailPass = $mailPass;
+
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getMailPort()
+ {
+ return $this->mailPort;
+ }
+
+ /**
+ * @param int $mailPort
+ * @return $this
+ */
+ public function setMailPort($mailPort)
+ {
+ $this->mailPort = (int)$mailPort;
+
+ return $this;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isMailRequestsEnabled()
+ {
+ return $this->mailRequestsEnabled;
+ }
+
+ /**
+ * @param boolean $mailRequestsEnabled
+ * @return $this
+ */
+ public function setMailRequestsEnabled($mailRequestsEnabled)
+ {
+ $this->mailRequestsEnabled = (bool)$mailRequestsEnabled;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getMailSecurity()
+ {
+ return $this->mailSecurity;
+ }
+
+ /**
+ * @param string $mailSecurity
+ * @return $this
+ */
+ public function setMailSecurity($mailSecurity)
+ {
+ $this->mailSecurity = $mailSecurity;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getMailServer()
+ {
+ return $this->mailServer;
+ }
+
+ /**
+ * @param string $mailServer
+ * @return $this
+ */
+ public function setMailServer($mailServer)
+ {
+ $this->mailServer = $mailServer;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getMailUser()
+ {
+ return $this->mailUser;
+ }
+
+ /**
+ * @param string $mailUser
+ * @return $this
+ */
+ public function setMailUser($mailUser)
+ {
+ $this->mailUser = $mailUser;
+
+ return $this;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isMaintenance()
+ {
+ return $this->maintenance;
+ }
+
+ /**
+ * @param boolean $maintenance
+ * @return $this
+ */
+ public function setMaintenance($maintenance)
+ {
+ $this->maintenance = (bool)$maintenance;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getPasswordSalt()
+ {
+ return $this->passwordSalt;
+ }
+
+ /**
+ * @param string $passwordSalt
+ * @return $this
+ */
+ public function setPasswordSalt($passwordSalt)
+ {
+ $this->passwordSalt = $passwordSalt;
+
+ return $this;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isResultsAsCards()
+ {
+ return $this->resultsAsCards;
+ }
+
+ /**
+ * @param boolean $resultsAsCards
+ * @return $this
+ */
+ public function setResultsAsCards($resultsAsCards)
+ {
+ $this->resultsAsCards = (bool)$resultsAsCards;
+
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getSessionTimeout()
+ {
+ return $this->sessionTimeout;
+ }
+
+ /**
+ * @param int $sessionTimeout
+ * @return $this
+ */
+ public function setSessionTimeout($sessionTimeout)
+ {
+ $this->sessionTimeout = (int)$sessionTimeout;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getSiteLang()
+ {
+ return $this->siteLang;
+ }
+
+ /**
+ * @param string $siteLang
+ * @return $this
+ */
+ public function setSiteLang($siteLang)
+ {
+ $this->siteLang = $siteLang;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getSiteTheme()
+ {
+ return $this->siteTheme;
+ }
+
+ /**
+ * @param string $siteTheme
+ * @return $this
+ */
+ public function setSiteTheme($siteTheme)
+ {
+ $this->siteTheme = $siteTheme;
+
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getConfigVersion()
+ {
+ return $this->configVersion;
+ }
+
+ /**
+ * @param int $configVersion
+ * @return $this
+ */
+ public function setConfigVersion($configVersion)
+ {
+ $this->configVersion = (int)$configVersion;
+
+ return $this;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isWikiEnabled()
+ {
+ return $this->wikiEnabled;
+ }
+
+ /**
+ * @param boolean $wikiEnabled
+ * @return $this
+ */
+ public function setWikiEnabled($wikiEnabled)
+ {
+ $this->wikiEnabled = (bool)$wikiEnabled;
+
+ return $this;
+ }
+
+ /**
+ * @return array
+ */
+ public function getWikiFilter()
+ {
+ return is_array($this->wikiFilter) ? $this->wikiFilter : [];
+ }
+
+ /**
+ * @param array $wikiFilter
+ * @return $this
+ */
+ public function setWikiFilter($wikiFilter)
+ {
+ $this->wikiFilter = $wikiFilter;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getWikiPageurl()
+ {
+ return $this->wikiPageurl;
+ }
+
+ /**
+ * @param string $wikiPageurl
+ * @return $this
+ */
+ public function setWikiPageurl($wikiPageurl)
+ {
+ $this->wikiPageurl = $wikiPageurl;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getWikiSearchurl()
+ {
+ return $this->wikiSearchurl;
+ }
+
+ /**
+ * @param string $wikiSearchurl
+ * @return $this
+ */
+ public function setWikiSearchurl($wikiSearchurl)
+ {
+ $this->wikiSearchurl = $wikiSearchurl;
+
+ return $this;
+ }
+
+ /**
+ * @param int $configDate
+ * @return $this
+ */
+ public function setConfigDate($configDate)
+ {
+ $this->configDate = (int)$configDate;
+
+ return $this;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isLdapAds()
+ {
+ return $this->ldapAds;
+ }
+
+ /**
+ * @param boolean $ldapAds
+ * @return $this
+ */
+ public function setLdapAds($ldapAds)
+ {
+ $this->ldapAds = (bool)$ldapAds;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getLdapBindPass()
+ {
+ return $this->ldapBindPass;
+ }
+
+ /**
+ * @param string $ldapBindPass
+ * @return $this
+ */
+ public function setLdapBindPass($ldapBindPass)
+ {
+ $this->ldapBindPass = $ldapBindPass;
+
+ return $this;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isPublinksImageEnabled()
+ {
+ return $this->publinksImageEnabled;
+ }
+
+ /**
+ * @param boolean $publinksImageEnabled
+ * @return $this
+ */
+ public function setPublinksImageEnabled($publinksImageEnabled)
+ {
+ $this->publinksImageEnabled = (bool)$publinksImageEnabled;
+
+ return $this;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isHttpsEnabled()
+ {
+ return $this->httpsEnabled;
+ }
+
+ /**
+ * @param boolean $httpsEnabled
+ * @return $this
+ */
+ public function setHttpsEnabled($httpsEnabled)
+ {
+ $this->httpsEnabled = (bool)$httpsEnabled;
+
+ return $this;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isChecknotices()
+ {
+ return $this->checknotices;
+ }
+
+ /**
+ * @param boolean $checknotices
+ * @return $this
+ */
+ public function setChecknotices($checknotices)
+ {
+ $this->checknotices = $checknotices;
+
+ return $this;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isAccountPassToImage()
+ {
+ return $this->accountPassToImage;
+ }
+
+ /**
+ * @param boolean $accountPassToImage
+ * @return $this
+ */
+ public function setAccountPassToImage($accountPassToImage)
+ {
+ $this->accountPassToImage = (bool)$accountPassToImage;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getUpgradeKey()
+ {
+ return $this->upgradeKey;
+ }
+
+ /**
+ * @param string $upgradeKey
+ * @return $this
+ */
+ public function setUpgradeKey($upgradeKey)
+ {
+ $this->upgradeKey = $upgradeKey;
+
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getDbPort()
+ {
+ return $this->dbPort;
+ }
+
+ /**
+ * @param int $dbPort
+ * @return $this
+ */
+ public function setDbPort($dbPort)
+ {
+ $this->dbPort = intval($dbPort);
+
+ return $this;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isPublinksEnabled()
+ {
+ return $this->publinksEnabled;
+ }
+
+ /**
+ * @param boolean $publinksEnabled
+ * @return $this
+ */
+ public function setPublinksEnabled($publinksEnabled)
+ {
+ $this->publinksEnabled = (bool)$publinksEnabled;
+
+ return $this;
+ }
+
+ /**
+ * Specify data which should be serialized to JSON
+ *
+ * @link http://php.net/manual/en/jsonserializable.jsonserialize.php
+ * @return mixed data which can be serialized by json_encode,
+ * which is a value of any type other than a resource.
+ * @since 5.4.0
+ */
+ public function jsonSerialize()
+ {
+ return get_object_vars($this);
+ }
+
+ /**
+ * @return string
+ */
+ public function getConfigSaver()
+ {
+ return $this->configSaver;
+ }
+
+ /**
+ * @param string $configSaver
+ * @return $this
+ */
+ public function setConfigSaver($configSaver)
+ {
+ $this->configSaver = $configSaver;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getDbSocket()
+ {
+ return $this->dbSocket;
+ }
+
+ /**
+ * @param string $dbSocket
+ */
+ public function setDbSocket($dbSocket)
+ {
+ $this->dbSocket = $dbSocket;
+ }
+}
\ No newline at end of file
diff --git a/inc/ConfigInterface.class.php b/inc/SP/Config/ConfigInterface.class.php
similarity index 71%
rename from inc/ConfigInterface.class.php
rename to inc/SP/Config/ConfigInterface.class.php
index 7b8c9647..9b46f332 100644
--- a/inc/ConfigInterface.class.php
+++ b/inc/SP/Config/ConfigInterface.class.php
@@ -2,9 +2,9 @@
/**
* sysPass
*
- * @author nuxsmin
- * @link http://syspass.org
- * @copyright 2012-2015 Rubén Domínguez nuxsmin@syspass.org
+ * @author nuxsmin
+ * @link http://syspass.org
+ * @copyright 2012-2017, Rubén Domínguez nuxsmin@$syspass.org
*
* This file is part of sysPass.
*
@@ -19,13 +19,12 @@
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with sysPass. If not, see .
- *
+ * along with sysPass. If not, see .
*/
-namespace SP;
+namespace SP\Config;
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+defined('APP_ROOT') || die();
/**
* Interface ConfigInterface para las clases que gestionan la configuración de sysPass
@@ -41,16 +40,18 @@ interface ConfigInterface
* @param string $default El valor por defecto
* @return string el valor o $default
*/
- static function getValue($param, $default = null);
+ public static function getValue($param, $default = null);
/**
* Guardar un parámetro de configuración
*
* @param string $param El parámetro a guardar
* @param string $value El valor a guardar
+ * @param bool $email enviar email?
+ * @param bool $hideValue Ocultar el valor del registro en el log
* @return bool
*/
- static function setValue($param, $value);
+ public static function setValue($param, $value, $email = true, $hideValue = false);
/**
* Elimina un parámetro de la configuración.
@@ -58,7 +59,7 @@ interface ConfigInterface
* @param string $param clave
* @return bool
*/
- static function deleteParam($param);
+ public static function deleteParam($param);
/**
* Actualizar el array de parámetros de configuración
@@ -66,19 +67,19 @@ interface ConfigInterface
* @param $param string El parámetro a actualizar
* @param $value mixed El valor a actualizar
*/
- static function setCacheConfigValue($param, $value);
+ public static function setCacheConfigValue($param, $value);
/**
* Obtener un parámetro del array de parámetros de configuración
*
* @param $param string El parámetro a devolver
*/
- static function getCacheConfigValue($param);
+ public static function getCacheConfigValue($param);
/**
* Obtener un array con la configuración almacenada.
*
* @return bool
*/
- static function readConfig();
+ public static function readConfig();
}
\ No newline at end of file
diff --git a/inc/SP/Config/ConfigUtil.class.php b/inc/SP/Config/ConfigUtil.class.php
new file mode 100644
index 00000000..19402672
--- /dev/null
+++ b/inc/SP/Config/ConfigUtil.class.php
@@ -0,0 +1,51 @@
+.
+ */
+
+namespace SP\Config;
+
+/**
+ * Class ConfigUtil
+ * @package Config
+ */
+class ConfigUtil
+{
+ /**
+ * Adaptador para convertir una cadena de extensiones a un array
+ *
+ * @param $filesAllowedExts
+ * @return array
+ */
+ public static function filesExtsAdapter(&$filesAllowedExts)
+ {
+ $exts = explode(',', $filesAllowedExts);
+
+ array_walk($exts, function (&$value) {
+ if (preg_match('/[^a-z0-9_-]+/i', $value)) {
+ $value = null;
+ }
+ });
+
+ return $exts;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Controller/AccountController.class.php b/inc/SP/Controller/AccountController.class.php
new file mode 100644
index 00000000..9de37705
--- /dev/null
+++ b/inc/SP/Controller/AccountController.class.php
@@ -0,0 +1,571 @@
+.
+ */
+
+namespace SP\Controller;
+
+defined('APP_ROOT') || die();
+
+use SP\Account\Account;
+use SP\Account\AccountAcl;
+use SP\Account\AccountHistory;
+use SP\Account\AccountUtil;
+use SP\Account\UserAccounts;
+use SP\Config\Config;
+use SP\Core\Acl;
+use SP\Core\ActionsInterface;
+use SP\Core\Crypt;
+use SP\Core\Exceptions\SPException;
+use SP\Core\Init;
+use SP\Core\Session;
+use SP\Core\SessionUtil;
+use SP\Core\Template;
+use SP\DataModel\AccountExtData;
+use SP\DataModel\CustomFieldData;
+use SP\DataModel\PublicLinkData;
+use SP\Mgmt\Categories\Category;
+use SP\Mgmt\Customers\Customer;
+use SP\Mgmt\CustomFields\CustomField;
+use SP\Mgmt\Groups\Group;
+use SP\Mgmt\Groups\GroupAccountsUtil;
+use SP\Mgmt\PublicLinks\PublicLink;
+use SP\Mgmt\Tags\Tag;
+use SP\Mgmt\Users\UserPass;
+use SP\Mgmt\Users\UserUtil;
+use SP\Util\Checks;
+use SP\Util\ImageUtil;
+use SP\Util\Json;
+
+/**
+ * Clase encargada de preparar la presentación de las vistas de una cuenta
+ *
+ * @package Controller
+ */
+class AccountController extends ControllerBase implements ActionsInterface
+{
+ /**
+ * @var AccountAcl
+ */
+ protected $AccountAcl;
+ /**
+ * @var Account|AccountHistory instancia para el manejo de datos de una cuenta
+ */
+ private $Account;
+ /**
+ * @var int con el id de la cuenta
+ */
+ private $id;
+ /**
+ * @var AccountExtData
+ */
+ private $AccountData;
+
+ /**
+ * Constructor
+ *
+ * @param Template $template instancia del motor de plantillas
+ * @param int $accountId int con el id de la cuenta
+ * @internal param int $lastAction int con la última acción realizada
+ */
+ public function __construct(Template $template = null, $accountId = null)
+ {
+ parent::__construct($template);
+
+ $this->setId($accountId);
+
+ $this->view->assign('changesHash', '');
+ $this->view->assign('chkUserEdit', '');
+ $this->view->assign('chkGroupEdit', '');
+ $this->view->assign('gotData', $this->isGotData());
+ $this->view->assign('isView', false);
+ $this->view->assign('sk', SessionUtil::getSessionKey(true));
+ }
+
+ /**
+ * @param int $id
+ */
+ private function setId($id)
+ {
+ $this->id = $id;
+ }
+
+ /**
+ * @return boolean
+ */
+ private function isGotData()
+ {
+ return $this->AccountData !== null;
+ }
+
+ /**
+ * Obtener la vista de detalles de cuenta para enlaces públicos
+ *
+ * @param PublicLinkData $PublicLinkData
+ * @return bool
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \SP\Core\Exceptions\FileNotFoundException
+ * @throws \SP\Core\Exceptions\QueryException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ *
+ */
+ public function getAccountFromLink(PublicLinkData $PublicLinkData)
+ {
+ $this->setAction(self::ACTION_ACC_VIEW);
+
+ // Obtener los datos de la cuenta antes y comprobar el acceso
+ if (!$this->setAccountData()) {
+ return false;
+ }
+
+ $this->view->addTemplate('account-link');
+ $this->view->assign('title',
+ [
+ 'class' => 'titleNormal',
+ 'name' => __('Detalles de Cuenta'),
+ 'icon' => $this->icons->getIconView()->getIcon()
+ ]
+ );
+ $this->Account->incrementViewCounter();
+ $this->Account->incrementDecryptCounter();
+ $AccountPassData = $this->Account->getAccountPassData();
+
+ // Desencriptar la clave de la cuenta
+ $pass = Crypt::generateAesKey($PublicLinkData->getLinkHash());
+ $masterPass = Crypt::getDecrypt($PublicLinkData->getPass(), $PublicLinkData->getPassIV(), $pass);
+ $accountPass = Crypt::getDecrypt($AccountPassData->getAccountPass(), $AccountPassData->getAccountIV(), $masterPass);
+
+ $this->view->assign('useImage', Config::getConfig()->isPublinksImageEnabled() || Config::getConfig()->isAccountPassToImage());
+
+ if ($this->view->useImage) {
+ $accountPass = ImageUtil::convertText($accountPass);
+ }
+
+ $this->view->assign('accountPass', $accountPass);
+ }
+
+ /**
+ * Establecer las variables que contienen la información de la cuenta.
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ private function setAccountData()
+ {
+ $Account = new Account(new AccountExtData($this->getId()));
+ $this->Account = $Account;
+ $this->AccountData = $Account->getData();
+
+ $this->view->assign('accountId', $this->getId());
+ $this->view->assign('accountData', $this->AccountData);
+ $this->view->assign('gotData', $this->isGotData());
+
+ return true;
+ }
+
+ /**
+ * @return int
+ */
+ private function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * Realizar las acciones del controlador
+ *
+ * @param mixed $type Tipo de acción
+ */
+ public function doAction($type = null)
+ {
+ try {
+ switch ($type) {
+ case ActionsInterface::ACTION_ACC_NEW:
+ $this->getNewAccount();
+ $this->EventDispatcher->notifyEvent('show.account.new', $this);
+ break;
+ case ActionsInterface::ACTION_ACC_COPY:
+ $this->getCopyAccount();
+ $this->EventDispatcher->notifyEvent('show.account.copy', $this);
+ break;
+ case ActionsInterface::ACTION_ACC_EDIT:
+ $this->getEditAccount();
+ $this->EventDispatcher->notifyEvent('show.account.edit', $this);
+ break;
+ case ActionsInterface::ACTION_ACC_EDIT_PASS:
+ $this->getEditPassAccount();
+ $this->EventDispatcher->notifyEvent('show.account.editpass', $this);
+ break;
+ case ActionsInterface::ACTION_ACC_VIEW:
+ $this->getViewAccount();
+ $this->EventDispatcher->notifyEvent('show.account.view', $this);
+ break;
+ case ActionsInterface::ACTION_ACC_VIEW_HISTORY:
+ $this->getViewHistoryAccount();
+ $this->EventDispatcher->notifyEvent('show.account.viewhistory', $this);
+ break;
+ case ActionsInterface::ACTION_ACC_DELETE:
+ $this->getDeleteAccount();
+ $this->EventDispatcher->notifyEvent('show.account.delete', $this);
+ break;
+ case ActionsInterface::ACTION_ACC_REQUEST:
+ $this->getRequestAccountAccess();
+ $this->EventDispatcher->notifyEvent('show.account.request', $this);
+ break;
+ }
+ } catch (SPException $e) {
+ $this->showError(self::ERR_EXCEPTION);
+ }
+ }
+
+ /**
+ * Obtener los datos para mostrar el interface para nueva cuenta
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function getNewAccount()
+ {
+ $this->setAction(self::ACTION_ACC_NEW);
+
+ if (!$this->checkAccess()) {
+ return;
+ }
+
+ $this->view->addTemplate('account');
+ $this->view->assign('title',
+ [
+ 'class' => 'titleGreen',
+ 'name' => __('Nueva Cuenta'),
+ 'icon' => $this->icons->getIconAdd()->getIcon()
+ ]
+ );
+
+ Session::setLastAcountId(0);
+ $this->setCommonData();
+ }
+
+ /**
+ * Comprobar si el usuario dispone de acceso al módulo
+ *
+ * @param null $action
+ * @return bool
+ */
+ protected function checkAccess($action = null)
+ {
+ $this->view->assign('showLogo', false);
+
+ $Acl = new AccountAcl($this->Account, $this->getAction());
+ $this->AccountAcl = $Acl;
+
+ if (!Acl::checkUserAccess($this->getAction())) {
+ $this->showError(self::ERR_PAGE_NO_PERMISSION);
+ return false;
+ } elseif (!UserPass::getItem($this->UserData)->checkUserUpdateMPass()) {
+ $this->showError(self::ERR_UPDATE_MPASS);
+ return false;
+ } elseif ($this->id > 0) {
+ $this->AccountAcl = $Acl->getAcl();
+
+ if (!$this->AccountAcl->checkAccountAccess()) {
+ $this->showError(self::ERR_ACCOUNT_NO_PERMISSION);
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Establecer variables comunes del formulario para todos los interfaces
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ private function setCommonData()
+ {
+ $this->getCustomFieldsForItem();
+
+ if ($this->isGotData()) {
+ $this->view->assign('accountIsHistory', $this->getAccount()->getAccountIsHistory());
+ $this->view->assign('accountOtherUsers', UserAccounts::getUsersInfoForAccount($this->getId()));
+ $this->view->assign('accountOtherGroups', GroupAccountsUtil::getGroupsInfoForAccount($this->getId()));
+ $this->view->assign('accountTagsJson', Json::getJson(array_keys($this->getAccount()->getAccountData()->getTags())));
+ $this->view->assign('historyData', AccountHistory::getAccountList($this->AccountData->getAccountId()));
+ $this->view->assign('isModified', strtotime($this->AccountData->getAccountDateEdit()) !== false);
+ $this->view->assign('maxFileSize', round(Config::getConfig()->getFilesAllowedSize() / 1024, 1));
+ $this->view->assign('filesAllowedExts', implode(',', Config::getConfig()->getFilesAllowedExts()));
+
+ $PublicLinkData = PublicLink::getItem()->getHashForItem($this->getId());
+
+ $publicLinkUrl = (Checks::publicLinksIsEnabled() && $PublicLinkData ? Init::$WEBURI . '/index.php?h=' . $PublicLinkData->getPublicLinkHash() . '&a=link' : '');
+ $this->view->assign('publicLinkUrl', $publicLinkUrl);
+
+ $this->view->assign('accountPassDate', date('Y-m-d H:i:s', $this->AccountData->getAccountPassDate()));
+ $this->view->assign('accountPassDateChange', date('Y-m-d', $this->AccountData->getAccountPassDateChange() ?: 0));
+ } else {
+ $this->view->assign('accountPassDateChange', date('Y-m-d', time() + 7776000));
+ }
+
+ $this->view->assign('actionId', $this->getAction());
+ $this->view->assign('categories', Category::getItem()->getItemsForSelect());
+ $this->view->assign('customers', Customer::getItem()->getItemsForSelectByUser());
+ $this->view->assign('otherUsers', UserUtil::getUsersLogin());
+ $this->view->assign('otherUsersJson', Json::getJson($this->view->otherUsers));
+ $this->view->assign('otherGroups', Group::getItem()->getItemsForSelect());
+ $this->view->assign('otherGroupsJson', Json::getJson($this->view->otherGroups));
+ $this->view->assign('tagsJson', Json::getJson(Tag::getItem()->getItemsForSelect()));
+ $this->view->assign('allowPrivate', $this->UserProfileData->isAccPrivate());
+ $this->view->assign('allowPrivateGroup', $this->UserProfileData->isAccPrivateGroup());
+
+ $this->view->assign('otherAccounts', AccountUtil::getAccountsForUser($this->getId()));
+ $this->view->assign('linkedAccounts', AccountUtil::getLinkedAccounts($this->getId()));
+
+ $this->view->assign('disabled', $this->view->isView ? 'disabled' : '');
+ $this->view->assign('readonly', $this->view->isView ? 'readonly' : '');
+
+ $this->view->assign('showViewCustomPass', $this->AccountAcl->isShowViewPass());
+ $this->view->assign('AccountAcl', $this->AccountAcl);
+ }
+
+ /**
+ * Obtener la lista de campos personalizados y sus valores
+ */
+ private function getCustomFieldsForItem()
+ {
+ $this->view->assign('customFields', CustomField::getItem(new CustomFieldData(ActionsInterface::ACTION_ACC))->getById($this->getId()));
+ }
+
+ /**
+ * @return \SP\Account\Account|AccountHistory
+ */
+ private function getAccount()
+ {
+ return $this->Account ?: new Account(new AccountExtData());
+ }
+
+ /**
+ * Obtener los datos para mostrar el interface para copiar cuenta
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function getCopyAccount()
+ {
+ $this->setAction(self::ACTION_ACC_COPY);
+
+ // Obtener los datos de la cuenta antes y comprobar el acceso
+ $isOk = ($this->setAccountData() && $this->checkAccess());
+
+ if (!$isOk) {
+ return;
+ }
+
+ $this->view->addTemplate('account');
+ $this->view->assign('title',
+ [
+ 'class' => 'titleGreen',
+ 'name' => __('Copiar Cuenta'),
+ 'icon' => $this->icons->getIconCopy()->getIcon()
+ ]
+ );
+
+ $this->setCommonData();
+ }
+
+ /**
+ * Obtener los datos para mostrar el interface para editar cuenta
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function getEditAccount()
+ {
+ $this->setAction(self::ACTION_ACC_EDIT);
+
+ // Obtener los datos de la cuenta antes y comprobar el acceso
+ $isOk = ($this->setAccountData() && $this->checkAccess());
+
+ if (!$isOk) {
+ return;
+ }
+
+ $this->view->addTemplate('account');
+ $this->view->assign('title',
+ [
+ 'class' => 'titleOrange',
+ 'name' => __('Editar Cuenta'),
+ 'icon' => $this->icons->getIconEdit()->getIcon()
+ ]
+ );
+
+ $this->setCommonData();
+ }
+
+ /**
+ * Obtener los datos para mostrar el interface para modificar la clave de cuenta
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function getEditPassAccount()
+ {
+ $this->setAction(self::ACTION_ACC_EDIT_PASS);
+
+ // Obtener los datos de la cuenta antes y comprobar el acceso
+ $isOk = ($this->setAccountData() && $this->checkAccess());
+
+ if (!$isOk) {
+ return;
+ }
+
+ $this->view->addTemplate('account-editpass');
+ $this->view->assign('title',
+ [
+ 'class' => 'titleOrange',
+ 'name' => __('Modificar Clave de Cuenta'),
+ 'icon' => $this->icons->getIconEditPass()->getIcon()
+ ]
+ );
+
+ $this->view->assign('accountPassDateChange', gmdate('Y-m-d', $this->AccountData->getAccountPassDateChange()));
+ }
+
+ /**
+ * Obtener los datos para mostrar el interface para ver cuenta
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function getViewAccount()
+ {
+ $this->setAction(self::ACTION_ACC_VIEW);
+
+ // Obtener los datos de la cuenta antes y comprobar el acceso
+ $isOk = ($this->setAccountData() && $this->checkAccess());
+
+ if (!$isOk) {
+ return;
+ }
+
+ $this->view->addTemplate('account');
+ $this->view->assign('title',
+ [
+ 'class' => 'titleNormal',
+ 'name' => __('Detalles de Cuenta'),
+ 'icon' => $this->icons->getIconView()->getIcon()
+ ]
+ );
+
+ $this->view->assign('isView', true);
+
+ $this->Account->incrementViewCounter();
+
+ $this->setCommonData();
+ }
+
+ /**
+ * Obtener los datos para mostrar el interface para ver cuenta en fecha concreta
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function getViewHistoryAccount()
+ {
+ $this->setAction(self::ACTION_ACC_VIEW_HISTORY);
+
+ // Obtener los datos de la cuenta antes y comprobar el acceso
+ $isOk = ($this->setAccountDataHistory() && $this->checkAccess());
+
+ if (!$isOk) {
+ return;
+ }
+
+ $this->view->addTemplate('account');
+ $this->view->assign('title',
+ [
+ 'class' => 'titleNormal',
+ 'name' => __('Detalles de Cuenta'),
+ 'icon' => 'access_time'
+ ]
+ );
+
+ $this->view->assign('isView', true);
+ $this->Account->setAccountIsHistory(1);
+
+ $this->setCommonData();
+ }
+
+ /**
+ * Establecer las variables que contienen la información de la cuenta en una fecha concreta.
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ private function setAccountDataHistory()
+ {
+ $Account = new AccountHistory(new AccountExtData());
+ $Account->setId($this->getId());
+ $this->Account = $Account;
+ $this->AccountData = $Account->getData();
+
+ $this->view->assign('accountId', $this->AccountData->getAccountId());
+ $this->view->assign('accountData', $this->AccountData);
+ $this->view->assign('gotData', $this->isGotData());
+
+ $this->view->assign('accountHistoryId', $this->getId());
+
+ return true;
+ }
+
+ /**
+ * Obtener los datos para mostrar el interface de eliminar cuenta
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function getDeleteAccount()
+ {
+ $this->setAction(self::ACTION_ACC_DELETE);
+
+ // Obtener los datos de la cuenta antes y comprobar el acceso
+ $isOk = ($this->setAccountData() && $this->checkAccess());
+
+ if (!$isOk) {
+ return;
+ }
+
+ $this->view->addTemplate('account');
+ $this->view->assign('title',
+ [
+ 'class' => 'titleRed',
+ 'name' => __('Eliminar Cuenta'),
+ 'icon' => $this->icons->getIconDelete()->getIcon()
+ ]
+ );
+
+ $this->setCommonData();
+ }
+
+ /**
+ * Obtener los datos para mostrar el interface de solicitud de cambios en una cuenta
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function getRequestAccountAccess()
+ {
+ // Obtener los datos de la cuenta
+ $this->setAccountData();
+
+ $this->view->addTemplate('request');
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Controller/AccountSearchController.class.php b/inc/SP/Controller/AccountSearchController.class.php
new file mode 100644
index 00000000..83f7b3eb
--- /dev/null
+++ b/inc/SP/Controller/AccountSearchController.class.php
@@ -0,0 +1,408 @@
+.
+ */
+
+namespace SP\Controller;
+
+defined('APP_ROOT') || die();
+
+use SP\Account\AccountSearch;
+use SP\Account\AccountsSearchItem;
+use SP\Config\Config;
+use SP\Core\ActionsInterface;
+use SP\Core\Exceptions\SPException;
+use SP\Core\Session;
+use SP\Core\SessionUtil;
+use SP\Core\Template;
+use SP\Html\DataGrid\DataGrid;
+use SP\Html\DataGrid\DataGridAction;
+use SP\Html\DataGrid\DataGridActionSearch;
+use SP\Html\DataGrid\DataGridActionType;
+use SP\Html\DataGrid\DataGridData;
+use SP\Html\DataGrid\DataGridHeaderSort;
+use SP\Html\DataGrid\DataGridPager;
+use SP\Html\DataGrid\DataGridSort;
+use SP\Http\Request;
+use SP\Mgmt\Categories\Category;
+use SP\Mgmt\Customers\Customer;
+use SP\Mgmt\Tags\Tag;
+use SP\Util\Checks;
+
+/**
+ * Clase encargada de obtener los datos para presentar la búsqueda
+ *
+ * @package Controller
+ */
+class AccountSearchController extends ControllerBase implements ActionsInterface
+{
+ /**
+ * Indica si el filtrado de cuentas está activo
+ *
+ * @var bool
+ */
+ private $filterOn = false;
+ /** @var string */
+ private $sk = '';
+ /** @var int */
+ private $sortKey = 0;
+ /** @var string */
+ private $sortOrder = 0;
+ /** @var bool */
+ private $searchGlobal = false;
+ /** @var int */
+ private $limitStart = 0;
+ /** @var int */
+ private $limitCount = 0;
+ /** @var int */
+ private $queryTimeStart = 0;
+ /** @var bool */
+ private $isAjax = false;
+
+ /**
+ * Constructor
+ *
+ * @param $template Template con instancia de plantilla
+ */
+ public function __construct(Template $template = null)
+ {
+ parent::__construct($template);
+
+ $this->queryTimeStart = microtime();
+ $this->sk = SessionUtil::getSessionKey(true);
+ $this->view->assign('sk', $this->sk);
+ $this->setVars();
+ }
+
+ /**
+ * Establecer las variables necesarias para las plantillas
+ */
+ private function setVars()
+ {
+ $this->view->assign('isAdmin', $this->UserData->isUserIsAdminApp() || $this->UserData->isUserIsAdminAcc());
+ $this->view->assign('showGlobalSearch', Config::getConfig()->isGlobalSearch() && $this->UserProfileData->isAccGlobalSearch());
+
+ // Obtener el filtro de búsqueda desde la sesión
+ $filters = Session::getSearchFilters();
+
+ // Comprobar si la búsqueda es realizada desde el formulario
+ // de lo contrario, se recupera la información de filtros de la sesión
+ $isSearch = (!isset($this->view->actionId));
+
+ $this->sortKey = $isSearch ? Request::analyze('skey', 0) : $filters->getSortKey();
+ $this->sortOrder = $isSearch ? Request::analyze('sorder', 0) : $filters->getSortOrder();
+ $this->searchGlobal = $isSearch ? Request::analyze('gsearch', 0) : $filters->getGlobalSearch();
+ $this->limitStart = $isSearch ? Request::analyze('start', 0) : $filters->getLimitStart();
+ $this->limitCount = $isSearch ? Request::analyze('rpp', 0) : $filters->getLimitCount();
+
+ // Valores POST
+ $this->view->assign('searchCustomer', $isSearch ? Request::analyze('customer', 0) : $filters->getCustomerId());
+ $this->view->assign('searchCategory', $isSearch ? Request::analyze('category', 0) : $filters->getCategoryId());
+ $this->view->assign('searchTags', $isSearch ? Request::analyze('tags') : $filters->getTagsId());
+ $this->view->assign('searchTxt', $isSearch ? Request::analyze('search') : $filters->getTxtSearch());
+ $this->view->assign('searchGlobal', Request::analyze('gsearch', $filters->getGlobalSearch()));
+ $this->view->assign('searchFavorites', Request::analyze('searchfav', $filters->isSearchFavorites()));
+ }
+
+ /**
+ * @param boolean $isAjax
+ */
+ public function setIsAjax($isAjax)
+ {
+ $this->isAjax = $isAjax;
+ }
+
+ /**
+ * Obtener los datos para la caja de búsqueda
+ */
+ public function getSearchBox()
+ {
+ $this->view->addTemplate('searchbox');
+
+ $this->view->assign('customers', Customer::getItem()->getItemsForSelectByUser());
+ $this->view->assign('categories', Category::getItem()->getItemsForSelect());
+ $this->view->assign('tags', Tag::getItem()->getItemsForSelect());
+ }
+
+ /**
+ * Obtener los resultados de una búsqueda
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function getSearch()
+ {
+ $this->view->addTemplate('index');
+
+ $this->view->assign('isAjax', $this->isAjax);
+
+ $Search = new AccountSearch();
+ $Search->setGlobalSearch($this->searchGlobal)
+ ->setSortKey($this->sortKey)
+ ->setSortOrder($this->sortOrder)
+ ->setLimitStart($this->limitStart)
+ ->setLimitCount($this->limitCount)
+ ->setTxtSearch($this->view->searchTxt)
+ ->setCategoryId($this->view->searchCategory)
+ ->setCustomerId($this->view->searchCustomer)
+ ->setTagsId($this->view->searchTags)
+ ->setSearchFavorites($this->view->searchFavorites);
+
+ $this->filterOn = ($this->sortKey > 1
+ || $this->view->searchCustomer
+ || $this->view->searchCategory
+ || $this->view->searchTags
+ || $this->view->searchTxt
+ || $this->view->searchFavorites
+ || $Search->isSortViews());
+
+ AccountsSearchItem::$accountLink = Session::getUserPreferences()->isAccountLink();
+ AccountsSearchItem::$topNavbar = Session::getUserPreferences()->isTopNavbar();
+ AccountsSearchItem::$optionalActions = Session::getUserPreferences()->isOptionalActions();
+ AccountsSearchItem::$wikiEnabled = Checks::wikiIsEnabled();
+ AccountsSearchItem::$dokuWikiEnabled = Checks::dokuWikiIsEnabled();
+ AccountsSearchItem::$isDemoMode = Checks::demoIsEnabled();
+
+ if (AccountsSearchItem::$wikiEnabled) {
+ $wikiFilter = array_map(function ($value) {
+ return preg_quote($value, '/');
+ }, Config::getConfig()->getWikiFilter());
+
+ $this->view->assign('wikiFilter', implode('|', $wikiFilter));
+ $this->view->assign('wikiPageUrl', Config::getConfig()->getWikiPageurl());
+ }
+
+ $Grid = $this->getGrid();
+ $Grid->getData()->setData($Search->processSearchResults());
+ $Grid->updatePager();
+ $Grid->setTime(round(microtime() - $this->queryTimeStart, 5));
+
+ $this->view->assign('data', $Grid);
+ }
+
+ /**
+ * Devuelve la matriz a utilizar en la vista
+ *
+ * @return DataGrid
+ */
+ private function getGrid()
+ {
+ $GridActionView = new DataGridAction();
+ $GridActionView->setId(self::ACTION_ACC_VIEW);
+ $GridActionView->setType(DataGridActionType::VIEW_ITEM);
+ $GridActionView->setName(__('Detalles de Cuenta'));
+ $GridActionView->setTitle(__('Detalles de Cuenta'));
+ $GridActionView->setIcon($this->icons->getIconView());
+ $GridActionView->setReflectionFilter(AccountsSearchItem::class, 'isShowView');
+ $GridActionView->addData('action-id', self::ACTION_ACC_VIEW);
+ $GridActionView->addData('action-sk', $this->sk);
+ $GridActionView->addData('onclick', 'account/show');
+
+ $GridActionViewPass = new DataGridAction();
+ $GridActionViewPass->setId(self::ACTION_ACC_VIEW_PASS);
+ $GridActionViewPass->setType(DataGridActionType::VIEW_ITEM);
+ $GridActionViewPass->setName(__('Ver Clave'));
+ $GridActionViewPass->setTitle(__('Ver Clave'));
+ $GridActionViewPass->setIcon($this->icons->getIconViewPass());
+ $GridActionViewPass->setReflectionFilter(AccountsSearchItem::class, 'isShowViewPass');
+ $GridActionViewPass->addData('action-id', self::ACTION_ACC_VIEW_PASS);
+ $GridActionViewPass->addData('action-full', 1);
+ $GridActionViewPass->addData('action-sk', $this->sk);
+ $GridActionViewPass->addData('onclick', 'account/showpass');
+
+ // Añadir la clase para usar el portapapeles
+ $ClipboardIcon = $this->icons->getIconClipboard()->setClass('clip-pass-button');
+
+ $GridActionCopyPass = new DataGridAction();
+ $GridActionCopyPass->setId(self::ACTION_ACC_VIEW_PASS);
+ $GridActionCopyPass->setType(DataGridActionType::VIEW_ITEM);
+ $GridActionCopyPass->setName(__('Copiar Clave en Portapapeles'));
+ $GridActionCopyPass->setTitle(__('Copiar Clave en Portapapeles'));
+ $GridActionCopyPass->setIcon($ClipboardIcon);
+ $GridActionCopyPass->setReflectionFilter(AccountsSearchItem::class, 'isShowCopyPass');
+ $GridActionCopyPass->addData('action-id', self::ACTION_ACC_VIEW_PASS);
+ $GridActionCopyPass->addData('action-full', 0);
+ $GridActionCopyPass->addData('action-sk', $this->sk);
+ $GridActionCopyPass->addData('useclipboard', '1');
+
+ $EditIcon = $this->icons->getIconEdit();
+
+ $GridActionEdit = new DataGridAction();
+ $GridActionEdit->setId(self::ACTION_ACC_EDIT);
+ $GridActionEdit->setType(DataGridActionType::EDIT_ITEM);
+ $GridActionEdit->setName(__('Editar Cuenta'));
+ $GridActionEdit->setTitle(__('Editar Cuenta'));
+ $GridActionEdit->setIcon($EditIcon);
+ $GridActionEdit->setReflectionFilter(AccountsSearchItem::class, 'isShowEdit');
+ $GridActionEdit->addData('action-id', self::ACTION_ACC_EDIT);
+ $GridActionEdit->addData('action-sk', $this->sk);
+ $GridActionEdit->addData('onclick', 'account/edit');
+
+ $CopyIcon = $this->icons->getIconCopy();
+
+ $GridActionCopy = new DataGridAction();
+ $GridActionCopy->setId(self::ACTION_ACC_COPY);
+ $GridActionCopy->setType(DataGridActionType::NEW_ITEM);
+ $GridActionCopy->setName(__('Copiar Cuenta'));
+ $GridActionCopy->setTitle(__('Copiar Cuenta'));
+ $GridActionCopy->setIcon($CopyIcon);
+ $GridActionCopy->setReflectionFilter(AccountsSearchItem::class, 'isShowCopy');
+ $GridActionCopy->addData('action-id', self::ACTION_ACC_COPY);
+ $GridActionCopy->addData('action-sk', $this->sk);
+ $GridActionCopy->addData('onclick', 'account/copy');
+
+ $DeleteIcon = $this->icons->getIconDelete();
+
+ $GridActionDel = new DataGridAction();
+ $GridActionDel->setId(self::ACTION_ACC_DELETE);
+ $GridActionDel->setType(DataGridActionType::DELETE_ITEM);
+ $GridActionDel->setName(__('Eliminar Cuenta'));
+ $GridActionDel->setTitle(__('Eliminar Cuenta'));
+ $GridActionDel->setIcon($DeleteIcon);
+ $GridActionDel->setReflectionFilter(AccountsSearchItem::class, 'isShowDelete');
+ $GridActionDel->addData('action-id', self::ACTION_ACC_DELETE);
+ $GridActionDel->addData('action-sk', $this->sk);
+ $GridActionDel->addData('onclick', 'account/delete');
+
+ $GridActionRequest = new DataGridAction();
+ $GridActionRequest->setId(self::ACTION_ACC_REQUEST);
+ $GridActionRequest->setName(__('Solicitar Modificación'));
+ $GridActionRequest->setTitle(__('Solicitar Modificación'));
+ $GridActionRequest->setIcon($this->icons->getIconEmail());
+ $GridActionRequest->setReflectionFilter(AccountsSearchItem::class, 'isShowRequest');
+ $GridActionRequest->addData('action-id', self::ACTION_ACC_REQUEST);
+ $GridActionRequest->addData('action-sk', $this->sk);
+ $GridActionRequest->addData('onclick', 'account/show');
+
+ $GridActionOptional = new DataGridAction();
+ $GridActionOptional->setId(0);
+ $GridActionOptional->setName(__('Más Acciones'));
+ $GridActionOptional->setTitle(__('Más Acciones'));
+ $GridActionOptional->setIcon($this->icons->getIconOptional());
+ $GridActionOptional->setReflectionFilter(AccountsSearchItem::class, 'isShowOptional');
+ $GridActionOptional->addData('onclick', 'account/menu');
+
+ $GridPager = new DataGridPager();
+ $GridPager->setIconPrev($this->icons->getIconNavPrev());
+ $GridPager->setIconNext($this->icons->getIconNavNext());
+ $GridPager->setIconFirst($this->icons->getIconNavFirst());
+ $GridPager->setIconLast($this->icons->getIconNavLast());
+ $GridPager->setSortKey($this->sortKey);
+ $GridPager->setSortOrder($this->sortOrder);
+ $GridPager->setLimitStart($this->limitStart);
+ $GridPager->setLimitCount($this->limitCount);
+ $GridPager->setOnClickFunction('account/sort');
+ $GridPager->setFilterOn($this->filterOn);
+ $GridPager->setSourceAction(new DataGridActionSearch(self::ACTION_ACC_SEARCH));
+
+ $Preferences = Session::getUserPreferences();
+
+ $showOptionalActions = $Preferences->isOptionalActions() || $Preferences->isResultsAsCards() || Checks::resultsCardsIsEnabled();
+
+ $Grid = new DataGrid();
+ $Grid->setId('gridSearch');
+ $Grid->setDataHeaderTemplate('header', $this->view->getBase());
+ $Grid->setDataRowTemplate('rows', $this->view->getBase());
+ $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid');
+ $Grid->setHeader($this->getHeaderSort());
+ $Grid->setDataActions($GridActionView);
+ $Grid->setDataActions($GridActionViewPass);
+ $Grid->setDataActions($GridActionCopyPass);
+ $Grid->setDataActions($GridActionEdit, !$showOptionalActions);
+ $Grid->setDataActions($GridActionCopy, !$showOptionalActions);
+ $Grid->setDataActions($GridActionDel, !$showOptionalActions);
+ $Grid->setDataActions($GridActionRequest);
+ $Grid->setPager($GridPager);
+ $Grid->setData(new DataGridData());
+
+ return $Grid;
+ }
+
+ /**
+ * Devolver la cabecera con los campos de ordenación
+ *
+ * @return DataGridHeaderSort
+ */
+ private function getHeaderSort()
+ {
+ $GridSortCustomer = new DataGridSort();
+ $GridSortCustomer->setName(__('Cliente'))
+ ->setTitle(__('Ordenar por Cliente'))
+ ->setSortKey(AccountSearch::SORT_CUSTOMER)
+ ->setIconUp($this->icons->getIconUp())
+ ->setIconDown($this->icons->getIconDown());
+
+ $GridSortName = new DataGridSort();
+ $GridSortName->setName(__('Nombre'))
+ ->setTitle(__('Ordenar por Nombre'))
+ ->setSortKey(AccountSearch::SORT_NAME)
+ ->setIconUp($this->icons->getIconUp())
+ ->setIconDown($this->icons->getIconDown());
+
+ $GridSortCategory = new DataGridSort();
+ $GridSortCategory->setName(__('Categoría'))
+ ->setTitle(__('Ordenar por Categoría'))
+ ->setSortKey(AccountSearch::SORT_CATEGORY)
+ ->setIconUp($this->icons->getIconUp())
+ ->setIconDown($this->icons->getIconDown());
+
+ $GridSortLogin = new DataGridSort();
+ $GridSortLogin->setName(__('Usuario'))
+ ->setTitle(__('Ordenar por Usuario'))
+ ->setSortKey(AccountSearch::SORT_LOGIN)
+ ->setIconUp($this->icons->getIconUp())
+ ->setIconDown($this->icons->getIconDown());
+
+ $GridSortUrl = new DataGridSort();
+ $GridSortUrl->setName(__('URL / IP'))
+ ->setTitle(__('Ordenar por URL / IP'))
+ ->setSortKey(AccountSearch::SORT_URL)
+ ->setIconUp($this->icons->getIconUp())
+ ->setIconDown($this->icons->getIconDown());
+
+ $GridHeaderSort = new DataGridHeaderSort();
+ $GridHeaderSort->addSortField($GridSortCustomer)
+ ->addSortField($GridSortName)
+ ->addSortField($GridSortCategory)
+ ->addSortField($GridSortLogin)
+ ->addSortField($GridSortUrl);
+
+ return $GridHeaderSort;
+ }
+
+ /**
+ * Realizar las accione del controlador
+ *
+ * @param mixed $type Tipo de acción
+ * @throws \InvalidArgumentException
+ */
+ public function doAction($type = null)
+ {
+ try {
+ $this->getSearchBox();
+ $this->getSearch();
+
+ $this->EventDispatcher->notifyEvent('show.account.search', $this);
+ } catch (SPException $e) {
+ $this->showError(self::ERR_EXCEPTION);
+ }
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Controller/ChecksController.class.php b/inc/SP/Controller/ChecksController.class.php
new file mode 100644
index 00000000..e45873fa
--- /dev/null
+++ b/inc/SP/Controller/ChecksController.class.php
@@ -0,0 +1,145 @@
+.
+ */
+
+namespace SP\Controller;
+
+use SP\Auth\Ldap\LdapMsAds;
+use SP\Auth\Ldap\LdapStd;
+use SP\Auth\Ldap\LdapUtil;
+use SP\Core\Exceptions\SPException;
+use SP\Http\Request;
+use SP\Util\Json;
+use SP\Util\Wiki\DokuWikiApi;
+
+/**
+ * Class ChecksController
+ *
+ * @package SP\Controller
+ */
+class ChecksController implements ItemControllerInterface
+{
+ use RequestControllerTrait;
+
+ /**
+ * ChecksController constructor.
+ */
+ public function __construct()
+ {
+ $this->init();
+ }
+
+ /**
+ * Realizar la acción solicitada en la la petición HTTP
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function doAction()
+ {
+ $type = Request::analyze('type');
+
+ try {
+ switch ($type) {
+ case 'ldap':
+ $this->checkLdap();
+ break;
+ case 'dokuwiki':
+ $this->checkDokuWiki();
+ break;
+ default:
+ $this->invalidAction();
+ }
+ } catch (\Exception $e) {
+ $this->JsonResponse->setDescription($e->getMessage());
+ }
+
+ Json::returnJson($this->JsonResponse);
+ }
+
+ /**
+ * Comprobar la conexión a LDAP
+ */
+ protected function checkLdap()
+ {
+ $ldapAdsEnabled = Request::analyze('ldap_ads', false, false, true);
+ $ldapServer = Request::analyze('ldap_server');
+ $ldapBase = Request::analyze('ldap_base');
+ $ldapGroup = Request::analyze('ldap_group');
+ $ldapBindUser = Request::analyze('ldap_binduser');
+ $ldapBindPass = Request::analyzeEncrypted('ldap_bindpass');
+
+ if (!$ldapServer || !$ldapBase || !$ldapBindUser || !$ldapBindPass) {
+ $this->JsonResponse->setDescription(__('Los parámetros de LDAP no están configurados', false));
+ return;
+ }
+
+ $Ldap = $ldapAdsEnabled ? $Ldap = new LdapMsAds() : new LdapStd();
+
+ $Ldap->setServer($ldapServer);
+ $Ldap->setSearchBase($ldapBase);
+ $Ldap->setGroup($ldapGroup);
+ $Ldap->setBindDn($ldapBindUser);
+ $Ldap->setBindPass($ldapBindPass);
+
+ try {
+ $results = $Ldap->checkConnection();
+
+ $this->JsonResponse->setDescription(__('Conexión a LDAP correcta', false));
+ $this->JsonResponse->addMessage(sprintf(__('Objetos encontrados: %d'), (int)$results['count']));
+ $this->JsonResponse->setData(LdapUtil::getResultsData($results, 'dn'));
+ $this->JsonResponse->setStatus(0);
+ } catch (SPException $e) {
+ $this->JsonResponse->setDescription($e->getMessage());
+ $this->JsonResponse->addMessage(__('Revise el registro de eventos para más detalles', false));
+ }
+ }
+
+ /**
+ * Comprobar la conexión a DokuWIki
+ */
+ protected function checkDokuWiki()
+ {
+ $dokuWikiUrl = Request::analyze('dokuwiki_url');
+ $dokuWikiUser = Request::analyze('dokuwiki_user');
+ $dokuWikiPass = Request::analyzeEncrypted('dokuwiki_pass');
+
+ if (!$dokuWikiUrl) {
+ $this->JsonResponse->setDescription(__('Los parámetros de DokuWiki no están configurados', false));
+ return;
+ }
+
+ try {
+ $DokuWikiApi = DokuWikiApi::checkConnection($dokuWikiUrl, $dokuWikiUser, $dokuWikiPass);
+
+ $dokuWikiVersion = $DokuWikiApi->getVersion();
+ $version = is_array($dokuWikiVersion) ? $dokuWikiVersion[0] : __('Error');
+
+ $this->JsonResponse->setDescription(__('Conexión correcta', false));
+ $this->JsonResponse->addMessage(sprintf('%s: %s', __('Versión'), $version));
+ $this->JsonResponse->setStatus(0);
+ } catch (SPException $e) {
+ $this->JsonResponse->setDescription(__('Error de conexión a DokuWiki', false));
+ $this->JsonResponse->addMessage(__('Revise el registro de eventos para más detalles', false));
+ }
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Controller/ConfigActionController.class.php b/inc/SP/Controller/ConfigActionController.class.php
new file mode 100644
index 00000000..1486239c
--- /dev/null
+++ b/inc/SP/Controller/ConfigActionController.class.php
@@ -0,0 +1,712 @@
+.
+ */
+
+namespace SP\Controller;
+
+use SP\Account\Account;
+use SP\Account\AccountHistory;
+use SP\Config\Config;
+use SP\Config\ConfigDB;
+use SP\Core\ActionsInterface;
+use SP\Core\Backup;
+use SP\Core\Crypt;
+use SP\Core\CryptMasterPass;
+use SP\Core\Exceptions\SPException;
+use SP\Core\Init;
+use SP\Core\Messages\LogMessage;
+use SP\Core\Messages\NoticeMessage;
+use SP\Core\Session;
+use SP\Core\SessionUtil;
+use SP\Core\XmlExport;
+use SP\Html\Html;
+use SP\Http\Request;
+use SP\Import\Import;
+use SP\Import\ImportParams;
+use SP\Log\Email;
+use SP\Log\Log;
+use SP\Mgmt\CustomFields\CustomFieldsUtil;
+use SP\Mgmt\Users\UserPass;
+use SP\Mgmt\Users\UserUtil;
+use SP\Storage\DB;
+use SP\Util\Checks;
+use SP\Util\Json;
+use SP\Util\Util;
+
+/**
+ * Class ConfigActionController
+ *
+ * @package SP\Controller
+ */
+class ConfigActionController implements ItemControllerInterface
+{
+ use RequestControllerTrait;
+
+ /**
+ * ConfigActionController constructor.
+ */
+ public function __construct()
+ {
+ $this->init();
+ }
+
+ /**
+ * Realizar la acción solicitada en la la petición HTTP
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function doAction()
+ {
+ $this->LogMessage = new LogMessage();
+
+ try {
+ switch ($this->actionId) {
+ case ActionsInterface::ACTION_CFG_GENERAL:
+ $this->generalAction();
+ break;
+ case ActionsInterface::ACTION_CFG_ACCOUNTS:
+ $this->accountsAction();
+ break;
+ case ActionsInterface::ACTION_CFG_WIKI:
+ $this->wikiAction();
+ break;
+ case ActionsInterface::ACTION_CFG_LDAP:
+ $this->ldapAction();
+ break;
+ case ActionsInterface::ACTION_CFG_MAIL:
+ $this->mailAction();
+ break;
+ case ActionsInterface::ACTION_CFG_ENCRYPTION:
+ $this->masterPassAction();
+ break;
+ case ActionsInterface::ACTION_CFG_ENCRYPTION_REFRESH:
+ $this->masterPassRefreshAction();
+ break;
+ case ActionsInterface::ACTION_CFG_ENCRYPTION_TEMPPASS:
+ $this->tempMasterPassAction();
+ break;
+ case ActionsInterface::ACTION_CFG_IMPORT:
+ $this->importAction();
+ break;
+ case ActionsInterface::ACTION_CFG_EXPORT:
+ $this->exportAction();
+ break;
+ case ActionsInterface::ACTION_CFG_BACKUP:
+ $this->backupAction();
+ break;
+ default:
+ $this->invalidAction();
+ }
+ } catch (\Exception $e) {
+ $this->JsonResponse->setDescription($e->getMessage());
+ }
+
+ if ($this->LogMessage->getAction() !== null) {
+ $Log = new Log($this->LogMessage);
+ $Log->writeLog();
+
+ $this->JsonResponse->setDescription($this->LogMessage->getHtmlDescription(true));
+ }
+
+ Json::returnJson($this->JsonResponse);
+ }
+
+ /**
+ * Accion para opciones configuración general
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ protected function generalAction()
+ {
+ $Config = Session::getConfig();
+
+ // General
+ $siteLang = Request::analyze('sitelang');
+ $siteTheme = Request::analyze('sitetheme', 'material-blue');
+ $sessionTimeout = Request::analyze('session_timeout', 300);
+ $httpsEnabled = Request::analyze('https_enabled', false, false, true);
+ $debugEnabled = Request::analyze('debug', false, false, true);
+ $maintenanceEnabled = Request::analyze('maintenance', false, false, true);
+ $checkUpdatesEnabled = Request::analyze('updates', false, false, true);
+ $checkNoticesEnabled = Request::analyze('notices', false, false, true);
+
+ $Config->setSiteLang($siteLang);
+ $Config->setSiteTheme($siteTheme);
+ $Config->setSessionTimeout($sessionTimeout);
+ $Config->setHttpsEnabled($httpsEnabled);
+ $Config->setDebug($debugEnabled);
+ $Config->setMaintenance($maintenanceEnabled);
+ $Config->setCheckUpdates($checkUpdatesEnabled);
+ $Config->setChecknotices($checkNoticesEnabled);
+
+ // Events
+ $logEnabled = Request::analyze('log_enabled', false, false, true);
+ $syslogEnabled = Request::analyze('syslog_enabled', false, false, true);
+ $remoteSyslogEnabled = Request::analyze('remotesyslog_enabled', false, false, true);
+ $syslogServer = Request::analyze('remotesyslog_server');
+ $syslogPort = Request::analyze('remotesyslog_port', 0);
+
+ $Config->setLogEnabled($logEnabled);
+ $Config->setSyslogEnabled($syslogEnabled);
+
+ if ($remoteSyslogEnabled && (!$syslogServer || !$syslogPort)) {
+ $this->JsonResponse->setDescription(__('Faltan parámetros de syslog remoto', false));
+ return;
+ } elseif ($remoteSyslogEnabled) {
+ $Config->setSyslogRemoteEnabled($remoteSyslogEnabled);
+ $Config->setSyslogServer($syslogServer);
+ $Config->setSyslogPort($syslogPort);
+ } elseif ($Config->isSyslogEnabled()) {
+ $Config->setSyslogRemoteEnabled(false);
+
+ $this->LogMessage->addDescription(__('Syslog remoto deshabilitado', false));
+ }
+
+ // Proxy
+ $proxyEnabled = Request::analyze('proxy_enabled', false, false, true);
+ $proxyServer = Request::analyze('proxy_server');
+ $proxyPort = Request::analyze('proxy_port', 0);
+ $proxyUser = Request::analyze('proxy_user');
+ $proxyPass = Request::analyzeEncrypted('proxy_pass');
+
+
+ // Valores para Proxy
+ if ($proxyEnabled && (!$proxyServer || !$proxyPort)) {
+ $this->JsonResponse->setDescription(__('Faltan parámetros de Proxy', false));
+ return;
+ } elseif ($proxyEnabled) {
+ $Config->setProxyEnabled(true);
+ $Config->setProxyServer($proxyServer);
+ $Config->setProxyPort($proxyPort);
+ $Config->setProxyUser($proxyUser);
+ $Config->setProxyPass($proxyPass);
+
+ $this->LogMessage->addDescription(__('Proxy habiltado', false));
+ } elseif ($Config->isProxyEnabled()) {
+ $Config->setProxyEnabled(false);
+
+ $this->LogMessage->addDescription(__('Proxy deshabilitado', false));
+ }
+
+ $this->LogMessage->addDetails(__('Sección', false), __('General', false));
+
+ // Recargar la aplicación completa para establecer nuevos valores
+// Util::reload();
+
+ $this->saveConfig();
+ }
+
+ /**
+ * Guardar la configuración
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ protected function saveConfig()
+ {
+ try {
+ if (Checks::demoIsEnabled()) {
+ $this->JsonResponse->setDescription(__('Ey, esto es una DEMO!!', false));
+ return;
+ }
+
+ Config::saveConfig();
+
+ if (Config::getConfig()->isMaintenance()) {
+ Util::lockApp(false);
+ } elseif (Init::$LOCK > 0) {
+ Util::unlockApp(false);
+ }
+
+ $this->JsonResponse->setStatus(0);
+
+ $this->LogMessage->addDescription(__('Configuración actualizada', false));
+ } catch (SPException $e) {
+ $this->LogMessage->addDescription(__('Error al guardar la configuración', false));
+ $this->LogMessage->addDetails($e->getMessage(), $e->getHint());
+ }
+
+ $this->LogMessage->setAction(__('Modificar Configuración', false));
+
+ Email::sendEmail($this->LogMessage);
+ }
+
+ /**
+ * Accion para opciones configuración de cuentas
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ protected function accountsAction()
+ {
+ $Config = Session::getConfig();
+
+ // Accounts
+ $globalSearchEnabled = Request::analyze('globalsearch', false, false, true);
+ $accountPassToImageEnabled = Request::analyze('account_passtoimage', false, false, true);
+ $accountLinkEnabled = Request::analyze('account_link', false, false, true);
+ $accountCount = Request::analyze('account_count', 10);
+ $resultsAsCardsEnabled = Request::analyze('resultsascards', false, false, true);
+
+ $Config->setGlobalSearch($globalSearchEnabled);
+ $Config->setAccountPassToImage($accountPassToImageEnabled);
+ $Config->setAccountLink($accountLinkEnabled);
+ $Config->setAccountCount($accountCount);
+ $Config->setResultsAsCards($resultsAsCardsEnabled);
+
+ // Files
+ $filesEnabled = Request::analyze('files_enabled', false, false, true);
+ $filesAllowedSize = Request::analyze('files_allowed_size', 1024);
+ $filesAllowedExts = Request::analyze('files_allowed_exts');
+
+ if ($filesEnabled && $filesAllowedSize >= 16384) {
+ $this->JsonResponse->setDescription(__('El tamaño máximo por archivo es de 16MB', false));
+ return;
+ }
+
+ $Config->setFilesAllowedExts($filesAllowedExts);
+ $Config->setFilesEnabled($filesEnabled);
+ $Config->setFilesAllowedSize($filesAllowedSize);
+
+ // Public Links
+ $pubLinksEnabled = Request::analyze('publinks_enabled', false, false, true);
+ $pubLinksImageEnabled = Request::analyze('publinks_image_enabled', false, false, true);
+ $pubLinksMaxTime = Request::analyze('publinks_maxtime', 10);
+ $pubLinksMaxViews = Request::analyze('publinks_maxviews', 3);
+
+ $Config->setPublinksEnabled($pubLinksEnabled);
+ $Config->setPublinksImageEnabled($pubLinksImageEnabled);
+ $Config->setPublinksMaxTime($pubLinksMaxTime * 60);
+ $Config->setPublinksMaxViews($pubLinksMaxViews);
+
+ $this->LogMessage->addDetails(__('Sección', false), __('Cuentas', false));
+
+ $this->saveConfig();
+ }
+
+ /**
+ * Acción para opciones de Wiki
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ protected function wikiAction()
+ {
+ $Config = Session::getConfig();
+
+ // Wiki
+ $wikiEnabled = Request::analyze('wiki_enabled', false, false, true);
+ $wikiSearchUrl = Request::analyze('wiki_searchurl');
+ $wikiPageUrl = Request::analyze('wiki_pageurl');
+ $wikiFilter = Request::analyze('wiki_filter');
+
+ // Valores para la conexión a la Wiki
+ if ($wikiEnabled && (!$wikiSearchUrl || !$wikiPageUrl || !$wikiFilter)) {
+ $this->JsonResponse->setDescription(__('Faltan parámetros de Wiki', false));
+ return;
+ } elseif ($wikiEnabled) {
+ $Config->setWikiEnabled(true);
+ $Config->setWikiSearchurl($wikiSearchUrl);
+ $Config->setWikiPageurl($wikiPageUrl);
+ $Config->setWikiFilter(explode(',', $wikiFilter));
+
+ $this->LogMessage->addDescription(__('Wiki habiltada', false));
+ } elseif ($Config->isWikiEnabled()) {
+ $Config->setWikiEnabled(false);
+
+ $this->LogMessage->addDescription(__('Wiki deshabilitada', false));
+ }
+
+ // DokuWiki
+ $dokuWikiEnabled = Request::analyze('dokuwiki_enabled', false, false, true);
+ $dokuWikiUrl = Request::analyze('dokuwiki_url');
+ $dokuWikiUrlBase = Request::analyze('dokuwiki_urlbase');
+ $dokuWikiUser = Request::analyze('dokuwiki_user');
+ $dokuWikiPass = Request::analyzeEncrypted('dokuwiki_pass');
+ $dokuWikiNamespace = Request::analyze('dokuwiki_namespace');
+
+ // Valores para la conexión a la API de DokuWiki
+ if ($dokuWikiEnabled && (!$dokuWikiUrl || !$dokuWikiUrlBase)) {
+ $this->JsonResponse->setDescription(__('Faltan parámetros de DokuWiki', false));
+ return;
+ } elseif ($dokuWikiEnabled) {
+ $Config->setDokuwikiEnabled(true);
+ $Config->setDokuwikiUrl($dokuWikiUrl);
+ $Config->setDokuwikiUrlBase(trim($dokuWikiUrlBase, '/'));
+ $Config->setDokuwikiUser($dokuWikiUser);
+ $Config->setDokuwikiPass($dokuWikiPass);
+ $Config->setDokuwikiNamespace($dokuWikiNamespace);
+
+ $this->LogMessage->addDescription(__('DokuWiki habiltada', false));
+ } elseif ($Config->isDokuwikiEnabled()) {
+ $Config->setDokuwikiEnabled(false);
+
+ $this->LogMessage->addDescription(__('DokuWiki deshabilitada', false));
+ }
+
+ $this->LogMessage->addDetails(__('Sección', false), __('Wiki', false));
+
+ $this->saveConfig();
+ }
+
+ /**
+ * Acción para opciones de LDAP
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ protected function ldapAction()
+ {
+ $Config = Session::getConfig();
+
+ // LDAP
+ $ldapEnabled = Request::analyze('ldap_enabled', false, false, true);
+ $ldapADSEnabled = Request::analyze('ldap_ads', false, false, true);
+ $ldapServer = Request::analyze('ldap_server');
+ $ldapBase = Request::analyze('ldap_base');
+ $ldapGroup = Request::analyze('ldap_group');
+ $ldapDefaultGroup = Request::analyze('ldap_defaultgroup', 0);
+ $ldapDefaultProfile = Request::analyze('ldap_defaultprofile', 0);
+ $ldapBindUser = Request::analyze('ldap_binduser');
+ $ldapBindPass = Request::analyzeEncrypted('ldap_bindpass');
+
+ // Valores para la configuración de LDAP
+ if ($ldapEnabled && (!$ldapServer || !$ldapBase || !$ldapBindUser)) {
+ $this->JsonResponse->setDescription(__('Faltan parámetros de LDAP'));
+ return;
+ } elseif ($ldapEnabled) {
+ $Config->setLdapEnabled(true);
+ $Config->setLdapAds($ldapADSEnabled);
+ $Config->setLdapServer($ldapServer);
+ $Config->setLdapBase($ldapBase);
+ $Config->setLdapGroup($ldapGroup);
+ $Config->setLdapDefaultGroup($ldapDefaultGroup);
+ $Config->setLdapDefaultProfile($ldapDefaultProfile);
+ $Config->setLdapBindUser($ldapBindUser);
+ $Config->setLdapBindPass($ldapBindPass);
+
+ $this->LogMessage->addDescription(__('LDAP habiltado', false));
+ } elseif ($Config->isLdapEnabled()) {
+ $Config->setLdapEnabled(false);
+
+ $this->LogMessage->addDescription(__('LDAP deshabilitado', false));
+ }
+
+ $this->LogMessage->addDetails(__('Sección', false), __('LDAP', false));
+ $this->JsonResponse->setStatus(0);
+
+ $this->saveConfig();
+ }
+
+ /**
+ * Accion para opciones de correo
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ protected function mailAction()
+ {
+ $Log = Log::newLog(__('Modificar Configuración', false));
+ $Config = Session::getConfig();
+
+ // Mail
+ $mailEnabled = Request::analyze('mail_enabled', false, false, true);
+ $mailServer = Request::analyze('mail_server');
+ $mailPort = Request::analyze('mail_port', 25);
+ $mailUser = Request::analyze('mail_user');
+ $mailPass = Request::analyzeEncrypted('mail_pass');
+ $mailSecurity = Request::analyze('mail_security');
+ $mailFrom = Request::analyze('mail_from');
+ $mailRequests = Request::analyze('mail_requestsenabled', false, false, true);
+ $mailAuth = Request::analyze('mail_authenabled', false, false, true);
+
+ // Valores para la configuración del Correo
+ if ($mailEnabled && (!$mailServer || !$mailFrom)) {
+ $this->JsonResponse->setDescription(__('Faltan parámetros de Correo'));
+ return;
+ } elseif ($mailEnabled) {
+ $Config->setMailEnabled(true);
+ $Config->setMailRequestsEnabled($mailRequests);
+ $Config->setMailServer($mailServer);
+ $Config->setMailPort($mailPort);
+ $Config->setMailSecurity($mailSecurity);
+ $Config->setMailFrom($mailFrom);
+
+ if ($mailAuth) {
+ $Config->setMailAuthenabled($mailAuth);
+ $Config->setMailUser($mailUser);
+ $Config->setMailPass($mailPass);
+ }
+
+ $this->LogMessage->addDescription(__('Correo habiltado', false));
+ } elseif ($Config->isMailEnabled()) {
+ $Config->setMailEnabled(false);
+ $Config->setMailRequestsEnabled(false);
+ $Config->setMailAuthenabled(false);
+
+ $this->LogMessage->addDescription(__('Correo deshabilitado', false));
+ }
+
+ $this->LogMessage->addDetails(__('Sección', false), __('Correo', false));
+ $this->JsonResponse->setStatus(0);
+
+ $this->saveConfig();
+ }
+
+ /**
+ * Acción para cambio de clave maestra
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \phpmailer\phpmailerException
+ */
+ protected function masterPassAction()
+ {
+ $currentMasterPass = Request::analyzeEncrypted('curMasterPwd');
+ $newMasterPass = Request::analyzeEncrypted('newMasterPwd');
+ $newMasterPassR = Request::analyzeEncrypted('newMasterPwdR');
+ $confirmPassChange = Request::analyze('confirmPassChange', 0, false, 1);
+ $noAccountPassChange = Request::analyze('chkNoAccountChange', 0, false, 1);
+
+ if (!UserPass::getItem(Session::getUserData())->checkUserUpdateMPass()) {
+ $this->JsonResponse->setDescription(__('Clave maestra actualizada', false));
+ $this->JsonResponse->addMessage(__('Reinicie la sesión para cambiarla', false));
+ $this->JsonResponse->setStatus(100);
+ return;
+ } elseif (empty($newMasterPass) || empty($currentMasterPass)) {
+ $this->JsonResponse->setDescription(__('Clave maestra no indicada'));
+ return;
+ } elseif ($confirmPassChange === false) {
+ $this->JsonResponse->setDescription(__('Se ha de confirmar el cambio de clave', false));
+ return;
+ }
+
+ if ($newMasterPass === $currentMasterPass) {
+ $this->JsonResponse->setDescription(__('Las claves son idénticas', false));
+ return;
+ } elseif ($newMasterPass !== $newMasterPassR) {
+ $this->JsonResponse->setDescription(__('Las claves maestras no coinciden', false));
+ return;
+ } elseif (!Crypt::checkHashPass($currentMasterPass, ConfigDB::getValue('masterPwd'), true)) {
+ $this->JsonResponse->setDescription(__('La clave maestra actual no coincide', false));
+ return;
+ }
+
+ if (Checks::demoIsEnabled()) {
+ $this->JsonResponse->setDescription(__('Ey, esto es una DEMO!!', false));
+ return;
+ }
+
+ $hashMPass = Crypt::mkHashPassword($newMasterPass);
+
+ if (!$noAccountPassChange) {
+ Util::lockApp();
+
+ if (!DB::beginTransaction()) {
+ $this->JsonResponse->setDescription(__('No es posible iniciar una transacción', false));
+ return;
+ }
+
+ $Account = new Account();
+
+ if (!$Account->updateAccountsMasterPass($currentMasterPass, $newMasterPass)) {
+ DB::rollbackTransaction();
+
+ $this->JsonResponse->setDescription(__('Errores al actualizar las claves de las cuentas', false));
+ return;
+ }
+
+ $AccountHistory = new AccountHistory();
+
+ if (!$AccountHistory->updateAccountsMasterPass($currentMasterPass, $newMasterPass, $hashMPass)) {
+ DB::rollbackTransaction();
+
+ $this->JsonResponse->setDescription(__('Errores al actualizar las claves de las cuentas del histórico', false));
+ return;
+ }
+
+ if (!CustomFieldsUtil::updateCustomFieldsCrypt($currentMasterPass, $newMasterPass)) {
+ DB::rollbackTransaction();
+
+ $this->JsonResponse->setDescription(__('Errores al actualizar datos de campos personalizados', false));
+ return;
+ }
+
+ if (!DB::endTransaction()) {
+ $this->JsonResponse->setDescription(__('No es posible finalizar una transacción', false));
+ return;
+ }
+
+ Util::unlockApp();
+ }
+
+ ConfigDB::setCacheConfigValue('masterPwd', $hashMPass);
+ ConfigDB::setCacheConfigValue('lastupdatempass', time());
+
+ $this->LogMessage->setAction(__('Actualizar Clave Maestra', false));
+
+ if (ConfigDB::writeConfig()) {
+ $this->LogMessage->addDescription(__('Clave maestra actualizada', false));
+
+ $this->JsonResponse->addMessage(__('Reinicie la sesión para cambiarla', false));
+ $this->JsonResponse->setStatus(100);
+ } else {
+ $this->LogMessage->addDescription(__('Error al guardar el hash de la clave maestra', false));
+ }
+
+ Email::sendEmail($this->LogMessage);
+ }
+
+ /**
+ * Regenerar el hash de la clave maestra
+ */
+ protected function masterPassRefreshAction()
+ {
+ if (Checks::demoIsEnabled()) {
+ $this->JsonResponse->setDescription(__('Ey, esto es una DEMO!!', false));
+ return;
+ }
+
+ $this->LogMessage->setAction(__('Actualizar Clave Maestra', false));
+
+ if (ConfigDB::setValue('masterPwd', Crypt::mkHashPassword(SessionUtil::getSessionMPass()))) {
+ $this->LogMessage->addDescription(__('Hash de clave maestra actualizado', false));
+
+ $this->JsonResponse->setStatus(0);
+ } else {
+ $this->LogMessage->addDescription(__('Error al actualizar el hash de la clave maestra', false));
+ }
+
+ Email::sendEmail($this->LogMessage);
+ }
+
+ /**
+ * Acción para generar clave maestra temporal
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \phpmailer\phpmailerException
+ */
+ protected function tempMasterPassAction()
+ {
+ $tempMasterMaxTime = Request::analyze('tmpass_maxtime', 3600);
+ $tempMasterPass = CryptMasterPass::setTempMasterPass($tempMasterMaxTime);
+ $tempMasterGroup = Request::analyze('tmpass_group', 0);
+ $tempMasterEmail = Request::analyze('tmpass_chkSendEmail', 0, false, 1);
+
+ $this->LogMessage->setAction(__('Generar Clave Temporal', false));
+
+ if ($tempMasterPass !== false && !empty($tempMasterPass)) {
+ $this->LogMessage->addDescription(__('Clave Temporal Generada', false));
+ $this->LogMessage->addDetails(__('Clave', false), $tempMasterPass);
+
+ if ($tempMasterEmail) {
+ $Message = new NoticeMessage();
+ $Message->setTitle(sprintf(__('Clave Maestra %s'), Util::getAppInfo('appname')));
+ $Message->addDescription(__('Se ha generado una nueva clave para el acceso a sysPass y se solicitará en el siguiente inicio.'));
+ $Message->addDescription('');
+ $Message->addDescription(sprintf(__('La nueva clave es: %s'), $tempMasterPass));
+ $Message->addDescription('');
+ $Message->addDescription(__('No olvide acceder lo antes posible para guardar los cambios.'));
+
+ if ($tempMasterGroup !== 0) {
+ Email::sendEmailBatch($Message, UserUtil::getUserGroupEmail($tempMasterGroup));
+ } else {
+ Email::sendEmailBatch($Message, UserUtil::getUsersEmail());
+ }
+ }
+
+ $this->JsonResponse->setStatus(0);
+ } else {
+ $this->LogMessage->addDescription(__('Error al generar clave temporal', false));
+ }
+
+ Email::sendEmail($this->LogMessage);
+ }
+
+ /**
+ * Acción para importar cuentas
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ protected function importAction()
+ {
+ if (Checks::demoIsEnabled()) {
+ $this->JsonResponse->setDescription(__('Ey, esto es una DEMO!!', false));
+ return;
+ }
+
+ $ImportParams = new ImportParams();
+ $ImportParams->setDefaultUser(Request::analyze('defUser', Session::getUserData()->getUserId()));
+ $ImportParams->setDefaultGroup(Request::analyze('defGroup', Session::getUserData()->getUserGroupId()));
+ $ImportParams->setImportPwd(Request::analyzeEncrypted('importPwd'));
+ $ImportParams->setImportMasterPwd(Request::analyzeEncrypted('importMasterPwd'));
+ $ImportParams->setCsvDelimiter(Request::analyze('csvDelimiter'));
+
+ $Import = new Import($ImportParams);
+ $LogMessage = $Import->doImport($_FILES['inFile']);
+
+ $this->JsonResponse->setDescription($LogMessage->getHtmlDescription(true));
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Acción para exportar cuentas
+ */
+ protected function exportAction()
+ {
+ $exportPassword = Request::analyzeEncrypted('exportPwd');
+ $exportPasswordR = Request::analyzeEncrypted('exportPwdR');
+
+ if (!empty($exportPassword) && $exportPassword !== $exportPasswordR) {
+ $this->JsonResponse->setDescription(__('Las claves no coinciden', false));
+ return;
+ }
+
+ if (!XmlExport::doExport($exportPassword)) {
+ $this->JsonResponse->setDescription(__('Error al realizar la exportación', false));
+ $this->JsonResponse->addMessage(__('Revise el registro de eventos para más detalles', false));
+ return;
+ }
+
+ $this->JsonResponse->setDescription(__('Proceso de exportación finalizado', false));
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Acción para realizar el backup de sysPass
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \phpmailer\phpmailerException
+ */
+ protected function backupAction()
+ {
+ if (Checks::demoIsEnabled()) {
+ $this->JsonResponse->setDescription(__('Ey, esto es una DEMO!!', false));
+ return;
+ }
+
+ if (!Backup::doBackup()) {
+ $this->JsonResponse->setDescription(__('Error al realizar el backup', false));
+ $this->JsonResponse->addMessage(__('Revise el registro de eventos para más detalles', false));
+ return;
+ }
+
+ $this->JsonResponse->setDescription(__('Proceso de backup finalizado', false));
+ $this->JsonResponse->setStatus(0);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Controller/ConfigController.class.php b/inc/SP/Controller/ConfigController.class.php
new file mode 100644
index 00000000..bdcca632
--- /dev/null
+++ b/inc/SP/Controller/ConfigController.class.php
@@ -0,0 +1,430 @@
+.
+ */
+
+namespace SP\Controller;
+
+defined('APP_ROOT') || die();
+
+use SP\Config\Config;
+use SP\Config\ConfigData;
+use SP\Config\ConfigDB;
+use SP\Core\ActionsInterface;
+use SP\Core\CryptMasterPass;
+use SP\Core\DiFactory;
+use SP\Core\Init;
+use SP\Core\Language;
+use SP\Core\Plugin\PluginUtil;
+use SP\Core\Session;
+use SP\Core\SessionUtil;
+use SP\Core\Template;
+use SP\Mgmt\Groups\Group;
+use SP\Mgmt\Profiles\Profile;
+use SP\Mgmt\Users\User;
+use SP\Storage\DBUtil;
+use SP\Util\Checks;
+use SP\Util\Util;
+
+/**
+ * Clase encargada de preparar la presentación de las opciones de configuración
+ *
+ * @package Controller
+ */
+class ConfigController extends ControllerBase implements ActionsInterface
+{
+ /**
+ * @var int
+ */
+ private $tabIndex = 0;
+ /**
+ * @var ConfigData
+ */
+ private $Config;
+ /**
+ * @var array
+ */
+ private $configDB;
+
+ /**
+ * Constructor
+ *
+ * @param $template Template con instancia de plantilla
+ */
+ public function __construct(Template $template = null)
+ {
+ parent::__construct($template);
+
+ $this->Config = Config::getConfig();
+ $this->configDB = ConfigDB::readConfig();
+
+ $this->view->assign('tabs', []);
+ $this->view->assign('sk', SessionUtil::getSessionKey(true));
+ $this->view->assign('isDemoMode', Checks::demoIsEnabled() && !$this->UserData->isUserIsAdminApp());
+ $this->view->assign('isDisabled', (Checks::demoIsEnabled() && !$this->UserData->isUserIsAdminApp()) ? 'disabled' : '');
+ }
+
+ /**
+ * Realizar las accione del controlador
+ *
+ * @param mixed $type Tipo de acción
+ */
+ public function doAction($type = null)
+ {
+ $this->view->addTemplate('tabs-start', 'common');
+
+ $this->getGeneralTab();
+ $this->getAccountsTab();
+ $this->getWikiTab();
+ $this->getLdapTab();
+ $this->getMailTab();
+ $this->getEncryptionTab();
+ $this->getBackupTab();
+ $this->getImportTab();
+ $this->getInfoTab();
+
+ $this->EventDispatcher->notifyEvent('show.config', $this);
+
+ $this->view->addTemplate('tabs-end', 'common');
+ }
+
+ /**
+ * Obtener la pestaña de configuración
+ *
+ * @return void
+ */
+ protected function getGeneralTab()
+ {
+ $this->setAction(self::ACTION_CFG_GENERAL);
+
+ if (!$this->checkAccess()) {
+ return;
+ }
+
+ $this->view->addTemplate('general');
+
+ $this->view->assign('langsAvailable', Language::getAvailableLanguages());
+ $this->view->assign('currentLang', $this->Config->getSiteLang());
+ $this->view->assign('themesAvailable', DiFactory::getTheme()->getThemesAvailable());
+ $this->view->assign('currentTheme', $this->Config->getSiteTheme());
+ $this->view->assign('chkHttps', $this->Config->isHttpsEnabled() ? 'checked="checked"' : '');
+ $this->view->assign('chkDebug', $this->Config->isDebug() ? 'checked="checked"' : '');
+ $this->view->assign('chkMaintenance', $this->Config->isMaintenance() ? 'checked="checked"' : '');
+ $this->view->assign('chkUpdates', $this->Config->isCheckUpdates() ? 'checked="checked"' : '');
+ $this->view->assign('chkNotices', $this->Config->isChecknotices() ? 'checked="checked"' : '');
+ $this->view->assign('sessionTimeout', $this->Config->getSessionTimeout());
+
+ // Events
+ $this->view->assign('chkLog', $this->Config->isLogEnabled() ? 'checked="checked"' : '');
+ $this->view->assign('chkSyslog', $this->Config->isSyslogEnabled() ? 'checked="checked"' : '');
+ $this->view->assign('chkRemoteSyslog', $this->Config->isSyslogRemoteEnabled() ? 'checked="checked"' : '');
+ $this->view->assign('remoteSyslogServer', $this->Config->getSyslogServer());
+ $this->view->assign('remoteSyslogPort', $this->Config->getSyslogPort());
+
+ // Proxy
+ $this->view->assign('chkProxy', $this->Config->isProxyEnabled() ? 'checked="checked"' : '');
+ $this->view->assign('proxyServer', $this->Config->getProxyServer());
+ $this->view->assign('proxyPort', $this->Config->getProxyPort());
+ $this->view->assign('proxyUser', $this->Config->getProxyUser());
+ $this->view->assign('proxyPass', $this->Config->getProxyPass());
+
+ $this->view->assign('actionId', $this->getAction(), 'config');
+ $this->view->append('tabs', ['title' => __('General')]);
+ $this->view->assign('tabIndex', $this->getTabIndex(), 'config');
+ }
+
+ /**
+ * Obtener el índice actual de las pestañas
+ *
+ * @return int
+ */
+ private function getTabIndex()
+ {
+ $index = $this->tabIndex;
+ $this->tabIndex++;
+
+ return $index;
+ }
+
+ /**
+ * Obtener la pestaña de cuentas
+ */
+ protected function getAccountsTab()
+ {
+ $this->setAction(self::ACTION_CFG_ACCOUNTS);
+
+ if (!$this->checkAccess()) {
+ return;
+ }
+
+ $this->view->addTemplate('accounts');
+
+ // Files
+ $this->view->assign('chkFiles', $this->Config->isFilesEnabled() ? 'checked="checked"' : '');
+ $this->view->assign('filesAllowedExts', implode(',', $this->Config->getFilesAllowedExts()));
+ $this->view->assign('filesAllowedSize', $this->Config->getFilesAllowedSize());
+
+ // Accounts
+ $this->view->assign('chkGlobalSearch', $this->Config->isGlobalSearch() ? 'checked="checked"' : '');
+ $this->view->assign('chkResultsAsCards', $this->Config->isResultsAsCards() ? 'checked="checked"' : '');
+ $this->view->assign('chkAccountPassToImage', $this->Config->isAccountPassToImage() ? 'checked="checked"' : '');
+ $this->view->assign('chkAccountLink', $this->Config->isAccountLink() ? 'checked="checked"' : '');
+ $this->view->assign('accountCount', $this->Config->getAccountCount());
+
+ // PublicLinks
+ $this->view->assign('chkPubLinks', $this->Config->isPublinksEnabled() ? 'checked="checked"' : '');
+ $this->view->assign('chkPubLinksImage', $this->Config->isPublinksImageEnabled() ? 'checked="checked"' : '');
+ $this->view->assign('pubLinksMaxTime', $this->Config->getPublinksMaxTime() / 60);
+ $this->view->assign('pubLinksMaxViews', $this->Config->getPublinksMaxViews());
+
+ $this->view->assign('actionId', $this->getAction(), 'accounts');
+ $this->view->append('tabs', ['title' => __('Cuentas')]);
+ $this->view->assign('tabIndex', $this->getTabIndex(), 'accounts');
+ }
+
+ /**
+ * Obtener la pestaña de Wiki
+ *
+ * @return void
+ */
+ protected function getWikiTab()
+ {
+ $this->setAction(self::ACTION_CFG_WIKI);
+
+ if (!$this->checkAccess(self::ACTION_CFG_GENERAL)) {
+ return;
+ }
+
+ $this->view->addTemplate('wiki');
+
+ $this->view->assign('chkWiki', $this->Config->isWikiEnabled() ? 'checked="checked"' : '');
+ $this->view->assign('wikiSearchUrl', $this->Config->getWikiSearchurl());
+ $this->view->assign('wikiPageUrl', $this->Config->getWikiPageurl());
+ $this->view->assign('wikiFilter', implode(',', $this->Config->getWikiFilter()));
+
+ $this->view->assign('chkDokuWiki', $this->Config->isDokuwikiEnabled() ? 'checked="checked"' : '');
+ $this->view->assign('dokuWikiUrl', $this->Config->getDokuwikiUrl());
+ $this->view->assign('dokuWikiUrlBase', $this->Config->getDokuwikiUrlBase());
+ $this->view->assign('dokuWikiUser', $this->Config->getDokuwikiUser());
+ $this->view->assign('dokuWikiPass', $this->Config->getDokuwikiPass());
+ $this->view->assign('dokuWikiNamespace', $this->Config->getDokuwikiNamespace());
+
+ $this->view->assign('actionId', $this->getAction(), 'wiki');
+ $this->view->append('tabs', ['title' => __('Wiki')]);
+ $this->view->assign('tabIndex', $this->getTabIndex(), 'wiki');
+ }
+
+ /**
+ * Obtener la pestaña de LDAP
+ *
+ * @return void
+ */
+ protected function getLdapTab()
+ {
+ $this->setAction(self::ACTION_CFG_LDAP);
+
+ if (!$this->checkAccess(self::ACTION_CFG_GENERAL)) {
+ return;
+ }
+
+ $this->view->addTemplate('ldap');
+
+ $this->view->assign('chkLdap', $this->Config->isLdapEnabled() ? 'checked="checked"' : '');
+ $this->view->assign('chkLdapADS', $this->Config->isLdapAds() ? 'checked="checked"' : '');
+ $this->view->assign('ldapIsAvailable', Checks::ldapIsAvailable());
+ $this->view->assign('ldapServer', $this->Config->getLdapServer());
+ $this->view->assign('ldapBindUser', $this->Config->getLdapBindUser());
+ $this->view->assign('ldapBindPass', $this->Config->getLdapBindPass());
+ $this->view->assign('ldapBase', $this->Config->getLdapBase());
+ $this->view->assign('ldapGroup', $this->Config->getLdapGroup());
+ $this->view->assign('groups', Group::getItem()->getItemsForSelect());
+ $this->view->assign('profiles', Profile::getItem()->getItemsForSelect());
+ $this->view->assign('ldapDefaultGroup', $this->Config->getLdapDefaultGroup());
+ $this->view->assign('ldapDefaultProfile', $this->Config->getLdapDefaultProfile());
+
+ $this->view->assign('actionId', $this->getAction(), 'ldap');
+ $this->view->append('tabs', ['title' => __('LDAP')]);
+ $this->view->assign('tabIndex', $this->getTabIndex(), 'ldap');
+ }
+
+ /**
+ * Obtener la pestaña de Correo
+ *
+ * @return void
+ */
+ protected function getMailTab()
+ {
+ $this->setAction(self::ACTION_CFG_MAIL);
+
+ if (!$this->checkAccess(self::ACTION_CFG_GENERAL)) {
+ return;
+ }
+
+ $this->view->addTemplate('mail');
+
+ $this->view->assign('chkMail', $this->Config->isMailEnabled() ? 'checked="checked"' : '');
+ $this->view->assign('chkMailRequests', $this->Config->isMailRequestsEnabled() ? 'checked="checked"' : '');
+ $this->view->assign('chkMailAuth', $this->Config->isMailAuthenabled() ? 'checked="checked"' : '');
+ $this->view->assign('mailServer', $this->Config->getMailServer());
+ $this->view->assign('mailPort', $this->Config->getMailPort());
+ $this->view->assign('mailUser', $this->Config->getMailUser());
+ $this->view->assign('mailPass', $this->Config->getMailPass());
+ $this->view->assign('currentMailSecurity', $this->Config->getMailSecurity());
+ $this->view->assign('mailFrom', $this->Config->getMailFrom());
+ $this->view->assign('mailSecurity', ['SSL', 'TLS']);
+
+ $this->view->assign('actionId', $this->getAction(), 'mail');
+ $this->view->append('tabs', ['title' => __('Correo')]);
+ $this->view->assign('tabIndex', $this->getTabIndex(), 'mail');
+ }
+
+ /**
+ * Obtener la pestaña de encriptación
+ *
+ * @return void
+ */
+ protected function getEncryptionTab()
+ {
+ $this->setAction(self::ACTION_CFG_ENCRYPTION);
+
+ if (!$this->checkAccess()) {
+ return;
+ }
+
+ $this->view->addTemplate('encryption');
+
+ $this->view->assign('lastUpdateMPass', isset($this->configDB['lastupdatempass']) ? $this->configDB['lastupdatempass'] : 0);
+ $this->view->assign('tempMasterPassTime', isset($this->configDB['tempmaster_passtime']) ? $this->configDB['tempmaster_passtime'] : 0);
+ $this->view->assign('tempMasterMaxTime', isset($this->configDB['tempmaster_maxtime']) ? $this->configDB['tempmaster_maxtime'] : 0);
+ $this->view->assign('tempMasterAttempts', isset($this->configDB['tempmaster_attempts']) ? sprintf('%d/%d', $this->configDB['tempmaster_attempts'], CryptMasterPass::MAX_ATTEMPTS) : 0);
+ $this->view->assign('tempMasterPass', Session::getTemporaryMasterPass());
+ $this->view->assign('groups', Group::getItem()->getItemsForSelect());
+
+ $this->view->append('tabs', ['title' => __('Encriptación')]);
+ $this->view->assign('tabIndex', $this->getTabIndex(), 'encryption');
+ }
+
+ /**
+ * Obtener la pestaña de copia de seguridad
+ *
+ * @return void
+ */
+ protected function getBackupTab()
+ {
+ $this->setAction(self::ACTION_CFG_BACKUP);
+
+ if (!$this->checkAccess()) {
+ return;
+ }
+
+ $this->view->addTemplate('backup');
+
+ $this->view->assign('siteName', Util::getAppInfo('appname'));
+ $this->view->assign('backupDir', Init::$SERVERROOT . '/backup');
+ $this->view->assign('backupPath', Init::$WEBROOT . '/backup');
+ $this->view->assign('isAdminApp', $this->UserData->isUserIsAdminApp());
+
+ $backupHash = $this->Config->getBackupHash();
+ $exportHash = $this->Config->getExportHash();
+
+ $backupFile = $this->view->siteName . '-' . $backupHash . '.tar.gz';
+
+ $this->view->assign('backupFile',
+ ['absolute' => $this->view->backupDir . DIRECTORY_SEPARATOR . $backupFile,
+ 'relative' => $this->view->backupPath . '/' . $backupFile,
+ 'filename' => $backupFile]
+ );
+
+ $backupDbFile = $this->view->siteName . '_db-' . $backupHash . '.sql';
+
+ $this->view->assign('backupDbFile',
+ ['absolute' => $this->view->backupDir . DIRECTORY_SEPARATOR . $backupDbFile,
+ 'relative' => $this->view->backupPath . '/' . $backupDbFile,
+ 'filename' => $backupDbFile]
+ );
+
+ clearstatcache(true, $this->view->backupFile['absolute']);
+ clearstatcache(true, $this->view->backupDbFile['absolute']);
+ $this->view->assign('lastBackupTime', file_exists($this->view->backupFile['absolute']) ? __('Último backup') . ': ' . date('r', filemtime($this->view->backupFile['absolute'])) : __('No se encontraron backups'));
+
+ $exportFile = $this->view->siteName . '-' . $exportHash . '.xml';
+
+ $this->view->assign('exportFile',
+ ['absolute' => $this->view->backupDir . DIRECTORY_SEPARATOR . $exportFile,
+ 'relative' => $this->view->backupPath . '/' . $exportFile,
+ 'filename' => $exportFile]
+ );
+
+ clearstatcache(true, $this->view->exportFile['absolute']);
+ $this->view->assign('lastExportTime', file_exists($this->view->exportFile['absolute']) ? __('Última exportación') . ': ' . date('r', filemtime($this->view->exportFile['absolute'])) : __('No se encontró archivo de exportación'));
+
+ $this->view->append('tabs', ['title' => __('Copia de Seguridad')]);
+ $this->view->assign('tabIndex', $this->getTabIndex(), 'backup');
+ }
+
+ /**
+ * Obtener la pestaña de Importación
+ *
+ * @return void
+ */
+ protected function getImportTab()
+ {
+ $this->setAction(self::ACTION_CFG_IMPORT);
+
+ if (!$this->checkAccess()) {
+ return;
+ }
+
+ $this->view->addTemplate('import');
+
+ $this->view->assign('groups', Group::getItem()->getItemsForSelect());
+ $this->view->assign('users', User::getItem()->getItemsForSelect());
+
+ $this->view->append('tabs', ['title' => __('Importar Cuentas')]);
+ $this->view->assign('tabIndex', $this->getTabIndex(), 'import');
+ }
+
+ /**
+ * Obtener la pestaña de información
+ *
+ * @return void
+ */
+ protected function getInfoTab()
+ {
+ $this->setAction(self::ACTION_CFG_GENERAL);
+
+ if (!$this->checkAccess()) {
+ return;
+ }
+
+ $this->view->addTemplate('info');
+
+ $this->view->assign('dbInfo', DBUtil::getDBinfo());
+ $this->view->assign('dbName', $this->Config->getDbName() . '@' . $this->Config->getDbHost());
+ $this->view->assign('configBackupDate', date('r', $this->configDB['config_backupdate']));
+ $this->view->assign('plugins', PluginUtil::getLoadedPlugins());
+ $this->view->assign('locale', Language::$localeStatus ?: sprintf('%s (%s)', Config::getConfig()->getSiteLang(), __('No instalado')));
+
+ $this->view->append('tabs', ['title' => __('Información')]);
+ $this->view->assign('tabIndex', $this->getTabIndex(), 'info');
+ }
+}
diff --git a/inc/SP/Controller/ControllerBase.class.php b/inc/SP/Controller/ControllerBase.class.php
new file mode 100644
index 00000000..ad402cbe
--- /dev/null
+++ b/inc/SP/Controller/ControllerBase.class.php
@@ -0,0 +1,334 @@
+.
+ */
+
+namespace SP\Controller;
+
+defined('APP_ROOT') || die();
+
+use SP\Core\Acl;
+use SP\Core\DiFactory;
+use SP\Core\Events\EventDispatcherInterface;
+use SP\Core\Exceptions\FileNotFoundException;
+use SP\Core\Exceptions\SPException;
+use SP\Core\Init;
+use SP\Core\Session;
+use SP\Core\Template;
+use SP\Core\UI\ThemeIconsBase;
+use SP\DataModel\ProfileData;
+use SP\DataModel\UserData;
+use SP\Http\JsonResponse;
+
+/**
+ * Clase base para los controladores
+ */
+abstract class ControllerBase
+{
+ /**
+ * 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;
+ const ERR_EXCEPTION = 5;
+
+ /**
+ * Instancia del motor de plantillas a utilizar
+ *
+ * @var Template
+ */
+ public $view;
+ /**
+ * Módulo a usar
+ *
+ * @var int
+ */
+ protected $action;
+ /**
+ * Instancia de los iconos del tema visual
+ *
+ * @var ThemeIconsBase
+ */
+ protected $icons;
+ /**
+ * Nombre del controlador
+ *
+ * @var string
+ */
+ protected $controllerName;
+ /**
+ * @var JsonResponse
+ */
+ protected $Json;
+ /**
+ * @var UserData
+ */
+ protected $UserData;
+ /**
+ * @var ProfileData
+ */
+ protected $UserProfileData;
+ /**
+ * @var EventDispatcherInterface
+ */
+ protected $EventDispatcher;
+ /**
+ * @var bool
+ */
+ protected $loggedIn = false;
+
+ /**
+ * Constructor
+ *
+ * @param $template Template con instancia de plantilla
+ */
+ public function __construct(Template $template = null)
+ {
+ $class = get_called_class();
+ $this->controllerName = substr($class, strrpos($class, '\\') + 1, -strlen('Controller'));
+
+ $this->view = null === $template ? $this->getTemplate() : $template;
+ $this->view->setBase(strtolower($this->controllerName));
+
+ $this->icons = DiFactory::getTheme()->getIcons();
+ $this->EventDispatcher = DiFactory::getEventDispatcher();
+
+ $this->setViewVars();
+ }
+
+ /**
+ * Obtener una nueva instancia del motor de plantillas.
+ *
+ * @param null $template string con el nombre de la plantilla
+ * @return Template
+ */
+ protected function getTemplate($template = null)
+ {
+ return new Template($template);
+ }
+
+ private function setViewVars()
+ {
+ global $timeStart;
+
+ $this->UserData = Session::getUserData();
+ $this->UserProfileData = Session::getUserProfile();
+
+ $this->view->assign('timeStart', $timeStart);
+ $this->view->assign('icons', $this->icons);
+ $this->view->assign('SessionUserData', $this->UserData);
+ }
+
+ /**
+ * @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 = (int)$action;
+ }
+
+ /**
+ * Mostrar los datos de la plantilla
+ */
+ public function view()
+ {
+ try {
+ echo $this->view->render();
+ } catch (FileNotFoundException $e) {
+ debugLog($e->getMessage(), true);
+ }
+ }
+
+ /**
+ * Renderizar los datos de la plantilla y devolverlos
+ */
+ public function render()
+ {
+ try {
+ return $this->view->render();
+ } catch (FileNotFoundException $e) {
+ debugLog($e->getMessage(), true);
+ }
+ }
+
+ /**
+ * Obtener los datos para la vista de depuración
+ */
+ public function getDebug()
+ {
+ global $memInit;
+
+ $this->view->addTemplate('debug', 'common');
+
+ $this->view->assign('time', Init::microtime_float() - $this->view->timeStart);
+ $this->view->assign('memInit', $memInit / 1000);
+ $this->view->assign('memEnd', memory_get_usage() / 1000);
+ }
+
+ /**
+ * @return JsonResponse
+ */
+ public function getJson()
+ {
+ return $this->Json;
+ }
+
+ /**
+ * @param JsonResponse $Json
+ */
+ public function setJson(JsonResponse $Json)
+ {
+ $this->Json = $Json;
+ }
+
+ /**
+ * @return UserData
+ */
+ public function getUserData()
+ {
+ return $this->UserData;
+ }
+
+ /**
+ * @return ProfileData
+ */
+ public function getUserProfileData()
+ {
+ return $this->UserProfileData;
+ }
+
+ /**
+ * @return ThemeIconsBase
+ */
+ public function getIcons()
+ {
+ return $this->icons;
+ }
+
+ /**
+ * @return string
+ */
+ public function getControllerName()
+ {
+ return $this->controllerName;
+ }
+
+ /**
+ * @return bool
+ */
+ public function isLoggedIn()
+ {
+ return $this->loggedIn;
+ }
+
+ /**
+ * @param bool $loggedIn
+ */
+ public function setLoggedIn($loggedIn)
+ {
+ $this->loggedIn = (bool)$loggedIn;
+ $this->view->assign('loggedIn', $this->loggedIn);
+ }
+
+ /**
+ * Establecer la plantilla de error con el código indicado.
+ *
+ * @param int $type int con el tipo de error
+ * @param bool $reset
+ * @param bool $fancy
+ */
+ public function showError($type, $reset = true, $fancy = false)
+ {
+ $errorsTypes = [
+ self::ERR_UNAVAILABLE => ['txt' => __('Opción no disponible'), 'hint' => __('Consulte con el administrador')],
+ self::ERR_ACCOUNT_NO_PERMISSION => ['txt' => __('No tiene permisos para acceder a esta cuenta'), 'hint' => __('Consulte con el administrador')],
+ self::ERR_PAGE_NO_PERMISSION => ['txt' => __('No tiene permisos para acceder a esta página'), 'hint' => __('Consulte con el administrador')],
+ self::ERR_OPERATION_NO_PERMISSION => ['txt' => __('No tiene permisos para realizar esta operación'), 'hint' => __('Consulte con el administrador')],
+ self::ERR_UPDATE_MPASS => ['txt' => __('Clave maestra actualizada'), 'hint' => __('Reinicie la sesión para cambiarla')],
+ self::ERR_EXCEPTION => ['txt' => __('Se ha producido una excepción'), 'hint' => __('Consulte con el administrador')]
+ ];
+
+ if ($reset) {
+ $this->view->resetTemplates();
+ }
+
+ if ($fancy) {
+ $this->view->addTemplate('errorfancy');
+ } else {
+ $this->view->addTemplate('error', 'main');
+ }
+
+ $this->view->append('errors',
+ [
+ 'type' => SPException::SP_WARNING,
+ 'description' => $errorsTypes[$type]['txt'],
+ 'hint' => $errorsTypes[$type]['hint']]
+ );
+ }
+
+ /**
+ * Realizar las acciones del controlador
+ *
+ * @param mixed $type Tipo de acción
+ */
+ public abstract function doAction($type = null);
+
+ /**
+ * Establecer la instancia del motor de plantillas a utilizar.
+ *
+ * @param Template $template
+ */
+ protected function setTemplate(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 (null !== $action) {
+ $checkAction = $action;
+ }
+
+ return Session::getUserData()->isUserIsAdminApp() || Acl::checkUserAccess($checkAction);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Controller/EventlogController.class.php b/inc/SP/Controller/EventlogController.class.php
new file mode 100644
index 00000000..b2999ee0
--- /dev/null
+++ b/inc/SP/Controller/EventlogController.class.php
@@ -0,0 +1,159 @@
+.
+ */
+
+namespace SP\Controller;
+
+defined('APP_ROOT') || die();
+
+use SP\Core\ActionsInterface;
+use SP\Core\Messages\LogMessage;
+use SP\Core\SessionUtil;
+use SP\Core\Template;
+use SP\Html\DataGrid\DataGridActionSearch;
+use SP\Html\DataGrid\DataGridActionType;
+use SP\Html\DataGrid\DataGridPager;
+use SP\Http\Request;
+use SP\Http\Response;
+use SP\Log\Log;
+use SP\Util\Checks;
+
+/**
+ * Clase encargada de preparar la presentación del registro de eventos
+ *
+ * @package Controller
+ */
+class EventlogController extends ControllerBase implements ActionsInterface
+{
+ /**
+ * Número de máximo de registros por página
+ */
+ const MAX_ROWS = 50;
+ /**
+ * @var
+ */
+ protected $limitStart;
+
+ /**
+ * Constructor
+ *
+ * @param $template Template con instancia de plantilla
+ */
+ public function __construct(Template $template = null)
+ {
+ parent::__construct($template);
+
+ $this->view->assign('sk', SessionUtil::getSessionKey(true));
+ }
+
+ /**
+ * Realizar las acciones del controlador
+ *
+ * @param mixed $type Tipo de acción
+ */
+ public function doAction($type = null)
+ {
+ $this->limitStart = Request::analyze('start', 0);
+
+ $this->checkClear();
+ $this->getEventlog();
+
+ $this->EventDispatcher->notifyEvent('show.eventlog', $this);
+ }
+
+ /**
+ * Comprobar si es necesario limpiar el registro de eventos
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \phpmailer\phpmailerException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ * @throws \SP\Core\Exceptions\QueryException
+ */
+ public function checkClear()
+ {
+ $clear = Request::analyze('clear', 0);
+
+ if ($clear === 1
+ && $this->view->sk
+ && SessionUtil::checkSessionKey($this->view->sk)
+ ) {
+ Log::clearEvents();
+
+ Log::writeNewLogAndEmail(__('Vaciar Eventos', false), __('Vaciar registro de eventos', false), null);
+
+ Response::printJson(__('Registro de eventos vaciado', false), 0);
+ }
+ }
+
+ /**
+ * Obtener los datos para la presentación de la tabla de eventos
+ */
+ public function getEventlog()
+ {
+ $this->setAction(self::ACTION_EVL);
+
+ if (!$this->checkAccess()) {
+ return;
+ }
+
+ $this->view->addTemplate('eventlog');
+
+ $GridActionSearch = new DataGridActionSearch();
+ $GridActionSearch->setId(self::ACTION_EVL);
+ $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM);
+ $GridActionSearch->setName('frmSearchEvent');
+ $GridActionSearch->setTitle(__('Buscar Evento'));
+ $GridActionSearch->setOnSubmitFunction('eventlog/search');
+
+ $this->view->assign('rowClass', 'row_even');
+ $this->view->assign('isDemoMode', Checks::demoIsEnabled() || !$this->UserData->isUserIsAdminApp());
+ $this->view->assign('limitStart', $this->limitStart);
+ $this->view->assign('events', Log::getEvents($this->limitStart, self::MAX_ROWS));
+
+ $Pager = $this->getPager($GridActionSearch);
+ $Pager->setTotalRows(Log::$numRows);
+
+ $this->view->assign('Pager', $Pager);
+ }
+
+ /**
+ * Devolver el paginador por defecto
+ *
+ * @param DataGridActionSearch $sourceAction
+ * @return DataGridPager
+ */
+ protected function getPager(DataGridActionSearch $sourceAction)
+ {
+ $GridPager = new DataGridPager();
+ $GridPager->setSourceAction($sourceAction);
+ $GridPager->setOnClickFunction('eventlog/nav');
+ $GridPager->setLimitStart($this->limitStart);
+ $GridPager->setLimitCount(self::MAX_ROWS);
+ $GridPager->setIconPrev($this->icons->getIconNavPrev());
+ $GridPager->setIconNext($this->icons->getIconNavNext());
+ $GridPager->setIconFirst($this->icons->getIconNavFirst());
+ $GridPager->setIconLast($this->icons->getIconNavLast());
+
+ return $GridPager;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Controller/GridItemsSearchController.class.php b/inc/SP/Controller/GridItemsSearchController.class.php
new file mode 100644
index 00000000..d4e603aa
--- /dev/null
+++ b/inc/SP/Controller/GridItemsSearchController.class.php
@@ -0,0 +1,63 @@
+.
+ */
+
+/**
+ * Created by PhpStorm.
+ * User: rdb
+ * Date: 24/11/15
+ * Time: 14:14
+ */
+
+namespace SP\Controller;
+
+defined('APP_ROOT') || die();
+
+use SP\DataModel\ItemSearchData;
+use SP\Html\DataGrid\DataGridPagerInterface;
+
+/**
+ * Class GridItemsSearch para construcción de clases que usen el Grid de búsqueda de registros
+ *
+ * @package SP\Controller
+ */
+abstract class GridItemsSearchController extends ControllerBase
+{
+ /**
+ * @var mixed
+ */
+ protected $grids;
+
+ /**
+ * Actualizar los datos del paginador
+ *
+ * @param DataGridPagerInterface $Pager
+ * @param ItemSearchData $SearchData
+ */
+ protected function updatePager(DataGridPagerInterface $Pager, ItemSearchData $SearchData)
+ {
+ $Pager->setLimitStart($SearchData->getLimitStart());
+ $Pager->setLimitCount($SearchData->getLimitCount());
+ $Pager->setFilterOn($SearchData->getSeachString() !== '');
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Controller/GridTabControllerBase.class.php b/inc/SP/Controller/GridTabControllerBase.class.php
new file mode 100644
index 00000000..d734c421
--- /dev/null
+++ b/inc/SP/Controller/GridTabControllerBase.class.php
@@ -0,0 +1,77 @@
+.
+ */
+
+namespace SP\Controller;
+
+defined('APP_ROOT') || die();
+
+use SP\Controller\Grids\Items;
+use SP\Core\SessionUtil;
+use SP\Core\Template;
+use SP\Util\Checks;
+
+/**
+ * Class GridTabController para la construcción de clases que utilicen el grid de pestañas
+ *
+ * @package SP\Controller
+ */
+abstract class GridTabControllerBase extends ControllerBase
+{
+ /**
+ * Máximo numero de acciones antes de agrupar
+ */
+ const MAX_NUM_ACTIONS = 3;
+ /**
+ * @var mixed
+ */
+ protected $Grids;
+
+ /**
+ * Constructor
+ *
+ * @param $template Template con instancia de plantilla
+ */
+ public function __construct(Template $template = null)
+ {
+ parent::__construct($template);
+
+ $this->view->assign('isDemo', Checks::demoIsEnabled());
+ $this->view->assign('sk', SessionUtil::getSessionKey(true));
+ }
+
+ /**
+ * Inicializar las plantillas para las pestañas
+ */
+ public function useTabs()
+ {
+ $this->Grids = new Items();
+ $this->Grids->setQueryTimeStart($this->view->queryTimeStart);
+
+ $this->view->addTemplate('datatabs-grid', 'grid');
+
+ $this->view->assign('tabs', []);
+ $this->view->assign('activeTab', 0);
+ $this->view->assign('maxNumActions', self::MAX_NUM_ACTIONS);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Controller/Grids/GridBase.class.php b/inc/SP/Controller/Grids/GridBase.class.php
new file mode 100644
index 00000000..ba3ab923
--- /dev/null
+++ b/inc/SP/Controller/Grids/GridBase.class.php
@@ -0,0 +1,104 @@
+.
+ */
+
+namespace SP\Controller\Grids;
+
+use SP\Config\Config;
+use SP\Core\ActionsInterface;
+use SP\Core\DiFactory;
+use SP\Core\SessionUtil;
+use SP\Core\UI\ThemeIconsBase;
+use SP\Html\DataGrid\DataGridActionSearch;
+use SP\Html\DataGrid\DataGridPager;
+
+/**
+ * Class GridBase
+ *
+ * @package SP\Controller\Grids
+ */
+abstract class GridBase implements ActionsInterface
+{
+ /**
+ * @var ThemeIconsBase
+ */
+ protected $icons;
+ /**
+ * @var string
+ */
+ protected $sk;
+ /**
+ * @var int
+ */
+ protected $queryTimeStart;
+ /**
+ * @var bool
+ */
+ protected $filter = false;
+
+ /**
+ * Grids constructor.
+ */
+ public function __construct()
+ {
+ $this->sk = SessionUtil::getSessionKey();
+ $this->icons = DiFactory::getTheme()->getIcons();
+ }
+
+ /**
+ * Devolver el paginador por defecto
+ *
+ * @param DataGridActionSearch $sourceAction
+ * @return DataGridPager
+ */
+ protected function getPager(DataGridActionSearch $sourceAction)
+ {
+ $GridPager = new DataGridPager();
+ $GridPager->setSourceAction($sourceAction);
+ $GridPager->setOnClickFunction('appMgmt/nav');
+ $GridPager->setLimitStart(0);
+ $GridPager->setLimitCount(Config::getConfig()->getAccountCount());
+ $GridPager->setIconPrev($this->icons->getIconNavPrev());
+ $GridPager->setIconNext($this->icons->getIconNavNext());
+ $GridPager->setIconFirst($this->icons->getIconNavFirst());
+ $GridPager->setIconLast($this->icons->getIconNavLast());
+
+ return $GridPager;
+ }
+
+ /**
+ * @param boolean $filter
+ */
+ public function setFilter($filter)
+ {
+ $this->filter = $filter;
+ }
+
+ /**
+ * @param int $queryTimeStart
+ */
+ public function setQueryTimeStart($queryTimeStart)
+ {
+ $this->queryTimeStart = $queryTimeStart;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Controller/Grids/Items.class.php b/inc/SP/Controller/Grids/Items.class.php
new file mode 100644
index 00000000..f112e082
--- /dev/null
+++ b/inc/SP/Controller/Grids/Items.class.php
@@ -0,0 +1,1057 @@
+.
+ */
+
+namespace SP\Controller\Grids;
+
+defined('APP_ROOT') || die();
+
+use SP\Config\Config;
+use SP\Core\Acl;
+use SP\Core\ActionsInterface;
+use SP\Core\Exceptions\InvalidArgumentException;
+use SP\Html\Assets\FontIcon;
+use SP\Html\DataGrid\DataGridAction;
+use SP\Html\DataGrid\DataGridActionSearch;
+use SP\Html\DataGrid\DataGridActionType;
+use SP\Html\DataGrid\DataGridData;
+use SP\Html\DataGrid\DataGridHeader;
+use SP\Html\DataGrid\DataGridTab;
+
+/**
+ * Class Grids con las plantillas de tablas de datos
+ *
+ * @package SP\Controller
+ */
+class Items extends GridBase
+{
+ /**
+ * @return DataGridTab
+ * @throws InvalidArgumentException
+ */
+ public function getCategoriesGrid()
+ {
+ // Grid Header
+ $GridHeaders = new DataGridHeader();
+ $GridHeaders->addHeader(__('Nombre'));
+ $GridHeaders->addHeader(__('Descripción'));
+
+ // Grid Data
+ $GridData = new DataGridData();
+ $GridData->setDataRowSourceId('category_id');
+ $GridData->addDataRowSource('category_name');
+ $GridData->addDataRowSource('category_description');
+
+ // Grid
+ $Grid = new DataGridTab();
+ $Grid->setId('tblCategories');
+ $Grid->setDataRowTemplate('datagrid-rows', 'grid');
+ $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid');
+ $Grid->setHeader($GridHeaders);
+ $Grid->setData($GridData);
+ $Grid->setTitle(__('Categorías'));
+ $Grid->setTime(round(microtime() - $this->queryTimeStart, 5));
+
+ // Grid Actions
+ $GridActionSearch = new DataGridActionSearch();
+ $GridActionSearch->setId(self::ACTION_MGM_CATEGORIES_SEARCH);
+ $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM);
+ $GridActionSearch->setName('frmSearchCategory');
+ $GridActionSearch->setTitle(__('Buscar Categoría'));
+ $GridActionSearch->setOnSubmitFunction('appMgmt/search');
+
+ $Grid->setDataActions($GridActionSearch);
+ $Grid->setPager($this->getPager($GridActionSearch));
+
+ // Grid item's actions
+ $GridActionNew = new DataGridAction();
+ $GridActionNew->setId(self::ACTION_MGM_CATEGORIES_NEW);
+ $GridActionNew->setType(DataGridActionType::NEW_ITEM);
+ $GridActionNew->setName(__('Nueva Categoría'));
+ $GridActionNew->setTitle(__('Nueva Categoría'));
+ $GridActionNew->setIcon($this->icons->getIconAdd());
+ $GridActionNew->setSkip(true);
+ $GridActionNew->setOnClickFunction('appMgmt/show');
+
+ $Grid->setDataActions($GridActionNew);
+
+ $GridActionEdit = new DataGridAction();
+ $GridActionEdit->setId(self::ACTION_MGM_CATEGORIES_EDIT);
+ $GridActionEdit->setType(DataGridActionType::EDIT_ITEM);
+ $GridActionEdit->setName(__('Editar Categoría'));
+ $GridActionEdit->setTitle(__('Editar Categoría'));
+ $GridActionEdit->setIcon($this->icons->getIconEdit());
+ $GridActionEdit->setOnClickFunction('appMgmt/show');
+
+ $Grid->setDataActions($GridActionEdit);
+
+ $GridActionDel = new DataGridAction();
+ $GridActionDel->setId(self::ACTION_MGM_CATEGORIES_DELETE);
+ $GridActionDel->setType(DataGridActionType::DELETE_ITEM);
+ $GridActionDel->setName(__('Eliminar Categoría'));
+ $GridActionDel->setTitle(__('Eliminar Categoría'));
+ $GridActionDel->setIcon($this->icons->getIconDelete());
+ $GridActionDel->setOnClickFunction('appMgmt/delete');
+
+ $Grid->setDataActions($GridActionDel);
+ $Grid->setDataActions($GridActionDel, true);
+
+ return $Grid;
+ }
+
+ /**
+ * @return DataGridTab
+ * @throws InvalidArgumentException
+ */
+ public function getCustomersGrid()
+ {
+ // Grid Header
+ $GridHeaders = new DataGridHeader();
+ $GridHeaders->addHeader(__('Nombre'));
+ $GridHeaders->addHeader(__('Descripción'));
+
+ // Grid Data
+ $GridData = new DataGridData();
+ $GridData->setDataRowSourceId('customer_id');
+ $GridData->addDataRowSource('customer_name');
+ $GridData->addDataRowSource('customer_description');
+
+ // Grid
+ $Grid = new DataGridTab();
+ $Grid->setId('tblCustomers');
+ $Grid->setDataRowTemplate('datagrid-rows', 'grid');
+ $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid');
+ $Grid->setHeader($GridHeaders);
+ $Grid->setData($GridData);
+ $Grid->setTitle(__('Clientes'));
+ $Grid->setTime(round(microtime() - $this->queryTimeStart, 5));
+
+ // Grid Actions
+ $GridActionSearch = new DataGridActionSearch();
+ $GridActionSearch->setId(self::ACTION_MGM_CUSTOMERS_SEARCH);
+ $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM);
+ $GridActionSearch->setName('frmSearchCustomer');
+ $GridActionSearch->setTitle(__('Buscar Cliente'));
+ $GridActionSearch->setOnSubmitFunction('appMgmt/search');
+
+ $Grid->setDataActions($GridActionSearch);
+ $Grid->setPager($this->getPager($GridActionSearch));
+
+ // Grid item's actions
+ $GridActionNew = new DataGridAction();
+ $GridActionNew->setId(self::ACTION_MGM_CUSTOMERS_NEW);
+ $GridActionNew->setType(DataGridActionType::NEW_ITEM);
+ $GridActionNew->setName(__('Nuevo Cliente'));
+ $GridActionNew->setTitle(__('Nuevo Cliente'));
+ $GridActionNew->setIcon($this->icons->getIconAdd());
+ $GridActionNew->setSkip(true);
+ $GridActionNew->setOnClickFunction('appMgmt/show');
+
+ $Grid->setDataActions($GridActionNew);
+
+ $GridActionEdit = new DataGridAction();
+ $GridActionEdit->setId(self::ACTION_MGM_CUSTOMERS_EDIT);
+ $GridActionEdit->setType(DataGridActionType::EDIT_ITEM);
+ $GridActionEdit->setName(__('Editar Cliente'));
+ $GridActionEdit->setTitle(__('Editar Cliente'));
+ $GridActionEdit->setIcon($this->icons->getIconEdit());
+ $GridActionEdit->setOnClickFunction('appMgmt/show');
+
+ $Grid->setDataActions($GridActionEdit);
+
+ $GridActionDel = new DataGridAction();
+ $GridActionDel->setId(self::ACTION_MGM_CUSTOMERS_DELETE);
+ $GridActionDel->setType(DataGridActionType::DELETE_ITEM);
+ $GridActionDel->setName(__('Eliminar Cliente'));
+ $GridActionDel->setTitle(__('Eliminar Cliente'));
+ $GridActionDel->setIcon($this->icons->getIconDelete());
+ $GridActionDel->setOnClickFunction('appMgmt/delete');
+
+ $Grid->setDataActions($GridActionDel);
+ $Grid->setDataActions($GridActionDel, true);
+
+ return $Grid;
+ }
+
+ /**
+ * @return DataGridTab
+ * @throws InvalidArgumentException
+ */
+ public function getCustomFieldsGrid()
+ {
+ // Grid Header
+ $GridHeaders = new DataGridHeader();
+ $GridHeaders->addHeader(__('Módulo'));
+ $GridHeaders->addHeader(__('Nombre'));
+ $GridHeaders->addHeader(__('Tipo'));
+
+ // Grid Data
+ $GridData = new DataGridData();
+ $GridData->setDataRowSourceId('id');
+ $GridData->addDataRowSource('moduleName');
+ $GridData->addDataRowSource('name');
+ $GridData->addDataRowSource('typeName');
+
+ // Grid
+ $Grid = new DataGridTab();
+ $Grid->setId('tblCustomFields');
+ $Grid->setDataRowTemplate('datagrid-rows', 'grid');
+ $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid');
+ $Grid->setHeader($GridHeaders);
+ $Grid->setData($GridData);
+ $Grid->setTitle(__('Campos Personalizados'));
+ $Grid->setTime(round(microtime() - $this->queryTimeStart, 5));
+
+ // Grid Actions
+ $GridActionSearch = new DataGridActionSearch();
+ $GridActionSearch->setId(self::ACTION_MGM_CUSTOMFIELDS_SEARCH);
+ $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM);
+ $GridActionSearch->setName('frmSearchCustomField');
+ $GridActionSearch->setTitle(__('Buscar Campo'));
+ $GridActionSearch->setOnSubmitFunction('appMgmt/search');
+
+ $Grid->setDataActions($GridActionSearch);
+ $Grid->setPager($this->getPager($GridActionSearch));
+
+ // Grid item's actions
+ $GridActionNew = new DataGridAction();
+ $GridActionNew->setId(self::ACTION_MGM_CUSTOMFIELDS_NEW);
+ $GridActionNew->setType(DataGridActionType::NEW_ITEM);
+ $GridActionNew->setName(__('Nuevo Campo'));
+ $GridActionNew->setTitle(__('Nuevo Campo'));
+ $GridActionNew->setIcon($this->icons->getIconAdd());
+ $GridActionNew->setSkip(true);
+ $GridActionNew->setOnClickFunction('appMgmt/show');
+
+ $Grid->setDataActions($GridActionNew);
+
+ $GridActionEdit = new DataGridAction();
+ $GridActionEdit->setId(self::ACTION_MGM_CUSTOMFIELDS_EDIT);
+ $GridActionEdit->setType(DataGridActionType::EDIT_ITEM);
+ $GridActionEdit->setName(__('Editar Campo'));
+ $GridActionEdit->setTitle(__('Editar Campo'));
+ $GridActionEdit->setIcon($this->icons->getIconEdit());
+ $GridActionEdit->setOnClickFunction('appMgmt/show');
+
+ $Grid->setDataActions($GridActionEdit);
+
+ $GridActionDel = new DataGridAction();
+ $GridActionDel->setId(self::ACTION_MGM_CUSTOMFIELDS_DELETE);
+ $GridActionDel->setType(DataGridActionType::DELETE_ITEM);
+ $GridActionDel->setName(__('Eliminar Campo'));
+ $GridActionDel->setTitle(__('Eliminar Campo'));
+ $GridActionDel->setIcon($this->icons->getIconDelete());
+ $GridActionDel->setOnClickFunction('appMgmt/delete');
+
+ $Grid->setDataActions($GridActionDel);
+ $Grid->setDataActions($GridActionDel, true);
+
+ return $Grid;
+ }
+
+ /**
+ * @return DataGridTab
+ * @throws InvalidArgumentException
+ */
+ public function getFilesGrid()
+ {
+ // Grid Header
+ $GridHeaders = new DataGridHeader();
+ $GridHeaders->addHeader(__('Cuenta'));
+ $GridHeaders->addHeader(__('Cliente'));
+ $GridHeaders->addHeader(__('Nombre'));
+ $GridHeaders->addHeader(__('Tipo'));
+ $GridHeaders->addHeader(__('Tamaño'));
+
+ // Grid Data
+ $GridData = new DataGridData();
+ $GridData->setDataRowSourceId('accfile_id');
+ $GridData->addDataRowSource('account_name');
+ $GridData->addDataRowSource('customer_name');
+ $GridData->addDataRowSource('accfile_name');
+ $GridData->addDataRowSource('accfile_type');
+ $GridData->addDataRowSource('accfile_size');
+
+ // Grid
+ $Grid = new DataGridTab();
+ $Grid->setId('tblFiles');
+ $Grid->setDataRowTemplate('datagrid-rows', 'grid');
+ $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid');
+ $Grid->setHeader($GridHeaders);
+ $Grid->setData($GridData);
+ $Grid->setTitle(__('Archivos'));
+ $Grid->setTime(round(microtime() - $this->queryTimeStart, 5));
+
+ // Grid Actions
+ $GridActionSearch = new DataGridActionSearch();
+ $GridActionSearch->setId(self::ACTION_MGM_FILES_SEARCH);
+ $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM);
+ $GridActionSearch->setName('frmSearchFile');
+ $GridActionSearch->setTitle(__('Buscar Archivo'));
+ $GridActionSearch->setOnSubmitFunction('appMgmt/search');
+
+ $Grid->setDataActions($GridActionSearch);
+ $Grid->setPager($this->getPager($GridActionSearch));
+
+ // Grid item's actions
+ $GridActionView = new DataGridAction();
+ $GridActionView->setId(self::ACTION_MGM_FILES_VIEW);
+ $GridActionView->setType(DataGridActionType::VIEW_ITEM);
+ $GridActionView->setName(__('Ver Archivo'));
+ $GridActionView->setTitle(__('Ver Archivo'));
+ $GridActionView->setIcon($this->icons->getIconView());
+ $GridActionView->setOnClickFunction('file/view');
+
+ $Grid->setDataActions($GridActionView);
+
+ $GridActionDel = new DataGridAction();
+ $GridActionDel->setId(self::ACTION_MGM_FILES_DELETE);
+ $GridActionDel->setType(DataGridActionType::DELETE_ITEM);
+ $GridActionDel->setName(__('Eliminar Archivo'));
+ $GridActionDel->setTitle(__('Eliminar Archivo'));
+ $GridActionDel->setIcon($this->icons->getIconDelete());
+ $GridActionDel->setOnClickFunction('appMgmt/delete');
+
+ $Grid->setDataActions($GridActionDel);
+ $Grid->setDataActions($GridActionDel, true);
+
+ return $Grid;
+ }
+
+ /**
+ * @return DataGridTab
+ * @throws InvalidArgumentException
+ */
+ public function getAccountsGrid()
+ {
+ // Grid Header
+ $GridHeaders = new DataGridHeader();
+ $GridHeaders->addHeader(__('Nombre'));
+ $GridHeaders->addHeader(__('Cliente'));
+
+ // Grid Data
+ $GridData = new DataGridData();
+ $GridData->setDataRowSourceId('account_id');
+ $GridData->addDataRowSource('account_name');
+ $GridData->addDataRowSource('customer_name');
+
+ // Grid
+ $Grid = new DataGridTab();
+ $Grid->setId('tblAccounts');
+ $Grid->setDataRowTemplate('datagrid-rows', 'grid');
+ $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid');
+ $Grid->setHeader($GridHeaders);
+ $Grid->setData($GridData);
+ $Grid->setTitle(__('Cuentas'));
+ $Grid->setTime(round(microtime() - $this->queryTimeStart, 5));
+
+ // Grid Actions
+ $GridActionSearch = new DataGridActionSearch();
+ $GridActionSearch->setId(self::ACTION_MGM_ACCOUNTS_SEARCH);
+ $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM);
+ $GridActionSearch->setName('frmSearchAccount');
+ $GridActionSearch->setTitle(__('Buscar Cuenta'));
+ $GridActionSearch->setOnSubmitFunction('appMgmt/search');
+
+ $Grid->setDataActions($GridActionSearch);
+ $Grid->setPager($this->getPager($GridActionSearch));
+
+ // Grid item's actions
+ $GridActionDel = new DataGridAction();
+ $GridActionDel->setId(self::ACTION_MGM_ACCOUNTS_DELETE);
+ $GridActionDel->setType(DataGridActionType::DELETE_ITEM);
+ $GridActionDel->setName(__('Eliminar Cuenta'));
+ $GridActionDel->setTitle(__('Eliminar Cuenta'));
+ $GridActionDel->setIcon($this->icons->getIconDelete());
+ $GridActionDel->setOnClickFunction('appMgmt/delete');
+
+ $Grid->setDataActions($GridActionDel);
+ $Grid->setDataActions($GridActionDel, true);
+
+ return $Grid;
+ }
+
+ /**
+ * @return DataGridTab
+ * @throws InvalidArgumentException
+ */
+ public function getAccountsHistoryGrid()
+ {
+ // Grid Header
+ $GridHeaders = new DataGridHeader();
+ $GridHeaders->addHeader(__('Nombre'));
+ $GridHeaders->addHeader(__('Cliente'));
+ $GridHeaders->addHeader(__('Fecha'));
+ $GridHeaders->addHeader(__('Estado'));
+
+ $iconEdit = clone $this->icons->getIconEdit();
+ $iconDelete = clone $this->icons->getIconDelete();
+
+ // Grid Data
+ $GridData = new DataGridData();
+ $GridData->setDataRowSourceId('acchistory_id');
+ $GridData->addDataRowSource('acchistory_name');
+ $GridData->addDataRowSource('customer_name');
+ $GridData->addDataRowSource('acchistory_date');
+ $GridData->addDataRowSourceWithIcon('acchistory_isModify', $iconEdit->setTitle(__('Modificada'))->setClass('opacity50'));
+ $GridData->addDataRowSourceWithIcon('acchistory_isDeleted', $iconDelete->setTitle(__('Eliminada'))->setClass('opacity50'));
+
+ // Grid
+ $Grid = new DataGridTab();
+ $Grid->setId('tblAccountsHistory');
+ $Grid->setDataRowTemplate('datagrid-rows', 'grid');
+ $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid');
+ $Grid->setHeader($GridHeaders);
+ $Grid->setData($GridData);
+ $Grid->setTitle(__('Cuentas (H)'));
+ $Grid->setTime(round(microtime() - $this->queryTimeStart, 5));
+
+ // Grid Actions
+ $GridActionSearch = new DataGridActionSearch();
+ $GridActionSearch->setId(self::ACTION_MGM_ACCOUNTS_SEARCH_HISTORY);
+ $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM);
+ $GridActionSearch->setName('frmSearchAccountHistory');
+ $GridActionSearch->setTitle(__('Buscar Cuenta'));
+ $GridActionSearch->setOnSubmitFunction('appMgmt/search');
+
+ $Grid->setDataActions($GridActionSearch);
+ $Grid->setPager($this->getPager($GridActionSearch));
+
+ // Grid item's actions
+ $GridActionRestore = new DataGridAction();
+ $GridActionRestore->setId(self::ACTION_MGM_ACCOUNTS_EDIT_RESTORE);
+ $GridActionRestore->setType(DataGridActionType::EDIT_ITEM);
+ $GridActionRestore->setName(__('Restaurar Cuenta'));
+ $GridActionRestore->setTitle(__('Restaurar Cuenta'));
+ $GridActionRestore->setIcon($this->icons->getIconRestore());
+ $GridActionRestore->setOnClickFunction('');
+
+// $Grid->setDataActions($GridActionRestore);
+
+ $GridActionDel = new DataGridAction();
+ $GridActionDel->setId(self::ACTION_MGM_ACCOUNTS_DELETE_HISTORY);
+ $GridActionDel->setType(DataGridActionType::DELETE_ITEM);
+ $GridActionDel->setName(__('Eliminar Cuenta'));
+ $GridActionDel->setTitle(__('Eliminar Cuenta'));
+ $GridActionDel->setIcon($this->icons->getIconDelete());
+ $GridActionDel->setOnClickFunction('appMgmt/delete');
+
+ $Grid->setDataActions($GridActionDel);
+ $Grid->setDataActions($GridActionDel, true);
+
+ return $Grid;
+ }
+
+ /**
+ * @return DataGridTab
+ * @throws InvalidArgumentException
+ */
+ public function getUsersGrid()
+ {
+ // Grid Header
+ $GridHeaders = new DataGridHeader();
+ $GridHeaders->addHeader(__('Nombre'));
+ $GridHeaders->addHeader(__('Login'));
+ $GridHeaders->addHeader(__('Perfil'));
+ $GridHeaders->addHeader(__('Grupo'));
+ $GridHeaders->addHeader(__('Propiedades'));
+
+ // Grid Data
+ $GridData = new DataGridData();
+ $GridData->setDataRowSourceId('user_id');
+ $GridData->addDataRowSource('user_name');
+ $GridData->addDataRowSource('user_login');
+ $GridData->addDataRowSource('userprofile_name');
+ $GridData->addDataRowSource('usergroup_name');
+ $GridData->addDataRowSourceWithIcon('user_isAdminApp', $this->icons->getIconAppAdmin());
+ $GridData->addDataRowSourceWithIcon('user_isAdminAcc', $this->icons->getIconAccAdmin());
+ $GridData->addDataRowSourceWithIcon('user_isLdap', $this->icons->getIconLdapUser());
+ $GridData->addDataRowSourceWithIcon('user_isDisabled', $this->icons->getIconDisabled());
+
+ // Grid
+ $Grid = new DataGridTab();
+ $Grid->setId('tblUsers');
+ $Grid->setDataRowTemplate('datagrid-rows', 'grid');
+ $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid');
+ $Grid->setHeader($GridHeaders);
+ $Grid->setData($GridData);
+ $Grid->setTitle(__('Usuarios'));
+ $Grid->setTime(round(microtime() - $this->queryTimeStart, 5));
+
+ // Grid Actions
+ $GridActionSearch = new DataGridActionSearch();
+ $GridActionSearch->setId(self::ACTION_USR_USERS_SEARCH);
+ $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM);
+ $GridActionSearch->setName('frmSearchUser');
+ $GridActionSearch->setTitle(__('Buscar Usuario'));
+ $GridActionSearch->setOnSubmitFunction('appMgmt/search');
+
+ $Grid->setDataActions($GridActionSearch);
+ $Grid->setPager($this->getPager($GridActionSearch));
+
+ $GridActionNew = new DataGridAction();
+ $GridActionNew->setId(self::ACTION_USR_USERS_NEW);
+ $GridActionNew->setType(DataGridActionType::NEW_ITEM);
+ $GridActionNew->setName(__('Nuevo Usuario'));
+ $GridActionNew->setTitle(__('Nuevo Usuario'));
+ $GridActionNew->setIcon($this->icons->getIconAdd());
+ $GridActionNew->setSkip(true);
+ $GridActionNew->setOnClickFunction('appMgmt/show');
+
+ $Grid->setDataActions($GridActionNew);
+
+ if (Acl::checkUserAccess(ActionsInterface::ACTION_CFG_IMPORT)
+ && Config::getConfig()->isLdapEnabled()
+ ) {
+ $GridActionLdapSync = new DataGridAction();
+ $GridActionLdapSync->setId(self::ACTION_USR_SYNC_LDAP);
+ $GridActionLdapSync->setType(DataGridActionType::NEW_ITEM);
+ $GridActionLdapSync->setName(__('Importar usuarios de LDAP'));
+ $GridActionLdapSync->setTitle(__('Importar usuarios de LDAP'));
+ $GridActionLdapSync->setIcon(new FontIcon('get_app'));
+ $GridActionLdapSync->setSkip(true);
+ $GridActionLdapSync->setOnClickFunction('appMgmt/ldapSync');
+
+ $Grid->setDataActions($GridActionLdapSync);
+ }
+
+ // Grid item's actions
+ $GridActionView = new DataGridAction();
+ $GridActionView->setId(self::ACTION_USR_USERS_VIEW);
+ $GridActionView->setType(DataGridActionType::VIEW_ITEM);
+ $GridActionView->setName(__('Ver Detalles de Usuario'));
+ $GridActionView->setTitle(__('Ver Detalles de Usuario'));
+ $GridActionView->setIcon($this->icons->getIconView());
+ $GridActionView->setOnClickFunction('appMgmt/show');
+
+ $Grid->setDataActions($GridActionView);
+
+ $GridActionEdit = new DataGridAction();
+ $GridActionEdit->setId(self::ACTION_USR_USERS_EDIT);
+ $GridActionEdit->setType(DataGridActionType::EDIT_ITEM);
+ $GridActionEdit->setName(__('Editar Usuario'));
+ $GridActionEdit->setTitle(__('Editar Usuario'));
+ $GridActionEdit->setIcon($this->icons->getIconEdit());
+ $GridActionEdit->setOnClickFunction('appMgmt/show');
+
+ $Grid->setDataActions($GridActionEdit);
+
+ $GridActionEditPass = new DataGridAction();
+ $GridActionEditPass->setId(self::ACTION_USR_USERS_EDITPASS);
+ $GridActionEditPass->setType(DataGridActionType::EDIT_ITEM);
+ $GridActionEditPass->setName(__('Cambiar Clave de Usuario'));
+ $GridActionEditPass->setTitle(__('Cambiar Clave de Usuario'));
+ $GridActionEditPass->setIcon($this->icons->getIconEditPass());
+ $GridActionEditPass->setOnClickFunction('appMgmt/show');
+ $GridActionEditPass->setFilterRowSource('user_isLdap');
+
+ $Grid->setDataActions($GridActionEditPass);
+
+ $GridActionDel = new DataGridAction();
+ $GridActionDel->setId(self::ACTION_USR_USERS_DELETE);
+ $GridActionDel->setType(DataGridActionType::DELETE_ITEM);
+ $GridActionDel->setName(__('Eliminar Usuario'));
+ $GridActionDel->setTitle(__('Eliminar Usuario'));
+ $GridActionDel->setIcon($this->icons->getIconDelete());
+ $GridActionDel->setOnClickFunction('appMgmt/delete');
+
+ $Grid->setDataActions($GridActionDel);
+ $Grid->setDataActions($GridActionDel, true);
+
+ return $Grid;
+ }
+
+ /**
+ * @return DataGridTab
+ * @throws InvalidArgumentException
+ */
+ public function getGroupsGrid()
+ {
+ // Grid Header
+ $GridHeaders = new DataGridHeader();
+ $GridHeaders->addHeader(__('Nombre'));
+ $GridHeaders->addHeader(__('Descripción'));
+
+ // Grid Data
+ $GridData = new DataGridData();
+ $GridData->setDataRowSourceId('usergroup_id');
+ $GridData->addDataRowSource('usergroup_name');
+ $GridData->addDataRowSource('usergroup_description');
+
+ // Grid
+ $Grid = new DataGridTab();
+ $Grid->setId('tblGroups');
+ $Grid->setDataRowTemplate('datagrid-rows', 'grid');
+ $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid');
+ $Grid->setHeader($GridHeaders);
+ $Grid->setData($GridData);
+ $Grid->setTitle(__('Grupos'));
+ $Grid->setTime(round(microtime() - $this->queryTimeStart, 5));
+
+ // Grid Actions
+ $GridActionSearch = new DataGridActionSearch();
+ $GridActionSearch->setId(self::ACTION_USR_GROUPS_SEARCH);
+ $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM);
+ $GridActionSearch->setName('frmSearchGroup');
+ $GridActionSearch->setTitle(__('Buscar Grupo'));
+ $GridActionSearch->setOnSubmitFunction('appMgmt/search');
+
+ $Grid->setDataActions($GridActionSearch);
+ $Grid->setPager($this->getPager($GridActionSearch));
+
+ // Grid item's actions
+ $GridActionNew = new DataGridAction();
+ $GridActionNew->setId(self::ACTION_USR_GROUPS_NEW);
+ $GridActionNew->setType(DataGridActionType::NEW_ITEM);
+ $GridActionNew->setName(__('Nuevo Grupo'));
+ $GridActionNew->setTitle(__('Nuevo Grupo'));
+ $GridActionNew->setIcon($this->icons->getIconAdd());
+ $GridActionNew->setSkip(true);
+ $GridActionNew->setOnClickFunction('appMgmt/show');
+
+ $Grid->setDataActions($GridActionNew);
+
+ $GridActionEdit = new DataGridAction();
+ $GridActionEdit->setId(self::ACTION_USR_GROUPS_EDIT);
+ $GridActionEdit->setType(DataGridActionType::EDIT_ITEM);
+ $GridActionEdit->setName(__('Editar Grupo'));
+ $GridActionEdit->setTitle(__('Editar Grupo'));
+ $GridActionEdit->setIcon($this->icons->getIconEdit());
+ $GridActionEdit->setOnClickFunction('appMgmt/show');
+
+ $Grid->setDataActions($GridActionEdit);
+
+ $GridActionDel = new DataGridAction();
+ $GridActionDel->setId(self::ACTION_USR_GROUPS_DELETE);
+ $GridActionDel->setType(DataGridActionType::DELETE_ITEM);
+ $GridActionDel->setName(__('Eliminar Grupo'));
+ $GridActionDel->setTitle(__('Eliminar Grupo'));
+ $GridActionDel->setIcon($this->icons->getIconDelete());
+ $GridActionDel->setOnClickFunction('appMgmt/delete');
+
+ $Grid->setDataActions($GridActionDel);
+ $Grid->setDataActions($GridActionDel, true);
+
+ return $Grid;
+ }
+
+ /**
+ * @return DataGridTab
+ * @throws InvalidArgumentException
+ */
+ public function getProfilesGrid()
+ {
+ // Grid Header
+ $GridHeaders = new DataGridHeader();
+ $GridHeaders->addHeader(__('Nombre'));
+
+ // Grid Data
+ $GridData = new DataGridData();
+ $GridData->setDataRowSourceId('userprofile_id');
+ $GridData->addDataRowSource('userprofile_name');
+
+ // Grid
+ $Grid = new DataGridTab();
+ $Grid->setId('tblProfiles');
+ $Grid->setDataRowTemplate('datagrid-rows', 'grid');
+ $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid');
+ $Grid->setHeader($GridHeaders);
+ $Grid->setData($GridData);
+ $Grid->setTitle(__('Perfiles'));
+ $Grid->setTime(round(microtime() - $this->queryTimeStart, 5));
+
+ // Grid Actions
+ $GridActionSearch = new DataGridActionSearch();
+ $GridActionSearch->setId(self::ACTION_USR_PROFILES_SEARCH);
+ $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM);
+ $GridActionSearch->setName('frmSearchProfile');
+ $GridActionSearch->setTitle(__('Buscar Perfil'));
+ $GridActionSearch->setOnSubmitFunction('appMgmt/search');
+
+ $Grid->setDataActions($GridActionSearch);
+ $Grid->setPager($this->getPager($GridActionSearch));
+
+ // Grid item's actions
+ $GridActionNew = new DataGridAction();
+ $GridActionNew->setId(self::ACTION_USR_PROFILES_NEW);
+ $GridActionNew->setType(DataGridActionType::NEW_ITEM);
+ $GridActionNew->setName(__('Nuevo Perfil'));
+ $GridActionNew->setTitle(__('Nuevo Perfil'));
+ $GridActionNew->setIcon($this->icons->getIconAdd());
+ $GridActionNew->setSkip(true);
+ $GridActionNew->setOnClickFunction('appMgmt/show');
+
+ $Grid->setDataActions($GridActionNew);
+
+ $GridActionView = new DataGridAction();
+ $GridActionView->setId(self::ACTION_USR_PROFILES_VIEW);
+ $GridActionView->setType(DataGridActionType::VIEW_ITEM);
+ $GridActionView->setName(__('Ver Detalles de Perfil'));
+ $GridActionView->setTitle(__('Ver Detalles de Perfil'));
+ $GridActionView->setIcon($this->icons->getIconView());
+ $GridActionView->setOnClickFunction('appMgmt/show');
+
+ $Grid->setDataActions($GridActionView);
+
+ $GridActionEdit = new DataGridAction();
+ $GridActionEdit->setId(self::ACTION_USR_PROFILES_EDIT);
+ $GridActionEdit->setType(DataGridActionType::EDIT_ITEM);
+ $GridActionEdit->setName(__('Editar Perfil'));
+ $GridActionEdit->setTitle(__('Editar Perfil'));
+ $GridActionEdit->setIcon($this->icons->getIconEdit());
+ $GridActionEdit->setOnClickFunction('appMgmt/show');
+
+ $Grid->setDataActions($GridActionEdit);
+
+ $GridActionDel = new DataGridAction();
+ $GridActionDel->setId(self::ACTION_USR_PROFILES_DELETE);
+ $GridActionDel->setType(DataGridActionType::DELETE_ITEM);
+ $GridActionDel->setName(__('Eliminar Perfil'));
+ $GridActionDel->setTitle(__('Eliminar Perfil'));
+ $GridActionDel->setIcon($this->icons->getIconDelete());
+ $GridActionDel->setOnClickFunction('appMgmt/delete');
+
+ $Grid->setDataActions($GridActionDel);
+ $Grid->setDataActions($GridActionDel, true);
+
+ return $Grid;
+ }
+
+ /**
+ * @return DataGridTab
+ * @throws InvalidArgumentException
+ */
+ public function getTokensGrid()
+ {
+ // Grid Header
+ $GridHeaders = new DataGridHeader();
+ $GridHeaders->addHeader(__('Usuario'));
+ $GridHeaders->addHeader(__('Acción'));
+
+ // Grid Data
+ $GridData = new DataGridData();
+ $GridData->setDataRowSourceId('authtoken_id');
+ $GridData->addDataRowSource('user_login');
+ $GridData->addDataRowSource('authtoken_actionId');
+
+ // Grid
+ $Grid = new DataGridTab();
+ $Grid->setId('tblTokens');
+ $Grid->setDataRowTemplate('datagrid-rows', 'grid');
+ $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid');
+ $Grid->setHeader($GridHeaders);
+ $Grid->setData($GridData);
+ $Grid->setTitle(__('Autorizaciones API'));
+ $Grid->setTime(round(microtime() - $this->queryTimeStart, 5));
+
+ // Grid Actions
+ $GridActionSearch = new DataGridActionSearch();
+ $GridActionSearch->setId(self::ACTION_MGM_APITOKENS_SEARCH);
+ $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM);
+ $GridActionSearch->setName('frmSearchToken');
+ $GridActionSearch->setTitle(__('Buscar Token'));
+ $GridActionSearch->setOnSubmitFunction('appMgmt/search');
+
+ $Grid->setDataActions($GridActionSearch);
+ $Grid->setPager($this->getPager($GridActionSearch));
+
+ // Grid item's actions
+ $GridActionNew = new DataGridAction();
+ $GridActionNew->setId(self::ACTION_MGM_APITOKENS_NEW);
+ $GridActionNew->setType(DataGridActionType::NEW_ITEM);
+ $GridActionNew->setName(__('Nueva Autorización'));
+ $GridActionNew->setTitle(__('Nueva Autorización'));
+ $GridActionNew->setIcon($this->icons->getIconAdd());
+ $GridActionNew->setSkip(true);
+ $GridActionNew->setOnClickFunction('appMgmt/show');
+
+ $Grid->setDataActions($GridActionNew);
+
+ $GridActionView = new DataGridAction();
+ $GridActionView->setId(self::ACTION_MGM_APITOKENS_VIEW);
+ $GridActionView->setType(DataGridActionType::VIEW_ITEM);
+ $GridActionView->setName(__('Ver token de Autorización'));
+ $GridActionView->setTitle(__('Ver token de Autorización'));
+ $GridActionView->setIcon($this->icons->getIconView());
+ $GridActionView->setOnClickFunction('appMgmt/show');
+
+ $Grid->setDataActions($GridActionView);
+
+ $GridActionEdit = new DataGridAction();
+ $GridActionEdit->setId(self::ACTION_MGM_APITOKENS_EDIT);
+ $GridActionEdit->setType(DataGridActionType::EDIT_ITEM);
+ $GridActionEdit->setName(__('Editar Autorización'));
+ $GridActionEdit->setTitle(__('Editar Autorización'));
+ $GridActionEdit->setIcon($this->icons->getIconEdit());
+ $GridActionEdit->setOnClickFunction('appMgmt/show');
+
+ $Grid->setDataActions($GridActionEdit);
+
+ $GridActionDel = new DataGridAction();
+ $GridActionDel->setId(self::ACTION_MGM_APITOKENS_DELETE);
+ $GridActionDel->setType(DataGridActionType::DELETE_ITEM);
+ $GridActionDel->setName(__('Eliminar Autorización'));
+ $GridActionDel->setTitle(__('Eliminar Autorización'));
+ $GridActionDel->setIcon($this->icons->getIconDelete());
+ $GridActionDel->setOnClickFunction('appMgmt/delete');
+
+ $Grid->setDataActions($GridActionDel);
+ $Grid->setDataActions($GridActionDel, true);
+
+ return $Grid;
+ }
+
+ /**
+ * @return DataGridTab
+ * @throws InvalidArgumentException
+ */
+ public function getPublicLinksGrid()
+ {
+ // Grid Header
+ $GridHeaders = new DataGridHeader();
+ $GridHeaders->addHeader(__('Cuenta'));
+ $GridHeaders->addHeader(__('Fecha Creación'));
+ $GridHeaders->addHeader(__('Fecha Caducidad'));
+ $GridHeaders->addHeader(__('Usuario'));
+ $GridHeaders->addHeader(__('Notificar'));
+ $GridHeaders->addHeader(__('Visitas'));
+
+ // Grid Data
+ $GridData = new DataGridData();
+ $GridData->setDataRowSourceId('publicLink_id');
+ $GridData->addDataRowSource('accountName');
+ $GridData->addDataRowSource('dateAdd');
+ $GridData->addDataRowSource('dateExpire');
+ $GridData->addDataRowSource('userLogin');
+ $GridData->addDataRowSource('notify');
+ $GridData->addDataRowSource('countViews');
+
+ // Grid
+ $Grid = new DataGridTab();
+ $Grid->setId('tblLinks');
+ $Grid->setDataRowTemplate('datagrid-rows', 'grid');
+ $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid');
+ $Grid->setHeader($GridHeaders);
+ $Grid->setData($GridData);
+ $Grid->setTitle(__('Enlaces'));
+ $Grid->setTime(round(microtime() - $this->queryTimeStart, 5));
+
+ // Grid Actions
+ $GridActionSearch = new DataGridActionSearch();
+ $GridActionSearch->setId(self::ACTION_MGM_PUBLICLINKS_SEARCH);
+ $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM);
+ $GridActionSearch->setName('frmSearchLink');
+ $GridActionSearch->setTitle(__('Buscar Enlace'));
+ $GridActionSearch->setOnSubmitFunction('appMgmt/search');
+
+ $Grid->setDataActions($GridActionSearch);
+ $Grid->setPager($this->getPager($GridActionSearch));
+
+ // Grid item's actions
+ $GridActionView = new DataGridAction();
+ $GridActionView->setId(self::ACTION_MGM_PUBLICLINKS_VIEW);
+ $GridActionView->setType(DataGridActionType::VIEW_ITEM);
+ $GridActionView->setName(__('Ver Enlace'));
+ $GridActionView->setTitle(__('Ver Enlace'));
+ $GridActionView->setIcon($this->icons->getIconView());
+ $GridActionView->setOnClickFunction('appMgmt/show');
+
+ $Grid->setDataActions($GridActionView);
+
+ $GridActionRefresh = new DataGridAction();
+ $GridActionRefresh->setId(self::ACTION_MGM_PUBLICLINKS_REFRESH);
+ $GridActionRefresh->setName(__('Renovar Enlace'));
+ $GridActionRefresh->setTitle(__('Renovar Enlace'));
+ $GridActionRefresh->setIcon($this->icons->getIconRefresh());
+ $GridActionRefresh->setOnClickFunction('link/refresh');
+
+ $Grid->setDataActions($GridActionRefresh);
+
+ $GridActionDel = new DataGridAction();
+ $GridActionDel->setId(self::ACTION_MGM_PUBLICLINKS_DELETE);
+ $GridActionDel->setType(DataGridActionType::DELETE_ITEM);
+ $GridActionDel->setName(__('Eliminar Enlace'));
+ $GridActionDel->setTitle(__('Eliminar Enlace'));
+ $GridActionDel->setIcon($this->icons->getIconDelete());
+ $GridActionDel->setOnClickFunction('appMgmt/delete');
+
+ $Grid->setDataActions($GridActionDel);
+ $Grid->setDataActions($GridActionDel, true);
+
+ return $Grid;
+ }
+
+ /**
+ * @return DataGridTab
+ * @throws InvalidArgumentException
+ */
+ public function getTagsGrid()
+ {
+ // Grid Header
+ $GridHeaders = new DataGridHeader();
+ $GridHeaders->addHeader(__('Nombre'));
+
+ // Grid Data
+ $GridData = new DataGridData();
+ $GridData->setDataRowSourceId('tag_id');
+ $GridData->addDataRowSource('tag_name');
+
+ // Grid
+ $Grid = new DataGridTab();
+ $Grid->setId('tblTags');
+ $Grid->setDataRowTemplate('datagrid-rows', 'grid');
+ $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid');
+ $Grid->setHeader($GridHeaders);
+ $Grid->setData($GridData);
+ $Grid->setTitle(__('Etiquetas'));
+ $Grid->setTime(round(microtime() - $this->queryTimeStart, 5));
+
+ // Grid Actions
+ $GridActionSearch = new DataGridActionSearch();
+ $GridActionSearch->setId(self::ACTION_MGM_TAGS_SEARCH);
+ $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM);
+ $GridActionSearch->setName('frmSearchTag');
+ $GridActionSearch->setTitle(__('Buscar Etiqueta'));
+ $GridActionSearch->setOnSubmitFunction('appMgmt/search');
+
+ $Grid->setDataActions($GridActionSearch);
+ $Grid->setPager($this->getPager($GridActionSearch));
+
+ // Grid item's actions
+ $GridActionNew = new DataGridAction();
+ $GridActionNew->setId(self::ACTION_MGM_TAGS_NEW);
+ $GridActionNew->setType(DataGridActionType::NEW_ITEM);
+ $GridActionNew->setName(__('Nueva Etiqueta'));
+ $GridActionNew->setTitle(__('Nueva Etiqueta'));
+ $GridActionNew->setIcon($this->icons->getIconAdd());
+ $GridActionNew->setSkip(true);
+ $GridActionNew->setOnClickFunction('appMgmt/show');
+
+ $Grid->setDataActions($GridActionNew);
+
+ $GridActionEdit = new DataGridAction();
+ $GridActionEdit->setId(self::ACTION_MGM_TAGS_EDIT);
+ $GridActionEdit->setType(DataGridActionType::EDIT_ITEM);
+ $GridActionEdit->setName(__('Editar Etiqueta'));
+ $GridActionEdit->setTitle(__('Editar Etiqueta'));
+ $GridActionEdit->setIcon($this->icons->getIconEdit());
+ $GridActionEdit->setOnClickFunction('appMgmt/show');
+
+ $Grid->setDataActions($GridActionEdit);
+
+ $GridActionDel = new DataGridAction();
+ $GridActionDel->setId(self::ACTION_MGM_TAGS_DELETE);
+ $GridActionDel->setType(DataGridActionType::DELETE_ITEM);
+ $GridActionDel->setName(__('Eliminar Etiqueta'));
+ $GridActionDel->setTitle(__('Eliminar Etiqueta'));
+ $GridActionDel->setIcon($this->icons->getIconDelete());
+ $GridActionDel->setOnClickFunction('appMgmt/delete');
+
+ $Grid->setDataActions($GridActionDel);
+ $Grid->setDataActions($GridActionDel, true);
+
+ return $Grid;
+ }
+
+ /**
+ * @return DataGridTab
+ * @throws InvalidArgumentException
+ */
+ public function getPluginsGrid()
+ {
+ // Grid Header
+ $GridHeaders = new DataGridHeader();
+ $GridHeaders->addHeader(__('Plugin'));
+ $GridHeaders->addHeader(__('Estado'));
+
+ // Grid Data
+ $GridData = new DataGridData();
+ $GridData->setDataRowSourceId('plugin_id');
+ $GridData->addDataRowSource('plugin_name');
+ $GridData->addDataRowSourceWithIcon('plugin_enabled', $this->icons->getIconEnabled());
+ $GridData->addDataRowSourceWithIcon('plugin_enabled', $this->icons->getIconDisabled(), 0);
+
+ // Grid
+ $Grid = new DataGridTab();
+ $Grid->setId('tblPlugins');
+ $Grid->setDataRowTemplate('datagrid-rows', 'grid');
+ $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid');
+ $Grid->setHeader($GridHeaders);
+ $Grid->setData($GridData);
+ $Grid->setTitle(__('Plugins'));
+ $Grid->setTime(round(microtime() - $this->queryTimeStart, 5));
+
+ // Grid Actions
+ $GridActionSearch = new DataGridActionSearch();
+ $GridActionSearch->setId(self::ACTION_MGM_PLUGINS_SEARCH);
+ $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM);
+ $GridActionSearch->setName('frmSearchPlugin');
+ $GridActionSearch->setTitle(__('Buscar Plugin'));
+ $GridActionSearch->setOnSubmitFunction('appMgmt/search');
+
+ $Grid->setDataActions($GridActionSearch);
+ $Grid->setPager($this->getPager($GridActionSearch));
+
+ // Grid item's actions
+ $GridActionView = new DataGridAction();
+ $GridActionView->setId(self::ACTION_MGM_PLUGINS_VIEW);
+ $GridActionView->setType(DataGridActionType::VIEW_ITEM);
+ $GridActionView->setName(__('Ver Plugin'));
+ $GridActionView->setTitle(__('Ver Plugin'));
+ $GridActionView->setIcon($this->icons->getIconView());
+ $GridActionView->setOnClickFunction('appMgmt/show');
+
+ $Grid->setDataActions($GridActionView);
+
+ $GridActionEnable = new DataGridAction();
+ $GridActionEnable->setId(self::ACTION_MGM_PLUGINS_ENABLE);
+ $GridActionEnable->setName(__('Habilitar'));
+ $GridActionEnable->setTitle(__('Habilitar'));
+ $GridActionEnable->setIcon($this->icons->getIconEnabled());
+ $GridActionEnable->setOnClickFunction('plugin/toggle');
+ $GridActionEnable->setFilterRowSource('plugin_enabled', 1);
+
+ $Grid->setDataActions($GridActionEnable);
+
+ $GridActionDisable = new DataGridAction();
+ $GridActionDisable->setId(self::ACTION_MGM_PLUGINS_DISABLE);
+ $GridActionDisable->setName(__('Deshabilitar'));
+ $GridActionDisable->setTitle(__('Deshabilitar'));
+ $GridActionDisable->setIcon($this->icons->getIconDisabled());
+ $GridActionDisable->setOnClickFunction('plugin/toggle');
+ $GridActionDisable->setFilterRowSource('plugin_enabled', 0);
+
+ $Grid->setDataActions($GridActionDisable);
+
+ $GridActionReset = new DataGridAction();
+ $GridActionReset->setId(self::ACTION_MGM_PLUGINS_RESET);
+ $GridActionReset->setName(__('Restablecer Datos'));
+ $GridActionReset->setTitle(__('Restablecer Datos'));
+ $GridActionReset->setIcon($this->icons->getIconRefresh());
+ $GridActionReset->setOnClickFunction('plugin/reset');
+
+ $Grid->setDataActions($GridActionReset);
+
+ return $Grid;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Controller/Grids/Notices.class.php b/inc/SP/Controller/Grids/Notices.class.php
new file mode 100644
index 00000000..993f3131
--- /dev/null
+++ b/inc/SP/Controller/Grids/Notices.class.php
@@ -0,0 +1,152 @@
+.
+ */
+
+namespace SP\Controller\Grids;
+
+defined('APP_ROOT') || die();
+
+use SP\Core\Session;
+use SP\Html\DataGrid\DataGridAction;
+use SP\Html\DataGrid\DataGridActionSearch;
+use SP\Html\DataGrid\DataGridActionType;
+use SP\Html\DataGrid\DataGridData;
+use SP\Html\DataGrid\DataGridHeader;
+use SP\Html\DataGrid\DataGridTab;
+
+/**
+ * Class Notices
+ *
+ * @package SP\Controller\Grids
+ */
+class Notices extends GridBase
+{
+ /**
+ * @return DataGridTab
+ * @throws \SP\Core\Exceptions\InvalidArgumentException
+ */
+ public function getNoticesGrid()
+ {
+ $isAdminApp = Session::getUserData()->isUserIsAdminApp();
+
+ // Grid Header
+ $GridHeaders = new DataGridHeader();
+ $GridHeaders->addHeader(__('Fecha'));
+ $GridHeaders->addHeader(__('Tipo'));
+ $GridHeaders->addHeader(__('Componente'));
+ $GridHeaders->addHeader(__('Descripción'));
+ $GridHeaders->addHeader(__('Estado'));
+
+ // Grid Data
+ $GridData = new DataGridData();
+ $GridData->setDataRowSourceId('notice_id');
+ $GridData->addDataRowSource('notice_date');
+ $GridData->addDataRowSource('notice_type');
+ $GridData->addDataRowSource('notice_component');
+ $GridData->addDataRowSource('notice_description');
+ $GridData->addDataRowSourceWithIcon('notice_checked', $this->icons->getIconEnabled()->setTitle(__('Leída')));
+
+ // Grid
+ $Grid = new DataGridTab();
+ $Grid->setId('tblNotices');
+ $Grid->setDataRowTemplate('datagrid-rows', 'grid');
+ $Grid->setDataPagerTemplate('datagrid-nav-full', 'grid');
+ $Grid->setHeader($GridHeaders);
+ $Grid->setData($GridData);
+ $Grid->setTitle(__('Notificaciones'));
+ $Grid->setTime(round(microtime() - $this->queryTimeStart, 5));
+
+ // Grid Actions
+ $GridActionSearch = new DataGridActionSearch();
+ $GridActionSearch->setId(self::ACTION_NOT_USER_SEARCH);
+ $GridActionSearch->setType(DataGridActionType::SEARCH_ITEM);
+ $GridActionSearch->setName('frmSearchNotice');
+ $GridActionSearch->setTitle(__('Buscar Notificación'));
+ $GridActionSearch->setOnSubmitFunction('notice/search');
+
+ $Grid->setDataActions($GridActionSearch);
+ $Grid->setPager($this->getPager($GridActionSearch));
+
+ if ($isAdminApp) {
+ // Grid item's actions
+ $GridActionNew = new DataGridAction();
+ $GridActionNew->setId(self::ACTION_NOT_USER_NEW);
+ $GridActionNew->setType(DataGridActionType::NEW_ITEM);
+ $GridActionNew->setName(__('Nueva Notificación'));
+ $GridActionNew->setTitle(__('Nueva Notificación'));
+ $GridActionNew->setIcon($this->icons->getIconAdd());
+ $GridActionNew->setSkip(true);
+ $GridActionNew->setOnClickFunction('notice/show');
+
+ $Grid->setDataActions($GridActionNew);
+ };
+
+ $GridActionNew = new DataGridAction();
+ $GridActionNew->setId(self::ACTION_NOT_USER_VIEW);
+ $GridActionNew->setType(DataGridActionType::VIEW_ITEM);
+ $GridActionNew->setName(__('Ver Notificación'));
+ $GridActionNew->setTitle(__('Ver Notificación'));
+ $GridActionNew->setIcon($this->icons->getIconView());
+ $GridActionNew->setOnClickFunction('notice/show');
+
+ $Grid->setDataActions($GridActionNew);
+
+ $GridActionCheck = new DataGridAction();
+ $GridActionCheck->setId(self::ACTION_NOT_USER_CHECK);
+ $GridActionCheck->setName(__('Marcar Notificación'));
+ $GridActionCheck->setTitle(__('Marcar Notificación'));
+ $GridActionCheck->setIcon($this->icons->getIconEnabled());
+ $GridActionCheck->setOnClickFunction('notice/check');
+ $GridActionCheck->setFilterRowSource('notice_checked', 1);
+
+ $Grid->setDataActions($GridActionCheck);
+
+ $GridActionEdit = new DataGridAction();
+ $GridActionEdit->setId(self::ACTION_NOT_USER_EDIT);
+ $GridActionEdit->setName(__('Editar Notificación'));
+ $GridActionEdit->setTitle(__('Editar Notificación'));
+ $GridActionEdit->setIcon($this->icons->getIconEdit());
+ $GridActionEdit->setOnClickFunction('notice/show');
+
+ $Grid->setDataActions($GridActionEdit);
+
+ $GridActionDel = new DataGridAction();
+ $GridActionDel->setId(self::ACTION_NOT_USER_DELETE);
+ $GridActionDel->setType(DataGridActionType::DELETE_ITEM);
+ $GridActionDel->setName(__('Eliminar Notificación'));
+ $GridActionDel->setTitle(__('Eliminar Notificación'));
+ $GridActionDel->setIcon($this->icons->getIconDelete());
+ $GridActionDel->setOnClickFunction('appMgmt/delete');
+
+ if (!$isAdminApp) {
+ $GridActionCheck->setFilterRowSource('notice_sticky', 1);
+ $GridActionEdit->setFilterRowSource('notice_sticky', 1);
+ $GridActionDel->setFilterRowSource('notice_sticky', 1);
+ }
+
+ $Grid->setDataActions($GridActionDel);
+ $Grid->setDataActions($GridActionDel, true);
+
+ return $Grid;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Controller/ItemActionController.class.php b/inc/SP/Controller/ItemActionController.class.php
new file mode 100644
index 00000000..e378401e
--- /dev/null
+++ b/inc/SP/Controller/ItemActionController.class.php
@@ -0,0 +1,1190 @@
+.
+ */
+
+namespace SP\Controller;
+
+use SP\Account\Account;
+use SP\Account\AccountFavorites;
+use SP\Account\AccountHistory;
+use SP\Account\AccountHistoryUtil;
+use SP\Account\AccountUtil;
+use SP\Api\ApiTokens;
+use SP\Auth\AuthUtil;
+use SP\Core\ActionsInterface;
+use SP\Core\Messages\LogMessage;
+use SP\Core\Messages\NoticeMessage;
+use SP\Core\Session;
+use SP\DataModel\CustomFieldData;
+use SP\DataModel\NoticeData;
+use SP\DataModel\PluginData;
+use SP\DataModel\PublicLinkData;
+use SP\Forms\AccountForm;
+use SP\Forms\ApiTokenForm;
+use SP\Forms\CategoryForm;
+use SP\Forms\CustomerForm;
+use SP\Forms\CustomFieldDefForm;
+use SP\Forms\GroupForm;
+use SP\Forms\NoticeForm;
+use SP\Forms\ProfileForm;
+use SP\Forms\TagForm;
+use SP\Forms\UserForm;
+use SP\Http\Request;
+use SP\Log\Email;
+use SP\Log\Log;
+use SP\Mgmt\Categories\Category;
+use SP\Mgmt\Customers\Customer;
+use SP\Mgmt\CustomFields\CustomField;
+use SP\Mgmt\CustomFields\CustomFieldDef;
+use SP\Mgmt\CustomFields\CustomFieldsUtil;
+use SP\Mgmt\Files\File;
+use SP\Mgmt\Groups\Group;
+use SP\Mgmt\Notices\Notice;
+use SP\Mgmt\Plugins\Plugin;
+use SP\Mgmt\Profiles\Profile;
+use SP\Mgmt\PublicLinks\PublicLink;
+use SP\Mgmt\Tags\Tag;
+use SP\Mgmt\Users\User;
+use SP\Mgmt\Users\UserLdapSync;
+use SP\Mgmt\Users\UserUtil;
+use SP\Util\Checks;
+use SP\Util\Json;
+
+/**
+ * Class AjaxSaveController
+ *
+ * @package SP\Controller
+ */
+class ItemActionController implements ItemControllerInterface
+{
+ use RequestControllerTrait;
+
+ /**
+ * @var CustomFieldData
+ */
+ protected $CustomFieldData;
+
+ /**
+ * AjaxSaveController constructor.
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function __construct()
+ {
+ $this->init();
+ }
+
+ /**
+ * Ejecutar la acción solicitada
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function doAction()
+ {
+ $this->LogMessage = new LogMessage();
+
+ try {
+ switch ($this->actionId) {
+ case ActionsInterface::ACTION_USR_USERS_NEW:
+ case ActionsInterface::ACTION_USR_USERS_EDIT:
+ case ActionsInterface::ACTION_USR_USERS_EDITPASS:
+ case ActionsInterface::ACTION_USR_USERS_DELETE:
+ $this->userAction();
+ break;
+ case ActionsInterface::ACTION_USR_GROUPS_NEW:
+ case ActionsInterface::ACTION_USR_GROUPS_EDIT:
+ case ActionsInterface::ACTION_USR_GROUPS_DELETE:
+ $this->groupAction();
+ break;
+ case ActionsInterface::ACTION_USR_PROFILES_NEW:
+ case ActionsInterface::ACTION_USR_PROFILES_EDIT:
+ case ActionsInterface::ACTION_USR_PROFILES_DELETE:
+ $this->profileAction();
+ break;
+ case ActionsInterface::ACTION_MGM_CUSTOMERS_NEW:
+ case ActionsInterface::ACTION_MGM_CUSTOMERS_EDIT:
+ case ActionsInterface::ACTION_MGM_CUSTOMERS_DELETE:
+ $this->customerAction();
+ break;
+ case ActionsInterface::ACTION_MGM_CATEGORIES_NEW:
+ case ActionsInterface::ACTION_MGM_CATEGORIES_EDIT:
+ case ActionsInterface::ACTION_MGM_CATEGORIES_DELETE:
+ $this->categoryAction();
+ break;
+ case ActionsInterface::ACTION_MGM_APITOKENS_NEW:
+ case ActionsInterface::ACTION_MGM_APITOKENS_EDIT:
+ case ActionsInterface::ACTION_MGM_APITOKENS_DELETE:
+ $this->tokenAction();
+ break;
+ case ActionsInterface::ACTION_MGM_CUSTOMFIELDS_NEW:
+ case ActionsInterface::ACTION_MGM_CUSTOMFIELDS_EDIT:
+ case ActionsInterface::ACTION_MGM_CUSTOMFIELDS_DELETE:
+ $this->customFieldAction();
+ break;
+ case ActionsInterface::ACTION_MGM_PUBLICLINKS_NEW:
+ case ActionsInterface::ACTION_MGM_PUBLICLINKS_DELETE:
+ case ActionsInterface::ACTION_MGM_PUBLICLINKS_REFRESH:
+ $this->publicLinkAction();
+ break;
+ case ActionsInterface::ACTION_MGM_TAGS_NEW:
+ case ActionsInterface::ACTION_MGM_TAGS_EDIT:
+ case ActionsInterface::ACTION_MGM_TAGS_DELETE:
+ $this->tagAction();
+ break;
+ case ActionsInterface::ACTION_MGM_FILES_DELETE:
+ $this->fileAction();
+ break;
+ case ActionsInterface::ACTION_MGM_PLUGINS_ENABLE:
+ case ActionsInterface::ACTION_MGM_PLUGINS_DISABLE:
+ case ActionsInterface::ACTION_MGM_PLUGINS_RESET:
+ $this->pluginAction();
+ break;
+ case ActionsInterface::ACTION_ACC_NEW:
+ case ActionsInterface::ACTION_ACC_COPY:
+ case ActionsInterface::ACTION_ACC_EDIT:
+ case ActionsInterface::ACTION_ACC_EDIT_PASS:
+ case ActionsInterface::ACTION_ACC_EDIT_RESTORE:
+ case ActionsInterface::ACTION_ACC_DELETE:
+ case ActionsInterface::ACTION_MGM_ACCOUNTS_DELETE:
+ $this->accountAction();
+ break;
+ case ActionsInterface::ACTION_MGM_ACCOUNTS_DELETE_HISTORY:
+ $this->accountHistoryAction();
+ break;
+ case ActionsInterface::ACTION_ACC_FAVORITES_ADD:
+ case ActionsInterface::ACTION_ACC_FAVORITES_DELETE:
+ $this->favoriteAction();
+ break;
+ case ActionsInterface::ACTION_USR_SYNC_LDAP:
+ $this->ldapImportAction();
+ break;
+ case ActionsInterface::ACTION_NOT_USER_CHECK:
+ case ActionsInterface::ACTION_NOT_USER_VIEW:
+ case ActionsInterface::ACTION_NOT_USER_NEW:
+ case ActionsInterface::ACTION_NOT_USER_EDIT:
+ case ActionsInterface::ACTION_NOT_USER_DELETE:
+ $this->noticeAction();
+ break;
+ case ActionsInterface::ACTION_ACC_REQUEST:
+ $this->requestAccountAction();
+ break;
+ default:
+ $this->invalidAction();
+ }
+ } catch (\Exception $e) {
+ $this->JsonResponse->setDescription($e->getMessage());
+ }
+
+ if ($this->LogMessage->getAction() !== null) {
+ $Log = new Log($this->LogMessage);
+ $Log->writeLog();
+
+ $this->JsonResponse->setDescription($this->LogMessage->getHtmlDescription(true));
+ }
+
+ Json::returnJson($this->JsonResponse);
+ }
+
+ /**
+ * Acciones sobre usuarios
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \SP\Core\Exceptions\ValidationException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \phpmailer\phpmailerException
+ */
+ protected function userAction()
+ {
+ $Form = new UserForm($this->itemId);
+ $Form->validate($this->actionId);
+
+ $this->setCustomFieldData(ActionsInterface::ACTION_USR_USERS);
+
+ switch ($this->actionId) {
+ case ActionsInterface::ACTION_USR_USERS_NEW:
+ User::getItem($Form->getItemData())->add();
+ $this->addCustomFieldData();
+
+ $this->LogMessage->setAction(__('Crear Usuario', false));
+ $this->LogMessage->addDescription(__('Usuario creado', false));
+ $this->LogMessage->addDetails(__('Nombre', false), $Form->getItemData()->getUserName());
+ $this->LogMessage->addDetails(__('Login', false), $Form->getItemData()->getUserLogin());
+
+ if ($Form->getItemData()->isUserIsChangePass()
+ && !AuthUtil::mailPassRecover($Form->getItemData())
+ ) {
+ $this->LogMessage->addDescription(__('No se pudo realizar la petición de cambio de clave.', false));
+ }
+ break;
+ case ActionsInterface::ACTION_USR_USERS_EDIT:
+ User::getItem($Form->getItemData())->update();
+ $this->updateCustomFieldData();
+
+ $this->LogMessage->setAction(__('Actualizar Usuario', false));
+ $this->LogMessage->addDescription(__('Usuario actualizado', false));
+ $this->LogMessage->addDetails(__('Nombre', false), $Form->getItemData()->getUserName());
+ $this->LogMessage->addDetails(__('Login', false), $Form->getItemData()->getUserLogin());
+
+ if ($Form->getItemData()->isUserIsChangePass()
+ && !AuthUtil::mailPassRecover($Form->getItemData())
+ ) {
+ $this->LogMessage->addDescription(__('No se pudo realizar la petición de cambio de clave.', false));
+ }
+ break;
+ case ActionsInterface::ACTION_USR_USERS_DELETE:
+ if (is_array($this->itemId)) {
+ $UsersData = User::getItem()->deleteBatch($this->itemId);
+
+ $this->LogMessage->addDescription(__('Usuarios eliminados', false));
+ } else {
+ $UsersData = [User::getItem()->getById($this->itemId)];
+
+ User::getItem()->delete($this->itemId);
+
+ $this->LogMessage->addDescription(__('Usuario eliminado', false));
+ }
+
+ $this->deleteCustomFieldData();
+
+ $this->LogMessage->setAction(__('Eliminar Usuario', false));
+
+ foreach ($UsersData as $UserData) {
+ $this->LogMessage->addDetails(__('Nombre', false), $UserData->getUserName());
+ $this->LogMessage->addDetails(__('Login', false), $UserData->getUserLogin());
+ }
+ break;
+ case ActionsInterface::ACTION_USR_USERS_EDITPASS:
+ $UserData = User::getItem()->getById($this->itemId);
+
+ User::getItem($Form->getItemData())->updatePass();
+
+ $this->LogMessage->setAction(__('Actualizar Clave Usuario', false));
+ $this->LogMessage->addDescription(__('Clave actualizada', false));
+ $this->LogMessage->addDetails(__('Nombre', false), $UserData->getUserName());
+ $this->LogMessage->addDetails(__('Login', false), $UserData->getUserLogin());
+ break;
+ }
+
+ Email::sendEmail($this->LogMessage);
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Guardar los datos de los campos personalizados del módulo
+ *
+ * @param $moduleId
+ */
+ protected function setCustomFieldData($moduleId)
+ {
+ $this->CustomFieldData = new CustomFieldData();
+ $this->CustomFieldData->setId($this->itemId);
+ $this->CustomFieldData->setModule($moduleId);
+ }
+
+ /**
+ * Guardar los datos de los campos personalizados del módulo
+ *
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ protected function addCustomFieldData()
+ {
+ $customFields = Request::analyze('customfield');
+
+ if (is_array($customFields)) {
+ CustomFieldsUtil::addItemCustomFields($customFields, $this->CustomFieldData);
+ }
+ }
+
+ /**
+ * Actualizar los datos de los campos personalizados del módulo
+ *
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ protected function updateCustomFieldData()
+ {
+ $customFields = Request::analyze('customfield');
+
+ if (is_array($customFields)) {
+ CustomFieldsUtil::updateItemCustomFields($customFields, $this->CustomFieldData);
+ }
+ }
+
+ /**
+ * Eliminar los datos de los campos personalizados del módulo
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ */
+ protected function deleteCustomFieldData()
+ {
+ if (is_array($this->itemId)) {
+ CustomField::getItem($this->CustomFieldData)->deleteBatch($this->itemId);
+ } else {
+ CustomField::getItem($this->CustomFieldData)->delete($this->itemId);
+ }
+ }
+
+ /**
+ * Acciones sobre grupos
+ *
+ * @throws \SP\Core\Exceptions\ValidationException
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \phpmailer\phpmailerException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ * @throws \SP\Core\Exceptions\QueryException
+ */
+ protected function groupAction()
+ {
+ $Form = new GroupForm($this->itemId);
+ $Form->validate($this->actionId);
+
+ $this->setCustomFieldData(ActionsInterface::ACTION_USR_GROUPS);
+
+ switch ($this->actionId) {
+ case ActionsInterface::ACTION_USR_GROUPS_NEW:
+ Group::getItem($Form->getItemData())->add();
+ $this->addCustomFieldData();
+
+ $this->LogMessage->setAction(__('Crear Grupo', false));
+ $this->LogMessage->addDescription(__('Grupo creado', false));
+ $this->LogMessage->addDetails(__('Nombre', false), $Form->getItemData()->getUsergroupName());
+ break;
+ case ActionsInterface::ACTION_USR_GROUPS_EDIT:
+ Group::getItem($Form->getItemData())->update();
+ $this->updateCustomFieldData();
+
+ $this->LogMessage->setAction(__('Actualizar Grupo', false));
+ $this->LogMessage->addDescription(__('Grupo actualizado', false));
+ $this->LogMessage->addDetails(__('Nombre', false), $Form->getItemData()->getUsergroupName());
+ break;
+ case ActionsInterface::ACTION_USR_GROUPS_DELETE:
+ if (is_array($this->itemId)) {
+ $GroupsData = Group::getItem()->deleteBatch($this->itemId);
+
+ $this->LogMessage->addDescription(__('Grupos eliminados', false));
+ } else {
+ $GroupsData = [Group::getItem()->getById($this->itemId)];
+
+ Group::getItem()->delete($this->itemId);
+
+ $this->LogMessage->addDescription(__('Grupo eliminado', false));
+ }
+
+ $this->deleteCustomFieldData();
+
+ $this->LogMessage->setAction(__('Eliminar Grupo', false));
+
+ foreach ($GroupsData as $GroupData) {
+ $this->LogMessage->addDetails(__('Nombre', false), $GroupData->getUsergroupName());
+ }
+ break;
+ }
+
+ Email::sendEmail($this->LogMessage);
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Acciones sobre perfiles
+ *
+ * @throws \SP\Core\Exceptions\ValidationException
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \phpmailer\phpmailerException
+ */
+ protected function profileAction()
+ {
+ $Form = new ProfileForm($this->itemId);
+ $Form->validate($this->actionId);
+
+ $this->setCustomFieldData(ActionsInterface::ACTION_USR_PROFILES);
+
+ switch ($this->actionId) {
+ case ActionsInterface::ACTION_USR_PROFILES_NEW:
+ Profile::getItem($Form->getItemData())->add();
+ $this->addCustomFieldData();
+
+ $this->LogMessage->setAction(__('Crear Perfil', false));
+ $this->LogMessage->addDescription(__('Perfil creado', false));
+ $this->LogMessage->addDetails(__('Nombre', false), $Form->getItemData()->getUserprofileName());
+ break;
+ case ActionsInterface::ACTION_USR_PROFILES_EDIT:
+ Profile::getItem($Form->getItemData())->update();
+ $this->updateCustomFieldData();
+
+ $this->LogMessage->setAction(__('Actualizar Perfil', false));
+ $this->LogMessage->addDescription(__('Perfil actualizado', false));
+ $this->LogMessage->addDetails(__('Nombre', false), $Form->getItemData()->getUserprofileName());
+ break;
+ case ActionsInterface::ACTION_USR_PROFILES_DELETE:
+ if (is_array($this->itemId)) {
+ $ProfilesData = Profile::getItem()->deleteBatch($this->itemId);
+
+ $this->LogMessage->addDescription(__('Perfiles eliminados', false));
+ } else {
+ $ProfilesData = [Profile::getItem()->getById($this->itemId)];
+
+ Profile::getItem()->delete($this->itemId);
+
+ $this->LogMessage->addDescription(__('Perfil eliminado', false));
+ }
+
+ $this->deleteCustomFieldData();
+
+ $this->LogMessage->setAction(__('Eliminar Perfil', false));
+
+ foreach ($ProfilesData as $ProfileData) {
+ $this->LogMessage->addDetails(__('Nombre', false), $ProfileData->getUserprofileName());
+ }
+ break;
+ }
+
+ Email::sendEmail($this->LogMessage);
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Acciones sobre clientes
+ *
+ * @throws \SP\Core\Exceptions\ValidationException
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \phpmailer\phpmailerException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ * @throws \SP\Core\Exceptions\QueryException
+ */
+ protected function customerAction()
+ {
+ $Form = new CustomerForm($this->itemId);
+ $Form->validate($this->actionId);
+
+ $this->setCustomFieldData(ActionsInterface::ACTION_MGM_CUSTOMERS);
+
+ switch ($this->actionId) {
+ case ActionsInterface::ACTION_MGM_CUSTOMERS_NEW:
+ Customer::getItem($Form->getItemData())->add();
+ $this->addCustomFieldData();
+
+ $this->LogMessage->setAction(__('Crear Cliente', false));
+ $this->LogMessage->addDescription(__('Cliente creado', false));
+ $this->LogMessage->addDetails(__('Nombre', false), $Form->getItemData()->getCustomerName());
+ break;
+ case ActionsInterface::ACTION_MGM_CUSTOMERS_EDIT:
+ Customer::getItem($Form->getItemData())->update();
+ $this->updateCustomFieldData();
+
+ $this->LogMessage->setAction(__('Actualizar Cliente', false));
+ $this->LogMessage->addDescription(__('Cliente actualizado', false));
+ $this->LogMessage->addDetails(__('Nombre', false), $Form->getItemData()->getCustomerName());
+ break;
+ case ActionsInterface::ACTION_MGM_CUSTOMERS_DELETE:
+ if (is_array($this->itemId)) {
+ $CustomersData = Customer::getItem()->deleteBatch($this->itemId);
+
+ $this->LogMessage->addDescription(__('Clientes eliminados', false));
+ } else {
+ $CustomersData = [Customer::getItem()->getById($this->itemId)];
+
+ Customer::getItem()->delete($this->itemId);
+
+ $this->LogMessage->addDescription(__('Cliente eliminado', false));
+ }
+
+ $this->deleteCustomFieldData();
+
+ $this->LogMessage->setAction(__('Eliminar Cliente', false));
+
+ foreach ($CustomersData as $CustomerData) {
+ $this->LogMessage->addDetails(__('Nombre', false), $CustomerData->getCustomerName());
+ }
+ break;
+ }
+
+ Email::sendEmail($this->LogMessage);
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Acciones sobre categorías
+ *
+ * @throws \SP\Core\Exceptions\ValidationException
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \phpmailer\phpmailerException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ * @throws \SP\Core\Exceptions\QueryException
+ */
+ protected function categoryAction()
+ {
+ $Form = new CategoryForm($this->itemId);
+ $Form->validate($this->actionId);
+
+ $this->setCustomFieldData(ActionsInterface::ACTION_MGM_CATEGORIES);
+
+ switch ($this->actionId) {
+ case ActionsInterface::ACTION_MGM_CATEGORIES_NEW:
+ Category::getItem($Form->getItemData())->add();
+ $this->addCustomFieldData();
+
+ $this->LogMessage->setAction(__('Crear Categoría', false));
+ $this->LogMessage->addDescription(__('Categoría creada', false));
+ $this->LogMessage->addDetails(__('Nombre', false), $Form->getItemData()->getCategoryName());
+ break;
+ case ActionsInterface::ACTION_MGM_CATEGORIES_EDIT:
+ Category::getItem($Form->getItemData())->update();
+ $this->updateCustomFieldData();
+
+ $this->LogMessage->setAction(__('Actualizar Categoría', false));
+ $this->LogMessage->addDescription(__('Categoría actualizada', false));
+ $this->LogMessage->addDetails(__('Nombre', false), $Form->getItemData()->getCategoryName());
+ break;
+ case ActionsInterface::ACTION_MGM_CATEGORIES_DELETE:
+
+ if (is_array($this->itemId)) {
+ $CategoriesData = Category::getItem()->deleteBatch($this->itemId);
+
+ $this->LogMessage->addDescription(__('Categorías eliminadas', false));
+ } else {
+ $CategoriesData = [Category::getItem()->getById($this->itemId)];
+
+ Category::getItem()->delete($this->itemId);
+
+ $this->LogMessage->addDescription(__('Categoría eliminada', false));
+ }
+
+ $this->deleteCustomFieldData();
+
+ $this->LogMessage->setAction(__('Eliminar Categoría', false));
+
+ foreach ($CategoriesData as $CategoryData) {
+ $this->LogMessage->addDetails(__('Nombre', false), $CategoryData->getCategoryName());
+ }
+ break;
+ }
+
+ Email::sendEmail($this->LogMessage);
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Acciones sobre tokens API
+ *
+ * @throws \SP\Core\Exceptions\ValidationException
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \phpmailer\phpmailerException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ */
+ protected function tokenAction()
+ {
+ $Form = new ApiTokenForm($this->itemId);
+
+ switch ($this->actionId) {
+ case ActionsInterface::ACTION_MGM_APITOKENS_NEW:
+ $Form->validate($this->actionId);
+ $Form->getItemData()->addToken();
+
+ $this->LogMessage->setAction(__('Crear Autorización', false));
+ $this->LogMessage->addDescription(__('Autorización creada', false));
+ $this->LogMessage->addDetails(__('Usuario', false), UserUtil::getUserLoginById($Form->getItemData()->getUserId()));
+ break;
+ case ActionsInterface::ACTION_MGM_APITOKENS_EDIT:
+ $Form->validate($this->actionId);
+ $Form->getItemData()->updateToken();
+
+ $this->LogMessage->setAction(__('Actualizar Autorización', false));
+ $this->LogMessage->addDescription(__('Autorización actualizada', false));
+ $this->LogMessage->addDetails(__('Usuario', false), UserUtil::getUserLoginById($Form->getItemData()->getUserId()));
+ break;
+ case ActionsInterface::ACTION_MGM_APITOKENS_DELETE:
+ $ApiToken = new ApiTokens();
+
+ if (is_array($this->itemId)) {
+ $ApiToken->deleteTokenBatch($this->itemId);
+
+ $this->LogMessage->addDescription(__('Autorizaciones eliminadas', false));
+ } else {
+ $ApiToken->deleteToken($this->itemId);
+
+ $this->LogMessage->addDescription(__('Autorización eliminada', false));
+ }
+
+ $this->LogMessage->setAction(__('Eliminar Autorización', false));
+ break;
+ }
+
+ Email::sendEmail($this->LogMessage);
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Acciones sobre campos personalizados
+ *
+ * @throws \SP\Core\Exceptions\ValidationException
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \phpmailer\phpmailerException
+ */
+ protected function customFieldAction()
+ {
+ $Form = new CustomFieldDefForm($this->itemId);
+ $Form->validate($this->actionId);
+
+ switch ($this->actionId) {
+ case ActionsInterface::ACTION_MGM_CUSTOMFIELDS_NEW:
+ CustomFieldDef::getItem($Form->getItemData())->add();
+
+ $this->LogMessage->setAction(__('Crear Campo', false));
+ $this->LogMessage->addDescription(__('Campo creado', false));
+ $this->LogMessage->addDetails(__('Nombre', false), $Form->getItemData()->getName());
+ break;
+ case ActionsInterface::ACTION_MGM_CUSTOMFIELDS_EDIT:
+ CustomFieldDef::getItem($Form->getItemData())->update();
+
+ $this->LogMessage->setAction(__('Actualizar Campo', false));
+ $this->LogMessage->addDescription(__('Campo actualizado', false));
+ $this->LogMessage->addDetails(__('Nombre', false), $Form->getItemData()->getName());
+ break;
+ case ActionsInterface::ACTION_MGM_CUSTOMFIELDS_DELETE:
+ if (is_array($this->itemId)) {
+ CustomFieldDef::getItem()->deleteBatch($this->itemId);
+
+ $this->LogMessage->addDescription(__('Campos eliminados', false));
+ } else {
+ CustomFieldDef::getItem()->delete($this->itemId);
+
+ $this->LogMessage->addDescription(__('Campo eliminado', false));
+ }
+
+ $this->LogMessage->setAction(__('Eliminar Campo', false));
+ break;
+ }
+
+ Email::sendEmail($this->LogMessage);
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Acciones sobre enlaces públicos
+ *
+ * @throws \SP\Core\Exceptions\ValidationException
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \phpmailer\phpmailerException
+ */
+ protected function publicLinkAction()
+ {
+ $PublicLinkData = new PublicLinkData();
+ $PublicLinkData->setPublicLinkItemId($this->itemId);
+ $PublicLinkData->setTypeId(PublicLink::TYPE_ACCOUNT);
+ $PublicLinkData->setNotify(Request::analyze('notify', false, false, true));
+
+ switch ($this->actionId) {
+ case ActionsInterface::ACTION_MGM_PUBLICLINKS_NEW:
+ $PublicLinkData->setItemId($this->itemId);
+ PublicLink::getItem($PublicLinkData)->add();
+
+ $this->LogMessage->setAction(__('Crear Enlace', false));
+ $this->LogMessage->addDescription(__('Enlace creado', false));
+ $this->LogMessage->addDetails(__('Tipo', false), $PublicLinkData->getTypeId());
+ $this->LogMessage->addDetails(__('Cuenta', false), AccountUtil::getAccountNameById($PublicLinkData->getItemId()));
+ $this->LogMessage->addDetails(__('Usuario', false), UserUtil::getUserLoginById($PublicLinkData->getUserId()));
+ break;
+ case ActionsInterface::ACTION_MGM_PUBLICLINKS_REFRESH:
+ $PublicLinkData = PublicLink::getItem()->getById($this->itemId);
+ PublicLink::getItem($PublicLinkData)->refresh();
+
+ $this->LogMessage->setAction(__('Actualizar Enlace', false));
+ $this->LogMessage->addDescription(__('Enlace actualizado', false));
+ $this->LogMessage->addDetails(__('Tipo', false), $PublicLinkData->getTypeId());
+ $this->LogMessage->addDetails(__('Cuenta', false), AccountUtil::getAccountNameById($PublicLinkData->getItemId()));
+ $this->LogMessage->addDetails(__('Usuario', false), UserUtil::getUserLoginById($PublicLinkData->getUserId()));
+ break;
+ case ActionsInterface::ACTION_MGM_PUBLICLINKS_DELETE:
+ if (is_array($this->itemId)) {
+ PublicLink::getItem()->deleteBatch($this->itemId);
+
+ $this->LogMessage->addDescription(__('Enlaces eliminados', false));
+ } else {
+ $PublicLinkData = PublicLink::getItem()->getById($this->itemId);
+
+ PublicLink::getItem()->delete($this->itemId);
+
+ $this->LogMessage->addDescription(__('Enlace eliminado', false));
+ $this->LogMessage->addDetails(__('Tipo', false), $PublicLinkData->getTypeId());
+ $this->LogMessage->addDetails(__('Cuenta', false), AccountUtil::getAccountNameById($PublicLinkData->getItemId()));
+ $this->LogMessage->addDetails(__('Usuario', false), UserUtil::getUserLoginById($PublicLinkData->getUserId()));
+ }
+
+ $this->LogMessage->setAction(__('Eliminar Enlace', false));
+ break;
+ }
+
+ Email::sendEmail($this->LogMessage);
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Acciones sobre etiquetas
+ *
+ * @throws \SP\Core\Exceptions\ValidationException
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ */
+ protected function tagAction()
+ {
+ $Form = new TagForm($this->itemId);
+ $Form->validate($this->actionId);
+
+ switch ($this->actionId) {
+ case ActionsInterface::ACTION_MGM_TAGS_NEW:
+ Tag::getItem($Form->getItemData())->add();
+
+ $this->LogMessage->setAction(__('Crear Etiqueta', false));
+ $this->LogMessage->addDescription(__('Etiqueta creada', false));
+ $this->LogMessage->addDetails(__('Nombre', false), $Form->getItemData()->getTagName());
+ break;
+ case ActionsInterface::ACTION_MGM_TAGS_EDIT:
+ Tag::getItem($Form->getItemData())->update();
+
+ $this->LogMessage->setAction(__('Actualizar Etiqueta', false));
+ $this->LogMessage->addDescription(__('Etiqueta actualizada', false));
+ $this->LogMessage->addDetails(__('Nombre', false), $Form->getItemData()->getTagName());
+ break;
+ case ActionsInterface::ACTION_MGM_TAGS_DELETE:
+ if (is_array($this->itemId)) {
+ $TagsData = Tag::getItem()->deleteBatch($this->itemId);
+
+ $this->LogMessage->addDescription(__('Etiquetas eliminadas', false));
+ } else {
+ $TagsData = [Tag::getItem()->getById($this->itemId)];
+
+ Tag::getItem()->delete($this->itemId);
+
+ $this->LogMessage->addDescription(__('Etiqueta eliminada', false));
+ }
+
+ $this->LogMessage->setAction(__('Eliminar Etiqueta', false));
+
+ foreach ($TagsData as $TagData) {
+ $this->LogMessage->addDetails(__('Nombre', false), $TagData->getTagName());
+ }
+ break;
+ }
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Acciones sobre archivos
+ *
+ * @throws \SP\Core\Exceptions\ValidationException
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \phpmailer\phpmailerException
+ */
+ protected function fileAction()
+ {
+ if (is_array($this->itemId)) {
+ $FilesData = File::getItem()->deleteBatch($this->itemId);
+
+ $this->LogMessage->addDescription(__('Archivos eliminados', false));
+ } else {
+ $FilesData = [File::getItem()->getById($this->itemId)];
+
+ File::getItem()->delete($this->itemId);
+
+ $this->LogMessage->addDescription(__('Archivo eliminado', false));
+ }
+
+ $this->LogMessage->setAction(__('Eliminar Archivo', false));
+
+ foreach ($FilesData as $FileData) {
+ $this->LogMessage->addDetails(__('Cuenta', false), $FileData->getAccountName());
+ $this->LogMessage->addDetails(__('Cliente', false), $FileData->getCustomerName());
+ $this->LogMessage->addDetails(__('Archivo', false), $FileData->getAccfileName());
+ }
+
+ Email::sendEmail($this->LogMessage);
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Acciones sobre plugins
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \phpmailer\phpmailerException
+ */
+ protected function pluginAction()
+ {
+ $PluginData = new PluginData();
+ $PluginData->setPluginId($this->itemId);
+
+ switch ($this->actionId) {
+ case ActionsInterface::ACTION_MGM_PLUGINS_ENABLE:
+ $PluginData->setPluginEnabled(1);
+ Plugin::getItem($PluginData)->toggle();
+
+ $this->LogMessage->setAction(__('Actualizar Plugin', false));
+ $this->LogMessage->addDescription(__('Plugin habilitado', false));
+ $this->LogMessage->addDetails(__('Nombre', false), $PluginData->getPluginName());
+ break;
+ case ActionsInterface::ACTION_MGM_PLUGINS_DISABLE:
+ $PluginData->setPluginEnabled(0);
+ Plugin::getItem($PluginData)->toggle();
+
+ $this->LogMessage->setAction(__('Actualizar Plugin', false));
+ $this->LogMessage->addDescription(__('Plugin deshabilitado', false));
+ $this->LogMessage->addDetails(__('Nombre', false), $PluginData->getPluginName());
+ break;
+ case ActionsInterface::ACTION_MGM_PLUGINS_RESET:
+ Plugin::getItem()->reset($this->itemId);
+
+ $this->LogMessage->setAction(__('Actualizar Plugin', false));
+ $this->LogMessage->addDescription(__('Plugin restablecido', false));
+ $this->LogMessage->addDetails(__('Nombre', false), $PluginData->getPluginName());
+ break;
+ }
+
+ Email::sendEmail($this->LogMessage);
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Acciones sobre cuentas
+ *
+ * @throws \SP\Core\Exceptions\ValidationException
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \phpmailer\phpmailerException
+ */
+ protected function accountAction()
+ {
+ $Form = new AccountForm($this->itemId);
+ $Form->validate($this->actionId);
+
+ $this->setCustomFieldData(ActionsInterface::ACTION_ACC);
+
+ $Account = new Account($Form->getItemData());
+
+ switch ($this->actionId) {
+ case ActionsInterface::ACTION_ACC_NEW:
+ case ActionsInterface::ACTION_ACC_COPY:
+ $Form->getItemData()->setAccountUserId(Session::getUserData()->getUserId());
+
+ $Account->createAccount();
+
+ $this->CustomFieldData->setId($Account->getAccountData()->getId());
+
+ $this->addCustomFieldData();
+
+ $this->LogMessage->setAction(__('Crear Cuenta', false));
+ $this->LogMessage->addDescription(__('Cuenta creada', false));
+ $this->LogMessage->addDetails(__('Nombre', false), $Form->getItemData()->getAccountName());
+
+ $this->JsonResponse->setData(['itemId' => $Account->getAccountData()->getId(), 'nextActionId' => ActionsInterface::ACTION_ACC_EDIT]);
+ break;
+ case ActionsInterface::ACTION_ACC_EDIT:
+ $Account->updateAccount();
+ $this->updateCustomFieldData();
+
+ $this->LogMessage->setAction(__('Actualizar Cuenta', false));
+ $this->LogMessage->addDescription(__('Cuenta actualizada', false));
+ $this->LogMessage->addDetails(__('Nombre', false), $Form->getItemData()->getAccountName());
+
+ $this->JsonResponse->setData(['itemId' => $this->itemId, 'nextActionId' => ActionsInterface::ACTION_ACC_VIEW]);
+ break;
+ case ActionsInterface::ACTION_ACC_EDIT_PASS:
+ $Account->updateAccountPass();
+
+ $this->LogMessage->setAction(__('Actualizar Cuenta', false));
+ $this->LogMessage->addDescription(__('Clave actualizada', false));
+ $this->LogMessage->addDetails(__('Nombre', false), AccountUtil::getAccountNameById($this->itemId));
+
+ $this->JsonResponse->setData(['itemId' => $this->itemId, 'nextActionId' => ActionsInterface::ACTION_ACC_VIEW]);
+ break;
+ case ActionsInterface::ACTION_ACC_EDIT_RESTORE:
+ $Account->restoreFromHistory(Request::analyze('accountHistoryId', 0));
+
+ $this->LogMessage->setAction(__('Restaurar Cuenta', false));
+ $this->LogMessage->addDescription(__('Cuenta restaurada', false));
+ $this->LogMessage->addDetails(__('Nombre', false), AccountUtil::getAccountNameById($this->itemId));
+
+ $this->JsonResponse->setData(['itemId' => $this->itemId, 'nextActionId' => ActionsInterface::ACTION_ACC_VIEW]);
+ break;
+ case ActionsInterface::ACTION_ACC_DELETE:
+ case ActionsInterface::ACTION_MGM_ACCOUNTS_DELETE:
+ if (is_array($this->itemId)) {
+ $accounts = AccountUtil::getAccountNameByIdBatch($this->itemId);
+ $numAccounts = count($accounts);
+ } else {
+ $accounts = AccountUtil::getAccountNameById($this->itemId);
+ $numAccounts = 1;
+ }
+
+ $Account->deleteAccount($this->itemId);
+ $this->deleteCustomFieldData();
+
+ $this->LogMessage->setAction(__('Eliminar Cuenta', false));
+
+ if ($numAccounts > 1) {
+ $this->LogMessage->addDescription(__('Cuentas eliminadas', false));
+
+ foreach ($accounts as $account) {
+ $this->LogMessage->addDetails(__('Nombre', false), $account->account_name);
+ }
+ } elseif ($numAccounts === 1) {
+ $this->LogMessage->addDescription(__('Cuenta eliminada', false));
+ $this->LogMessage->addDetails(__('Nombre', false), $accounts->account_name);
+ }
+ break;
+ }
+
+ Email::sendEmail($this->LogMessage);
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Acciones sobre cuentas favoritas
+ *
+ * @throws \SP\Core\Exceptions\ValidationException
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ protected function favoriteAction()
+ {
+ $userId = Session::getUserData()->getUserId();
+
+ switch ($this->actionId) {
+ case ActionsInterface::ACTION_ACC_FAVORITES_ADD:
+ AccountFavorites::addFavorite($this->itemId, $userId);
+
+ $this->JsonResponse->setDescription(__('Favorito añadido'));
+ break;
+ case ActionsInterface::ACTION_ACC_FAVORITES_DELETE:
+ AccountFavorites::deleteFavorite($this->itemId, $userId);
+
+ $this->JsonResponse->setDescription(__('Favorito eliminado'));
+ break;
+ }
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Importar usuarios de LDAP
+ *
+ * @throws \phpmailer\phpmailerException
+ */
+ protected function ldapImportAction()
+ {
+ $this->LogMessage->setAction(__('Importar usuarios de LDAP', false));
+
+ if (UserLdapSync::run()) {
+ $this->LogMessage->addDescription(__('Importación de usuarios de LDAP realizada', false));
+ $this->LogMessage->addDetails(__('Usuarios importados', false), sprintf('%d/%d', UserLdapSync::$syncedObjects, UserLdapSync::$totalObjects));
+ $this->LogMessage->addDetails(__('Errores', false), UserLdapSync::$errorObjects);
+
+ $this->JsonResponse->setStatus(0);
+ } else {
+ $this->LogMessage->addDescription(__('Error al importar usuarios de LDAP', false));
+ }
+
+ $this->JsonResponse->addMessage(__('Revise el registro de eventos para más detalles', false));
+ }
+
+ /**
+ * Acciones sobre notificaciones
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \SP\Core\Exceptions\ValidationException
+ */
+ protected function noticeAction()
+ {
+ switch ($this->actionId) {
+ case ActionsInterface::ACTION_NOT_USER_CHECK:
+ Notice::getItem()->setChecked($this->itemId);
+
+ $this->JsonResponse->setDescription(__('Notificación leída'));
+ break;
+ case ActionsInterface::ACTION_NOT_USER_NEW:
+ $Form = new NoticeForm($this->itemId);
+ $Form->validate($this->actionId);
+
+ Notice::getItem($Form->getItemData())->add();
+
+ $this->JsonResponse->setDescription(__('Notificación creada'));
+ break;
+ case ActionsInterface::ACTION_NOT_USER_EDIT:
+ $Form = new NoticeForm($this->itemId);
+ $Form->validate($this->actionId);
+
+ Notice::getItem($Form->getItemData())->update();
+
+ $this->JsonResponse->setDescription(__('Notificación actualizada'));
+ break;
+ case ActionsInterface::ACTION_NOT_USER_DELETE:
+ if (is_array($this->itemId)) {
+ Notice::getItem()->deleteBatch($this->itemId);
+
+ $this->JsonResponse->setDescription(__('Notificaciones eliminadas'));
+ } else {
+ Notice::getItem()->delete($this->itemId);
+
+ $this->JsonResponse->setDescription(__('Notificación eliminada'));
+ }
+ break;
+ }
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Acciones para peticiones sobre cuentas
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ protected function requestAccountAction()
+ {
+ $description = Request::analyze('description');
+
+ if (!$description) {
+ $this->JsonResponse->setDescription(__('Es necesaria una descripción', false));
+ return;
+ }
+
+ $account = AccountUtil::getAccountRequestData($this->itemId);
+
+ if ($account->account_userId === $account->account_userEditId) {
+ $users = [$account->account_userId];
+ } else {
+ $users = [$account->account_userId, $account->account_userEditId];
+ }
+
+ $requestUsername = Session::getUserData()->getUserName();
+ $requestLogin = Session::getUserData()->getUserLogin();
+
+ $this->LogMessage->setAction(__('Solicitud de Modificación de Cuenta', false));
+ $this->LogMessage->addDetails(__('Solicitante', false), sprintf('%s (%s)', $requestUsername, $requestLogin));
+ $this->LogMessage->addDetails(__('Cuenta', false), $account->account_name);
+ $this->LogMessage->addDetails(__('Cliente', false), $account->customer_name);
+ $this->LogMessage->addDetails(__('Descripción', false), $description);
+
+ // Enviar por correo si está disponible
+ if (Checks::mailrequestIsEnabled()) {
+ $recipients = [];
+
+ foreach ($users as $user) {
+ $recipients[] = UserUtil::getUserEmail($user);
+ }
+
+ $mailto = implode(',', $recipients);
+
+ if (strlen($mailto) > 1
+ && Email::sendEmail($this->LogMessage, $mailto)
+ ) {
+ $this->LogMessage->addDescription(__('Solicitud enviada por correo', false));
+ } else {
+ $this->LogMessage->addDescription(__('Solicitud no enviada por correo', false));
+ }
+ }
+
+ // Crear notificaciones
+ foreach ($users as $user) {
+ $NoticeData = new NoticeData();
+ $NoticeData->setNoticeUserId($user);
+ $NoticeData->setNoticeComponent('Accounts');
+ $NoticeData->setNoticeType(__('Solicitud'));
+ $NoticeData->setNoticeDescription($this->LogMessage);
+
+ Notice::getItem($NoticeData)->add();
+ }
+
+
+ $this->LogMessage->addDescription(__('Solicitud realizada', false));
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Acción para eliminar una cuenta del historial
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ protected function accountHistoryAction()
+ {
+ $Account = new AccountHistory();
+
+ switch ($this->actionId) {
+ case ActionsInterface::ACTION_MGM_ACCOUNTS_EDIT_RESTORE:
+ AccountHistoryUtil::restoreFromHistory($this->itemId, Request::analyze('accountId', 0));
+
+ $this->LogMessage->setAction(__('Restaurar Cuenta', false));
+ $this->LogMessage->addDescription(__('Cuenta restaurada', false));
+ $this->LogMessage->addDetails(__('Nombre', false), AccountUtil::getAccountNameById($this->itemId));
+
+ $this->JsonResponse->setData(['itemId' => $this->itemId, 'nextActionId' => ActionsInterface::ACTION_ACC_VIEW]);
+ break;
+ case ActionsInterface::ACTION_MGM_ACCOUNTS_DELETE_HISTORY:
+ if (is_array($this->itemId)) {
+ $accounts = AccountHistoryUtil::getAccountNameByIdBatch($this->itemId);
+ $numAccounts = count($accounts);
+ } else {
+ $accounts = AccountHistoryUtil::getAccountNameById($this->itemId);
+ $numAccounts = 1;
+ }
+
+ $Account->deleteAccount($this->itemId);
+
+ $this->LogMessage->setAction(__('Eliminar Cuenta (H)', false));
+
+ if ($numAccounts > 1) {
+ $this->LogMessage->addDescription(__('Cuentas eliminadas', false));
+
+ foreach ($accounts as $account) {
+ $this->LogMessage->addDetails(__('Nombre', false), $account->acchistory_name);
+ }
+ } elseif ($numAccounts === 1) {
+ $this->LogMessage->addDescription(__('Cuenta eliminada', false));
+ $this->LogMessage->addDetails(__('Nombre', false), $accounts->acchistory_name);
+ }
+ break;
+ }
+
+ Email::sendEmail($this->LogMessage);
+
+ $this->JsonResponse->setStatus(0);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Controller/ItemControllerInterface.class.php b/inc/SP/Controller/ItemControllerInterface.class.php
new file mode 100644
index 00000000..c5f14a5a
--- /dev/null
+++ b/inc/SP/Controller/ItemControllerInterface.class.php
@@ -0,0 +1,38 @@
+.
+ */
+
+namespace SP\Controller;
+
+/**
+ * Interface ItemControllerInterface
+ *
+ * @package SP\Controller
+ */
+interface ItemControllerInterface
+{
+ /**
+ * Realizar la acción solicitada en la la petición HTTP
+ */
+ public function doAction();
+}
\ No newline at end of file
diff --git a/inc/SP/Controller/ItemListController.class.php b/inc/SP/Controller/ItemListController.class.php
new file mode 100644
index 00000000..c9e0c6fb
--- /dev/null
+++ b/inc/SP/Controller/ItemListController.class.php
@@ -0,0 +1,409 @@
+.
+ */
+
+namespace SP\Controller;
+
+defined('APP_ROOT') || die();
+
+use SP\Account\AccountHistoryUtil;
+use SP\Account\AccountUtil;
+use SP\Api\ApiTokensUtil;
+use SP\Config\Config;
+use SP\Controller\Grids\Items;
+use SP\Core\ActionsInterface;
+use SP\Core\Exceptions\SPException;
+use SP\Core\Template;
+use SP\DataModel\ItemSearchData;
+use SP\Http\Request;
+use SP\Mgmt\Categories\CategorySearch;
+use SP\Mgmt\Customers\CustomerSearch;
+use SP\Mgmt\CustomFields\CustomFieldDefSearch;
+use SP\Mgmt\Files\FileSearch;
+use SP\Mgmt\Files\FileUtil;
+use SP\Mgmt\Groups\GroupSearch;
+use SP\Mgmt\Plugins\PluginSearch;
+use SP\Mgmt\Profiles\ProfileSearch;
+use SP\Mgmt\PublicLinks\PublicLinkSearch;
+use SP\Mgmt\Tags\TagSearch;
+use SP\Mgmt\Users\UserSearch;
+use SP\Util\Checks;
+
+/**
+ * Clase encargada de de preparar la presentación de las vistas de gestión de accesos
+ *
+ * @package Controller
+ */
+class ItemListController extends GridTabControllerBase implements ActionsInterface
+{
+ const TYPE_ACCESSES = 1;
+ const TYPE_ACCOUNTS = 2;
+
+ /**
+ * @var ItemSearchData
+ */
+ private $ItemSearchData;
+
+ /**
+ * Constructor
+ *
+ * @param $template Template con instancia de plantilla
+ */
+ public function __construct(Template $template = null)
+ {
+ parent::__construct($template);
+
+ $ItemSearchData = new ItemSearchData();
+ $ItemSearchData->setLimitCount(Config::getConfig()->getAccountCount());
+ $this->ItemSearchData = $ItemSearchData;
+ }
+
+ /**
+ * Obtener los datos para la vista de archivos de una cuenta
+ */
+ public function getAccountFiles()
+ {
+ $this->setAction(self::ACTION_ACC_FILES);
+
+ $this->view->addTemplate('files-list', 'account');
+
+ $this->view->assign('accountId', Request::analyze('id', 0));
+ $this->view->assign('deleteEnabled', Request::analyze('del', 0));
+ $this->view->assign('files', FileUtil::getAccountFiles($this->view->accountId));
+
+ if (!is_array($this->view->files) || count($this->view->files) === 0) {
+ return;
+ }
+ }
+
+ /**
+ * Realizar las accione del controlador
+ *
+ * @param mixed $type Tipo de acción
+ */
+ public function doAction($type = null)
+ {
+ try {
+ $this->useTabs();
+
+ if ($type === self::TYPE_ACCOUNTS) {
+ $this->getCategories();
+ $this->getCustomers();
+ $this->getCustomFields();
+ $this->getFiles();
+ $this->getAccounts();
+ $this->getAccountsHistory();
+ $this->getTags();
+ $this->getPluginsList();
+
+ $this->EventDispatcher->notifyEvent('show.itemlist.accounts', $this);
+ } elseif ($type === self::TYPE_ACCESSES) {
+ $this->getUsersList();
+ $this->getGroupsList();
+ $this->getProfilesList();
+ $this->getAPITokensList();
+ $this->getPublicLinksList();
+
+ $this->EventDispatcher->notifyEvent('show.itemlist.accesses', $this);
+ }
+ } catch (SPException $e) {
+ $this->showError(self::ERR_EXCEPTION);
+ }
+ }
+
+ /**
+ * Obtener los datos para la pestaña de categorías
+ *
+ * @throws \SP\Core\Exceptions\InvalidArgumentException
+ */
+ public function getCategories()
+ {
+ $this->setAction(self::ACTION_MGM_CATEGORIES);
+
+ if (!$this->checkAccess()) {
+ return;
+ }
+
+ $Grid = $this->getGrids()->getCategoriesGrid();
+ $Grid->getData()->setData(CategorySearch::getItem()->getMgmtSearch($this->ItemSearchData));
+ $Grid->updatePager();
+
+ $this->view->append('tabs', $Grid);
+ }
+
+ /**
+ * @return Items
+ */
+ public function getGrids()
+ {
+ return $this->Grids;
+ }
+
+ /**
+ * Obtener los datos para la pestaña de clientes
+ *
+ * @throws \SP\Core\Exceptions\InvalidArgumentException
+ */
+ public function getCustomers()
+ {
+ $this->setAction(self::ACTION_MGM_CUSTOMERS);
+
+ if (!$this->checkAccess()) {
+ return;
+ }
+
+ $Grid = $this->getGrids()->getCustomersGrid();
+ $Grid->getData()->setData(CustomerSearch::getItem()->getMgmtSearch($this->ItemSearchData));
+ $Grid->updatePager();
+
+ $this->view->append('tabs', $Grid);
+ }
+
+ /**
+ * Obtener los datos para la pestaña de campos personalizados
+ *
+ * @throws \SP\Core\Exceptions\InvalidArgumentException
+ */
+ public function getCustomFields()
+ {
+ $this->setAction(self::ACTION_MGM_CUSTOMFIELDS);
+
+ if (!$this->checkAccess()) {
+ return;
+ }
+
+ $Grid = $this->getGrids()->getCustomFieldsGrid();
+ $Grid->getData()->setData(CustomFieldDefSearch::getItem()->getMgmtSearch($this->ItemSearchData));
+ $Grid->updatePager();
+
+ $this->view->append('tabs', $Grid);
+ }
+
+ /**
+ * Obtener los datos para la pestaña de archivos
+ *
+ * @throws \SP\Core\Exceptions\InvalidArgumentException
+ */
+ public function getFiles()
+ {
+ if (!Checks::fileIsEnabled()) {
+ return;
+ }
+
+ $this->setAction(self::ACTION_MGM_FILES);
+
+ if (!$this->checkAccess()) {
+ return;
+ }
+
+ $Grid = $this->getGrids()->getFilesGrid();
+ $Grid->getData()->setData(FileSearch::getItem()->getMgmtSearch($this->ItemSearchData));
+ $Grid->updatePager();
+
+ $this->view->append('tabs', $Grid);
+ }
+
+ /**
+ * Obtener los datos para la pestaña de cuentas
+ *
+ * @throws \SP\Core\Exceptions\InvalidArgumentException
+ */
+ public function getAccounts()
+ {
+ $this->setAction(self::ACTION_MGM_ACCOUNTS);
+
+ if (!$this->checkAccess()) {
+ return;
+ }
+
+ $Grid = $this->getGrids()->getAccountsGrid();
+ $Grid->getData()->setData(AccountUtil::getAccountsMgmtSearch($this->ItemSearchData));
+ $Grid->updatePager();
+
+ $this->view->append('tabs', $Grid);
+ }
+
+ /**
+ * Obtener los datos para la pestaña de cuentas en el histórico
+ *
+ * @throws \SP\Core\Exceptions\InvalidArgumentException
+ */
+ public function getAccountsHistory()
+ {
+ $this->setAction(self::ACTION_MGM_ACCOUNTS_HISTORY);
+
+ if (!$this->checkAccess()) {
+ return;
+ }
+
+ $Grid = $this->getGrids()->getAccountsHistoryGrid();
+ $Grid->getData()->setData(AccountHistoryUtil::getAccountsMgmtSearch($this->ItemSearchData));
+ $Grid->updatePager();
+
+ $this->view->append('tabs', $Grid);
+ }
+
+ /**
+ * Obtener los datos para la pestaña de etiquetas
+ *
+ * @throws \SP\Core\Exceptions\InvalidArgumentException
+ */
+ public function getTags()
+ {
+ $this->setAction(self::ACTION_MGM_TAGS);
+
+ if (!$this->checkAccess()) {
+ return;
+ }
+
+ $Grid = $this->getGrids()->getTagsGrid();
+ $Grid->getData()->setData(TagSearch::getItem()->getMgmtSearch($this->ItemSearchData));
+ $Grid->updatePager();
+
+ $this->view->append('tabs', $Grid);
+ }
+
+ /**
+ * Obtener los datos para la pestaña de tokens de API
+ *
+ * @throws \SP\Core\Exceptions\InvalidArgumentException
+ */
+ public function getPluginsList()
+ {
+ $this->setAction(self::ACTION_MGM_PLUGINS);
+
+ if (!$this->checkAccess()) {
+ return;
+ }
+
+ $Grid = $this->getGrids()->getPluginsGrid();
+ $Grid->getData()->setData(PluginSearch::getItem()->getMgmtSearch($this->ItemSearchData));
+ $Grid->updatePager();
+
+ $this->view->append('tabs', $Grid);
+ }
+
+ /**
+ * Obtener los datos para la pestaña de usuarios
+ *
+ * @throws \SP\Core\Exceptions\InvalidArgumentException
+ */
+ public function getUsersList()
+ {
+ $this->setAction(self::ACTION_USR_USERS);
+
+ if (!$this->checkAccess()) {
+ return;
+ }
+
+ $Grid = $this->getGrids()->getUsersGrid();
+ $Grid->getData()->setData(UserSearch::getItem()->getMgmtSearch($this->ItemSearchData));
+ $Grid->updatePager();
+
+ $this->view->append('tabs', $Grid);
+ }
+
+ /**
+ * Obtener los datos para la pestaña de grupos
+ *
+ * @throws \SP\Core\Exceptions\InvalidArgumentException
+ */
+ public function getGroupsList()
+ {
+ $this->setAction(self::ACTION_USR_GROUPS);
+
+ if (!$this->checkAccess()) {
+ return;
+ }
+
+ $Grid = $this->getGrids()->getGroupsGrid();
+ $Grid->getData()->setData(GroupSearch::getItem()->getMgmtSearch($this->ItemSearchData));
+ $Grid->updatePager();
+
+ $this->view->append('tabs', $Grid);
+ }
+
+ /**
+ * Obtener los datos para la pestaña de perfiles
+ *
+ * @throws \SP\Core\Exceptions\InvalidArgumentException
+ */
+ public function getProfilesList()
+ {
+ $this->setAction(self::ACTION_USR_PROFILES);
+
+ if (!$this->checkAccess()) {
+ return;
+ }
+
+ $Grid = $this->getGrids()->getProfilesGrid();
+ $Grid->getData()->setData(ProfileSearch::getItem()->getMgmtSearch($this->ItemSearchData));
+ $Grid->updatePager();
+
+ $this->view->append('tabs', $Grid);
+ }
+
+ /**
+ * Obtener los datos para la pestaña de tokens de API
+ *
+ * @throws \SP\Core\Exceptions\InvalidArgumentException
+ */
+ public function getAPITokensList()
+ {
+ $this->setAction(self::ACTION_MGM_APITOKENS);
+
+ if (!$this->checkAccess()) {
+ return;
+ }
+
+ $Grid = $this->getGrids()->getTokensGrid();
+ $Grid->getData()->setData(ApiTokensUtil::getTokensMgmtSearch($this->ItemSearchData));
+ $Grid->updatePager();
+
+ $this->view->append('tabs', $Grid);
+ }
+
+ /**
+ * Obtener los datos para la pestaña de tokens de API
+ *
+ * @throws \SP\Core\Exceptions\InvalidArgumentException
+ */
+ public function getPublicLinksList()
+ {
+ if (!Checks::publicLinksIsEnabled()) {
+ return;
+ }
+
+ $this->setAction(self::ACTION_MGM_PUBLICLINKS);
+
+ if (!$this->checkAccess()) {
+ return;
+ }
+
+ $Grid = $this->getGrids()->getPublicLinksGrid();
+ $Grid->getData()->setData(PublicLinkSearch::getItem()->getMgmtSearch($this->ItemSearchData));
+ $Grid->updatePager();
+
+ $this->view->append('tabs', $Grid);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Controller/ItemSearchController.class.php b/inc/SP/Controller/ItemSearchController.class.php
new file mode 100644
index 00000000..979c68f4
--- /dev/null
+++ b/inc/SP/Controller/ItemSearchController.class.php
@@ -0,0 +1,516 @@
+.
+ */
+
+namespace SP\Controller;
+
+defined('APP_ROOT') || die();
+
+use SP\Account\AccountHistoryUtil;
+use SP\Account\AccountUtil;
+use SP\Api\ApiTokensUtil;
+use SP\Config\Config;
+use SP\Controller\Grids\Items;
+use SP\Core\ActionsInterface;
+use SP\Core\SessionUtil;
+use SP\Core\Template;
+use SP\DataModel\ItemSearchData;
+use SP\Http\Request;
+use SP\Mgmt\Categories\CategorySearch;
+use SP\Mgmt\Customers\CustomerSearch;
+use SP\Mgmt\CustomFields\CustomFieldDefSearch;
+use SP\Mgmt\Files\FileSearch;
+use SP\Mgmt\Groups\GroupSearch;
+use SP\Mgmt\Plugins\PluginSearch;
+use SP\Mgmt\Profiles\ProfileSearch;
+use SP\Mgmt\PublicLinks\PublicLinkSearch;
+use SP\Mgmt\Tags\TagSearch;
+use SP\Mgmt\Users\UserSearch;
+use SP\Util\Checks;
+use SP\Util\Json;
+
+/**
+ * Class AccItemsMgmtSearch para la gestión de búsquedas de items de accesos
+ *
+ * @package SP\Controller
+ */
+class ItemSearchController extends GridItemsSearchController implements ActionsInterface, ItemControllerInterface
+{
+ use RequestControllerTrait;
+
+ /**
+ * @var ItemSearchData
+ */
+ protected $ItemSearchData;
+
+ /**
+ * Constructor
+ *
+ * @param $template Template con instancia de plantilla
+ */
+ public function __construct(Template $template = null)
+ {
+ parent::__construct($template);
+
+ $this->grids = new Items();
+ $this->grids->setQueryTimeStart(microtime());
+ $this->ItemSearchData = new ItemSearchData();
+
+ $this->init();
+ $this->setItemSearchData();
+ }
+
+ /**
+ * Establecer las propiedades de búsqueda
+ */
+ protected function setItemSearchData()
+ {
+ $this->ItemSearchData->setSeachString(Request::analyze('search'));
+ $this->ItemSearchData->setLimitStart(Request::analyze('start', 0));
+ $this->ItemSearchData->setLimitCount(Request::analyze('count', Config::getConfig()->getAccountCount()));
+ }
+
+ /**
+ * Realizar la acción solicitada en la la petición HTTP
+ *
+ * @param mixed $type Tipo de acción
+ */
+ public function doAction($type = null)
+ {
+ $this->view->assign('isDemo', Checks::demoIsEnabled());
+ $this->view->assign('sk', SessionUtil::getSessionKey(true));
+ $this->view->assign('index', $this->activeTab);
+
+ try {
+ switch ($this->actionId) {
+ case ActionsInterface::ACTION_USR_USERS_SEARCH:
+ $this->getUsers();
+ break;
+ case ActionsInterface::ACTION_USR_GROUPS_SEARCH:
+ $this->getGroups();
+ break;
+ case ActionsInterface::ACTION_USR_PROFILES_SEARCH:
+ $this->getProfiles();
+ break;
+ case ActionsInterface::ACTION_MGM_APITOKENS_SEARCH:
+ $this->getTokens();
+ break;
+ case ActionsInterface::ACTION_MGM_PUBLICLINKS_SEARCH:
+ $this->getPublicLinks();
+ break;
+ case ActionsInterface::ACTION_MGM_CATEGORIES_SEARCH:
+ $this->getCategories();
+ break;
+ case ActionsInterface::ACTION_MGM_CUSTOMERS_SEARCH:
+ $this->getCustomers();
+ break;
+ case ActionsInterface::ACTION_MGM_CUSTOMFIELDS_SEARCH:
+ $this->getCustomFields();
+ break;
+ case ActionsInterface::ACTION_MGM_FILES_SEARCH:
+ $this->getFiles();
+ break;
+ case ActionsInterface::ACTION_MGM_ACCOUNTS_SEARCH:
+ $this->getAccounts();
+ break;
+ case ActionsInterface::ACTION_MGM_ACCOUNTS_SEARCH_HISTORY:
+ $this->getAccountsHistory();
+ break;
+ case ActionsInterface::ACTION_MGM_TAGS_SEARCH:
+ $this->getTags();
+ break;
+ case ActionsInterface::ACTION_MGM_PLUGINS_SEARCH:
+ $this->getPlugins();
+ break;
+ default:
+ $this->invalidAction();
+ }
+
+ $this->JsonResponse->setCsrf($this->view->sk);
+ $this->JsonResponse->setData(['html' => $this->render()]);
+ } catch (\Exception $e) {
+ $this->JsonResponse->setDescription($e->getMessage());
+ }
+
+ Json::returnJson($this->JsonResponse);
+ }
+
+ /**
+ * Obtener los usuarios de una búsqueda
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function getUsers()
+ {
+ $this->setAction(self::ACTION_USR_USERS_SEARCH);
+
+ if (!$this->checkAccess()) {
+ return;
+ }
+
+ $this->view->addTemplate('datagrid-table', 'grid');
+
+ $Grid = $this->getGrids()->getUsersGrid();
+ $Grid->getData()->setData(UserSearch::getItem()->getMgmtSearch($this->ItemSearchData));
+ $Grid->updatePager();
+
+ $this->updatePager($Grid->getPager(), $this->ItemSearchData);
+
+ $this->view->assign('data', $Grid);
+ $this->view->assign('actionId', self::ACTION_USR);
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * @return Items
+ */
+ public function getGrids()
+ {
+ return $this->grids;
+ }
+
+ /**
+ * Obtener los grupos de una búsqueda
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function getGroups()
+ {
+ $this->setAction(self::ACTION_USR_GROUPS_SEARCH);
+
+ if (!$this->checkAccess()) {
+ return;
+ }
+
+ $this->view->addTemplate('datagrid-table', 'grid');
+
+ $Grid = $this->getGrids()->getGroupsGrid();
+ $Grid->getData()->setData(GroupSearch::getItem()->getMgmtSearch($this->ItemSearchData));
+ $Grid->updatePager();
+
+ $this->updatePager($Grid->getPager(), $this->ItemSearchData);
+
+ $this->view->assign('data', $Grid);
+ $this->view->assign('actionId', self::ACTION_USR);
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Obtener los perfiles de una búsqueda
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function getProfiles()
+ {
+ $this->setAction(self::ACTION_USR_PROFILES_SEARCH);
+
+ if (!$this->checkAccess()) {
+ return;
+ }
+
+ $this->view->addTemplate('datagrid-table', 'grid');
+
+ $Grid = $this->getGrids()->getProfilesGrid();
+ $Grid->getData()->setData(ProfileSearch::getItem()->getMgmtSearch($this->ItemSearchData));
+ $Grid->updatePager();
+
+ $this->updatePager($Grid->getPager(), $this->ItemSearchData);
+
+ $this->view->assign('data', $Grid);
+ $this->view->assign('actionId', self::ACTION_USR);
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Obtener los tokens API de una búsqueda
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function getTokens()
+ {
+ $this->setAction(self::ACTION_MGM_APITOKENS_SEARCH);
+
+ if (!$this->checkAccess()) {
+ return;
+ }
+
+ $this->view->addTemplate('datagrid-table', 'grid');
+
+ $Grid = $this->getGrids()->getTokensGrid();
+ $Grid->getData()->setData(ApiTokensUtil::getTokensMgmtSearch($this->ItemSearchData));
+ $Grid->updatePager();
+
+ $this->updatePager($Grid->getPager(), $this->ItemSearchData);
+
+ $this->view->assign('data', $Grid);
+ $this->view->assign('actionId', self::ACTION_USR);
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Obtener los enlaces públicos de una búsqueda
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function getPublicLinks()
+ {
+ $this->setAction(self::ACTION_MGM_PUBLICLINKS_SEARCH);
+
+ if (!$this->checkAccess()) {
+ return;
+ }
+
+ $this->view->addTemplate('datagrid-table', 'grid');
+
+ $Grid = $this->getGrids()->getPublicLinksGrid();
+ $Grid->getData()->setData(PublicLinkSearch::getItem()->getMgmtSearch($this->ItemSearchData));
+ $Grid->updatePager();
+
+ $this->updatePager($Grid->getPager(), $this->ItemSearchData);
+
+ $this->view->assign('data', $Grid);
+ $this->view->assign('actionId', self::ACTION_USR);
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Obtener las categorías de una búsqueda
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function getCategories()
+ {
+ $this->setAction(self::ACTION_MGM_CATEGORIES_SEARCH);
+
+ if (!$this->checkAccess()) {
+ return;
+ }
+
+ $this->view->addTemplate('datagrid-table', 'grid');
+
+ $Grid = $this->getGrids()->getCategoriesGrid();
+ $Grid->getData()->setData(CategorySearch::getItem()->getMgmtSearch($this->ItemSearchData));
+ $Grid->updatePager();
+
+ $this->updatePager($Grid->getPager(), $this->ItemSearchData);
+
+ $this->view->assign('data', $Grid);
+ $this->view->assign('actionId', self::ACTION_MGM);
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Obtener los clientes de una búsqueda
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function getCustomers()
+ {
+ $this->setAction(self::ACTION_MGM_CUSTOMERS_SEARCH);
+
+ if (!$this->checkAccess()) {
+ return;
+ }
+
+ $this->view->addTemplate('datagrid-table', 'grid');
+
+ $Grid = $this->getGrids()->getCustomersGrid();
+ $Grid->getData()->setData(CustomerSearch::getItem()->getMgmtSearch($this->ItemSearchData));
+ $Grid->updatePager();
+
+ $this->updatePager($Grid->getPager(), $this->ItemSearchData);
+
+ $this->view->assign('data', $Grid);
+ $this->view->assign('actionId', self::ACTION_MGM);
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Obtener los campos personalizados de una búsqueda
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function getCustomFields()
+ {
+ $this->setAction(self::ACTION_MGM_CUSTOMFIELDS_SEARCH);
+
+ if (!$this->checkAccess()) {
+ return;
+ }
+
+ $this->view->addTemplate('datagrid-table', 'grid');
+
+ $Grid = $this->getGrids()->getCustomFieldsGrid();
+ $Grid->getData()->setData(CustomFieldDefSearch::getItem()->getMgmtSearch($this->ItemSearchData));
+ $Grid->updatePager();
+
+ $this->updatePager($Grid->getPager(), $this->ItemSearchData);
+
+ $this->view->assign('data', $Grid);
+ $this->view->assign('actionId', self::ACTION_MGM);
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Obtener los archivos de una búsqueda
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function getFiles()
+ {
+ $this->setAction(self::ACTION_MGM_FILES_SEARCH);
+
+ if (!$this->checkAccess()) {
+ return;
+ }
+
+ $this->view->addTemplate('datagrid-table', 'grid');
+
+ $Grid = $this->getGrids()->getFilesGrid();
+ $Grid->getData()->setData(FileSearch::getItem()->getMgmtSearch($this->ItemSearchData));
+ $Grid->updatePager();
+
+ $this->updatePager($Grid->getPager(), $this->ItemSearchData);
+
+ $this->view->assign('data', $Grid);
+ $this->view->assign('actionId', self::ACTION_MGM);
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Obtener las cuentas de una búsqueda
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function getAccounts()
+ {
+ $this->setAction(self::ACTION_MGM_ACCOUNTS_SEARCH);
+
+ if (!$this->checkAccess()) {
+ return;
+ }
+
+ $this->view->addTemplate('datagrid-table', 'grid');
+
+ $Grid = $this->getGrids()->getAccountsGrid();
+ $Grid->getData()->setData(AccountUtil::getAccountsMgmtSearch($this->ItemSearchData));
+ $Grid->updatePager();
+
+ $this->updatePager($Grid->getPager(), $this->ItemSearchData);
+
+ $this->view->assign('data', $Grid);
+ $this->view->assign('actionId', self::ACTION_MGM);
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Obtener las cuentas de una búsqueda
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function getAccountsHistory()
+ {
+ $this->setAction(self::ACTION_MGM_ACCOUNTS_SEARCH_HISTORY);
+
+ if (!$this->checkAccess()) {
+ return;
+ }
+
+ $this->view->addTemplate('datagrid-table', 'grid');
+
+ $Grid = $this->getGrids()->getAccountsHistoryGrid();
+ $Grid->getData()->setData(AccountHistoryUtil::getAccountsMgmtSearch($this->ItemSearchData));
+ $Grid->updatePager();
+
+ $this->updatePager($Grid->getPager(), $this->ItemSearchData);
+
+ $this->view->assign('data', $Grid);
+ $this->view->assign('actionId', self::ACTION_MGM);
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Obtener las etiquetas de una búsqueda
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function getTags()
+ {
+ $this->setAction(self::ACTION_MGM_TAGS_SEARCH);
+
+ if (!$this->checkAccess()) {
+ return;
+ }
+
+ $this->view->addTemplate('datagrid-table', 'grid');
+
+ $Grid = $this->getGrids()->getTagsGrid();
+ $Grid->getData()->setData(TagSearch::getItem()->getMgmtSearch($this->ItemSearchData));
+ $Grid->updatePager();
+
+ $this->updatePager($Grid->getPager(), $this->ItemSearchData);
+
+ $this->view->assign('data', $Grid);
+ $this->view->assign('actionId', self::ACTION_MGM);
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Obtener los plugins de una búsqueda
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function getPlugins()
+ {
+ $this->setAction(self::ACTION_MGM_PLUGINS_SEARCH);
+
+ if (!$this->checkAccess()) {
+ return;
+ }
+
+ $this->view->addTemplate('datagrid-table', 'grid');
+
+ $Grid = $this->getGrids()->getPluginsGrid();
+ $Grid->getData()->setData(PluginSearch::getItem()->getMgmtSearch($this->ItemSearchData));
+ $Grid->updatePager();
+
+ $this->updatePager($Grid->getPager(), $this->ItemSearchData);
+
+ $this->view->assign('data', $Grid);
+ $this->view->assign('actionId', self::ACTION_MGM);
+
+ $this->JsonResponse->setStatus(0);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Controller/ItemShowController.class.php b/inc/SP/Controller/ItemShowController.class.php
new file mode 100644
index 00000000..ed9a5c92
--- /dev/null
+++ b/inc/SP/Controller/ItemShowController.class.php
@@ -0,0 +1,596 @@
+.
+ */
+
+namespace SP\Controller;
+
+defined('APP_ROOT') || die();
+
+use SP\Account\Account;
+use SP\Account\AccountAcl;
+use SP\Account\AccountHistory;
+use SP\Api\ApiTokensUtil;
+use SP\Core\ActionsInterface;
+use SP\Core\Crypt;
+use SP\Core\Exceptions\ItemException;
+use SP\Core\Plugin\PluginUtil;
+use SP\Core\Session;
+use SP\Core\SessionUtil;
+use SP\Core\Template;
+use SP\DataModel\AccountExtData;
+use SP\DataModel\CategoryData;
+use SP\DataModel\CustomerData;
+use SP\DataModel\CustomFieldData;
+use SP\DataModel\CustomFieldDefData;
+use SP\DataModel\GroupData;
+use SP\DataModel\ProfileData;
+use SP\DataModel\TagData;
+use SP\DataModel\UserData;
+use SP\DataModel\UserPassData;
+use SP\Http\Request;
+use SP\Log\Log;
+use SP\Mgmt\Categories\Category;
+use SP\Mgmt\Customers\Customer;
+use SP\Mgmt\CustomFields\CustomField;
+use SP\Mgmt\CustomFields\CustomFieldDef;
+use SP\Mgmt\CustomFields\CustomFieldTypes;
+use SP\Mgmt\Files\FileUtil;
+use SP\Mgmt\Groups\Group;
+use SP\Mgmt\Groups\GroupUsers;
+use SP\Mgmt\Plugins\Plugin;
+use SP\Mgmt\Profiles\Profile;
+use SP\Mgmt\Profiles\ProfileUtil;
+use SP\Mgmt\PublicLinks\PublicLink;
+use SP\Mgmt\Tags\Tag;
+use SP\Mgmt\Users\User;
+use SP\Mgmt\Users\UserPass;
+use SP\Util\Checks;
+use SP\Util\ImageUtil;
+use SP\Util\Json;
+use SP\Util\Util;
+
+/**
+ * Class AccItemMgmt
+ *
+ * @package SP\Controller
+ */
+class ItemShowController extends ControllerBase implements ActionsInterface, ItemControllerInterface
+{
+ use RequestControllerTrait;
+
+ /**
+ * Máximo numero de acciones antes de agrupar
+ */
+ const MAX_NUM_ACTIONS = 3;
+ /**
+ * @var int
+ */
+ private $module = 0;
+
+ /**
+ * Constructor
+ *
+ * @param $template Template con instancia de plantilla
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function __construct(Template $template = null)
+ {
+ parent::__construct($template);
+
+ $this->init();
+
+ $this->view->assign('isDemo', Checks::demoIsEnabled());
+ $this->view->assign('sk', SessionUtil::getSessionKey(true));
+ $this->view->assign('itemId', $this->itemId);
+ $this->view->assign('activeTab', $this->activeTab);
+ $this->view->assign('actionId', $this->actionId);
+ $this->view->assign('isView', false);
+ $this->view->assign('showViewCustomPass', true);
+ $this->view->assign('readonly', '');
+ }
+
+ /**
+ * Realizar la acción solicitada en la la petición HTTP
+ *
+ * @param mixed $type Tipo de acción
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function doAction($type = null)
+ {
+ try {
+ switch ($this->actionId) {
+ case self::ACTION_USR_USERS_VIEW:
+ $this->view->assign('header', __('Ver Usuario'));
+ $this->view->assign('isView', true);
+ $this->getUser();
+ break;
+ case self::ACTION_USR_USERS_EDIT:
+ $this->view->assign('header', __('Editar Usuario'));
+ $this->getUser();
+ break;
+ case self::ACTION_USR_USERS_EDITPASS:
+ $this->view->assign('header', __('Cambio de Clave'));
+ $this->getUserPass();
+ break;
+ case self::ACTION_USR_USERS_NEW:
+ $this->view->assign('header', __('Nuevo Usuario'));
+ $this->getUser();
+ break;
+ case self::ACTION_USR_GROUPS_VIEW:
+ $this->view->assign('header', __('Ver Grupo'));
+ $this->view->assign('isView', true);
+ $this->getGroup();
+ break;
+ case self::ACTION_USR_GROUPS_EDIT:
+ $this->view->assign('header', __('Editar Grupo'));
+ $this->getGroup();
+ break;
+ case self::ACTION_USR_GROUPS_NEW:
+ $this->view->assign('header', __('Nuevo Grupo'));
+ $this->getGroup();
+ break;
+ case self::ACTION_USR_PROFILES_VIEW:
+ $this->view->assign('header', __('Ver Perfil'));
+ $this->view->assign('isView', true);
+ $this->getProfile();
+ break;
+ case self::ACTION_USR_PROFILES_EDIT:
+ $this->view->assign('header', __('Editar Perfil'));
+ $this->getProfile();
+ break;
+ case self::ACTION_USR_PROFILES_NEW:
+ $this->view->assign('header', __('Nuevo Perfil'));
+ $this->getProfile();
+ break;
+ case self::ACTION_MGM_CUSTOMERS_VIEW:
+ $this->view->assign('header', __('Ver Cliente'));
+ $this->view->assign('isView', true);
+ $this->getCustomer();
+ break;
+ case self::ACTION_MGM_CUSTOMERS_EDIT:
+ $this->view->assign('header', __('Editar Cliente'));
+ $this->getCustomer();
+ break;
+ case self::ACTION_MGM_CUSTOMERS_NEW:
+ $this->view->assign('header', __('Nuevo Cliente'));
+ $this->getCustomer();
+ break;
+ case self::ACTION_MGM_CATEGORIES_VIEW:
+ $this->view->assign('header', __('Ver Categoría'));
+ $this->view->assign('isView', true);
+ $this->getCategory();
+ break;
+ case self::ACTION_MGM_CATEGORIES_EDIT:
+ $this->view->assign('header', __('Editar Categoría'));
+ $this->getCategory();
+ break;
+ case self::ACTION_MGM_CATEGORIES_NEW:
+ $this->view->assign('header', __('Nueva Categoría'));
+ $this->getCategory();
+ break;
+ case self::ACTION_MGM_APITOKENS_VIEW:
+ $this->view->assign('header', __('Ver Autorización'));
+ $this->view->assign('isView', true);
+ $this->getToken();
+ break;
+ case self::ACTION_MGM_APITOKENS_NEW:
+ $this->view->assign('header', __('Nueva Autorización'));
+ $this->getToken();
+ break;
+ case self::ACTION_MGM_APITOKENS_EDIT:
+ $this->view->assign('header', __('Editar Autorización'));
+ $this->getToken();
+ break;
+ case self::ACTION_MGM_CUSTOMFIELDS_NEW:
+ $this->view->assign('header', __('Nuevo Campo'));
+ $this->getCustomField();
+ break;
+ case self::ACTION_MGM_CUSTOMFIELDS_EDIT:
+ $this->view->assign('header', __('Editar Campo'));
+ $this->getCustomField();
+ break;
+ case self::ACTION_MGM_PUBLICLINKS_VIEW:
+ $this->view->assign('header', __('Ver Enlace Público'));
+ $this->view->assign('isView', true);
+ $this->getPublicLink();
+ break;
+ case self::ACTION_MGM_TAGS_NEW:
+ $this->view->assign('header', __('Nueva Etiqueta'));
+ $this->getTag();
+ break;
+ case self::ACTION_MGM_TAGS_EDIT:
+ $this->view->assign('header', __('Editar Etiqueta'));
+ $this->getTag();
+ break;
+ case self::ACTION_ACC_VIEW_PASS:
+ $this->view->assign('header', __('Clave de Cuenta'));
+ $this->getAccountPass();
+ break;
+ case self::ACTION_MGM_PLUGINS_VIEW:
+ $this->view->assign('header', __('Detalles de Plugin'));
+ $this->view->assign('isView', true);
+ $this->getPlugin();
+ break;
+ default:
+ $this->invalidAction();
+ }
+
+ if (count($this->JsonResponse->getData()) === 0) {
+ $this->JsonResponse->setData(['html' => $this->render()]);
+ }
+ } catch (\Exception $e) {
+ $this->JsonResponse->setDescription($e->getMessage());
+ }
+
+ Json::returnJson($this->JsonResponse);
+ }
+
+ /**
+ * Obtener los datos para la ficha de usuario
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \SP\Core\Exceptions\FileNotFoundException
+ */
+ protected function getUser()
+ {
+ $this->module = self::ACTION_USR_USERS;
+ $this->view->addTemplate('users');
+
+ $this->view->assign('user', $this->itemId ? User::getItem()->getById($this->itemId) : new UserData());
+ $this->view->assign('isDisabled', $this->view->actionId === self::ACTION_USR_USERS_VIEW ? 'disabled' : '');
+ $this->view->assign('isReadonly', $this->view->isDisabled ? 'readonly' : '');
+ $this->view->assign('groups', Group::getItem()->getItemsForSelect());
+ $this->view->assign('profiles', Profile::getItem()->getItemsForSelect());
+
+ $this->getCustomFieldsForItem();
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Obtener la lista de campos personalizados y sus valores
+ *
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ */
+ protected function getCustomFieldsForItem()
+ {
+ $this->view->assign('customFields', CustomField::getItem(new CustomFieldData($this->module))->getById($this->itemId));
+ }
+
+ /**
+ * Inicializar la vista de cambio de clave de usuario
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ protected function getUserPass()
+ {
+ $this->module = self::ACTION_USR_USERS;
+ $this->setAction(self::ACTION_USR_USERS_EDITPASS);
+
+ // Comprobar si el usuario a modificar es distinto al de la sesión
+ if ($this->itemId !== Session::getUserData()->getUserId() && !$this->checkAccess()) {
+ return;
+ }
+
+ $this->view->assign('user', User::getItem()->getById($this->itemId));
+ $this->view->addTemplate('userspass');
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Obtener los datos para la ficha de grupo
+ *
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \SP\Core\Exceptions\FileNotFoundException
+ */
+ protected function getGroup()
+ {
+ $this->module = self::ACTION_USR_GROUPS;
+ $this->view->addTemplate('groups');
+
+ $this->view->assign('group', $this->itemId ? Group::getItem()->getById($this->itemId) : new GroupData());
+ $this->view->assign('users', User::getItem()->getItemsForSelect());
+ $this->view->assign('groupUsers', GroupUsers::getItem()->getById($this->itemId));
+
+ $this->getCustomFieldsForItem();
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Obtener los datos para la ficha de perfil
+ *
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \SP\Core\Exceptions\FileNotFoundException
+ */
+ protected function getProfile()
+ {
+ $this->module = self::ACTION_USR_PROFILES;
+ $this->view->addTemplate('profiles');
+
+ $Profile = $this->itemId ? Profile::getItem()->getById($this->itemId) : new ProfileData();
+
+ $this->view->assign('profile', $Profile);
+ $this->view->assign('isDisabled', ($this->view->actionId === self::ACTION_USR_PROFILES_VIEW) ? 'disabled' : '');
+ $this->view->assign('isReadonly', $this->view->isDisabled ? 'readonly' : '');
+
+ if ($this->view->isView === true) {
+ $this->view->assign('usedBy', ProfileUtil::getProfileInUsersName($this->itemId));
+ }
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Obtener los datos para la ficha de cliente
+ *
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \SP\Core\Exceptions\FileNotFoundException
+ */
+ protected function getCustomer()
+ {
+ $this->module = self::ACTION_MGM_CUSTOMERS;
+ $this->view->addTemplate('customers');
+
+ $this->view->assign('customer', $this->itemId ? Customer::getItem()->getById($this->itemId) : new CustomerData());
+ $this->getCustomFieldsForItem();
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Obtener los datos para la ficha de categoría
+ *
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \SP\Core\Exceptions\FileNotFoundException
+ */
+ protected function getCategory()
+ {
+ $this->module = self::ACTION_MGM_CATEGORIES;
+ $this->view->addTemplate('categories');
+
+ $this->view->assign('category', $this->itemId ? Category::getItem()->getById($this->itemId) : new CategoryData());
+ $this->getCustomFieldsForItem();
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Obtener los datos para la ficha de tokens de API
+ *
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \SP\Core\Exceptions\FileNotFoundException
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \phpmailer\phpmailerException
+ */
+ protected function getToken()
+ {
+ $this->module = self::ACTION_MGM_APITOKENS;
+ $this->view->addTemplate('tokens');
+
+ $token = ApiTokensUtil::getTokens($this->itemId, true);
+
+ $this->view->assign('users', User::getItem()->getItemsForSelect());
+ $this->view->assign('actions', ApiTokensUtil::getTokenActions());
+ $this->view->assign('token', $token);
+ $this->view->assign('gotData', is_object($token));
+
+ if ($this->view->isView === true) {
+ $msg = sprintf('%s ;;Usuario: %s', __('Token de autorización visualizado'), $token->user_login);
+ Log::writeNewLogAndEmail(__('Autorizaciones', false), $msg);
+ }
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Obtener los datos para la ficha de campo personalizado
+ *
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \SP\Core\Exceptions\FileNotFoundException
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ protected function getCustomField()
+ {
+ $this->module = self::ACTION_MGM_CUSTOMFIELDS;
+ $this->view->addTemplate('customfields');
+
+ $customField = $this->itemId ? CustomFieldDef::getItem()->getById($this->itemId) : new CustomFieldDefData();
+
+ $this->view->assign('field', $customField);
+ $this->view->assign('types', CustomFieldTypes::getFieldsTypes());
+ $this->view->assign('modules', CustomFieldTypes::getFieldsModules());
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Obtener los datos para la ficha de enlace público
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \SP\Core\Exceptions\FileNotFoundException
+ */
+ protected function getPublicLink()
+ {
+ $this->module = self::ACTION_MGM_PUBLICLINKS;
+ $this->view->addTemplate('publiclinks');
+
+ $PublicLink = PublicLink::getItem();
+
+ $this->view->assign('link', $PublicLink->getItemForList($PublicLink->getById($this->itemId)));
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Obtener los datos para la ficha de categoría
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \SP\Core\Exceptions\FileNotFoundException
+ */
+ protected function getTag()
+ {
+ $this->module = self::ACTION_MGM_TAGS;
+ $this->view->addTemplate('tags');
+
+ $this->view->assign('tag', $this->itemId ? Tag::getItem()->getById($this->itemId) : new TagData());
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Mostrar la clave de una cuenta
+ *
+ * @throws ItemException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ * @throws \SP\Core\Exceptions\QueryException
+ * @throws \SP\Core\Exceptions\FileNotFoundException
+ */
+ public function getAccountPass()
+ {
+ $this->setAction(self::ACTION_ACC_VIEW_PASS);
+
+ $isHistory = Request::analyze('isHistory', false);
+ $isFull = Request::analyze('isFull', false);
+
+ $AccountData = new AccountExtData();
+
+ if (!$isHistory) {
+ $AccountData->setAccountId($this->itemId);
+ $Account = new Account($AccountData);
+ } else {
+ $Account = new AccountHistory($AccountData);
+ $Account->setId($this->itemId);
+ }
+
+ $Account->getAccountPassData();
+
+ if ($isHistory && !$Account->checkAccountMPass()) {
+ throw new ItemException(__('La clave maestra no coincide', false));
+ }
+
+ $AccountAcl = new AccountAcl($Account, ActionsInterface::ACTION_ACC_VIEW_PASS);
+ $Acl = $AccountAcl->getAcl();
+
+ $UserPass = new UserPass(new UserPassData());
+ $UserPass->getItemData()->setUserId(Session::getUserData()->getUserId());
+
+ if (!$Acl->isShowViewPass()) {
+ throw new ItemException(__('No tiene permisos para acceder a esta cuenta', false));
+ } elseif (!$UserPass->checkUserUpdateMPass()) {
+ throw new ItemException(__('Clave maestra actualizada', false) . '
' . __('Reinicie la sesión para cambiarla', false));
+ }
+
+ $accountClearPass = Crypt::getDecrypt($AccountData->getAccountPass(), $AccountData->getAccountIV());
+
+ if (!$isHistory) {
+ $Account->incrementDecryptCounter();
+
+ $Log = new Log();
+ $LogMessage = $Log->getLogMessage();
+ $LogMessage->setAction(__('Ver Clave', false));
+ $LogMessage->addDetails(__('ID', false), $this->itemId);
+ $LogMessage->addDetails(__('Cuenta', false), $AccountData->getCustomerName() . ' / ' . $AccountData->getAccountName());
+ $Log->writeLog();
+ }
+
+ $useImage = (int)Checks::accountPassToImageIsEnabled();
+
+ if (!$useImage) {
+ $pass = $isFull ? htmlentities(trim($accountClearPass)) : trim($accountClearPass);
+ } else {
+ $pass = ImageUtil::convertText($accountClearPass);
+ }
+
+ $this->JsonResponse->setStatus(0);
+
+ if ($isFull) {
+ $this->view->addTemplate('viewpass', 'account');
+
+ $this->view->assign('login', $AccountData->getAccountLogin());
+ $this->view->assign('pass', $pass);
+ $this->view->assign('isImage', $useImage);
+ $this->view->assign('isLinked', Request::analyze('isLinked', 0));
+
+ return;
+ }
+
+ $data = [
+ 'acclogin' => $AccountData->getAccountLogin(),
+ 'accpass' => $pass,
+ 'useimage' => $useImage
+ ];
+
+ $this->JsonResponse->setCsrf($this->view->sk);
+ $this->JsonResponse->setData($data);
+ }
+
+ /**
+ * Obtener los datos para la vista de plugins
+ *
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \SP\Core\Exceptions\FileNotFoundException
+ */
+ protected function getPlugin()
+ {
+ $this->module = self::ACTION_MGM_PLUGINS;
+ $this->view->addTemplate('plugins');
+
+ $Plugin = Plugin::getItem()->getById($this->itemId);
+
+ $this->view->assign('isReadonly', $this->view->isView ? 'readonly' : '');
+ $this->view->assign('plugin', $Plugin);
+ $this->view->assign('pluginInfo', PluginUtil::getPluginInfo($Plugin->getPluginName()));
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * Obtener los datos para la vista de archivos de una cuenta
+ *
+ * @throws \SP\Core\Exceptions\FileNotFoundException
+ */
+ protected function getAccountFiles()
+ {
+ $this->setAction(self::ACTION_ACC_FILES);
+
+ $this->view->assign('accountId', Request::analyze('id', 0));
+ $this->view->assign('deleteEnabled', Request::analyze('del', 0));
+ $this->view->assign('files', FileUtil::getAccountFiles($this->view->accountId));
+
+ if (!is_array($this->view->files) || count($this->view->files) === 0) {
+ return;
+ }
+
+ $this->view->addTemplate('files');
+
+ $this->JsonResponse->setStatus(0);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Controller/ItemsController.class.php b/inc/SP/Controller/ItemsController.class.php
new file mode 100644
index 00000000..7a6691d5
--- /dev/null
+++ b/inc/SP/Controller/ItemsController.class.php
@@ -0,0 +1,167 @@
+.
+ */
+
+namespace SP\Controller;
+
+use SP\Account\AccountUtil;
+use SP\Core\ItemsTypeInterface;
+use SP\Core\SessionUtil;
+use SP\DataModel\DataModelInterface;
+use SP\Http\Request;
+use SP\Mgmt\Categories\Category;
+use SP\Mgmt\Customers\Customer;
+use SP\Util\Json;
+
+/**
+ * Class ItemsController
+ *
+ * @package SP\Controller
+ */
+class ItemsController implements ItemControllerInterface
+{
+ use RequestControllerTrait;
+
+ /**
+ * ItemsController constructor.
+ */
+ public function __construct()
+ {
+ $this->init();
+ }
+
+ /**
+ * Realizar la acción solicitada en la la petición HTTP
+ */
+ public function doAction()
+ {
+ $itemType = Request::analyze('itemType', false);
+
+ $this->JsonResponse->setStatus(0);
+ $this->JsonResponse->setData($this->getItems($itemType));
+ $this->JsonResponse->setCsrf(SessionUtil::getSessionKey());
+
+ Json::returnJson($this->JsonResponse);
+ }
+
+ /**
+ * Devuelve los elementos solicitados
+ *
+ * @param $itemType int El tipo de elemento a devolver
+ * @return array
+ */
+ protected function getItems($itemType)
+ {
+ switch ($itemType) {
+ case ItemsTypeInterface::ITEM_CATEGORIES:
+ return $this->getCategories();
+ case ItemsTypeInterface::ITEM_CUSTOMERS:
+ return $this->getCustomers();
+ case ItemsTypeInterface::ITEM_CUSTOMERS_USER:
+ return $this->getCustomersForUser();
+ case ItemsTypeInterface::ITEM_ACCOUNTS_USER:
+ return $this->getAccountsForUser();
+ default:
+ return [];
+ }
+ }
+
+ /**
+ * Devuelve las categorías disponibles
+ *
+ * @return array
+ */
+ protected function getCategories()
+ {
+ return $this->prepareItems(Category::getItem()->getAll());
+ }
+
+ /**
+ * Preparar los elementos para devolverlos
+ *
+ * @param array $items
+ * @return array
+ */
+ protected function prepareItems(array $items)
+ {
+ $outItems = [];
+
+ /** @var DataModelInterface $item */
+ foreach ($items as $item) {
+ $obj = new \stdClass();
+ $obj->id = $item->getId();
+ $obj->name = $item->getName();
+
+ $outItems[] = $obj;
+ }
+
+ return $outItems;
+ }
+
+ /**
+ * Devuelve los clientes disponibles
+ *
+ * @return array
+ */
+ protected function getCustomers()
+ {
+ return $this->prepareItems(Customer::getItem()->getAll());
+ }
+
+ /**
+ * Devolver los clientes visibles por el usuario
+ *
+ * @return array
+ */
+ protected function getCustomersForUser()
+ {
+ return Customer::getItem()->getItemsForSelectByUser();
+ }
+
+ /**
+ * Devolver las cuentas visubles por el usuario
+ *
+ * @return array
+ */
+ protected function getAccountsForUser()
+ {
+ $outItems = [];
+
+ foreach (AccountUtil::getAccountsForUser($this->itemId) as $account) {
+ $obj = new \stdClass();
+ $obj->id = $account->account_id;
+ $obj->name = $account->customer_name . ' - ' . $account->account_name;
+
+ $outItems[] = $obj;
+ }
+
+ return $outItems;
+ }
+
+ /**
+ * Comprobaciones antes de realizar una acción
+ */
+ protected function preActionChecks()
+ {
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Controller/LoginController.class.php b/inc/SP/Controller/LoginController.class.php
new file mode 100644
index 00000000..f7442ad5
--- /dev/null
+++ b/inc/SP/Controller/LoginController.class.php
@@ -0,0 +1,434 @@
+.
+ */
+
+namespace SP\Controller;
+
+use SP\Auth\Auth;
+use SP\Auth\AuthResult;
+use SP\Auth\AuthUtil;
+use SP\Auth\Browser\BrowserAuthData;
+use SP\Auth\Database\DatabaseAuthData;
+use SP\Auth\Ldap\LdapAuthData;
+use SP\Core\CryptMasterPass;
+use SP\Core\DiFactory;
+use SP\Core\Exceptions\AuthException;
+use SP\Core\Exceptions\SPException;
+use SP\Core\Init;
+use SP\Core\Language;
+use SP\Core\Messages\LogMessage;
+use SP\Core\Session;
+use SP\Core\SessionUtil;
+use SP\DataModel\UserData;
+use SP\DataModel\UserPassRecoverData;
+use SP\Http\JsonResponse;
+use SP\Http\Request;
+use SP\Log\Log;
+use SP\Mgmt\Groups\Group;
+use SP\Mgmt\Profiles\Profile;
+use SP\Mgmt\Users\User;
+use SP\Mgmt\Users\UserLdap;
+use SP\Mgmt\Users\UserPass;
+use SP\Mgmt\Users\UserPassRecover;
+use SP\Mgmt\Users\UserPreferences;
+use SP\Mgmt\Users\UserUtil;
+use SP\Util\Checks;
+use SP\Util\Json;
+use SP\Util\Util;
+
+/**
+ * Class LoginController
+ *
+ * @package SP\Controller
+ */
+class LoginController
+{
+ const STATUS_INVALID_LOGIN = 1;
+ const STATUS_INVALID_MASTER_PASS = 2;
+ const STATUS_USER_DISABLED = 3;
+ const STATUS_INTERNAL_ERROR = 4;
+ const STATUS_NEED_OLD_PASS = 5;
+
+ /**
+ * @var JsonResponse
+ */
+ protected $jsonResponse;
+ /**
+ * @var UserData
+ */
+ protected $UserData;
+ /**
+ * @var LogMessage
+ */
+ protected $LogMessage;
+
+ /**
+ * LoginController constructor.
+ */
+ public function __construct()
+ {
+ $this->jsonResponse = new JsonResponse();
+ $this->UserData = new UserData();
+ $this->LogMessage = new LogMessage();
+ $this->LogMessage->setAction(__('Inicio sesión', false));
+ }
+
+ /**
+ * Ejecutar las acciones de login
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \InvalidArgumentException
+ */
+ public function doLogin()
+ {
+ $userLogin = Request::analyze('user');
+ $userPass = Request::analyzeEncrypted('pass');
+
+ if (!$userLogin || !$userPass) {
+ $this->jsonResponse->setDescription(__('Usuario/Clave no introducidos', false));
+ Json::returnJson($this->jsonResponse);
+ }
+
+ $this->UserData->setUserLogin($userLogin);
+ $this->UserData->setUserPass($userPass);
+
+ $Log = new Log($this->LogMessage);
+
+ try {
+ $Auth = new Auth($this->UserData);
+ $result = $Auth->doAuth();
+
+ if ($result !== false) {
+ // Ejecutar la acción asociada al tipo de autentificación
+
+ /** @var AuthResult $AuthResult */
+ foreach ($result as $AuthResult) {
+ if ($this->{$AuthResult->getAuth()}($AuthResult->getData()) === true) {
+ break;
+ }
+ }
+ } else {
+ throw new AuthException(SPException::SP_INFO, __('Login incorrecto', false), '', self::STATUS_INVALID_LOGIN);
+ }
+
+ $this->getUserData($userPass);
+ $this->checkUserDisabled();
+ $this->checkPasswordChange();
+ $this->setUserSession();
+ $this->loadUserPreferences();
+ } catch (SPException $e) {
+ $Log->setLogLevel(Log::ERROR);
+ $Log->writeLog();
+
+ $this->jsonResponse->setDescription($e->getMessage());
+ $this->jsonResponse->setStatus($e->getCode());
+
+ Json::returnJson($this->jsonResponse);
+ }
+
+ $forward = Request::getRequestHeaders('X-Forwarded-For');
+
+ if ($forward) {
+ $this->LogMessage->addDetails('X-Forwarded-For', Checks::demoIsEnabled() ? '***' : $forward);
+ }
+
+ $Log->writeLog();
+
+ $data = ['url' => 'index.php' . Request::importUrlParamsToGet()];
+ $this->jsonResponse->setStatus(0);
+ $this->jsonResponse->setData($data);
+ Json::returnJson($this->jsonResponse);
+ }
+
+ /**
+ * Obtener los datos del usuario
+ *
+ * @param $userPass
+ * @throws SPException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \SP\Core\Exceptions\AuthException
+ * @throws \InvalidArgumentException
+ */
+ protected function getUserData($userPass)
+ {
+ try {
+ $this->UserData = User::getItem($this->UserData)->getByLogin($this->UserData->getUserLogin());
+ $this->UserData->setUserPass($userPass);
+ $this->UserData->setUserPreferences(UserPreferences::getItem()->getById($this->UserData->getUserId()));
+ } catch (SPException $e) {
+ $this->LogMessage->addDescription(__('Error al obtener los datos del usuario de la BBDD', false));
+
+ throw new AuthException(SPException::SP_ERROR, __('Error interno', false), '', self::STATUS_INTERNAL_ERROR);
+ }
+ }
+
+ /**
+ * omprobar si el usuario está deshabilitado
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ protected function checkUserDisabled()
+ {
+ // Comprobar si el usuario está deshabilitado
+ if ($this->UserData->isUserIsDisabled()) {
+ $this->LogMessage->addDescription(__('Usuario deshabilitado', false));
+ $this->LogMessage->addDetails(__('Usuario', false), $this->UserData->getUserLogin());
+
+ throw new AuthException(SPException::SP_INFO, __('Usuario deshabilitado', false), '', self::STATUS_USER_DISABLED);
+ }
+
+ return false;
+ }
+
+ /**
+ * Comprobar si se ha forzado un cambio de clave
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ */
+ protected function checkPasswordChange()
+ {
+ // Comprobar si se ha forzado un cambio de clave
+ if ($this->UserData->isUserIsChangePass()) {
+ $hash = Util::generateRandomBytes();
+
+ $UserPassRecoverData = new UserPassRecoverData();
+ $UserPassRecoverData->setUserpassrUserId($this->UserData->getUserId());
+ $UserPassRecoverData->setUserpassrHash($hash);
+
+ UserPassRecover::getItem($UserPassRecoverData)->add();
+
+ $data = ['url' => Init::$WEBURI . '/index.php?a=passreset&h=' . $hash . '&t=' . time() . '&f=1'];
+ $this->jsonResponse->setData($data);
+ Json::returnJson($this->jsonResponse);
+ }
+
+ return false;
+ }
+
+ /**
+ * Cargar la sesión del usuario
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \SP\Core\Exceptions\AuthException
+ * @throws \InvalidArgumentException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ * @throws \SP\Core\Exceptions\QueryException
+ */
+ protected function setUserSession()
+ {
+ $UserPass = $this->loadMasterPass();
+
+ // Obtenemos la clave maestra del usuario
+ if ($UserPass->getClearUserMPass() !== '') {
+ // Actualizar el último login del usuario
+ UserUtil::setUserLastLogin($this->UserData->getUserId());
+
+ // Cargar las variables de sesión del usuario
+ SessionUtil::loadUserSession($this->UserData);
+
+ $this->LogMessage->addDetails(__('Usuario', false), $this->UserData->getUserLogin());
+ $this->LogMessage->addDetails(__('Perfil', false), Profile::getItem()->getById($this->UserData->getUserProfileId())->getUserprofileName());
+ $this->LogMessage->addDetails(__('Grupo', false), Group::getItem()->getById($this->UserData->getUserGroupId())->getUsergroupName());
+ } else {
+ $this->LogMessage->addDescription(__('Error al obtener la clave maestra del usuario', false));
+
+ throw new AuthException(SPException::SP_ERROR, __('Error interno', false), '', self::STATUS_INTERNAL_ERROR);
+ }
+ }
+
+ /**
+ * Cargar la clave maestra o solicitarla
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \SP\Core\Exceptions\AuthException
+ */
+ protected function loadMasterPass()
+ {
+ $masterPass = Request::analyzeEncrypted('mpass');
+ $oldPass = Request::analyzeEncrypted('oldpass');
+
+ $UserPass = UserPass::getItem($this->UserData);
+
+ if ($masterPass) {
+ if (CryptMasterPass::checkTempMasterPass($masterPass)) {
+ $this->LogMessage->addDescription(__('Usando clave temporal', false));
+
+ $masterPass = CryptMasterPass::getTempMasterPass($masterPass);
+ }
+
+ if (!$UserPass->updateUserMPass($masterPass)) {
+ $this->LogMessage->addDescription(__('Clave maestra incorrecta', false));
+
+ throw new AuthException(SPException::SP_INFO, __('Clave maestra incorrecta', false), '', self::STATUS_INVALID_MASTER_PASS);
+ } else {
+ SessionUtil::saveSessionMPass($UserPass->getClearUserMPass());
+
+ $this->LogMessage->addDescription(__('Clave maestra actualizada', false));
+ }
+ } else if ($oldPass) {
+ if (!$UserPass->updateMasterPass($oldPass)) {
+ $this->LogMessage->addDescription(__('Clave maestra incorrecta', false));
+
+ throw new AuthException(SPException::SP_INFO, __('Clave maestra incorrecta', false), '', self::STATUS_INVALID_MASTER_PASS);
+ } else {
+ SessionUtil::saveSessionMPass($UserPass->getClearUserMPass());
+
+ $this->LogMessage->addDescription(__('Clave maestra actualizada', false));
+ }
+ } else {
+ $loadMPass = $UserPass->loadUserMPass();
+
+ // Comprobar si es necesario actualizar la clave maestra
+ if ($loadMPass === null) {
+ throw new AuthException(SPException::SP_INFO, __('Es necesaria su clave anterior', false), '', self::STATUS_NEED_OLD_PASS);
+ // La clave no está establecida o se ha sido cambiada por el administrador
+ } else if ($loadMPass === false) {
+ throw new AuthException(SPException::SP_INFO, __('La clave maestra no ha sido guardada o es incorrecta', false), '', self::STATUS_INVALID_MASTER_PASS);
+ }
+ }
+
+ return $UserPass;
+ }
+
+ /**
+ * Cargar las preferencias del usuario y comprobar si usa 2FA
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ */
+ protected function loadUserPreferences()
+ {
+ Language::setLanguage(true);
+ DiFactory::getTheme()->initTheme(true);
+ Session::setUserPreferences($this->UserData->getUserPreferences());
+ Session::setSessionType(Session::SESSION_INTERACTIVE);
+ Session::setAuthCompleted(true);
+
+ DiFactory::getEventDispatcher()->notifyEvent('login.preferences', $this);
+ }
+
+ /**
+ * Autentificación LDAP
+ *
+ * @param LdapAuthData $LdapAuthData
+ * @return bool
+ * @throws \phpmailer\phpmailerException
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws AuthException
+ */
+ protected function authLdap(LdapAuthData $LdapAuthData)
+ {
+ if ($LdapAuthData->getStatusCode() > 0) {
+ $this->LogMessage->addDetails(__('Tipo', false), __FUNCTION__);
+ $this->LogMessage->addDetails(__('Usuario', false), $this->UserData->getUserLogin());
+
+ if ($LdapAuthData->getStatusCode() === 49) {
+ $this->LogMessage->addDescription(__('Login incorrecto', false));
+
+ throw new AuthException(SPException::SP_INFO, $this->LogMessage->getDescription(), '', self::STATUS_INVALID_LOGIN);
+ } elseif ($LdapAuthData->getStatusCode() === 701) {
+ $this->LogMessage->addDescription(__('Cuenta expirada', false));
+
+ throw new AuthException(SPException::SP_INFO, $this->LogMessage->getDescription(), '', self::STATUS_USER_DISABLED);
+ } else if ($LdapAuthData->getStatusCode() === 702) {
+ $this->LogMessage->addDescription(__('El usuario no tiene grupos asociados', false));
+
+ throw new AuthException(SPException::SP_INFO, $this->LogMessage->getDescription(), '', self::STATUS_USER_DISABLED);
+ } else {
+ $this->LogMessage->addDescription(__('Error interno', false));
+
+ throw new AuthException(SPException::SP_INFO, $this->LogMessage->getDescription(), '', self::STATUS_INTERNAL_ERROR);
+ }
+ }
+
+ $this->UserData->setUserName($LdapAuthData->getName());
+ $this->UserData->setUserEmail($LdapAuthData->getEmail());
+
+ $this->LogMessage->addDetails(__('Tipo', false), __FUNCTION__);
+ $this->LogMessage->addDetails(__('Servidor LDAP', false), $LdapAuthData->getServer());
+
+ try {
+ // Verificamos si el usuario existe en la BBDD
+ if (UserLdap::checkLDAPUserInDB($this->UserData->getUserLogin())) {
+ // Actualizamos el usuario de LDAP en MySQL
+ UserLdap::getItem($this->UserData)->update();
+ } else {
+ // Creamos el usuario de LDAP en MySQL
+ UserLdap::getItem($this->UserData)->add();
+ }
+ } catch (SPException $e) {
+ $this->LogMessage->addDescription($e->getMessage());
+
+ throw new AuthException(SPException::SP_ERROR, __('Error interno', false), '', self::STATUS_INTERNAL_ERROR);
+ }
+
+ return true;
+ }
+
+ /**
+ * Autentificación en BD
+ *
+ * @param DatabaseAuthData $AuthData
+ * @return bool
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws AuthException
+ */
+ protected function authDatabase(DatabaseAuthData $AuthData)
+ {
+ // Autentificamos con la BBDD
+ if ($AuthData->getAuthenticated() === 0) {
+ $this->LogMessage->addDescription(__('Login incorrecto', false));
+ $this->LogMessage->addDetails(__('Usuario', false), $this->UserData->getUserLogin());
+
+ throw new AuthException(SPException::SP_INFO, $this->LogMessage->getDescription(), '', self::STATUS_INVALID_LOGIN);
+ } elseif ($AuthData->getAuthenticated() === 1) {
+ $this->LogMessage->addDetails(__('Tipo', false), __FUNCTION__);
+ }
+
+ return true;
+ }
+
+ /**
+ * Comprobar si el cliente ha enviado las variables de autentificación
+ *
+ * @param BrowserAuthData $AuthData
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws AuthException
+ */
+ protected function authBrowser(BrowserAuthData $AuthData)
+ {
+ // Comprobar si concide el login con la autentificación del servidor web
+ if ($AuthData->getAuthenticated() === 0) {
+ $this->LogMessage->addDescription(__('Login incorrecto', false));
+ $this->LogMessage->addDetails(__('Tipo', false), __FUNCTION__);
+ $this->LogMessage->addDetails(__('Usuario', false), $this->UserData->getUserLogin());
+ $this->LogMessage->addDetails(__('Autentificación', false), sprintf('%s (%s)', AuthUtil::getServerAuthType(), $AuthData->getName()));
+
+ throw new AuthException(SPException::SP_INFO, $this->LogMessage->getDescription(), '', self::STATUS_INVALID_LOGIN);
+ } elseif ($AuthData->getAuthenticated() === 1) {
+ $this->LogMessage->addDetails(__('Tipo', false), __FUNCTION__);
+ }
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Controller/MainController.class.php b/inc/SP/Controller/MainController.class.php
new file mode 100644
index 00000000..fb5add2f
--- /dev/null
+++ b/inc/SP/Controller/MainController.class.php
@@ -0,0 +1,603 @@
+.
+ */
+
+namespace SP\Controller;
+
+defined('APP_ROOT') || die();
+
+use SP\Config\Config;
+use SP\Core\Acl;
+use SP\Core\ActionsInterface;
+use SP\Core\DiFactory;
+use SP\Core\Exceptions\SPException;
+use SP\Core\Init;
+use SP\Core\Language;
+use SP\Core\Messages\NoticeMessage;
+use SP\Core\Plugin\PluginUtil;
+use SP\Core\Session;
+use SP\Core\SessionUtil;
+use SP\Core\Template;
+use SP\DataModel\NoticeData;
+use SP\Html\DataGrid\DataGridAction;
+use SP\Html\Html;
+use SP\Http\Request;
+use SP\Mgmt\Notices\Notice;
+use SP\Mgmt\PublicLinks\PublicLink;
+use SP\Util\Checks;
+use SP\Util\Util;
+
+/**
+ * Clase encargada de mostrar el interface principal de la aplicación
+ * e interfaces que requieren de un documento html completo
+ *
+ * @package Controller
+ */
+class MainController extends ControllerBase implements ActionsInterface
+{
+ /**
+ * Constructor
+ *
+ * @param $template Template con instancia de plantilla
+ * @param string $page El nombre de página para la clase del body
+ * @param bool $initialize Si es una inicialización completa
+ */
+ public function __construct(Template $template = null, $page = '', $initialize = true)
+ {
+ parent::__construct($template);
+
+ $this->setPage($page);
+
+ if ($initialize === true) {
+ $this->initialize();
+ }
+ }
+
+ /**
+ * Establecer la variable de página de la vista
+ *
+ * @param $page
+ */
+ protected function setPage($page)
+ {
+ $this->view->assign('page', $page);
+ }
+
+ /**
+ * Inicializar las variables para la vista principal de la aplicación
+ */
+ protected function initialize()
+ {
+ $this->view->assign('startTime', microtime());
+
+ $this->view->addTemplate('header');
+ $this->view->addTemplate('body-start');
+
+ $this->view->assign('useLayout', true);
+ $this->view->assign('isInstalled', Config::getConfig()->isInstalled());
+ $this->view->assign('sk', SessionUtil::getSessionKey(true));
+ $this->view->assign('appInfo', Util::getAppInfo());
+ $this->view->assign('appVersion', Util::getVersionString());
+ $this->view->assign('isDemoMode', Checks::demoIsEnabled());
+ $this->view->assign('icons', DiFactory::getTheme()->getIcons());
+ $this->view->assign('logoIcon', Init::$WEBURI . '/imgs/logo_icon.png');
+ $this->view->assign('logoNoText', Init::$WEBURI . '/imgs/logo_icon.svg');
+ $this->view->assign('logo', Init::$WEBURI . '/imgs/logo_full_bg.png');
+ $this->view->assign('logonobg', Init::$WEBURI . '/imgs/logo_full_nobg.png');
+ $this->view->assign('httpsEnabled', Checks::httpsEnabled());
+ $this->view->assign('lang', Init::isLoggedIn() ? Language::$userLang : Language::$globalLang);
+
+ $this->view->assign('loadApp', Session::getAuthCompleted());
+
+ $this->setLoggedIn(Init::isLoggedIn());
+
+ try {
+ // Cargar la clave pública en la sesión
+ SessionUtil::loadPublicKey();
+ } catch (SPException $e) {
+ debugLog($e->getMessage(), true);
+ } catch (\phpseclib\Exception\FileNotFoundException $e) {
+ debugLog($e->getMessage(), true);
+ }
+
+ $this->getResourcesLinks();
+ $this->setResponseHeaders();
+ }
+
+ /**
+ * Obtener los datos para la cabcera de la página
+ */
+ public function getResourcesLinks()
+ {
+ $jsVersionHash = md5(implode(Util::getVersion(true)));
+ $this->view->append('jsLinks', Init::$WEBROOT . '/js/js.php?v=' . $jsVersionHash);
+ $this->view->append('jsLinks', Init::$WEBROOT . '/js/js.php?g=1&v=' . $jsVersionHash);
+
+ $themeInfo = DiFactory::getTheme()->getThemeInfo();
+
+ if (isset($themeInfo['js'])) {
+ $themeJsBase = urlencode(DiFactory::getTheme()->getThemePath() . DIRECTORY_SEPARATOR . 'js');
+ $themeJsFiles = urlencode(implode(',', $themeInfo['js']));
+
+ $this->view->append('jsLinks', Init::$WEBROOT . '/js/js.php?f=' . $themeJsFiles . '&b=' . $themeJsBase . '&v=' . $jsVersionHash);
+ }
+
+ $resultsAsCards = Init::isLoggedIn() && Session::getUserPreferences()->isResultsAsCards();
+
+ $cssVersionHash = md5(implode(Util::getVersion(true)) . Checks::resultsCardsIsEnabled() . $resultsAsCards);
+ $this->view->append('cssLinks', Init::$WEBROOT . '/css/css.php?v=' . $cssVersionHash);
+
+ if (isset($themeInfo['css'])) {
+ if (Checks::resultsCardsIsEnabled() || $resultsAsCards) {
+ $themeInfo['css'][] = 'search-card.min.css';
+ } else {
+ $themeInfo['css'][] = 'search-grid.min.css';
+ }
+
+ if (Checks::dokuWikiIsEnabled()) {
+ $themeInfo['css'][] = 'styles-wiki.min.css';
+ }
+
+ $themeCssBase = urlencode(DiFactory::getTheme()->getThemePath() . DIRECTORY_SEPARATOR . 'css');
+ $themeCssFiles = urlencode(implode(',', $themeInfo['css']));
+
+ $this->view->append('cssLinks', Init::$WEBROOT . '/css/css.php?f=' . $themeCssFiles . '&b=' . $themeCssBase . '&v=' . $jsVersionHash);
+ }
+
+ // Cargar los recursos de los plugins
+ foreach (PluginUtil::getLoadedPlugins() as $Plugin) {
+ $base = str_replace(Init::$SERVERROOT, '', $Plugin->getBase());
+ $jsResources = $Plugin->getJsResources();
+ $cssResources = $Plugin->getCssResources();
+
+ if (count($jsResources) > 0) {
+ $this->view->append('jsLinks', Init::$WEBROOT . '/js/js.php?f=' . urlencode(implode(',', $jsResources)) . '&b=' . urlencode($base . DIRECTORY_SEPARATOR . 'js') . '&v=' . $jsVersionHash);
+ }
+
+ if (count($cssResources) > 0) {
+ $this->view->append('cssLinks', Init::$WEBROOT . '/css/css.php?f=' . urlencode(implode(',', $cssResources)) . '&b=' . urlencode($base . DIRECTORY_SEPARATOR . 'css') . '&v=' . $jsVersionHash);
+ }
+ }
+ }
+
+ /**
+ * Establecer las cabeceras HTTP
+ */
+ private function setResponseHeaders()
+ {
+ // UTF8 Headers
+ header('Content-Type: text/html; charset=UTF-8');
+
+ // Cache Control
+ header('Cache-Control: public, no-cache, max-age=0, must-revalidate');
+ header('Pragma: public; max-age=0');
+ }
+
+ /**
+ * Obtener los datos para el interface principal de sysPass
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function getMain()
+ {
+ $this->setPage('main');
+
+ $this->getSessionBar();
+ $this->getMenu();
+
+ $this->view->addTemplate('body-content');
+ $this->view->addTemplate('body-footer');
+ $this->view->addTemplate('body-end');
+ }
+
+ /**
+ * Obtener los datos para la mostrar la barra de sesión
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ private function getSessionBar()
+ {
+ $this->view->addTemplate('sessionbar');
+
+ $userType = null;
+
+ if ($this->UserData->isUserIsAdminApp()) {
+ $userType = $this->icons->getIconAppAdmin();
+ } elseif ($this->UserData->isUserIsAdminAcc()) {
+ $userType = $this->icons->getIconAccAdmin();
+ }
+
+ $this->view->assign('userType', $userType);
+ $this->view->assign('userId', $this->UserData->getUserId());
+ $this->view->assign('userLogin', strtoupper($this->UserData->getUserLogin()));
+ $this->view->assign('userName', $this->UserData->getUserName() ?: strtoupper($this->view->userLogin));
+ $this->view->assign('userGroup', $this->UserData->getUsergroupName());
+ $this->view->assign('showPassIcon', !(Config::getConfig()->isLdapEnabled() && $this->UserData->isUserIsLdap()));
+ $this->view->assign('userNotices', count(Notice::getItem()->getAllActiveForUser()));
+ }
+
+ /**
+ * Obtener los datos para mostrar el menú de acciones
+ */
+ private function getMenu()
+ {
+ $this->view->addTemplate('body-header-menu');
+
+ $ActionSearch = new DataGridAction();
+ $ActionSearch->setId(self::ACTION_ACC_SEARCH);
+ $ActionSearch->setTitle(__('Buscar'));
+ $ActionSearch->setIcon($this->icons->getIconSearch());
+ $ActionSearch->setData(['historyReset' => 1, 'view' => 'search']);
+
+ $this->view->append('actions', $ActionSearch);
+
+ if (Acl::checkUserAccess(self::ACTION_ACC_NEW)) {
+ $ActionNew = new DataGridAction();
+ $ActionNew->setId(self::ACTION_ACC_NEW);
+ $ActionNew->setTitle(__('Nueva Cuenta'));
+ $ActionNew->setIcon($this->icons->getIconAdd());
+ $ActionNew->setData(['historyReset' => 0, 'view' => 'account']);
+
+ $this->view->append('actions', $ActionNew);
+ }
+
+ if (Acl::checkUserAccess(self::ACTION_USR)) {
+ $ActionUsr = new DataGridAction();
+ $ActionUsr->setId(self::ACTION_USR);
+ $ActionUsr->setTitle(__('Usuarios y Accesos'));
+ $ActionUsr->setIcon($this->icons->getIconAccount());
+ $ActionUsr->setData(['historyReset' => 0, 'view' => 'datatabs']);
+
+ $this->view->append('actions', $ActionUsr);
+ }
+
+ if (Acl::checkUserAccess(self::ACTION_MGM)) {
+ $ActionMgm = new DataGridAction();
+ $ActionMgm->setId(self::ACTION_MGM);
+ $ActionMgm->setTitle(__('Elementos y Personalización'));
+ $ActionMgm->setIcon($this->icons->getIconGroup());
+ $ActionMgm->setData(['historyReset' => 0, 'view' => 'datatabs']);
+
+ $this->view->append('actions', $ActionMgm);
+ }
+
+ if (Acl::checkUserAccess(self::ACTION_CFG)) {
+ $ActionConfig = new DataGridAction();
+ $ActionConfig->setId(self::ACTION_CFG);
+ $ActionConfig->setTitle(__('Configuración'));
+ $ActionConfig->setIcon($this->icons->getIconSettings());
+ $ActionConfig->setData(['historyReset' => 1, 'view' => 'config']);
+
+ $this->view->append('actions', $ActionConfig);
+ }
+
+ if (Acl::checkUserAccess(self::ACTION_EVL) && Checks::logIsEnabled()) {
+ $ActionEventlog = new DataGridAction();
+ $ActionEventlog->setId(self::ACTION_EVL);
+ $ActionEventlog->setTitle(__('Registro de Eventos'));
+ $ActionEventlog->setIcon($this->icons->getIconHeadline());
+ $ActionEventlog->setData(['historyReset' => 1, 'view' => 'eventlog']);
+
+ $this->view->append('actions', $ActionEventlog);
+ }
+
+ $ActionNotice = new DataGridAction();
+ $ActionNotice->setId(self::ACTION_NOT);
+ $ActionNotice->setTitle(__('Notificaciones'));
+ $ActionNotice->setIcon($this->icons->getIconNotices());
+ $ActionNotice->setData(['historyReset' => 1, 'view' => 'notices']);
+
+ $this->view->append('actions', $ActionNotice);
+ }
+
+ /**
+ * Obtener los datos para el interface de login
+ */
+ public function getLogin()
+ {
+ $this->setPage('login');
+
+ $this->view->addTemplate('login');
+ $this->view->addTemplate('body-footer');
+ $this->view->addTemplate('body-end');
+
+ $this->view->assign('useLayout', false);
+ $this->view->assign('mailEnabled', Checks::mailIsEnabled());
+ $this->view->assign('isLogout', Request::analyze('logout', false, true));
+ $this->view->assign('updated', Init::$UPDATED === true);
+
+ $getParams = [];
+
+ // Comprobar y parsear los parámetros GET para pasarlos como POST en los inputs
+ if (count($_GET) > 0) {
+ foreach ($_GET as $param => $value) {
+ $getParams['g_' . Html::sanitize($param)] = Html::sanitize($value);
+ }
+ }
+
+ $this->view->assign('getParams', $getParams);
+ $this->view();
+ exit();
+ }
+
+ /**
+ * Obtener los datos para el interface del instalador
+ */
+ public function getInstaller()
+ {
+ $this->setPage('install');
+
+ $this->view->addTemplate('body-header');
+
+ $errors = [];
+
+ if (!Checks::checkPhpVersion()) {
+ $errors[] = [
+ 'type' => SPException::SP_CRITICAL,
+ 'description' => __('Versión de PHP requerida >= ') . ' 5.6.0 <= 7.0',
+ 'hint' => __('Actualice la versión de PHP para que la aplicación funcione correctamente')
+ ];
+ }
+
+ $modules = Checks::checkModules();
+
+ if (count($modules) > 0) {
+ foreach ($modules as $module) {
+ $error[] = [
+ '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.')
+ ];
+ }
+ }
+
+ if (@file_exists(__FILE__ . "\0Nullbyte")) {
+ $errors[] = [
+ 'type' => SPException::SP_WARNING,
+ 'description' => __('La version de PHP es vulnerable al ataque NULL Byte (CVE-2006-7243)'),
+ 'hint' => __('Actualice la versión de PHP para usar sysPass de forma segura')];
+ }
+
+ if (!Checks::secureRNGIsAvailable()) {
+ $errors[] = [
+ 'type' => SPException::SP_WARNING,
+ 'description' => __('No se encuentra el generador de números aleatorios.'),
+ 'hint' => __('Sin esta función un atacante puede utilizar su cuenta al resetear la clave')];
+ }
+
+ $this->view->assign('errors', $errors);
+
+ $this->view->assign('langsAvailable', Language::getAvailableLanguages());
+ $this->view->assign('langBrowser', Language::$globalLang);
+
+ $this->view->addTemplate('install');
+ $this->view->addTemplate('body-footer');
+ $this->view->addTemplate('body-end');
+ }
+
+ /**
+ * Obtener los datos para el interface de error
+ */
+ public function getError()
+ {
+ $this->setPage('error');
+
+ if (!Checks::isAjax()) {
+ $this->view->addTemplate('body-header');
+ $this->view->addTemplate('error');
+ $this->view->addTemplate('body-footer');
+ } else {
+ $this->view->addTemplate('error');
+ }
+
+ $this->view();
+ exit();
+ }
+
+ /**
+ * Obtener los datos para el interface de actualización de BD
+ */
+ public function getUpgrade()
+ {
+ $this->setPage('upgrade');
+
+ $this->view->addTemplate('body-header');
+ $this->view->addTemplate('upgrade');
+ $this->view->addTemplate('body-footer');
+ $this->view->addTemplate('body-end');
+
+ $this->view->assign('action', Request::analyze('a'));
+ $this->view->assign('time', Request::analyze('t'));
+ $this->view->assign('upgrade', $this->view->action === 'upgrade');
+
+ $this->view();
+ exit();
+ }
+
+ /**
+ * Obtener los datos para el interface de comprobación de actualizaciones
+ */
+ public function getCheckUpdates()
+ {
+ $this->view->addTemplate('update');
+
+ $this->view->assign('hasUpdates', false);
+ $this->view->assign('updateStatus', null);
+
+ if (Config::getConfig()->isCheckUpdates()) {
+ $updates = Util::checkUpdates();
+
+ if (is_array($updates)) {
+ $description = nl2br($updates['description']);
+ $version = $updates['version'];
+
+ $this->view->assign('hasUpdates', true);
+ $this->view->assign('title', $updates['title']);
+ $this->view->assign('url', $updates['url']);
+ $this->view->assign('description', sprintf('%s - %s
%s', __('Descargar nueva versión'), $version, $description));
+ } else {
+ $this->view->assign('updateStatus', $updates);
+ }
+ }
+
+ if (Config::getConfig()->isChecknotices()) {
+ $notices = Util::checkNotices();
+ $numNotices = count($notices);
+ $noticesTitle = '';
+
+ if ($notices !== false && $numNotices > 0) {
+ $noticesTitle = __('Avisos de sysPass') . '
';
+
+ foreach ($notices as $notice) {
+ $noticesTitle .= '
' . $notice[0];
+ }
+ }
+
+ $this->view->assign('numNotices', $numNotices);
+ $this->view->assign('noticesTitle', $noticesTitle);
+ }
+ }
+
+ /**
+ * Realizar las acciones del controlador
+ *
+ * @param mixed $type Tipo de acción
+ * @throws \phpmailer\phpmailerException
+ */
+ public function doAction($type = null)
+ {
+ $this->setPage($type);
+
+ try {
+ switch ($type) {
+ case 'prelogin.passreset':
+ $this->getPassReset();
+ break;
+ case 'prelogin.link':
+ $this->getPublicLink();
+ break;
+ }
+
+ DiFactory::getEventDispatcher()->notifyEvent('main.' . $type, $this);
+ } catch (SPException $e) {
+ $this->showError(self::ERR_EXCEPTION);
+ }
+ }
+
+ /**
+ * Obtener los datos para el interface de restablecimiento de clave de usuario
+ *
+ * @throws \SP\Core\Exceptions\FileNotFoundException
+ */
+ public function getPassReset()
+ {
+ $this->setPage('passreset');
+
+ $this->view->addTemplate('body-header');
+
+ if (Checks::mailIsEnabled() || Request::analyze('f', 0) === 1) {
+ $this->view->addTemplate('passreset');
+
+ $this->view->assign('login', Request::analyze('login'));
+ $this->view->assign('email', Request::analyze('email'));
+
+ $this->view->assign('action', Request::analyze('a'));
+ $this->view->assign('hash', Request::analyze('h'));
+ $this->view->assign('time', Request::analyze('t'));
+
+ $this->view->assign('passReset', $this->view->action === 'passreset' && !empty($this->view->hash) && !empty($this->view->time));
+ } else {
+ $this->showError(self::ERR_UNAVAILABLE, false);
+ }
+
+ $this->view->addTemplate('body-footer');
+ $this->view->addTemplate('body-end');
+
+ $this->view();
+ exit();
+ }
+
+ /**
+ * Obtener la vista para mostrar un enlace publicado
+ *
+ * @return bool
+ * @throws \phpmailer\phpmailerException
+ * @throws \SP\Core\Exceptions\QueryException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ * @throws \SP\Core\Exceptions\FileNotFoundException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function getPublicLink()
+ {
+ $this->setPage('publiclink');
+
+ $this->view->addTemplate('body-header', 'main');
+
+ $hash = Request::analyze('h');
+
+ if ($hash) {
+ $PublicLink = PublicLink::getItem()->getByHash($hash);
+
+ if (!$PublicLink
+ || time() > $PublicLink->getDateExpire()
+ || $PublicLink->getCountViews() >= $PublicLink->getMaxCountViews()
+ ) {
+ $this->showError(self::ERR_PAGE_NO_PERMISSION, false);
+ } else {
+ PublicLink::getItem($PublicLink)->addLinkView();
+
+ if ($PublicLink->isNotify()) {
+ $Message = new NoticeMessage();
+ $Message->setTitle(__('Enlace visualizado'));
+ $Message->addDescription(sprintf('%s : %s', __('Cuenta'), $PublicLink->getItemId()));
+ $Message->addDescription(sprintf('%s : %s', __('Origen'), Checks::demoIsEnabled() ? '*.*.*.*' : $_SERVER['REMOTE_ADDR']));
+ $Message->addDescription(sprintf('%s : %s', __('Agente'), $_SERVER['HTTP_USER_AGENT']));
+ $Message->addDescription(sprintf('HTTPS : %s', Checks::httpsEnabled() ? 'ON' : 'OFF'));
+
+
+ $NoticeData = new NoticeData();
+ $NoticeData->setNoticeComponent(__('Cuentas'));
+ $NoticeData->setNoticeDescription($Message);
+ $NoticeData->setNoticeType(__('Información'));
+ $NoticeData->setNoticeUserId($PublicLink->getUserId());
+
+ Notice::getItem($NoticeData)->add();
+ }
+
+ $controller = new AccountController($this->view, $PublicLink->getItemId());
+ $controller->getAccountFromLink($PublicLink);
+ }
+
+ $this->getSessionBar();
+ } else {
+ $this->showError(self::ERR_PAGE_NO_PERMISSION, false);
+ }
+
+ $this->view->addTemplate('body-footer', 'main');
+ $this->view->addTemplate('body-end', 'main');
+
+ $this->view();
+ exit();
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Controller/NoticeShowController.class.php b/inc/SP/Controller/NoticeShowController.class.php
new file mode 100644
index 00000000..e05fd474
--- /dev/null
+++ b/inc/SP/Controller/NoticeShowController.class.php
@@ -0,0 +1,135 @@
+.
+ */
+
+namespace SP\Controller;
+
+defined('APP_ROOT') || die();
+
+use SP\Core\ActionsInterface;
+use SP\Core\Init;
+use SP\Core\SessionUtil;
+use SP\Core\Template;
+use SP\DataModel\NoticeData;
+use SP\Mgmt\Notices\Notice;
+use SP\Mgmt\Users\User;
+use SP\Util\Checks;
+use SP\Util\Json;
+use SP\Util\Util;
+
+/**
+ * Class NoticeShowController
+ *
+ * @package SP\Controller
+ */
+class NoticeShowController extends ControllerBase implements ActionsInterface, ItemControllerInterface
+{
+ use RequestControllerTrait;
+
+ /**
+ * Máximo numero de acciones antes de agrupar
+ */
+ const MAX_NUM_ACTIONS = 3;
+ /**
+ * @var int
+ */
+ private $module = 0;
+
+ /**
+ * Constructor
+ *
+ * @param $template Template con instancia de plantilla
+ */
+ public function __construct(Template $template = null)
+ {
+ parent::__construct($template);
+
+ $this->init();
+
+ $this->view->assign('isDemo', Checks::demoIsEnabled());
+ $this->view->assign('sk', SessionUtil::getSessionKey(true));
+ $this->view->assign('itemId', $this->itemId);
+ $this->view->assign('activeTab', $this->activeTab);
+ $this->view->assign('actionId', $this->actionId);
+ $this->view->assign('isView', false);
+ $this->view->assign('showViewPass', true);
+ }
+
+ /**
+ * Realizar la acción solicitada en la la petición HTTP
+ *
+ * @param mixed $type Tipo de acción
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function doAction($type = null)
+ {
+ try {
+ switch ($this->actionId) {
+ case self::ACTION_NOT_USER_VIEW:
+ $this->view->assign('header', __('Ver Notificación'));
+ $this->view->assign('isView', true);
+ $this->getNotice();
+ break;
+ case self::ACTION_NOT_USER_NEW:
+ $this->view->assign('header', __('Nueva Notificación'));
+ $this->getNotice();
+ break;
+ case self::ACTION_NOT_USER_EDIT:
+ $this->view->assign('header', __('Editar Notificación'));
+ $this->getNotice();
+ break;
+ default:
+ $this->invalidAction();
+ }
+
+ if (count($this->JsonResponse->getData()) === 0) {
+ $this->JsonResponse->setData(['html' => $this->render()]);
+ }
+ } catch (\Exception $e) {
+ $this->JsonResponse->setDescription($e->getMessage());
+ }
+
+ Json::returnJson($this->JsonResponse);
+ }
+
+ /**
+ * Obtener los datos para la ficha de usuario
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ protected function getNotice()
+ {
+ $this->module = self::ACTION_USR_USERS;
+ $this->view->addTemplate('notices');
+
+ $this->view->assign('notice', $this->itemId ? Notice::getItem()->getById($this->itemId) : new NoticeData());
+ $this->view->assign('isDisabled', ($this->view->isDemo || $this->view->actionId === self::ACTION_NOT_USER_VIEW) ? 'disabled' : '');
+ $this->view->assign('isReadonly', $this->view->isDisabled ? 'readonly' : '');
+
+ if ($this->UserData->isUserIsAdminApp()){
+ $this->view->assign('users', User::getItem()->getItemsForSelect());
+ }
+
+ $this->JsonResponse->setStatus(0);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Controller/NoticesController.class.php b/inc/SP/Controller/NoticesController.class.php
new file mode 100644
index 00000000..708fee5a
--- /dev/null
+++ b/inc/SP/Controller/NoticesController.class.php
@@ -0,0 +1,96 @@
+.
+ */
+
+namespace SP\Controller;
+
+use SP\Controller\Grids\Notices;
+use SP\Core\ActionsInterface;
+use SP\Core\Exceptions\SPException;
+use SP\Mgmt\Notices\Notice;
+
+/**
+ * Class NoticesController
+ *
+ * @package SP\Controller
+ */
+class NoticesController extends GridTabControllerBase implements ActionsInterface
+{
+ /**
+ * Realizar las acciones del controlador
+ *
+ * @param mixed $type Tipo de acción
+ */
+ public function doAction($type = null)
+ {
+ try {
+ $this->useTabs();
+ $this->getUserNotices();
+
+ $this->EventDispatcher->notifyEvent('show.itemlist.notices', $this);
+ } catch (SPException $e) {
+ $this->showError(self::ERR_EXCEPTION);
+ }
+ }
+
+ /**
+ * Inicializar las plantillas para las pestañas
+ */
+ public function useTabs()
+ {
+ $this->Grids = new Notices();
+ $this->view->addTemplate('datatabs-grid', 'grid');
+
+ $this->view->assign('tabs', []);
+ $this->view->assign('activeTab', 0);
+ $this->view->assign('maxNumActions', self::MAX_NUM_ACTIONS);
+ }
+
+ /**
+ * Obtener los datos para la pestaña de categorías
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function getUserNotices()
+ {
+ $this->setAction(self::ACTION_NOT_USER);
+
+ if (!$this->checkAccess()) {
+ return;
+ }
+
+ $Grid = $this->getGrids()->getNoticesGrid();
+ $Grid->getData()->setData(Notice::getItem()->getAllForUser());
+ $Grid->updatePager();
+
+ $this->view->append('tabs', $Grid);
+ }
+
+ /**
+ * @return Notices
+ */
+ public function getGrids()
+ {
+ return $this->Grids;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Controller/NoticesSearchController.class.php b/inc/SP/Controller/NoticesSearchController.class.php
new file mode 100644
index 00000000..ffd44a97
--- /dev/null
+++ b/inc/SP/Controller/NoticesSearchController.class.php
@@ -0,0 +1,146 @@
+.
+ */
+
+namespace SP\Controller;
+
+defined('APP_ROOT') || die();
+
+use SP\Config\Config;
+use SP\Controller\Grids\Notices;
+use SP\Core\ActionsInterface;
+use SP\Core\SessionUtil;
+use SP\Core\Template;
+use SP\DataModel\ItemSearchData;
+use SP\Http\Request;
+use SP\Mgmt\Notices\NoticeSearch;
+use SP\Util\Checks;
+use SP\Util\Json;
+
+/**
+ * Class NoticesSearchController para la gestión de búsquedas de items de accesos
+ *
+ * @package SP\Controller
+ */
+class NoticesSearchController extends GridItemsSearchController implements ActionsInterface, ItemControllerInterface
+{
+ use RequestControllerTrait;
+
+ /**
+ * @var ItemSearchData
+ */
+ protected $ItemSearchData;
+
+ /**
+ * Constructor
+ *
+ * @param $template Template con instancia de plantilla
+ */
+ public function __construct(Template $template = null)
+ {
+ parent::__construct($template);
+
+ $this->grids = new Notices();
+ $this->grids->setQueryTimeStart(microtime());
+ $this->ItemSearchData = new ItemSearchData();
+
+ $this->init();
+ $this->setItemSearchData();
+ }
+
+ /**
+ * Establecer las propiedades de búsqueda
+ */
+ protected function setItemSearchData()
+ {
+ $this->ItemSearchData->setSeachString(Request::analyze('search'));
+ $this->ItemSearchData->setLimitStart(Request::analyze('start', 0));
+ $this->ItemSearchData->setLimitCount(Request::analyze('count', Config::getConfig()->getAccountCount()));
+ }
+
+ /**
+ * Realizar la acción solicitada en la la petición HTTP
+ *
+ * @param mixed $type Tipo de acción
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function doAction($type = null)
+ {
+ $this->view->assign('isDemo', Checks::demoIsEnabled());
+ $this->view->assign('sk', SessionUtil::getSessionKey(true));
+ $this->view->assign('index', $this->activeTab);
+
+ try {
+ switch ($this->actionId) {
+ case ActionsInterface::ACTION_NOT_USER_SEARCH:
+ $this->getNoticesUser();
+ break;
+ default:
+ $this->invalidAction();
+ }
+
+ $this->JsonResponse->setCsrf($this->view->sk);
+ $this->JsonResponse->setData(['html' => $this->render()]);
+ } catch (\Exception $e) {
+ $this->JsonResponse->setDescription($e->getMessage());
+ }
+
+ Json::returnJson($this->JsonResponse);
+ }
+
+ /**
+ * Obtener las notificaciones de una búsqueda
+ *
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \InvalidArgumentException
+ */
+ protected function getNoticesUser()
+ {
+ $this->setAction(self::ACTION_NOT_USER_SEARCH);
+
+ if (!$this->checkAccess()) {
+ return;
+ }
+
+ $this->view->addTemplate('datagrid-table', 'grid');
+
+ $Grid = $this->getGrids()->getNoticesGrid();
+ $Grid->getData()->setData(NoticeSearch::getItem()->getMgmtSearchUser($this->ItemSearchData));
+ $Grid->updatePager();
+
+ $this->updatePager($Grid->getPager(), $this->ItemSearchData);
+
+ $this->view->assign('data', $Grid);
+ $this->view->assign('actionId', self::ACTION_NOT_USER);
+
+ $this->JsonResponse->setStatus(0);
+ }
+
+ /**
+ * @return Notices
+ */
+ public function getGrids()
+ {
+ return $this->grids;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Controller/RequestControllerTrait.class.php b/inc/SP/Controller/RequestControllerTrait.class.php
new file mode 100644
index 00000000..17ec1765
--- /dev/null
+++ b/inc/SP/Controller/RequestControllerTrait.class.php
@@ -0,0 +1,133 @@
+.
+ */
+
+namespace SP\Controller;
+
+use SP\Core\Init;
+use SP\Core\Messages\LogMessage;
+use SP\Core\SessionUtil;
+use SP\Http\JsonResponse;
+use SP\Http\Request;
+use SP\Util\Checks;
+use SP\Util\Json;
+use SP\Util\Util;
+
+/**
+ * Class RequestControllerTrait
+ *
+ * @package SP\Controller
+ */
+trait RequestControllerTrait
+{
+ /**
+ * @var int
+ */
+ protected $actionId;
+ /**
+ * @var int|array
+ */
+ protected $itemId;
+ /**
+ * @var int
+ */
+ protected $activeTab;
+ /**
+ * @var JsonResponse
+ */
+ protected $JsonResponse;
+ /**
+ * @var string
+ */
+ protected $sk;
+ /**
+ * @var LogMessage
+ */
+ protected $LogMessage;
+
+ /**
+ * inicializar las propiedades
+ *
+ * @internal param array $checKItems Lista de elementos a analizar
+ */
+ protected function init()
+ {
+ $this->JsonResponse = new JsonResponse();
+
+ $this->checkSession();
+ $this->analyzeRequest();
+ $this->preActionChecks();
+ }
+
+ /**
+ * Analizar la petición HTTP y establecer las propiedades del elemento
+ */
+ protected function analyzeRequest()
+ {
+ $this->sk = Request::analyze('sk');
+ $this->actionId = Request::analyze('actionId', 0);
+ $this->itemId = Request::analyze('itemId', 0);
+ $this->activeTab = Request::analyze('activeTab', 0);
+ }
+
+ /**
+ * Comprobaciones antes de realizar una acción
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ protected function preActionChecks()
+ {
+ if (!$this->sk || !$this->actionId || !SessionUtil::checkSessionKey($this->sk)) {
+ $this->invalidAction();
+ }
+ }
+
+ /**
+ * Acción no disponible
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ protected function invalidAction()
+ {
+ $this->JsonResponse->setDescription(__('Acción Inválida', false));
+ Json::returnJson($this->JsonResponse);
+ }
+
+ /**
+ * Comprobar si la sesión está activa
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ protected function checkSession()
+ {
+ if (!Init::isLoggedIn()) {
+ if (Checks::isJson()) {
+ $this->JsonResponse->setDescription(__('La sesión no se ha iniciado o ha caducado', false));
+ $this->JsonResponse->setStatus(10);
+ Json::returnJson($this->JsonResponse);
+ } else {
+ Util::logout();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Controller/TabControllerBase.class.php b/inc/SP/Controller/TabControllerBase.class.php
new file mode 100644
index 00000000..dcf62e42
--- /dev/null
+++ b/inc/SP/Controller/TabControllerBase.class.php
@@ -0,0 +1,66 @@
+.
+ */
+
+namespace SP\Controller;
+
+
+/**
+ * Class TabControllerBase
+ *
+ * @package SP\Controller
+ */
+abstract class TabControllerBase extends ControllerBase implements TabsInterface
+{
+ /**
+ * Pestañas
+ *
+ * @var array
+ */
+ private $tabs = [];
+
+ /**
+ * Añadir una nueva pestaña
+ *
+ * @param string $title
+ * @return int Índice de la última pestaña añadida
+ */
+ public function addTab($title)
+ {
+ $this->tabs[] = ['title' => $title];
+
+ $this->view->assign('tabs', $this->tabs);
+
+ return count($this->tabs) - 1;
+ }
+
+ /**
+ * Devuelve las pestañas
+ *
+ * @return array
+ */
+ public function getTabs()
+ {
+ return $this->tabs;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Controller/TabsInterface.class.php b/inc/SP/Controller/TabsInterface.class.php
new file mode 100644
index 00000000..8a4d5522
--- /dev/null
+++ b/inc/SP/Controller/TabsInterface.class.php
@@ -0,0 +1,48 @@
+.
+ */
+
+namespace SP\Controller;
+
+/**
+ * Interface TabsInterface
+ *
+ * @package SP\Controller
+ */
+interface TabsInterface
+{
+ /**
+ * Añadir una nueva pestaña
+ *
+ * @param string $title
+ * @return int Índice actual de pestaña
+ */
+ public function addTab($title);
+
+ /**
+ * Devuelve las pestañas
+ *
+ * @return array
+ */
+ public function getTabs();
+}
\ No newline at end of file
diff --git a/inc/SP/Controller/UserPreferencesController.class.php b/inc/SP/Controller/UserPreferencesController.class.php
new file mode 100644
index 00000000..42fb3c21
--- /dev/null
+++ b/inc/SP/Controller/UserPreferencesController.class.php
@@ -0,0 +1,109 @@
+.
+ */
+
+namespace SP\Controller;
+
+defined('APP_ROOT') || die();
+
+use SP\Config\Config;
+use SP\Core\ActionsInterface;
+use SP\Core\DiFactory;
+use SP\Core\Language;
+use SP\Core\SessionUtil;
+use SP\Core\Template;
+use SP\DataModel\UserPreferencesData;
+use SP\Mgmt\Users\UserPreferences;
+
+/**
+ * Class UsersPrefs encargada de mostrar las preferencias de los usuarios
+ *
+ * @package SP\Controller
+ */
+class UserPreferencesController extends TabControllerBase implements ActionsInterface
+{
+ /**
+ * @var UserPreferencesData
+ */
+ private $userPrefs;
+ /**
+ * @var int
+ */
+ private $userId;
+
+ /**
+ * Constructor
+ *
+ * @param $template Template con instancia de plantilla
+ */
+ public function __construct(Template $template = null)
+ {
+ parent::__construct($template);
+
+ $this->view->assign('tabs', []);
+ $this->view->assign('sk', SessionUtil::getSessionKey(true));
+ $this->userId = $this->UserData->getUserId();
+ $this->userPrefs = UserPreferences::getItem()->getById($this->userId);
+ }
+
+ /**
+ * Obtener la pestaña de preferencias
+ */
+ public function getPreferencesTab()
+ {
+ $this->setAction(self::ACTION_USR_PREFERENCES_GENERAL);
+
+ $this->view->addTemplate('preferences-site');
+
+ $this->view->assign('userId', $this->userId);
+ $this->view->assign('langsAvailable', Language::getAvailableLanguages());
+ $this->view->assign('currentLang', $this->userPrefs->getLang());
+ $this->view->assign('themesAvailable', DiFactory::getTheme()->getThemesAvailable());
+ $this->view->assign('currentTheme', $this->userPrefs->getTheme() ?: Config::getConfig()->getSiteTheme());
+ $this->view->assign('chkAccountLink', $this->userPrefs->isAccountLink() ? 'checked="checked"' : '');
+ $this->view->assign('resultsPerPage', $this->userPrefs->getResultsPerPage() ?: Config::getConfig()->getAccountCount());
+ $this->view->assign('chkSortViews', $this->userPrefs->isSortViews() ? 'checked="checked"' : '');
+ $this->view->assign('chkTopNavbar', $this->userPrefs->isTopNavbar() ? 'checked="checked"' : '');
+ $this->view->assign('chkOptionalActions', $this->userPrefs->isOptionalActions() ? 'checked="checked"' : '');
+ $this->view->assign('chkResultsAsCards', $this->userPrefs->isResultsAsCards() ? 'checked="checked"' : '');
+
+ $this->view->assign('tabIndex', $this->addTab(__('Preferencias')), 'preferences');
+ $this->view->assign('actionId', $this->getAction(), 'preferences');
+ }
+
+ /**
+ * Realizar las accione del controlador
+ *
+ * @param mixed $type Tipo de acción
+ */
+ public function doAction($type = null)
+ {
+ $this->view->addTemplate('tabs-start', 'common');
+
+ $this->getPreferencesTab();
+
+ $this->EventDispatcher->notifyEvent('user.preferences', $this);
+
+ $this->view->addTemplate('tabs-end', 'common');
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Controller/WikiController.class.php b/inc/SP/Controller/WikiController.class.php
new file mode 100644
index 00000000..f175a75d
--- /dev/null
+++ b/inc/SP/Controller/WikiController.class.php
@@ -0,0 +1,131 @@
+.
+ */
+
+namespace SP\Controller;
+
+defined('APP_ROOT') || die();
+
+use SP\Config\Config;
+use SP\Core\ActionsInterface;
+use SP\Core\Exceptions\SPException;
+use SP\Core\Session;
+use SP\Core\SessionUtil;
+use SP\Core\Template;
+use SP\Http\Request;
+use SP\Util\Checks;
+use SP\Util\Json;
+use SP\Util\Wiki\DokuWikiApi;
+
+/**
+ * Class WikiC para la gestión de la Wiki
+ *
+ * @package SP\Controller
+ */
+class WikiController extends ControllerBase implements ActionsInterface
+{
+ use RequestControllerTrait;
+
+ /**
+ * Constructor
+ *
+ * @param $template Template con instancia de plantilla
+ */
+ public function __construct(Template $template = null)
+ {
+ parent::__construct($template);
+
+ $this->init();
+
+ $this->view->assign('sk', SessionUtil::getSessionKey(true));
+ $this->view->assign('isDemoMode', Checks::demoIsEnabled() && !Session::getUserData()->isUserIsAdminApp());
+ $this->view->assign('isDisabled', (Checks::demoIsEnabled() && !Session::getUserData()->isUserIsAdminApp()) ? 'DISABLED' : '');
+ }
+
+ /**
+ * Realizar las acciones del controlador
+ *
+ * @param mixed $type Tipo de acción
+ */
+ public function doAction($type = null)
+ {
+ try {
+ switch ($this->actionId) {
+ case self::ACTION_WIKI_VIEW:
+ $this->getWikiPage();
+ break;
+ default:
+ $this->invalidAction();
+ }
+
+ if (count($this->JsonResponse->getData()) === 0) {
+ $this->JsonResponse->setData(['html' => $this->render()]);
+ }
+ } catch (\Exception $e) {
+ $this->JsonResponse->setDescription($e->getMessage());
+ }
+
+ Json::returnJson($this->JsonResponse);
+ }
+
+ /**
+ * Obtener los datos para la ficha de una página de la Wiki
+ */
+ public function getWikiPage()
+ {
+ $pageName = Request::analyze('pageName');
+
+ $this->view->addTemplate('wikipage');
+
+ $pageData = '';
+ $pageInfo = '';
+ $headerData = '';
+ $pageSearch = '';
+ $wikiUrlBase = Config::getConfig()->getDokuwikiUrlBase();
+
+ try {
+ $DokuWikiApi = new DokuWikiApi();
+ $headerData = $DokuWikiApi->getTitle();
+ $pageData = $DokuWikiApi->getPage($pageName);
+
+ if ($pageData !== false) {
+ if (is_array($pageData) && empty($pageData[0])) {
+ $pageSearch = $DokuWikiApi->getSearch($pageName);
+ } else {
+ $pageInfo = $DokuWikiApi->getPageInfo($pageName);
+ }
+ }
+ } catch (SPException $e) {
+// $DokuWikiApi->getPageList();
+ }
+
+ $this->view->assign('pageName', $pageName);
+ $this->view->assign('wikiUrlBase', $wikiUrlBase);
+ $this->view->assign('pageData', $pageData);
+ $this->view->assign('pageSearch', $pageSearch);
+ $this->view->assign('pageInfo', $pageInfo);
+ $this->view->assign('header', $headerData);
+
+ $this->JsonResponse->setStatus(0);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Core/Acl.class.php b/inc/SP/Core/Acl.class.php
new file mode 100644
index 00000000..d745de39
--- /dev/null
+++ b/inc/SP/Core/Acl.class.php
@@ -0,0 +1,234 @@
+.
+ */
+
+namespace SP\Core;
+
+use SP\DataModel\AccountExtData;
+use SP\DataModel\UserData;
+use SP\Log\Log;
+use SP\Mgmt\Groups\GroupUsers;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Esta clase es la encargada de calcular las access lists de acceso a usuarios.
+ */
+class Acl implements ActionsInterface
+{
+ /**
+ * @var int
+ */
+ protected $actionId;
+
+ /**
+ * Acl constructor.
+ *
+ * @param int $actionId
+ */
+ public function __construct($actionId = null)
+ {
+ $this->actionId = $actionId;
+ }
+
+ /**
+ * 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::getUserData()->isUserIsAdminApp();
+ $curUserIsAdminAcc = Session::getUserData()->isUserIsAdminAcc();
+ $curUserProfile = Session::getUserProfile();
+ $curUserId = Session::getUserData()->getUserId();
+
+ if ($curUserIsAdminApp) {
+ return true;
+ }
+
+ switch ($action) {
+ case self::ACTION_ACC_VIEW:
+ return ($curUserIsAdminAcc || $curUserProfile->isAccView() || $curUserProfile->isAccEdit());
+ case self::ACTION_ACC_VIEW_PASS:
+ return ($curUserIsAdminAcc || $curUserProfile->isAccViewPass());
+ case self::ACTION_ACC_VIEW_HISTORY:
+ return ($curUserIsAdminAcc || $curUserProfile->isAccViewHistory());
+ case self::ACTION_ACC_EDIT:
+ return ($curUserIsAdminAcc || $curUserProfile->isAccEdit());
+ case self::ACTION_ACC_EDIT_PASS:
+ return ($curUserIsAdminAcc || $curUserProfile->isAccEditPass());
+ case self::ACTION_ACC_NEW:
+ return ($curUserIsAdminAcc || $curUserProfile->isAccAdd());
+ case self::ACTION_ACC_COPY:
+ return ($curUserIsAdminAcc || ($curUserProfile->isAccAdd() && $curUserProfile->isAccView()));
+ case self::ACTION_ACC_DELETE:
+ return ($curUserIsAdminAcc || $curUserProfile->isAccDelete());
+ case self::ACTION_ACC_FILES:
+ return ($curUserIsAdminAcc || $curUserProfile->isAccFiles());
+ case self::ACTION_MGM:
+ return ($curUserProfile->isMgmCategories() || $curUserProfile->isMgmCustomers());
+ case self::ACTION_CFG:
+ return ($curUserProfile->isConfigGeneral() || $curUserProfile->isConfigEncryption() || $curUserProfile->isConfigBackup() || $curUserProfile->isConfigImport());
+ case self::ACTION_CFG_GENERAL:
+ case self::ACTION_MGM_PLUGINS:
+ case self::ACTION_CFG_ACCOUNTS:
+ return $curUserProfile->isConfigGeneral();
+ case self::ACTION_CFG_IMPORT:
+ return $curUserProfile->isConfigImport();
+ case self::ACTION_MGM_CATEGORIES:
+ case self::ACTION_MGM_CATEGORIES_SEARCH:
+ return $curUserProfile->isMgmCategories();
+ case self::ACTION_MGM_CUSTOMERS:
+ case self::ACTION_MGM_CUSTOMERS_SEARCH:
+ return $curUserProfile->isMgmCustomers();
+ case self::ACTION_MGM_CUSTOMFIELDS:
+ case self::ACTION_MGM_CUSTOMFIELDS_SEARCH:
+ return $curUserProfile->isMgmCustomFields();
+ case self::ACTION_MGM_PUBLICLINKS:
+ case self::ACTION_MGM_PUBLICLINKS_SEARCH:
+ return $curUserProfile->isMgmPublicLinks();
+ case self::ACTION_MGM_PUBLICLINKS_NEW:
+ return ($curUserProfile->isMgmPublicLinks() || $curUserProfile->isAccPublicLinks());
+ case self::ACTION_MGM_ACCOUNTS:
+ case self::ACTION_MGM_ACCOUNTS_SEARCH:
+ case self::ACTION_MGM_ACCOUNTS_HISTORY:
+ case self::ACTION_MGM_ACCOUNTS_SEARCH_HISTORY:
+ return $curUserProfile->isMgmAccounts();
+ case self::ACTION_MGM_FILES:
+ case self::ACTION_MGM_FILES_SEARCH:
+ return $curUserProfile->isMgmFiles();
+ case self::ACTION_MGM_TAGS:
+ case self::ACTION_MGM_TAGS_SEARCH:
+ return $curUserProfile->isMgmTags();
+ case self::ACTION_CFG_ENCRYPTION:
+ return $curUserProfile->isConfigEncryption();
+ case self::ACTION_CFG_BACKUP:
+ return $curUserProfile->isConfigBackup();
+ case self::ACTION_USR:
+ return ($curUserProfile->isMgmUsers() || $curUserProfile->isMgmGroups() || $curUserProfile->isMgmProfiles());
+ case self::ACTION_USR_USERS:
+ case self::ACTION_USR_USERS_SEARCH:
+ return $curUserProfile->isMgmUsers();
+ case self::ACTION_USR_USERS_EDITPASS:
+ return ($userId === $curUserId || $curUserProfile->isMgmUsers());
+ case self::ACTION_USR_GROUPS:
+ case self::ACTION_USR_GROUPS_SEARCH:
+ return $curUserProfile->isMgmGroups();
+ case self::ACTION_USR_PROFILES:
+ case self::ACTION_USR_PROFILES_SEARCH:
+ return $curUserProfile->isMgmProfiles();
+ case self::ACTION_MGM_APITOKENS:
+ case self::ACTION_MGM_APITOKENS_SEARCH:
+ return $curUserProfile->isMgmApiTokens();
+ case self::ACTION_EVL:
+ return $curUserProfile->isEvl();
+ case self::ACTION_NOT:
+ case self::ACTION_NOT_USER:
+ return true;
+ }
+
+ $Log = new Log();
+ $Log->getLogMessage()
+ ->setAction(__FUNCTION__)
+ ->addDetails(__('Acceso denegado', false), self::getActionName($action, false, false));
+ $Log->setLogLevel(Log::NOTICE);
+ $Log->writeLog();
+
+ return false;
+ }
+
+ /**
+ * Obtener el nombre de la acción indicada
+ *
+ * @param int $action El id de la acción
+ * @param bool $shortName Si se devuelve el nombre corto de la acción
+ * @param bool $translate
+ * @return string
+ */
+ public static function getActionName($action, $shortName = false, $translate = true)
+ {
+ $actionName = [
+ self::ACTION_ACC_SEARCH => ['acc_search', __('Buscar Cuentas', $translate)],
+ self::ACTION_ACC_VIEW => ['acc_view', __('Ver Cuenta', $translate)],
+ self::ACTION_ACC_COPY => ['acc_copy', __('Copiar Cuenta', $translate)],
+ self::ACTION_ACC_NEW => ['acc_new', __('Nueva Cuenta', $translate)],
+ self::ACTION_ACC_EDIT => ['acc_edit', __('Editar Cuenta', $translate)],
+ self::ACTION_ACC_EDIT_PASS => ['acc_editpass', __('Editar Clave de Cuenta', $translate)],
+ self::ACTION_ACC_VIEW_HISTORY => ['acc_viewhist', __('Ver Historial', $translate)],
+ self::ACTION_ACC_VIEW_PASS => ['acc_viewpass', __('Ver Clave', $translate)],
+ self::ACTION_ACC_DELETE => ['acc_delete', __('Eliminar Cuenta', $translate)],
+ self::ACTION_ACC_FILES => ['acc_files', __('Archivos', $translate)],
+ self::ACTION_ACC_REQUEST => ['acc_request', __('Peticiones', $translate)],
+ self::ACTION_MGM => ['mgm', __('Gestión Aplicación', $translate)],
+ self::ACTION_MGM_CATEGORIES => ['mgm_categories', __('Gestión Categorías', $translate)],
+ self::ACTION_MGM_CATEGORIES_SEARCH => ['mgm_categories_search', __('Buscar Categorías', $translate)],
+ self::ACTION_MGM_CATEGORIES_NEW => ['mgm_categories_add', __('Añadir Categoría', $translate)],
+ self::ACTION_MGM_CATEGORIES_EDIT => ['mgm_categories_edit', __('Editar Categoría', $translate)],
+ self::ACTION_MGM_CATEGORIES_DELETE => ['mgm_categories_delete', __('Eliminar Categoría', $translate)],
+ self::ACTION_MGM_CUSTOMERS => ['mgm_customers', __('Gestión Clientes', $translate)],
+ self::ACTION_MGM_CUSTOMERS_SEARCH => ['mgm_customers', __('Buscar Clientes', $translate)],
+ self::ACTION_MGM_CUSTOMERS_NEW => ['mgm_customers_add', __('Añadir Cliente', $translate)],
+ self::ACTION_MGM_CUSTOMERS_EDIT => ['mgm_customers_edit', __('Editar Cliente', $translate)],
+ self::ACTION_MGM_CUSTOMERS_DELETE => ['mgm_customers_delete', __('Eliminar Cliente', $translate)],
+ self::ACTION_MGM_CUSTOMFIELDS => ['mgm_customfields', __('Gestión Campos Personalizados', $translate)],
+ self::ACTION_MGM_APITOKENS => ['mgm_apitokens', __('Gestión Autorizaciones API', $translate)],
+ self::ACTION_MGM_FILES => ['mgm_files', __('Gestión de Archivos', $translate)],
+ self::ACTION_MGM_ACCOUNTS => ['mgm_accounts', __('Gestión de Cuentas', $translate)],
+ self::ACTION_MGM_TAGS => ['mgm_tags', __('Gestión de Etiquetas', $translate)],
+ self::ACTION_USR => ['usr', __('Gestión Usuarios', $translate)],
+ self::ACTION_USR_USERS => ['usr_users', __('Gestión Usuarios', $translate)],
+ self::ACTION_USR_GROUPS => ['usr_groups', __('Gestión Grupos', $translate)],
+ self::ACTION_USR_PROFILES => ['usr_profiles', __('Gestión Perfiles', $translate)],
+ self::ACTION_CFG => ['cfg', __('Configuración', $translate)],
+ self::ACTION_CFG_GENERAL => ['cfg_general', __('Configuración General', $translate)],
+ self::ACTION_CFG_ENCRYPTION => ['cfg_encryption', __('Encriptación', $translate)],
+ self::ACTION_CFG_BACKUP => ['cfg_backup', __('Copia de Seguridad', $translate)],
+ self::ACTION_CFG_EXPORT => ['cfg_export', __('Exportar', $translate)],
+ self::ACTION_CFG_IMPORT => ['cfg_import', __('Importar', $translate)],
+ self::ACTION_EVL => ['cfg_evl', __('Log de Eventos', $translate)]
+ ];
+
+ if (!isset($actionName[$action])) {
+ return $action;
+ }
+
+ if ($shortName) {
+ return $actionName[$action][0];
+ }
+
+ return $actionName[$action][1];
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Core/ActionsInterface.class.php b/inc/SP/Core/ActionsInterface.class.php
new file mode 100644
index 00000000..57b9718e
--- /dev/null
+++ b/inc/SP/Core/ActionsInterface.class.php
@@ -0,0 +1,161 @@
+.
+ */
+
+namespace SP\Core;
+
+/**
+ * Interface ActionsInterface para la definición de constantes de acciones disponibles.
+ *
+ * @package Controller
+ */
+interface ActionsInterface
+{
+ const ACTION_ACC_SEARCH = 1;
+ const ACTION_ACC = 10;
+ const ACTION_ACC_VIEW = 100;
+ const ACTION_ACC_NEW = 101;
+ const ACTION_ACC_EDIT = 102;
+ const ACTION_ACC_DELETE = 103;
+ const ACTION_ACC_VIEW_PASS = 104;
+ const ACTION_ACC_VIEW_HISTORY = 105;
+ const ACTION_ACC_EDIT_PASS = 106;
+ const ACTION_ACC_EDIT_RESTORE = 107;
+ const ACTION_ACC_COPY = 108;
+ const ACTION_ACC_FILES = 11;
+ const ACTION_ACC_FILES_VIEW = 111;
+ const ACTION_ACC_FILES_UPLOAD = 112;
+ const ACTION_ACC_FILES_DOWNLOAD = 113;
+ const ACTION_ACC_FILES_DELETE = 114;
+ const ACTION_ACC_REQUEST = 12;
+ const ACTION_ACC_FAVORITES = 13;
+ const ACTION_ACC_FAVORITES_VIEW = 130;
+ const ACTION_ACC_FAVORITES_ADD = 131;
+ const ACTION_ACC_FAVORITES_DELETE = 133;
+ const ACTION_WIKI = 20;
+ const ACTION_WIKI_VIEW = 200;
+ const ACTION_WIKI_NEW = 201;
+ const ACTION_WIKI_EDIT = 202;
+ const ACTION_WIKI_DELETE = 203;
+ 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_CATEGORIES_SEARCH = 615;
+ 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_CUSTOMERS_SEARCH = 625;
+ 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_APITOKENS_SEARCH = 635;
+ 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_MGM_CUSTOMFIELDS_SEARCH = 645;
+ const ACTION_MGM_PUBLICLINKS = 65;
+ const ACTION_MGM_PUBLICLINKS_NEW = 650;
+ const ACTION_MGM_PUBLICLINKS_VIEW = 651;
+ const ACTION_MGM_PUBLICLINKS_DELETE = 653;
+ const ACTION_MGM_PUBLICLINKS_REFRESH = 654;
+ const ACTION_MGM_PUBLICLINKS_SEARCH = 655;
+ const ACTION_MGM_FILES = 66;
+ const ACTION_MGM_FILES_VIEW = 661;
+ const ACTION_MGM_FILES_DELETE = 663;
+ const ACTION_MGM_FILES_SEARCH = 665;
+ const ACTION_MGM_ACCOUNTS = 67;
+ const ACTION_MGM_ACCOUNTS_HISTORY = 6701;
+ const ACTION_MGM_ACCOUNTS_VIEW = 671;
+ const ACTION_MGM_ACCOUNTS_DELETE = 673;
+ const ACTION_MGM_ACCOUNTS_DELETE_HISTORY = 6731;
+ const ACTION_MGM_ACCOUNTS_SEARCH = 675;
+ const ACTION_MGM_ACCOUNTS_SEARCH_HISTORY = 6751;
+ const ACTION_MGM_ACCOUNTS_EDIT_RESTORE = 6771;
+ const ACTION_MGM_TAGS = 68;
+ const ACTION_MGM_TAGS_NEW = 680;
+ const ACTION_MGM_TAGS_VIEW = 681;
+ const ACTION_MGM_TAGS_EDIT = 682;
+ const ACTION_MGM_TAGS_DELETE = 683;
+ const ACTION_MGM_TAGS_SEARCH = 685;
+ const ACTION_MGM_PLUGINS = 69;
+ const ACTION_MGM_PLUGINS_NEW = 690;
+ const ACTION_MGM_PLUGINS_VIEW = 691;
+ const ACTION_MGM_PLUGINS_SEARCH = 695;
+ const ACTION_MGM_PLUGINS_ENABLE= 696;
+ const ACTION_MGM_PLUGINS_DISABLE= 697;
+ const ACTION_MGM_PLUGINS_RESET= 698;
+ 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_USERS_SEARCH = 715;
+ 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_GROUPS_SEARCH = 725;
+ 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_PROFILES_SEARCH = 735;
+ const ACTION_USR_PREFERENCES = 740;
+ const ACTION_USR_PREFERENCES_GENERAL = 741;
+ const ACTION_USR_PREFERENCES_SECURITY = 742;
+ const ACTION_USR_SYNC_LDAP = 751;
+ const ACTION_NOT = 760;
+ const ACTION_NOT_USER = 761;
+ const ACTION_NOT_USER_VIEW = 7610;
+ const ACTION_NOT_USER_NEW = 7611;
+ const ACTION_NOT_USER_EDIT = 7612;
+ const ACTION_NOT_USER_DELETE = 7613;
+ const ACTION_NOT_USER_CHECK = 7614;
+ const ACTION_NOT_USER_SEARCH = 7615;
+ const ACTION_CFG = 80;
+ const ACTION_CFG_GENERAL = 801;
+ const ACTION_CFG_ENCRYPTION = 802;
+ const ACTION_CFG_ENCRYPTION_REFRESH = 8021;
+ const ACTION_CFG_ENCRYPTION_TEMPPASS = 803;
+ const ACTION_CFG_BACKUP = 804;
+ const ACTION_CFG_IMPORT = 805;
+ const ACTION_CFG_EXPORT = 806;
+ const ACTION_CFG_WIKI = 807;
+ const ACTION_CFG_LDAP = 808;
+ const ACTION_CFG_MAIL = 809;
+ const ACTION_CFG_ACCOUNTS = 810;
+ const ACTION_EVL = 90;
+}
\ No newline at end of file
diff --git a/inc/Backup.class.php b/inc/SP/Core/Backup.class.php
similarity index 63%
rename from inc/Backup.class.php
rename to inc/SP/Core/Backup.class.php
index de84f03a..dfb0a05a 100644
--- a/inc/Backup.class.php
+++ b/inc/SP/Core/Backup.class.php
@@ -2,9 +2,9 @@
/**
* sysPass
*
- * @author nuxsmin
- * @link http://syspass.org
- * @copyright 2012-2015 Rubén Domínguez nuxsmin@syspass.org
+ * @author nuxsmin
+ * @link http://syspass.org
+ * @copyright 2012-2017, Rubén Domínguez nuxsmin@$syspass.org
*
* This file is part of sysPass.
*
@@ -19,13 +19,22 @@
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with sysPass. If not, see .
- *
+ * along with sysPass. If not, see .
*/
-namespace SP;
+namespace SP\Core;
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+use SP\Config\Config;
+use SP\Core\Exceptions\SPException;
+use SP\Log\Email;
+use SP\Log\Log;
+use SP\Storage\DB;
+use SP\Storage\DBUtil;
+use SP\Storage\QueryData;
+use SP\Util\Checks;
+use SP\Util\Util;
+
+defined('APP_ROOT') || die();
/**
* Esta clase es la encargada de realizar la copia y restauración de sysPass.
@@ -36,15 +45,22 @@ class Backup
* Realizar backup de la BBDD y aplicación.
*
* @return bool
+ * @throws \phpmailer\phpmailerException
+ * @throws \SP\Core\Exceptions\SPException
*/
public static function doBackup()
{
+ $Log = new Log();
+ $LogMessage = $Log->getLogMessage();
+ $LogMessage->setAction(__('Realizar Backup', false));
+
$siteName = Util::getAppInfo('appname');
$backupDir = Init::$SERVERROOT;
// Generar hash unico para evitar descargas no permitidas
- $backupUniqueHash = uniqid();
- Config::setValue('backup_hash', $backupUniqueHash);
+ $backupUniqueHash = sha1(uniqid('sysPassBackup', true));
+ Config::getConfig()->setBackupHash($backupUniqueHash);
+ Config::saveConfig();
$backupDstDir = $backupDir . DIRECTORY_SEPARATOR . 'backup';
$bakFileApp = $backupDstDir . DIRECTORY_SEPARATOR . $siteName . '-' . $backupUniqueHash . '.tar';
@@ -56,31 +72,74 @@ class Backup
self::backupTables('*', $bakFileDB);
self::backupApp($bakFileApp);
} catch (\Exception $e) {
- Log::writeNewLogAndEmail(__FUNCTION__, $e->getMessage());
+ $LogMessage->addDescription(__('Error al realizar el backup', false));
+ $LogMessage->addDetails($e->getCode(), $e->getMessage());
+ $Log->setLogLevel(Log::ERROR);
+ $Log->writeLog();
+
+ Email::sendEmail($LogMessage);
return false;
}
+ $LogMessage->addDescription(__('Copia de la aplicación y base de datos realizada correctamente', false));
+ $Log->writeLog();
+
+ Email::sendEmail($LogMessage);
+
+ return true;
+ }
+
+ /**
+ * Comprobar y crear el directorio de backups.
+ *
+ * @param string $backupDir ruta del directorio de backup
+ * @throws SPException
+ * @return bool
+ */
+ private static function checkBackupDir($backupDir)
+ {
+ if (@mkdir($backupDir, 0750) === false && is_dir($backupDir) === false) {
+ throw new SPException(SPException::SP_CRITICAL, sprintf(__('No es posible crear el directorio de backups ("%s")'), $backupDir));
+ }
+
+ if (!is_writable($backupDir)) {
+ throw new SPException(SPException::SP_CRITICAL, __('Compruebe los permisos del directorio de backups', false));
+ }
+
return true;
}
+ /**
+ * Eliminar las copias de seguridad anteriores
+ *
+ * @param string $backupDir El directorio de backups
+ */
+ private static function deleteOldBackups($backupDir)
+ {
+ array_map('unlink', glob($backupDir . DIRECTORY_SEPARATOR . '*.tar.gz'));
+ array_map('unlink', glob($backupDir . DIRECTORY_SEPARATOR . '*.sql'));
+ }
+
/**
* Backup de las tablas de la BBDD.
* Utilizar '*' para toda la BBDD o 'table1 table2 table3...'
*
- * @param string $tables
- * @param string $backupFile
+ * @param string|array $tables
+ * @param string $backupFile
* @throws SPException
* @return bool
*/
private static function backupTables($tables = '*', $backupFile)
{
- $dbname = Config::getValue("dbname");
+ $dbname = Config::getConfig()->getDbName();
try {
$handle = fopen($backupFile, 'w');
- if ($tables == '*') {
- $resTables = DB::getResults('SHOW TABLES', __FUNCTION__);
+ $Data = new QueryData();
+
+ if ($tables === '*') {
+ $resTables = DBUtil::$tables;
} else {
$resTables = is_array($tables) ? $tables : explode(',', $tables);
}
@@ -94,23 +153,48 @@ class Backup
$sqlOut .= 'USE `' . $dbname . '`;' . PHP_EOL . PHP_EOL;
fwrite($handle, $sqlOut);
+ $sqlOutViews = '';
// Recorrer las tablas y almacenar los datos
foreach ($resTables as $table) {
- $tableName = $table->{'Tables_in_' . $dbname};
- $sqlOut = '-- ' . PHP_EOL;
- $sqlOut .= '-- Table ' . strtoupper($tableName) . PHP_EOL;
- $sqlOut .= '-- ' . PHP_EOL;
+ $tableName = is_object($table) ? $table->{'Tables_in_' . $dbname} : $table;
+
+ $Data->setQuery('SHOW CREATE TABLE ' . $tableName);
// Consulta para crear la tabla
- $sqlOut .= 'DROP TABLE IF EXISTS `' . $tableName . '`;' . PHP_EOL . PHP_EOL;
- $txtCreate = DB::getResults('SHOW CREATE TABLE ' . $tableName, __FUNCTION__);
- $sqlOut .= $txtCreate->{'Create Table'} . ';' . PHP_EOL . PHP_EOL;
- fwrite($handle, $sqlOut);
+ $txtCreate = DB::getResults($Data);
- DB::setReturnRawData();
+ if (isset($txtCreate->{'Create Table'})) {
+ $sqlOut = '-- ' . PHP_EOL;
+ $sqlOut .= '-- Table ' . strtoupper($tableName) . PHP_EOL;
+ $sqlOut .= '-- ' . PHP_EOL;
+ $sqlOut .= 'DROP TABLE IF EXISTS `' . $tableName . '`;' . PHP_EOL . PHP_EOL;
+ $sqlOut .= $txtCreate->{'Create Table'} . ';' . PHP_EOL . PHP_EOL;
+ fwrite($handle, $sqlOut);
+ } elseif ($txtCreate->{'Create View'}) {
+ $sqlOutViews .= '-- ' . PHP_EOL;
+ $sqlOutViews .= '-- View ' . strtoupper($tableName) . PHP_EOL;
+ $sqlOutViews .= '-- ' . PHP_EOL;
+ $sqlOutViews .= 'DROP TABLE IF EXISTS `' . $tableName . '`;' . PHP_EOL . PHP_EOL;
+ $sqlOutViews .= $txtCreate->{'Create View'} . ';' . PHP_EOL . PHP_EOL;
+ }
+
+ fwrite($handle, PHP_EOL . PHP_EOL);
+ }
+
+ // Guardar las vistas
+ fwrite($handle, $sqlOutViews);
+
+ // Guardar los datos
+ foreach ($resTables as $tableName) {
+ // No guardar las vistas!
+ if (strrpos($tableName, '_v') !== false) {
+ continue;
+ }
+
+ $Data->setQuery('SELECT * FROM `' . $tableName . '`');
// Consulta para obtener los registros de la tabla
- $queryRes = DB::getResults('SELECT * FROM ' . $tableName, __FUNCTION__);
+ $queryRes = DB::getResultsRaw($Data);
$numColumns = $queryRes->columnCount();
@@ -122,7 +206,7 @@ class Backup
if (is_numeric($value)) {
fwrite($handle, $value);
} else {
- fwrite($handle, DB::escape($value));
+ fwrite($handle, DBUtil::escape($value));
}
if ($field < $numColumns) {
@@ -131,11 +215,9 @@ class Backup
$field++;
}
+
fwrite($handle, ');' . PHP_EOL);
}
- fwrite($handle, PHP_EOL . PHP_EOL);
-
- DB::setReturnRawData(false);
}
$sqlOut = '--' . PHP_EOL;
@@ -162,11 +244,11 @@ class Backup
*/
private static function backupApp($backupFile)
{
- if (!class_exists('PharData')) {
- if (Util::runningOnWindows()) {
- throw new SPException(SPException::SP_CRITICAL, _('Esta operación sólo es posible en entornos Linux'));
+ if (!class_exists(\PharData::class)) {
+ if (Checks::checkIsWindows()) {
+ throw new SPException(SPException::SP_CRITICAL, __('Esta operación sólo es posible en entornos Linux', false));
} elseif (!self::backupAppLegacyLinux($backupFile)) {
- throw new SPException(SPException::SP_CRITICAL, _('Error al realizar backup en modo compatibilidad'));
+ throw new SPException(SPException::SP_CRITICAL, __('Error al realizar backup en modo compatibilidad', false));
}
return true;
@@ -208,37 +290,4 @@ class Backup
return $resBakApp;
}
-
- /**
- * Comprobar y crear el directorio de backups.
- *
- * @param string $backupDir ruta del directorio de backup
- * @throws SPException
- * @return bool
- */
- private static function checkBackupDir($backupDir)
- {
- if (!is_dir($backupDir)) {
- if (!@mkdir($backupDir, 0550)) {
- throw new SPException(SPException::SP_CRITICAL, _('No es posible crear el directorio de backups') . ' (' . $backupDir . ')');
- }
- }
-
- if (!is_writable($backupDir)) {
- throw new SPException(SPException::SP_CRITICAL, _('Compruebe los permisos del directorio de backups'));
- }
-
- return true;
- }
-
- /**
- * Eliminar las copias de seguridad anteriores
- *
- * @param string $backupDir El directorio de backups
- */
- private static function deleteOldBackups($backupDir)
- {
- array_map('unlink', glob($backupDir . DIRECTORY_SEPARATOR . '*.tar.gz'));
- array_map('unlink', glob($backupDir . DIRECTORY_SEPARATOR . '*.sql'));
- }
}
\ No newline at end of file
diff --git a/inc/Crypt.class.php b/inc/SP/Core/Crypt.class.php
similarity index 61%
rename from inc/Crypt.class.php
rename to inc/SP/Core/Crypt.class.php
index 7c18d671..b49fe33e 100644
--- a/inc/Crypt.class.php
+++ b/inc/SP/Core/Crypt.class.php
@@ -4,7 +4,7 @@
*
* @author nuxsmin
* @link http://syspass.org
- * @copyright 2012-2015 Rubén Domínguez nuxsmin@syspass.org
+ * @copyright 2012-2017, Rubén Domínguez nuxsmin@$syspass.org
*
* This file is part of sysPass.
*
@@ -19,13 +19,19 @@
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with sysPass. If not, see .
- *
+ * along with sysPass. If not, see .
*/
-namespace SP;
+namespace SP\Core;
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+use SP\Account\AccountHistory;
+use SP\Config\Config;
+use SP\Config\ConfigDB;
+use SP\Core\Exceptions\SPException;
+use SP\Log\Log;
+use SP\Util\Checks;
+
+defined('APP_ROOT') || die();
/**
* Esta clase es la encargada de realizar el encriptado/desencriptado de claves
@@ -34,10 +40,53 @@ class Crypt
{
public static $strInitialVector;
+ /**
+ * Comprobar el hash de una clave.
+ *
+ * @param string $pwd con la clave a comprobar
+ * @param string $checkedHash con el hash a comprobar
+ * @param bool $isMPass si es la clave maestra
+ * @return bool
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public static function checkHashPass($pwd, $checkedHash, $isMPass = false)
+ {
+ if ($isMPass) {
+ // Comprobar si el hash está en formato anterior a 12002
+ if (strlen($checkedHash) === 128) {
+ $check = (hash('sha256', substr($checkedHash, 0, 64) . $pwd) === substr($checkedHash, 64, 64));
+
+ if ($check) {
+ $newHash = self::mkHashPassword($pwd);
+
+ AccountHistory::updateAccountsMPassHash($newHash);
+
+ ConfigDB::setValue('masterPwd', $newHash);
+ Log::writeNewLog(__('Aviso', false), __('Se ha regenerado el HASH de clave maestra. No es necesaria ninguna acción.', false), Log::NOTICE);
+ }
+
+ return $check;
+
+ // Hash de clave maestra anterior a 2.0.0.17013101
+ } elseif (hash_equals(crypt($pwd, substr($checkedHash, 0, 72)), substr($checkedHash, 72))) {
+ ConfigDB::setValue('masterPwd', Crypt::mkHashPassword($pwd));
+
+ Log::writeNewLog(__('Aviso', false), __('Se ha regenerado el HASH de clave maestra. No es necesaria ninguna acción.', false), Log::NOTICE);
+ return true;
+ }
+ }
+
+ // Timing attacks...
+// usleep(mt_rand(100000, 300000));
+
+ // Obtener el hash de la clave y la clave para generar una clave y comparar
+ return hash_equals(crypt($pwd, substr($checkedHash, 0, 30)), substr($checkedHash, 30));
+ }
+
/**
* Generar un hash de una clave utilizando un salt.
*
- * @param string $pwd con la clave a 'hashear'
+ * @param string $pwd con la clave a 'hashear'
* @param bool $prefixSalt Añadir el salt al hash
* @return string con el hash de la clave
*/
@@ -52,13 +101,21 @@ class Crypt
/**
* Crear un salt utilizando mcrypt.
*
+ * @param string $salt
+ * @param bool $random
* @return string con el salt creado
*/
- public static function makeHashSalt()
+ public static function makeHashSalt($salt = null, $random = true)
{
- $salt = '$2y$07$' . bin2hex(self::getIV()) . '$';
+ if ($random === true) {
+ $salt = bin2hex(self::getIV());
+ } elseif ($salt !== null && strlen($salt) < 22) {
+ $salt .= Config::getConfig()->getPasswordSalt();
+ } elseif ($salt === null) {
+ $salt = Config::getConfig()->getPasswordSalt();
+ }
- return $salt;
+ return '$2y$07$' . substr($salt, 0, 22) . '$';
}
/**
@@ -66,21 +123,19 @@ class Crypt
*
* @return string con el IV
*/
- private static function getIV()
+ public static function getIV()
{
$source = MCRYPT_DEV_URANDOM;
$mcryptRes = self::getMcryptResource();
- if (Util::runningOnWindows() && (!defined('PHP_VERSION_ID') || PHP_VERSION_ID < 50300)) {
+ if (Checks::checkIsWindows() && (!defined('PHP_VERSION_ID') || PHP_VERSION_ID < 50300)) {
$source = MCRYPT_RAND;
}
- $ivSize = mcrypt_enc_get_iv_size($mcryptRes);
-
// Crear el IV y asegurar que tiene una longitud de 32 bytes
do {
- $cryptIV = mcrypt_create_iv($ivSize, $source);
- } while (strlen(substr($cryptIV, 0, $ivSize)) < $ivSize);
+ $cryptIV = mcrypt_create_iv(mcrypt_enc_get_iv_size($mcryptRes), $source);
+ } while ($cryptIV === false || strlen($cryptIV) < 32);
mcrypt_module_close($mcryptRes);
@@ -99,43 +154,7 @@ class Crypt
}
/**
- * Comprobar el hash de una clave.
- *
- * @param string $pwd con la clave a comprobar
- * @param string $checkedHash con el hash a comprobar
- * @param bool $isMPass si es la clave maestra
- * @return bool
- */
- public static function checkHashPass($pwd, $checkedHash, $isMPass = false)
- {
- // Obtenemos el salt de la clave
- $salt = substr($checkedHash, 0, 72);
- // Obtenemos el hash SHA256
- $validHash = substr($checkedHash, 72);
- // Re-hash de la clave a comprobar
- $testHash = crypt($pwd, $salt);
-
- // Comprobar si el hash está en formato anterior a 12002
- if ($isMPass && strlen($checkedHash) === 128) {
- $check = (hash("sha256", substr($checkedHash, 0, 64) . $pwd) == substr($checkedHash, 64, 64));
-
- if ($check) {
- $newHash = self::mkHashPassword($pwd);
-
- AccountHistory::updateAccountsMPassHash($newHash);
- ConfigDB::setValue('masterPwd', $newHash);
- Log::writeNewLog(_('Aviso'), _('Se ha regenerado el HASH de clave maestra. No es necesaria ninguna acción.'));
- }
-
- return $check;
- }
-
- // Si los hashes son idénticos, la clave es válida
- return $testHash == $validHash;
- }
-
- /**
- * Generar la clave maestra encriptada con la clave del usuario.
+ * Generar la clave maestra encriptada con una clave
*
* @param string $customPwd con la clave a encriptar
* @param string $masterPwd con la clave maestra
@@ -145,9 +164,8 @@ class Crypt
{
$cryptIV = self::getIV();
$cryptValue = self::encrypt($masterPwd, $customPwd, $cryptIV);
- $dataCrypt = array($cryptValue, $cryptIV);
- return $dataCrypt;
+ return [$cryptValue, $cryptIV];
}
/**
@@ -160,6 +178,10 @@ class Crypt
*/
private static function encrypt($strValue, $strPassword, $cryptIV)
{
+ if (empty($strValue)) {
+ return '';
+ }
+
$mcryptRes = self::getMcryptResource();
mcrypt_generic_init($mcryptRes, $strPassword, $cryptIV);
@@ -173,7 +195,7 @@ class Crypt
* Encriptar datos. Devuelve un array con los datos encriptados y el IV.
*
* @param mixed $data string Los datos a encriptar
- * @param string $pwd La clave de encriptación
+ * @param string $pwd La clave de encriptación
* @return array
* @throws SPException
*/
@@ -187,19 +209,19 @@ class Crypt
if (!Crypt::checkCryptModule()) {
throw new SPException(
SPException::SP_CRITICAL,
- _('Error interno'),
- _('No se puede usar el módulo de encriptación')
+ __('Error interno', false),
+ __('No se puede usar el módulo de encriptación', false)
);
}
// Encriptar datos
$encData['data'] = Crypt::mkEncrypt($data, $pwd);
- if (!empty($data) && ($encData['data'] === false || is_null($encData['data']))) {
+ if (!empty($data) && ($encData['data'] === false || null === $encData['data'])) {
throw new SPException(
SPException::SP_CRITICAL,
- _('Error interno'),
- _('Error al generar datos cifrados')
+ __('Error interno', false),
+ __('Error al generar datos cifrados', false)
);
}
@@ -228,31 +250,31 @@ class Crypt
*/
public static function mkEncrypt($data, $masterPwd = null)
{
- $masterPwd = (is_null($masterPwd)) ? SessionUtil::getSessionMPass() : $masterPwd;
+ $masterPwd = empty($masterPwd) ? SessionUtil::getSessionMPass() : $masterPwd;
self::$strInitialVector = self::getIV();
- $cryptValue = self::encrypt($data, $masterPwd, self::$strInitialVector);
- return $cryptValue;
+ return self::encrypt($data, $masterPwd, self::$strInitialVector);
}
/**
* Desencriptar datos con la clave maestra.
*
* @param string $cryptData Los datos a desencriptar
- * @param string $cryptIV con el IV
+ * @param string $cryptIV con el IV
* @param string $password La clave maestra
* @return string con los datos desencriptados
*/
public static function getDecrypt($cryptData, $cryptIV, $password = null)
{
- if (is_null($password)) {
+ if (empty($cryptData) || empty($cryptIV)) {
+ return false;
+ } elseif (null === $password) {
$password = SessionUtil::getSessionMPass();
-// self::getSessionMasterPass();
}
$mcryptRes = self::getMcryptResource();
- mcrypt_generic_init($mcryptRes, $password, $cryptIV);
+ @mcrypt_generic_init($mcryptRes, $password, $cryptIV);
$strDecrypted = trim(mdecrypt_generic($mcryptRes, $cryptData));
mcrypt_generic_deinit($mcryptRes);
@@ -270,18 +292,6 @@ class Crypt
*/
public static function generateAesKey($string, $salt = null)
{
- if (is_null($salt)) {
- $salt = Config::getValue('passwordsalt');
- }
-
- $salt = '$2y$07$' . $salt . '$';
- $key = substr(crypt($string, $salt), 7, 32);
-
- return $key;
- }
-
- public static function checkPassword($pwd, $salt)
- {
- $testHash = crypt($pwd, $salt);
+ return substr(crypt($string, self::makeHashSalt($salt, false)), 7, 32);
}
}
\ No newline at end of file
diff --git a/inc/CryptMasterPass.class.php b/inc/SP/Core/CryptMasterPass.class.php
similarity index 72%
rename from inc/CryptMasterPass.class.php
rename to inc/SP/Core/CryptMasterPass.class.php
index 4f393b34..7e827877 100644
--- a/inc/CryptMasterPass.class.php
+++ b/inc/SP/Core/CryptMasterPass.class.php
@@ -2,9 +2,9 @@
/**
* sysPass
*
- * @author nuxsmin
- * @link http://syspass.org
- * @copyright 2012-2015 Rubén Domínguez nuxsmin@syspass.org
+ * @author nuxsmin
+ * @link http://syspass.org
+ * @copyright 2012-2017, Rubén Domínguez nuxsmin@$syspass.org
*
* This file is part of sysPass.
*
@@ -19,13 +19,16 @@
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with sysPass. If not, see .
- *
+ * along with sysPass. If not, see .
*/
-namespace SP;
+namespace SP\Core;
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+use SP\Config\ConfigDB;
+use SP\Log\Log;
+use SP\Util\Util;
+
+defined('APP_ROOT') || die();
/**
* Class CryptMasterPass para la gestión de la clave maestra
@@ -34,7 +37,10 @@ defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'
*/
class CryptMasterPass
{
- const MAX_ATTEMPTS = 100;
+ /**
+ * Número máximo de intentos
+ */
+ const MAX_ATTEMPTS = 50;
/**
* Crea una clave temporal para encriptar la clave maestra y guardarla.
@@ -45,7 +51,7 @@ class CryptMasterPass
public static function setTempMasterPass($maxTime = 14400)
{
// Encriptar la clave maestra con hash aleatorio generado
- $randomKey = Crypt::generateAesKey(Util::generate_random_bytes());
+ $randomKey = Crypt::generateAesKey(Util::generateRandomBytes());
$pass = Crypt::mkCustomMPassEncrypt($randomKey, SessionUtil::getSessionMPass());
if (!is_array($pass)) {
@@ -74,28 +80,34 @@ class CryptMasterPass
*
* @param string $pass clave a comprobar
* @return bool
+ * @throws \SP\Core\Exceptions\SPException
*/
public static function checkTempMasterPass($pass)
{
- $passTime = ConfigDB::getValue('tempmaster_passtime');
- $passMaxTime = ConfigDB::getValue('tempmaster_maxtime');
- $attempts = ConfigDB::getValue('tempmaster_attempts');
+ $passTime = (int)ConfigDB::getValue('tempmaster_passtime');
+ $passMaxTime = (int)ConfigDB::getValue('tempmaster_maxtime');
+ $attempts = (int)ConfigDB::getValue('tempmaster_attempts');
- // Comprobar si el tiempo de validez se ha superado
- if ($passTime !== false
- && time() - $passTime > $passMaxTime
+ // Comprobar si el tiempo de validez o los intentos se han superado
+ if ($passMaxTime === 0) {
+ Log::writeNewLog(__FUNCTION__, __('Clave temporal caducada', false), Log::INFO);
+
+ return false;
+ } elseif ((!empty($passTime) && time() > $passMaxTime)
|| $attempts >= self::MAX_ATTEMPTS
) {
ConfigDB::setCacheConfigValue('tempmaster_pass', '');
ConfigDB::setCacheConfigValue('tempmaster_passiv', '');
ConfigDB::setCacheConfigValue('tempmaster_passhash', '');
+ ConfigDB::setCacheConfigValue('tempmaster_maxtime', 0);
+ ConfigDB::setCacheConfigValue('tempmaster_attempts', 0);
ConfigDB::writeConfig();
+ Log::writeNewLog(__FUNCTION__, __('Clave temporal caducada', false), Log::INFO);
+
return false;
}
- Crypt::checkHashPass($pass, ConfigDB::getValue('tempmaster_passhash'));
-
$isValid = Crypt::checkHashPass($pass, ConfigDB::getValue('tempmaster_passhash'));
if (!$isValid) {
diff --git a/inc/CryptPKI.class.php b/inc/SP/Core/CryptPKI.class.php
similarity index 73%
rename from inc/CryptPKI.class.php
rename to inc/SP/Core/CryptPKI.class.php
index 92ca7677..04ca189a 100644
--- a/inc/CryptPKI.class.php
+++ b/inc/SP/Core/CryptPKI.class.php
@@ -2,9 +2,9 @@
/**
* sysPass
*
- * @author nuxsmin
- * @link http://syspass.org
- * @copyright 2012-2015 Rubén Domínguez nuxsmin@syspass.org
+ * @author nuxsmin
+ * @link http://syspass.org
+ * @copyright 2012-2017, Rubén Domínguez nuxsmin@$syspass.org
*
* This file is part of sysPass.
*
@@ -19,15 +19,17 @@
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with sysPass. If not, see .
- *
+ * along with sysPass. If not, see .
*/
-namespace SP;
+namespace SP\Core;
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+defined('APP_ROOT') || die();
+use phpseclib\Crypt\RSA;
use phpseclib\Exception\FileNotFoundException;
+use SP\Core\Exceptions\SPException;
+use SP\Log\Log;
/**
* Class CryptPKI para el manejo de las funciones para PKI
@@ -43,7 +45,7 @@ class CryptPKI
{
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'));
+ throw new SPException(SPException::SP_CRITICAL, __('No es posible generar las claves RSA', false));
}
}
}
@@ -73,7 +75,7 @@ class CryptPKI
*/
public function createKeys()
{
- $Rsa = new \phpseclib\Crypt\RSA();
+ $Rsa = new RSA();
$keys = $Rsa->createKey(1024);
$priv = file_put_contents($this->getPrivateKeyFile(), $keys['privatekey']);
@@ -89,11 +91,12 @@ class CryptPKI
*
* @param string $data los datos a encriptar
* @return string
+ * @throws \phpseclib\Exception\FileNotFoundException
*/
public function encryptRSA($data)
{
- $Rsa = new \phpseclib\Crypt\RSA();
- $Rsa->setEncryptionMode(\phpseclib\Crypt\RSA::ENCRYPTION_PKCS1);
+ $Rsa = new RSA();
+ $Rsa->setEncryptionMode(RSA::ENCRYPTION_PKCS1);
$Rsa->loadKey($this->getPublicKey());
return $Rsa->encrypt($data);
@@ -103,13 +106,16 @@ class CryptPKI
* Devuelve la clave pública desde el archivo
*
* @return string
+ * @throws \phpseclib\Exception\FileNotFoundException
*/
public function getPublicKey()
{
$file = $this->getPublicKeyFile();
if (!file_exists($file)) {
- throw new FileNotFoundException(_('El archivo de clave no existe'));
+ Log::writeNewLog(__FUNCTION__, __('El archivo de clave no existe', false), Log::NOTICE);
+
+ throw new FileNotFoundException(__('El archivo de clave no existe'));
}
return file_get_contents($file);
@@ -120,11 +126,12 @@ class CryptPKI
*
* @param string $data los datos a desencriptar
* @return string
+ * @throws \phpseclib\Exception\FileNotFoundException
*/
public function decryptRSA($data)
{
- $Rsa = new \phpseclib\Crypt\RSA();
- $Rsa->setEncryptionMode(\phpseclib\Crypt\RSA::ENCRYPTION_PKCS1);
+ $Rsa = new RSA();
+ $Rsa->setEncryptionMode(RSA::ENCRYPTION_PKCS1);
$Rsa->loadKey($this->getPrivateKey());
return $Rsa->decrypt($data);
@@ -134,13 +141,16 @@ class CryptPKI
* Devuelve la clave privada desde el archivo
*
* @return string
+ * @throws \phpseclib\Exception\FileNotFoundException
*/
private function getPrivateKey()
{
$file = $this->getPrivateKeyFile();
if (!file_exists($file)) {
- throw new FileNotFoundException(_('El archivo de clave no existe'));
+ Log::writeNewLog(__FUNCTION__, __('El archivo de clave no existe', false), Log::NOTICE);
+
+ throw new FileNotFoundException(__('El archivo de clave no existe'));
}
return file_get_contents($file);
diff --git a/inc/SP/Core/DiFactory.class.php b/inc/SP/Core/DiFactory.class.php
new file mode 100644
index 00000000..97e492e4
--- /dev/null
+++ b/inc/SP/Core/DiFactory.class.php
@@ -0,0 +1,145 @@
+.
+ */
+
+namespace SP\Core;
+
+use SP\Core\Events\EventDispatcher;
+use SP\Core\Events\EventDispatcherInterface;
+use SP\Core\Exceptions\InvalidClassException;
+use SP\Core\UI\Theme;
+use SP\Core\UI\ThemeInterface;
+use SP\Mgmt\ItemBase;
+use SP\Storage\DBStorageInterface;
+use SP\Storage\FileStorageInterface;
+use SP\Storage\MySQLHandler;
+use SP\Storage\XmlHandler;
+
+/**
+ * Class SingleFactory
+ *
+ * @package SP\Core
+ */
+class DiFactory
+{
+ /**
+ * @var FileStorageInterface
+ */
+ private static $ConfigFactory;
+ /**
+ * @var DBStorageInterface
+ */
+ private static $DBFactory;
+ /**
+ * @var ItemBase[]
+ */
+ private static $ItemFactory = [];
+ /**
+ * @var ThemeInterface
+ */
+ private static $ThemeFactory;
+ /**
+ * @var EventDispatcherInterface
+ */
+ private static $EventDispatcher;
+
+ /**
+ * Devuelve el almacenamiento para la configuración
+ *
+ * @return FileStorageInterface
+ */
+ public static final function getConfigStorage()
+ {
+ if (!self::$ConfigFactory instanceof FileStorageInterface) {
+ self::$ConfigFactory = new XmlHandler(XML_CONFIG_FILE);
+ }
+
+ return self::$ConfigFactory;
+ }
+
+ /**
+ * Devuelve el manejador para la BD
+ *
+ * @return DBStorageInterface
+ */
+ public static final function getDBStorage()
+ {
+ if (!self::$DBFactory instanceof DBStorageInterface) {
+ self::$DBFactory = new MySQLHandler();
+ }
+
+ return self::$DBFactory;
+ }
+
+ /**
+ * Devuelve la instancia de la clase del elemento solicitado
+ *
+ * @param string $caller La clase del objeto
+ * @param mixed $itemData Los datos del elemento
+ * @return ItemBase
+ */
+ public static final function getItem($caller, $itemData = null)
+ {
+// error_log(count(self::$ItemFactory) . '-' . (memory_get_usage() / 1000));
+
+ try {
+ if (isset(self::$ItemFactory[$caller])) {
+ return (null !== $itemData) ? self::$ItemFactory[$caller]->setItemData($itemData) : self::$ItemFactory[$caller];
+ }
+ } catch (InvalidClassException $e) {
+ debugLog('Invalid class for item data: ' . $e->getMessage(), true);
+ }
+
+ self::$ItemFactory[$caller] = new $caller($itemData);
+
+ return self::$ItemFactory[$caller];
+ }
+
+ /**
+ * Devuelve el manejador para el tema visual
+ *
+ * @return ThemeInterface
+ */
+ public static final function getTheme()
+ {
+ if (!self::$ThemeFactory instanceof Theme) {
+ self::$ThemeFactory = new Theme();
+ }
+
+ return self::$ThemeFactory;
+ }
+
+ /**
+ * Devuelve el manejador de eventos
+ *
+ * @return EventDispatcherInterface
+ */
+ public static final function getEventDispatcher()
+ {
+ if (!self::$EventDispatcher instanceof EventDispatcher) {
+ self::$EventDispatcher = new EventDispatcher();
+ }
+
+ return self::$EventDispatcher;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Core/Events/EventDispatcher.class.php b/inc/SP/Core/Events/EventDispatcher.class.php
new file mode 100644
index 00000000..3489dea6
--- /dev/null
+++ b/inc/SP/Core/Events/EventDispatcher.class.php
@@ -0,0 +1,35 @@
+.
+ */
+
+namespace SP\Core\Events;
+
+/**
+ * Class EventDispatcher
+ *
+ * @package SP\Core\EventDispatcher
+ */
+class EventDispatcher extends EventDispatcherBase
+{
+
+}
\ No newline at end of file
diff --git a/inc/SP/Core/Events/EventDispatcherBase.class.php b/inc/SP/Core/Events/EventDispatcherBase.class.php
new file mode 100644
index 00000000..93ec1739
--- /dev/null
+++ b/inc/SP/Core/Events/EventDispatcherBase.class.php
@@ -0,0 +1,119 @@
+.
+ */
+
+namespace SP\Core\Events;
+
+use SP\Core\Exceptions\InvalidArgumentException;
+use SP\Core\Exceptions\InvalidClassException;
+use SP\Core\Exceptions\SPException;
+use SplObserver;
+
+/**
+ * Class EventDispatcherBase
+ *
+ * @package SP\Core\Events
+ */
+abstract class EventDispatcherBase implements EventDispatcherInterface
+{
+ /**
+ * @var EventReceiver[]
+ */
+ protected $observers = [];
+
+ /**
+ * Attach an SplObserver
+ *
+ * @link http://php.net/manual/en/splsubject.attach.php
+ * @param SplObserver $observer
+ * The SplObserver to attach.
+ *
+ * @since 5.1.0
+ */
+ public function attach(SplObserver $observer)
+ {
+ $observerClass = get_class($observer);
+
+ if (array_key_exists($observerClass, $this->observers)) {
+ return;
+// throw new InvalidClassException(sprintf(__('Observador ya inicializado "%s"'), $observerClass));
+ }
+
+ $this->observers[$observerClass] = $observer;
+ }
+
+ /**
+ * Detach an observer
+ *
+ * @link http://php.net/manual/en/splsubject.detach.php
+ * @param SplObserver $observer
+ * The SplObserver to detach.
+ *
+ * @throws InvalidClassException
+ * @since 5.1.0
+ */
+ public function detach(SplObserver $observer)
+ {
+ $observerClass = get_class($observer);
+
+ if (!array_key_exists($observerClass, $this->observers)) {
+ throw new InvalidClassException(__('Observador no inicializado'));
+ }
+
+ unset($this->observers[$observerClass]);
+ }
+
+ /**
+ * Notify an observer
+ *
+ * @link http://php.net/manual/en/splsubject.notify.php
+ * @return void
+ * @since 5.1.0
+ */
+ public function notify()
+ {
+ foreach ($this->observers as $observer) {
+ $observer->update($this);
+ }
+ }
+
+ /**
+ * Notificar un evento
+ *
+ * @param string $event
+ * @param mixed $object
+ * @throws \SP\Core\Exceptions\InvalidArgumentException
+ */
+ public function notifyEvent($event, $object)
+ {
+ if (!is_object($object)) {
+ throw new InvalidArgumentException(SPException::SP_ERROR, __('Es necesario un objeto'));
+ }
+
+ foreach ($this->observers as $observer) {
+ if (in_array($event, $observer->getEvents(), true)) {
+ $observer->updateEvent($event, $object);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Core/Events/EventDispatcherInterface.class.php b/inc/SP/Core/Events/EventDispatcherInterface.class.php
new file mode 100644
index 00000000..d6adf07f
--- /dev/null
+++ b/inc/SP/Core/Events/EventDispatcherInterface.class.php
@@ -0,0 +1,42 @@
+.
+ */
+
+namespace SP\Core\Events;
+
+/**
+ * Interface EventDispatcherInterface
+ *
+ * @package SP\Core\EventDispatcher
+ */
+interface EventDispatcherInterface extends \SplSubject
+{
+ /**
+ * Notificar a los observadores y establecer el estado
+ *
+ * @param string $event Nombre del evento
+ * @param mixed $object Objeto del evento
+ * @return
+ */
+ public function notifyEvent($event, $object);
+}
\ No newline at end of file
diff --git a/inc/SP/Core/Events/EventReceiver.class.php b/inc/SP/Core/Events/EventReceiver.class.php
new file mode 100644
index 00000000..640d5565
--- /dev/null
+++ b/inc/SP/Core/Events/EventReceiver.class.php
@@ -0,0 +1,70 @@
+.
+ */
+
+namespace SP\Core\Events;
+
+use SplObserver;
+
+/**
+ * Interface EventReceiver
+ *
+ * @package SP\Core\Events
+ */
+interface EventReceiver extends SplObserver
+{
+ /**
+ * Inicialización del observador
+ */
+ public function init();
+
+ /**
+ * Evento de actualización
+ *
+ * @param string $event Nombre del evento
+ * @param object $object Objeto del evento
+ * @return
+ */
+ public function updateEvent($event, $object);
+
+ /**
+ * Devuelve los eventos que implementa el observador
+ *
+ * @return array
+ */
+ public function getEvents();
+
+ /**
+ * Devuelve los recursos Javascript necesarios para el plugin
+ *
+ * @return array
+ */
+ public function getJsResources();
+
+ /**
+ * Devuelve los recursos CSS necesarios para el plugin
+ *
+ * @return array
+ */
+ public function getCssResources();
+}
\ No newline at end of file
diff --git a/inc/SP/Core/Exceptions/AuthException.class.php b/inc/SP/Core/Exceptions/AuthException.class.php
new file mode 100644
index 00000000..264cce05
--- /dev/null
+++ b/inc/SP/Core/Exceptions/AuthException.class.php
@@ -0,0 +1,36 @@
+.
+ */
+
+namespace SP\Core\Exceptions;
+
+
+/**
+ * Class AuthException
+ *
+ * @package SP\Core\Exceptions
+ */
+class AuthException extends SPException
+{
+
+}
\ No newline at end of file
diff --git a/inc/SP/Core/Exceptions/ConstraintException.class.php b/inc/SP/Core/Exceptions/ConstraintException.class.php
new file mode 100644
index 00000000..84f3dc07
--- /dev/null
+++ b/inc/SP/Core/Exceptions/ConstraintException.class.php
@@ -0,0 +1,35 @@
+.
+ */
+
+namespace SP\Core\Exceptions;
+
+/**
+ * Class ConstraintException
+ *
+ * @package SP\Core\Exceptions
+ */
+class ConstraintException extends SPException
+{
+
+}
\ No newline at end of file
diff --git a/inc/SP/Core/Exceptions/FileNotFoundException.class.php b/inc/SP/Core/Exceptions/FileNotFoundException.class.php
new file mode 100644
index 00000000..6a1c0982
--- /dev/null
+++ b/inc/SP/Core/Exceptions/FileNotFoundException.class.php
@@ -0,0 +1,35 @@
+.
+ */
+
+namespace SP\Core\Exceptions;
+
+/**
+ * Class FileNotFoundException
+ *
+ * @package SP\Core\Exceptions
+ */
+class FileNotFoundException extends SPException
+{
+
+}
\ No newline at end of file
diff --git a/inc/SP/Core/Exceptions/InvalidArgumentException.class.php b/inc/SP/Core/Exceptions/InvalidArgumentException.class.php
new file mode 100644
index 00000000..49739dad
--- /dev/null
+++ b/inc/SP/Core/Exceptions/InvalidArgumentException.class.php
@@ -0,0 +1,35 @@
+.
+ */
+
+namespace SP\Core\Exceptions;
+
+/**
+ * Class InvalidArgumentException
+ *
+ * @package SP\Core\Exceptions
+ */
+class InvalidArgumentException extends SPException
+{
+
+}
\ No newline at end of file
diff --git a/inc/SP/Core/Exceptions/InvalidClassException.class.php b/inc/SP/Core/Exceptions/InvalidClassException.class.php
new file mode 100644
index 00000000..05b6f7b7
--- /dev/null
+++ b/inc/SP/Core/Exceptions/InvalidClassException.class.php
@@ -0,0 +1,35 @@
+.
+ */
+
+namespace SP\Core\Exceptions;
+
+/**
+ * Class InvalidClassException
+ *
+ * @package SP\Core\Exceptions
+ */
+class InvalidClassException extends SPException
+{
+
+}
\ No newline at end of file
diff --git a/inc/SP/Core/Exceptions/ItemException.class.php b/inc/SP/Core/Exceptions/ItemException.class.php
new file mode 100644
index 00000000..eaa7399d
--- /dev/null
+++ b/inc/SP/Core/Exceptions/ItemException.class.php
@@ -0,0 +1,36 @@
+.
+ */
+
+namespace SP\Core\Exceptions;
+
+
+/**
+ * Class ItemException
+ *
+ * @package SP\Core\Exceptions
+ */
+class ItemException extends \Exception
+{
+
+}
\ No newline at end of file
diff --git a/inc/themes/classic/index.php b/inc/SP/Core/Exceptions/QueryException.class.php
similarity index 65%
rename from inc/themes/classic/index.php
rename to inc/SP/Core/Exceptions/QueryException.class.php
index f66b356e..b13b0b28 100644
--- a/inc/themes/classic/index.php
+++ b/inc/SP/Core/Exceptions/QueryException.class.php
@@ -4,7 +4,7 @@
*
* @author nuxsmin
* @link http://syspass.org
- * @copyright 2012-2015 Rubén Domínguez nuxsmin@syspass.org
+ * @copyright 2012-2017, Rubén Domínguez nuxsmin@$syspass.org
*
* This file is part of sysPass.
*
@@ -19,15 +19,17 @@
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with sysPass. If not, see .
- *
+ * along with sysPass. If not, see .
*/
-$themeInfo = array(
- 'name' => 'Classic',
- 'creator' => 'nuxsmin',
- 'version' => '1.0',
- 'targetversion' => '1.2.0',
- 'js' => array('functions.min.js'),
- 'css' => array('jquery-ui.theme.min.css', 'styles.min.css')
-);
+namespace SP\Core\Exceptions;
+
+/**
+ * Class QueryException
+ *
+ * @package SP\Core\Exceptions
+ */
+class QueryException extends SPException
+{
+
+}
\ No newline at end of file
diff --git a/inc/SPException.class.php b/inc/SP/Core/Exceptions/SPException.class.php
similarity index 56%
rename from inc/SPException.class.php
rename to inc/SP/Core/Exceptions/SPException.class.php
index e93a2093..c2db36a8 100644
--- a/inc/SPException.class.php
+++ b/inc/SP/Core/Exceptions/SPException.class.php
@@ -1,10 +1,10 @@
.
- *
+ * along with sysPass. If not, see .
*/
-namespace SP;
+namespace SP\Core\Exceptions;
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+use Exception;
+
+defined('APP_ROOT') || die();
/**
* Extender la clase Exception para mostrar ayuda en los mensajes
*/
-class SPException extends \Exception{
+class SPException extends Exception
+{
/**
* Constantes para tipos de excepción
*/
const SP_OK = 0;
const SP_CRITICAL = 1;
const SP_WARNING = 2;
+ const SP_ERROR = 3;
+ const SP_INFO = 4;
/**
* @var int Tipo de excepción
*/
- private $_type = 0;
+ protected $type = 0;
/**
* @var string Ayuda de la excepción
*/
- private $_hint = '';
+ protected $hint = '';
+ /**
+ * SPException constructor.
+ *
+ * @param string $type
+ * @param string $message
+ * @param string $hint
+ * @param int $code
+ * @param Exception|null $previous
+ */
public function __construct($type, $message, $hint = '', $code = 0, \Exception $previous = null)
{
- $this->_type = $type;
- $this->_hint = $hint;
+ $this->type = $type;
+ $this->hint = $hint;
parent::__construct($message, $code, $previous);
}
- public function __toString()
+ /**
+ * @param $type
+ * @return mixed
+ */
+ public static function getExceptionTypeName($type)
{
- 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(
+ $typeName = [
self::SP_OK => 'ok',
self::SP_CRITICAL => 'critical',
- self::SP_WARNING => 'warning'
- );
+ self::SP_WARNING => 'warning',
+ self::SP_ERROR => 'error'
+ ];
return $typeName[$type];
}
+
+ /**
+ * @return string
+ */
+ public function __toString()
+ {
+ return __CLASS__ . ": [{$this->code}]: {$this->message} ({$this->hint})\n";
+ }
+
+ /**
+ * @return string
+ */
+ public function getHint()
+ {
+ return $this->hint;
+ }
+
+ /**
+ * @return int|string
+ */
+ public function getType()
+ {
+ return $this->type;
+ }
}
\ No newline at end of file
diff --git a/inc/SP/Core/Exceptions/ValidationException.class.php b/inc/SP/Core/Exceptions/ValidationException.class.php
new file mode 100644
index 00000000..75dd90a0
--- /dev/null
+++ b/inc/SP/Core/Exceptions/ValidationException.class.php
@@ -0,0 +1,35 @@
+.
+ */
+
+namespace SP\Core\Exceptions;
+
+/**
+ * Class ValidationException para excepciones en validación de formularios
+ *
+ * @package SP\Core\Exceptions
+ */
+class ValidationException extends \Exception
+{
+
+}
\ No newline at end of file
diff --git a/inc/SP/Core/Init.class.php b/inc/SP/Core/Init.class.php
new file mode 100644
index 00000000..13747381
--- /dev/null
+++ b/inc/SP/Core/Init.class.php
@@ -0,0 +1,809 @@
+.
+ */
+
+namespace SP\Core;
+
+use SP\Account\AccountAcl;
+use SP\Auth\Browser\Browser;
+use SP\Config\Config;
+use SP\Config\ConfigDB;
+use SP\Controller\MainController;
+use SP\Core\Exceptions\SPException;
+use SP\Core\Plugin\PluginUtil;
+use SP\Http\JsonResponse;
+use SP\Http\Request;
+use SP\Log\Email;
+use SP\Log\Log;
+use SP\Mgmt\Profiles\Profile;
+use SP\Storage\DBUtil;
+use SP\Util\Checks;
+use SP\Util\Json;
+use SP\Util\Util;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Clase Init para la inicialización del entorno de sysPass
+ *
+ * @package SP
+ */
+class Init
+{
+ /**
+ * @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 bool True if sysPass has been updated. Only for notices.
+ */
+ public static $UPDATED = false;
+ /**
+ * @var int
+ */
+ public static $LOCK = 0;
+ /**
+ * @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.
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \phpmailer\phpmailerException
+ */
+ public static function start()
+ {
+ if (date_default_timezone_get() === 'UTC') {
+ date_default_timezone_set('UTC');
+ }
+
+ // Variables de autentificación
+ self::setAuth();
+
+ // Establecer el nivel de logging
+ self::setLogging();
+
+ // Cargar las extensiones
+ self::loadExtensions();
+
+ // Iniciar la sesión de PHP
+ self::startSession();
+
+ // Establecer las rutas de la aplicación
+ self::setPaths();
+
+ // Cargar la configuración
+ self::loadConfig();
+
+ // Cargar el lenguaje
+ Language::setLanguage();
+
+ // Establecer el tema de sysPass
+ DiFactory::getTheme();
+
+ // Comprobar si es necesario cambiar a HTTPS
+ self::checkHttps();
+
+ // Comprobar si es necesario inicialización
+ if (self::checkInitSourceInclude() ||
+ (defined('IS_INSTALLER') && Checks::isAjax())
+ ) {
+ return;
+ }
+
+ if (!Checks::checkPhpVersion()) {
+ self::initError(
+ __('Versión de PHP requerida >= ') . ' 5.6.0 <= 7.0',
+ __('Actualice la versión de PHP para que la aplicación funcione correctamente'));
+ }
+
+ // Volver a cargar la configuración si se recarga la página
+ if (Request::checkReload()) {
+ Config::loadConfig(true);
+
+ // Restablecer el idioma y el tema visual
+ Language::setLanguage(true);
+ DiFactory::getTheme()->initTheme(true);
+
+ if (self::isLoggedIn()){
+ // Recargar los permisos del perfil de usuario
+ Session::setUserProfile(Profile::getItem()->getById(Session::getUserData()->getUserProfileId()));
+ // Reset de los datos de ACL de cuentas
+ AccountAcl::resetData();
+ }
+ }
+
+ // Comprobar si está instalado
+ self::checkInstalled();
+
+ // Comprobar si el modo mantenimiento está activado
+ self::checkMaintenanceMode();
+
+ // Comprobar si la Base de datos existe
+ if (!DBUtil::checkDatabaseExist()) {
+ self::initError(__('Error en la verificación de la base de datos'));
+ }
+
+ // Comprobar si es cierre de sesión
+ self::checkLogout();
+
+ // Comprobar la versión y actualizarla
+ self::checkDbVersion();
+
+ // Inicializar la sesión
+ self::initSession();
+
+ // Cargar los plugins
+ self::loadPlugins();
+
+ // Comprobar acciones en URL
+ self::checkPreLoginActions();
+
+ // Intentar establecer el tiempo de vida de la sesión en PHP
+ @ini_set('gc_maxlifetime', self::getSessionLifeTime());
+
+ if (!Config::getConfig()->isInstalled()) {
+ Session::setUserData();
+ }
+
+ // Si es una petición AJAX
+ if (Request::analyze('isAjax', false, true)) {
+ return;
+ }
+
+ if (self::isLoggedIn() === true && Session::getAuthCompleted() === true) {
+ $AuthBrowser = new Browser();
+
+ // Comprobar si se ha identificado mediante el servidor web y el usuario coincide
+ if ($AuthBrowser->checkServerAuthUser(Session::getUserData()->getUserLogin()) === false) {
+ self::logout();
+ // Denegar la redirección si la URL contiene una @
+ // Esto previene redirecciones como ?redirect_url=:user@domain.com
+ } elseif (Request::analyze('redirect_url', '', true) && strpos('index.php', '@') === false) {
+ header('Location: ' . 'index.php');
+ }
+
+ return;
+ }
+
+ // El usuario no está logado y no es una petición, redirigir al login
+ self::goLogin();
+ }
+
+ /**
+ * Establecer variables de autentificación
+ */
+ private static function setAuth()
+ {
+ // Copiar la cabecera http de autentificación para apache+php-fcgid
+ if (isset($_SERVER['HTTP_XAUTHORIZATION']) && !isset($_SERVER['HTTP_AUTHORIZATION'])) {
+ $_SERVER['HTTP_AUTHORIZATION'] = $_SERVER['HTTP_XAUTHORIZATION'];
+ }
+ // Establecer las cabeceras de autentificación para apache+php-cgi
+ if (isset($_SERVER['HTTP_AUTHORIZATION'])
+ && preg_match('/Basic\s+(.*)$/i', $_SERVER['HTTP_AUTHORIZATION'], $matches)
+ ) {
+ list($name, $password) = explode(':', base64_decode($matches[1]), 2);
+ $_SERVER['PHP_AUTH_USER'] = strip_tags($name);
+ $_SERVER['PHP_AUTH_PW'] = strip_tags($password);
+ }
+ // Establecer las cabeceras de autentificación para que apache+php-cgi funcione si la variable es renombrada por apache
+ if (isset($_SERVER['REDIRECT_HTTP_AUTHORIZATION'])
+ && preg_match('/Basic\s+(.*)$/i', $_SERVER['REDIRECT_HTTP_AUTHORIZATION'], $matches)
+ ) {
+ list($name, $password) = explode(':', base64_decode($matches[1]), 2);
+ $_SERVER['PHP_AUTH_USER'] = strip_tags($name);
+ $_SERVER['PHP_AUTH_PW'] = strip_tags($password);
+ }
+ }
+
+ /**
+ * Establecer el nivel de logging
+ */
+ public static function setLogging()
+ {
+ // Establecer el modo debug si una sesión de xdebug está activa
+ if (isset($_COOKIE['XDEBUG_SESSION']) && !defined('DEBUG')) {
+ define('DEBUG', true);
+ }
+ if (defined('DEBUG') && 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 clases de las extensiones de sysPass
+ */
+ private static function loadExtensions()
+ {
+ $PhpSecLoader = new \SplClassLoader('phpseclib', EXTENSIONS_PATH);
+ $PhpSecLoader->setPrepend(false);
+ $PhpSecLoader->register();
+
+ $PhpMailerLoader = new \SplClassLoader('phpmailer', EXTENSIONS_PATH);
+ $PhpMailerLoader->setPrepend(false);
+ $PhpMailerLoader->register();
+
+ $ExtsLoader = new \SplClassLoader('Exts', BASE_DIR);
+ $ExtsLoader->setFileExtension('.class.php');
+ $ExtsLoader->setPrepend(false);
+ $ExtsLoader->register();
+
+ $PluginsLoader = new \SplClassLoader('Plugins', BASE_DIR);
+ $PluginsLoader->setFileExtension('.class.php');
+ $PluginsLoader->setPrepend(false);
+ $PluginsLoader->register();
+ }
+
+ /**
+ * Iniciar la sesión PHP
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ 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::writeNewLog(__('Sesión', false), __('La sesión no puede ser inicializada', false));
+
+ header('HTTP/1.1 500 Internal Server Error');
+
+ self::initError(__('La sesión no puede ser inicializada'), __('Consulte con el administrador'));
+ }
+ }
+
+ /**
+ * Devuelve un error utilizando la plantilla de error o en formato JSON
+ *
+ * @param string $message con la descripción del error
+ * @param string $hint opcional, con una ayuda sobre el error
+ * @param bool $headers
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public static function initError($message, $hint = '', $headers = false)
+ {
+ debugLog(__FUNCTION__);
+ debugLog($message);
+ debugLog($hint);
+
+ if (Checks::isJson()) {
+ $JsonResponse = new JsonResponse();
+ $JsonResponse->setDescription($message);
+ $JsonResponse->addMessage($hint);
+ Json::returnJson($JsonResponse);
+ } elseif ($headers === true) {
+ header('HTTP/1.1 503 Service Temporarily Unavailable');
+ header('Status: 503 Service Temporarily Unavailable');
+ header('Retry-After: 120');
+ }
+
+ SessionUtil::cleanSession();
+
+ $Tpl = new Template();
+ $Tpl->append('errors', ['type' => SPException::SP_CRITICAL, 'description' => $message, 'hint' => $hint]);
+
+ $Controller = new MainController($Tpl, 'error', !Checks::isAjax());
+ $Controller->getError();
+ }
+
+ /**
+ * 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
+ */
+ private static function setPaths()
+ {
+ // Calcular los directorios raíz
+ $dir = substr(__DIR__, 0, strpos(__DIR__, str_replace('\\', '/', __NAMESPACE__)) - 1);
+
+ self::$SERVERROOT = substr($dir, 0, strripos($dir, DIRECTORY_SEPARATOR));
+
+ 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 .= '/';
+ }
+ self::$SUBURI .= 'index.php';
+ }
+ }
+
+ $pos = strpos($scriptName, self::$SUBURI);
+
+ if ($pos === false) {
+ $pos = strpos($scriptName, '?');
+ }
+
+ self::$WEBROOT = substr($scriptName, 0, $pos);
+
+ if (self::$WEBROOT !== '' && self::$WEBROOT[0] !== '/') {
+ self::$WEBROOT = '/' . self::$WEBROOT;
+ }
+
+ $protocol = isset($_SERVER['HTTPS']) ? 'https://' : 'http://';
+ self::$WEBURI .= $protocol . $_SERVER['HTTP_HOST'] . self::$WEBROOT;
+ }
+
+ /**
+ * Cargar la configuración
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ private static function loadConfig()
+ {
+ // Comprobar si es una versión antigua
+ self::checkConfigVersion();
+
+ // Comprobar la configuración y cargar
+ self::checkConfig();
+
+ Config::loadConfig();
+ }
+
+ /**
+ * Comprobar la versión de configuración y actualizarla
+ */
+ private static function checkConfigVersion()
+ {
+ $appVersion = (int)implode(Util::getVersion(true));
+
+ if (file_exists(CONFIG_FILE) && Upgrade::upgradeOldConfigFile($appVersion)) {
+ self::logConfigUpgrade($appVersion);
+
+ self::$UPDATED = true;
+
+ return;
+ }
+
+ $configVersion = (int)Config::getConfig()->getConfigVersion();
+
+ if (Config::getConfig()->isInstalled()
+ && $configVersion < $appVersion
+ && Upgrade::needConfigUpgrade($configVersion)
+ && Upgrade::upgradeConfig($configVersion)
+ ) {
+ self::logConfigUpgrade($appVersion);
+
+ self::$UPDATED = true;
+ }
+ }
+
+ /**
+ * Registrar la actualización de la configuración
+ *
+ * @param $version
+ */
+ private static function logConfigUpgrade($version)
+ {
+ $Log = new Log();
+ $LogMessage = $Log->getLogMessage();
+ $LogMessage->setAction(__('Actualización', false));
+ $LogMessage->addDescription(__('Actualización de versión realizada.', false));
+ $LogMessage->addDetails(__('Versión', false), $version);
+ $LogMessage->addDetails(__('Tipo', false), 'config');
+ $Log->writeLog();
+
+ Email::sendEmail($LogMessage);
+ }
+
+ /**
+ * Comprobar el archivo de configuración.
+ * Esta función comprueba que el archivo de configuración exista y los permisos sean correctos.
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ private static function checkConfig()
+ {
+ if (self::checkInitSourceInclude()) {
+ return;
+ }
+
+ if (!is_dir(self::$SERVERROOT . DIRECTORY_SEPARATOR . 'config')) {
+ clearstatcache();
+ self::initError(__('El directorio "/config" no existe'));
+ }
+
+ if (!is_writable(self::$SERVERROOT . DIRECTORY_SEPARATOR . 'config')) {
+ clearstatcache();
+ self::initError(__('No es posible escribir en el directorio "config"'));
+ }
+
+ $configPerms = decoct(fileperms(self::$SERVERROOT . DIRECTORY_SEPARATOR . 'config') & 0777);
+
+ if ($configPerms !== '750' && !Checks::checkIsWindows()) {
+ clearstatcache();
+ self::initError(__('Los permisos del directorio "/config" son incorrectos'), __('Actual:') . ' ' . $configPerms . ' - ' . __('Necesario: 750'));
+ }
+ }
+
+ /**
+ * Comprobar el archivo que realiza el include necesita inicialización.
+ *
+ * @returns bool
+ */
+ private static function checkInitSourceInclude()
+ {
+ $srcScript = pathinfo($_SERVER['SCRIPT_NAME'], PATHINFO_BASENAME);
+ $skipInit = ['js.php', 'css.php', 'api.php', 'ajax_getEnvironment.php'];
+
+ return in_array($srcScript, $skipInit, true);
+ }
+
+ /**
+ * Comprobar y forzar (si es necesario) la conexión HTTPS
+ */
+ private static function checkHttps()
+ {
+ if (Checks::forceHttpsIsEnabled() && !Checks::httpsEnabled()) {
+ $port = ($_SERVER['SERVER_PORT'] !== 443) ? ':' . $_SERVER['SERVER_PORT'] : '';
+ $fullUrl = 'https://' . $_SERVER['SERVER_NAME'] . $port . $_SERVER['REQUEST_URI'];
+ header('Location: ' . $fullUrl);
+ }
+ }
+
+ /**
+ * Comprueba que la aplicación esté instalada
+ * Esta función comprueba si la aplicación está instalada. Si no lo está, redirige al instalador.
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ private static function checkInstalled()
+ {
+ // Redirigir al instalador si no está instalada
+ if (!Config::getConfig()->isInstalled()) {
+ if (self::$SUBURI !== '/index.php') {
+ $url = 'http://' . $_SERVER['SERVER_NAME'] . ':' . $_SERVER['SERVER_PORT'] . self::$WEBROOT . '/index.php';
+ header("Location: $url");
+ exit();
+ } else {
+ if (Session::getAuthCompleted()) {
+ session_destroy();
+
+ self::start();
+ return;
+ }
+
+ // Comprobar si sysPass está instalada o en modo mantenimiento
+ $Controller = new MainController();
+ $Controller->getInstaller();
+ $Controller->view();
+ exit();
+ }
+ }
+ }
+
+ /**
+ * Comprobar si el modo mantenimiento está activado
+ * Esta función comprueba si el modo mantenimiento está activado.
+ * Devuelve un error 503 y un reintento de 120s al cliente.
+ *
+ * @param bool $check sólo comprobar si está activado el modo
+ * @return bool
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public static function checkMaintenanceMode($check = false)
+ {
+ if (Config::getConfig()->isMaintenance()) {
+ self::$LOCK = Util::getAppLock();
+
+ if ($check === true
+ || Checks::isAjax()
+ || Request::analyze('upgrade', 0) === 1
+ || Request::analyze('nodbupgrade', 0) === 1
+ || (self::$LOCK > 0 && self::isLoggedIn() && self::$LOCK === Session::getUserData()->getUserId())
+ ) {
+ return true;
+ }
+
+ self::initError(__('Aplicación en mantenimiento'), __('En breve estará operativa'));
+ }
+
+ return false;
+ }
+
+ /**
+ * Comprobar si el usuario está logado.
+ *
+ * @returns bool
+ */
+ public static function isLoggedIn()
+ {
+ return (DiFactory::getDBStorage()->getDbStatus() === 0 && Session::getUserData()->getUserLogin());
+ }
+
+ /**
+ * 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();
+ }
+
+ /**
+ * 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);
+
+ $Log = new Log();
+ $LogMessage = $Log->getLogMessage();
+ $LogMessage->setAction(__('Finalizar sesión', false));
+ $LogMessage->addDetails(__('Usuario', false), Session::getUserData()->getUserLogin());
+ $LogMessage->addDetails(__('Tiempo inactivo', false), $inactiveTime . ' min.');
+ $LogMessage->addDetails(__('Tiempo total', false), $totalTime . ' min.');
+ $Log->writeLog();
+ }
+
+ /**
+ * Mostrar la página de login
+ */
+ private static function goLogin()
+ {
+ SessionUtil::cleanSession();
+
+ $Controller = new MainController();
+ $Controller->getLogin();
+ }
+
+ /**
+ * Comrpueba y actualiza la versión de la aplicación.
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ private static function checkDbVersion()
+ {
+ if (self::$SUBURI !== '/index.php' || Request::analyze('logout', 0) === 1) {
+ return;
+ }
+
+ $update = false;
+ $databaseVersion = (int)str_replace('.', '', ConfigDB::getValue('version'));
+ $appVersion = (int)implode(Util::getVersion(true));
+
+ if ($databaseVersion < $appVersion
+ && Request::analyze('nodbupgrade', 0) === 0
+ && Upgrade::needDBUpgrade($databaseVersion)
+ ) {
+ if (!self::checkMaintenanceMode(true)) {
+ $upgradeKey = Config::getConfig()->getUpgradeKey();
+
+ if (empty($upgradeKey)) {
+ Config::getConfig()->setUpgradeKey(sha1(uniqid(mt_rand(), true)));
+ Config::getConfig()->setMaintenance(true);
+ Config::saveConfig(null, false);
+ }
+
+ self::initError(__('La aplicación necesita actualizarse'), sprintf(__('Si es un administrador pulse en el enlace: %s'), '' . __('Actualizar') . ''));
+ } else {
+ $action = Request::analyze('a');
+ $hash = Request::analyze('h');
+ $confirm = Request::analyze('chkConfirm', false, false, true);
+
+ if ($confirm === true
+ && $action === 'upgrade'
+ && $hash === Config::getConfig()->getUpgradeKey()
+ ) {
+ try {
+ $update = Upgrade::doUpgrade($databaseVersion);
+
+ ConfigDB::setValue('version', $appVersion);
+ Config::getConfig()->setMaintenance(false);
+ Config::getConfig()->setUpgradeKey('');
+ Config::saveConfig();
+ } catch (SPException $e) {
+ $hint = $e->getHint() . '';
+ self::initError($e->getMessage(), $hint);
+ }
+ } else {
+ $controller = new MainController();
+ $controller->getUpgrade();
+ }
+ }
+ }
+
+ if ($update === true) {
+ $Log = new Log();
+ $LogMessage = $Log->getLogMessage();
+ $LogMessage->setAction(__('Actualización', false));
+ $LogMessage->addDescription(__('Actualización de versión realizada.', false));
+ $LogMessage->addDetails(__('Versión', false), $appVersion);
+ $LogMessage->addDetails(__('Tipo', false), 'db');
+ $Log->writeLog();
+
+ Email::sendEmail($LogMessage);
+
+ self::$UPDATED = true;
+ }
+ }
+
+ /**
+ * Inicialiar la sesión de usuario
+ */
+ private static function initSession()
+ {
+ $sessionLifeTime = self::getSessionLifeTime();
+
+ // Timeout de sesión
+ if (Session::getLastActivity() && (time() - Session::getLastActivity() > $sessionLifeTime)) {
+ if (isset($_COOKIE[session_name()])) {
+ setcookie(session_name(), '', time() - 42000, '/');
+ }
+
+ self::wrLogoutInfo();
+
+ session_unset();
+ session_destroy();
+ session_start();
+ return;
+ }
+
+ // Regenerar el Id de sesión periódicamente para evitar fijación
+ if (Session::getSidStartTime() === 0) {
+ Session::setSidStartTime(time());
+ Session::setStartActivity(time());
+ } else if (Session::getUserData()->getUserId() > 0 && time() - Session::getSidStartTime() > $sessionLifeTime / 2) {
+ $sessionMPass = SessionUtil::getSessionMPass();
+ session_regenerate_id(true);
+ Session::setSidStartTime(time());
+ // Recargar los permisos del perfil de usuario
+ Session::setUserProfile(Profile::getItem()->getById(Session::getUserData()->getUserProfileId()));
+ // Regenerar la clave maestra
+ SessionUtil::saveSessionMPass($sessionMPass);
+ }
+
+ Session::setLastActivity(time());
+ }
+
+ /**
+ * Obtener el timeout de sesión desde la configuración.
+ *
+ * @return int con el tiempo en segundos
+ */
+ private static function getSessionLifeTime()
+ {
+ if (null === Session::getSessionTimeout()) {
+ Session::setSessionTimeout(Config::getConfig()->getSessionTimeout());
+ }
+
+ return Session::getSessionTimeout();
+ }
+
+ /**
+ * Cargar los Plugins disponibles
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public static function loadPlugins()
+ {
+ foreach (PluginUtil::getPlugins() as $plugin) {
+ $Plugin = PluginUtil::loadPlugin($plugin);
+
+ if ($Plugin !== false) {
+ DiFactory::getEventDispatcher()->attach($Plugin);
+ }
+ }
+
+ Session::setPluginsLoaded(PluginUtil::getLoadedPlugins());
+ Session::setPluginsDisabled(PluginUtil::getDisabledPlugins());
+ }
+
+ /**
+ * Comprobar si hay que ejecutar acciones de URL antes de presentar la pantalla de login.
+ *
+ * @return bool
+ * @throws \phpmailer\phpmailerException
+ */
+ public static function checkPreLoginActions()
+ {
+ $action = Request::analyze('a');
+
+ if ($action === '') {
+ return false;
+ }
+
+ $Controller = new MainController();
+ $Controller->doAction('prelogin.' . $action);
+
+ return true;
+ }
+
+ /**
+ * Establecer las rutas de sysPass en el PATH de PHP
+ */
+ public static function setIncludes()
+ {
+ set_include_path(MODEL_PATH . PATH_SEPARATOR . CONTROLLER_PATH . PATH_SEPARATOR . EXTENSIONS_PATH . PATH_SEPARATOR . PLUGINS_PATH . PATH_SEPARATOR . get_include_path());
+ }
+
+ /**
+ * Comprobar si hay que ejecutar acciones de URL después de realizar login.
+ *
+ * @return bool
+ * @throws \phpmailer\phpmailerException
+ */
+ public static function checkPostLoginActions()
+ {
+ $action = Request::analyze('a');
+
+ if ($action === '') {
+ return false;
+ }
+
+ $Controller = new MainController();
+ $Controller->doAction('postlogin.' . $action);
+
+ return true;
+ }
+
+ /**
+ * Devuelve el tiempo actual en coma flotante.
+ * Esta función se utiliza para calcular el tiempo de renderizado con coma flotante
+ *
+ * @returns float con el tiempo actual
+ */
+ public static function microtime_float()
+ {
+ list($usec, $sec) = explode(' ', microtime());
+ return ((float)$usec + (float)$sec);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Core/Installer.class.php b/inc/SP/Core/Installer.class.php
new file mode 100644
index 00000000..f885f646
--- /dev/null
+++ b/inc/SP/Core/Installer.class.php
@@ -0,0 +1,505 @@
+.
+ */
+
+namespace SP\Core;
+
+use PDO;
+use PDOException;
+use SP\Config\Config;
+use SP\Config\ConfigData;
+use SP\Config\ConfigDB;
+use SP\Core\Exceptions\InvalidArgumentException;
+use SP\Core\Exceptions\SPException;
+use SP\DataModel\GroupData;
+use SP\DataModel\InstallData;
+use SP\DataModel\ProfileData;
+use SP\DataModel\UserData;
+use SP\Mgmt\Groups\Group;
+use SP\Mgmt\Profiles\Profile;
+use SP\Mgmt\Users\User;
+use SP\Mgmt\Users\UserPass;
+use SP\Storage\DBUtil;
+use SP\Util\Util;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Esta clase es la encargada de instalar sysPass.
+ */
+class Installer
+{
+ /**
+ * @var PDO Instancia de conexión a la BD
+ */
+ private $DB;
+ /**
+ * @var InstallData
+ */
+ private $InstallData;
+ /**
+ * @var ConfigData
+ */
+ private $Config;
+
+ /**
+ * Installer constructor.
+ *
+ * @param InstallData $InstallData
+ */
+ public function __construct(InstallData $InstallData)
+ {
+ $this->InstallData = $InstallData;
+ }
+
+ /**
+ * Iniciar instalación.
+ *
+ * @return bool
+ * @throws SPException
+ */
+ public function install()
+ {
+ $this->checkData();
+
+ $this->Config = Config::getConfig();
+
+ // Generate a random salt that is used to salt the local user passwords
+ $this->Config->setPasswordSalt(Util::generateRandomBytes(30));
+ $this->Config->setConfigVersion(implode(Util::getVersion(true)));
+
+ if (preg_match('/unix:(.*)/', $this->InstallData->getDbHost(), $match)) {
+ $this->InstallData->setDbSocket($match[1]);
+ } elseif (preg_match('/(.*):(\d{1,5})/', $this->InstallData->getDbHost(), $match)) {
+ $this->InstallData->setDbHost($match[1]);
+ $this->InstallData->setDbPort($match[2]);
+ } else {
+ $this->InstallData->setDbPort(3306);
+ }
+
+ if (!preg_match('/(localhost|127.0.0.1)/', $this->InstallData->getDbHost())) {
+ $this->InstallData->setDbAuthHost($_SERVER['SERVER_ADDR']);
+ $this->InstallData->setDbAuthHostDns(gethostbyaddr($_SERVER['SERVER_ADDR']));
+ } else {
+ $this->InstallData->setDbAuthHost('localhost');
+ }
+
+ // Set DB connection info
+ $this->Config->setDbHost($this->InstallData->getDbHost());
+ $this->Config->setDbSocket($this->InstallData->getDbSocket());
+ $this->Config->setDbPort($this->InstallData->getDbPort());
+ $this->Config->setDbName($this->InstallData->getDbName());
+
+ // Set site config
+ $this->Config->setSiteLang($this->InstallData->getSiteLang());
+
+ $this->connectDatabase();
+ $this->setupMySQLDatabase();
+ $this->checkConnection();
+ $this->createAdminAccount();
+
+ ConfigDB::setValue('version', implode(Util::getVersion(true)));
+
+ $this->Config->setInstalled(true);
+ Config::saveConfig($this->Config);
+
+ return true;
+ }
+
+ /**
+ * @throws InvalidArgumentException
+ */
+ public function checkData()
+ {
+ if (!$this->InstallData->getAdminLogin()) {
+ throw new InvalidArgumentException(
+ SPException::SP_CRITICAL,
+ __('Indicar nombre de usuario admin', false),
+ __('Usuario admin para acceso a la aplicación', false));
+ } elseif (!$this->InstallData->getAdminPass()) {
+ throw new InvalidArgumentException(
+ SPException::SP_CRITICAL,
+ __('Indicar la clave de admin', false),
+ __('Clave del usuario admin de la aplicación', false));
+ } elseif (!$this->InstallData->getMasterPassword()) {
+ throw new InvalidArgumentException(
+ SPException::SP_CRITICAL,
+ __('Indicar la clave maestra', false),
+ __('Clave maestra para encriptar las claves', false));
+ } elseif (strlen($this->InstallData->getMasterPassword()) < 11) {
+ throw new InvalidArgumentException(
+ SPException::SP_CRITICAL,
+ __('Clave maestra muy corta', false),
+ __('La longitud de la clave maestra ha de ser mayor de 11 caracteres', false));
+ } elseif (!$this->InstallData->getDbAdminUser()) {
+ throw new InvalidArgumentException(
+ SPException::SP_CRITICAL,
+ __('Indicar el usuario de la BBDD', false),
+ __('Usuario con permisos de administrador de la Base de Datos', false));
+ } elseif (!$this->InstallData->getDbAdminPass()) {
+ throw new InvalidArgumentException(
+ SPException::SP_CRITICAL,
+ __('Indicar la clave de la BBDD'),
+ __('Clave del usuario administrador de la Base de Datos'));
+ } elseif (!$this->InstallData->getDbName()) {
+ throw new InvalidArgumentException(
+ SPException::SP_CRITICAL,
+ __('Indicar el nombre de la BBDD', false),
+ __('Nombre para la BBDD de la aplicación pej. syspass', false));
+ } elseif (substr_count($this->InstallData->getDbName(), '.') >= 1) {
+ throw new InvalidArgumentException(
+ SPException::SP_CRITICAL,
+ __('El nombre de la BBDD no puede contener "."', false),
+ __('Elimine los puntos del nombre de la Base de Datos', false));
+ } elseif (!$this->InstallData->getDbHost()) {
+ throw new InvalidArgumentException(
+ SPException::SP_CRITICAL,
+ __('Indicar el servidor de la BBDD', false),
+ __('Servidor donde se instalará la Base de Datos', false));
+ }
+ }
+
+ /**
+ * Conectar con la BBDD.
+ * Comprobar si la conexión con la base de datos para sysPass es posible con
+ * los datos facilitados.
+ *
+ * @throws SPException
+ */
+ private function connectDatabase()
+ {
+ try {
+ if (null !== $this->InstallData->getDbSocket()) {
+ $dsn = 'mysql:unix_socket=' . $this->InstallData->getDbSocket() . ';charset=utf8';
+ } else {
+ $dsn = 'mysql:host=' . $this->InstallData->getDbHost() . ';dbport=' . $this->InstallData->getDbPort() . ';charset=utf8';
+ }
+ $this->DB = new PDO($dsn, $this->InstallData->getDbAdminUser(), $this->InstallData->getDbAdminPass());
+ $this->DB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
+ } catch (PDOException $e) {
+ throw new SPException(SPException::SP_CRITICAL,
+ __('No es posible conectar con la BD', false),
+ __('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 function setupMySQLDatabase()
+ {
+ // Si no es modo hosting se crea un hash para la clave y un usuario con prefijo "sp_" para la DB
+ if (!$this->InstallData->isHostingMode()) {
+ $this->InstallData->setDbPass(Util::randomPassword());
+ $this->InstallData->setDbUser(substr('sp_' . $this->InstallData->getAdminLogin(), 0, 16));
+
+ // Comprobar si el usuario sumistrado existe
+ $query = /** @lang SQL */
+ 'SELECT COUNT(*) FROM mysql.user WHERE user = ? AND host = ?';
+
+ try {
+ $sth = $this->DB->prepare($query);
+ $sth->execute([$this->InstallData->getDbUser(), $this->InstallData->getDbAuthHost()]);
+
+ // Si no existe el usuario, se intenta crear
+ if ((int)$sth->fetchColumn() === 0
+ // Se comprueba si el nuevo usuario es distinto del creado en otra instalación
+ && $this->InstallData->getDbUser() != $this->Config->getDbUser()
+ ) {
+ $this->createDBUser();
+ }
+ } catch (PDOException $e) {
+ throw new SPException(SPException::SP_CRITICAL,
+ sprintf(__('No es posible comprobar el usuario de sysPass') . ' (%s)', $this->InstallData->getAdminLogin()),
+ __('Compruebe los permisos del usuario de conexión a la BD', false));
+ }
+
+ // Guardar el nuevo usuario/clave de conexión a la BD
+ $this->Config->setDbUser($this->InstallData->getDbUser());
+ $this->Config->setDbPass(utf8_encode($this->InstallData->getDbPass()));
+ } else {
+ // Guardar el usuario/clave de conexión a la BD
+ $this->Config->setDbUser($this->InstallData->getDbAdminUser());
+ $this->Config->setDbPass(utf8_encode($this->InstallData->getDbAdminPass()));
+ }
+
+ try {
+ $this->createMySQLDatabase();
+ $this->createDBStructure();
+ } catch (SPException $e) {
+ throw $e;
+ }
+ }
+
+ /**
+ * 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 function createDBUser()
+ {
+ if ($this->InstallData->isHostingMode()) {
+ return;
+ }
+
+ $query = /** @lang SQL */
+ 'CREATE USER `' . $this->InstallData->getDbUser() . '`@`' . $this->InstallData->getDbAuthHost() . '` IDENTIFIED BY \'' . $this->InstallData->getDbPass() . '\'';
+
+ $queryDns = /** @lang SQL */
+ 'CREATE USER `' . $this->InstallData->getDbUser() . '`@`' . $this->InstallData->getDbAuthHostDns() . '` IDENTIFIED BY \'' . $this->InstallData->getDbPass() . '\'';
+
+ try {
+ $this->DB->exec($query);
+ $this->DB->exec($queryDns);
+ $this->DB->exec('FLUSH PRIVILEGES');
+ } catch (PDOException $e) {
+ throw new SPException(
+ SPException::SP_CRITICAL,
+ sprintf(__('Error al crear el usuario de conexión a MySQL \'%s\'', false), $this->InstallData->getDbUser()),
+ $e->getMessage());
+ }
+ }
+
+ /**
+ * Crear la base de datos en MySQL.
+ *
+ * @throws SPException
+ */
+ private function createMySQLDatabase()
+ {
+ $checkDatabase = $this->checkDatabaseExist();
+
+ if ($checkDatabase && !$this->InstallData->isHostingMode()) {
+ throw new SPException(SPException::SP_CRITICAL,
+ __('La BBDD ya existe', false),
+ __('Indique una nueva Base de Datos o elimine la existente', false));
+ } elseif (!$checkDatabase && $this->InstallData->isHostingMode()) {
+ throw new SPException(SPException::SP_CRITICAL,
+ __('La BBDD no existe', false),
+ __('Es necesario crearla y asignar los permisos necesarios', false));
+ }
+
+ if (!$this->InstallData->isHostingMode()) {
+
+ try {
+ $this->DB->exec(/** @lang SQL */
+ 'CREATE SCHEMA `' . $this->InstallData->getDbName() . '` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci');
+ } catch (PDOException $e) {
+ throw new SPException(SPException::SP_CRITICAL,
+ sprintf(__('Error al crear la BBDD') . ' (%s)', $e->getMessage()),
+ __('Verifique los permisos del usuario de la Base de Datos', false));
+ }
+
+ $query = /** @lang SQL */
+ 'GRANT ALL PRIVILEGES ON `' . $this->InstallData->getDbName() . '`.*
+ TO `' . $this->InstallData->getDbUser() . '`@`' . $this->InstallData->getDbAuthHost() . '`';
+
+ $queryDns = /** @lang SQL */
+ 'GRANT ALL PRIVILEGES ON `' . $this->InstallData->getDbName() . '`.*
+ TO `' . $this->InstallData->getDbUser() . '`@`' . $this->InstallData->getDbAuthHostDns() . '`';
+
+ try {
+ $this->DB->exec($query);
+ $this->DB->exec($queryDns);
+ $this->DB->exec('FLUSH PRIVILEGES');
+ } catch (PDOException $e) {
+ $this->rollback();
+
+ throw new SPException(SPException::SP_CRITICAL,
+ sprintf(__('Error al establecer permisos de la BBDD (\'%s\')'), $e->getMessage()),
+ __('Verifique los permisos del usuario de la Base de Datos', false));
+ }
+ }
+ }
+
+ /**
+ * Comprobar si la base de datos indicada existe.
+ *
+ * @return bool
+ */
+ private function checkDatabaseExist()
+ {
+ $query = /** @lang SQL */
+ 'SELECT COUNT(*) FROM information_schema.schemata WHERE schema_name = ? LIMIT 1';
+
+ $sth = $this->DB->prepare($query);
+ $sth->execute([$this->InstallData->getDbName()]);
+
+ return ((int)$sth->fetchColumn() > 0);
+ }
+
+ /**
+ * Deshacer la instalación en caso de fallo.
+ * Esta función elimina la base de datos y el usuario de sysPass
+ */
+ private function rollback()
+ {
+ try {
+ $this->DB->exec('DROP DATABASE IF EXISTS `' . $this->InstallData->getDbName() . '`');
+ $this->DB->exec('DROP USER `' . $this->InstallData->getDbUser() . '`@`' . $this->InstallData->getDbAuthHost() . '`');
+ $this->DB->exec('DROP USER `' . $this->InstallData->getDbUser() . '`@`' . $this->InstallData->getDbAuthHostDns() . '`');
+ $this->DB->exec('DROP USER `' . $this->InstallData->getDbUser() . '`@`%`');
+ } catch (PDOException $e) {
+ debugLog($e->getMessage());
+
+ 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 SPException
+ */
+ private function createDBStructure()
+ {
+ $fileName = SQL_PATH . DIRECTORY_SEPARATOR . 'dbstructure.sql';
+
+ if (!file_exists($fileName)) {
+ throw new SPException(SPException::SP_CRITICAL,
+ __('El archivo de estructura de la BBDD no existe', false),
+ __('No es posible crear la BBDD de la aplicación. Descárguela de nuevo.', false));
+ }
+
+ // Usar la base de datos de sysPass
+ try {
+ $this->DB->exec('USE `' . $this->InstallData->getDbName() . '`');
+ } catch (PDOException $e) {
+ throw new SPException(SPException::SP_CRITICAL,
+ sprintf(__('Error al seleccionar la BBDD') . ' \'%s\' (%s)', $this->InstallData->getDbName(), $e->getMessage()),
+ __('No es posible usar la Base de Datos para crear la estructura. Compruebe los permisos y que no exista.', false));
+ }
+
+ // 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 {
+ $query = str_replace("\n", '', $buffer);
+ $this->DB->query($query);
+ } catch (PDOException $e) {
+ $this->rollback();
+
+ throw new SPException(SPException::SP_CRITICAL,
+ sprintf(__('Error al crear la BBDD') . ' (%s)', $e->getMessage()),
+ __('Error al crear la estructura de la Base de Datos.', false));
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Comprobar la conexión a la BBDD
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ protected function checkConnection()
+ {
+ if (!DBUtil::checkDatabaseExist()) {
+ $this->rollback();
+
+ throw new SPException(SPException::SP_CRITICAL,
+ __('Error al comprobar la base de datos', false),
+ __('Intente de nuevo la instalación', false));
+ }
+ }
+
+ /**
+ * Crear el usuario admin de sysPass.
+ * Esta función crea el grupo, perfil y usuario 'admin' para utilizar sysPass.
+ *
+ * @throws SPException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ */
+ private function createAdminAccount()
+ {
+ $GroupData = new GroupData();
+ $GroupData->setUsergroupName('Admins');
+ $GroupData->setUsergroupDescription('sysPass Admins');
+
+ try {
+ Group::getItem($GroupData)->add();
+ } catch (SPException $e) {
+ $this->rollback();
+ throw new SPException(SPException::SP_CRITICAL,
+ __('Error al crear el grupo "admin"', false),
+ __('Informe al desarrollador', false));
+ }
+
+ $ProfileData = new ProfileData();
+ $ProfileData->setUserprofileName('Admin');
+
+ try {
+ Profile::getItem($ProfileData)->add();
+ } catch (SPException $e) {
+ $this->rollback();
+ throw new SPException(SPException::SP_CRITICAL,
+ __('Error al crear el perfil "admin"', false),
+ __('Informe al desarrollador', false));
+ }
+
+ // Datos del usuario
+ $UserData = new UserData();
+ $UserData->setUserGroupId($GroupData->getUsergroupId());
+ $UserData->setUserProfileId($ProfileData->getUserprofileId());
+ $UserData->setUserLogin($this->InstallData->getAdminLogin());
+ $UserData->setUserPass($this->InstallData->getAdminPass());
+ $UserData->setUserName('Admin');
+ $UserData->setUserIsAdminApp(1);
+
+ try {
+ User::getItem($UserData)->add();
+ } catch (SPException $e) {
+ $this->rollback();
+ throw new SPException(SPException::SP_CRITICAL,
+ __('Error al crear el usuario "admin"', false),
+ __('Informe al desarrollador', false));
+ }
+
+ // Guardar el hash de la clave maestra
+ ConfigDB::setCacheConfigValue('masterPwd', Crypt::mkHashPassword($this->InstallData->getMasterPassword()));
+ ConfigDB::setCacheConfigValue('lastupdatempass', time());
+ ConfigDB::writeConfig(true);
+
+ if (!UserPass::getItem($UserData)->updateUserMPass($this->InstallData->getMasterPassword())) {
+ $this->rollback();
+
+ throw new SPException(SPException::SP_CRITICAL,
+ __('Error al actualizar la clave maestra del usuario "admin"', false),
+ __('Informe al desarrollador', false));
+ }
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Core/ItemsTypeInterface.class.php b/inc/SP/Core/ItemsTypeInterface.class.php
new file mode 100644
index 00000000..0f95f8f4
--- /dev/null
+++ b/inc/SP/Core/ItemsTypeInterface.class.php
@@ -0,0 +1,44 @@
+.
+ */
+
+namespace SP\Core;
+
+/**
+ * Interface ItemsTypeInterface para la definición de tipos de elementos
+ *
+ * @package SP\Core
+ */
+interface ItemsTypeInterface
+{
+ const ITEM_CATEGORIES = 1;
+ const ITEM_CUSTOMERS = 2;
+ const ITEM_CUSTOMERS_USER = 52;
+ const ITEM_FILES = 3;
+ const ITEM_TAGS = 4;
+ const ITEM_USERS = 5;
+ const ITEM_GROUPS = 6;
+ const ITEM_PROFILES = 7;
+ const ITEM_ACCOUNTS = 8;
+ const ITEM_ACCOUNTS_USER = 58;
+}
\ No newline at end of file
diff --git a/inc/Language.class.php b/inc/SP/Core/Language.class.php
similarity index 65%
rename from inc/Language.class.php
rename to inc/SP/Core/Language.class.php
index f16a9349..a9712c0d 100644
--- a/inc/Language.class.php
+++ b/inc/SP/Core/Language.class.php
@@ -2,9 +2,9 @@
/**
* sysPass
*
- * @author nuxsmin
- * @link http://syspass.org
- * @copyright 2012-2015 Rubén Domínguez nuxsmin@syspass.org
+ * @author nuxsmin
+ * @link http://syspass.org
+ * @copyright 2012-2017, Rubén Domínguez nuxsmin@$syspass.org
*
* This file is part of sysPass.
*
@@ -19,13 +19,15 @@
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with sysPass. If not, see .
- *
+ * along with sysPass. If not, see .
*/
-namespace SP;
+namespace SP\Core;
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+use SP\Config\Config;
+use SP\Mgmt\Users\UserPreferences;
+
+defined('APP_ROOT') || die();
/**
* Class Language para el manejo del lenguaje utilizado por la aplicación
@@ -46,6 +48,18 @@ class Language
* @var string
*/
public static $globalLang = '';
+ /**
+ * Estado de la localización. false si no existe
+ *
+ * @var string|false
+ */
+ public static $localeStatus;
+ /**
+ * Si se ha establecido a las de la App
+ *
+ * @var bool
+ */
+ protected static $appSet = false;
/**
* Establecer el lenguaje a utilizar
@@ -67,6 +81,7 @@ class Language
Session::setLocale($lang);
}
+
self::setLocales($lang);
}
@@ -77,7 +92,9 @@ class Language
*/
private function getUserLang()
{
- return (Session::getUserId() > 0) ? UserPreferences::getPreferences(Session::getUserId())->getLang() : '';
+ $userId = Session::getUserData()->getUserId();
+
+ return ($userId > 0) ? UserPreferences::getItem()->getById($userId)->getLang() : '';
}
/**
@@ -87,12 +104,12 @@ class Language
private function getGlobalLang()
{
$browserLang = $this->getBrowserLang();
- $configLang = Config::getValue('sitelang');
+ $configLang = Config::getConfig()->getSiteLang();
// Establecer a en_US si no existe la traducción o no es español
if (!$configLang
&& !$this->checkLangFile($browserLang)
- && stripos($browserLang, 'es_') === false
+ && strpos($browserLang, 'es_') === false
) {
$lang = 'en_US';
} else {
@@ -109,7 +126,11 @@ class Language
*/
private function getBrowserLang()
{
- return str_replace('-', '_', substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 5));
+ if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
+ return str_replace('-', '_', substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 5));
+ } else {
+ return '';
+ }
}
/**
@@ -131,10 +152,11 @@ class Language
private static function setLocales($lang)
{
$lang .= '.utf8';
+ $fallback = 'en_US.utf8';
putenv('LANG=' . $lang);
- setlocale(LC_MESSAGES, $lang);
- setlocale(LC_ALL, $lang);
+ self::$localeStatus = setlocale(LC_MESSAGES, $lang, $fallback);
+ setlocale(LC_ALL, $lang, $fallback);
bindtextdomain('messages', LOCALES_PATH);
textdomain('messages');
bind_textdomain_codeset('messages', 'UTF-8');
@@ -147,15 +169,38 @@ class Language
*/
public static function getAvailableLanguages()
{
- return array(
+ return [
'Español' => 'es_ES',
- 'Català' => 'ca_ES',
+ 'Catalá' => 'ca_ES',
'English' => 'en_US',
'Deutsch' => 'de_DE',
'Magyar' => 'hu_HU',
'Français' => 'fr_FR',
+ 'Polski' => 'po_PO',
'русский' => 'ru_RU',
'Nederlands' => 'nl_NL'
- );
+ ];
+ }
+
+ /**
+ * Establecer el lenguaje global para las traducciones
+ */
+ public static function setAppLocales()
+ {
+ if (Config::getConfig()->getSiteLang() !== Session::getLocale()) {
+ self::setLocales(Config::getConfig()->getSiteLang());
+ self::$appSet = true;
+ }
+ }
+
+ /**
+ * Restablecer el lenguaje global para las traducciones
+ */
+ public static function unsetAppLocales()
+ {
+ if (self::$appSet === true) {
+ self::setLocales(Session::getLocale());
+ self::$appSet = false;
+ }
}
}
\ No newline at end of file
diff --git a/inc/SP/Core/Messages/LogMessage.class.php b/inc/SP/Core/Messages/LogMessage.class.php
new file mode 100644
index 00000000..8cff1ed9
--- /dev/null
+++ b/inc/SP/Core/Messages/LogMessage.class.php
@@ -0,0 +1,274 @@
+.
+ */
+
+namespace SP\Core\Messages;
+
+use SP\Html\Html;
+
+/**
+ * Class LogMessage
+ *
+ * @package SP\Core\Messages
+ */
+class LogMessage extends MessageBase
+{
+ /**
+ * @var string Acción realizada
+ */
+ protected $action;
+ /**
+ * @var array Detalles de la acción en formato "detalle : descripción"
+ */
+ protected $details = [];
+
+ /**
+ * Devuelve la acción realizada
+ *
+ * @param bool $translate
+ * @return string
+ */
+ public function getAction($translate = false)
+ {
+ return $translate === true ? __($this->action) : $this->action;
+ }
+
+ /**
+ * Establece la acción realizada
+ *
+ * @param string $action
+ * @return $this
+ */
+ public function setAction($action)
+ {
+ $this->action = $this->formatString($action);
+
+ return $this;
+ }
+
+ /**
+ * Formatear una cadena para guardarla en el registro
+ *
+ * @param $string string La cadena a formatear
+ * @return string
+ */
+ private function formatString($string)
+ {
+ return strip_tags($string);
+ }
+
+ /**
+ * Devuelve la descripción de la acción realizada en formato HTML
+ *
+ * @param bool $translate
+ * @return string
+ */
+ public function getHtmlDescription($translate = false)
+ {
+ return nl2br($this->getDescription($translate));
+ }
+
+ /**
+ * Devuelve la descripción de la acción realizada
+ *
+ * @param bool $translate
+ * @return string
+ */
+ public function getDescription($translate = false)
+ {
+ if (count($this->description) === 0) {
+ return '';
+ }
+
+ if (count($this->description) > 1) {
+ if ($translate === true) {
+ return implode(PHP_EOL, array_map('__', $this->description));
+ }
+
+ return implode(PHP_EOL, $this->description);
+ }
+
+ return $translate === true ? __($this->description[0]) : $this->description[0];
+ }
+
+ /**
+ * Añadir detalle en formato HTML. Se resalta el texto clave.
+ *
+ * @param $key string
+ * @param $value string
+ * @return $this
+ */
+ public function addDetailsHtml($key, $value)
+ {
+ $this->addDetails(Html::strongText($key), $value);
+
+ return $this;
+ }
+
+ /**
+ * Establece los detalles de la acción realizada
+ *
+ * @param $key string
+ * @param $value string
+ * @return $this
+ */
+ public function addDetails($key, $value)
+ {
+ if ($value === '' || $key === '') {
+ return $this;
+ }
+
+ $this->details[] = [$this->formatString($key), $this->formatString($value)];
+
+ return $this;
+ }
+
+ /**
+ * Establece la descripción de la acción realizada en formato HTML
+ *
+ * @param string $description
+ * @return $this
+ */
+ public function addDescriptionHtml($description = '')
+ {
+ $this->addDescription(Html::strongText($description));
+
+ return $this;
+ }
+
+ /**
+ * Establece la descripción de la acción realizada
+ *
+ * @param string $description
+ * @return $this
+ */
+ public function addDescription($description = '')
+ {
+ $this->description[] = $this->formatString($description);
+
+ return $this;
+ }
+
+ /**
+ * Añadir una línea en blanco a la descripción
+ */
+ public function addDescriptionLine()
+ {
+ $this->description[] = '';
+
+ return $this;
+ }
+
+ /**
+ * Componer un mensaje en formato texto
+ *
+ * @return string
+ */
+ public function composeText()
+ {
+ $message[] = $this->action;
+ $message[] = $this->getDescription();
+ $message[] = $this->getDetails();
+
+ return implode(PHP_EOL, $message);
+ }
+
+ /**
+ * Devuelve los detalles de la acción realizada
+ *
+ * @param bool $translate
+ * @return string
+ */
+ public function getDetails($translate = false)
+ {
+ if (count($this->details) === 0) {
+ return '';
+ }
+
+ if (count($this->details) > 1) {
+ if ($translate === true) {
+ return implode(PHP_EOL, array_map(function ($detail) use ($translate) {
+ return $this->formatDetail($detail, $translate);
+ }, $this->details));
+ }
+
+ return implode(PHP_EOL, array_map([$this, 'formatDetail'], $this->details));
+ }
+
+ return $this->formatDetail($this->details[0], $translate);
+ }
+
+ /**
+ * Devolver un detalle formateado
+ *
+ * @param array $detail
+ * @param bool $translate
+ * @return string
+ */
+ protected function formatDetail(array $detail, $translate = false)
+ {
+ if ($translate === true) {
+ return sprintf('%s : %s', __($detail[0]), __($detail[1]));
+ }
+
+ return sprintf('%s : %s', $detail[0], $detail[1]);
+ }
+
+ /**
+ * Componer un mensaje en formato HTML
+ *
+ * @return mixed
+ */
+ public function composeHtml()
+ {
+ $message[] = '';
+
+ return implode('', $message);
+ }
+
+ /**
+ * Restablecer la variable de descripcion
+ */
+ public function resetDescription()
+ {
+ $this->description = [];
+
+ return $this;
+ }
+
+ /**
+ * Devuelve los detalles en formato HTML
+ *
+ * @param bool $translate
+ * @return string
+ */
+ public function getHtmlDetails($translate = false)
+ {
+ return nl2br($this->getDetails($translate));
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Core/Messages/MessageBase.class.php b/inc/SP/Core/Messages/MessageBase.class.php
new file mode 100644
index 00000000..1ad43ed4
--- /dev/null
+++ b/inc/SP/Core/Messages/MessageBase.class.php
@@ -0,0 +1,102 @@
+.
+ */
+
+namespace SP\Core\Messages;
+
+/**
+ * Class MessageBase
+ *
+ * @package SP\Core\Messages
+ */
+abstract class MessageBase implements MessageInterface
+{
+ /**
+ * @var string
+ */
+ protected $title;
+ /**
+ * @var array
+ */
+ protected $footer = [];
+ /**
+ * @var array
+ */
+ protected $description = [];
+
+ /**
+ * @return string
+ */
+ public function getTitle()
+ {
+ return $this->title;
+ }
+
+ /**
+ * @param string $title
+ */
+ public function setTitle($title)
+ {
+ $this->title = $title;
+ }
+
+ /**
+ * @return array
+ */
+ public function getDescription()
+ {
+ return $this->description;
+ }
+
+ /**
+ * @param array $description
+ */
+ public function setDescription(array $description)
+ {
+ $this->description = $description;
+ }
+
+ /**
+ * @param string $description
+ */
+ public function addDescription($description)
+ {
+ $this->description[] = $description;
+ }
+
+ /**
+ * @return string
+ */
+ public function getFooter()
+ {
+ return $this->footer;
+ }
+
+ /**
+ * @param array $footer
+ */
+ public function setFooter(array $footer)
+ {
+ $this->footer = $footer;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Core/Messages/MessageInterface.class.php b/inc/SP/Core/Messages/MessageInterface.class.php
new file mode 100644
index 00000000..42b0f541
--- /dev/null
+++ b/inc/SP/Core/Messages/MessageInterface.class.php
@@ -0,0 +1,47 @@
+.
+ */
+
+namespace SP\Core\Messages;
+
+/**
+ * Interface MessageInterface
+ *
+ * @package SP\Core\Messages
+ */
+interface MessageInterface
+{
+ /**
+ * Componer un mensaje en formato texto
+ *
+ * @return string
+ */
+ public function composeText();
+
+ /**
+ * Componer un mensaje en formato HTML
+ *
+ * @return mixed
+ */
+ public function composeHtml();
+}
\ No newline at end of file
diff --git a/inc/SP/Core/Messages/NoticeMessage.class.php b/inc/SP/Core/Messages/NoticeMessage.class.php
new file mode 100644
index 00000000..95fc3fc5
--- /dev/null
+++ b/inc/SP/Core/Messages/NoticeMessage.class.php
@@ -0,0 +1,59 @@
+.
+ */
+
+namespace SP\Core\Messages;
+
+/**
+ * Class NoticeMessage
+ *
+ * @package SP\Core\Messages
+ */
+class NoticeMessage extends MessageBase
+{
+ /**
+ * Componer un mensaje en formato HTML
+ *
+ * @return string
+ */
+ public function composeHtml()
+ {
+ $message[] = '';
+
+ return implode('', $message);
+ }
+
+ /**
+ * Componer un mensaje en formato texto
+ *
+ * @return string
+ */
+ public function composeText()
+ {
+ return $this->title . PHP_EOL . implode(PHP_EOL, $this->description) . PHP_EOL . implode(PHP_EOL, $this->footer);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Core/Plugin/PluginBase.class.php b/inc/SP/Core/Plugin/PluginBase.class.php
new file mode 100644
index 00000000..15967b27
--- /dev/null
+++ b/inc/SP/Core/Plugin/PluginBase.class.php
@@ -0,0 +1,138 @@
+.
+ */
+
+namespace SP\Core\Plugin;
+
+/**
+ * Class PluginBase
+ *
+ * @package SP\Core\Plugin
+ */
+abstract class PluginBase implements PluginInterface
+{
+ /**
+ * @var string Directorio base
+ */
+ protected $base;
+ /**
+ * @var string Tipo de plugin
+ */
+ protected $type;
+ /**
+ * @var string
+ */
+ protected $themeDir;
+ /**
+ * @var mixed
+ */
+ protected $data;
+ /**
+ * @var int
+ */
+ protected $enabled;
+
+ /**
+ * PluginBase constructor.
+ */
+ public final function __construct()
+ {
+ $this->init();
+ }
+
+ /**
+ * @return string
+ */
+ public function getType()
+ {
+ return $this->type;
+ }
+
+ /**
+ * @param string $type
+ */
+ public function setType($type)
+ {
+ $this->type = $type;
+ }
+
+ /**
+ * @return string
+ */
+ public function getBase()
+ {
+ return $this->base;
+ }
+
+ /**
+ * @return string
+ */
+ public function getThemeDir()
+ {
+ return $this->themeDir;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getData()
+ {
+ return $this->data;
+ }
+
+ /**
+ * @param mixed $data
+ */
+ public function setData($data)
+ {
+ $this->data = $data;
+ }
+
+ /**
+ * @return int
+ */
+ public function getEnabled()
+ {
+ return (int)$this->enabled;
+ }
+
+ /**
+ * @param int $enabled
+ */
+ public function setEnabled($enabled)
+ {
+ $this->enabled = (int)$enabled;
+ }
+
+ /**
+ * Establecer las locales del plugin
+ */
+ protected function setLocales()
+ {
+ $locales = $this->getBase() . DIRECTORY_SEPARATOR . 'locales';
+ $name = strtolower($this->getName());
+
+ bindtextdomain($name, $locales);
+ bind_textdomain_codeset($name, 'UTF-8');
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Core/Plugin/PluginDataStore.class.php b/inc/SP/Core/Plugin/PluginDataStore.class.php
new file mode 100644
index 00000000..e6247817
--- /dev/null
+++ b/inc/SP/Core/Plugin/PluginDataStore.class.php
@@ -0,0 +1,91 @@
+.
+ */
+
+namespace SP\Core\Plugin;
+
+use SP\DataModel\PluginData;
+use SP\Log\Log;
+use SP\Mgmt\Plugins\Plugin;
+
+/**
+ * Class PluginDataStore
+ *
+ * @package SP\Core\Plugin
+ */
+class PluginDataStore
+{
+ /**
+ * Guardar los datos de un plugin
+ *
+ * @param PluginInterface $Plugin
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public static function save(PluginInterface $Plugin)
+ {
+ $PluginData = new PluginData();
+ $PluginData->setPluginName($Plugin->getName());
+ $PluginData->setPluginEnabled(1);
+ $PluginData->setPluginData(serialize($Plugin->getData()));
+
+ Plugin::getItem($PluginData)->update();
+ }
+
+ /**
+ * Cargar los datos de un plugin
+ *
+ * @param PluginInterface $Plugin
+ * @return bool
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public static function load(PluginInterface $Plugin)
+ {
+ /** @var PluginData $PluginData */
+ $PluginData = Plugin::getItem()->getByName($Plugin->getName());
+
+ if (!is_object($PluginData)) {
+ $PluginData = new PluginData();
+ $PluginData->setPluginName($Plugin->getName());
+ $PluginData->setPluginEnabled(0);
+
+ Plugin::getItem($PluginData)->add();
+
+ $Log = new Log();
+ $Log->getLogMessage()
+ ->setAction(__('Nuevo Plugin', false))
+ ->addDetails(__('Nombre', false), $Plugin->getName());
+ $Log->writeLog();
+
+ return false;
+ }
+
+ $data = $PluginData->getPluginData();
+
+ if ($data !== '') {
+ $Plugin->setData(unserialize($PluginData->getPluginData()));
+ }
+
+ return (bool)$PluginData->getPluginEnabled();
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Core/Plugin/PluginInterface.class.php b/inc/SP/Core/Plugin/PluginInterface.class.php
new file mode 100644
index 00000000..95dfdd92
--- /dev/null
+++ b/inc/SP/Core/Plugin/PluginInterface.class.php
@@ -0,0 +1,104 @@
+.
+ */
+
+namespace SP\Core\Plugin;
+
+use SP\Core\Events\EventReceiver;
+
+/**
+ * Interface PluginInterface
+ *
+ * @package SP\Core\Plugin
+ */
+interface PluginInterface extends EventReceiver
+{
+ /**
+ * Devuelve el tipo de plugin
+ *
+ * @return string
+ */
+ public function getType();
+
+ /**
+ * Devuelve el directorio base del plugin
+ *
+ * @return string
+ */
+ public function getBase();
+
+ /**
+ * Devuelve el directorio del tema usado
+ *
+ * @return mixed
+ */
+ public function getThemeDir();
+
+ /**
+ * Devuelve el autor del plugin
+ *
+ * @return string
+ */
+ public function getAuthor();
+
+ /**
+ * Devuelve la versión del plugin
+ *
+ * @return array
+ */
+ public function getVersion();
+
+ /**
+ * Devuelve la versión compatible de sysPass
+ *
+ * @return array
+ */
+ public function getCompatibleVersion();
+
+ /**
+ * Devuelve el nombre del plugin
+ *
+ * @return string
+ */
+ public function getName();
+
+ /**
+ * @return mixed
+ */
+ public function getData();
+
+ /**
+ * @param mixed $data
+ */
+ public function setData($data);
+
+ /**
+ * @return int
+ */
+ public function getEnabled();
+
+ /**
+ * @param int $enabled
+ */
+ public function setEnabled($enabled);
+}
\ No newline at end of file
diff --git a/inc/SP/Core/Plugin/PluginUtil.class.php b/inc/SP/Core/Plugin/PluginUtil.class.php
new file mode 100644
index 00000000..b5e731d2
--- /dev/null
+++ b/inc/SP/Core/Plugin/PluginUtil.class.php
@@ -0,0 +1,166 @@
+.
+ */
+
+namespace SP\Core\Plugin;
+
+use ReflectionClass;
+use SP\Core\Exceptions\SPException;
+use SP\Core\Session;
+use SP\Log\Log;
+
+/**
+ * Class PluginUtil
+ *
+ * @package SP\Core\Plugin
+ */
+class PluginUtil
+{
+ /**
+ * @var array Plugins ya cargados
+ */
+ private static $loadedPlugins = [];
+ /**
+ * @var array Plugins deshabilitados
+ */
+ private static $disabledPlugins = [];
+
+ /**
+ * Devuelve la lista de Plugins disponibles
+ *
+ * @return array
+ */
+ public static function getPlugins()
+ {
+ $pluginDirH = opendir(PLUGINS_PATH);
+ $plugins = [];
+
+ if ($pluginDirH) {
+ while (false !== ($entry = readdir($pluginDirH))) {
+ if ($entry !== '.' && $entry !== '..') {
+ $plugins[] = $entry;
+ }
+ }
+
+ closedir($pluginDirH);
+ }
+
+ return $plugins;
+ }
+
+ /**
+ * Cargar un plugin
+ *
+ * @param string $name Nombre del plugin
+ * @return bool|PluginInterface
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public static function loadPlugin($name)
+ {
+ $name = ucfirst($name);
+
+ if (in_array($name, Session::getPluginsDisabled(), true)) {
+ return false;
+ }
+
+ if (isset(self::$loadedPlugins[$name])) {
+ return self::$loadedPlugins[$name];
+ }
+
+ try {
+ $pluginClass = 'Plugins\\' . $name . '\\' . $name . 'Plugin';
+
+ $Reflection = new ReflectionClass($pluginClass);
+
+ /** @var PluginInterface $Plugin */
+ $Plugin = $Reflection->newInstance();
+
+ if (PluginDataStore::load($Plugin) === true) {
+ self::$loadedPlugins[$name] = $Plugin;
+
+ return $Plugin;
+ } else {
+ self::$disabledPlugins[] = $name;
+ }
+ } catch (\ReflectionException $e) {
+ Log::writeNewLog(__FUNCTION__, sprintf(__('No es posible cargar el plugin "%s"'), $name));
+ } catch (SPException $e) {
+ Log::writeNewLog(__FUNCTION__, sprintf(__('No es posible cargar el plugin "%s"'), $name));
+ }
+
+ return false;
+ }
+
+ /**
+ * Devolver los plugins cargados
+ *
+ * @return PluginInterface[]
+ */
+ public static function getLoadedPlugins()
+ {
+ return self::$loadedPlugins;
+ }
+
+ /**
+ * Devolver los plugins deshabilidatos
+ *
+ * @return string[]
+ */
+ public static function getDisabledPlugins()
+ {
+ return self::$disabledPlugins;
+ }
+
+ /**
+ * Obtener la información de un plugin
+ *
+ * @param string $name Nombre del plugin
+ * @return bool|PluginInterface
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public static function getPluginInfo($name)
+ {
+ $name = ucfirst($name);
+
+ $pluginClass = 'Plugins\\' . $name . '\\' . $name . 'Plugin';
+
+ if (isset(self::$loadedPlugins[$name])) {
+ return self::$loadedPlugins[$name];
+ }
+
+ try {
+ $Reflection = new \ReflectionClass($pluginClass);
+
+ /** @var PluginBase $Plugin */
+ $Plugin = $Reflection->newInstance();
+
+ self::$loadedPlugins[$name] = $Plugin;
+
+ return $Plugin;
+ } catch (\ReflectionException $e) {
+ Log::writeNewLog(__FUNCTION__, sprintf(__('No es posible cargar el plugin "%s"'), $name));
+ }
+
+ return false;
+ }
+}
\ No newline at end of file
diff --git a/inc/Session.class.php b/inc/SP/Core/Session.class.php
similarity index 63%
rename from inc/Session.class.php
rename to inc/SP/Core/Session.class.php
index 0b709a5e..55814c16 100644
--- a/inc/Session.class.php
+++ b/inc/SP/Core/Session.class.php
@@ -4,7 +4,7 @@
*
* @author nuxsmin
* @link http://syspass.org
- * @copyright 2012-2015 Rubén Domínguez nuxsmin@syspass.org
+ * @copyright 2012-2017, Rubén Domínguez nuxsmin@$syspass.org
*
* This file is part of sysPass.
*
@@ -19,13 +19,20 @@
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with sysPass. If not, see .
- *
+ * along with sysPass. If not, see .
*/
-namespace SP;
+namespace SP\Core;
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+use SP\Account\AccountAcl;
+use SP\Account\AccountSearch;
+use SP\Config\ConfigData;
+use SP\DataModel\ProfileData;
+use SP\DataModel\UserData;
+use SP\DataModel\UserPreferencesData;
+use SP\Mgmt\Users\UserPreferences;
+
+defined('APP_ROOT') || die();
/**
* Clase para manejar la variable de sesion
@@ -33,49 +40,26 @@ defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'
class Session
{
/**
- * Obtiene el id de usuario de la sesión.
- *
- * @return int
+ * Tipos de sesión
*/
- public static function getUserId()
- {
- return self::getSessionKey('uid', 0);
- }
+ const SESSION_INTERACTIVE = 1;
+ const SESSION_API = 2;
/**
- * Devolver una variable de sesión
+ * Establece los datos del usuario en la sesión.
*
- * @param mixed $key
- * @param mixed $default
- * @return bool|int
+ * @param UserData $UserData
*/
- public static function getSessionKey($key, $default = '')
+ public static function setUserData($UserData = null)
{
- 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);
+ self::setSessionKey('userData', $UserData);
}
/**
* Establecer una variable de sesión
*
- * @param mixed $key El nombre de la variable
- * @param mixed $value El valor de la variable
+ * @param string $key El nombre de la variable
+ * @param mixed $value El valor de la variable
*/
public static function setSessionKey($key, $value)
{
@@ -83,189 +67,64 @@ class Session
}
/**
- * Obtiene si el usuario es administrador de la aplicación de la sesión.
+ * Establecer una variable de sesión para un plugin
*
- * @return bool
+ * @param string $plugin Nombre del plugin
+ * @param string $key El nombre de la variable
+ * @param mixed $value El valor de la variable
*/
- public static function getUserIsAdminApp()
+ public static function setPluginKey($plugin, $key, $value)
{
- return self::getSessionKey('uisadminapp', false);
+ $_SESSION[$plugin][$key] = $value;
}
/**
- * Establece si el usuario es administrador de la aplicación en la sesión.
+ * Devuelve los datos del usuario en la sesión.
*
- * @param $bool
+ * @return UserData
*/
- public static function setUserIsAdminApp($bool)
+ public static function getUserData()
{
- self::setSessionKey('uisadminapp', $bool);
+ return self::getSessionKey('userData', new UserData());
}
/**
- * 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.
+ * Devolver una variable de sesión
*
+ * @param string $key
+ * @param mixed $default
* @return mixed
*/
- public static function getUserLogin()
+ public static function getSessionKey($key, $default = '')
{
- return self::getSessionKey('ulogin', false);
+ if (isset($_SESSION[$key])) {
+ return is_numeric($default) ? (int)$_SESSION[$key] : $_SESSION[$key];
+ }
+
+ return $default;
}
/**
- * Establece el login de usuario en la sesión.
+ * Devolver una variable de sesión
*
- * @param $userLogin
+ * @param string $plugin
+ * @param string $key
+ * @param mixed $default
+ * @return mixed
*/
- public static function setUserLogin($userLogin)
+ public static function getPluginKey($plugin, $key, $default = '')
{
- self::setSessionKey('ulogin', $userLogin);
- }
+ if (isset($_SESSION[$plugin][$key])) {
+ return is_numeric($default) ? (int)$_SESSION[$plugin][$key] : $_SESSION[$plugin][$key];
+ }
- /**
- * 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);
+ return $default;
}
/**
* Obtiene el objeto de perfil de usuario de la sesión.
*
- * @return Profile
+ * @return ProfileData
*/
public static function getUserProfile()
{
@@ -275,11 +134,11 @@ class Session
/**
* Establece el objeto de perfil de usuario en la sesión.
*
- * @param Profile $profile
+ * @param ProfileData $ProfileData
*/
- public static function setUserProfile(Profile $profile)
+ public static function setUserProfile(ProfileData $ProfileData)
{
- self::setSessionKey('usrprofile', $profile);
+ self::setSessionKey('usrprofile', $ProfileData);
}
/**
@@ -287,7 +146,7 @@ class Session
*/
public static function getSearchFilters()
{
- return self::getSessionKey('searchFilters', null);
+ return self::getSessionKey('searchFilters', new AccountSearch());
}
/**
@@ -298,26 +157,6 @@ class Session
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
*
@@ -558,26 +397,6 @@ class Session
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
*
@@ -621,21 +440,21 @@ class Session
/**
* Obtiene el objeto de preferencias de usuario de la sesión.
*
- * @return UserPreferences
+ * @return UserPreferencesData
*/
public static function getUserPreferences()
{
- return self::getSessionKey('usrpreferences');
+ return self::getSessionKey('userpreferences');
}
/**
* Establece el objeto de preferencias de usuario en la sesión.
*
- * @param UserPreferences $preferences
+ * @param UserPreferencesData|UserPreferences $preferences
*/
- public static function setUserPreferences(UserPreferences $preferences)
+ public static function setUserPreferences(UserPreferencesData $preferences)
{
- self::setSessionKey('usrpreferences', $preferences);
+ self::setSessionKey('userpreferences', $preferences);
}
/**
@@ -669,7 +488,7 @@ class Session
}
/**
- * Establece l color asociado a una cuenta
+ * Establece el color asociado a una cuenta
*
* @param array $color
*/
@@ -678,6 +497,142 @@ class Session
self::setSessionKey('accountcolor', $color);
}
+ /**
+ * Devolver si hay una cookie de sesión para CURL
+ *
+ * @return string
+ */
+ public static function getCurlCookieSession()
+ {
+ return self::getSessionKey('curlcookiesession', false);
+ }
+
+ /**
+ * Establecer si hay una cookie de sesión para CURL
+ *
+ * @param bool $session
+ */
+ public static function setCurlCookieSession($session)
+ {
+ self::setSessionKey('curlcookiesession', $session);
+ }
+
+ /**
+ * Devolver si hay una sesión a la API de DokuWiki
+ *
+ * @return string
+ */
+ public static function getDokuWikiSession()
+ {
+ return self::getSessionKey('dokuwikisession', false);
+ }
+
+ /**
+ * Establecer si hay una sesión a la API de DokuWiki
+ *
+ * @param bool $session
+ */
+ public static function setDokuWikiSession($session)
+ {
+ self::setSessionKey('dokuwikisession', $session);
+ }
+
+ /**
+ * Devolver el tipo de sesion
+ *
+ * @return int
+ */
+ public static function getSessionType()
+ {
+ return self::getSessionKey('sessiontype', 0);
+ }
+
+ /**
+ * Establecer el tipo de sesion
+ *
+ * @param int $type
+ */
+ public static function setSessionType($type)
+ {
+ self::setSessionKey('sessiontype', $type);
+ }
+
+ /**
+ * Devolver la configuración
+ *
+ * @return ConfigData
+ */
+ public static function getConfig()
+ {
+ return self::getSessionKey('config');
+ }
+
+ /**
+ * Establecer la configuración
+ *
+ * @param ConfigData $config
+ */
+ public static function setConfig(ConfigData $config)
+ {
+ self::setSessionKey('config', $config);
+ }
+
+ /**
+ * Establecer la hora de carga de la configuración
+ *
+ * @param $time
+ */
+ public static function setConfigTime($time)
+ {
+ self::setSessionKey('configTime', $time);
+ }
+
+ /**
+ * Devolver la hora de carga de la configuración
+ *
+ * @return int
+ */
+ public static function getConfigTime()
+ {
+ return self::getSessionKey('configTime');
+ }
+
+ /**
+ * Establecer los plugins cargados
+ *
+ * @param array $plugins
+ */
+ public static function setPluginsLoaded(array $plugins)
+ {
+ self::setSessionKey('plugins_loaded', $plugins);
+ }
+
+ /**
+ * Devolver los plugins cargados
+ */
+ public static function getPluginsLoaded()
+ {
+ return self::getSessionKey('plugins_loaded', []);
+ }
+
+ /**
+ * Establecer los plugins deshabilitados
+ *
+ * @param array $plugins
+ */
+ public static function setPluginsDisabled(array $plugins)
+ {
+ self::setSessionKey('plugins_disabled', $plugins);
+ }
+
+ /**
+ * Devolver los plugins deshabilitados
+ */
+ public static function getPluginsDisabled()
+ {
+ return self::getSessionKey('plugins_disabled', []);
+ }
+
/**
* @param $key
*/
@@ -685,4 +640,48 @@ class Session
{
unset($_SESSION[$key]);
}
+
+ /**
+ * Establecer si el usuario está completamente autorizado
+ *
+ * @param $bool
+ */
+ public static function setAuthCompleted($bool)
+ {
+ self::setSessionKey('authCompleted', (bool)$bool);
+ }
+
+ /**
+ * Devolver si el usuario está completamente logeado
+ */
+ public static function getAuthCompleted()
+ {
+ return self::getSessionKey('authCompleted', false);
+ }
+
+ /**
+ * Establecer la ACL de una cuenta
+ *
+ * @param AccountAcl $AccountAcl
+ */
+ public static function setAccountAcl(AccountAcl $AccountAcl)
+ {
+ $_SESSION['accountAcl'][$AccountAcl->getAccountId()] = $AccountAcl;
+ }
+
+ /**
+ * Devolver la ACL de una cuenta
+ *
+ * @param $accountId
+ *
+ * @return null|AccountAcl
+ */
+ public static function getAccountAcl($accountId)
+ {
+ if (isset($_SESSION['accountAcl'][$accountId])) {
+ return $_SESSION['accountAcl'][$accountId];
+ }
+
+ return null;
+ }
}
\ No newline at end of file
diff --git a/inc/SP/Core/SessionUtil.class.php b/inc/SP/Core/SessionUtil.class.php
new file mode 100644
index 00000000..8a141d92
--- /dev/null
+++ b/inc/SP/Core/SessionUtil.class.php
@@ -0,0 +1,154 @@
+.
+ */
+
+namespace SP\Core;
+
+use SP\Config\Config;
+use SP\DataModel\UserData;
+use SP\Mgmt\Profiles\Profile;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class SessionUtil para las utilidades de la sesión
+ *
+ * @package SP
+ */
+class SessionUtil
+{
+ /**
+ * Establece las variables de sesión del usuario.
+ *
+ * @param UserData $UserData
+ */
+ public static function loadUserSession(UserData $UserData)
+ {
+ Session::setUserData($UserData);
+ Session::setUserProfile(Profile::getItem()->getById($UserData->getUserProfileId()));
+ }
+
+ /**
+ * Establecer la clave pública RSA en la sessión
+ *
+ * @throws \phpseclib\Exception\FileNotFoundException
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public static function loadPublicKey()
+ {
+ $CryptPKI = new CryptPKI();
+ Session::setPublicKey($CryptPKI->getPublicKey());
+ }
+
+ /**
+ * Guardar la clave maestra encriptada en la sesión
+ *
+ * @param $masterPass
+ */
+ public static function saveSessionMPass($masterPass)
+ {
+ $sessionMasterPass = Crypt::mkCustomMPassEncrypt(Crypt::generateAesKey(session_id()), $masterPass);
+
+ Session::setMPass($sessionMasterPass[0]);
+ Session::setMPassIV($sessionMasterPass[1]);
+ }
+
+ /**
+ * Desencriptar la clave maestra de la sesión.
+ *
+ * @return string con la clave maestra
+ */
+ public static function getSessionMPass()
+ {
+ return Crypt::getDecrypt(Session::getMPass(), Session::getMPassIV(), Crypt::generateAesKey(session_id()));
+ }
+
+ /**
+ * 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)
+ {
+ // Generamos un nuevo hash si es necesario y lo guardamos en la sesión
+ if ($new === true || null === Session::getSecurityKey()) {
+ $hash = sha1(time() . Config::getConfig()->getPasswordSalt());
+
+ 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 (null !== Session::getSecurityKey() && Session::getSecurityKey() === $key);
+ }
+
+ /**
+ * Limpiar la sesión del usuario
+ */
+ public static function cleanSession()
+ {
+ foreach ($_SESSION as $key => $value){
+ unset($_SESSION[$key]);
+ }
+
+// Session::unsetSessionKey('userData');
+// Session::unsetSessionKey('usrprofile');
+// Session::unsetSessionKey('searchFilters');
+// Session::unsetSessionKey('updated');
+// Session::unsetSessionKey('sessionTimeout');
+// Session::unsetSessionKey('reload');
+// Session::unsetSessionKey('sk');
+// Session::unsetSessionKey('mPass');
+// Session::unsetSessionKey('mPassPwd');
+// Session::unsetSessionKey('mPassIV');
+// Session::unsetSessionKey('sidStartTime');
+// Session::unsetSessionKey('startActivity');
+// Session::unsetSessionKey('lastActivity');
+// Session::unsetSessionKey('lastAccountId');
+// Session::unsetSessionKey('theme');
+// Session::unsetSessionKey('2fapass');
+// Session::unsetSessionKey('pubkey');
+// Session::unsetSessionKey('locale');
+// Session::unsetSessionKey('userpreferences');
+// Session::unsetSessionKey('tempmasterpass');
+// Session::unsetSessionKey('accountcolor');
+// Session::unsetSessionKey('curlcookiesession');
+// Session::unsetSessionKey('dokuwikisession');
+// Session::unsetSessionKey('sessiontype');
+// Session::unsetSessionKey('config');
+// Session::unsetSessionKey('configTime');
+ }
+}
\ No newline at end of file
diff --git a/inc/Template.class.php b/inc/SP/Core/Template.class.php
similarity index 53%
rename from inc/Template.class.php
rename to inc/SP/Core/Template.class.php
index 73d172a5..9d8cec7e 100644
--- a/inc/Template.class.php
+++ b/inc/SP/Core/Template.class.php
@@ -2,9 +2,9 @@
/**
* sysPass
*
- * @author nuxsmin
- * @link http://syspass.org
- * @copyright 2012-2015 Rubén Domínguez nuxsmin@syspass.org
+ * @author nuxsmin
+ * @link http://syspass.org
+ * @copyright 2012-2017, Rubén Domínguez nuxsmin@$syspass.org
*
* This file is part of sysPass.
*
@@ -19,14 +19,17 @@
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with sysPass. If not, see .
- *
+ * along with sysPass. If not, see .
*/
-namespace SP;
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+namespace SP\Core;
+
+defined('APP_ROOT') || die();
use InvalidArgumentException;
+use SP\Core\Exceptions\FileNotFoundException;
+use SP\Core\Exceptions\SPException;
+use SP\Core\UI\ThemeInterface;
/**
* Clase Template para la manipulación de plantillas
@@ -39,60 +42,93 @@ use InvalidArgumentException;
*/
class Template
{
+ /**
+ * @var ThemeInterface
+ */
+ protected $Theme;
/**
* @var array Variable con los archivos de plantilla a cargar
*/
- private $_file = array();
+ private $file = [];
/**
* @var array Variable con las variables a incluir en la plantilla
*/
- private $_vars = array();
+ private $vars = [];
+ /**
+ * @var string Directorio base para los archivos de plantillas
+ */
+ private $base;
/**
* @param null $file Archivo de plantilla a añadir
* @param array $vars Variables a inicializar
+ * @throws \SP\Core\Exceptions\FileNotFoundException
*/
public function __construct($file = null, array $vars = array())
{
- $this->addTemplate($file);
+ if (null !== $file) {
+ $this->addTemplate($file);
+ }
if (!empty($vars)) {
$this->setVars($vars);
}
+
+ $this->Theme = DiFactory::getTheme();
}
/**
* Añadir una nueva plantilla al array de plantillas de la clase
*
* @param string $file Con el nombre del archivo de plantilla
+ * @param string $base Directorio base para la plantilla
* @return bool
*/
- public function addTemplate($file)
+ public function addTemplate($file, $base = null)
{
- if (!is_null($file) && $this->checkTemplate($file)) {
- return true;
+ try {
+ $template = $this->checkTemplate($file, $base);
+ $this->setTemplate($template);
+ } catch (FileNotFoundException $e) {
+ return false;
}
- return false;
+ return true;
}
/**
* Comprobar si un archivo de plantilla existe y se puede leer
*
- * @param string $file Con el nombre del archivo
- * @return bool
- * @throws InvalidArgumentException
+ * @param string $template Con el nombre del archivo
+ * @return string La ruta al archivo de la plantilla
+ * @throws \SP\Core\Exceptions\FileNotFoundException
+ * @param string $base Directorio base para la plantilla
*/
- private function checkTemplate($file)
+ private function checkTemplate($template, $base = null)
{
- $template = VIEW_PATH . DIRECTORY_SEPARATOR . Themes::$theme . DIRECTORY_SEPARATOR . $file . '.inc';
+ $useBase = false;
- if (!is_readable($template)) {
- throw new InvalidArgumentException(sprintf(_('No es posible obtener la plantilla "%s" : %s'), $file, $template));
+ if (null !== $base) {
+ $template = $base . DIRECTORY_SEPARATOR . $template . '.inc';
+
+ $useBase = is_readable($template);
+ } elseif (null !== $this->base) {
+ $template = $this->base . DIRECTORY_SEPARATOR . $template . '.inc';
+
+ $useBase = is_readable($template);
+ } else {
+ $template .= '.inc';
}
- $this->setTemplate($template);
- return true;
+ $file = ($useBase === false) ? $this->Theme->getViewsPath() . DIRECTORY_SEPARATOR . $template : $template;
+
+ if (!is_readable($file)) {
+ debugLog(sprintf(__('No es posible obtener la plantilla "%s" : %s'), $file, $template));
+// Log::writeNewLog(__FUNCTION__, sprintf(__('No es posible obtener la plantilla "%s" : %s'), $file, $template), Log::ERROR);
+ throw new FileNotFoundException(SPException::SP_ERROR, sprintf(__('No es posible obtener la plantilla "%s" : %s'), $file, $template));
+ }
+
+ return $file;
}
/**
@@ -102,7 +138,7 @@ class Template
*/
private function setTemplate($file)
{
- $this->_file[] = $file;
+ $this->file[] = $file;
}
/**
@@ -118,7 +154,23 @@ class Template
}
/**
- * Overloadig para controlar la devolución de atributos dinámicos.
+ * Añadir una nueva plantilla dentro de una plantilla
+ *
+ * @param string $file Con el nombre del archivo de plantilla
+ * @param string $base Directorio base para la plantilla
+ * @return bool
+ */
+ public function includeTemplate($file, $base = null)
+ {
+ try {
+ return $this->checkTemplate($file, $base);
+ } catch (InvalidArgumentException $e) {
+ return false;
+ }
+ }
+
+ /**
+ * Overloading para controlar la devolución de atributos dinámicos.
*
* @param string $name Nombre del atributo
* @return null
@@ -126,11 +178,13 @@ class Template
*/
public function __get($name)
{
- if (!array_key_exists($name, $this->_vars)) {
- throw new InvalidArgumentException(sprintf(_('No es posible obtener la variable "%s"'), $name));
+ if (!array_key_exists($name, $this->vars)) {
+ debugLog(sprintf(__('No es posible obtener la variable "%s"'), $name));
+
+ throw new InvalidArgumentException(sprintf(__('No es posible obtener la variable "%s"'), $name));
}
- return $this->_vars[$name];
+ return $this->vars[$name];
}
/**
@@ -143,7 +197,7 @@ class Template
*/
public function __set($name, $value)
{
- $this->_vars[$name] = $value;
+ $this->vars[$name] = $value;
return null;
}
@@ -156,7 +210,7 @@ class Template
*/
public function __isset($name)
{
- return array_key_exists($name, $this->_vars);
+ return array_key_exists($name, $this->vars);
}
/**
@@ -169,11 +223,13 @@ class Template
*/
public function __unset($name)
{
- if (!isset($this->_vars[$name])) {
- throw new InvalidArgumentException(sprintf(_('No es posible destruir la variable "%s"'), $name));
+ if (!array_key_exists($name, $this->vars)) {
+ debugLog(sprintf(__('No es posible destruir la variable "%s"'), $name));
+
+ throw new InvalidArgumentException(sprintf(__('No es posible destruir la variable "%s"'), $name));
}
- unset($this->_vars[$name]);
+ unset($this->vars[$name]);
return $this;
}
@@ -182,15 +238,20 @@ class Template
* La salida se almacena en buffer y se devuelve el contenido
*
* @return string Con el contenido del buffer de salida
+ * @throws FileNotFoundException
*/
public function render()
{
- extract($this->_vars);
+ if (count($this->file) === 0) {
+ throw new FileNotFoundException(SPException::SP_ERROR, __('La plantilla no contiene archivos'));
+ }
+
+ extract($this->vars, EXTR_SKIP);
ob_start();
// Añadimos las plantillas
- foreach ($this->_file as $template) {
+ foreach ($this->file as $template) {
include_once $template;
}
@@ -206,11 +267,11 @@ class Template
*/
public function assign($name, $value = '', $scope = null)
{
- if (!is_null($scope)) {
+ if (null !== $scope) {
$name = $scope . '_' . $name;
}
- $this->_vars[$name] = $value;
+ $this->vars[$name] = $value;
}
/**
@@ -223,14 +284,14 @@ class Template
*/
public function append($name, $value, $scope = null, $index = null)
{
- if (!is_null($scope)) {
+ if (null !== $scope) {
$name = $scope . '_' . $name;
}
- if (!is_null($index)) {
- $this->_vars[$name][$index] = $value;
+ if (null !== $index) {
+ $this->vars[$name][$index] = $value;
} else {
- $this->_vars[$name][] = $value;
+ $this->vars[$name][] = $value;
}
}
@@ -239,7 +300,7 @@ class Template
*/
public function resetTemplates()
{
- $this->_file = array();
+ $this->file = [];
}
/**
@@ -247,6 +308,22 @@ class Template
*/
public function resetVariables()
{
- $this->_vars = array();
+ $this->vars = [];
+ }
+
+ /**
+ * @return string
+ */
+ public function getBase()
+ {
+ return $this->base;
+ }
+
+ /**
+ * @param string $base
+ */
+ public function setBase($base)
+ {
+ $this->base = $base;
}
}
\ No newline at end of file
diff --git a/inc/SP/Core/UI/Theme.class.php b/inc/SP/Core/UI/Theme.class.php
new file mode 100644
index 00000000..3d7ee56f
--- /dev/null
+++ b/inc/SP/Core/UI/Theme.class.php
@@ -0,0 +1,227 @@
+.
+ */
+
+namespace SP\Core\UI;
+
+use SP\Config\Config;
+use SP\Core\Init;
+use SP\Core\Session;
+use SP\Mgmt\Users\UserPreferences;
+use Theme\Icons;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class Theme
+ *
+ * @package SP
+ */
+class Theme implements ThemeInterface
+{
+ /**
+ * @var string
+ */
+ protected $themeUri = '';
+ /**
+ * @var string
+ */
+ protected $themePath = '';
+ /**
+ * @var string
+ */
+ protected $themePathFull = '';
+ /**
+ * @var string
+ */
+ protected $themeName = '';
+ /**
+ * @var string
+ */
+ protected $viewsPath = '';
+ /**
+ * @var ThemeIconsInterface
+ */
+ protected $icons;
+
+ /**
+ * Theme constructor.
+ */
+ public function __construct()
+ {
+ $this->initTheme();
+ $this->initIcons();
+ }
+
+ /**
+ * Inicializar el tema visual a utilizar
+ *
+ * @param bool $force Forzar la detección del tema para los inicios de sesión
+ * @return void
+ */
+ public function initTheme($force = false)
+ {
+ $this->themeName = Session::getTheme();
+
+ if (empty($this->themeName) || $force === true) {
+ $this->themeName = $this->getUserTheme() ?: $this->getGlobalTheme();
+ Session::setTheme($this->themeName);
+ }
+
+ $this->themeUri = Init::$WEBURI . '/inc/themes/' . $this->themeName;
+ $this->themePath = DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'themes' . DIRECTORY_SEPARATOR . $this->themeName;
+ $this->themePathFull = Init::$SERVERROOT . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'themes' . DIRECTORY_SEPARATOR . $this->themeName;
+ $this->viewsPath = $this->themePathFull . DIRECTORY_SEPARATOR . 'views';
+ }
+
+ /**
+ * Obtener el tema visual del usuario
+ *
+ * @return string
+ */
+ protected function getUserTheme()
+ {
+ $userId = Session::getUserData()->getUserId();
+
+ return ($userId > 0) ? UserPreferences::getItem()->getById($userId)->getTheme() : '';
+ }
+
+ /**
+ * Devolver el tema visual de sysPass desde la configuración
+ */
+ protected function getGlobalTheme()
+ {
+ $this->themeName = Config::getConfig()->getSiteTheme();
+
+ return $this->themeName;
+ }
+
+ /**
+ * Inicializar los iconos del tema actual
+ *
+ * @return ThemeIconsInterface
+ */
+ protected function initIcons()
+ {
+ $iconsClass = $this->themePathFull . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'Icons.class.php';
+
+ if (file_exists($iconsClass)) {
+ include_once $iconsClass;
+
+ $this->icons = new Icons();
+ }
+
+ return $this->icons;
+ }
+
+ /**
+ * Obtener los temas disponibles desde el directorio de temas
+ *
+ * @return array Con la información del tema
+ */
+ public function getThemesAvailable()
+ {
+ $themesAvailable = array();
+
+ $themesDirs = dir(VIEW_PATH);
+
+ while (false !== ($themeDir = $themesDirs->read())) {
+ if ($themeDir != '.' && $themeDir != '..') {
+ $themeFile = VIEW_PATH . DIRECTORY_SEPARATOR . $themeDir . DIRECTORY_SEPARATOR . 'index.php';
+
+ if (file_exists($themeFile)) {
+ include $themeFile;
+
+ $themesAvailable[$themeDir] = $themeInfo['name'];
+ }
+ }
+ }
+
+ $themesDirs->close();
+
+ return $themesAvailable;
+ }
+
+ /**
+ * Obtener la información del tema desde el archivo de información
+ *
+ * @return array (
+ * 'name' => string
+ * 'creator' => string
+ * 'version' => string
+ * 'js' => array
+ * 'css' => array
+ * )
+ */
+ public function getThemeInfo()
+ {
+ $themeFile = $this->themePathFull . DIRECTORY_SEPARATOR . 'index.php';
+ $themeInfo = array();
+
+ if (file_exists($themeFile)) {
+ include $themeFile;
+ }
+
+ return $themeInfo;
+ }
+
+ /**
+ * @return string
+ */
+ public function getThemeUri()
+ {
+ return $this->themeUri;
+ }
+
+ /**
+ * @return string
+ */
+ public function getThemePath()
+ {
+ return $this->themePath;
+ }
+
+ /**
+ * @return string
+ */
+ public function getThemeName()
+ {
+ return $this->themeName;
+ }
+
+ /**
+ * @return ThemeIconsInterface
+ */
+ public function getIcons()
+ {
+ return $this->icons;
+ }
+
+ /**
+ * @return string
+ */
+ public function getViewsPath()
+ {
+ return $this->viewsPath;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Core/UI/ThemeIconsBase.class.php b/inc/SP/Core/UI/ThemeIconsBase.class.php
new file mode 100644
index 00000000..68bdd389
--- /dev/null
+++ b/inc/SP/Core/UI/ThemeIconsBase.class.php
@@ -0,0 +1,537 @@
+.
+ */
+
+namespace SP\Core\UI;
+
+use SP\Html\Assets\FontIcon;
+use SP\Html\Assets\ImageIcon;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class ThemeIconsBase para la implementación de los iconos del tema visual
+ *
+ * @package SP\Core
+ */
+abstract class ThemeIconsBase implements ThemeIconsInterface
+{
+ /** @var FontIcon|ImageIcon */
+ protected $iconAdd;
+ /** @var FontIcon|ImageIcon */
+ protected $iconView;
+ /** @var FontIcon|ImageIcon */
+ protected $iconEdit;
+ /** @var FontIcon|ImageIcon */
+ protected $iconDelete;
+ /** @var FontIcon|ImageIcon */
+ protected $iconNavPrev;
+ /** @var FontIcon|ImageIcon */
+ protected $iconNavNext;
+ /** @var FontIcon|ImageIcon */
+ protected $iconNavFirst;
+ /** @var FontIcon|ImageIcon */
+ protected $iconNavLast;
+ /** @var FontIcon|ImageIcon */
+ protected $iconEditPass;
+ /** @var FontIcon|ImageIcon */
+ protected $iconAppAdmin;
+ /** @var FontIcon|ImageIcon */
+ protected $iconAccAdmin;
+ /** @var FontIcon|ImageIcon */
+ protected $iconLdapUser;
+ /** @var FontIcon|ImageIcon */
+ protected $iconDisabled;
+ /** @var FontIcon|ImageIcon */
+ protected $iconEnabled;
+ /** @var FontIcon|ImageIcon */
+ protected $iconViewPass;
+ /** @var FontIcon|ImageIcon */
+ protected $iconCopy;
+ /** @var FontIcon|ImageIcon */
+ protected $iconClipboard;
+ /** @var FontIcon|ImageIcon */
+ protected $iconEmail;
+ /** @var FontIcon|ImageIcon */
+ protected $iconOptional;
+ /** @var FontIcon|ImageIcon */
+ protected $iconUp;
+ /** @var FontIcon|ImageIcon */
+ protected $iconDown;
+ /** @var FontIcon|ImageIcon */
+ protected $iconRefresh;
+ /** @var FontIcon|ImageIcon */
+ protected $iconPublicLink;
+ /** @var FontIcon|ImageIcon */
+ protected $iconBack;
+ /** @var FontIcon|ImageIcon */
+ protected $iconRestore;
+ /** @var FontIcon|ImageIcon */
+ protected $iconSave;
+ /** @var FontIcon|ImageIcon */
+ protected $iconHelp;
+ /** @var FontIcon|ImageIcon */
+ protected $iconClear;
+ /** @var FontIcon|ImageIcon */
+ protected $iconPlay;
+ /** @var FontIcon|ImageIcon */
+ protected $iconDownload;
+ /** @var FontIcon|ImageIcon */
+ protected $iconWarning;
+ /** @var FontIcon|ImageIcon */
+ protected $iconCheck;
+ /** @var FontIcon|ImageIcon */
+ protected $iconSearch;
+ /** @var FontIcon|ImageIcon */
+ protected $iconAccount;
+ /** @var FontIcon|ImageIcon */
+ protected $iconGroup;
+ /** @var FontIcon|ImageIcon */
+ protected $iconSettings;
+ /** @var FontIcon|ImageIcon */
+ protected $iconHeadline;
+ /** @var FontIcon|ImageIcon */
+ protected $iconInfo;
+ /** @var FontIcon|ImageIcon */
+ protected $iconCritical;
+ /** @var FontIcon|ImageIcon */
+ protected $iconNotices;
+ /** @var FontIcon|ImageIcon */
+ protected $iconRemove;
+
+ /**
+ * Icons constructor.
+ */
+ public function __construct()
+ {
+ $this->setIcons();
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconWarning()
+ {
+ return $this->iconWarning;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconDownload()
+ {
+ return $this->iconDownload;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconClear()
+ {
+ return $this->iconClear;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconPlay()
+ {
+ return $this->iconPlay;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconHelp()
+ {
+ return $this->iconHelp;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconPublicLink()
+ {
+ return $this->iconPublicLink;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconBack()
+ {
+ return $this->iconBack;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconRestore()
+ {
+ return $this->iconRestore;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconSave()
+ {
+ return $this->iconSave;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconUp()
+ {
+ return $this->iconUp;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconDown()
+ {
+ return $this->iconDown;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconViewPass()
+ {
+ return $this->iconViewPass;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconCopy()
+ {
+ return $this->iconCopy;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconClipboard()
+ {
+ return $this->iconClipboard;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconEmail()
+ {
+ return $this->iconEmail;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconRefresh()
+ {
+ return $this->iconRefresh;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconEditPass()
+ {
+ return $this->iconEditPass;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconAppAdmin()
+ {
+ return $this->iconAppAdmin;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconAccAdmin()
+ {
+ return $this->iconAccAdmin;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconLdapUser()
+ {
+ return $this->iconLdapUser;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconDisabled()
+ {
+ return $this->iconDisabled;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconNavPrev()
+ {
+ return $this->iconNavPrev;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconNavNext()
+ {
+ return $this->iconNavNext;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconNavFirst()
+ {
+ return $this->iconNavFirst;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconNavLast()
+ {
+ return $this->iconNavLast;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconAdd()
+ {
+ return $this->iconAdd;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconView()
+ {
+ return $this->iconView;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconEdit()
+ {
+ return $this->iconEdit;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconDelete()
+ {
+ return $this->iconDelete;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconOptional()
+ {
+ return $this->iconOptional;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconCheck()
+ {
+ return $this->iconCheck;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconSearch()
+ {
+ return $this->iconSearch;
+ }
+
+ /**
+ * @param FontIcon|ImageIcon $iconSearch
+ */
+ public function setIconSearch($iconSearch)
+ {
+ $this->iconSearch = $iconSearch;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconAccount()
+ {
+ return $this->iconAccount;
+ }
+
+ /**
+ * @param FontIcon|ImageIcon $iconAccount
+ */
+ public function setIconAccount($iconAccount)
+ {
+ $this->iconAccount = $iconAccount;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconGroup()
+ {
+ return $this->iconGroup;
+ }
+
+ /**
+ * @param FontIcon|ImageIcon $iconGroup
+ */
+ public function setIconGroup($iconGroup)
+ {
+ $this->iconGroup = $iconGroup;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconSettings()
+ {
+ return $this->iconSettings;
+ }
+
+ /**
+ * @param FontIcon|ImageIcon $iconSettings
+ */
+ public function setIconSettings($iconSettings)
+ {
+ $this->iconSettings = $iconSettings;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconHeadline()
+ {
+ return $this->iconHeadline;
+ }
+
+ /**
+ * @param FontIcon|ImageIcon $iconHeadline
+ */
+ public function setIconHeadline($iconHeadline)
+ {
+ $this->iconHeadline = $iconHeadline;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconInfo()
+ {
+ return $this->iconInfo;
+ }
+
+ /**
+ * @param FontIcon|ImageIcon $iconInfo
+ */
+ public function setIconInfo($iconInfo)
+ {
+ $this->iconInfo = $iconInfo;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconCritical()
+ {
+ return $this->iconCritical;
+ }
+
+ /**
+ * @param FontIcon|ImageIcon $iconCritical
+ */
+ public function setIconCritical($iconCritical)
+ {
+ $this->iconCritical = $iconCritical;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconEnabled()
+ {
+ return $this->iconEnabled;
+ }
+
+ /**
+ * @param FontIcon|ImageIcon $iconEnabled
+ */
+ public function setIconEnabled($iconEnabled)
+ {
+ $this->iconEnabled = $iconEnabled;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconNotices()
+ {
+ return $this->iconNotices;
+ }
+
+ /**
+ * @param FontIcon|ImageIcon $iconNotices
+ */
+ public function setIconNotices($iconNotices)
+ {
+ $this->iconNotices = $iconNotices;
+ }
+
+ /**
+ * @return FontIcon|ImageIcon
+ */
+ public function getIconRemove()
+ {
+ return $this->iconRemove;
+ }
+
+ /**
+ * @param FontIcon|ImageIcon $iconRemove
+ */
+ public function setIconRemove($iconRemove)
+ {
+ $this->iconRemove = $iconRemove;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Core/UI/ThemeIconsInterface.class.php b/inc/SP/Core/UI/ThemeIconsInterface.class.php
new file mode 100644
index 00000000..78242700
--- /dev/null
+++ b/inc/SP/Core/UI/ThemeIconsInterface.class.php
@@ -0,0 +1,40 @@
+.
+ */
+
+namespace SP\Core\UI;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Interface ThemeIconsInterface
+ *
+ * @package SP\Core
+ */
+interface ThemeIconsInterface
+{
+ /**
+ * @return mixed
+ */
+ public function setIcons();
+}
\ No newline at end of file
diff --git a/inc/SP/Core/UI/ThemeInterface.class.php b/inc/SP/Core/UI/ThemeInterface.class.php
new file mode 100644
index 00000000..485f61f2
--- /dev/null
+++ b/inc/SP/Core/UI/ThemeInterface.class.php
@@ -0,0 +1,84 @@
+.
+ */
+
+namespace SP\Core\UI;
+
+/**
+ * Interface ThemeInterface
+ *
+ * @package SP\Core\UI
+ */
+interface ThemeInterface
+{
+ /**
+ * @param bool $force Forzar la detección del tema para los inicios de sesión
+ * @return mixed
+ */
+ public function initTheme($force = false);
+
+ /**
+ * Obtener los temas disponibles desde el directorio de temas
+ *
+ * @return array Con la información del tema
+ */
+ public function getThemesAvailable();
+
+ /**
+ * Obtener la información del tema desde el archivo de información
+ *
+ * @return array (
+ * 'name' => string
+ * 'creator' => string
+ * 'version' => string
+ * 'js' => array
+ * 'css' => array
+ * )
+ */
+ public function getThemeInfo();
+
+ /**
+ * @return string
+ */
+ public function getThemeUri();
+
+ /**
+ * @return string
+ */
+ public function getThemePath();
+
+ /**
+ * @return string
+ */
+ public function getThemeName();
+
+ /**
+ * @return ThemeIconsInterface
+ */
+ public function getIcons();
+
+ /**
+ * @return string
+ */
+ public function getViewsPath();
+}
\ No newline at end of file
diff --git a/inc/SP/Core/Upgrade.class.php b/inc/SP/Core/Upgrade.class.php
new file mode 100644
index 00000000..0df3b04b
--- /dev/null
+++ b/inc/SP/Core/Upgrade.class.php
@@ -0,0 +1,356 @@
+.
+ */
+
+namespace SP\Core;
+
+use SP\Config\Config;
+use SP\Config\ConfigData;
+use SP\Core\Exceptions\SPException;
+use SP\Log\Email;
+use SP\Log\Log;
+use SP\Mgmt\CustomFields\CustomFieldsUtil;
+use SP\Mgmt\Profiles\ProfileUtil;
+use SP\Mgmt\Users\UserMigrate;
+use SP\Mgmt\Users\UserPreferencesUtil;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Esta clase es la encargada de realizar las operaciones actualización de la aplicación.
+ */
+class Upgrade
+{
+ private static $dbUpgrade = [110, 1121, 1122, 1123, 11213, 11219, 11220, 12001, 12002, 1316011001, 1316020501, 1316100601, 20017011302, 20017011701, 20017012901];
+ private static $cfgUpgrade = [1124, 1316020501, 20017011202];
+ private static $auxUpgrade = [12001, 12002, 20017010901, 20017011202];
+
+ /**
+ * Inicia el proceso de actualización de la BBDD.
+ *
+ * @param int $version con la versión de la BBDD actual
+ * @return bool
+ * @throws \phpmailer\phpmailerException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ * @throws \InvalidArgumentException
+ * @throws SPException
+ */
+ public static function doUpgrade($version)
+ {
+ foreach (self::$dbUpgrade as $upgradeVersion) {
+ if ($version < $upgradeVersion && self::upgradeDB($upgradeVersion) === false) {
+ throw new SPException(SPException::SP_CRITICAL, __('Error al aplicar la actualización de la Base de Datos', false),
+ __('Compruebe el registro de eventos para más detalles', false));
+ }
+ }
+
+ foreach (self::$auxUpgrade as $upgradeVersion) {
+ if ($version < $upgradeVersion && self::auxUpgrades($upgradeVersion) === false) {
+ throw new SPException(SPException::SP_CRITICAL,
+ __('Error al aplicar la actualización auxiliar', false),
+ __('Compruebe el registro de eventos para más detalles', false));
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Actualiza la BBDD según la versión.
+ *
+ * @param int $version con la versión a actualizar
+ * @returns bool
+ * @throws \phpmailer\phpmailerException
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ private static function upgradeDB($version)
+ {
+ $Log = new Log();
+ $LogMessage = $Log->getLogMessage();
+ $LogMessage->setAction(__('Actualizar BBDD', false));
+ $LogMessage->addDetails(__('Versión', false), $version);
+
+ $queries = self::getQueriesFromFile($version);
+
+ if (count($queries) === 0) {
+ $LogMessage->addDescription(__('No es necesario actualizar la Base de Datos.', false));
+ $Log->writeLog();
+ return true;
+ }
+
+ $Data = new QueryData();
+
+ foreach ($queries as $query) {
+ try {
+ $Data->setQuery($query);
+ DB::getQuery($Data);
+ } catch (SPException $e) {
+ $LogMessage->addDescription(__('Error al aplicar la actualización de la Base de Datos.', false));
+ $LogMessage->addDetails('ERROR', sprintf('%s (%s)', $e->getMessage(), $e->getCode()));
+ $Log->setLogLevel(Log::ERROR);
+ $Log->writeLog();
+
+ Email::sendEmail($LogMessage);
+ return false;
+ }
+ }
+
+ $LogMessage->addDescription(__('Actualización de la Base de Datos realizada correctamente.', false));
+ $Log->writeLog();
+
+ Email::sendEmail($LogMessage);
+
+ return true;
+ }
+
+ /**
+ * Obtener las consultas de actualización desde un archivo
+ *
+ * @param $filename
+ * @return array|bool
+ */
+ private static function getQueriesFromFile($filename)
+ {
+ $file = SQL_PATH . DIRECTORY_SEPARATOR . $filename . '.sql';
+
+ $queries = [];
+
+ if (file_exists($file) && $handle = fopen($file, 'rb')) {
+ while (!feof($handle)) {
+ $buffer = stream_get_line($handle, 1000000, ";\n");
+
+ if (strlen(trim($buffer)) > 0) {
+ $queries[] = str_replace("\n", '', $buffer);
+ }
+ }
+ }
+
+ return $queries;
+ }
+
+ /**
+ * Aplicar actualizaciones auxiliares.
+ *
+ * @param $version int El número de versión
+ * @return bool
+ * @throws \SP\Core\Exceptions\QueryException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ * @throws \phpmailer\phpmailerException
+ * @throws \InvalidArgumentException
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ */
+ private static function auxUpgrades($version)
+ {
+ switch ($version) {
+ case 12001:
+ return (ProfileUtil::migrateProfiles() && UserMigrate::migrateUsersGroup());
+ case 12002:
+ return UserMigrate::setMigrateUsers();
+ case 20017010901:
+ return CustomFieldsUtil::migrateCustomFields() && UserPreferencesUtil::migrate();
+ case 20017011202:
+ return UserPreferencesUtil::migrate();
+ }
+
+ return true;
+ }
+
+ /**
+ * Comprueba si es necesario actualizar la BBDD.
+ *
+ * @param int $version con el número de versión actual
+ * @returns bool
+ */
+ public static function needDBUpgrade($version)
+ {
+ $latestUpgrade = self::$dbUpgrade[count(self::$dbUpgrade) - 1];
+
+ return version_compare($version, $latestUpgrade) < 0;
+ }
+
+ /**
+ * Comprueba si es necesario actualizar la configuración.
+ *
+ * @param int $version con el número de versión actual
+ * @returns bool
+ */
+ public static function needConfigUpgrade($version)
+ {
+ $latestUpgrade = self::$cfgUpgrade[count(self::$cfgUpgrade) - 1];
+
+ return version_compare($version, $latestUpgrade) < 0;
+ }
+
+ /**
+ * Migrar valores de configuración.
+ *
+ * @param int $version El número de versión
+ * @return bool
+ */
+ public static function upgradeConfig($version)
+ {
+ $count = 0;
+ $Config = Config::getConfig();
+
+ foreach (self::$cfgUpgrade as $upgradeVersion) {
+ if (version_compare($version, $upgradeVersion) < 0) {
+ switch ($upgradeVersion) {
+ case 20017011202:
+ $Config->setSiteTheme('material-blue');
+ $Config->setConfigVersion($upgradeVersion);
+ Config::saveConfig($Config, false);
+ $count++;
+ break;
+ }
+ }
+ }
+
+ return $count > 0;
+ }
+
+ /**
+ * Actualizar el archivo de configuración a formato XML
+ *
+ * @param $version
+ * @return bool
+ */
+ public static function upgradeOldConfigFile($version)
+ {
+ $Log = new Log();
+ $LogMessage = $Log->getLogMessage();
+ $LogMessage->setAction(__('Actualizar Configuración', false));
+
+ $Config = new ConfigData();
+
+ // Include the file, save the data from $CONFIG
+ include CONFIG_FILE;
+
+ if (isset($CONFIG) && is_array($CONFIG)) {
+ foreach (self::getConfigParams() as $mapTo => $mapFrom) {
+ if (method_exists($Config, $mapTo)) {
+ if (is_array($mapFrom)) {
+ foreach ($mapFrom as $param) {
+ if (isset($CONFIG[$param])) {
+ $LogMessage->addDetails(__('Parámetro', false), $param);
+ $Config->$mapTo($CONFIG[$param]);
+ }
+ }
+ } else {
+ if (isset($CONFIG[$mapFrom])) {
+ $LogMessage->addDetails(__('Parámetro', false), $mapFrom);
+ $Config->$mapTo($CONFIG[$mapFrom]);
+ }
+ }
+ }
+ }
+ }
+
+ try {
+ $Config->setSiteTheme('material-blue');
+ $Config->setConfigVersion($version);
+ Config::saveConfig($Config, false);
+ rename(CONFIG_FILE, CONFIG_FILE . '.old');
+
+ $LogMessage->addDetails(__('Versión', false), $version);
+ $Log->setLogLevel(Log::NOTICE);
+ $Log->writeLog();
+
+ return true;
+ } catch (\Exception $e) {
+ $LogMessage->addDescription(__('Error al actualizar la configuración', false));
+ $LogMessage->addDetails(__('Archivo', false), CONFIG_FILE . '.old');
+ $Log->setLogLevel(Log::ERROR);
+ $Log->writeLog();
+ }
+
+ // We are here...wrong
+ return false;
+ }
+
+ /**
+ * Devuelve array de métodos y parámetros de configuración
+ *
+ * @return array
+ */
+ private static function getConfigParams()
+ {
+ return [
+ 'setAccountCount' => 'account_count',
+ 'setAccountLink' => 'account_link',
+ 'setCheckUpdates' => 'checkupdates',
+ 'setCheckNotices' => 'checknotices',
+ 'setDbHost' => 'dbhost',
+ 'setDbName' => 'dbname',
+ 'setDbPass' => 'dbpass',
+ 'setDbUser' => 'dbuser',
+ 'setDebug' => 'debug',
+ 'setDemoEnabled' => 'demo_enabled',
+ 'setGlobalSearch' => 'globalsearch',
+ 'setInstalled' => 'installed',
+ 'setMaintenance' => 'maintenance',
+ 'setPasswordSalt' => 'passwordsalt',
+ 'setSessionTimeout' => 'session_timeout',
+ 'setSiteLang' => 'sitelang',
+ 'setConfigVersion' => 'version',
+ 'setConfigHash' => 'config_hash',
+ 'setProxyEnabled' => 'proxy_enabled',
+ 'setProxyPass' => 'proxy_pass',
+ 'setProxyPort' => 'proxy_port',
+ 'setProxyServer' => 'proxy_server',
+ 'setProxyUser' => 'proxy_user',
+ 'setResultsAsCards' => 'resultsascards',
+ 'setSiteTheme' => 'sitetheme',
+ 'setAccountPassToImage' => 'account_passtoimage',
+ 'setFilesAllowedExts' => ['allowed_exts', 'files_allowed_exts'],
+ 'setFilesAllowedSize' => ['allowed_size', 'files_allowed_size'],
+ 'setFilesEnabled' => ['filesenabled', 'files_enabled'],
+ 'setLdapBase' => ['ldapbase', 'ldap_base'],
+ 'setLdapBindPass' => ['ldapbindpass', 'ldap_bindpass'],
+ 'setLdapBindUser' => ['ldapbinduser', 'ldap_binduser'],
+ 'setLdapEnabled' => ['ldapenabled', 'ldap_enabled'],
+ 'setLdapGroup' => ['ldapgroup', 'ldap_group'],
+ 'setLdapServer' => ['ldapserver', 'ldap_server'],
+ 'setLdapAds' => 'ldap_ads',
+ 'setLdapDefaultGroup' => 'ldap_defaultgroup',
+ 'setLdapDefaultProfile' => 'ldap_defaultprofile',
+ 'setLogEnabled' => ['logenabled', 'log_enabled'],
+ 'setMailEnabled' => ['mailenabled', 'mail_enabled'],
+ 'setMailFrom' => ['mailfrom', 'mail_from'],
+ 'setMailPass' => ['mailpass', 'mail_pass'],
+ 'setMailPort' => ['mailport', 'mail_port'],
+ 'setMailRequestsEnabled' => ['mailrequestsenabled', 'mail_requestsenabled'],
+ 'setMailAuthenabled' => 'mail_authenabled',
+ 'setMailSecurity' => ['mailsecurity', 'mail_security'],
+ 'setMailServer' => ['mailserver', 'mail_server'],
+ 'setMailUser' => ['mailuser', 'mail_user'],
+ 'setWikiEnabled' => ['wikienabled', 'wiki_enabled'],
+ 'setWikiFilter' => ['wikifilter', 'wiki_filter'],
+ 'setWikiPageUrl' => ['wikipageurl' . 'wiki_pageurl'],
+ 'setWikiSearchUrl' => ['wikisearchurl', 'wiki_searchurl']
+ ];
+ }
+}
\ No newline at end of file
diff --git a/inc/XmlExport.class.php b/inc/SP/Core/XmlExport.class.php
similarity index 52%
rename from inc/XmlExport.class.php
rename to inc/SP/Core/XmlExport.class.php
index f3e51999..c41fb6fc 100644
--- a/inc/XmlExport.class.php
+++ b/inc/SP/Core/XmlExport.class.php
@@ -2,9 +2,9 @@
/**
* sysPass
*
- * @author nuxsmin
- * @link http://syspass.org
- * @copyright 2012-2015 Rubén Domínguez nuxsmin@syspass.org
+ * @author nuxsmin
+ * @link http://syspass.org
+ * @copyright 2012-2017, Rubén Domínguez nuxsmin@$syspass.org
*
* This file is part of sysPass.
*
@@ -19,13 +19,23 @@
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with sysPass. If not, see .
- *
+ * along with sysPass. If not, see .
*/
-namespace SP;
+namespace SP\Core;
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+use SP\Account\AccountUtil;
+use SP\Config\Config;
+use SP\Core\Exceptions\SPException;
+use SP\DataModel\CategoryData;
+use SP\Log\Email;
+use SP\Log\Log;
+use SP\Mgmt\Categories\Category;
+use SP\Mgmt\Customers\Customer;
+use SP\Mgmt\Tags\Tag;
+use SP\Util\Util;
+
+defined('APP_ROOT') || die();
/**
* Clase XmlExport para realizar la exportación de las cuentas de sysPass a formato XML
@@ -37,34 +47,34 @@ class XmlExport
/**
* @var \DOMDocument
*/
- private $_xml;
+ private $xml;
/**
* @var \DOMElement
*/
- private $_root;
+ private $root;
/**
* @var string
*/
- private $_exportPass = null;
+ private $exportPass;
/**
* @var bool
*/
- private $_encrypted = false;
+ private $encrypted = false;
/**
* @var string
*/
- private $_exportDir = '';
+ private $exportDir = '';
/**
* @var string
*/
- private $_exportFile = '';
+ private $exportFile = '';
/**
* Constructor
*/
public function __construct()
{
- $this->_xml = new \DOMDocument('1.0', 'UTF-8');
+ $this->xml = new \DOMDocument('1.0', 'UTF-8');
}
/**
@@ -77,7 +87,7 @@ class XmlExport
{
$xml = new XmlExport();
- if (!is_null($pass) && !empty($pass)) {
+ if (null !== $pass && !empty($pass)) {
$xml->setExportPass($pass);
$xml->setEncrypted(true);
}
@@ -96,7 +106,7 @@ class XmlExport
*/
public function setExportPass($exportPass)
{
- $this->_exportPass = $exportPass;
+ $this->exportPass = $exportPass;
}
/**
@@ -104,30 +114,46 @@ class XmlExport
*/
public function setEncrypted($encrypted)
{
- $this->_encrypted = $encrypted;
+ $this->encrypted = $encrypted;
}
/**
* Crear el documento XML y guardarlo
*
* @return bool
+ * @throws \phpmailer\phpmailerException
*/
public function makeXML()
{
+ $Log = new Log();
+ $LogMessage = $Log->getLogMessage();
+ $LogMessage->setAction(__('Exportar XML', false));
+
try {
$this->checkExportDir();
$this->createRoot();
$this->createMeta();
$this->createCategories();
$this->createCustomers();
+ $this->createTags();
$this->createAccounts();
$this->createHash();
$this->writeXML();
} catch (SPException $e) {
- Log::writeNewLog(_('Exportar XML'), sprintf('%s (%s)', $e->getMessage(), $e->getHint()));
+ $LogMessage->addDescription(__('Error al realizar la exportación de cuentas', false));
+ $LogMessage->addDetails($e->getMessage(), $e->getHint());
+ $Log->setLogLevel(Log::ERROR);
+ $Log->writeLog();
+
+ Email::sendEmail($LogMessage);
return false;
}
+ $LogMessage->addDescription(__('Exportación de cuentas realizada correctamente', false));
+ $Log->writeLog();
+
+ Email::sendEmail($LogMessage);
+
return true;
}
@@ -139,8 +165,8 @@ class XmlExport
private function createRoot()
{
try {
- $root = $this->_xml->createElement('Root');
- $this->_root = $this->_xml->appendChild($root);
+ $root = $this->xml->createElement('Root');
+ $this->root = $this->xml->appendChild($root);
} catch (\DOMException $e) {
throw new SPException(SPException::SP_WARNING, $e->getMessage(), __FUNCTION__);
}
@@ -154,14 +180,14 @@ class XmlExport
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 = $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::getUserData()->getUserLogin());
+ $metaUser->setAttribute('id', Session::getUserData()->getUserId());
+ $metaGroup = $this->xml->createElement('Group', Session::getUserData()->getUsergroupName());
+ $metaGroup->setAttribute('id', Session::getUserData()->getUserGroupId());
$nodeMeta->appendChild($metaGenerator);
$nodeMeta->appendChild($metaVersion);
@@ -169,7 +195,7 @@ class XmlExport
$nodeMeta->appendChild($metaUser);
$nodeMeta->appendChild($metaGroup);
- $this->_root->appendChild($nodeMeta);
+ $this->root->appendChild($nodeMeta);
} catch (\DOMException $e) {
throw new SPException(SPException::SP_WARNING, $e->getMessage(), __FUNCTION__);
}
@@ -182,7 +208,8 @@ class XmlExport
*/
private function createCategories()
{
- $categories = Category::getCategories();
+ $Category = new Category();
+ $categories = $Category->getAll();
if (count($categories) === 0) {
return;
@@ -190,15 +217,16 @@ class XmlExport
try {
// Crear el nodo de categorías
- $nodeCategories = $this->_xml->createElement('Categories');
+ $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));
+ foreach ($categories as $CategoryData) {
+ /** @var $CategoryData CategoryData */
+ $categoryName = $this->xml->createElement('name', $this->escapeChars($CategoryData->getCategoryName()));
+ $categoryDescription = $this->xml->createElement('description', $this->escapeChars($CategoryData->getCategoryDescription()));
// Crear el nodo de categoría
- $nodeCategory = $this->_xml->createElement('Category');
- $nodeCategory->setAttribute('id', $category->category_id);
+ $nodeCategory = $this->xml->createElement('Category');
+ $nodeCategory->setAttribute('id', $CategoryData->getCategoryId());
$nodeCategory->appendChild($categoryName);
$nodeCategory->appendChild($categoryDescription);
@@ -220,8 +248,8 @@ class XmlExport
*/
private function escapeChars($data)
{
- $arrStrFrom = array("&", "<", ">", "\"", "\'");
- $arrStrTo = array("&", "<", ">", """, "'");
+ $arrStrFrom = ['&', '<', '>', '"', '\''];
+ $arrStrTo = ['&', '<', '>', '"', '''];
return str_replace($arrStrFrom, $arrStrTo, $data);
}
@@ -237,25 +265,26 @@ class XmlExport
try {
// Si se utiliza clave de encriptación los datos se encriptan en un nuevo nodo:
// Encrypted -> Data
- if ($this->_encrypted === true) {
+ if ($this->encrypted === true) {
// Obtener el nodo en formato XML
- $nodeXML = $this->_xml->saveXML($node);
+ $nodeXML = $this->xml->saveXML($node);
// Crear los datos encriptados con la información del nodo
- $encrypted = Crypt::mkEncrypt($nodeXML, $this->_exportPass);
+ $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);
+ $encryptedNode = $this->root->getElementsByTagName('Encrypted')->item(0);
if (!$encryptedNode instanceof \DOMElement) {
- $encryptedNode = $this->_xml->createElement('Encrypted');
+ $encryptedNode = $this->xml->createElement('Encrypted');
+ $encryptedNode->setAttribute('hash', Crypt::mkHashPassword($this->exportPass));
}
// Crear el nodo hijo con los datos encriptados
- $encryptedData = $this->_xml->createElement('Data', base64_encode($encrypted));
+ $encryptedData = $this->xml->createElement('Data', base64_encode($encrypted));
- $encryptedDataIV = $this->_xml->createAttribute('iv');
+ $encryptedDataIV = $this->xml->createAttribute('iv');
$encryptedDataIV->value = base64_encode($encryptedIV);
// Añadir nodos de datos
@@ -263,9 +292,9 @@ class XmlExport
$encryptedNode->appendChild($encryptedData);
// Añadir el nodo encriptado
- $this->_root->appendChild($encryptedNode);
+ $this->root->appendChild($encryptedNode);
} else {
- $this->_root->appendChild($node);
+ $this->root->appendChild($node);
}
} catch (\DOMException $e) {
throw new SPException(SPException::SP_WARNING, $e->getMessage(), __FUNCTION__);
@@ -279,7 +308,7 @@ class XmlExport
*/
private function createCustomers()
{
- $customers = Customer::getCustomers();
+ $customers = Customer::getItem()->getAll();
if (count($customers) === 0) {
return;
@@ -287,19 +316,19 @@ class XmlExport
try {
// Crear el nodo de clientes
- $nodeCustomers = $this->_xml->createElement('Customers');
+ $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));
+ foreach ($customers as $CustomerData) {
+ $customerName = $this->xml->createElement('name', $this->escapeChars($CustomerData->getCustomerName()));
+ $customerDescription = $this->xml->createElement('description', $this->escapeChars($CustomerData->getCustomerDescription()));
- // Crear el nodo de categoría
- $nodeCustomer = $this->_xml->createElement('Customer');
- $nodeCustomer->setAttribute('id', $customer->customer_id);
+ // Crear el nodo de clientes
+ $nodeCustomer = $this->xml->createElement('Customer');
+ $nodeCustomer->setAttribute('id', $CustomerData->getCustomerId());
$nodeCustomer->appendChild($customerName);
$nodeCustomer->appendChild($customerDescription);
- // Añadir categoría al nodo de categorías
+ // Añadir cliente al nodo de clientes
$nodeCustomers->appendChild($nodeCustomer);
}
@@ -309,6 +338,41 @@ class XmlExport
}
}
+ /**
+ * Crear el nodo con los datos de las etiquetas
+ *
+ * #@throws SPException
+ */
+ private function createTags()
+ {
+ $Tags = Tag::getItem()->getAll();
+
+ if (count($Tags) === 0) {
+ return;
+ }
+
+ try {
+ // Crear el nodo de etiquetas
+ $nodeTags= $this->xml->createElement('Tags');
+
+ foreach ($Tags as $TagData) {
+ $tagName = $this->xml->createElement('name', $this->escapeChars($TagData->getTagName()));
+
+ // Crear el nodo de etiquetas
+ $nodeTag = $this->xml->createElement('Tag');
+ $nodeTag->setAttribute('id', $TagData->getTagId());
+ $nodeTag->appendChild($tagName);
+
+ // Añadir etiqueta al nodo de etiquetas
+ $nodeTags->appendChild($nodeTag);
+ }
+
+ $this->appendNode($nodeTags);
+ } catch (\DOMException $e) {
+ throw new SPException(SPException::SP_WARNING, $e->getMessage(), __FUNCTION__);
+ }
+ }
+
/**
* Crear el nodo con los datos de las cuentas
*
@@ -316,7 +380,7 @@ class XmlExport
*/
private function createAccounts()
{
- $accounts = Account::getAccountsData();
+ $accounts = AccountUtil::getAccountsData();
if (count($accounts) === 0) {
return;
@@ -324,20 +388,20 @@ class XmlExport
try {
// Crear el nodo de cuentas
- $nodeAccounts = $this->_xml->createElement('Accounts');
+ $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)));
+ $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 = $this->xml->createElement('Account');
$nodeAccount->setAttribute('id', $account->account_id);
$nodeAccount->appendChild($accountName);
$nodeAccount->appendChild($accountCustomerId);
@@ -360,19 +424,21 @@ class XmlExport
/**
* Crear el hash del archivo XML e insertarlo en el árbol DOM
+ *
+ * @throws \SP\Core\Exceptions\SPException
*/
private function createHash()
{
try {
- if ($this->_encrypted === true) {
- $hash = md5($this->getNodeXML('Encrypted'));
+ if ($this->encrypted === true) {
+ $hash = sha1($this->getNodeXML('Encrypted'));
} else {
- $hash = md5($this->getNodeXML('Categories') . $this->getNodeXML('Customers') . $this->getNodeXML('Accounts'));
+ $hash = sha1($this->getNodeXML('Categories') . $this->getNodeXML('Customers') . $this->getNodeXML('Accounts'));
}
- $metaHash = $this->_xml->createElement('Hash', $hash);
+ $metaHash = $this->xml->createElement('Hash', $hash);
- $nodeMeta = $this->_root->getElementsByTagName('Meta')->item(0);
+ $nodeMeta = $this->root->getElementsByTagName('Meta')->item(0);
$nodeMeta->appendChild($metaHash);
} catch (\DOMException $e) {
throw new SPException(SPException::SP_WARNING, $e->getMessage(), __FUNCTION__);
@@ -389,7 +455,7 @@ class XmlExport
private function getNodeXML($node)
{
try {
- $nodeXML = $this->_xml->saveXML($this->_root->getElementsByTagName($node)->item(0));
+ $nodeXML = $this->xml->saveXML($this->root->getElementsByTagName($node)->item(0));
return $nodeXML;
} catch (\DOMException $e) {
throw new SPException(SPException::SP_WARNING, $e->getMessage(), __FUNCTION__);
@@ -405,11 +471,11 @@ class XmlExport
private function writeXML()
{
try {
- $this->_xml->formatOutput = true;
- $this->_xml->preserveWhiteSpace = false;
+ $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'));
+ if (!$this->xml->save($this->exportFile)) {
+ throw new SPException(SPException::SP_CRITICAL, __('Error al crear el archivo XML', false));
}
} catch (\DOMException $e) {
throw new SPException(SPException::SP_WARNING, $e->getMessage(), __FUNCTION__);
@@ -422,10 +488,11 @@ class XmlExport
private function setExportFile()
{
// Generar hash unico para evitar descargas no permitidas
- $exportUniqueHash = uniqid();
- Config::setValue('export_hash', $exportUniqueHash);
+ $exportUniqueHash = sha1(uniqid('sysPassExport', true));
+ Config::getConfig()->setExportHash($exportUniqueHash);
+ Config::saveConfig();
- $this->_exportFile = $this->_exportDir . DIRECTORY_SEPARATOR . Util::getAppInfo('appname') . '-' . $exportUniqueHash . '.xml';
+ $this->exportFile = $this->exportDir . DIRECTORY_SEPARATOR . Util::getAppInfo('appname') . '-' . $exportUniqueHash . '.xml';
}
/**
@@ -433,25 +500,7 @@ class XmlExport
*/
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);
+ $this->exportDir = $exportDir;
}
/**
@@ -462,14 +511,14 @@ class XmlExport
*/
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 (@mkdir($this->exportDir, 0750) === false && is_dir($this->exportDir) === false) {
+ throw new SPException(SPException::SP_CRITICAL, sprintf(__('No es posible crear el directorio de backups ("%s")'), $this->exportDir));
}
- if (!is_writable($this->_exportDir)) {
- throw new SPException(SPException::SP_CRITICAL, _('Compruebe los permisos del directorio de backups'));
+ clearstatcache(true, $this->exportDir);
+
+ if (!is_writable($this->exportDir)) {
+ throw new SPException(SPException::SP_CRITICAL, __('Compruebe los permisos del directorio de backups', false));
}
return true;
@@ -480,6 +529,6 @@ class XmlExport
*/
private function deleteOldExports()
{
- array_map('unlink', glob($this->_exportDir . DIRECTORY_SEPARATOR . '*.xml'));
+ array_map('unlink', glob($this->exportDir . DIRECTORY_SEPARATOR . '*.xml'));
}
}
\ No newline at end of file
diff --git a/inc/SP/DataModel/AccountData.class.php b/inc/SP/DataModel/AccountData.class.php
new file mode 100644
index 00000000..0b527f8f
--- /dev/null
+++ b/inc/SP/DataModel/AccountData.class.php
@@ -0,0 +1,543 @@
+.
+ */
+
+namespace SP\DataModel;
+
+defined('APP_ROOT') || die();
+
+use JsonSerializable;
+use SP\Util\Json;
+
+/**
+ * Class AccountData
+ *
+ * @package SP\Account
+ */
+class AccountData extends DataModelBase implements JsonSerializable, DataModelInterface
+{
+ /**
+ * @var int Id de la cuenta.
+ */
+ public $account_id = 0;
+ /**
+ * @var int Id del usuario principal de la cuenta.
+ */
+ public $account_userId = 0;
+ /**
+ * @var int Id del grupo principal de la cuenta.
+ */
+ public $account_userGroupId = 0;
+ /**
+ * @var int Id del usuario que editó la cuenta.
+ */
+ public $account_userEditId = 0;
+ /**
+ * @var string El nombre de la cuenta.
+ */
+ public $account_name = '';
+ /**
+ * @var int Id del cliente de la cuenta.
+ */
+ public $account_customerId = 0;
+ /**
+ * @var int Id de la categoría de la cuenta.
+ */
+ public $account_categoryId = 0;
+ /**
+ * @var string El nombre de usuario de la cuenta.
+ */
+ public $account_login = '';
+ /**
+ * @var string La URL de la cuenta.
+ */
+ public $account_url = '';
+ /**
+ * @var string La clave de la cuenta.
+ */
+ public $account_pass = '';
+ /**
+ * @var string El vector de inicialización de la cuenta.
+ */
+ public $account_IV = '';
+ /**
+ * @var string Las nosta de la cuenta.
+ */
+ public $account_notes = '';
+ /**
+ * @var bool Si se permite la edición por los usuarios secundarios.
+ */
+ public $account_otherUserEdit = false;
+ /**
+ * @var bool Si se permita la edición por los grupos secundarios.
+ */
+ public $account_otherGroupEdit = false;
+ /**
+ * @var int
+ */
+ public $account_dateAdd = 0;
+ /**
+ * @var int
+ */
+ public $account_dateEdit = 0;
+ /**
+ * @var int
+ */
+ public $account_countView = 0;
+ /**
+ * @var int
+ */
+ public $account_countDecrypt = 0;
+ /**
+ * @var int
+ */
+ public $account_isPrivate = 0;
+ /**
+ * @var int
+ */
+ public $account_isPrivateGroup = 0;
+ /**
+ * @var int
+ */
+ public $account_passDate = 0;
+ /**
+ * @var int
+ */
+ public $account_passDateChange = 0;
+ /**
+ * @var int
+ */
+ public $account_parentId = 0;
+
+
+ /**
+ * AccountData constructor.
+ *
+ * @param int $accountId
+ */
+ public function __construct($accountId = 0)
+ {
+ $this->account_id = (int)$accountId;
+ }
+
+ /**
+ * @return int
+ */
+ public function getAccountDateAdd()
+ {
+ return $this->account_dateAdd;
+ }
+
+ /**
+ * @param int $account_dateAdd
+ */
+ public function setAccountDateAdd($account_dateAdd)
+ {
+ $this->account_dateAdd = $account_dateAdd;
+ }
+
+ /**
+ * @return int
+ */
+ public function getAccountDateEdit()
+ {
+ return $this->account_dateEdit;
+ }
+
+ /**
+ * @param int $account_dateEdit
+ */
+ public function setAccountDateEdit($account_dateEdit)
+ {
+ $this->account_dateEdit = $account_dateEdit;
+ }
+
+ /**
+ * @return int
+ */
+ public function getAccountUserEditId()
+ {
+ return (int)$this->account_userEditId;
+ }
+
+ /**
+ * @param int $account_userEditId
+ */
+ public function setAccountUserEditId($account_userEditId)
+ {
+ $this->account_userEditId = (int)$account_userEditId;
+ }
+
+ /**
+ * @return string
+ */
+ public function getAccountPass()
+ {
+ return $this->account_pass;
+ }
+
+ /**
+ * @param string $account_pass
+ */
+ public function setAccountPass($account_pass)
+ {
+ $this->account_pass = $account_pass;
+ }
+
+ /**
+ * @return string
+ */
+ public function getAccountIV()
+ {
+ return $this->account_IV;
+ }
+
+ /**
+ * @param string $account_IV
+ */
+ public function setAccountIV($account_IV)
+ {
+ $this->account_IV = $account_IV;
+ }
+
+ /**
+ * @return int|null
+ */
+ public function getAccountId()
+ {
+ return (int)$this->account_id;
+ }
+
+ /**
+ * @param int $account_id
+ */
+ public function setAccountId($account_id)
+ {
+ $this->account_id = (int)$account_id;
+ }
+
+ /**
+ * @return int
+ */
+ public function getAccountUserId()
+ {
+ return (int)$this->account_userId;
+ }
+
+ /**
+ * @param int $account_userId
+ */
+ public function setAccountUserId($account_userId)
+ {
+ $this->account_userId = (int)$account_userId;
+ }
+
+ /**
+ * @return int
+ */
+ public function getAccountUserGroupId()
+ {
+ return (int)$this->account_userGroupId;
+ }
+
+ /**
+ * @param int $account_userGroupId
+ */
+ public function setAccountUserGroupId($account_userGroupId)
+ {
+ $this->account_userGroupId = (int)$account_userGroupId;
+ }
+
+ /**
+ * @return bool
+ */
+ public function getAccountOtherUserEdit()
+ {
+ return (int)$this->account_otherUserEdit;
+ }
+
+ /**
+ * @param bool $account_otherUserEdit
+ */
+ public function setAccountOtherUserEdit($account_otherUserEdit)
+ {
+ $this->account_otherUserEdit = (int)$account_otherUserEdit;
+ }
+
+ /**
+ * @return bool
+ */
+ public function getAccountOtherGroupEdit()
+ {
+ return (int)$this->account_otherGroupEdit;
+ }
+
+ /**
+ * @param bool $account_otherGroupEdit
+ */
+ public function setAccountOtherGroupEdit($account_otherGroupEdit)
+ {
+ $this->account_otherGroupEdit = (int)$account_otherGroupEdit;
+ }
+
+ /**
+ * @return string
+ */
+ public function getAccountName()
+ {
+ return $this->account_name;
+ }
+
+ /**
+ * @param string $account_name
+ */
+ public function setAccountName($account_name)
+ {
+ $this->account_name = $account_name;
+ }
+
+ /**
+ * @return int
+ */
+ public function getAccountCategoryId()
+ {
+ return (int)$this->account_categoryId;
+ }
+
+ /**
+ * @param int $account_categoryId
+ */
+ public function setAccountCategoryId($account_categoryId)
+ {
+ $this->account_categoryId = (int)$account_categoryId;
+ }
+
+ /**
+ * @return int
+ */
+ public function getAccountCustomerId()
+ {
+ return (int)$this->account_customerId;
+ }
+
+ /**
+ * @param int $account_customerId
+ */
+ public function setAccountCustomerId($account_customerId)
+ {
+ $this->account_customerId = (int)$account_customerId;
+ }
+
+ /**
+ * @return string
+ */
+ public function getAccountLogin()
+ {
+ return $this->account_login;
+ }
+
+ /**
+ * @param string $account_login
+ */
+ public function setAccountLogin($account_login)
+ {
+ $this->account_login = $account_login;
+ }
+
+ /**
+ * @return string
+ */
+ public function getAccountUrl()
+ {
+ return $this->account_url;
+ }
+
+ /**
+ * @param string $account_url
+ */
+ public function setAccountUrl($account_url)
+ {
+ $this->account_url = $account_url;
+ }
+
+ /**
+ * @return string
+ */
+ public function getAccountNotes()
+ {
+ return $this->account_notes;
+ }
+
+ /**
+ * @param string $account_notes
+ */
+ public function setAccountNotes($account_notes)
+ {
+ $this->account_notes = $account_notes;
+ }
+
+ /**
+ * Specify data which should be serialized to JSON
+ *
+ * @link http://php.net/manual/en/jsonserializable.jsonserialize.php
+ * @return mixed data which can be serialized by json_encode,
+ * which is a value of any type other than a resource.
+ * @since 5.4.0
+ */
+ public function jsonSerialize()
+ {
+ $data = get_object_vars($this);
+
+ unset($data['accountPass'], $data['accountIV']);
+
+ return Json::safeJson($data);
+ }
+
+ /**
+ * @return int
+ */
+ public function getId()
+ {
+ return (int)$this->account_id;
+ }
+
+ /**
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->account_name;
+ }
+
+ /**
+ * @return int
+ */
+ public function getAccountCountView()
+ {
+ return (int)$this->account_countView;
+ }
+
+ /**
+ * @param int $account_countView
+ */
+ public function setAccountCountView($account_countView)
+ {
+ $this->account_countView = (int)$account_countView;
+ }
+
+ /**
+ * @return int
+ */
+ public function getAccountCountDecrypt()
+ {
+ return (int)$this->account_countDecrypt;
+ }
+
+ /**
+ * @param int $account_countDecrypt
+ */
+ public function setAccountCountDecrypt($account_countDecrypt)
+ {
+ $this->account_countDecrypt = (int)$account_countDecrypt;
+ }
+
+ /**
+ * @return int
+ */
+ public function getAccountIsPrivate()
+ {
+ return (int)$this->account_isPrivate;
+ }
+
+ /**
+ * @param int $account_isPrivate
+ */
+ public function setAccountIsPrivate($account_isPrivate)
+ {
+ $this->account_isPrivate = (int)$account_isPrivate;
+ }
+
+ /**
+ * @return int
+ */
+ public function getAccountPassDate()
+ {
+ return (int)$this->account_passDate;
+ }
+
+ /**
+ * @param int $account_passDate
+ */
+ public function setAccountPassDate($account_passDate)
+ {
+ $this->account_passDate = (int)$account_passDate;
+ }
+
+ /**
+ * @return int
+ */
+ public function getAccountPassDateChange()
+ {
+ return (int)$this->account_passDateChange;
+ }
+
+ /**
+ * @param int $account_passDateChange
+ */
+ public function setAccountPassDateChange($account_passDateChange)
+ {
+ $this->account_passDateChange = (int)$account_passDateChange;
+ }
+
+ /**
+ * @return int
+ */
+ public function getAccountParentId()
+ {
+ return (int)$this->account_parentId;
+ }
+
+ /**
+ * @param int $account_parentId
+ */
+ public function setAccountParentId($account_parentId)
+ {
+ $this->account_parentId = (int)$account_parentId;
+ }
+
+ /**
+ * @return int
+ */
+ public function getAccountIsPrivateGroup()
+ {
+ return (int)$this->account_isPrivateGroup;
+ }
+
+ /**
+ * @param int $account_isPrivateGroup
+ */
+ public function setAccountIsPrivateGroup($account_isPrivateGroup)
+ {
+ $this->account_isPrivateGroup = (int)$account_isPrivateGroup;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/DataModel/AccountExtData.class.php b/inc/SP/DataModel/AccountExtData.class.php
new file mode 100644
index 00000000..2916e3a1
--- /dev/null
+++ b/inc/SP/DataModel/AccountExtData.class.php
@@ -0,0 +1,206 @@
+.
+ */
+
+namespace SP\DataModel;
+
+/**
+ * Class AccountExtData
+ *
+ * @package SP\DataModel
+ */
+class AccountExtData extends AccountData
+{
+ /**
+ * @var array Los Ids de los usuarios secundarios de la cuenta.
+ */
+ public $usersId = [];
+ /**
+ * @var array Los Ids de los grupos secundarios de la cuenta.
+ */
+ public $userGroupsId = [];
+ /**
+ * @var array
+ */
+ public $tags = [];
+ /**
+ * @var string
+ */
+ public $category_name = '';
+ /**
+ * @var string
+ */
+ public $customer_name = '';
+ /**
+ * @var string
+ */
+ public $usergroup_name = '';
+ /**
+ * @var string
+ */
+ public $user_name = '';
+ /**
+ * @var string
+ */
+ public $user_login = '';
+ /**
+ * @var string
+ */
+ public $user_editName = '';
+ /**
+ * @var string
+ */
+ public $user_editLogin = '';
+ /**
+ * @var string
+ */
+ public $publicLink_hash = '';
+
+ /**
+ * @return string
+ */
+ public function getUserEditName()
+ {
+ return $this->user_editName;
+ }
+
+ /**
+ * @return string
+ */
+ public function getUserEditLogin()
+ {
+ return $this->user_editLogin;
+ }
+
+ /**
+ * @return string
+ */
+ public function getPublicLinkHash()
+ {
+ return $this->publicLink_hash;
+ }
+
+ /**
+ * @return array
+ */
+ public function getAccountUsersId()
+ {
+ return $this->usersId;
+ }
+
+ /**
+ * @return array
+ */
+ public function getAccountUserGroupsId()
+ {
+ return $this->userGroupsId;
+ }
+
+ /**
+ * @return array
+ */
+ public function getTags()
+ {
+ return $this->tags;
+ }
+
+ /**
+ * @param array $tags
+ */
+ public function setTags(array $tags)
+ {
+ $this->tags = $tags;
+ }
+
+ /**
+ * @return string
+ */
+ public function getCategoryName()
+ {
+ return $this->category_name;
+ }
+
+ /**
+ * @return string
+ */
+ public function getCustomerName()
+ {
+ return $this->customer_name;
+ }
+
+ /**
+ * @return string
+ */
+ public function getUsergroupName()
+ {
+ return $this->usergroup_name;
+ }
+
+ /**
+ * @return string
+ */
+ public function getUserName()
+ {
+ return $this->user_name;
+ }
+
+ /**
+ * @return string
+ */
+ public function getUserLogin()
+ {
+ return $this->user_login;
+ }
+
+ /**
+ * @return array
+ */
+ public function getUsersId()
+ {
+ return $this->usersId;
+ }
+
+ /**
+ * @param array $usersId
+ */
+ public function setUsersId(array $usersId)
+ {
+ $this->usersId = $usersId;
+ }
+
+ /**
+ * @return array
+ */
+ public function getUserGroupsId()
+ {
+ return $this->userGroupsId;
+ }
+
+ /**
+ * @param array $userGroupsId
+ */
+ public function setUserGroupsId(array $userGroupsId)
+ {
+ $this->userGroupsId = $userGroupsId;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/DataModel/AccountHistoryData.class.php b/inc/SP/DataModel/AccountHistoryData.class.php
new file mode 100644
index 00000000..7740eb33
--- /dev/null
+++ b/inc/SP/DataModel/AccountHistoryData.class.php
@@ -0,0 +1,74 @@
+.
+ */
+
+namespace SP\DataModel;
+
+/**
+ * Class AccountHistoryData
+ *
+ * @package SP\DataModel
+ */
+class AccountHistoryData extends AccountData
+{
+ /**
+ * @var bool
+ */
+ public $isModify = 0;
+ /**
+ * @var bool
+ */
+ public $isDeleted = 0;
+
+ /**
+ * @return boolean
+ */
+ public function isIsModify()
+ {
+ return (int)$this->isModify;
+ }
+
+ /**
+ * @param boolean $isModify
+ */
+ public function setIsModify($isModify)
+ {
+ $this->isModify = (int)$isModify;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isIsDeleted()
+ {
+ return (int)$this->isDeleted;
+ }
+
+ /**
+ * @param boolean $isDeleted
+ */
+ public function setIsDeleted($isDeleted)
+ {
+ $this->isDeleted = (int)$isDeleted;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/DataModel/AccountSearchData.class.php b/inc/SP/DataModel/AccountSearchData.class.php
new file mode 100644
index 00000000..067464b2
--- /dev/null
+++ b/inc/SP/DataModel/AccountSearchData.class.php
@@ -0,0 +1,54 @@
+.
+ */
+
+namespace SP\DataModel;
+
+/**
+ * Class AccountSearchData
+ *
+ * @package SP\DataModel
+ */
+class AccountSearchData extends AccountExtData
+{
+ /**
+ * @var int
+ */
+ public $num_files = 0;
+
+ /**
+ * @return int
+ */
+ public function getNumFiles()
+ {
+ return (int)$this->num_files;
+ }
+
+ /**
+ * @param int $num_files
+ */
+ public function setNumFiles($num_files)
+ {
+ $this->num_files = (int)$num_files;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/DataModel/CategoryData.class.php b/inc/SP/DataModel/CategoryData.class.php
new file mode 100644
index 00000000..c30473a8
--- /dev/null
+++ b/inc/SP/DataModel/CategoryData.class.php
@@ -0,0 +1,140 @@
+.
+ */
+
+namespace SP\DataModel;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class CategoryData
+ *
+ * @package SP\DataModel
+ */
+class CategoryData extends DataModelBase implements DataModelInterface
+{
+ /**
+ * @var int
+ */
+ public $category_id = 0;
+ /**
+ * @var string
+ */
+ public $category_name = '';
+ /**
+ * @var string
+ */
+ public $category_description = '';
+ /**
+ * @var string
+ */
+ public $category_hash = '';
+
+ /**
+ * CategoryData constructor.
+ *
+ * @param int $category_id
+ * @param string $category_name
+ * @param string $category_description
+ */
+ public function __construct($category_id = null, $category_name = null, $category_description = null)
+ {
+ $this->category_id = $category_id;
+ $this->category_name = $category_name;
+ $this->category_description = $category_description;
+ }
+
+ /**
+ * @return int
+ */
+ public function getCategoryId()
+ {
+ return $this->category_id;
+ }
+
+ /**
+ * @param int $category_id
+ * @return $this
+ */
+ public function setCategoryId($category_id)
+ {
+ $this->category_id = $category_id;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getCategoryName()
+ {
+ return $this->category_name;
+ }
+
+ /**
+ * @param string $category_name
+ */
+ public function setCategoryName($category_name)
+ {
+ $this->category_name = $category_name;
+ }
+
+ /**
+ * @return string
+ */
+ public function getCategoryDescription()
+ {
+ return $this->category_description;
+ }
+
+ /**
+ * @param string $category_description
+ */
+ public function setCategoryDescription($category_description)
+ {
+ $this->category_description = $category_description;
+ }
+
+ /**
+ * @return int
+ */
+ public function getId()
+ {
+ return $this->category_id;
+ }
+
+ /**
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->category_name;
+ }
+
+ /**
+ * @return string
+ */
+ public function getCategoryHash()
+ {
+ return $this->category_hash;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/DataModel/CustomFieldBaseData.class.php b/inc/SP/DataModel/CustomFieldBaseData.class.php
new file mode 100644
index 00000000..9dd29fb9
--- /dev/null
+++ b/inc/SP/DataModel/CustomFieldBaseData.class.php
@@ -0,0 +1,250 @@
+.
+ */
+
+namespace SP\DataModel;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class CustomFieldData
+ *
+ * @package SP\DataModel
+ */
+class CustomFieldBaseData extends DataModelBase
+{
+ /**
+ * @var int
+ */
+ public $customfielddata_id = 0;
+ /**
+ * @var int
+ */
+ public $customfielddef_id = 0;
+ /**
+ * @var string
+ */
+ public $customfielddata_data = '';
+ /**
+ * @var string
+ */
+ public $customfielddata_iv = '';
+ /**
+ * @var string
+ */
+ public $customfielddef_field = '';
+ /**
+ * @var string
+ */
+ public $name = '';
+ /**
+ * @var int
+ */
+ public $type = 0;
+ /**
+ * @var int
+ */
+ public $module = 0;
+ /**
+ * @var int
+ */
+ public $id = 0;
+
+ /**
+ * CustomFieldBaseData constructor.
+ *
+ * @param int $module
+ * @param int $id
+ */
+ public function __construct($module = 0, $id = 0)
+ {
+ $this->module = $module;
+ $this->id = $id;
+ }
+
+ /**
+ * @return int
+ */
+ public function getCustomfielddataId()
+ {
+ return $this->customfielddata_id;
+ }
+
+ /**
+ * @param int $customfielddata_id
+ */
+ public function setCustomfielddataId($customfielddata_id)
+ {
+ $this->customfielddata_id = $customfielddata_id;
+ }
+
+ /**
+ * @return int
+ */
+ public function getCustomfielddefId()
+ {
+ return $this->customfielddef_id;
+ }
+
+ /**
+ * @param int $customfielddef_id
+ */
+ public function setCustomfielddefId($customfielddef_id)
+ {
+ $this->customfielddef_id = $customfielddef_id;
+ }
+
+ /**
+ * @return string
+ */
+ public function getCustomfielddataData()
+ {
+ return $this->customfielddata_data;
+ }
+
+ /**
+ * @param string $customfielddata_data
+ */
+ public function setCustomfielddataData($customfielddata_data)
+ {
+ $this->customfielddata_data = $customfielddata_data;
+ }
+
+ /**
+ * @return string
+ */
+ public function getCustomfielddataIv()
+ {
+ return $this->customfielddata_iv;
+ }
+
+ /**
+ * @param string $customfielddata_iv
+ */
+ public function setCustomfielddataIv($customfielddata_iv)
+ {
+ $this->customfielddata_iv = $customfielddata_iv;
+ }
+
+ /**
+ * @return string
+ */
+ public function getCustomfielddefField()
+ {
+ return $this->customfielddef_field;
+ }
+
+ /**
+ * @param string $customfielddef_field
+ */
+ public function setCustomfielddefField($customfielddef_field)
+ {
+ $this->customfielddef_field = $customfielddef_field;
+ }
+
+ /**
+ * @return int
+ */
+ public function getModule()
+ {
+ return $this->module;
+ }
+
+ /**
+ * @param int $module
+ */
+ public function setModule($module)
+ {
+ $this->module = $module;
+ }
+
+ /**
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ /**
+ * @param string $name
+ */
+ public function setName($name)
+ {
+ $this->name = $name;
+ }
+
+ /**
+ * @return int
+ */
+ public function getType()
+ {
+ return $this->type;
+ }
+
+ /**
+ * @param int $type
+ */
+ public function setType($type)
+ {
+ $this->type = $type;
+ }
+
+ /**
+ * @return int
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * @param int $id
+ */
+ public function setId($id)
+ {
+ $this->id = $id;
+ }
+
+ /**
+ * unserialize() checks for the presence of a function with the magic name __wakeup.
+ * If present, this function can reconstruct any resources that the object may have.
+ * The intended use of __wakeup is to reestablish any database connections that may have been lost during
+ * serialization and perform other reinitialization tasks.
+ *
+ * @return void
+ * @link http://php.net/manual/en/language.oop5.magic.php#language.oop5.magic.sleep
+ */
+ public function __wakeup()
+ {
+ // Para realizar la conversión de nombre de propiedades que empiezan por _
+ foreach (get_object_vars($this) as $name => $value) {
+ if ($name[0] === '_') {
+ $newName = substr($name, 1);
+ $this->$newName = $value;
+ }
+ }
+ }
+
+
+}
\ No newline at end of file
diff --git a/inc/SP/DataModel/CustomFieldData.class.php b/inc/SP/DataModel/CustomFieldData.class.php
new file mode 100644
index 00000000..f4f8fd30
--- /dev/null
+++ b/inc/SP/DataModel/CustomFieldData.class.php
@@ -0,0 +1,187 @@
+.
+ */
+
+namespace SP\DataModel;
+
+defined('APP_ROOT') || die();
+
+use SP\Html\Html;
+
+/**
+ * Class CustomFieldData
+ *
+ * @package SP\DataModel
+ */
+class CustomFieldData extends CustomFieldBaseData
+{
+ /**
+ * @var int
+ */
+ public $customfielddata_itemId = 0;
+ /**
+ * @var int
+ */
+ public $customfielddata_moduleId = 0;
+ /**
+ * @var int
+ */
+ public $customfielddata_defId = 0;
+ /**
+ * @var string
+ */
+ public $typeName = '';
+ /**
+ * @var string
+ */
+ public $value = '';
+ /**
+ * @var int
+ */
+ public $definitionId = 0;
+ /**
+ * @var CustomFieldDefData
+ */
+ protected $definition;
+
+ /**
+ * @return int
+ */
+ public function getCustomfielddataItemId()
+ {
+ return $this->customfielddata_itemId;
+ }
+
+ /**
+ * @param int $customfielddata_itemId
+ */
+ public function setCustomfielddataItemId($customfielddata_itemId)
+ {
+ $this->customfielddata_itemId = $customfielddata_itemId;
+ }
+
+ /**
+ * @return int
+ */
+ public function getCustomfielddataModuleId()
+ {
+ return $this->customfielddata_moduleId;
+ }
+
+ /**
+ * @param int $customfielddata_moduleId
+ */
+ public function setCustomfielddataModuleId($customfielddata_moduleId)
+ {
+ $this->customfielddata_moduleId = $customfielddata_moduleId;
+ }
+
+ /**
+ * @return int
+ */
+ public function getCustomfielddataDefId()
+ {
+ return $this->customfielddata_defId;
+ }
+
+ /**
+ * @param int $customfielddata_defId
+ */
+ public function setCustomfielddataDefId($customfielddata_defId)
+ {
+ $this->customfielddata_defId = $customfielddata_defId;
+ }
+
+ /**
+ * @return string
+ */
+ public function getTypeName()
+ {
+ return $this->typeName;
+ }
+
+ /**
+ * @param string $typeName
+ */
+ public function setTypeName($typeName)
+ {
+ $this->typeName = $typeName;
+ }
+
+ /**
+ * @return string
+ */
+ public function getValue()
+ {
+ return $this->value;
+ }
+
+ /**
+ * @param string $value
+ */
+ public function setValue($value)
+ {
+ $this->value = $value;
+ }
+
+ /**
+ * @return string
+ */
+ public function getCleanValue()
+ {
+ return Html::sanitize($this->value);
+ }
+
+ /**
+ * @return int
+ */
+ public function getDefinitionId()
+ {
+ return $this->definitionId;
+ }
+
+ /**
+ * @param int $definitionId
+ */
+ public function setDefinitionId($definitionId)
+ {
+ $this->definitionId = $definitionId;
+ }
+
+ /**
+ * @return CustomFieldDefData
+ */
+ public function getDefinition()
+ {
+ return $this->definition;
+ }
+
+ /**
+ * @param CustomFieldDefData $definition
+ */
+ public function setDefinition(CustomFieldDefData $definition)
+ {
+ $this->definition = $definition;
+ }
+
+}
\ No newline at end of file
diff --git a/inc/SP/DataModel/CustomFieldDefData.class.php b/inc/SP/DataModel/CustomFieldDefData.class.php
new file mode 100644
index 00000000..5251d4be
--- /dev/null
+++ b/inc/SP/DataModel/CustomFieldDefData.class.php
@@ -0,0 +1,189 @@
+.
+ */
+
+namespace SP\DataModel;
+
+use SP\Mgmt\CustomFields\CustomFieldTypes;
+
+/**
+ * Class CustomFieldDefData
+ *
+ * @package SP\DataModel
+ */
+class CustomFieldDefData extends CustomFieldBaseData implements DataModelInterface
+{
+ /**
+ * @var int
+ */
+ public $customfielddef_module = 0;
+ /**
+ * @var string
+ */
+ public $typeName = '';
+ /**
+ * @var string
+ */
+ public $moduleName = '';
+ /**
+ * @var bool
+ */
+ public $required = false;
+ /**
+ * @var string
+ */
+ public $help = '';
+ /**
+ * @var bool
+ */
+ public $showInItemsList = false;
+
+ /**
+ * @return int
+ */
+ public function getCustomfielddefModule()
+ {
+ return $this->customfielddef_module;
+ }
+
+ /**
+ * @param int $customfielddef_module
+ */
+ public function setCustomfielddefModule($customfielddef_module)
+ {
+ $this->customfielddef_module = $customfielddef_module;
+ }
+
+ /**
+ * @return string
+ */
+ public function getTypeName()
+ {
+ return $this->typeName;
+ }
+
+ /**
+ * @param string $typeName
+ */
+ public function setTypeName($typeName)
+ {
+ $this->typeName = $typeName;
+ }
+
+ /**
+ * @return string
+ */
+ public function getModuleName()
+ {
+ return $this->moduleName;
+ }
+
+ /**
+ * @param string $moduleName
+ */
+ public function setModuleName($moduleName)
+ {
+ $this->moduleName = $moduleName;
+ }
+
+ /**
+ * @return string
+ */
+ public function getFormId()
+ {
+ return 'cf_' . strtolower(preg_replace('/\W*/', '', $this->name));
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isShowInItemsList()
+ {
+ return $this->showInItemsList;
+ }
+
+ /**
+ * @param boolean $showInItemsList
+ */
+ public function setShowInItemsList($showInItemsList)
+ {
+ $this->showInItemsList = $showInItemsList;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isRequired()
+ {
+ return $this->required;
+ }
+
+ /**
+ * @param boolean $required
+ */
+ public function setRequired($required)
+ {
+ $this->required = $required;
+ }
+
+ /**
+ * @return string
+ */
+ public function getHelp()
+ {
+ return $this->help;
+ }
+
+ /**
+ * @param string $help
+ */
+ public function setHelp($help)
+ {
+ $this->help = $help;
+ }
+
+ /**
+ * unserialize() checks for the presence of a function with the magic name __wakeup.
+ * If present, this function can reconstruct any resources that the object may have.
+ * The intended use of __wakeup is to reestablish any database connections that may have been lost during
+ * serialization and perform other reinitialization tasks.
+ *
+ * @return void
+ * @link http://php.net/manual/en/language.oop5.magic.php#language.oop5.magic.sleep
+ */
+ public function __wakeup()
+ {
+ parent::__wakeup();
+
+ $this->moduleName = CustomFieldTypes::getFieldsModules($this->getModule());
+ $this->typeName = CustomFieldTypes::getFieldsTypes($this->getType(), true);
+ }
+
+ /**
+ * @return int
+ */
+ public function getId()
+ {
+ return $this->customfielddef_id;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/DataModel/CustomerData.class.php b/inc/SP/DataModel/CustomerData.class.php
new file mode 100644
index 00000000..0f6a484b
--- /dev/null
+++ b/inc/SP/DataModel/CustomerData.class.php
@@ -0,0 +1,138 @@
+.
+ */
+
+namespace SP\DataModel;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class CustomerData
+ *
+ * @package SP\DataModel
+ */
+class CustomerData extends DataModelBase implements DataModelInterface
+{
+ /**
+ * @var int
+ */
+ public $customer_id = 0;
+ /**
+ * @var string
+ */
+ public $customer_name = '';
+ /**
+ * @var string
+ */
+ public $customer_description = '';
+ /**
+ * @var string
+ */
+ public $customer_hash = '';
+
+ /**
+ * CustomerData constructor.
+ *
+ * @param int $customer_id
+ * @param string $customer_name
+ * @param string $customer_description
+ */
+ public function __construct($customer_id = null, $customer_name = null, $customer_description = null)
+ {
+ $this->customer_id = $customer_id;
+ $this->customer_name = $customer_name;
+ $this->customer_description = $customer_description;
+ }
+
+ /**
+ * @return int
+ */
+ public function getCustomerId()
+ {
+ return $this->customer_id;
+ }
+
+ /**
+ * @param int $customer_id
+ */
+ public function setCustomerId($customer_id)
+ {
+ $this->customer_id = $customer_id;
+ }
+
+ /**
+ * @return string
+ */
+ public function getCustomerName()
+ {
+ return $this->customer_name;
+ }
+
+ /**
+ * @param string $customer_name
+ */
+ public function setCustomerName($customer_name)
+ {
+ $this->customer_name = $customer_name;
+ }
+
+ /**
+ * @return string
+ */
+ public function getCustomerDescription()
+ {
+ return $this->customer_description;
+ }
+
+ /**
+ * @param string $customer_description
+ */
+ public function setCustomerDescription($customer_description)
+ {
+ $this->customer_description = $customer_description;
+ }
+
+ /**
+ * @return string
+ */
+ public function getCustomerHash()
+ {
+ return $this->customer_hash;
+ }
+
+ /**
+ * @return int
+ */
+ public function getId()
+ {
+ return $this->customer_id;
+ }
+
+ /**
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->customer_name;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/DataModel/DataModelBase.class.php b/inc/SP/DataModel/DataModelBase.class.php
new file mode 100644
index 00000000..d376f27b
--- /dev/null
+++ b/inc/SP/DataModel/DataModelBase.class.php
@@ -0,0 +1,35 @@
+.
+ */
+
+namespace SP\DataModel;
+
+/**
+ * Class DataModelBase
+ *
+ * @package SP\DataModel
+ */
+abstract class DataModelBase
+{
+
+}
\ No newline at end of file
diff --git a/inc/SP/DataModel/DataModelInterface.class.php b/inc/SP/DataModel/DataModelInterface.class.php
new file mode 100644
index 00000000..7a2172ec
--- /dev/null
+++ b/inc/SP/DataModel/DataModelInterface.class.php
@@ -0,0 +1,44 @@
+.
+ */
+
+namespace SP\DataModel;
+
+
+/**
+ * Interface DataModelInterface
+ *
+ * @package SP\DataModel
+ */
+interface DataModelInterface
+{
+ /**
+ * @return int
+ */
+ public function getId();
+
+ /**
+ * @return string
+ */
+ public function getName();
+}
\ No newline at end of file
diff --git a/inc/SP/DataModel/FileData.class.php b/inc/SP/DataModel/FileData.class.php
new file mode 100644
index 00000000..d8b840fb
--- /dev/null
+++ b/inc/SP/DataModel/FileData.class.php
@@ -0,0 +1,220 @@
+.
+ */
+
+namespace SP\DataModel;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class FileData
+ *
+ * @package SP\DataModel
+ */
+class FileData extends DataModelBase implements DataModelInterface
+{
+ /**
+ * @var int
+ */
+ public $accfile_id = 0;
+ /**
+ * @var int
+ */
+ public $accfile_accountId = 0;
+ /**
+ * @var string
+ */
+ public $accfile_name = '';
+ /**
+ * @var int
+ */
+ public $accfile_type = 0;
+ /**
+ * @var string
+ */
+ public $accfile_content = '';
+ /**
+ * @var string
+ */
+ public $accfile_extension = '';
+ /**
+ * @var string
+ */
+ public $accfile_thumb = '';
+ /**
+ * @var int
+ */
+ public $accfile_size = 0;
+
+ /**
+ * @return int
+ */
+ public function getAccfileAccountId()
+ {
+ return $this->accfile_accountId;
+ }
+
+ /**
+ * @param int $accfile_accountId
+ */
+ public function setAccfileAccountId($accfile_accountId)
+ {
+ $this->accfile_accountId = $accfile_accountId;
+ }
+
+ /**
+ * @return string
+ */
+ public function getAccfileName()
+ {
+ return $this->accfile_name;
+ }
+
+ /**
+ * @param string $accfile_name
+ */
+ public function setAccfileName($accfile_name)
+ {
+ $this->accfile_name = $accfile_name;
+ }
+
+ /**
+ * @return int
+ */
+ public function getAccfileType()
+ {
+ return $this->accfile_type;
+ }
+
+ /**
+ * @param int $accfile_type
+ */
+ public function setAccfileType($accfile_type)
+ {
+ $this->accfile_type = $accfile_type;
+ }
+
+ /**
+ * @return string
+ */
+ public function getAccfileContent()
+ {
+ return $this->accfile_content;
+ }
+
+ /**
+ * @param string $accfile_content
+ */
+ public function setAccfileContent($accfile_content)
+ {
+ $this->accfile_content = $accfile_content;
+ }
+
+ /**
+ * @return string
+ */
+ public function getAccfileExtension()
+ {
+ return $this->accfile_extension;
+ }
+
+ /**
+ * @param string $accfile_extension
+ */
+ public function setAccfileExtension($accfile_extension)
+ {
+ $this->accfile_extension = $accfile_extension;
+ }
+
+ /**
+ * @return string
+ */
+ public function getAccfileThumb()
+ {
+ return $this->accfile_thumb;
+ }
+
+ /**
+ * @param string $accfile_thumb
+ */
+ public function setAccfileThumb($accfile_thumb)
+ {
+ $this->accfile_thumb = $accfile_thumb;
+ }
+
+ /**
+ * @return int
+ */
+ public function getAccfileSize()
+ {
+ return $this->accfile_size;
+ }
+
+ /**
+ * @param int $accfile_size
+ */
+ public function setAccfileSize($accfile_size)
+ {
+ $this->accfile_size = $accfile_size;
+ }
+
+ /**
+ * @return float
+ */
+ public function getRoundSize()
+ {
+ return round(($this->accfile_size / 1000), 2);
+ }
+
+ /**
+ * @return int
+ */
+ public function getAccfileId()
+ {
+ return $this->accfile_id;
+ }
+
+ /**
+ * @param int $accfile_id
+ */
+ public function setAccfileId($accfile_id)
+ {
+ $this->accfile_id = $accfile_id;
+ }
+
+ /**
+ * @return int
+ */
+ public function getId()
+ {
+ return $this->accfile_id;
+ }
+
+ /**
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->accfile_name;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/DataModel/FileExtData.class.php b/inc/SP/DataModel/FileExtData.class.php
new file mode 100644
index 00000000..204b0176
--- /dev/null
+++ b/inc/SP/DataModel/FileExtData.class.php
@@ -0,0 +1,74 @@
+.
+ */
+
+namespace SP\DataModel;
+
+/**
+ * Class FileExtData
+ *
+ * @package SP\DataModel
+ */
+class FileExtData extends FileData
+{
+ /**
+ * @var string
+ */
+ public $customer_name = '';
+ /**
+ * @var string
+ */
+ public $account_name = '';
+
+ /**
+ * @return string
+ */
+ public function getCustomerName()
+ {
+ return $this->customer_name;
+ }
+
+ /**
+ * @param string $customer_name
+ */
+ public function setCustomerName($customer_name)
+ {
+ $this->customer_name = $customer_name;
+ }
+
+ /**
+ * @return string
+ */
+ public function getAccountName()
+ {
+ return $this->account_name;
+ }
+
+ /**
+ * @param string $account_name
+ */
+ public function setAccountName($account_name)
+ {
+ $this->account_name = $account_name;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/DataModel/GroupAccountsData.class.php b/inc/SP/DataModel/GroupAccountsData.class.php
new file mode 100644
index 00000000..1bf26f14
--- /dev/null
+++ b/inc/SP/DataModel/GroupAccountsData.class.php
@@ -0,0 +1,104 @@
+.
+ */
+
+namespace SP\DataModel;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class GroupAccountsData
+ *
+ * @package SP\DataModel
+ */
+class GroupAccountsData extends DataModelBase
+{
+ /**
+ * @var int
+ */
+ public $accgroup_groupId = 0;
+ /**
+ * @var int
+ */
+ public $accgroup_accountId = 0;
+ /**
+ * @var array
+ */
+ protected $groups = [];
+
+ /**
+ * @return int
+ */
+ public function getAccgroupGroupId()
+ {
+ return $this->accgroup_groupId;
+ }
+
+ /**
+ * @param int $accgroup_groupId
+ */
+ public function setAccgroupGroupId($accgroup_groupId)
+ {
+ $this->accgroup_groupId = $accgroup_groupId;
+ }
+
+ /**
+ * @return int
+ */
+ public function getAccgroupAccountId()
+ {
+ return $this->accgroup_accountId;
+ }
+
+ /**
+ * @param int $accgroup_accountId
+ */
+ public function setAccgroupAccountId($accgroup_accountId)
+ {
+ $this->accgroup_accountId = $accgroup_accountId;
+ }
+
+ /**
+ * @return array
+ */
+ public function getGroups()
+ {
+ return $this->groups;
+ }
+
+ /**
+ * @param array $groups
+ */
+ public function setGroups(array $groups)
+ {
+ $this->groups = $groups;
+ }
+
+ /**
+ * @param int $group
+ */
+ public function addGroup($group)
+ {
+ $this->groups[] = intval($group);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/DataModel/GroupData.class.php b/inc/SP/DataModel/GroupData.class.php
new file mode 100644
index 00000000..5956d2e7
--- /dev/null
+++ b/inc/SP/DataModel/GroupData.class.php
@@ -0,0 +1,132 @@
+.
+ */
+
+namespace SP\DataModel;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class GroupData
+ *
+ * @package SP\DataModel
+ */
+class GroupData extends DataModelBase implements DataModelInterface
+{
+ /**
+ * @var int
+ */
+ public $usergroup_id = 0;
+ /**
+ * @var string
+ */
+ public $usergroup_name = '';
+ /**
+ * @var string
+ */
+ public $usergroup_description = '';
+ /**
+ * @var array
+ */
+ public $users = [];
+
+ /**
+ * @return int
+ */
+ public function getUsergroupId()
+ {
+ return $this->usergroup_id;
+ }
+
+ /**
+ * @param int $usergroup_id
+ */
+ public function setUsergroupId($usergroup_id)
+ {
+ $this->usergroup_id = $usergroup_id;
+ }
+
+ /**
+ * @return string
+ */
+ public function getUsergroupName()
+ {
+ return $this->usergroup_name;
+ }
+
+ /**
+ * @return string
+ */
+ public function getUsergroupDescription()
+ {
+ return $this->usergroup_description;
+ }
+
+ /**
+ * @return array
+ */
+ public function getUsers()
+ {
+ return (is_array($this->users)) ? $this->users : [];
+ }
+
+ /**
+ * @param array $users
+ */
+ public function setUsers($users)
+ {
+ $this->users = $users;
+ }
+
+ /**
+ * @param string $usergroup_name
+ */
+ public function setUsergroupName($usergroup_name)
+ {
+ $this->usergroup_name = $usergroup_name;
+ }
+
+ /**
+ * @param string $usergroup_description
+ */
+ public function setUsergroupDescription($usergroup_description)
+ {
+ $this->usergroup_description = $usergroup_description;
+ }
+
+ /**
+ * @return int
+ */
+ public function getId()
+ {
+ return $this->usergroup_id;
+ }
+
+ /**
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->usergroup_name;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/DataModel/GroupUsersData.class.php b/inc/SP/DataModel/GroupUsersData.class.php
new file mode 100644
index 00000000..1a8b43e7
--- /dev/null
+++ b/inc/SP/DataModel/GroupUsersData.class.php
@@ -0,0 +1,104 @@
+.
+ */
+
+namespace SP\DataModel;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class GroupUserData
+ *
+ * @package SP\DataModel
+ */
+class GroupUsersData extends DataModelBase
+{
+ /**
+ * @var int
+ */
+ public $usertogroup_groupId = 0;
+ /**
+ * @var int
+ */
+ public $usertogroup_userId = 0;
+ /**
+ * @var array
+ */
+ public $users = [];
+
+ /**
+ * @return int
+ */
+ public function getUsertogroupGroupId()
+ {
+ return (int)$this->usertogroup_groupId;
+ }
+
+ /**
+ * @param int $usertogroup_groupId
+ */
+ public function setUsertogroupGroupId($usertogroup_groupId)
+ {
+ $this->usertogroup_groupId = $usertogroup_groupId;
+ }
+
+ /**
+ * @return int
+ */
+ public function getUsertogroupUserId()
+ {
+ return (int)$this->usertogroup_userId;
+ }
+
+ /**
+ * @param int $usertogroup_userId
+ */
+ public function setUsertogroupUserId($usertogroup_userId)
+ {
+ $this->usertogroup_userId = $usertogroup_userId;
+ }
+
+ /**
+ * @return array
+ */
+ public function getUsers()
+ {
+ return $this->users;
+ }
+
+ /**
+ * @param array $users
+ */
+ public function setUsers(array $users)
+ {
+ $this->users = $users;
+ }
+
+ /**
+ * @param int $user
+ */
+ public function addUser($user)
+ {
+ $this->users[] = intval($user);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/DataModel/InstallData.class.php b/inc/SP/DataModel/InstallData.class.php
new file mode 100644
index 00000000..5b00ae44
--- /dev/null
+++ b/inc/SP/DataModel/InstallData.class.php
@@ -0,0 +1,334 @@
+.
+ */
+
+namespace SP\DataModel;
+
+/**
+ * Class InstallData
+ *
+ * @package SP\DataModel
+ */
+class InstallData
+{
+ /**
+ * @var string Usuario de la BD
+ */
+ private $dbUser;
+ /**
+ * @var string
+ */
+ private $dbAdminUser = '';
+ /**
+ * @var string Clave de la BD
+ */
+ private $dbPass;
+ /**
+ * @var string
+ */
+ private $dbAdminPass = '';
+ /**
+ * @var string Nombre de la BD
+ */
+ private $dbName = 'syspass';
+ /**
+ * @var string Host de la BD
+ */
+ private $dbHost = 'localhost';
+ /**
+ * @var string
+ */
+ private $dbSocket;
+ /**
+ * @var int
+ */
+ private $dbPort = 0;
+ /**
+ * @var string Usuario 'admin' de sysPass
+ */
+ private $adminLogin = '';
+ /**
+ * @var string Clave del usuario 'admin' de sysPass
+ */
+ private $adminPass = '';
+ /**
+ * @var string Clave maestra de sysPass
+ */
+ private $masterPassword = '';
+ /**
+ * @var bool Activar/desactivar Modo hosting
+ */
+ private $hostingMode = false;
+ /**
+ * @var string
+ */
+ private $dbAuthHost = '';
+ /**
+ * @var string
+ */
+ private $dbAuthHostDns = '';
+ /**
+ * @var string
+ */
+ private $siteLang = 'en_US';
+
+ /**
+ * @return string
+ */
+ public function getDbUser()
+ {
+ return $this->dbUser;
+ }
+
+ /**
+ * @param string $dbUser
+ */
+ public function setDbUser($dbUser)
+ {
+ $this->dbUser = $dbUser;
+ }
+
+ /**
+ * @return string
+ */
+ public function getDbPass()
+ {
+ return $this->dbPass;
+ }
+
+ /**
+ * @param string $dbPass
+ */
+ public function setDbPass($dbPass)
+ {
+ $this->dbPass = $dbPass;
+ }
+
+ /**
+ * @return string
+ */
+ public function getDbName()
+ {
+ return $this->dbName;
+ }
+
+ /**
+ * @param string $dbName
+ */
+ public function setDbName($dbName)
+ {
+ $this->dbName = $dbName;
+ }
+
+ /**
+ * @return string
+ */
+ public function getDbHost()
+ {
+ return $this->dbHost;
+ }
+
+ /**
+ * @param string $dbHost
+ */
+ public function setDbHost($dbHost)
+ {
+ $this->dbHost = $dbHost;
+ }
+
+ /**
+ * @return string
+ */
+ public function getAdminLogin()
+ {
+ return $this->adminLogin;
+ }
+
+ /**
+ * @param string $adminLogin
+ */
+ public function setAdminLogin($adminLogin)
+ {
+ $this->adminLogin = $adminLogin;
+ }
+
+ /**
+ * @return string
+ */
+ public function getAdminPass()
+ {
+ return $this->adminPass;
+ }
+
+ /**
+ * @param string $adminPass
+ */
+ public function setAdminPass($adminPass)
+ {
+ $this->adminPass = $adminPass;
+ }
+
+ /**
+ * @return string
+ */
+ public function getMasterPassword()
+ {
+ return $this->masterPassword;
+ }
+
+ /**
+ * @param string $masterPassword
+ */
+ public function setMasterPassword($masterPassword)
+ {
+ $this->masterPassword = $masterPassword;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isHostingMode()
+ {
+ return $this->hostingMode;
+ }
+
+ /**
+ * @param boolean $hostingMode
+ */
+ public function setHostingMode($hostingMode)
+ {
+ $this->hostingMode = $hostingMode;
+ }
+
+ /**
+ * @return string
+ */
+ public function getDbAuthHost()
+ {
+ return $this->dbAuthHost;
+ }
+
+ /**
+ * @param string $dbAuthHost
+ */
+ public function setDbAuthHost($dbAuthHost)
+ {
+ $this->dbAuthHost = $dbAuthHost;
+ }
+
+ /**
+ * @return int
+ */
+ public function getDbPort()
+ {
+ return $this->dbPort;
+ }
+
+ /**
+ * @param int $dbPort
+ */
+ public function setDbPort($dbPort)
+ {
+ $this->dbPort = $dbPort;
+ }
+
+ /**
+ * @return string
+ */
+ public function getDbAdminUser()
+ {
+ return $this->dbAdminUser;
+ }
+
+ /**
+ * @param string $dbAdminUser
+ */
+ public function setDbAdminUser($dbAdminUser)
+ {
+ $this->dbAdminUser = $dbAdminUser;
+ }
+
+ /**
+ * @return string
+ */
+ public function getDbAdminPass()
+ {
+ return $this->dbAdminPass;
+ }
+
+ /**
+ * @param string $dbAdminPass
+ */
+ public function setDbAdminPass($dbAdminPass)
+ {
+ $this->dbAdminPass = $dbAdminPass;
+ }
+
+ /**
+ * @return string
+ */
+ public function getSiteLang()
+ {
+ return $this->siteLang;
+ }
+
+ /**
+ * @param string $siteLang
+ */
+ public function setSiteLang($siteLang)
+ {
+ $this->siteLang = $siteLang;
+ }
+
+ /**
+ * @return string
+ */
+ public function getDbAuthHostDns()
+ {
+ return $this->dbAuthHostDns;
+ }
+
+ /**
+ * @param string $dbAuthHostDns
+ */
+ public function setDbAuthHostDns($dbAuthHostDns)
+ {
+ $this->dbAuthHostDns = $dbAuthHostDns;
+ }
+
+ /**
+ * @return string
+ */
+ public function getDbSocket()
+ {
+ return $this->dbSocket;
+ }
+
+ /**
+ * @param string $dbSocket
+ */
+ public function setDbSocket($dbSocket)
+ {
+ $this->dbSocket = $dbSocket;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/DataModel/ItemSearchData.class.php b/inc/SP/DataModel/ItemSearchData.class.php
new file mode 100644
index 00000000..67b39a13
--- /dev/null
+++ b/inc/SP/DataModel/ItemSearchData.class.php
@@ -0,0 +1,118 @@
+.
+ */
+
+namespace SP\DataModel;
+
+
+/**
+ * Class ItemSearchData
+ *
+ * @package SP\DataModel
+ */
+class ItemSearchData
+{
+ const ORDER_ASC = 'ASC';
+ const ORDER_DESC = 'DESC';
+
+ /**
+ * @var string
+ */
+ public $seachString = '';
+ /**
+ * @var int
+ */
+ public $limitStart = 0;
+ /**
+ * @var int
+ */
+ public $limitCount = 0;
+ /**
+ * @var string
+ */
+ public $order = self::ORDER_ASC;
+
+ /**
+ * @return string
+ */
+ public function getSeachString()
+ {
+ return $this->seachString;
+ }
+
+ /**
+ * @param string $seachString
+ */
+ public function setSeachString($seachString)
+ {
+ $this->seachString = $seachString;
+ }
+
+ /**
+ * @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;
+ }
+
+ /**
+ * @return string
+ */
+ public function getOrder()
+ {
+ return $this->order;
+ }
+
+ /**
+ * @param string $order
+ */
+ public function setOrder($order)
+ {
+ $this->order = $order;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/DataModel/NoticeData.class.php b/inc/SP/DataModel/NoticeData.class.php
new file mode 100644
index 00000000..705b6fb7
--- /dev/null
+++ b/inc/SP/DataModel/NoticeData.class.php
@@ -0,0 +1,232 @@
+.
+ */
+
+namespace SP\DataModel;
+
+use SP\Core\Messages\MessageInterface;
+
+/**
+ * Class NoticeData
+ *
+ * @package SP\DataModel
+ */
+class NoticeData implements DataModelInterface
+{
+ /**
+ * @var int
+ */
+ public $notice_id = 0;
+ /**
+ * @var string
+ */
+ public $notice_type;
+ /**
+ * @var string
+ */
+ public $notice_component;
+ /**
+ * @var string
+ */
+ public $notice_description;
+ /**
+ * @var int
+ */
+ public $notice_date = 0;
+ /**
+ * @var bool
+ */
+ public $notice_checked = 0;
+ /**
+ * @var int
+ */
+ public $notice_userId = 0;
+ /**
+ * @var bool
+ */
+ public $notice_sticky = 0;
+ /**
+ * @var bool
+ */
+ public $notice_onlyAdmin = 0;
+
+ /**
+ * @return int
+ */
+ public function getNoticeId()
+ {
+ return (int)$this->notice_id;
+ }
+
+ /**
+ * @param int $notice_id
+ */
+ public function setNoticeId($notice_id)
+ {
+ $this->notice_id = (int)$notice_id;
+ }
+
+ /**
+ * @return string
+ */
+ public function getNoticeType()
+ {
+ return $this->notice_type;
+ }
+
+ /**
+ * @param string $notice_type
+ */
+ public function setNoticeType($notice_type)
+ {
+ $this->notice_type = $notice_type;
+ }
+
+ /**
+ * @return string
+ */
+ public function getNoticeComponent()
+ {
+ return $this->notice_component;
+ }
+
+ /**
+ * @param string $notice_component
+ */
+ public function setNoticeComponent($notice_component)
+ {
+ $this->notice_component = $notice_component;
+ }
+
+ /**
+ * @return string
+ */
+ public function getNoticeDescription()
+ {
+ return $this->notice_description;
+ }
+
+ /**
+ * @param MessageInterface $message
+ */
+ public function setNoticeDescription(MessageInterface $message)
+ {
+ $this->notice_description = $message->composeText();
+ }
+
+ /**
+ * @return int
+ */
+ public function getNoticeDate()
+ {
+ return $this->notice_date;
+ }
+
+ /**
+ * @param int $notice_date
+ */
+ public function setNoticeDate($notice_date)
+ {
+ $this->notice_date = (int)$notice_date;
+ }
+
+ /**
+ * @return bool
+ */
+ public function isNoticeChecked()
+ {
+ return (int)$this->notice_checked;
+ }
+
+ /**
+ * @param bool $notice_checked
+ */
+ public function setNoticeChecked($notice_checked)
+ {
+ $this->notice_checked = (int)$notice_checked;
+ }
+
+ /**
+ * @return int
+ */
+ public function getNoticeUserId()
+ {
+ return (int)$this->notice_userId;
+ }
+
+ /**
+ * @param int $notice_userId
+ */
+ public function setNoticeUserId($notice_userId)
+ {
+ $this->notice_userId = (int)$notice_userId;
+ }
+
+ /**
+ * @return bool
+ */
+ public function isNoticeSticky()
+ {
+ return (int)$this->notice_sticky;
+ }
+
+ /**
+ * @param bool $notice_sticky
+ */
+ public function setNoticeSticky($notice_sticky)
+ {
+ $this->notice_sticky = (int)$notice_sticky;
+ }
+
+ /**
+ * @return bool
+ */
+ public function isNoticeOnlyAdmin()
+ {
+ return (int)$this->notice_onlyAdmin;
+ }
+
+ /**
+ * @param bool $notice_onlyAdmin
+ */
+ public function setNoticeOnlyAdmin($notice_onlyAdmin)
+ {
+ $this->notice_onlyAdmin = (int)$notice_onlyAdmin;
+ }
+
+ /**
+ * @return int
+ */
+ public function getId()
+ {
+ return (int)$this->notice_id;
+ }
+
+ /**
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->notice_component;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/DataModel/PluginData.class.php b/inc/SP/DataModel/PluginData.class.php
new file mode 100644
index 00000000..a82cff6f
--- /dev/null
+++ b/inc/SP/DataModel/PluginData.class.php
@@ -0,0 +1,130 @@
+.
+ */
+
+namespace SP\DataModel;
+
+/**
+ * Class PluginData
+ *
+ * @package SP\DataModel
+ */
+class PluginData extends DataModelBase implements DataModelInterface
+{
+ /**
+ * @var int
+ */
+ public $plugin_id;
+ /**
+ * @var string
+ */
+ public $plugin_name;
+ /**
+ * @var string
+ */
+ public $plugin_data;
+ /**
+ * @var int
+ */
+ public $plugin_enabled = 0;
+
+ /**
+ * @return int
+ */
+ public function getId()
+ {
+ return (int)$this->plugin_id;
+ }
+
+ /**
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->plugin_name;
+ }
+
+ /**
+ * @return int
+ */
+ public function getPluginId()
+ {
+ return (int)$this->plugin_id;
+ }
+
+ /**
+ * @param int $plugin_id
+ */
+ public function setPluginId($plugin_id)
+ {
+ $this->plugin_id = (int)$plugin_id;
+ }
+
+ /**
+ * @return string
+ */
+ public function getPluginName()
+ {
+ return $this->plugin_name;
+ }
+
+ /**
+ * @param string $plugin_name
+ */
+ public function setPluginName($plugin_name)
+ {
+ $this->plugin_name = $plugin_name;
+ }
+
+ /**
+ * @return string
+ */
+ public function getPluginData()
+ {
+ return $this->plugin_data;
+ }
+
+ /**
+ * @param string $plugin_data
+ */
+ public function setPluginData($plugin_data)
+ {
+ $this->plugin_data = $plugin_data;
+ }
+
+ /**
+ * @return int
+ */
+ public function getPluginEnabled()
+ {
+ return (int)$this->plugin_enabled;
+ }
+
+ /**
+ * @param int $plugin_enabled
+ */
+ public function setPluginEnabled($plugin_enabled)
+ {
+ $this->plugin_enabled = (int)$plugin_enabled;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/DataModel/ProfileBaseData.class.php b/inc/SP/DataModel/ProfileBaseData.class.php
new file mode 100644
index 00000000..bca857e7
--- /dev/null
+++ b/inc/SP/DataModel/ProfileBaseData.class.php
@@ -0,0 +1,112 @@
+.
+ */
+
+namespace SP\DataModel;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class ProfileBaseData
+ *
+ * @package SP\DataModel
+ */
+class ProfileBaseData extends DataModelBase implements DataModelInterface
+{
+ /**
+ * @var int
+ */
+ public $userprofile_id = 0;
+ /**
+ * @var string
+ */
+ public $userprofile_name = '';
+ /**
+ * @var ProfileData
+ */
+ public $userprofile_profile;
+
+ /**
+ * @return string
+ */
+ public function getUserprofileName()
+ {
+ return $this->userprofile_name;
+ }
+
+ /**
+ * @param string $userprofile_name
+ */
+ public function setUserprofileName($userprofile_name)
+ {
+ $this->userprofile_name = $userprofile_name;
+ }
+
+ /**
+ * @return int
+ */
+ public function getUserprofileId()
+ {
+ return $this->userprofile_id;
+ }
+
+ /**
+ * @param int $userprofile_id
+ */
+ public function setUserprofileId($userprofile_id)
+ {
+ $this->userprofile_id = $userprofile_id;
+ }
+
+ /**
+ * @return ProfileData
+ */
+ public function getUserprofileProfile()
+ {
+ return $this->userprofile_profile;
+ }
+
+ /**
+ * @param ProfileData $userprofile_profile
+ */
+ public function setUserprofileProfile($userprofile_profile)
+ {
+ $this->userprofile_profile = $userprofile_profile;
+ }
+
+ /**
+ * @return int
+ */
+ public function getId()
+ {
+ return $this->userprofile_id;
+ }
+
+ /**
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->userprofile_name;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/DataModel/ProfileData.class.php b/inc/SP/DataModel/ProfileData.class.php
new file mode 100644
index 00000000..774ac5e3
--- /dev/null
+++ b/inc/SP/DataModel/ProfileData.class.php
@@ -0,0 +1,636 @@
+.
+ */
+
+namespace SP\DataModel;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class ProfileData
+ *
+ * @package SP\DataModel
+ */
+class ProfileData extends ProfileBaseData
+{
+ /**
+ * @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 $accPrivate = false;
+ /**
+ * @var bool
+ */
+ protected $accPrivateGroup = false;
+ /**
+ * @var bool
+ */
+ protected $accPermission = false;
+ /**
+ * @var bool
+ */
+ protected $accPublicLinks = false;
+ /**
+ * @var bool
+ */
+ protected $accGlobalSearch = 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;
+ /**
+ * @var bool
+ */
+ protected $mgmPublicLinks = false;
+ /**
+ * @var bool
+ */
+ protected $mgmAccounts = false;
+ /**
+ * @var bool
+ */
+ protected $mgmTags = false;
+ /**
+ * @var bool
+ */
+ protected $mgmFiles = false;
+ /**
+ * @var bool
+ */
+ protected $evl = false;
+ /**
+ * @var bool
+ */
+ protected $mgmCustomFields = false;
+
+ /**
+ * @return boolean
+ */
+ public function isAccView()
+ {
+ return $this->accView;
+ }
+
+ /**
+ * @param boolean $accView
+ */
+ public function setAccView($accView)
+ {
+ $this->accView = $accView;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isAccViewPass()
+ {
+ return $this->accViewPass;
+ }
+
+ /**
+ * @param boolean $accViewPass
+ */
+ public function setAccViewPass($accViewPass)
+ {
+ $this->accViewPass = $accViewPass;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isAccViewHistory()
+ {
+ return $this->accViewHistory;
+ }
+
+ /**
+ * @param boolean $accViewHistory
+ */
+ public function setAccViewHistory($accViewHistory)
+ {
+ $this->accViewHistory = $accViewHistory;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isAccEdit()
+ {
+ return $this->accEdit;
+ }
+
+ /**
+ * @param boolean $accEdit
+ */
+ public function setAccEdit($accEdit)
+ {
+ $this->accEdit = $accEdit;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isAccEditPass()
+ {
+ return $this->accEditPass;
+ }
+
+ /**
+ * @param boolean $accEditPass
+ */
+ public function setAccEditPass($accEditPass)
+ {
+ $this->accEditPass = $accEditPass;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isAccAdd()
+ {
+ return $this->accAdd;
+ }
+
+ /**
+ * @param boolean $accAdd
+ */
+ public function setAccAdd($accAdd)
+ {
+ $this->accAdd = $accAdd;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isAccDelete()
+ {
+ return $this->accDelete;
+ }
+
+ /**
+ * @param boolean $accDelete
+ */
+ public function setAccDelete($accDelete)
+ {
+ $this->accDelete = $accDelete;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isAccFiles()
+ {
+ return $this->accFiles;
+ }
+
+ /**
+ * @param boolean $accFiles
+ */
+ public function setAccFiles($accFiles)
+ {
+ $this->accFiles = $accFiles;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isAccPublicLinks()
+ {
+ return $this->accPublicLinks;
+ }
+
+ /**
+ * @param boolean $accPublicLinks
+ */
+ public function setAccPublicLinks($accPublicLinks)
+ {
+ $this->accPublicLinks = $accPublicLinks;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isConfigGeneral()
+ {
+ return $this->configGeneral;
+ }
+
+ /**
+ * @param boolean $configGeneral
+ */
+ public function setConfigGeneral($configGeneral)
+ {
+ $this->configGeneral = $configGeneral;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isConfigEncryption()
+ {
+ return $this->configEncryption;
+ }
+
+ /**
+ * @param boolean $configEncryption
+ */
+ public function setConfigEncryption($configEncryption)
+ {
+ $this->configEncryption = $configEncryption;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isConfigBackup()
+ {
+ return $this->configBackup;
+ }
+
+ /**
+ * @param boolean $configBackup
+ */
+ public function setConfigBackup($configBackup)
+ {
+ $this->configBackup = $configBackup;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isConfigImport()
+ {
+ return $this->configImport;
+ }
+
+ /**
+ * @param boolean $configImport
+ */
+ public function setConfigImport($configImport)
+ {
+ $this->configImport = $configImport;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isMgmUsers()
+ {
+ return $this->mgmUsers;
+ }
+
+ /**
+ * @param boolean $mgmUsers
+ */
+ public function setMgmUsers($mgmUsers)
+ {
+ $this->mgmUsers = $mgmUsers;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isMgmGroups()
+ {
+ return $this->mgmGroups;
+ }
+
+ /**
+ * @param boolean $mgmGroups
+ */
+ public function setMgmGroups($mgmGroups)
+ {
+ $this->mgmGroups = $mgmGroups;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isMgmProfiles()
+ {
+ return $this->mgmProfiles;
+ }
+
+ /**
+ * @param boolean $mgmProfiles
+ */
+ public function setMgmProfiles($mgmProfiles)
+ {
+ $this->mgmProfiles = $mgmProfiles;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isMgmCategories()
+ {
+ return $this->mgmCategories;
+ }
+
+ /**
+ * @param boolean $mgmCategories
+ */
+ public function setMgmCategories($mgmCategories)
+ {
+ $this->mgmCategories = $mgmCategories;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isMgmCustomers()
+ {
+ return $this->mgmCustomers;
+ }
+
+ /**
+ * @param boolean $mgmCustomers
+ */
+ public function setMgmCustomers($mgmCustomers)
+ {
+ $this->mgmCustomers = $mgmCustomers;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isMgmApiTokens()
+ {
+ return $this->mgmApiTokens;
+ }
+
+ /**
+ * @param boolean $mgmApiTokens
+ */
+ public function setMgmApiTokens($mgmApiTokens)
+ {
+ $this->mgmApiTokens = $mgmApiTokens;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isMgmPublicLinks()
+ {
+ return $this->mgmPublicLinks;
+ }
+
+ /**
+ * @param boolean $mgmPublicLinks
+ */
+ public function setMgmPublicLinks($mgmPublicLinks)
+ {
+ $this->mgmPublicLinks = $mgmPublicLinks;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isEvl()
+ {
+ return $this->evl;
+ }
+
+ /**
+ * @param boolean $evl
+ */
+ public function setEvl($evl)
+ {
+ $this->evl = $evl;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isMgmCustomFields()
+ {
+ return $this->mgmCustomFields;
+ }
+
+ /**
+ * @param boolean $mgmCustomFields
+ */
+ public function setMgmCustomFields($mgmCustomFields)
+ {
+ $this->mgmCustomFields = $mgmCustomFields;
+ }
+
+ /**
+ * unserialize() checks for the presence of a function with the magic name __wakeup.
+ * If present, this function can reconstruct any resources that the object may have.
+ * The intended use of __wakeup is to reestablish any database connections that may have been lost during
+ * serialization and perform other reinitialization tasks.
+ *
+ * @return void
+ * @link http://php.net/manual/en/language.oop5.magic.php#language.oop5.magic.sleep
+ */
+ public function __wakeup()
+ {
+ // Para realizar la conversión de nombre de propiedades que empiezan por _
+ foreach (get_object_vars($this) as $name => $value) {
+ if ($name[0] === '_') {
+ $newName = substr($name, 1);
+ $this->$newName = $value;
+ }
+ }
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isAccPrivate()
+ {
+ return $this->accPrivate;
+ }
+
+ /**
+ * @param boolean $accPrivate
+ */
+ public function setAccPrivate($accPrivate)
+ {
+ $this->accPrivate = $accPrivate;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isAccPermission()
+ {
+ return $this->accPermission;
+ }
+
+ /**
+ * @param boolean $accPermission
+ */
+ public function setAccPermission($accPermission)
+ {
+ $this->accPermission = $accPermission;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isMgmAccounts()
+ {
+ return $this->mgmAccounts;
+ }
+
+ /**
+ * @param boolean $mgmAccounts
+ */
+ public function setMgmAccounts($mgmAccounts)
+ {
+ $this->mgmAccounts = $mgmAccounts;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isMgmTags()
+ {
+ return $this->mgmTags;
+ }
+
+ /**
+ * @param boolean $mgmTags
+ */
+ public function setMgmTags($mgmTags)
+ {
+ $this->mgmTags = $mgmTags;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isMgmFiles()
+ {
+ return $this->mgmFiles;
+ }
+
+ /**
+ * @param boolean $mgmFiles
+ */
+ public function setMgmFiles($mgmFiles)
+ {
+ $this->mgmFiles = $mgmFiles;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isAccGlobalSearch()
+ {
+ return $this->accGlobalSearch;
+ }
+
+ /**
+ * @param boolean $accGlobalSearch
+ */
+ public function setAccGlobalSearch($accGlobalSearch)
+ {
+ $this->accGlobalSearch = $accGlobalSearch;
+ }
+
+ /**
+ * @return bool
+ */
+ public function isAccPrivateGroup()
+ {
+ return $this->accPrivateGroup;
+ }
+
+ /**
+ * @param bool $accPrivateGroup
+ */
+ public function setAccPrivateGroup($accPrivateGroup)
+ {
+ $this->accPrivateGroup = $accPrivateGroup;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/DataModel/PublicLinkBaseData.class.php b/inc/SP/DataModel/PublicLinkBaseData.class.php
new file mode 100644
index 00000000..11464e7f
--- /dev/null
+++ b/inc/SP/DataModel/PublicLinkBaseData.class.php
@@ -0,0 +1,132 @@
+.
+ */
+
+namespace SP\DataModel;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class PublicLinkBaseData
+ *
+ * @package SP\DataModel
+ */
+class PublicLinkBaseData extends DataModelBase implements DataModelInterface
+{
+ /**
+ * @var int
+ */
+ public $publicLink_id = 0;
+ /**
+ * @var int
+ */
+ public $publicLink_itemId = 0;
+ /**
+ * @var string
+ */
+ public $publicLink_hash = '';
+ /**
+ * @var PublicLinkData
+ */
+ public $publicLink_linkData;
+
+ /**
+ * @return int
+ */
+ public function getPublicLinkId()
+ {
+ return (int)$this->publicLink_id;
+ }
+
+ /**
+ * @param int $publicLink_id
+ */
+ public function setPublicLinkId($publicLink_id)
+ {
+ $this->publicLink_id = (int)$publicLink_id;
+ }
+
+ /**
+ * @return string
+ */
+ public function getPublicLinkHash()
+ {
+ return $this->publicLink_hash;
+ }
+
+ /**
+ * @param string $publicLink_hash
+ */
+ public function setPublicLinkHash($publicLink_hash)
+ {
+ $this->publicLink_hash = $publicLink_hash;
+ }
+
+ /**
+ * @return PublicLinkData
+ */
+ public function getPublicLinkLinkData()
+ {
+ return $this->publicLink_linkData;
+ }
+
+ /**
+ * @param PublicLinkData $publicLink_linkData
+ */
+ public function setPublicLinkLinkData($publicLink_linkData)
+ {
+ $this->publicLink_linkData = $publicLink_linkData;
+ }
+
+ /**
+ * @return int
+ */
+ public function getPublicLinkItemId()
+ {
+ return (int)$this->publicLink_itemId;
+ }
+
+ /**
+ * @param int $publicLink_itemId
+ */
+ public function setPublicLinkItemId($publicLink_itemId)
+ {
+ $this->publicLink_itemId = (int)$publicLink_itemId;
+ }
+
+ /**
+ * @return int
+ */
+ public function getId()
+ {
+ return $this->publicLink_id;
+ }
+
+ /**
+ * @return string
+ */
+ public function getName()
+ {
+ return '';
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/DataModel/PublicLinkData.class.php b/inc/SP/DataModel/PublicLinkData.class.php
new file mode 100644
index 00000000..67871ffb
--- /dev/null
+++ b/inc/SP/DataModel/PublicLinkData.class.php
@@ -0,0 +1,292 @@
+.
+ */
+
+namespace SP\DataModel;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class PublicLinkData
+ *
+ * @package SP\DataModel
+ */
+class PublicLinkData extends PublicLinkBaseData
+{
+ /**
+ * @var int
+ */
+ protected $itemId = 0;
+ /**
+ * @var int
+ */
+ protected $userId = 0;
+ /**
+ * @var string
+ */
+ protected $linkHash = '';
+ /**
+ * @var int
+ */
+ protected $typeId = 0;
+ /**
+ * @var bool
+ */
+ protected $notify = false;
+ /**
+ * @var int
+ */
+ protected $dateAdd = 0;
+ /**
+ * @var int
+ */
+ protected $dateExpire = 0;
+ /**
+ * @var string
+ */
+ protected $pass = '';
+ /**
+ * @var string
+ */
+ protected $passIV = '';
+ /**
+ * @var int
+ */
+ protected $countViews = 0;
+ /**
+ * @var int
+ */
+ protected $maxCountViews = 0;
+ /**
+ * @var array
+ */
+ protected $useInfo = [];
+
+ /**
+ * @return int
+ */
+ public function getItemId()
+ {
+ return $this->itemId;
+ }
+
+ /**
+ * @param int $itemId
+ */
+ public function setItemId($itemId)
+ {
+ $this->itemId = $itemId;
+ }
+
+ /**
+ * @return int
+ */
+ public function getUserId()
+ {
+ return $this->userId;
+ }
+
+ /**
+ * @param int $userId
+ */
+ public function setUserId($userId)
+ {
+ $this->userId = $userId;
+ }
+
+ /**
+ * @return string
+ */
+ public function getLinkHash()
+ {
+ return $this->linkHash;
+ }
+
+ /**
+ * @param string $linkHash
+ */
+ public function setLinkHash($linkHash)
+ {
+ $this->linkHash = $linkHash;
+ }
+
+ /**
+ * @return int
+ */
+ public function getTypeId()
+ {
+ return $this->typeId;
+ }
+
+ /**
+ * @param int $typeId
+ */
+ public function setTypeId($typeId)
+ {
+ $this->typeId = $typeId;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isNotify()
+ {
+ return (bool)$this->notify;
+ }
+
+ /**
+ * @param boolean $notify
+ */
+ public function setNotify($notify)
+ {
+ $this->notify = $notify;
+ }
+
+ /**
+ * @return int
+ */
+ public function getDateAdd()
+ {
+ return $this->dateAdd;
+ }
+
+ /**
+ * @param int $dateAdd
+ */
+ public function setDateAdd($dateAdd)
+ {
+ $this->dateAdd = $dateAdd;
+ }
+
+ /**
+ * @return int
+ */
+ public function getDateExpire()
+ {
+ return $this->dateExpire;
+ }
+
+ /**
+ * @param int $dateExpire
+ */
+ public function setDateExpire($dateExpire)
+ {
+ $this->dateExpire = $dateExpire;
+ }
+
+ /**
+ * @return string
+ */
+ public function getPass()
+ {
+ return $this->pass;
+ }
+
+ /**
+ * @param string $pass
+ */
+ public function setPass($pass)
+ {
+ $this->pass = $pass;
+ }
+
+ /**
+ * @return string
+ */
+ public function getPassIV()
+ {
+ return $this->passIV;
+ }
+
+ /**
+ * @param string $passIV
+ */
+ public function setPassIV($passIV)
+ {
+ $this->passIV = $passIV;
+ }
+
+ /**
+ * @return int
+ */
+ public function getCountViews()
+ {
+ return $this->countViews;
+ }
+
+ /**
+ * @param int $countViews
+ */
+ public function setCountViews($countViews)
+ {
+ $this->countViews = $countViews;
+ }
+
+ /**
+ * @return int
+ */
+ public function addCountViews()
+ {
+ return $this->countViews++;
+ }
+
+ /**
+ * @return int
+ */
+ public function getMaxCountViews()
+ {
+ return $this->maxCountViews;
+ }
+
+ /**
+ * @param int $maxCountViews
+ */
+ public function setMaxCountViews($maxCountViews)
+ {
+ $this->maxCountViews = $maxCountViews;
+ }
+
+ /**
+ * @return array
+ */
+ public function getUseInfo()
+ {
+ return $this->useInfo;
+ }
+
+ /**
+ * @param array $useInfo
+ */
+ public function setUseInfo(array $useInfo)
+ {
+ $this->useInfo = $useInfo;
+ }
+
+ /**
+ * @param array $useInfo
+ */
+ public function addUseInfo($useInfo)
+ {
+ $this->useInfo[] = $useInfo;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/DataModel/PublicLinkListData.class.php b/inc/SP/DataModel/PublicLinkListData.class.php
new file mode 100644
index 00000000..be721a38
--- /dev/null
+++ b/inc/SP/DataModel/PublicLinkListData.class.php
@@ -0,0 +1,176 @@
+.
+ */
+
+namespace SP\DataModel;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class PublicLinkListData
+ *
+ * @package SP\DataModel
+ */
+class PublicLinkListData extends PublicLinkBaseData
+{
+ /**
+ * @var string
+ */
+ public $accountName = '';
+ /**
+ * @var string
+ */
+ public $userLogin = '';
+ /**
+ * @var string
+ */
+ public $notify = '';
+ /**
+ * @var string
+ */
+ public $dateAdd = '';
+ /**
+ * @var string
+ */
+ public $dateExpire = '';
+ /**
+ * @var int
+ */
+ public $countViews = 0;
+ /**
+ * @var array
+ */
+ public $useInfo = [];
+
+ /**
+ * @return string
+ */
+ public function getAccountName()
+ {
+ return $this->accountName;
+ }
+
+ /**
+ * @param string $accountName
+ */
+ public function setAccountName($accountName)
+ {
+ $this->accountName = $accountName;
+ }
+
+ /**
+ * @return string
+ */
+ public function getUserLogin()
+ {
+ return $this->userLogin;
+ }
+
+ /**
+ * @param string $userLogin
+ */
+ public function setUserLogin($userLogin)
+ {
+ $this->userLogin = $userLogin;
+ }
+
+ /**
+ * @return string
+ */
+ public function getNotify()
+ {
+ return $this->notify;
+ }
+
+ /**
+ * @param string $notify
+ */
+ public function setNotify($notify)
+ {
+ $this->notify = $notify;
+ }
+
+ /**
+ * @return string
+ */
+ public function getDateAdd()
+ {
+ return $this->dateAdd;
+ }
+
+ /**
+ * @param string $dateAdd
+ */
+ public function setDateAdd($dateAdd)
+ {
+ $this->dateAdd = $dateAdd;
+ }
+
+ /**
+ * @return string
+ */
+ public function getDateExpire()
+ {
+ return $this->dateExpire;
+ }
+
+ /**
+ * @param string $dateExpire
+ */
+ public function setDateExpire($dateExpire)
+ {
+ $this->dateExpire = $dateExpire;
+ }
+
+ /**
+ * @return int
+ */
+ public function getCountViews()
+ {
+ return $this->countViews;
+ }
+
+ /**
+ * @param int $countViews
+ */
+ public function setCountViews($countViews)
+ {
+ $this->countViews = $countViews;
+ }
+
+ /**
+ * @return array
+ */
+ public function getUseInfo()
+ {
+ return $this->useInfo;
+ }
+
+ /**
+ * @param array $useInfo
+ */
+ public function setUseInfo($useInfo)
+ {
+ $this->useInfo = $useInfo;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/DataModel/TagData.class.php b/inc/SP/DataModel/TagData.class.php
new file mode 100644
index 00000000..82f9e90d
--- /dev/null
+++ b/inc/SP/DataModel/TagData.class.php
@@ -0,0 +1,123 @@
+.
+ */
+
+namespace SP\DataModel;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class TagData
+ *
+ * @package SP\Mgmt\Tags
+ */
+class TagData extends DataModelBase implements DataModelInterface
+{
+ /**
+ * @var int
+ */
+ public $tag_id = 0;
+ /**
+ * @var string
+ */
+ public $tag_name = '';
+ /**
+ * @var string
+ */
+ public $tag_hash = '';
+
+ /**
+ * @return int
+ */
+ public function getTagId()
+ {
+ return $this->tag_id;
+ }
+
+ /**
+ * @param int $tag_id
+ */
+ public function setTagId($tag_id)
+ {
+ $this->tag_id = $tag_id;
+ }
+
+ /**
+ * @return string
+ */
+ public function getTagName()
+ {
+ return $this->tag_name;
+ }
+
+ /**
+ * @param string $tag_name
+ */
+ public function setTagName($tag_name)
+ {
+ $this->tag_name = $tag_name;
+ $this->createTagHash();
+ }
+
+ /**
+ * @return string
+ */
+ public function getTagHash()
+ {
+ return $this->tag_hash;
+ }
+
+ /**
+ * @param string $tag_hash
+ */
+ public function setTagHash($tag_hash)
+ {
+ $this->tag_hash = $tag_hash;
+ }
+
+ /**
+ * Formatear el nombre de la etiqueta y devolver un hash
+ *
+ * @return string
+ */
+ protected function createTagHash()
+ {
+ $this->tag_hash = sha1(strtolower(preg_replace('#[\.\s_,\-;\'":()|/"]+#', '', $this->tag_name)));
+ }
+
+ /**
+ * @return int
+ */
+ public function getId()
+ {
+ return $this->tag_id;
+ }
+
+ /**
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->tag_name;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/DataModel/UserData.class.php b/inc/SP/DataModel/UserData.class.php
new file mode 100644
index 00000000..54fd9557
--- /dev/null
+++ b/inc/SP/DataModel/UserData.class.php
@@ -0,0 +1,392 @@
+.
+ */
+
+namespace SP\DataModel;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class UserBasicData
+ *
+ * @package SP\DataModel
+ */
+class UserData extends UserPassData implements DataModelInterface
+{
+ /**
+ * @var string
+ */
+ public $user_login = '';
+ /**
+ * @var string
+ */
+ public $user_name = '';
+ /**
+ * @var string
+ */
+ public $user_email = '';
+ /**
+ * @var string
+ */
+ public $user_notes = '';
+ /**
+ * @var int
+ */
+ public $user_groupId = 0;
+ /**
+ * @var int
+ */
+ public $user_profileId = 0;
+ /**
+ * @var bool
+ */
+ public $user_isAdminApp = 0;
+ /**
+ * @var bool
+ */
+ public $user_isAdminAcc = 0;
+ /**
+ * @var bool
+ */
+ public $user_isDisabled = 0;
+ /**
+ * @var bool
+ */
+ public $user_isChangePass = 0;
+ /**
+ * @var bool
+ */
+ public $user_isLdap = 0;
+ /**
+ * @var int
+ */
+ public $user_count = 0;
+ /**
+ * @var string
+ */
+ public $user_lastLogin = '';
+ /**
+ * @var string
+ */
+ public $user_lastUpdate = '';
+ /**
+ * @var bool
+ */
+ public $user_isMigrate = 0;
+ /**
+ * @var
+ */
+ public $user_preferences;
+ /**
+ * @var string
+ */
+ public $usergroup_name = '';
+
+ /**
+ * @return int
+ */
+ public function getUserCount()
+ {
+ return (int)$this->user_count;
+ }
+
+ /**
+ * @param int $user_count
+ */
+ public function setUserCount($user_count)
+ {
+ $this->user_count = (int)$user_count;
+ }
+
+ /**
+ * @return string
+ */
+ public function getUserLastLogin()
+ {
+ return $this->user_lastLogin;
+ }
+
+ /**
+ * @param string $user_lastLogin
+ */
+ public function setUserLastLogin($user_lastLogin)
+ {
+ $this->user_lastLogin = $user_lastLogin;
+ }
+
+ /**
+ * @return string
+ */
+ public function getUserLastUpdate()
+ {
+ return $this->user_lastUpdate;
+ }
+
+ /**
+ * @param string $user_lastUpdate
+ */
+ public function setUserLastUpdate($user_lastUpdate)
+ {
+ $this->user_lastUpdate = $user_lastUpdate;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isUserIsMigrate()
+ {
+ return (int)$this->user_isMigrate;
+ }
+
+ /**
+ * @param boolean $user_isMigrate
+ */
+ public function setUserIsMigrate($user_isMigrate)
+ {
+ $this->user_isMigrate = (int)$user_isMigrate;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getUserPreferences()
+ {
+ return $this->user_preferences;
+ }
+
+ /**
+ * @param mixed $user_preferences
+ */
+ public function setUserPreferences($user_preferences)
+ {
+ $this->user_preferences = $user_preferences;
+ }
+
+ /**
+ * @return string
+ */
+ public function getUserEmail()
+ {
+ return $this->user_email;
+ }
+
+ /**
+ * @param string $user_email
+ */
+ public function setUserEmail($user_email)
+ {
+ $this->user_email = $user_email;
+ }
+
+ /**
+ * @return string
+ */
+ public function getUserNotes()
+ {
+ return $this->user_notes;
+ }
+
+ /**
+ * @param string $user_notes
+ */
+ public function setUserNotes($user_notes)
+ {
+ $this->user_notes = $user_notes;
+ }
+
+ /**
+ * @return int
+ */
+ public function getUserGroupId()
+ {
+ return (int)$this->user_groupId;
+ }
+
+ /**
+ * @param int $user_groupId
+ */
+ public function setUserGroupId($user_groupId)
+ {
+ $this->user_groupId = (int)$user_groupId;
+ }
+
+ /**
+ * @return int
+ */
+ public function getUserProfileId()
+ {
+ return (int)$this->user_profileId;
+ }
+
+ /**
+ * @param int $user_profileId
+ */
+ public function setUserProfileId($user_profileId)
+ {
+ $this->user_profileId = (int)$user_profileId;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isUserIsAdminApp()
+ {
+ return (int)$this->user_isAdminApp;
+ }
+
+ /**
+ * @param boolean $user_isAdminApp
+ */
+ public function setUserIsAdminApp($user_isAdminApp)
+ {
+ $this->user_isAdminApp = (int)$user_isAdminApp;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isUserIsAdminAcc()
+ {
+ return (int)$this->user_isAdminAcc;
+ }
+
+ /**
+ * @param boolean $user_isAdminAcc
+ */
+ public function setUserIsAdminAcc($user_isAdminAcc)
+ {
+ $this->user_isAdminAcc = (int)$user_isAdminAcc;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isUserIsDisabled()
+ {
+ return (int)$this->user_isDisabled;
+ }
+
+ /**
+ * @param boolean $user_isDisabled
+ */
+ public function setUserIsDisabled($user_isDisabled)
+ {
+ $this->user_isDisabled = (int)$user_isDisabled;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isUserIsChangePass()
+ {
+ return (int)$this->user_isChangePass;
+ }
+
+ /**
+ * @param boolean $user_isChangePass
+ */
+ public function setUserIsChangePass($user_isChangePass)
+ {
+ $this->user_isChangePass = (int)$user_isChangePass;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isUserIsLdap()
+ {
+ return (int)$this->user_isLdap;
+ }
+
+ /**
+ * @param boolean $user_isLdap
+ */
+ public function setUserIsLdap($user_isLdap)
+ {
+ $this->user_isLdap = (int)$user_isLdap;
+ }
+
+ /**
+ * @return string
+ */
+ public function getUserLogin()
+ {
+ return $this->user_login;
+ }
+
+ /**
+ * @param string $user_login
+ */
+ public function setUserLogin($user_login)
+ {
+ $this->user_login = $user_login;
+ }
+
+ /**
+ * @return string
+ */
+ public function getUserName()
+ {
+ return $this->user_name;
+ }
+
+ /**
+ * @param string $user_name
+ */
+ public function setUserName($user_name)
+ {
+ $this->user_name = $user_name;
+ }
+
+ /**
+ * @return string
+ */
+ public function getUsergroupName()
+ {
+ return $this->usergroup_name;
+ }
+
+ /**
+ * @param string $usergroup_name
+ */
+ public function setUsergroupName($usergroup_name)
+ {
+ $this->usergroup_name = $usergroup_name;
+ }
+
+ /**
+ * @return int
+ */
+ public function getId()
+ {
+ return (int)$this->user_id;
+ }
+
+ /**
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->user_name;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/DataModel/UserPassData.class.php b/inc/SP/DataModel/UserPassData.class.php
new file mode 100644
index 00000000..d16ce6e0
--- /dev/null
+++ b/inc/SP/DataModel/UserPassData.class.php
@@ -0,0 +1,154 @@
+.
+ */
+
+namespace SP\DataModel;
+
+/**
+ * Class UserPassData
+ *
+ * @package SP\DataModel
+ */
+class UserPassData extends DataModelBase
+{
+ /**
+ * @var int
+ */
+ public $user_id = 0;
+ /**
+ * @var string
+ */
+ public $user_pass = '';
+ /**
+ * @var string
+ */
+ public $user_hashSalt = '';
+ /**
+ * @var string
+ */
+ public $user_mPass = '';
+ /**
+ * @var string
+ */
+ public $user_mIV = '';
+ /**
+ * @var int
+ */
+ public $user_lastUpdateMPass = 0;
+
+ /**
+ * @return string
+ */
+ public function getUserPass()
+ {
+ return $this->user_pass;
+ }
+
+ /**
+ * @param string $user_pass
+ */
+ public function setUserPass($user_pass)
+ {
+ $this->user_pass = $user_pass;
+ }
+
+ /**
+ * @return string
+ */
+ public function getUserHashSalt()
+ {
+ return $this->user_hashSalt;
+ }
+
+ /**
+ * @param string $user_hashSalt
+ */
+ public function setUserHashSalt($user_hashSalt)
+ {
+ $this->user_hashSalt = $user_hashSalt;
+ }
+
+ /**
+ * @return string
+ */
+ public function getUserMPass()
+ {
+ return $this->user_mPass;
+ }
+
+ /**
+ * @param string $user_mPass
+ */
+ public function setUserMPass($user_mPass)
+ {
+ $this->user_mPass = $user_mPass;
+ }
+
+ /**
+ * @return string
+ */
+ public function getUserMIV()
+ {
+ return $this->user_mIV;
+ }
+
+ /**
+ * @param string $user_mIV
+ */
+ public function setUserMIV($user_mIV)
+ {
+ $this->user_mIV = $user_mIV;
+ }
+
+ /**
+ * @return int
+ */
+ public function getUserLastUpdateMPass()
+ {
+ return (int)$this->user_lastUpdateMPass;
+ }
+
+ /**
+ * @param int $user_lastUpdateMPass
+ */
+ public function setUserLastUpdateMPass($user_lastUpdateMPass)
+ {
+ $this->user_lastUpdateMPass = (int)$user_lastUpdateMPass;
+ }
+
+ /**
+ * @return int
+ */
+ public function getUserId()
+ {
+ return (int)$this->user_id;
+ }
+
+ /**
+ * @param int $user_id
+ */
+ public function setUserId($user_id)
+ {
+ $this->user_id = (int)$user_id;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/DataModel/UserPassRecoverData.class.php b/inc/SP/DataModel/UserPassRecoverData.class.php
new file mode 100644
index 00000000..772737c2
--- /dev/null
+++ b/inc/SP/DataModel/UserPassRecoverData.class.php
@@ -0,0 +1,115 @@
+.
+ */
+
+namespace SP\DataModel;
+
+/**
+ * Class UserPassRecoverData
+ *
+ * @package SP\DataModel
+ */
+class UserPassRecoverData extends DataModelBase
+{
+ /**
+ * @var int
+ */
+ public $userpassr_userId = 0;
+ /**
+ * @var string
+ */
+ public $userpassr_hash = '';
+ /**
+ * @var int
+ */
+ public $userpassr_date = 0;
+ /**
+ * @var bool
+ */
+ public $userpassr_used = 0;
+
+ /**
+ * @return int
+ */
+ public function getUserpassrUserId()
+ {
+ return (int)$this->userpassr_userId;
+ }
+
+ /**
+ * @param int $userpassr_userId
+ */
+ public function setUserpassrUserId($userpassr_userId)
+ {
+ $this->userpassr_userId = (int)$userpassr_userId;
+ }
+
+ /**
+ * @return string
+ */
+ public function getUserpassrHash()
+ {
+ return $this->userpassr_hash;
+ }
+
+ /**
+ * @param string $userpassr_hash
+ */
+ public function setUserpassrHash($userpassr_hash)
+ {
+ $this->userpassr_hash = $userpassr_hash;
+ }
+
+ /**
+ * @return int
+ */
+ public function getUserpassrDate()
+ {
+ return $this->userpassr_date;
+ }
+
+ /**
+ * @param int $userpassr_date
+ */
+ public function setUserpassrDate($userpassr_date)
+ {
+ $this->userpassr_date = $userpassr_date;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isUserpassrUsed()
+ {
+ return (int)$this->userpassr_used;
+ }
+
+ /**
+ * @param boolean $userpassr_used
+ */
+ public function setUserpassrUsed($userpassr_used)
+ {
+ $this->userpassr_used = (int)$userpassr_used;
+ }
+
+}
\ No newline at end of file
diff --git a/inc/UserPreferences.class.php b/inc/SP/DataModel/UserPreferencesData.class.php
similarity index 51%
rename from inc/UserPreferences.class.php
rename to inc/SP/DataModel/UserPreferencesData.class.php
index 0caab66e..cb280ad3 100644
--- a/inc/UserPreferences.class.php
+++ b/inc/SP/DataModel/UserPreferencesData.class.php
@@ -2,9 +2,9 @@
/**
* sysPass
*
- * @author nuxsmin
- * @link http://syspass.org
- * @copyright 2012-2015 Rubén Domínguez nuxsmin@$syspass.org
+ * @author nuxsmin
+ * @link http://syspass.org
+ * @copyright 2012-2017, Rubén Domínguez nuxsmin@$syspass.org
*
* This file is part of sysPass.
*
@@ -19,211 +19,71 @@
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with sysPass. If not, see .
- *
+ * along with sysPass. If not, see .
*/
-namespace SP;
-
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+namespace SP\DataModel;
/**
- * Class UsersPreferences para la gestion de las preferencias de usuarios
+ * Class UserPreferencesData
*
- * @package SP
+ * @package SP\DataModel
*/
-class UserPreferences
+class UserPreferencesData
{
/**
* @var int
*/
- private $_id = 0;
+ public $user_id = 0;
/**
* Usar autentificación en 2 pasos
*
* @var bool
*/
- private $_use2Fa = false;
+ public $use2Fa = false;
/**
* Lenguaje del usuario
*
* @var string
*/
- private $_lang = '';
+ public $lang = '';
/**
* Tema del usuario
*
* @var string
*/
- private $_theme = '';
+ public $theme = '';
/**
* @var int
*/
- private $_resultsPerPage = 0;
+ public $resultsPerPage = 0;
/**
* @var bool
*/
- private $_accountLink = null;
+ public $accountLink;
/**
* @var bool
*/
- private $_sortViews = false;
+ public $sortViews = false;
/**
* @var bool
*/
- private $_topNavbar = false;
+ public $topNavbar = false;
/**
* @var bool
*/
- private $_optionalActions = false;
-
+ public $optionalActions = false;
/**
- * Obtener las preferencas de un usuario
- *
- * @param $id int El id del usuario
- * @return bool|UserPreferences
- * @throws SPException
+ * @var bool
*/
- 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 isOptionalActions()
- {
- return $this->_optionalActions;
- }
-
- /**
- * @param boolean $optionalActions
- */
- public function setOptionalActions($optionalActions)
- {
- $this->_optionalActions = $optionalActions;
- }
-
- /**
- * @return boolean
- */
- public function isTopNavbar()
- {
- return $this->_topNavbar;
- }
-
- /**
- * @param boolean $topNavbar
- */
- public function setTopNavbar($topNavbar)
- {
- $this->_topNavbar = $topNavbar;
- }
-
- /**
- * @return boolean
- */
- public function isSortViews()
- {
- return $this->_sortViews;
- }
-
- /**
- * @param boolean $sortViews
- */
- public function setSortViews($sortViews)
- {
- $this->_sortViews = $sortViews;
- }
-
- /**
- * @return int
- */
- public function getResultsPerPage()
- {
- return $this->_resultsPerPage;
- }
-
- /**
- * @param int $resultsPerPage
- */
- public function setResultsPerPage($resultsPerPage)
- {
- $this->_resultsPerPage = $resultsPerPage;
- }
-
- /**
- * @return boolean
- */
- public function isAccountLink()
- {
- return $this->_accountLink;
- }
-
- /**
- * @param boolean $accountLink
- */
- public function setAccountLink($accountLink)
- {
- $this->_accountLink = $accountLink;
- }
-
- /**
- * @return string
- */
- public function getTheme()
- {
- return $this->_theme;
- }
-
- /**
- * @param string $theme
- */
- public function setTheme($theme)
- {
- $this->_theme = $theme;
- }
-
- /**
- * @return string
- */
- public function getLang()
- {
- return $this->_lang;
- }
-
- /**
- * @param string $lang
- */
- public function setLang($lang)
- {
- $this->_lang = $lang;
- }
+ public $resultsAsCards = false;
/**
* @return boolean
*/
public function isUse2Fa()
{
- return $this->_use2Fa;
+ return $this->use2Fa;
}
/**
@@ -231,45 +91,173 @@ class UserPreferences
*/
public function setUse2Fa($use2Fa)
{
- $this->_use2Fa = $use2Fa;
+ $this->use2Fa = $use2Fa;
}
/**
- * Modificar las preferencias de un usuario
- *
- * @return bool
+ * @return string
*/
- public function updatePreferences()
+ public function getLang()
{
- $query = 'UPDATE usrData SET '
- . 'user_preferences = :preferences '
- . 'WHERE user_id = :id LIMIT 1';
+ return $this->lang;
+ }
- $data['id'] = $this->getId();
- $data['preferences'] = serialize($this);
+ /**
+ * @param string $lang
+ */
+ public function setLang($lang)
+ {
+ $this->lang = $lang;
+ }
- if (DB::getQuery($query, __FUNCTION__, $data) === false) {
- return false;
- }
+ /**
+ * @return string
+ */
+ public function getTheme()
+ {
+ return $this->theme;
+ }
- return true;
+ /**
+ * @param string $theme
+ */
+ public function setTheme($theme)
+ {
+ $this->theme = $theme;
}
/**
* @return int
*/
- public function getId()
+ public function getResultsPerPage()
{
- return $this->_id;
+ return $this->resultsPerPage;
}
/**
- * @param int $id
+ * @param int $resultsPerPage
*/
- public function setId($id)
+ public function setResultsPerPage($resultsPerPage)
{
- $this->_id = $id;
+ $this->resultsPerPage = $resultsPerPage;
}
+ /**
+ * @return boolean
+ */
+ public function isAccountLink()
+ {
+ return $this->accountLink;
+ }
+ /**
+ * @param boolean $accountLink
+ */
+ public function setAccountLink($accountLink)
+ {
+ $this->accountLink = $accountLink;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isSortViews()
+ {
+ return $this->sortViews;
+ }
+
+ /**
+ * @param boolean $sortViews
+ */
+ public function setSortViews($sortViews)
+ {
+ $this->sortViews = $sortViews;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isTopNavbar()
+ {
+ return $this->topNavbar;
+ }
+
+ /**
+ * @param boolean $topNavbar
+ */
+ public function setTopNavbar($topNavbar)
+ {
+ $this->topNavbar = $topNavbar;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isOptionalActions()
+ {
+ return $this->optionalActions;
+ }
+
+ /**
+ * @param boolean $optionalActions
+ */
+ public function setOptionalActions($optionalActions)
+ {
+ $this->optionalActions = $optionalActions;
+ }
+
+ /**
+ * @return int
+ */
+ public function getUserId()
+ {
+ return $this->user_id;
+ }
+
+ /**
+ * @param int $user_id
+ */
+ public function setUserId($user_id)
+ {
+ $this->user_id = $user_id;
+ }
+
+ /**
+ * unserialize() checks for the presence of a function with the magic name __wakeup.
+ * If present, this function can reconstruct any resources that the object may have.
+ * The intended use of __wakeup is to reestablish any database connections that may have been lost during
+ * serialization and perform other reinitialization tasks.
+ *
+ * @return void
+ * @link http://php.net/manual/en/language.oop5.magic.php#language.oop5.magic.sleep
+ */
+ function __wakeup()
+ {
+ // Para realizar la conversión de nombre de propiedades que empiezan por _
+ foreach (get_object_vars($this) as $name => $value) {
+ if (substr($name, 0, 1) === '_') {
+ $newName = substr($name, 1);
+ $this->$newName = $value;
+
+ // Borrar la variable anterior
+ unset($this->$name);
+ }
+ }
+ }
+
+ /**
+ * @return bool
+ */
+ public function isResultsAsCards()
+ {
+ return $this->resultsAsCards;
+ }
+
+ /**
+ * @param bool $resultsAsCards
+ */
+ public function setResultsAsCards($resultsAsCards)
+ {
+ $this->resultsAsCards = $resultsAsCards;
+ }
}
\ No newline at end of file
diff --git a/inc/SP/Forms/AccountForm.class.php b/inc/SP/Forms/AccountForm.class.php
new file mode 100644
index 00000000..6a4d3798
--- /dev/null
+++ b/inc/SP/Forms/AccountForm.class.php
@@ -0,0 +1,161 @@
+.
+ */
+
+namespace SP\Forms;
+
+use SP\Core\ActionsInterface;
+use SP\Core\Exceptions\ValidationException;
+use SP\Core\Session;
+use SP\DataModel\AccountData;
+use SP\DataModel\AccountExtData;
+use SP\Http\Request;
+
+/**
+ * Class AccountForm
+ *
+ * @package SP\Account
+ */
+class AccountForm extends FormBase implements FormInterface
+{
+ /**
+ * @var AccountData
+ */
+ protected $AccountData;
+
+ /**
+ * Validar el formulario
+ *
+ * @param $action
+ * @return bool
+ * @throws \SP\Core\Exceptions\ValidationException
+ */
+ public function validate($action)
+ {
+ switch ($action) {
+ case ActionsInterface::ACTION_ACC_EDIT_PASS:
+ $this->analyzeRequestData();
+ $this->checkPass();
+ break;
+ case ActionsInterface::ACTION_ACC_EDIT:
+ $this->analyzeRequestData();
+ $this->checkCommon();
+ break;
+ case ActionsInterface::ACTION_ACC_NEW:
+ case ActionsInterface::ACTION_ACC_COPY:
+ $this->analyzeRequestData();
+ $this->checkCommon();
+ $this->checkPass();
+ break;
+ }
+
+ return true;
+ }
+
+ /**
+ * Analizar los datos de la petición HTTP
+ *
+ * @return void
+ */
+ protected function analyzeRequestData()
+ {
+ $this->AccountData = new AccountExtData();
+ $this->AccountData->setAccountId($this->itemId);
+ $this->AccountData->setAccountName(Request::analyze('name'));
+ $this->AccountData->setAccountCustomerId(Request::analyze('customerId', 0));
+ $this->AccountData->setAccountCategoryId(Request::analyze('categoryId', 0));
+ $this->AccountData->setAccountLogin(Request::analyze('login'));
+ $this->AccountData->setAccountUrl(Request::analyze('url'));
+ $this->AccountData->setAccountNotes(Request::analyze('notes'));
+ $this->AccountData->setAccountUserEditId(Session::getUserData()->getUserId());
+ $this->AccountData->setAccountOtherUserEdit(Request::analyze('userEditEnabled', 0, false, 1));
+ $this->AccountData->setAccountOtherGroupEdit(Request::analyze('groupEditEnabled', 0, false, 1));
+ $this->AccountData->setAccountPass(Request::analyzeEncrypted('pass'));
+ $this->AccountData->setAccountIsPrivate(Request::analyze('privateEnabled', 0, false, 1));
+ $this->AccountData->setAccountIsPrivateGroup(Request::analyze('privateGroupEnabled', 0, false, 1));
+ $this->AccountData->setAccountPassDateChange(Request::analyze('passworddatechange_unix', 0));
+ $this->AccountData->setAccountParentId(Request::analyze('parentAccountId', 0));
+
+ // Arrays
+ $accountOtherGroups = Request::analyze('otherGroups', 0);
+ $accountOtherUsers = Request::analyze('otherUsers', 0);
+ $accountTags = Request::analyze('tags', 0);
+
+ if (is_array($accountOtherUsers)) {
+ $this->AccountData->setUsersId($accountOtherUsers);
+ }
+
+ if (is_array($accountOtherGroups)) {
+ $this->AccountData->setUserGroupsId($accountOtherGroups);
+ }
+
+ if (is_array($accountTags)) {
+ $this->AccountData->setTags($accountTags);
+ }
+
+ $accountMainGroupId = Request::analyze('mainGroupId', 0);
+
+ // Cambiar el grupo principal si el usuario es Admin
+ if ($accountMainGroupId !== 0
+ && (Session::getUserData()->isUserIsAdminApp() || Session::getUserData()->isUserIsAdminAcc())
+ ) {
+ $this->AccountData->setAccountUserGroupId($accountMainGroupId);
+ }
+ }
+
+ /**
+ * @throws ValidationException
+ */
+ protected function checkPass()
+ {
+ if (!$this->AccountData->getAccountPass()) {
+ throw new ValidationException(__('Es necesaria una clave', false));
+ } elseif (Request::analyzeEncrypted('passR') !== $this->AccountData->getAccountPass()) {
+ throw new ValidationException(__('Las claves no coinciden', false));
+ }
+ }
+
+ /**
+ * @throws ValidationException
+ */
+ protected function checkCommon()
+ {
+ if (!$this->AccountData->getAccountName()) {
+ throw new ValidationException(__('Es necesario un nombre de cuenta', false));
+ } elseif (!$this->AccountData->getAccountCustomerId()) {
+ throw new ValidationException(__('Es necesario un nombre de cliente', false));
+ } elseif (!$this->AccountData->getAccountLogin()) {
+ throw new ValidationException(__('Es necesario un usuario', false));
+ } elseif (!$this->AccountData->getAccountCategoryId()) {
+ throw new ValidationException(__('Es necesario una categoría', false));
+ }
+ }
+
+ /**
+ * @return AccountData
+ */
+ public function getItemData()
+ {
+ return $this->AccountData;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Forms/ApiTokenForm.class.php b/inc/SP/Forms/ApiTokenForm.class.php
new file mode 100644
index 00000000..c1393ee1
--- /dev/null
+++ b/inc/SP/Forms/ApiTokenForm.class.php
@@ -0,0 +1,97 @@
+.
+ */
+
+namespace SP\Forms;
+
+use SP\Api\ApiTokens;
+use SP\Core\ActionsInterface;
+use SP\Core\Exceptions\ValidationException;
+use SP\Http\Request;
+
+/**
+ * Class ApiTokenForm
+ *
+ * @package SP\Forms
+ */
+class ApiTokenForm extends FormBase implements FormInterface
+{
+ /**
+ * @var ApiTokens
+ */
+ protected $ApiTokens;
+
+ /**
+ * Validar el formulario
+ *
+ * @param $action
+ * @return bool
+ * @throws \SP\Core\Exceptions\ValidationException
+ */
+ public function validate($action)
+ {
+ switch ($action) {
+ case ActionsInterface::ACTION_MGM_APITOKENS_NEW:
+ case ActionsInterface::ACTION_MGM_APITOKENS_EDIT:
+ $this->analyzeRequestData();
+ $this->checkCommon();
+ break;
+ }
+
+ return true;
+ }
+
+ /**
+ * Analizar los datos de la petición HTTP
+ *
+ * @return void
+ */
+ protected function analyzeRequestData()
+ {
+ $this->ApiTokens = new ApiTokens();
+ $this->ApiTokens->setTokenId($this->itemId);
+ $this->ApiTokens->setUserId(Request::analyze('users', 0));
+ $this->ApiTokens->setActionId(Request::analyze('actions', 0));
+ $this->ApiTokens->setRefreshToken(Request::analyze('refreshtoken', false, false, true));
+ }
+
+ /**
+ * @throws ValidationException
+ */
+ protected function checkCommon()
+ {
+ if ($this->ApiTokens->getUserId() === 0) {
+ throw new ValidationException(__('Usuario no indicado', false));
+ } elseif ($this->ApiTokens->getActionId() === 0) {
+ throw new ValidationException(__('Acción no indicada', false));
+ }
+ }
+
+ /**
+ * @return ApiTokens
+ */
+ public function getItemData()
+ {
+ return $this->ApiTokens;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Forms/CategoryForm.class.php b/inc/SP/Forms/CategoryForm.class.php
new file mode 100644
index 00000000..d5f9dedc
--- /dev/null
+++ b/inc/SP/Forms/CategoryForm.class.php
@@ -0,0 +1,94 @@
+.
+ */
+
+namespace SP\Forms;
+
+use SP\Core\ActionsInterface;
+use SP\Core\Exceptions\ValidationException;
+use SP\DataModel\CategoryData;
+use SP\Http\Request;
+
+/**
+ * Class CategoryForm
+ *
+ * @package SP\Forms
+ */
+class CategoryForm extends FormBase implements FormInterface
+{
+ /**
+ * @var CategoryData
+ */
+ protected $CategoryData;
+
+ /**
+ * Validar el formulario
+ *
+ * @param $action
+ * @return bool
+ * @throws \SP\Core\Exceptions\ValidationException
+ */
+ public function validate($action)
+ {
+ switch ($action) {
+ case ActionsInterface::ACTION_MGM_CATEGORIES_NEW:
+ case ActionsInterface::ACTION_MGM_CATEGORIES_EDIT:
+ $this->analyzeRequestData();
+ $this->checkCommon();
+ break;
+ }
+
+ return true;
+ }
+
+ /**
+ * Analizar los datos de la petición HTTP
+ *
+ * @return void
+ */
+ protected function analyzeRequestData()
+ {
+ $this->CategoryData = new CategoryData();
+ $this->CategoryData->setCategoryId($this->itemId);
+ $this->CategoryData->setCategoryName(Request::analyze('name'));
+ $this->CategoryData->setCategoryDescription(Request::analyze('description'));
+ }
+
+ /**
+ * @throws ValidationException
+ */
+ protected function checkCommon()
+ {
+ if (!$this->CategoryData->getCategoryName()) {
+ throw new ValidationException(__('Es necesario un nombre de categoría', false));
+ }
+ }
+
+ /**
+ * @return CategoryData
+ */
+ public function getItemData()
+ {
+ return $this->CategoryData;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Forms/CustomFieldDefForm.class.php b/inc/SP/Forms/CustomFieldDefForm.class.php
new file mode 100644
index 00000000..2e1bc960
--- /dev/null
+++ b/inc/SP/Forms/CustomFieldDefForm.class.php
@@ -0,0 +1,102 @@
+.
+ */
+
+namespace SP\Forms;
+
+use SP\Core\ActionsInterface;
+use SP\Core\Exceptions\ValidationException;
+use SP\DataModel\CustomFieldDefData;
+use SP\Http\Request;
+
+/**
+ * Class CustomFieldDefForm
+ *
+ * @package SP\Forms
+ */
+class CustomFieldDefForm extends FormBase implements FormInterface
+{
+ /**
+ * @var CustomFieldDefData
+ */
+ protected $CustomFieldDefData;
+
+ /**
+ * Validar el formulario
+ *
+ * @param $action
+ * @return bool
+ * @throws \SP\Core\Exceptions\ValidationException
+ */
+ public function validate($action)
+ {
+ switch ($action) {
+ case ActionsInterface::ACTION_MGM_CUSTOMFIELDS_NEW:
+ case ActionsInterface::ACTION_MGM_CUSTOMFIELDS_EDIT:
+ $this->analyzeRequestData();
+ $this->checkCommon();
+ break;
+ }
+
+ return true;
+ }
+
+ /**
+ * Analizar los datos de la petición HTTP
+ *
+ * @return void
+ */
+ protected function analyzeRequestData()
+ {
+ $this->CustomFieldDefData = new CustomFieldDefData();
+ $this->CustomFieldDefData->setCustomfielddefId($this->itemId);
+ $this->CustomFieldDefData->setId($this->itemId);
+ $this->CustomFieldDefData->setName(Request::analyze('name'));
+ $this->CustomFieldDefData->setType(Request::analyze('type', 0));
+ $this->CustomFieldDefData->setModule(Request::analyze('module', 0));
+ $this->CustomFieldDefData->setHelp(Request::analyze('help'));
+ $this->CustomFieldDefData->setRequired(Request::analyze('required', false, false, true));
+ }
+
+ /**
+ * @throws ValidationException
+ */
+ protected function checkCommon()
+ {
+ if (!$this->CustomFieldDefData->getName()) {
+ throw new ValidationException(__('Nombre del campo no indicado', false));
+ } elseif ($this->CustomFieldDefData->getType() === 0) {
+ throw new ValidationException(__('Tipo del campo no indicado', false));
+ } elseif ($this->CustomFieldDefData->getModule() === 0) {
+ throw new ValidationException(__('Módulo del campo no indicado', false));
+ }
+ }
+
+ /**
+ * @return CustomFieldDefData
+ */
+ public function getItemData()
+ {
+ return $this->CustomFieldDefData;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Forms/CustomerForm.class.php b/inc/SP/Forms/CustomerForm.class.php
new file mode 100644
index 00000000..e469d343
--- /dev/null
+++ b/inc/SP/Forms/CustomerForm.class.php
@@ -0,0 +1,94 @@
+.
+ */
+
+namespace SP\Forms;
+
+use SP\Core\ActionsInterface;
+use SP\Core\Exceptions\ValidationException;
+use SP\DataModel\CustomerData;
+use SP\Http\Request;
+
+/**
+ * Class CustomerForm
+ *
+ * @package SP\Forms
+ */
+class CustomerForm extends FormBase implements FormInterface
+{
+ /**
+ * @var CustomerData
+ */
+ protected $CustomerData;
+
+ /**
+ * Validar el formulario
+ *
+ * @param $action
+ * @return bool
+ * @throws \SP\Core\Exceptions\ValidationException
+ */
+ public function validate($action)
+ {
+ switch ($action) {
+ case ActionsInterface::ACTION_MGM_CUSTOMERS_NEW:
+ case ActionsInterface::ACTION_MGM_CUSTOMERS_EDIT:
+ $this->analyzeRequestData();
+ $this->checkCommon();
+ break;
+ }
+
+ return true;
+ }
+
+ /**
+ * Analizar los datos de la petición HTTP
+ *
+ * @return void
+ */
+ protected function analyzeRequestData()
+ {
+ $this->CustomerData = new CustomerData();
+ $this->CustomerData->setCustomerId($this->itemId);
+ $this->CustomerData->setCustomerName(Request::analyze('name'));
+ $this->CustomerData->setCustomerDescription(Request::analyze('description'));
+ }
+
+ /**
+ * @throws ValidationException
+ */
+ protected function checkCommon()
+ {
+ if (!$this->CustomerData->getCustomerName()) {
+ throw new ValidationException(__('Es necesario un nombre de cliente', false));
+ }
+ }
+
+ /**
+ * @return CustomerData
+ */
+ public function getItemData()
+ {
+ return $this->CustomerData;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Forms/FormBase.class.php b/inc/SP/Forms/FormBase.class.php
new file mode 100644
index 00000000..99659bc9
--- /dev/null
+++ b/inc/SP/Forms/FormBase.class.php
@@ -0,0 +1,55 @@
+.
+ */
+
+namespace SP\Forms;
+
+/**
+ * Class FormBase
+ *
+ * @package SP\Forms
+ */
+abstract class FormBase
+{
+ /**
+ * @var int
+ */
+ protected $itemId;
+
+ /**
+ * FormBase constructor.
+ *
+ * @param $itemId
+ */
+ public function __construct($itemId)
+ {
+ $this->itemId = $itemId;
+ }
+
+ /**
+ * Analizar los datos de la petición HTTP
+ *
+ * @return void
+ */
+ protected abstract function analyzeRequestData();
+}
\ No newline at end of file
diff --git a/inc/SP/Forms/FormInterface.class.php b/inc/SP/Forms/FormInterface.class.php
new file mode 100644
index 00000000..c8b36c24
--- /dev/null
+++ b/inc/SP/Forms/FormInterface.class.php
@@ -0,0 +1,47 @@
+.
+ */
+
+namespace SP\Forms;
+
+/**
+ * Interface FormInterface
+ *
+ * @package SP\Forms
+ */
+interface FormInterface
+{
+ /**
+ * Validar el formulario
+ *
+ * @param $action
+ * @return bool
+ * @throws \SP\Core\Exceptions\ValidationException
+ */
+ public function validate($action);
+
+ /**
+ * @return mixed
+ */
+ public function getItemData();
+}
\ No newline at end of file
diff --git a/inc/SP/Forms/GroupForm.class.php b/inc/SP/Forms/GroupForm.class.php
new file mode 100644
index 00000000..e9cc8360
--- /dev/null
+++ b/inc/SP/Forms/GroupForm.class.php
@@ -0,0 +1,95 @@
+.
+ */
+
+namespace SP\Forms;
+
+use SP\Core\ActionsInterface;
+use SP\Core\Exceptions\ValidationException;
+use SP\DataModel\GroupData;
+use SP\Http\Request;
+
+/**
+ * Class GroupForm
+ *
+ * @package SP\Forms
+ */
+class GroupForm extends FormBase implements FormInterface
+{
+ /**
+ * @var GroupData
+ */
+ protected $GroupData;
+
+ /**
+ * Validar el formulario
+ *
+ * @param $action
+ * @return bool
+ * @throws \SP\Core\Exceptions\ValidationException
+ */
+ public function validate($action)
+ {
+ switch ($action) {
+ case ActionsInterface::ACTION_USR_GROUPS_NEW:
+ case ActionsInterface::ACTION_USR_GROUPS_EDIT:
+ $this->analyzeRequestData();
+ $this->checkCommon();
+ break;
+ }
+
+ return true;
+ }
+
+ /**
+ * Analizar los datos de la petición HTTP
+ *
+ * @return void
+ */
+ protected function analyzeRequestData()
+ {
+ $this->GroupData = new GroupData();
+ $this->GroupData->setUsergroupId($this->itemId);
+ $this->GroupData->setUsergroupName(Request::analyze('name'));
+ $this->GroupData->setUsergroupDescription(Request::analyze('description'));
+ $this->GroupData->setUsers(Request::analyze('users', 0));
+ }
+
+ /**
+ * @throws ValidationException
+ */
+ protected function checkCommon()
+ {
+ if (!$this->GroupData->getUsergroupName()) {
+ throw new ValidationException(__('Es necesario un nombre de grupo', false));
+ }
+ }
+
+ /**
+ * @return GroupData
+ */
+ public function getItemData()
+ {
+ return $this->GroupData;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Forms/NoticeForm.class.php b/inc/SP/Forms/NoticeForm.class.php
new file mode 100644
index 00000000..48ff65d3
--- /dev/null
+++ b/inc/SP/Forms/NoticeForm.class.php
@@ -0,0 +1,111 @@
+.
+ */
+
+namespace SP\Forms;
+
+use SP\Core\ActionsInterface;
+use SP\Core\Exceptions\ValidationException;
+use SP\Core\Messages\NoticeMessage;
+use SP\DataModel\NoticeData;
+use SP\Http\Request;
+
+/**
+ * Class NoticeForm
+ *
+ * @package SP\Forms
+ */
+class NoticeForm extends FormBase implements FormInterface
+{
+ /**
+ * @var NoticeData
+ */
+ protected $NoticeData;
+
+ /**
+ * Validar el formulario
+ *
+ * @param $action
+ * @return bool
+ * @throws \SP\Core\Exceptions\ValidationException
+ */
+ public function validate($action)
+ {
+ switch ($action) {
+ case ActionsInterface::ACTION_NOT_USER_NEW:
+ case ActionsInterface::ACTION_NOT_USER_EDIT:
+ $this->analyzeRequestData();
+ $this->checkCommon();
+ break;
+ }
+
+ return true;
+ }
+
+ /**
+ * Analizar los datos de la petición HTTP
+ *
+ * @return void
+ */
+ protected function analyzeRequestData()
+ {
+ $Description = new NoticeMessage();
+ $Description->addDescription(Request::analyze('notice_description'));
+
+ $this->NoticeData = new NoticeData();
+ $this->NoticeData->setNoticeId($this->itemId);
+ $this->NoticeData->setNoticeType(Request::analyze('notice_type'));
+ $this->NoticeData->setNoticeComponent(Request::analyze('notice_component'));
+ $this->NoticeData->setNoticeDescription($Description);
+ $this->NoticeData->setNoticeUserId(Request::analyze('notice_user', 0));
+
+ if ($this->NoticeData->getNoticeUserId() === 0) {
+ $this->NoticeData->setNoticeOnlyAdmin(Request::analyze('notice_onlyadmin', 0, false, 1));
+ $this->NoticeData->setNoticeSticky(Request::analyze('notice_sticky', 0, false, 1));
+ }
+ }
+
+ private function checkCommon()
+ {
+ if (!$this->NoticeData->getNoticeComponent()) {
+ throw new ValidationException(__('Es necesario un componente', false));
+ } elseif (!$this->NoticeData->getNoticeType()) {
+ throw new ValidationException(__('Es necesario un tipo', false));
+ } elseif (!$this->NoticeData->getNoticeDescription()) {
+ throw new ValidationException(__('Es necesaria una descripción', false));
+ } elseif (!$this->NoticeData->getNoticeUserId()
+ && !$this->NoticeData->isNoticeOnlyAdmin()
+ && !$this->NoticeData->isNoticeSticky()
+ ) {
+ throw new ValidationException(__('Es necesario un destinatario', false));
+ }
+ }
+
+ /**
+ * @return NoticeData
+ */
+ public function getItemData()
+ {
+ return $this->NoticeData;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Forms/ProfileForm.class.php b/inc/SP/Forms/ProfileForm.class.php
new file mode 100644
index 00000000..ea1b5491
--- /dev/null
+++ b/inc/SP/Forms/ProfileForm.class.php
@@ -0,0 +1,122 @@
+.
+ */
+
+namespace SP\Forms;
+
+use SP\Core\ActionsInterface;
+use SP\Core\Exceptions\ValidationException;
+use SP\DataModel\ProfileData;
+use SP\Http\Request;
+
+/**
+ * Class ProfileForm
+ *
+ * @package SP\Forms
+ */
+class ProfileForm extends FormBase implements FormInterface
+{
+ /**
+ * @var ProfileData
+ */
+ protected $ProfileData;
+
+ /**
+ * Validar el formulario
+ *
+ * @param $action
+ * @return bool
+ * @throws \SP\Core\Exceptions\ValidationException
+ */
+ public function validate($action)
+ {
+ switch ($action) {
+ case ActionsInterface::ACTION_USR_PROFILES_NEW:
+ case ActionsInterface::ACTION_USR_PROFILES_EDIT:
+ $this->analyzeRequestData();
+ $this->checkCommon();
+ break;
+ }
+
+ return true;
+ }
+
+ /**
+ * Analizar los datos de la petición HTTP
+ *
+ * @return void
+ */
+ protected function analyzeRequestData()
+ {
+ $this->ProfileData = new ProfileData();
+ $this->ProfileData->setUserprofileName(Request::analyze('profile_name'));
+ $this->ProfileData->setUserprofileId(Request::analyze('itemId', 0));
+ $this->ProfileData->setAccAdd(Request::analyze('profile_accadd', 0, false, 1));
+ $this->ProfileData->setAccView(Request::analyze('profile_accview', 0, false, 1));
+ $this->ProfileData->setAccViewPass(Request::analyze('profile_accviewpass', 0, false, 1));
+ $this->ProfileData->setAccViewHistory(Request::analyze('profile_accviewhistory', 0, false, 1));
+ $this->ProfileData->setAccEdit(Request::analyze('profile_accedit', 0, false, 1));
+ $this->ProfileData->setAccEditPass(Request::analyze('profile_acceditpass', 0, false, 1));
+ $this->ProfileData->setAccDelete(Request::analyze('profile_accdel', 0, false, 1));
+ $this->ProfileData->setAccFiles(Request::analyze('profile_accfiles', 0, false, 1));
+ $this->ProfileData->setAccPublicLinks(Request::analyze('profile_accpublinks', 0, false, 1));
+ $this->ProfileData->setAccPrivate(Request::analyze('profile_accprivate', 0, false, 1));
+ $this->ProfileData->setAccPrivateGroup(Request::analyze('profile_accprivategroup', 0, false, 1));
+ $this->ProfileData->setAccPermission(Request::analyze('profile_accpermissions', 0, false, 1));
+ $this->ProfileData->setAccGlobalSearch(Request::analyze('profile_accglobalsearch', 0, false, 1));
+ $this->ProfileData->setConfigGeneral(Request::analyze('profile_config', 0, false, 1));
+ $this->ProfileData->setConfigEncryption(Request::analyze('profile_configmpw', 0, false, 1));
+ $this->ProfileData->setConfigBackup(Request::analyze('profile_configback', 0, false, 1));
+ $this->ProfileData->setConfigImport(Request::analyze('profile_configimport', 0, false, 1));
+ $this->ProfileData->setMgmCategories(Request::analyze('profile_categories', 0, false, 1));
+ $this->ProfileData->setMgmCustomers(Request::analyze('profile_customers', 0, false, 1));
+ $this->ProfileData->setMgmCustomFields(Request::analyze('profile_customfields', 0, false, 1));
+ $this->ProfileData->setMgmUsers(Request::analyze('profile_users', 0, false, 1));
+ $this->ProfileData->setMgmGroups(Request::analyze('profile_groups', 0, false, 1));
+ $this->ProfileData->setMgmProfiles(Request::analyze('profile_profiles', 0, false, 1));
+ $this->ProfileData->setMgmApiTokens(Request::analyze('profile_apitokens', 0, false, 1));
+ $this->ProfileData->setMgmPublicLinks(Request::analyze('profile_publinks', 0, false, 1));
+ $this->ProfileData->setMgmAccounts(Request::analyze('profile_accounts', 0, false, 1));
+ $this->ProfileData->setMgmFiles(Request::analyze('profile_files', 0, false, 1));
+ $this->ProfileData->setMgmTags(Request::analyze('profile_tags', 0, false, 1));
+ $this->ProfileData->setEvl(Request::analyze('profile_eventlog', 0, false, 1));
+ }
+
+ /**
+ * @throws ValidationException
+ */
+ protected function checkCommon()
+ {
+ if (!$this->ProfileData->getUserprofileName()) {
+ throw new ValidationException(__('Es necesario un nombre de perfil', false));
+ }
+ }
+
+ /**
+ * @return ProfileData
+ */
+ public function getItemData()
+ {
+ return $this->ProfileData;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Forms/PublicLinkForm.class.php b/inc/SP/Forms/PublicLinkForm.class.php
new file mode 100644
index 00000000..d2d68c0f
--- /dev/null
+++ b/inc/SP/Forms/PublicLinkForm.class.php
@@ -0,0 +1,70 @@
+.
+ */
+
+namespace SP\Forms;
+
+use SP\DataModel\PublicLinkData;
+
+/**
+ * Class PublicLinkForm
+ *
+ * @package SP\Forms
+ */
+class PublicLinkForm implements FormInterface
+{
+ /**
+ * @var PublicLinkData
+ */
+ protected $PublicLinkData;
+
+ /**
+ * CustomerForm constructor.
+ *
+ * @param PublicLinkData $PublicLinkData
+ */
+ public function __construct(PublicLinkData $PublicLinkData)
+ {
+ $this->PublicLinkData = $PublicLinkData;
+ }
+
+ /**
+ * Validar el formulario
+ *
+ * @param $action
+ * @return bool
+ * @throws \SP\Core\Exceptions\ValidationException
+ */
+ public function validate($action)
+ {
+ return true;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getItemData()
+ {
+ // TODO: Implement getItemData() method.
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Forms/TagForm.class.php b/inc/SP/Forms/TagForm.class.php
new file mode 100644
index 00000000..363d4a75
--- /dev/null
+++ b/inc/SP/Forms/TagForm.class.php
@@ -0,0 +1,93 @@
+.
+ */
+
+namespace SP\Forms;
+
+use SP\Core\ActionsInterface;
+use SP\Core\Exceptions\ValidationException;
+use SP\DataModel\TagData;
+use SP\Http\Request;
+
+/**
+ * Class TagForm
+ *
+ * @package SP\Forms
+ */
+class TagForm extends FormBase implements FormInterface
+{
+ /**
+ * @var TagData
+ */
+ protected $TagData;
+
+ /**
+ * Validar el formulario
+ *
+ * @param $action
+ * @return bool
+ * @throws \SP\Core\Exceptions\ValidationException
+ */
+ public function validate($action)
+ {
+ switch ($action) {
+ case ActionsInterface::ACTION_MGM_TAGS_NEW:
+ case ActionsInterface::ACTION_MGM_TAGS_EDIT:
+ $this->analyzeRequestData();
+ $this->checkCommon();
+ break;
+ }
+
+ return true;
+ }
+
+ /**
+ * Analizar los datos de la petición HTTP
+ *
+ * @return void
+ */
+ protected function analyzeRequestData()
+ {
+ $this->TagData = new TagData();
+ $this->TagData->setTagId($this->itemId);
+ $this->TagData->setTagName(Request::analyze('name'));
+ }
+
+ /**
+ * @throws ValidationException
+ */
+ protected function checkCommon()
+ {
+ if (!$this->TagData->getTagName()) {
+ throw new ValidationException(__('Es necesario un nombre de etiqueta', false));
+ }
+ }
+
+ /**
+ * @return TagData
+ */
+ public function getItemData()
+ {
+ return $this->TagData;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Forms/UserForm.class.php b/inc/SP/Forms/UserForm.class.php
new file mode 100644
index 00000000..1a6632aa
--- /dev/null
+++ b/inc/SP/Forms/UserForm.class.php
@@ -0,0 +1,160 @@
+.
+ */
+
+namespace SP\Forms;
+
+use SP\Core\ActionsInterface;
+use SP\Core\Exceptions\ValidationException;
+use SP\Core\Session;
+use SP\DataModel\UserData;
+use SP\Http\Request;
+use SP\Mgmt\Users\UserUtil;
+use SP\Util\Checks;
+
+/**
+ * Class UserForm
+ *
+ * @package SP\Forms
+ */
+class UserForm extends FormBase implements FormInterface
+{
+ /**
+ * @var UserData
+ */
+ protected $UserData;
+
+ /**
+ * Validar el formulario
+ *
+ * @param $action
+ * @return bool
+ * @throws \SP\Core\Exceptions\ValidationException
+ */
+ public function validate($action)
+ {
+ switch ($action) {
+ case ActionsInterface::ACTION_USR_USERS_NEW:
+ $this->analyzeRequestData();
+ $this->checkCommon();
+ $this->checkPass();
+ break;
+ case ActionsInterface::ACTION_USR_USERS_EDIT:
+ $this->analyzeRequestData();
+ $this->checkCommon();
+ break;
+ case ActionsInterface::ACTION_USR_USERS_EDITPASS:
+ $this->analyzeRequestData();
+ $this->checkPass();
+ break;
+ case ActionsInterface::ACTION_USR_USERS_DELETE:
+ $this->checkDelete();
+ break;
+ }
+
+ return true;
+ }
+
+ /**
+ * @throws ValidationException
+ */
+ protected function checkCommon()
+ {
+ $isLdap = Request::analyze('isLdap', 0);
+
+ if (!$isLdap && !$this->UserData->getUserName()) {
+ throw new ValidationException(__('Es necesario un nombre de usuario', false));
+ } elseif (!$isLdap && !$this->UserData->getUserLogin()) {
+ throw new ValidationException(__('Es necesario un login', false));
+ } elseif (!$this->UserData->getUserProfileId()) {
+ throw new ValidationException(__('Es necesario un perfil', false));
+ } elseif (!$this->UserData->getUserGroupId()) {
+ throw new ValidationException(__('Es necesario un grupo', false));
+ } elseif (!$isLdap && !$this->UserData->getUserEmail()) {
+ throw new ValidationException(__('Es necesario un email', false));
+ } elseif (Checks::demoIsEnabled() && !Session::getUserData()->isUserIsAdminApp() && $this->UserData->getUserLogin() === 'demo') {
+ throw new ValidationException(__('Ey, esto es una DEMO!!', false));
+ }
+ }
+
+ /**
+ * @throws ValidationException
+ */
+ protected function checkPass()
+ {
+ $userPassR = Request::analyzeEncrypted('passR');
+
+ if (Checks::demoIsEnabled() && UserUtil::getUserLoginById($this->UserData->getUserId()) === 'demo') {
+ throw new ValidationException(__('Ey, esto es una DEMO!!', false));
+ } elseif (!$userPassR || !$this->UserData->getUserPass()) {
+ throw new ValidationException(__('La clave no puede estar en blanco', false));
+ } elseif ($this->UserData->getUserPass() !== $userPassR) {
+ throw new ValidationException(__('Las claves no coinciden', false));
+ }
+ }
+
+ /**
+ * @throws ValidationException
+ */
+ protected function checkDelete()
+ {
+ if (Checks::demoIsEnabled() && UserUtil::getUserLoginById($this->UserData->getUserId()) === 'demo') {
+ throw new ValidationException(__('Ey, esto es una DEMO!!', false));
+ } elseif (
+ (!is_array($this->itemId) === Session::getUserData()->getUserId())
+ || (is_array($this->itemId) && in_array(Session::getUserData()->getUserId(), $this->itemId))
+ ) {
+ throw new ValidationException(__('No es posible eliminar, usuario en uso', false));
+ }
+ }
+
+ /**
+ * @return UserData
+ */
+ public function getItemData()
+ {
+ return $this->UserData;
+ }
+
+ /**
+ * Analizar los datos de la petición HTTP
+ *
+ * @return void
+ */
+ protected function analyzeRequestData()
+ {
+ $this->UserData = new UserData();
+ $this->UserData->setUserId($this->itemId);
+ $this->UserData->setUserName(Request::analyze('name'));
+ $this->UserData->setUserLogin(Request::analyze('login'));
+ $this->UserData->setUserEmail(Request::analyze('email'));
+ $this->UserData->setUserNotes(Request::analyze('notes'));
+ $this->UserData->setUserGroupId(Request::analyze('groupid', 0));
+ $this->UserData->setUserProfileId(Request::analyze('profileid', 0));
+ $this->UserData->setUserIsAdminApp(Request::analyze('adminapp', 0, false, 1));
+ $this->UserData->setUserIsAdminAcc(Request::analyze('adminacc', 0, false, 1));
+ $this->UserData->setUserIsDisabled(Request::analyze('disabled', 0, false, 1));
+ $this->UserData->setUserIsChangePass(Request::analyze('changepass', 0, false, 1));
+ $this->UserData->setUserPass(Request::analyzeEncrypted('pass'));
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Html/Assets/FontIcon.class.php b/inc/SP/Html/Assets/FontIcon.class.php
new file mode 100644
index 00000000..8dcbb295
--- /dev/null
+++ b/inc/SP/Html/Assets/FontIcon.class.php
@@ -0,0 +1,57 @@
+.
+ */
+
+namespace SP\Html\Assets;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class FontIcon para crear los iconos de la matriz
+ *
+ * @package SP\Html\Assets
+ */
+class FontIcon extends IconBase
+{
+ /**
+ * @param string $icon
+ * @param string $class
+ * @param string $title
+ */
+ public function __construct($icon, $class = null, $title = null)
+ {
+ $this->setIcon($icon);
+ $this->setClass($class);
+ $this->setTitle($title);
+ }
+
+ /**
+ * Devolver la clase del icono adaptada para un botón
+ *
+ * @return string
+ */
+ public function getClassButton()
+ {
+ return preg_replace('/-text--/', '--', $this->getClass());
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Html/Assets/IconBase.class.php b/inc/SP/Html/Assets/IconBase.class.php
new file mode 100644
index 00000000..c5f42fa0
--- /dev/null
+++ b/inc/SP/Html/Assets/IconBase.class.php
@@ -0,0 +1,111 @@
+.
+ */
+
+namespace SP\Html\Assets;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class DataGridIconBase para crear los iconos de la matriz
+ *
+ * @package SP\Html\DataGrid
+ */
+abstract class IconBase implements IconInterface
+{
+ /**
+ * El nombre del icono o imagen a utilizar
+ *
+ * @var string
+ */
+ protected $_icon = '';
+
+ /**
+ * Título del icono
+ *
+ * @var string
+ */
+ protected $_title = '';
+ /**
+ * Clases CSS del icono
+ *
+ * @var array
+ */
+ protected $_class = array();
+
+ /**
+ * @return string
+ */
+ public function getTitle()
+ {
+ return $this->_title;
+ }
+
+ /**
+ * @param $title
+ * @return $this
+ */
+ public function setTitle($title)
+ {
+ $this->_title = $title;
+
+ return $this;
+ }
+
+ /**
+ * @param $class
+ * @return $this
+ */
+ public function setClass($class)
+ {
+ $this->_class[] = $class;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getClass()
+ {
+ return implode(' ', $this->_class);
+ }
+
+ /**
+ * @return string
+ */
+ public function getIcon()
+ {
+ return $this->_icon;
+ }
+
+ /**
+ * @param $icon
+ * @return $this
+ */
+ public function setIcon($icon)
+ {
+ $this->_icon = $icon;
+ return $this;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Html/Assets/IconInterface.class.php b/inc/SP/Html/Assets/IconInterface.class.php
new file mode 100644
index 00000000..97b5808d
--- /dev/null
+++ b/inc/SP/Html/Assets/IconInterface.class.php
@@ -0,0 +1,65 @@
+.
+ */
+
+namespace SP\Html\Assets;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Interface IconInterface
+ *
+ * @package SP\Html\Assets
+ */
+interface IconInterface
+{
+ /**
+ * @param $title
+ */
+ public function setTitle($title);
+
+ /**
+ * @return string
+ */
+ public function getTitle();
+
+ /**
+ * @param $class
+ */
+ public function setClass($class);
+
+ /**
+ * @return string
+ */
+ public function getClass();
+
+ /**
+ * @return string
+ */
+ public function getIcon();
+
+ /**
+ * @param $icon
+ */
+ public function setIcon($icon);
+}
\ No newline at end of file
diff --git a/inc/SP/Html/Assets/ImageIcon.class.php b/inc/SP/Html/Assets/ImageIcon.class.php
new file mode 100644
index 00000000..d4afd36e
--- /dev/null
+++ b/inc/SP/Html/Assets/ImageIcon.class.php
@@ -0,0 +1,47 @@
+.
+ */
+
+namespace SP\Html\Assets;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class ImageIcon para crear los iconos del tipo imagen
+ *
+ * @package SP\Html\Assets
+ */
+class ImageIcon extends IconBase
+{
+ /**
+ * @param string $icon
+ * @param string $class
+ * @param string $title
+ */
+ public function __construct($icon, $class = null, $title = null)
+ {
+ $this->setIcon($icon);
+ $this->setClass($class);
+ $this->setTitle($title);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Html/DataGrid/DataGrid.class.php b/inc/SP/Html/DataGrid/DataGrid.class.php
new file mode 100644
index 00000000..48b30df4
--- /dev/null
+++ b/inc/SP/Html/DataGrid/DataGrid.class.php
@@ -0,0 +1,37 @@
+.
+ */
+
+namespace SP\Html\DataGrid;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class DataGrid para crear una matriz de datos
+ *
+ * @package SP\Html\DataGrid
+ */
+class DataGrid extends DataGridBase
+{
+
+}
\ No newline at end of file
diff --git a/inc/SP/Html/DataGrid/DataGridAction.class.php b/inc/SP/Html/DataGrid/DataGridAction.class.php
new file mode 100644
index 00000000..3e4f4e47
--- /dev/null
+++ b/inc/SP/Html/DataGrid/DataGridAction.class.php
@@ -0,0 +1,37 @@
+.
+ */
+
+namespace SP\Html\DataGrid;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class DataGridAction para crear una acción para cada elemento de la matriz de datos
+ *
+ * @package SP\Html\DataGrid
+ */
+class DataGridAction extends DataGridActionBase
+{
+
+}
\ No newline at end of file
diff --git a/inc/SP/Html/DataGrid/DataGridActionBase.class.php b/inc/SP/Html/DataGrid/DataGridActionBase.class.php
new file mode 100644
index 00000000..2b87057b
--- /dev/null
+++ b/inc/SP/Html/DataGrid/DataGridActionBase.class.php
@@ -0,0 +1,368 @@
+.
+ */
+
+namespace SP\Html\DataGrid;
+
+use SP\Html\Assets\IconInterface;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class DataGridAction para crear una acción para cada elemento de la matriz de datos
+ *
+ * @package SP\Html\DataGrid
+ */
+abstract class DataGridActionBase implements DataGridActionInterface
+{
+ /**
+ * El objeto reflexivo que determina si se muestra la acción
+ *
+ * @var \ReflectionMethod
+ */
+ protected $_reflectionFilter;
+ /**
+ * El nombre de la acción
+ *
+ * @var string
+ */
+ protected $_name = '';
+ /**
+ * El título de la acción
+ *
+ * @var string
+ */
+ protected $_title = '';
+ /**
+ * El id de la acción
+ *
+ * @var int
+ */
+ protected $_id = 0;
+ /**
+ * La función javascript del evento OnClick
+ *
+ * @var string
+ */
+ protected $_onClickFunction = '';
+ /**
+ * Los argumentos de la función OnClick
+ *
+ * @var array
+ */
+ protected $_onClickArgs = [];
+ /**
+ * El icono de la acción
+ *
+ * @var IconInterface
+ */
+ protected $_icon;
+ /**
+ * Si se debe de omitir para los elementos del listado
+ *
+ * @var bool
+ */
+ protected $_isSkip = false;
+ /**
+ * La columna de origen de datos que condiciona esta acción
+ *
+ * @var string
+ */
+ protected $_filterRowSource;
+ /**
+ * Si es una acción de ayuda
+ *
+ * @var bool
+ */
+ protected $_isHelper;
+ /**
+ * El tipo de acción
+ *
+ * @var int
+ */
+ protected $_type = 0;
+ /**
+ * Atributos de datos adicionales
+ *
+ * @var array
+ */
+ protected $_data = [];
+
+ /**
+ * DataGridActionBase constructor.
+ *
+ * @param int $id EL id de la acción
+ */
+ public function __construct($id = null)
+ {
+ $this->_id = $id;
+ }
+
+ /**
+ * Devolver el método reflexivo que determina si se muestra la acción
+ *
+ * @return \ReflectionMethod
+ */
+ public function getReflectionFilter()
+ {
+ return $this->_reflectionFilter;
+ }
+
+ /**
+ * Establecer el método reflexivo que determina si se muestra la acción
+ *
+ * @param string $class
+ * @param string $method
+ * @return $this
+ */
+ public function setReflectionFilter($class, $method)
+ {
+ $this->_reflectionFilter = new \ReflectionMethod($class, $method);
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * @param $name string
+ * @return $this
+ */
+ public function setName($name)
+ {
+ $this->_name = $name;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getId()
+ {
+ return $this->_id;
+ }
+
+ /**
+ * @param int $id
+ * @return $this
+ */
+ public function setId($id)
+ {
+ $this->_id = $id;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getTitle()
+ {
+ return $this->_title;
+ }
+
+ /**
+ * @param $title string
+ * @return $this
+ */
+ public function setTitle($title)
+ {
+ $this->_title = $title;
+
+ return $this;
+ }
+
+ /**
+ * @param $function string
+ * @return $this
+ */
+ public function setOnClickFunction($function)
+ {
+ $this->_onClickFunction = $function;
+
+ return $this;
+ }
+
+ /**
+ * @param $args string
+ * @return $this
+ */
+ public function setOnClickArgs($args)
+ {
+ $this->_onClickArgs[] = $args;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getOnClick()
+ {
+ $args = [];
+
+ foreach ($this->_onClickArgs as $arg) {
+ $args[] = (!is_numeric($arg) && $arg !== 'this') ? '\'' . $arg . '\'' : $arg;
+ }
+
+ return count($args) > 0 ? $this->_onClickFunction . '(' . implode(',', $args) . ')' : $this->_onClickFunction;
+ }
+
+ /**
+ * @return IconInterface
+ */
+ public function getIcon()
+ {
+ return $this->_icon;
+ }
+
+ /**
+ * @param $icon IconInterface
+ * @return $this
+ */
+ public function setIcon($icon)
+ {
+ $this->_icon = $icon;
+
+ return $this;
+ }
+
+ /**
+ * @param $skip bool
+ * @return $this
+ */
+ public function setSkip($skip)
+ {
+ $this->_isSkip = $skip;
+
+ return $this;
+ }
+
+ /**
+ * @return bool
+ */
+ public function isSkip()
+ {
+ return $this->_isSkip;
+ }
+
+ /**
+ * @param bool $helper
+ * @return $this
+ */
+ public function setIsHelper($helper)
+ {
+ $this->_isHelper = $helper;
+
+ return $this;
+ }
+
+ /**
+ * @return bool
+ */
+ public function isHelper()
+ {
+ return $this->_isHelper;
+ }
+
+ /**
+ * @return string
+ */
+ public function getFilterRowSource()
+ {
+ return $this->_filterRowSource;
+ }
+
+ /**
+ * Filtro para mostrar la acción
+ *
+ * @param $rowSource string
+ * @param mixed $value Valor a filtrar
+ * @return $this
+ */
+ public function setFilterRowSource($rowSource, $value = 1)
+ {
+ $this->_filterRowSource = ['field' => $rowSource, 'value' => $value];
+
+ return $this;
+ }
+
+ /**
+ * @return int El tipo de acción
+ */
+ public function getType()
+ {
+ return $this->_type;
+ }
+
+ /**
+ * @param int $type El tipo de acción definido en DataGridActionType
+ * @return $this
+ */
+ public function setType($type)
+ {
+ $this->_type = $type;
+
+ return $this;
+ }
+
+ /**
+ * @return array
+ */
+ public function getData()
+ {
+ return $this->_data;
+ }
+
+ /**
+ * @param array $data Los datos de los atributos
+ * @return $this
+ */
+ public function setData(array $data)
+ {
+ $this->_data = $data;
+
+ return $this;
+ }
+
+ /**
+ * Añadir nuevo atributo de datos
+ *
+ * @param string $name El nombe del atributo
+ * @param mixed $data Los datos del atributo
+ * @return $this
+ */
+ public function addData($name, $data)
+ {
+ $this->_data[$name] = $data;
+
+ return $this;
+ }
+}
diff --git a/inc/SP/Html/DataGrid/DataGridActionInterface.class.php b/inc/SP/Html/DataGrid/DataGridActionInterface.class.php
new file mode 100644
index 00000000..1e6b0c52
--- /dev/null
+++ b/inc/SP/Html/DataGrid/DataGridActionInterface.class.php
@@ -0,0 +1,171 @@
+.
+ */
+
+namespace SP\Html\DataGrid;
+
+use SP\Html\Assets\IconInterface;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Interface DataGridActionInterface
+ *
+ * @package SP\Html\DataGrid
+ */
+interface DataGridActionInterface
+{
+ /**
+ * @param $name string
+ */
+ public function setName($name);
+
+ /**
+ * @return string
+ */
+ public function getName();
+
+ /**
+ * @param int $id
+ */
+ public function setId($id);
+
+ /**
+ * @return string
+ */
+ public function getId();
+
+ /**
+ * @param $title string
+ */
+ public function setTitle($title);
+
+ /**
+ * @return string
+ */
+ public function getTitle();
+
+ /**
+ * @param $function string
+ */
+ public function setOnClickFunction($function);
+
+ /**
+ * @param $args string
+ */
+ public function setOnClickArgs($args);
+
+ /**
+ * @return string
+ */
+ public function getOnClick();
+
+ /**
+ * @param $icon IconInterface
+ */
+ public function setIcon($icon);
+
+ /**
+ * @return IconInterface
+ */
+ public function getIcon();
+
+ /**
+ * @param $skip bool
+ */
+ public function setSkip($skip);
+
+ /**
+ * @return bool
+ */
+ public function isSkip();
+
+ /**
+ * @param bool $helper
+ */
+ public function setIsHelper($helper);
+
+ /**
+ * @return bool
+ */
+ public function isHelper();
+
+ /**
+ * @param $rowSource string
+ * @param mixed $value Valor a filtrar
+ * @return
+ */
+ public function setFilterRowSource($rowSource, $value = 1);
+
+ /**
+ * @return string
+ */
+ public function getFilterRowSource();
+
+ /**
+ * @param int $type El tipo de acción definido en DataGridActionType
+ */
+ public function setType($type);
+
+ /**
+ * @return int El tipo de acción
+ */
+ public function getType();
+
+ /**
+ * @return array
+ */
+ public function getData();
+
+ /**
+ * Establecer atributos de datos
+ *
+ * @param array $data Los datos de los atributos
+ * @return $this
+ */
+ public function setData(array $data);
+
+ /**
+ * Añadir nuevo atributo de datos
+ *
+ * @param string $name El nombe del atributo
+ * @param mixed $data Los datos del atributo
+ */
+ public function addData($name, $data);
+
+ /**
+ * Devolver el método reflexivo que determina si se muestra la acción
+ *
+ * @return \ReflectionMethod
+ */
+ public function getReflectionFilter();
+
+ /**
+ * Establecer el método reflexivo que determina si se muestra la acción
+ *
+ * @param string $class
+ * @param string $method
+ * @return $this
+ */
+ public function setReflectionFilter($class, $method);
+}
\ No newline at end of file
diff --git a/inc/SP/Html/DataGrid/DataGridActionSearch.class.php b/inc/SP/Html/DataGrid/DataGridActionSearch.class.php
new file mode 100644
index 00000000..c08caca8
--- /dev/null
+++ b/inc/SP/Html/DataGrid/DataGridActionSearch.class.php
@@ -0,0 +1,89 @@
+.
+ */
+
+namespace SP\Html\DataGrid;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class DataGridActionSearch para definir una acción de búsqueda de datos
+ *
+ * @package SP\Html\DataGrid
+ */
+class DataGridActionSearch extends DataGridActionBase
+{
+ /**
+ * @var string
+ */
+ private $_onSubmitFunction = '';
+
+ /**
+ * Los argumentos de la función OnSubmit
+ *
+ * @var array
+ */
+ private $_onSubmitArgs = [];
+
+ /**
+ * DataGridActionSearch constructor.
+ *
+ * @param int $id EL id de la acción
+ */
+ public function __construct($id = null)
+ {
+ parent::__construct($id);
+
+ $this->setSkip(true);
+ }
+
+ /**
+ * @return string
+ */
+ public function getOnSubmit()
+ {
+ $args = [];
+
+ foreach ($this->_onSubmitArgs as $arg) {
+ $args[] = (!is_numeric($arg) && $arg !== 'this') ? '\'' . $arg . '\'' : $arg;
+ }
+
+ return count($args) > 0 ? 'return ' . $this->_onSubmitFunction . '(' . implode(',', $args) . ');' : $this->_onSubmitFunction;
+ }
+
+ /**
+ * @param string $onSubmitFunction
+ */
+ public function setOnSubmitFunction($onSubmitFunction)
+ {
+ $this->_onSubmitFunction = $onSubmitFunction;
+ }
+
+ /**
+ * @param array $args
+ */
+ public function setOnSubmitArgs($args)
+ {
+ $this->_onSubmitArgs[] = $args;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Html/DataGrid/DataGridActionType.class.php b/inc/SP/Html/DataGrid/DataGridActionType.class.php
new file mode 100644
index 00000000..f6de93a4
--- /dev/null
+++ b/inc/SP/Html/DataGrid/DataGridActionType.class.php
@@ -0,0 +1,42 @@
+.
+ */
+
+namespace SP\Html\DataGrid;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class DataGridActionType para definir los tipos de acciones
+ *
+ * @package SP\Html\DataGrid
+ */
+class DataGridActionType
+{
+ const NEW_ITEM = 1;
+ const VIEW_ITEM = 2;
+ const EDIT_ITEM = 3;
+ const DELETE_ITEM = 4;
+ const SEARCH_ITEM = 5;
+ const SELECT_ITEM = 6;
+}
\ No newline at end of file
diff --git a/inc/SP/Html/DataGrid/DataGridBase.class.php b/inc/SP/Html/DataGrid/DataGridBase.class.php
new file mode 100644
index 00000000..ac9b500a
--- /dev/null
+++ b/inc/SP/Html/DataGrid/DataGridBase.class.php
@@ -0,0 +1,420 @@
+.
+ */
+
+namespace SP\Html\DataGrid;
+
+defined('APP_ROOT') || die();
+
+use SP\Core\ActionsInterface;
+use SP\Core\DiFactory;
+use SP\Core\Exceptions\FileNotFoundException;
+use SP\Core\Exceptions\InvalidArgumentException;
+use SP\Core\Exceptions\SPException;
+use SplObjectStorage;
+
+/**
+ * Class DataGridBase para crear una matriz de datos
+ *
+ * @package SP\Html\DataGrid
+ */
+abstract class DataGridBase implements DataGridInterface
+{
+ /**
+ * Tiempo de ejecución
+ *
+ * @var int
+ */
+ protected $_time = 0;
+ /**
+ * El id de la matriz
+ *
+ * @var string
+ */
+ protected $_id = '';
+ /**
+ * La cabecera de la matriz
+ *
+ * @var DataGridHeaderInterface
+ */
+ protected $_header;
+ /**
+ * Los datos de la matriz
+ *
+ * @var DataGridData
+ */
+ protected $_data;
+ /**
+ * El paginador
+ *
+ * @var DataGridPagerBase
+ */
+ protected $_pager;
+ /**
+ * Las acciones asociadas a los elementos de la matriz
+ *
+ * @var DataGridActionInterface[]
+ */
+ protected $_actions;
+ /**
+ * Las acciones asociadas a los elementos de la matriz que se muestran en un menú
+ *
+ * @var DataGridActionInterface[]
+ */
+ protected $_actionsMenu;
+ /**
+ * La acción a realizar al cerrar la matriz
+ *
+ * @var int
+ */
+ protected $_onCloseAction = 0;
+ /**
+ * La plantilla a utilizar para presentar la cabecera
+ *
+ * @var string
+ */
+ protected $_headerTemplate;
+ /**
+ * La plantilla a utilizar para presentar las acciones
+ *
+ * @var string
+ */
+ protected $_actionsTemplate;
+ /**
+ * La plantilla a utilizar para presentar el paginador
+ *
+ * @var string
+ */
+ protected $_pagerTemplate;
+ /**
+ * La plantilla a utilizar para presentar los datos
+ *
+ * @var string
+ */
+ protected $_rowsTemplate;
+
+ /**
+ * @return int
+ */
+ public function getOnCloseAction()
+ {
+ return $this->_onCloseAction;
+ }
+
+ /**
+ * @param ActionsInterface $action
+ * @return $this
+ */
+ public function setOnCloseAction(ActionsInterface $action)
+ {
+ $this->_onCloseAction = $action;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getId()
+ {
+ return $this->_id;
+ }
+
+ /**
+ * @param $id string
+ * @return $this
+ */
+ public function setId($id)
+ {
+ $this->_id = $id;
+
+ return $this;
+ }
+
+ /**
+ * @return DataGridHeader|DataGridHeaderSort
+ */
+ public function getHeader()
+ {
+ return $this->_header;
+ }
+
+ /**
+ * @param DataGridHeaderInterface $header
+ * @return $this
+ */
+ public function setHeader(DataGridHeaderInterface $header)
+ {
+ $this->_header = $header;
+
+ return $this;
+ }
+
+ /**
+ * @return DataGridDataInterface
+ */
+ public function getData()
+ {
+ return $this->_data;
+ }
+
+ /**
+ * @param DataGridDataInterface $data
+ * @return $this
+ */
+ public function setData(DataGridDataInterface $data)
+ {
+ $this->_data = $data;
+
+ return $this;
+ }
+
+ /**
+ * @param DataGridActionInterface $action
+ * @param bool $isMenu Añadir al menu de acciones
+ * @return $this
+ */
+ public function setDataActions(DataGridActionInterface $action, $isMenu = false)
+ {
+ if ($isMenu === false) {
+ if (null === $this->_actions) {
+ $this->_actions = new SplObjectStorage();
+ }
+
+ $this->_actions->attach($action);
+ } else {
+ if (null === $this->_actionsMenu) {
+ $this->_actionsMenu = new SplObjectStorage();
+ }
+
+ $this->_actionsMenu->attach($action);
+ }
+
+ return $this;
+ }
+
+ /**
+ * @return DataGridActionInterface[]
+ */
+ public function getDataActions()
+ {
+ return $this->_actions;
+ }
+
+ /**
+ * @return $this
+ */
+ public function getGrid()
+ {
+ return $this;
+ }
+
+ /**
+ * Establecer la plantilla utilizada para la cabecera
+ *
+ * @param string $template El nombre de la plantilla a utilizar
+ * @param string $base Directorio base para la plantilla
+ * @return $this
+ */
+ public function setDataHeaderTemplate($template, $base = null)
+ {
+ try {
+ $this->_headerTemplate = $this->checkTemplate($template, $base);
+ } catch (FileNotFoundException $e) {
+ debugLog($e->getMessage());
+ }
+
+ return $this;
+ }
+
+ /**
+ * Comprobar si existe una plantilla y devolver la ruta completa
+ *
+ * @param $template
+ * @param null $base
+ * @return string
+ * @throws FileNotFoundException
+ */
+ protected function checkTemplate($template, $base = null)
+ {
+ $template = null === $base ? $template . '.inc' : $base . DIRECTORY_SEPARATOR . $template . '.inc';
+ $file = DiFactory::getTheme()->getViewsPath() . DIRECTORY_SEPARATOR . $template;
+
+ if (!is_readable($file)) {
+ throw new FileNotFoundException(SPException::SP_ERROR, sprintf(__('No es posible obtener la plantilla "%s" : %s'), $template, $file));
+ }
+
+ return $file;
+ }
+
+ /**
+ * Devolver la plantilla utilizada para la cabecera
+ *
+ * @return string
+ */
+ public function getDataHeaderTemplate()
+ {
+ return $this->_headerTemplate;
+ }
+
+ /**
+ * Establecer la plantilla utilizada para las acciones
+ *
+ * @param string $template El nombre de la plantilla a utilizar
+ * @return $this
+ */
+ public function setDataActionsTemplate($template)
+ {
+ try {
+ $this->_actionsTemplate = $this->checkTemplate($template);
+ } catch (FileNotFoundException $e) {
+ debugLog($e->getMessage());
+ }
+
+ return $this;
+ }
+
+ /**
+ * Devolver la plantilla utilizada para las acciones
+ *
+ * @return string
+ */
+ public function getDataActionsTemplate()
+ {
+ return $this->_actionsTemplate;
+ }
+
+ /**
+ * Establecer la plantilla utilizada para el paginador
+ *
+ * @param string $template El nombre de la plantilla a utilizar
+ * @param string $base Directorio base para la plantilla
+ * @return $this
+ */
+ public function setDataPagerTemplate($template, $base = null)
+ {
+ try {
+ $this->_pagerTemplate = $this->checkTemplate($template, $base);
+ } catch (FileNotFoundException $e) {
+ debugLog($e->getMessage());
+ }
+
+ return $this;
+ }
+
+ /**
+ * Devolver la plantilla utilizada para el paginador
+ *
+ * @return string
+ */
+ public function getDataPagerTemplate()
+ {
+ return $this->_pagerTemplate;
+ }
+
+ /**
+ * @param string $template El nombre de la plantilla a utilizar
+ * @param string $base Directorio base para la plantilla
+ * @return mixed
+ */
+ public function setDataRowTemplate($template, $base = null)
+ {
+ try {
+ $this->_rowsTemplate = $this->checkTemplate($template, $base);
+ } catch (FileNotFoundException $e) {
+ debugLog($e->getMessage());
+ }
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getDataRowTemplate()
+ {
+ return $this->_rowsTemplate;
+ }
+
+ /**
+ * Devolver el paginador
+ *
+ * @return DataGridPagerInterface
+ */
+ public function getPager()
+ {
+ return $this->_pager;
+ }
+
+ /**
+ * Establecer el paginador
+ *
+ * @param DataGridPagerInterface $pager
+ * @return $this
+ */
+ public function setPager(DataGridPagerInterface $pager)
+ {
+ $this->_pager = $pager;
+
+ return $this;
+ }
+
+ /**
+ * Actualizar los datos del paginador
+ */
+ public function updatePager()
+ {
+ if ($this->_pager instanceof DataGridPagerInterface) {
+ $this->_pager->setTotalRows($this->_data->getDataCount());
+ }
+ }
+
+ /**
+ * @return int
+ */
+ public function getTime()
+ {
+ return abs($this->_time);
+ }
+
+ /**
+ * @param int $time
+ * @return $this
+ */
+ public function setTime($time)
+ {
+ $this->_time = $time;
+
+ return $this;
+ }
+
+ /**
+ * Devolver las acciones que se muestran en un menu
+ *
+ * @return DataGridActionInterface[]
+ */
+ public function getDataActionsMenu()
+ {
+ return $this->_actionsMenu;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Html/DataGrid/DataGridData.class.php b/inc/SP/Html/DataGrid/DataGridData.class.php
new file mode 100644
index 00000000..3436e9f0
--- /dev/null
+++ b/inc/SP/Html/DataGrid/DataGridData.class.php
@@ -0,0 +1,37 @@
+.
+ */
+
+namespace SP\Html\DataGrid;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class DataGridData para establecer el origen de datos de la matriz
+ *
+ * @package SP\Html\DataGrid
+ */
+class DataGridData extends DataGridDataBase
+{
+
+}
\ No newline at end of file
diff --git a/inc/SP/Html/DataGrid/DataGridDataBase.class.php b/inc/SP/Html/DataGrid/DataGridDataBase.class.php
new file mode 100644
index 00000000..1c651bc3
--- /dev/null
+++ b/inc/SP/Html/DataGrid/DataGridDataBase.class.php
@@ -0,0 +1,143 @@
+.
+ */
+
+namespace SP\Html\DataGrid;
+
+use SP\Html\Assets\IconInterface;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class DataGridDataBase para establecer el origen de datos de la matriz
+ *
+ * @package SP\Html\DataGrid
+ */
+abstract class DataGridDataBase implements DataGridDataInterface
+{
+ /**
+ * Los datos de la matriz
+ *
+ * @var array
+ */
+ private $_data = array();
+ /**
+ * Las columnas a mostrar de los datos obtenidos
+ *
+ * @var array
+ */
+ private $_sources = array();
+ /**
+ * La columna que identifica cada elemento de los datos de la matriz
+ *
+ * @var int
+ */
+ private $_sourceId = 0;
+ /**
+ * Las columnas a mostrar de los datos obtenidos que son representadas con iconos
+ *
+ * @var array
+ */
+ private $_sourcesWithIcon = array();
+ /**
+ * @var int
+ */
+ private $_dataCount = 0;
+
+ /**
+ * @return array
+ */
+ public function getDataRowSourcesWithIcon()
+ {
+ return $this->_sourcesWithIcon;
+ }
+
+ /**
+ * @param $source string
+ */
+ public function addDataRowSource($source)
+ {
+ $this->_sources[] = $source;
+ }
+
+ /**
+ * @param $id string
+ */
+ public function setDataRowSourceId($id)
+ {
+ $this->_sourceId = $id;
+ }
+
+ /**
+ * @return array
+ */
+ public function getDataRowSources()
+ {
+ return $this->_sources;
+ }
+
+ /**
+ * @return string
+ */
+ public function getDataRowSourceId()
+ {
+ return $this->_sourceId;
+ }
+
+ /**
+ * @return array
+ */
+ public function getData()
+ {
+ return $this->_data;
+ }
+
+ /**
+ * @param $data array
+ */
+ public function setData(array $data)
+ {
+ $this->_dataCount = (isset($data['count'])) ? $data['count'] : count($data);
+ $this->_data = $data;
+ }
+
+ /**
+ * @param string $source
+ * @param IconInterface $icon
+ * @param mixed $value Valor para mostrar el icono
+ */
+ public function addDataRowSourceWithIcon($source, IconInterface $icon, $value = 1)
+ {
+ $this->_sourcesWithIcon[] = ['field' => $source, 'icon' => $icon, 'value' => $value];
+ }
+
+ /**
+ * Devolver el número de elementos obtenidos
+ *
+ * @return int
+ */
+ public function getDataCount()
+ {
+ return $this->_dataCount;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Html/DataGrid/DataGridDataInterface.class.php b/inc/SP/Html/DataGrid/DataGridDataInterface.class.php
new file mode 100644
index 00000000..bcd07839
--- /dev/null
+++ b/inc/SP/Html/DataGrid/DataGridDataInterface.class.php
@@ -0,0 +1,103 @@
+.
+ */
+
+namespace SP\Html\DataGrid;
+
+use SP\Html\Assets\IconInterface;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Interface DataGridDataInterface
+ *
+ * @package SP\Html\DataGrid
+ */
+interface DataGridDataInterface
+{
+ /**
+ * Establecer los orígenes de datos de la consulta
+ *
+ * @param $source string
+ */
+ public function addDataRowSource($source);
+
+ /**
+ * Devolver los orígenes de datos de la consulta
+ *
+ * @return array
+ */
+ public function getDataRowSources();
+
+ /**
+ * Establecer el origen de datos utilizado como Id de los elementos
+ *
+ * @param $id string
+ */
+ public function setDataRowSourceId($id);
+
+ /**
+ * Devolver el origen de datos utilizado como Id de los elementos
+ *
+ * @return string
+ */
+ public function getDataRowSourceId();
+
+ /**
+ * Establecer los datos de la consulta
+ *
+ * @param $data array
+ */
+ public function setData(array $data);
+
+ /**
+ * Devolver los datos de la consulta
+ *
+ * @return array
+ */
+ public function getData();
+
+ /**
+ * Establecer los orígenes de datos que se muestran con iconos
+ *
+ * @param $source string
+ * @param $icon IconInterface
+ * @param mixed $value Valor para mostrar el icono
+ * @return
+ */
+ public function addDataRowSourceWithIcon($source, IconInterface $icon, $value = 1);
+
+ /**
+ * Devolver los orígenes de datos que se muestran con iconos
+ *
+ * @return array
+ */
+ public function getDataRowSourcesWithIcon();
+
+ /**
+ * Devolver el número de elementos obtenidos
+ *
+ * @return int
+ */
+ public function getDataCount();
+}
\ No newline at end of file
diff --git a/inc/SP/Html/DataGrid/DataGridHeader.class.php b/inc/SP/Html/DataGrid/DataGridHeader.class.php
new file mode 100644
index 00000000..a2014804
--- /dev/null
+++ b/inc/SP/Html/DataGrid/DataGridHeader.class.php
@@ -0,0 +1,37 @@
+.
+ */
+
+namespace SP\Html\DataGrid;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class DataGridHeader para establecer las cabeceras de la matriz
+ *
+ * @package SP\Html\DataGrid
+ */
+class DataGridHeader extends DataGridHeaderBase
+{
+
+}
\ No newline at end of file
diff --git a/inc/SP/Html/DataGrid/DataGridHeaderBase.class.php b/inc/SP/Html/DataGrid/DataGridHeaderBase.class.php
new file mode 100644
index 00000000..d8addc44
--- /dev/null
+++ b/inc/SP/Html/DataGrid/DataGridHeaderBase.class.php
@@ -0,0 +1,75 @@
+.
+ */
+
+namespace SP\Html\DataGrid;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class DataGridHeaderBase para establecer las cabeceras de la matriz
+ *
+ * @package SP\Html\DataGrid
+ */
+abstract class DataGridHeaderBase implements DataGridHeaderInterface
+{
+ /**
+ * Las cabeceras que identifican las columnas de datos
+ *
+ * @var array
+ */
+ private $_headers = array();
+ /**
+ * El ancho de las columnas
+ *
+ * @var int
+ */
+ private $_width = 0;
+
+ /**
+ * @param $header string
+ */
+ public function addHeader($header)
+ {
+ $this->_headers[] = $header;
+
+ $numHeaders = count($this->_headers);
+ $this->_width = ($numHeaders > 0) ? floor(65 / $numHeaders) : 65;
+ }
+
+ /**
+ * @return int
+ */
+ public function getWidth()
+ {
+ return $this->_width;
+ }
+
+ /**
+ * @return array
+ */
+ public function getHeaders()
+ {
+ return $this->_headers;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Html/DataGrid/DataGridHeaderInterface.class.php b/inc/SP/Html/DataGrid/DataGridHeaderInterface.class.php
new file mode 100644
index 00000000..d65ef0e7
--- /dev/null
+++ b/inc/SP/Html/DataGrid/DataGridHeaderInterface.class.php
@@ -0,0 +1,45 @@
+.
+ */
+
+namespace SP\Html\DataGrid;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Interface DataGridHeader
+ *
+ * @package SP\Html\DataGrid
+ */
+interface DataGridHeaderInterface
+{
+ /**
+ * @param $header string
+ */
+ public function addHeader($header);
+
+ /**
+ * @return array
+ */
+ public function getHeaders();
+}
\ No newline at end of file
diff --git a/inc/SP/Html/DataGrid/DataGridHeaderSort.class.php b/inc/SP/Html/DataGrid/DataGridHeaderSort.class.php
new file mode 100644
index 00000000..35acac71
--- /dev/null
+++ b/inc/SP/Html/DataGrid/DataGridHeaderSort.class.php
@@ -0,0 +1,86 @@
+.
+ */
+
+namespace SP\Html\DataGrid;
+
+defined('APP_ROOT') || die();
+
+use SplObjectStorage;
+
+/**
+ * Class DataGridHeaderActions para añadir cabeceras para ordenar resultados
+ *
+ * @package SP\Html\DataGrid
+ */
+class DataGridHeaderSort extends DataGridHeaderBase
+{
+ /** @var DataGridActionInterface[] */
+ private $_actions;
+
+ /** @var DataGridSortInterface[] */
+ private $_sortFields;
+
+ /**
+ * @return DataGridSortInterface[]
+ */
+ public function getSortFields()
+ {
+ return $this->_sortFields;
+ }
+
+ /**
+ * @return DataGridActionInterface[]
+ */
+ public function getActions()
+ {
+ return $this->_actions;
+ }
+
+ /**
+ * @param DataGridActionInterface[] $action
+ */
+ public function addAction($action)
+ {
+ if (null === $this->_actions) {
+ $this->_actions = new SplObjectStorage();
+ }
+
+ $this->_actions->attach($action);
+ }
+
+ /**
+ * @param DataGridSortInterface $field
+ * @return $this
+ */
+ public function addSortField($field)
+ {
+ if (null === $this->_sortFields) {
+ $this->_sortFields = new SplObjectStorage();
+ }
+
+ $this->_sortFields->attach($field);
+
+ return $this;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Html/DataGrid/DataGridInterface.class.php b/inc/SP/Html/DataGrid/DataGridInterface.class.php
new file mode 100644
index 00000000..1770a894
--- /dev/null
+++ b/inc/SP/Html/DataGrid/DataGridInterface.class.php
@@ -0,0 +1,180 @@
+.
+ */
+
+namespace SP\Html\DataGrid;
+
+defined('APP_ROOT') || die();
+
+use SP\Core\ActionsInterface;
+
+/**
+ * Interface DataGridInterface
+ *
+ * @package SP\Html\DataGrid
+ */
+interface DataGridInterface
+{
+ /**
+ * @param $id string
+ */
+ public function setId($id);
+
+ /**
+ * @return string
+ */
+ public function getId();
+
+ /**
+ * @param DataGridHeaderInterface $header
+ */
+ public function setHeader(DataGridHeaderInterface $header);
+
+ /**
+ * @return DataGridHeaderInterface
+ */
+ public function getHeader();
+
+ /**
+ * @param DataGridDataInterface $data
+ */
+ public function setData(DataGridDataInterface $data);
+
+ /**
+ * @return DataGridDataInterface
+ */
+ public function getData();
+
+ /**
+ * @param DataGridActionInterface $action
+ * @param bool $isMenu Añadir al menu de acciones
+ * @return $this
+ */
+ public function setDataActions(DataGridActionInterface $action, $isMenu = false);
+
+ /**
+ * @return DataGridActionInterface
+ */
+ public function getDataActions();
+
+ /**
+ * @return mixed
+ */
+ public function getGrid();
+
+ /**
+ * Establecer el paginador
+ *
+ * @param DataGridPagerInterface $pager
+ */
+ public function setPager(DataGridPagerInterface $pager);
+
+ /**
+ * Devolver el paginador
+ *
+ * @return DataGridPagerInterface
+ */
+ public function getPager();
+
+ /**
+ * @param ActionsInterface $action
+ */
+ public function setOnCloseAction(ActionsInterface $action);
+
+ /**
+ * Establecer la plantilla utilizada para la cabecera
+ *
+ * @param string $template El nombre de la plantilla a utilizar
+ */
+ public function setDataHeaderTemplate($template);
+
+ /**
+ * Devolver la plantilla utilizada para la cabecera
+ *
+ * @return string
+ */
+ public function getDataHeaderTemplate();
+
+ /**
+ * Establecer la plantilla utilizada para las acciones
+ *
+ * @param string $template El nombre de la plantilla a utilizar
+ */
+ public function setDataActionsTemplate($template);
+
+ /**
+ * Devolver la plantilla utilizada para las acciones
+ *
+ * @return string
+ */
+ public function getDataActionsTemplate();
+
+ /**
+ * Establecer la plantilla utilizada para el paginador
+ *
+ * @param string $template El nombre de la plantilla a utilizar
+ */
+ public function setDataPagerTemplate($template);
+
+ /**
+ * Devolver la plantilla utilizada para el paginador
+ *
+ * @return string
+ */
+ public function getDataPagerTemplate();
+
+ /**
+ * Establcer la plantilla utilizada para los datos de la consulta
+ *
+ * @param string $template El nombre de la plantilla a utilizar
+ */
+ public function setDataRowTemplate($template);
+
+ /**
+ * Devolver la plantilla utilizada para los datos de la consulta
+ *
+ * @return string
+ */
+ public function getDataRowTemplate();
+
+ /**
+ * Devuelve el tiempo total de carga del DataGrid
+ *
+ * @return int
+ */
+ public function getTime();
+
+ /**
+ * Establece el tiempo total de carga del DataGrid
+ *
+ * @param int $time
+ */
+ public function setTime($time);
+
+ /**
+ * Devolver las acciones que se muestran en un menu
+ *
+ * @return DataGridActionInterface[]
+ */
+ public function getDataActionsMenu();
+}
\ No newline at end of file
diff --git a/inc/SP/Html/DataGrid/DataGridPager.class.php b/inc/SP/Html/DataGrid/DataGridPager.class.php
new file mode 100644
index 00000000..28e995e8
--- /dev/null
+++ b/inc/SP/Html/DataGrid/DataGridPager.class.php
@@ -0,0 +1,37 @@
+.
+ */
+
+namespace SP\Html\DataGrid;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class DataGridPager
+ *
+ * @package SP\Html\DataGrid
+ */
+class DataGridPager extends DataGridPagerBase
+{
+
+}
\ No newline at end of file
diff --git a/inc/SP/Html/DataGrid/DataGridPagerBase.class.php b/inc/SP/Html/DataGrid/DataGridPagerBase.class.php
new file mode 100644
index 00000000..ee037853
--- /dev/null
+++ b/inc/SP/Html/DataGrid/DataGridPagerBase.class.php
@@ -0,0 +1,490 @@
+.
+ */
+
+namespace SP\Html\DataGrid;
+
+use SP\Html\Assets\IconInterface;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class DataGridPagerBase para implementar los métodos del paginador
+ *
+ * @package SP\Html\DataGrid
+ */
+abstract class DataGridPagerBase implements DataGridPagerInterface
+{
+ /**
+ * @var int
+ */
+ protected $_sortKey = 0;
+ /**
+ * @var int
+ */
+ protected $_sortOrder = 0;
+ /**
+ * @var int
+ */
+ protected $_limitStart = 0;
+ /**
+ * @var int
+ */
+ protected $_limitCount = 0;
+ /**
+ * @var int
+ */
+ protected $_totalRows = 0;
+ /**
+ * @var bool
+ */
+ protected $_filterOn = false;
+ /**
+ * @var string
+ */
+ protected $_onClickFunction = '';
+ /**
+ * @var array
+ */
+ protected $_onClickArgs = array();
+ /**
+ * @var IconInterface
+ */
+ protected $_iconPrev;
+ /**
+ * @var IconInterface
+ */
+ protected $_iconNext;
+ /**
+ * @var IconInterface
+ */
+ protected $_iconFirst;
+ /**
+ * @var IconInterface
+ */
+ protected $_iconLast;
+ /**
+ * @var DataGridActionSearch
+ */
+ protected $_sourceAction;
+ /**
+ * @var string
+ */
+ protected $_sk;
+
+ /**
+ * @return int
+ */
+ public function getSortOrder()
+ {
+ return $this->_sortOrder;
+ }
+
+ /**
+ * @param int $sortOrder
+ * @return $this
+ */
+ public function setSortOrder($sortOrder)
+ {
+ $this->_sortOrder = $sortOrder;
+
+ return $this;
+ }
+
+ /**
+ * @param string $sk
+ * @return $this
+ */
+ public function setSk($sk)
+ {
+ $this->_sk = $sk;
+
+ return $this;
+ }
+
+ /**
+ * @return IconInterface
+ */
+ public function getIconPrev()
+ {
+ return $this->_iconPrev;
+ }
+
+ /**
+ * @param IconInterface $iconPrev
+ * @return $this
+ */
+ public function setIconPrev(IconInterface $iconPrev)
+ {
+ $this->_iconPrev = $iconPrev;
+
+ return $this;
+ }
+
+ /**
+ * @return IconInterface
+ */
+ public function getIconNext()
+ {
+ return $this->_iconNext;
+ }
+
+ /**
+ * @param IconInterface $iconNext
+ * @return $this
+ */
+ public function setIconNext(IconInterface $iconNext)
+ {
+ $this->_iconNext = $iconNext;
+
+ return $this;
+ }
+
+ /**
+ * @return IconInterface
+ */
+ public function getIconFirst()
+ {
+ return $this->_iconFirst;
+ }
+
+ /**
+ * @param IconInterface $iconFirst
+ * @return $this
+ */
+ public function setIconFirst(IconInterface $iconFirst)
+ {
+ $this->_iconFirst = $iconFirst;
+
+ return $this;
+ }
+
+ /**
+ * @return IconInterface
+ */
+ public function getIconLast()
+ {
+ return $this->_iconLast;
+ }
+
+ /**
+ * @param IconInterface $iconLast
+ * @return $this
+ */
+ public function setIconLast(IconInterface $iconLast)
+ {
+ $this->_iconLast = $iconLast;
+
+ return $this;
+ }
+
+ /**
+ * Devolver el campo de la búsqueda
+ *
+ * @return int
+ */
+ public function getSortKey()
+ {
+ return $this->_sortKey;
+ }
+
+ /**
+ * Establecer el campo de la búsqueda
+ *
+ * @param int $sortKey
+ * @return $this
+ */
+ public function setSortKey($sortKey)
+ {
+ $this->_sortKey = $sortKey;
+
+ return $this;
+ }
+
+ /**
+ * Devolver el registro de inicio de la página
+ *
+ * @return int
+ */
+ public function getLimitStart()
+ {
+ return $this->_limitStart;
+ }
+
+ /**
+ * Establecer el registro de inicio de la página
+ *
+ * @param int $limitStart
+ * @return $this
+ */
+ public function setLimitStart($limitStart)
+ {
+ $this->_limitStart = $limitStart;
+
+ return $this;
+ }
+
+ /**
+ * Devolver el número de registros en una página
+ *
+ * @return mixed
+ */
+ public function getLimitCount()
+ {
+ return $this->_limitCount;
+ }
+
+ /**
+ * Establecer el número de registros en una página
+ *
+ * @param int $limitCount
+ * @return $this
+ */
+ public function setLimitCount($limitCount)
+ {
+ $this->_limitCount = $limitCount;
+
+ return $this;
+ }
+
+ /**
+ * Devolver el número de página inicial
+ *
+ * @return int
+ */
+ public function getFirstPage()
+ {
+ return ceil(($this->_limitStart + 1) / $this->_limitCount);
+ }
+
+ /**
+ * Devolver el número de página final
+ *
+ * @return int
+ */
+ public function getLastPage()
+ {
+ return ceil($this->_totalRows / $this->_limitCount);
+ }
+
+ /**
+ * Devolver el número total de registros obtenidos
+ *
+ * @return int
+ */
+ public function getTotalRows()
+ {
+ return $this->_totalRows;
+ }
+
+ /**
+ * Establecer el número total de registros obtenidos
+ *
+ * @param int $totalRows
+ * @return $this
+ */
+ public function setTotalRows($totalRows)
+ {
+ $this->_totalRows = $totalRows;
+
+ return $this;
+ }
+
+ /**
+ * Devolver si está activado el filtro
+ *
+ * @return bool
+ */
+ public function getFilterOn()
+ {
+ return $this->_filterOn;
+ }
+
+ /**
+ * Establecer si está activado el filtro
+ *
+ * @param bool $filterOn
+ * @return $this
+ */
+ public function setFilterOn($filterOn)
+ {
+ $this->_filterOn = $filterOn;
+
+ return $this;
+ }
+
+ /**
+ * Establecer la función javascript para paginar
+ *
+ * @param string $function
+ * @return $this
+ */
+ public function setOnClickFunction($function)
+ {
+ $this->_onClickFunction = $function;
+
+ return $this;
+ }
+
+ /**
+ * Devolver la función javascript para paginar
+ *
+ * @return string
+ */
+ public function getOnClick()
+ {
+ $args = $this->parseArgs();
+
+ return count($args) > 0 ? $this->_onClickFunction . '(' . implode(',', $args) . ')' : $this->_onClickFunction;
+ }
+
+ /**
+ * @return array
+ */
+ protected function parseArgs()
+ {
+ $args = array();
+
+ foreach ($this->_onClickArgs as $arg) {
+ $args[] = (!is_numeric($arg) && $arg !== 'this') ? '\'' . $arg . '\'' : $arg;
+ }
+
+ return $args;
+ }
+
+ /**
+ * Establecer los argumentos de la función OnClick
+ *
+ * @param mixed $args
+ * @return $this
+ */
+ public function setOnClickArgs($args)
+ {
+ $this->_onClickArgs[] = $args;
+
+ return $this;
+ }
+
+ /**
+ * Devolver la funcion para ir a la primera página
+ *
+ * @return string
+ */
+ public function getOnClickFirst()
+ {
+ $args = $this->parseArgs();
+ $args[] = $this->getFirst();
+
+ return $this->_onClickFunction . '(' . implode(',', $args) . ')';
+ }
+
+ /**
+ * @return int
+ */
+ public function getFirst()
+ {
+ return 0;
+ }
+
+ /**
+ * Devolver la funcion para ir a la última página
+ *
+ * @return string
+ */
+ public function getOnClickLast()
+ {
+ $args = $this->parseArgs();
+ $args[] = $this->getLast();
+
+ return $this->_onClickFunction . '(' . implode(',', $args) . ')';
+ }
+
+ /**
+ * @return float|int
+ */
+ public function getLast()
+ {
+ return (($this->_totalRows % $this->_limitCount) == 0) ? $this->_totalRows - $this->_limitCount : floor($this->_totalRows / $this->_limitCount) * $this->_limitCount;
+ }
+
+ /**
+ * Devolver la funcion para ir a la siguiente página
+ *
+ * @return string
+ */
+ public function getOnClickNext()
+ {
+ $args = $this->parseArgs();
+ $args[] = $this->getNext();
+
+ return $this->_onClickFunction . '(' . implode(',', $args) . ')';
+ }
+
+ /**
+ * @return int
+ */
+ public function getNext()
+ {
+ return ($this->_limitStart + $this->_limitCount);
+ }
+
+ /**
+ * Devolver la funcion para ir a la página anterior
+ *
+ * @return string
+ */
+ public function getOnClickPrev()
+ {
+ $args = $this->parseArgs();
+ $args[] = $this->getPrev();
+
+ return $this->_onClickFunction . '(' . implode(',', $args) . ')';
+ }
+
+ /**
+ * @return int
+ */
+ public function getPrev()
+ {
+ return ($this->_limitStart - $this->_limitCount);
+ }
+
+ /**
+ * @return DataGridActionSearch
+ */
+ public function getSourceAction()
+ {
+ return $this->_sourceAction;
+ }
+
+ /**
+ * @param DataGridActionSearch $sourceAction
+ * @return $this
+ */
+ public function setSourceAction($sourceAction)
+ {
+ $this->_sourceAction = $sourceAction;
+
+ return $this;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Html/DataGrid/DataGridPagerInterface.class.php b/inc/SP/Html/DataGrid/DataGridPagerInterface.class.php
new file mode 100644
index 00000000..df447300
--- /dev/null
+++ b/inc/SP/Html/DataGrid/DataGridPagerInterface.class.php
@@ -0,0 +1,236 @@
+.
+ */
+
+namespace SP\Html\DataGrid;
+
+use SP\Html\Assets\IconInterface;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Interface DataGridPagerInterface para la definición del paginador
+ *
+ * @package SP\Html\DataGrid
+ */
+interface DataGridPagerInterface
+{
+ /**
+ * Establecer el campo de la búsqueda
+ *
+ * @param int $sortKey
+ */
+ public function setSortKey($sortKey);
+
+ /**
+ * Devolver el campo de la búsqueda
+ *
+ * @return int
+ */
+ public function getSortKey();
+
+ /**
+ * Establecer el registro de inicio de la página
+ *
+ * @param int $limitStart
+ */
+ public function setLimitStart($limitStart);
+
+ /**
+ * Devolver el registro de inicio de la página
+ *
+ * @return int
+ */
+ public function getLimitStart();
+
+ /**
+ * Establecer el número de registros en una página
+ *
+ * @param int $limitCount
+ */
+ public function setLimitCount($limitCount);
+
+ /**
+ * Devolver el número de registros en una página
+ *
+ * @return mixed
+ */
+ public function getLimitCount();
+
+ /**
+ * Establecer el número total de registros obtenidos
+ *
+ * @param int $totalRows
+ */
+ public function setTotalRows($totalRows);
+
+ /**
+ * Devolver el número total de registros obtenidos
+ *
+ * @return int
+ */
+ public function getTotalRows();
+
+ /**
+ * Establecer si está activado el filtro
+ *
+ * @param bool $filterOn
+ */
+ public function setFilterOn($filterOn);
+
+ /**
+ * Devolver si está activado el filtro
+ *
+ * @return bool
+ */
+ public function getFilterOn();
+
+ /**
+ * Establecer la función javascript para paginar
+ *
+ * @param string $function
+ */
+ public function setOnClickFunction($function);
+
+ /**
+ * Devolver la función javascript para paginar
+ *
+ * @return string
+ */
+ public function getOnClick();
+
+ /**
+ * Establecer los argumentos de la función OnClick
+ *
+ * @param string $args
+ */
+ public function setOnClickArgs($args);
+
+ /**
+ * Devolver la funcion para ir a la primera página
+ *
+ * @return string
+ */
+ public function getOnClickFirst();
+
+ /**
+ * Devolver la funcion para ir a la última página
+ *
+ * @return string
+ */
+ public function getOnClickLast();
+
+ /**
+ * Devolver la funcion para ir a la siguiente página
+ *
+ * @return string
+ */
+ public function getOnClickNext();
+
+ /**
+ * Devolver la funcion para ir a la página anterior
+ *
+ * @return string
+ */
+ public function getOnClickPrev();
+
+ /**
+ * @return IconInterface
+ */
+ public function getIconPrev();
+
+ /**
+ * @param IconInterface $iconPrev
+ */
+ public function setIconPrev(IconInterface $iconPrev);
+
+ /**
+ * @return IconInterface
+ */
+ public function getIconNext();
+
+ /**
+ * @param IconInterface $iconNext
+ */
+ public function setIconNext(IconInterface $iconNext);
+
+ /**
+ * @return IconInterface
+ */
+ public function getIconFirst();
+
+ /**
+ * @param IconInterface $iconFirst
+ */
+ public function setIconFirst(IconInterface $iconFirst);
+
+ /**
+ * @return IconInterface
+ */
+ public function getIconLast();
+
+ /**
+ * @param IconInterface $iconLast
+ */
+ public function setIconLast(IconInterface $iconLast);
+
+ /**
+ * @param DataGridActionSearch $sourceAction
+ */
+ public function setSourceAction($sourceAction);
+
+ /**
+ * @return int
+ */
+ public function getSortOrder();
+
+ /**
+ * @param int $sortOrder
+ */
+ public function setSortOrder($sortOrder);
+
+ /**
+ * @return int
+ */
+ public function getLast();
+
+ /**
+ * @return int
+ */
+ public function getNext();
+
+ /**
+ * @return int
+ */
+ public function getPrev();
+
+ /**
+ * @return int
+ */
+ public function getFirst();
+
+ /**
+ * @return DataGridActionSearch
+ */
+ public function getSourceAction();
+}
\ No newline at end of file
diff --git a/inc/SP/Html/DataGrid/DataGridSort.class.php b/inc/SP/Html/DataGrid/DataGridSort.class.php
new file mode 100644
index 00000000..e60a486f
--- /dev/null
+++ b/inc/SP/Html/DataGrid/DataGridSort.class.php
@@ -0,0 +1,164 @@
+.
+ */
+
+namespace SP\Html\DataGrid;
+
+use SP\Html\Assets\IconInterface;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class DataGridSort para la definición de campos de ordenación
+ *
+ * @package SP\Html\DataGrid
+ */
+class DataGridSort implements DataGridSortInterface
+{
+ /** @var int */
+ private $_sortKey = 0;
+ /** @var string */
+ private $_title = '';
+ /** @var string */
+ private $_name = '';
+ /** @var array */
+ private $_class = array();
+ /** @var IconInterface */
+ private $_iconUp;
+ /** @var IconInterface */
+ private $_iconDown;
+
+ /**
+ * @return int
+ */
+ public function getSortKey()
+ {
+ return $this->_sortKey;
+ }
+
+ /**
+ * @param $key int
+ * @return $this
+ */
+ public function setSortKey($key)
+ {
+ $this->_sortKey = $key;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getTitle()
+ {
+ return $this->_title;
+ }
+
+ /**
+ * @param $title string
+ * @return $this
+ */
+ public function setTitle($title)
+ {
+ $this->_title = $title;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->_name;
+ }
+
+ /**
+ * @param $name string
+ * @return $this
+ */
+ public function setName($name)
+ {
+ $this->_name = $name;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getClass()
+ {
+ return implode(' ', $this->_class);
+ }
+
+ /**
+ * @param $class string
+ * @return $this
+ */
+ public function setClass($class)
+ {
+ $this->_class[] = $class;
+
+ return $this;
+ }
+
+ /**
+ * @return IconInterface
+ */
+ public function getIconUp()
+ {
+ return $this->_iconUp;
+ }
+
+ /**
+ * @param IconInterface $icon
+ * @return $this
+ */
+ public function setIconUp(IconInterface $icon)
+ {
+ $this->_iconUp = $icon;
+
+ return $this;
+ }
+
+ /**
+ * @return IconInterface
+ */
+ public function getIconDown()
+ {
+ return $this->_iconDown;
+ }
+
+ /**
+ * @param IconInterface $icon
+ * @return $this
+ */
+ public function setIconDown(IconInterface $icon)
+ {
+ $this->_iconDown = $icon;
+
+ return $this;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Html/DataGrid/DataGridSortInterface.class.php b/inc/SP/Html/DataGrid/DataGridSortInterface.class.php
new file mode 100644
index 00000000..850a073d
--- /dev/null
+++ b/inc/SP/Html/DataGrid/DataGridSortInterface.class.php
@@ -0,0 +1,98 @@
+.
+ */
+
+namespace SP\Html\DataGrid;
+
+use SP\Html\Assets\IconInterface;
+
+defined('APP_ROOT') || die();
+
+
+/**
+ * Interface DataGridSortInterface para la definicíon de campos de ordenación
+ *
+ * @package SP\Html\DataGrid
+ */
+interface DataGridSortInterface
+{
+ /**
+ * @return int
+ */
+ public function getSortKey();
+
+ /**
+ * @param $key int
+ */
+ public function setSortKey($key);
+
+ /**
+ * @return string
+ */
+ public function getTitle();
+
+ /**
+ * @param $title string
+ */
+ public function setTitle($title);
+
+ /**
+ * @return string
+ */
+ public function getName();
+
+ /**
+ * @param $name string
+ */
+ public function setName($name);
+
+ /**
+ * @return string
+ */
+ public function getClass();
+
+ /**
+ * @param $class string
+ */
+ public function setClass($class);
+
+ /**
+ * @return IconInterface
+ */
+ public function getIconUp();
+
+ /**
+ * @param IconInterface $icon
+ */
+ public function setIconUp(IconInterface $icon);
+
+ /**
+ * @return IconInterface
+ */
+ public function getIconDown();
+
+ /**
+ * @param IconInterface $icon
+ */
+ public function setIconDown(IconInterface $icon);
+}
\ No newline at end of file
diff --git a/inc/SP/Html/DataGrid/DataGridTab.class.php b/inc/SP/Html/DataGrid/DataGridTab.class.php
new file mode 100644
index 00000000..33e2a874
--- /dev/null
+++ b/inc/SP/Html/DataGrid/DataGridTab.class.php
@@ -0,0 +1,59 @@
+.
+ */
+
+namespace SP\Html\DataGrid;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class DataGridTab para crear una matriz de datos a usar en pestañas
+ *
+ * @package SP\Html\DataGrid
+ */
+class DataGridTab extends DataGridBase
+{
+ /**
+ * Título de la pestaña
+ *
+ * @var string
+ */
+ private $_title = '';
+
+ /**
+ * @param $title string
+ */
+ public function setTitle($title)
+ {
+ $this->_title = $title;
+ }
+
+ /**
+ * @return string
+ */
+ public function getTitle()
+ {
+ return $this->_title;
+ }
+}
+
diff --git a/inc/Html.class.php b/inc/SP/Html/Html.class.php
similarity index 92%
rename from inc/Html.class.php
rename to inc/SP/Html/Html.class.php
index b3c9984b..cc3fae93 100644
--- a/inc/Html.class.php
+++ b/inc/SP/Html/Html.class.php
@@ -2,9 +2,9 @@
/**
* sysPass
*
- * @author nuxsmin
- * @link http://syspass.org
- * @copyright 2012-2015 Rubén Domínguez nuxsmin@syspass.org
+ * @author nuxsmin
+ * @link http://syspass.org
+ * @copyright 2012-2017, Rubén Domínguez nuxsmin@$syspass.org
*
* This file is part of sysPass.
*
@@ -19,13 +19,12 @@
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with sysPass. If not, see .
- *
+ * along with sysPass. If not, see .
*/
-namespace SP;
+namespace SP\Html;
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+defined('APP_ROOT') || die();
/**
* Esta clase es la encargada de mostrar el HTML
@@ -40,12 +39,12 @@ class Html
*/
public static function sanitize(&$data)
{
- if (!$data) {
- return false;
+ if (empty($data)) {
+ return $data;
}
if (is_array($data)) {
- array_walk_recursive($data, '\SP\Html::sanitize');
+ array_walk_recursive($data, '\SP\Html\Html::sanitize');
} else {
$data = strip_tags($data);
@@ -77,6 +76,7 @@ class Html
$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;
}
@@ -95,7 +95,6 @@ class Html
if (strlen($text) > $limit) {
$text = trim(mb_substr($text, 0, $limit)) . $ellipsis;
}
-
return $text;
}
diff --git a/inc/Minify.class.php b/inc/SP/Html/Minify.class.php
similarity index 55%
rename from inc/Minify.class.php
rename to inc/SP/Html/Minify.class.php
index 13569a9a..78beed85 100644
--- a/inc/Minify.class.php
+++ b/inc/SP/Html/Minify.class.php
@@ -2,9 +2,9 @@
/**
* sysPass
*
- * @author nuxsmin
- * @link http://syspass.org
- * @copyright 2012-2015 Rubén Domínguez nuxsmin@syspass.org
+ * @author nuxsmin
+ * @link http://syspass.org
+ * @copyright 2012-2017, Rubén Domínguez nuxsmin@$syspass.org
*
* This file is part of sysPass.
*
@@ -19,15 +19,17 @@
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with sysPass. If not, see .
- *
+ * along with sysPass. If not, see .
*/
-namespace SP;
+namespace SP\Html;
use CssMin;
+use SP\Core\Exceptions\SPException;
+use SP\Http\Request;
+use SP\Util\Util;
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+defined('APP_ROOT') || die();
/**
* Class Minify para la gestión de archivos JS y CSS
@@ -47,39 +49,45 @@ class Minify
*
* @var array
*/
- private $_files = array();
+ private $files = array();
/**
* Tipos de archivos a procesar
*
* @var int
*/
- private $_type = 0;
+ private $type = 0;
/**
* Base relativa de búsqueda de los archivos
*
* @var string
*/
- private $_base = '';
+ private $base = '';
/**
- * @param string $base
- * @param bool $checkPath
+ * @param string $path
+ * @param bool $checkPath
+ * @return $this
*/
- public function setBase($base, $checkPath = false)
+ public function setBase($path, $checkPath = false)
{
- $this->_base = $checkPath === true ? Request::getSecureAppPath($base) : $base;
- }
+ $this->base = $checkPath === true ? Request::getSecureAppPath($path) : $path;
+ return $this;
+ }
/**
* Devolver al navegador archivos CSS y JS comprimidos
* Método que devuelve un recurso CSS o JS comprimido. Si coincide el ETAG se
* devuelve el código HTTP/304
*
- * @param bool $disableMinify Deshabilitar minimizar
+ * @param bool $disableMinify Deshabilitar minimizar
*/
public function getMinified($disableMinify = false)
{
+ if (count($this->files) === 0) {
+ return;
+ }
+
$offset = 3600 * 24 * 30;
$nextCheck = time() + $offset;
$expire = 'Expires: ' . gmdate('D, d M Y H:i:s \G\M\T', $nextCheck);
@@ -94,15 +102,19 @@ class Minify
header($expire);
// Devolver código 304 si la versión es la misma y no se solicita refrescar
- if ($etag == $etagMatch && !($cacheControl == 'no-cache' || $pragma == 'no-cache')) {
- header($_SERVER["SERVER_PROTOCOL"] . " 304 Not Modified");
- exit;
+ if ($etag === $etagMatch
+ && !($cacheControl === 'no-cache'
+ || $cacheControl === 'max-age=0'
+ || $pragma === 'no-cache')
+ ) {
+ header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified');
+ exit();
}
- if ($this->_type === self::FILETYPE_JS) {
- header("Content-type: application/x-javascript; charset: UTF-8");
- } elseif ($this->_type === self::FILETYPE_CSS) {
- header("Content-type: text/css; charset: UTF-8");
+ if ($this->type === self::FILETYPE_JS) {
+ header('Content-type: application/x-javascript; charset: UTF-8');
+ } elseif ($this->type === self::FILETYPE_CSS) {
+ header('Content-type: text/css; charset: UTF-8');
}
flush();
@@ -111,37 +123,31 @@ class Minify
ob_start();
}
- foreach ($this->_files as $file) {
+ foreach ($this->files as $file) {
$filePath = $file['base'] . DIRECTORY_SEPARATOR . $file['name'];
// Obtener el recurso desde una URL
- if (preg_match('#^https?://.*#', $file['name'])) {
- $data = Util::getDataFromUrl($file['name']);
-
- if ($data !== false) {
+ if ($file['type'] === 'url') {
+ try {
+ $data = Util::getDataFromUrl($file['name']);
echo '/* URL: ' . $file['name'] . ' */' . PHP_EOL;
echo $data;
- }
-
- continue;
- }
-
- if (!file_exists($filePath)) {
- echo '/* ERROR: FILE NOT FOUND: ' . $file['name'] . ' */' . PHP_EOL;
- error_log('File not found: ' . $filePath);
- continue;
- }
-
- if ($file['min'] === true && $disableMinify === false) {
- echo '/* MINIFIED FILE: ' . $file['name'] . ' */' . PHP_EOL;
- if ($this->_type === self::FILETYPE_JS) {
- echo $this->jsCompress(file_get_contents($filePath));
- } elseif ($this->_type === self::FILETYPE_CSS) {
- echo CssMin::minify(file_get_contents($filePath));
+ } catch (SPException $e) {
+ error_log($e->getMessage());
}
} else {
- echo '/* FILE: ' . $file['name'] . ' */' . PHP_EOL;
- echo file_get_contents($filePath);
+
+ if ($file['min'] === true && $disableMinify === false) {
+ echo '/* MINIFIED FILE: ' . $file['name'] . ' */' . PHP_EOL;
+ if ($this->type === self::FILETYPE_JS) {
+ echo $this->jsCompress(file_get_contents($filePath));
+ } elseif ($this->type === self::FILETYPE_CSS) {
+ echo CssMin::minify(file_get_contents($filePath));
+ }
+ } else {
+ echo '/* FILE: ' . $file['name'] . ' */' . PHP_EOL;
+ echo file_get_contents($filePath);
+ }
}
echo PHP_EOL;
@@ -159,13 +165,8 @@ class Minify
{
$md5Sum = '';
- foreach ($this->_files as $file) {
- if (preg_match('#^https?://#', $file['name'])) {
- continue;
- }
-
- $filePath = $file['base'] . DIRECTORY_SEPARATOR . $file['name'];
- $md5Sum .= md5_file($filePath);
+ foreach ($this->files as $file) {
+ $md5Sum .= $file['md5'];
}
return md5($md5Sum);
@@ -204,36 +205,37 @@ class Minify
}
/**
+ * Añadir un archivo
+ *
* @param string $file
- * @param bool $minify Si es necesario reducir
+ * @param bool $minify Si es necesario reducir
+ * @return $this
*/
- public function addFile($file, $minify = false)
+ public function addFile($file, $minify = true)
{
if (strrpos($file, ',')) {
$files = explode(',', $file);
- foreach ($files as $file){
- $this->_files[] = array(
- 'base' => $this->_base,
- 'name' => Request::getSecureAppFile($file, $this->_base),
- 'min' => $this->needsMinify($file)
- );
+ foreach ($files as $filename) {
+ $this->addFile($filename, $minify);
}
} else {
- $this->_files[] = array(
- 'base' => $this->_base,
- 'name' => Request::getSecureAppFile($file, $this->_base),
- 'min' => $this->needsMinify($file)
- );
- }
- }
+ $filePath = $this->base . DIRECTORY_SEPARATOR . $file;
- /**
- * @param int $type
- */
- public function setType($type)
- {
- $this->_type = $type;
+ if (file_exists($filePath)) {
+ $this->files[] = array(
+ 'type' => 'file',
+ 'base' => $this->base,
+ 'name' => Request::getSecureAppFile($file, $this->base),
+ 'min' => $minify === true && $this->needsMinify($file),
+ 'md5' => md5_file($filePath)
+ );
+ } else {
+ debugLog('File not found: ' . $filePath);
+ }
+ }
+
+ return $this;
}
/**
@@ -246,4 +248,36 @@ class Minify
{
return !preg_match('/\.(min|pack)\./', $file);
}
+
+ /**
+ * Añadir un recurso desde URL
+ *
+ * @param $url
+ * @return $this
+ */
+ public function addUrl($url)
+ {
+ $this->files[] = array(
+ 'type' => 'url',
+ 'base' => $this->base,
+ 'name' => $url,
+ 'min' => false,
+ 'md5' => ''
+ );
+
+ return $this;
+ }
+
+ /**
+ * Establecer el tipo de recurso a procesar
+ *
+ * @param int $type
+ * @return $this
+ */
+ public function setType($type)
+ {
+ $this->type = (int)$type;
+
+ return $this;
+ }
}
\ No newline at end of file
diff --git a/inc/SP/Http/JsonResponse.class.php b/inc/SP/Http/JsonResponse.class.php
new file mode 100644
index 00000000..e4835404
--- /dev/null
+++ b/inc/SP/Http/JsonResponse.class.php
@@ -0,0 +1,265 @@
+.
+ */
+
+namespace SP\Http;
+
+/**
+ * Class Json para definir la estructura de una respuesta en formato JSON
+ *
+ * @package SP\Http
+ */
+class JsonResponse implements \JsonSerializable
+{
+ /**
+ * @var int
+ */
+ protected $status = 1;
+ /**
+ * @var string
+ */
+ protected $description = '';
+ /**
+ * @var string
+ */
+ protected $action = '';
+ /**
+ * @var array
+ */
+ protected $data = [];
+ /**
+ * @var array
+ */
+ protected $messages = [];
+ /**
+ * @var string
+ */
+ protected $container = '';
+ /**
+ * @var string
+ */
+ protected $csrf = '';
+
+ /**
+ * @return int
+ */
+ public function getStatus()
+ {
+ return $this->status;
+ }
+
+ /**
+ * @param int $status
+ * @return JsonResponse
+ */
+ public function setStatus($status)
+ {
+ $this->status = (int)$status;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getDescription()
+ {
+ return $this->description;
+ }
+
+ /**
+ * @param string $description
+ * @return JsonResponse
+ */
+ public function setDescription($description)
+ {
+ $this->description = __($description);
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getAction()
+ {
+ return $this->action;
+ }
+
+ /**
+ * @param string $action
+ * @return JsonResponse
+ */
+ public function setAction($action)
+ {
+ $this->action = $action;
+
+ return $this;
+ }
+
+ /**
+ * @return array
+ */
+ public function getData()
+ {
+ return $this->data;
+ }
+
+ /**
+ * @param array $data
+ * @return JsonResponse
+ */
+ public function setData(array $data)
+ {
+ $this->data = $data;
+
+ return $this;
+ }
+
+ /**
+ * @return array
+ */
+ public function getMessages()
+ {
+ return $this->messages;
+ }
+
+ /**
+ * @param array $messages
+ * @return JsonResponse
+ */
+ public function setMessages(array $messages)
+ {
+ $this->messages = $messages;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getContainer()
+ {
+ return $this->container;
+ }
+
+ /**
+ * @param string $container
+ * @return JsonResponse
+ */
+ public function setContainer($container)
+ {
+ $this->container = $container;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getCsrf()
+ {
+ return $this->csrf;
+ }
+
+ /**
+ * @param string $csrf
+ * @return JsonResponse
+ */
+ public function setCsrf($csrf)
+ {
+ $this->csrf = $csrf;
+
+ return $this;
+ }
+
+ /**
+ * @param $message
+ * @return JsonResponse
+ */
+ public function addMessage($message)
+ {
+ $this->messages[] = __($message);
+ return $this;
+ }
+
+ /**
+ * @param $param
+ * @return $this
+ */
+ public function addParam($param)
+ {
+ if (is_numeric($param)) {
+ $param = (int)$param;
+ }
+
+ $this->data[] = $param;
+
+ return $this;
+ }
+
+ /**
+ * Specify data which should be serialized to JSON
+ * @link http://php.net/manual/en/jsonserializable.jsonserialize.php
+ * @return mixed data which can be serialized by json_encode,
+ * which is a value of any type other than a resource.
+ * @since 5.4.0
+ */
+ public function jsonSerialize()
+ {
+ return $this->getJsonArray();
+ }
+
+ /**
+ * Devolver un array con las propiedades del objeto
+ *
+ * @return array
+ */
+ public function getJsonArray()
+ {
+ $out = [];
+
+ foreach ($this as $key => $value) {
+ $out[$key] = $value;
+ }
+
+ return $out;
+ }
+
+ /**
+ * Establecer los valores por defecto
+ *
+ * @return JsonResponse
+ */
+ public function clear()
+ {
+ $this->status = 0;
+ $this->action = '';
+ $this->data = [];
+ $this->messages = [];
+ $this->container = '';
+ $this->csrf = '';
+
+ return $this;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Http/Message.class.php b/inc/SP/Http/Message.class.php
new file mode 100644
index 00000000..022dcfc9
--- /dev/null
+++ b/inc/SP/Http/Message.class.php
@@ -0,0 +1,98 @@
+.
+ */
+
+namespace SP\Http;
+
+/**
+ * Class Message
+ *
+ * @package SP\Http
+ */
+class Message
+{
+ const TYPE_OK = 0;
+ const TYPE_ERROR = 1;
+ const TYPE_WARNING = 2;
+
+ /**
+ * @var int
+ */
+ protected $type = 0;
+ /**
+ * @var string
+ */
+ protected $description;
+ /**
+ * @var string
+ */
+ protected $hint;
+
+ /**
+ * @return int
+ */
+ public function getType()
+ {
+ return $this->type;
+ }
+
+ /**
+ * @param int $type
+ */
+ public function setType($type)
+ {
+ $this->type = $type;
+ }
+
+ /**
+ * @return string
+ */
+ public function getDescription()
+ {
+ return $this->description;
+ }
+
+ /**
+ * @param string $description
+ */
+ public function setDescription($description)
+ {
+ $this->description = $description;
+ }
+
+ /**
+ * @return string
+ */
+ public function getHint()
+ {
+ return $this->hint;
+ }
+
+ /**
+ * @param string $hint
+ */
+ public function setHint($hint)
+ {
+ $this->hint = $hint;
+ }
+}
\ No newline at end of file
diff --git a/inc/Request.class.php b/inc/SP/Http/Request.class.php
similarity index 59%
rename from inc/Request.class.php
rename to inc/SP/Http/Request.class.php
index 6cc8fbba..2c499351 100644
--- a/inc/Request.class.php
+++ b/inc/SP/Http/Request.class.php
@@ -3,8 +3,8 @@
* sysPass
*
* @author nuxsmin
- * @link http://${PROJECT_LINK}
- * @copyright 2012-2015 Rubén Domínguez nuxsmin@${PROJECT_LINK}
+ * @link http://syspass.org
+ * @copyright 2012-2017, Rubén Domínguez nuxsmin@$syspass.org
*
* This file is part of sysPass.
*
@@ -19,11 +19,14 @@
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with sysPass. If not, see .
- *
+ * along with sysPass. If not, see .
*/
-namespace SP;
+namespace SP\Http;
+
+use SP\Core\CryptPKI;
+use SP\Core\Init;
+use SP\Html\Html;
/**
* Clase Request para la gestión de peticiones HTTP
@@ -36,14 +39,16 @@ class Request
* Comprobar el método utilizado para enviar un formulario.
*
* @param string $method con el método utilizado.
+ * @throws \SP\Core\Exceptions\FileNotFoundException
+ * @throws \SP\Core\Exceptions\SPException
*/
public static function checkReferer($method)
{
- if ($_SERVER['REQUEST_METHOD'] !== strtoupper($method)
- || !isset($_SERVER['HTTP_REFERER'])
+ if (!isset($_SERVER['HTTP_REFERER'])
+ || $_SERVER['REQUEST_METHOD'] !== strtoupper($method)
|| !preg_match('#' . Init::$WEBROOT . '/.*$#', $_SERVER['HTTP_REFERER'])
) {
- Init::initError(_('No es posible acceder directamente a este archivo'));
+ Init::initError(__('No es posible acceder directamente a este archivo'));
exit();
}
}
@@ -67,6 +72,7 @@ class Request
$CryptPKI = new CryptPKI();
$clearData = $CryptPKI->decryptRSA(base64_decode($encryptedData));
} catch (\Exception $e) {
+ debugLog($e->getMessage());
return $encryptedData;
}
@@ -77,37 +83,24 @@ 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
+ * @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) {
+ if (!isset($_REQUEST[$param])) {
+ return $force ? !$force : $default;
+ } elseif ($check) {
return true;
} elseif ($force) {
return $force;
}
- return self::parse($value, $default, $sanitize);
+ return self::parse($_REQUEST[$param], $default, $sanitize);
}
/**
@@ -118,25 +111,23 @@ class Request
* @param $sanitize bool limpiar una cadena de caracteres
* @return mixed
*/
- private static function parse($value, $default, $sanitize)
+ public static function parse(&$value, $default, $sanitize)
{
if (is_array($value)) {
foreach ($value as &$data) {
- self::parse($data, $default, $sanitize);
+ $data = self::parse($data, $default, $sanitize);
}
return $value;
- }
-
- if ((is_numeric($value) || is_numeric($default))
+ } elseif ((is_numeric($value) || is_numeric($default))
&& !is_string($default)
) {
- return intval($value);
+ return (int)$value;
+ } elseif (is_string($value)) {
+ return ($sanitize === true) ? Html::sanitize($value) : (string)$value;
}
- if (is_string($value)) {
- return ($sanitize === true) ? trim(Html::sanitize($value)) : trim((string)$value);
- }
+ return $value;
}
/**
@@ -153,43 +144,73 @@ class Request
* Devolver las cabeceras enviadas desde el cliente.
*
* @param string $header nombre de la cabecera a devolver
- * @return array
+ * @return array|string
*/
public static function getRequestHeaders($header = '')
{
- if (!function_exists('\apache_request_headers')) {
- foreach ($_SERVER as $key => $value) {
- if (strpos($key, 'HTTP_') !== false) {
- $parts = explode('_', substr($key, 5));
+ $headers = self::getApacheHeaders();
- foreach ($parts as &$string) {
- $string = ucwords(strtolower($string));
- }
-
- $key = implode('-', $parts);
-
- $headers[$key] = $value;
- }
- }
- } else {
- $headers = apache_request_headers();
- }
-
- if ($header !== '') {
- return array_key_exists($header, $headers) ? $headers[$header] : false;
+ if (!empty($header)) {
+ return array_key_exists($header, $headers) ? trim($headers[$header]) : '';
}
return $headers;
}
/**
- * Devolver el protocolo utilizado
+ * Función que sustituye a apache_request_headers
*
+ * @return array
+ */
+ public static function getApacheHeaders()
+ {
+ if (function_exists('\apache_request_headers')) {
+ return apache_request_headers();
+ }
+
+ $headers = [];
+
+ foreach ($_SERVER as $key => $value) {
+ if (strpos($key, 'HTTP_') === 0) {
+ $key = str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($key, 5)))));
+ $headers[$key] = $value;
+ } else {
+ $headers[$key] = $value;
+ }
+ }
+
+ return $headers;
+ }
+
+ /**
+ * Comprobar si existen parámetros pasados por POST para enviarlos por GET
+ */
+ public static function importUrlParamsToGet()
+ {
+ $params = [];
+
+ foreach ($_REQUEST as $param => $value) {
+ Html::sanitize($param);
+ Html::sanitize($value);
+
+ if (strpos($param, 'g_') !== false) {
+ $params[] = substr($param, 2) . '=' . $value;
+ }
+ }
+
+ return count($params) > 0 ? '?' . implode('&', $params) : '';
+ }
+
+ /**
+ * Devuelve un nombre de archivo seguro
+ *
+ * @param $file
+ * @param null $base
* @return string
*/
- public static function getProtocol()
+ public static function getSecureAppFile($file, $base = null)
{
- return Util::httpsEnabled() ? 'https://' : 'http://';
+ return basename(self::getSecureAppPath($file, $base));
}
/**
@@ -213,16 +234,4 @@ class Request
return $realPath;
}
}
-
- /**
- * Devuelve un nombre de archivo seguro
- *
- * @param $file
- * @param null $base
- * @return string
- */
- public static function getSecureAppFile($file, $base = null)
- {
- return basename(self::getSecureAppPath($file, $base));
- }
}
\ No newline at end of file
diff --git a/inc/Response.class.php b/inc/SP/Http/Response.class.php
similarity index 56%
rename from inc/Response.class.php
rename to inc/SP/Http/Response.class.php
index 05e0088a..bfee2f91 100644
--- a/inc/Response.class.php
+++ b/inc/SP/Http/Response.class.php
@@ -2,9 +2,9 @@
/**
* sysPass
*
- * @author nuxsmin
- * @link http://syspass.org
- * @copyright 2012-2015 Rubén Domínguez nuxsmin@syspass.org
+ * @author nuxsmin
+ * @link http://syspass.org
+ * @copyright 2012-2017, Rubén Domínguez nuxsmin@$syspass.org
*
* This file is part of sysPass.
*
@@ -19,13 +19,14 @@
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with sysPass. If not, see .
- *
+ * along with sysPass. If not, see .
*/
-namespace SP;
+namespace SP\Http;
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+use SP\Util\Json;
+
+defined('APP_ROOT') || die();
/**
* Esta clase es encargada de ejecutar acciones comunes para las funciones
@@ -39,22 +40,25 @@ class Response
* @param int $status devuelve el estado
* @return bool
*/
- public static function printXML($description, $status = 1)
+ public static function printXml($description, $status = 1)
{
if (!is_string($description)) {
return false;
}
- $arrStrFrom = array("&", "<", ">", "\"", "\'");
- $arrStrTo = array("&", "<", ">", """, "'");
+ $arrStrFrom = ['&', '<', '>', '"', "\'"];
+ $arrStrTo = ['&', '<', '>', '"', '''];
$cleanDescription = str_replace($arrStrFrom, $arrStrTo, $description);
- $xml = "\n";
- $xml .= "\n" . $status . " \n " . $cleanDescription . " \n ";
+ $xml[] = '';
+ $xml[] = '';
+ $xml[] = '' . $status . ' ';
+ $xml[] = '' . $cleanDescription . ' ';
+ $xml[] = ' ';
- header("Content-Type: application/xml");
- exit($xml);
+ header('Content-Type: application/xml');
+ exit(implode(PHP_EOL, $xml));
}
/**
@@ -65,34 +69,33 @@ class Response
* @param string $action con la accion a realizar
* @return bool
*/
- public static function printJSON($data, $status = 1, $action = '')
+ 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(
+ $json = [
'status' => $status,
- 'description' => str_replace($arrStrFrom, $arrStrTo, $data),
+ 'description' => $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));
+ exit(Json::getJson($json));
+ }
+
+ /**
+ * Devuelve una respuesta de error en formato HTML.
+ *
+ * @param $data
+ */
+ public static function printHtmlError($data)
+ {
+ $error = '' . htmlentities($data) . '';
+
+ exit($error);
}
}
\ No newline at end of file
diff --git a/inc/SP/Http/XMLRPCResponseParse.class.php b/inc/SP/Http/XMLRPCResponseParse.class.php
new file mode 100644
index 00000000..f22d0547
--- /dev/null
+++ b/inc/SP/Http/XMLRPCResponseParse.class.php
@@ -0,0 +1,272 @@
+.
+ */
+
+namespace SP\Http;
+
+use DOMDocument;
+use DOMElement;
+use DOMNode;
+use DOMNodeList;
+use InvalidArgumentException;
+
+/**
+ * Class XMLRPCResponseParse para el parseo de respuestas HTTP en formato XML-RPC
+ *
+ * @package SP\Http
+ */
+abstract class XMLRPCResponseParse
+{
+ /**
+ * @var DOMElement
+ */
+ private $root;
+ /**
+ * @var string
+ */
+ private $xml;
+ /**
+ * @var array
+ */
+ private $data = [];
+
+ /**
+ * Constructor
+ *
+ * @param string $xml El documento XML
+ * @throws \InvalidArgumentException
+ */
+ public function __construct($xml)
+ {
+ try {
+ $this->xml = $xml;
+
+ $dom = new DOMDocument();
+ $dom->loadXML($xml);
+
+ if ($dom->getElementsByTagName('methodResponse')->length === 0) {
+ throw new \DOMException(__('Respuesta XML-RPC inválida', false));
+ }
+
+ $this->root = $dom->documentElement;
+ } catch (\DOMException $e) {
+ throw new InvalidArgumentException($e->getMessage(), $e->getCode());
+ }
+ }
+
+ /**
+ * Obtener los datos del error
+ *
+ * @return array
+ */
+ public function getError()
+ {
+ return $this->parseNodes($this->root->getElementsByTagName('fault'));
+ }
+
+ /**
+ * Obtener los nodos recursivamente y almacenar los datos en el atributo
+ * de la clase _data
+ *
+ * @param DOMNodeList $nodes
+ * @return array
+ */
+ private function parseNodes(DOMNodeList $nodes)
+ {
+ if ($nodes->length > 0) {
+ foreach ($nodes as $node) {
+ if ($node instanceof DOMElement) {
+ /**
+ * @var $node DOMElement
+ */
+ switch ($node->nodeName) {
+ case 'struct':
+ return $this->parseStruct($node);
+ case 'array':
+ return $this->parseArray($node);
+ case 'fault':
+ return $this->parseFault($node);
+ case 'value':
+ $this->data = $this->parseValues($node);
+ break;
+ default:
+ $this->parseNodes($node->childNodes);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Procesar nodos del tipo struct
+ *
+ * @param DOMElement $xmlStruct
+ * @return array
+ */
+ private function parseStruct(DOMElement $xmlStruct)
+ {
+ $dataStruct = [];
+ $nStruct = 0;
+
+ foreach ($xmlStruct->childNodes as $struct) {
+ if ($struct instanceof DOMElement) {
+ foreach ($struct->childNodes as $member) {
+ /**
+ * @var $member DOMNode
+ */
+ switch ($member->nodeName) {
+ case 'name':
+ $name = $member->nodeValue;
+ break;
+ case 'value':
+ $dataStruct[$name] = $this->parseNodeType($member->firstChild);
+ break;
+ }
+ }
+ $nStruct++;
+ }
+ }
+
+ return $dataStruct;
+ }
+
+ /**
+ * @param DOMNode $node
+ * @return bool|int|string|null
+ */
+ private function parseNodeType(DOMNode $node)
+ {
+ switch ($node->nodeName) {
+ case 'int' :
+ case 'i4' :
+ return (int)$node->nodeValue;
+ case 'string' :
+ return $node->nodeValue;
+ case 'dateTime.iso8601' :
+ return date('d M y H:i:s', strtotime($node->nodeValue));
+ case 'boolean' :
+ return (bool)$node->nodeValue;
+ default :
+ return null;
+ }
+ }
+
+ /**
+ * Procesar nodos del tipo array
+ *
+ * @param DOMElement $xmlArray
+ * @return array
+ */
+ private function parseArray(DOMElement $xmlArray)
+ {
+ $arrayData = [];
+
+ foreach ($xmlArray->childNodes as $array) {
+ foreach ($array->childNodes as $data) {
+ /**
+ * @var $data DOMElement
+ */
+ if ($data instanceof DOMElement && $data->nodeName === 'value') {
+ $values = $this->parseValues($data);
+
+ if (is_array($values)) {
+ $arrayData[] = $values;
+ }
+ }
+ }
+ }
+
+ return $arrayData;
+ }
+
+ /**
+ * Procesar nodos del tipo value
+ *
+ * @param DOMElement $xmlValues
+ * @return array
+ */
+ private function parseValues(DOMElement $xmlValues)
+ {
+ $valuesData = [];
+
+ foreach ($xmlValues->childNodes as $xmlValue) {
+ if ($xmlValue instanceof DOMElement) {
+ $val = $this->parseNodeType($xmlValue);
+
+ if (null === $val) {
+ return $this->parseNodes($xmlValues->childNodes);
+ } else {
+ $valuesData[] = $val;
+ }
+ }
+ }
+
+ return $valuesData;
+ }
+
+ /**
+ * Procesar nodos del tipo fault
+ *
+ * @param DOMElement $xmlFault
+ * @return array
+ */
+ private function parseFault(DOMElement $xmlFault)
+ {
+ $faultData = [];
+
+ foreach ($xmlFault->childNodes as $fault) {
+ /**
+ * @var $fault DOMElement
+ */
+ if ($fault instanceof DOMElement && $fault->nodeName === 'value') {
+ $values = $this->parseValues($fault);
+
+ if (is_array($values)) {
+ return $values;
+ }
+ }
+ }
+
+ return $faultData;
+ }
+
+ /**
+ * Obtener los datos de la respuesta
+ */
+ public function parseParams()
+ {
+ $this->parseNodes($this->root->getElementsByTagName('params'));
+
+ return $this->data;
+ }
+
+ /**
+ * Devolver el documento XML
+ *
+ * @return string
+ */
+ public function getXml()
+ {
+ return $this->xml;
+ }
+}
\ No newline at end of file
diff --git a/inc/CsvImport.class.php b/inc/SP/Import/CsvImport.class.php
similarity index 65%
rename from inc/CsvImport.class.php
rename to inc/SP/Import/CsvImport.class.php
index 1c6af834..fa626951 100644
--- a/inc/CsvImport.class.php
+++ b/inc/SP/Import/CsvImport.class.php
@@ -2,9 +2,9 @@
/**
* sysPass
*
- * @author nuxsmin
- * @link http://syspass.org
- * @copyright 2012-2015 Rubén Domínguez nuxsmin@syspass.org
+ * @author nuxsmin
+ * @link http://syspass.org
+ * @copyright 2012-2017, Rubén Domínguez nuxsmin@$syspass.org
*
* This file is part of sysPass.
*
@@ -19,13 +19,14 @@
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with sysPass. If not, see .
- *
+ * along with sysPass. If not, see .
*/
-namespace SP;
+namespace SP\Import;
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+use SP\Core\Exceptions\SPException;
+
+defined('APP_ROOT') || die();
/**
* Class CsvImport para importar cuentas desde archivos CSV
@@ -37,15 +38,16 @@ class CsvImport extends CsvImportBase
/**
* Iniciar la importación desde XML.
*
- * @throws SPException
- * @return bool
+ * @throws \SP\Core\Exceptions\SPException
*/
public function doImport()
{
- try{
- $this->_file->readFileToArray();
+ try {
+ $this->LogMessage->addDescription(sprintf(__('Formato detectado: %s'), 'CSV'));
+
+ $this->file->readFileToArray();
$this->processAccounts();
- } catch (SPException $e){
+ } catch (SPException $e) {
throw $e;
}
}
diff --git a/inc/SP/Import/CsvImportBase.class.php b/inc/SP/Import/CsvImportBase.class.php
new file mode 100644
index 00000000..c95c33d3
--- /dev/null
+++ b/inc/SP/Import/CsvImportBase.class.php
@@ -0,0 +1,117 @@
+.
+ */
+
+namespace SP\Import;
+
+use SP\Core\Exceptions\SPException;
+use SP\DataModel\AccountExtData;
+use SP\DataModel\CategoryData;
+use SP\DataModel\CustomerData;
+
+defined('APP_ROOT') || die();
+
+/**
+ * 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 = [];
+
+ /**
+ * @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;
+
+ foreach ($this->file->getFileContent() as $data) {
+ $line++;
+ $fields = str_getcsv($data, $this->ImportParams->getCsvDelimiter(), '"');
+ $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)', false), $numfields),
+ sprintf(__('Compruebe el formato del archivo CSV en línea %s', false), $line)
+ );
+ }
+
+ // Asignar los valores del array a variables
+ list($accountName, $customerName, $categoryName, $url, $login, $password, $notes) = $fields;
+
+ // Obtener los ids de cliente y categoría
+ $CustomerData = new CustomerData(null, $customerName);
+ $this->addCustomer($CustomerData);
+ $CategoryData = new CategoryData(null, $categoryName);
+ $this->addCategory($CategoryData);
+
+ // Crear la nueva cuenta
+ $AccountData = new AccountExtData();
+ $AccountData->setAccountName($accountName);
+ $AccountData->setAccountLogin($login);
+ $AccountData->setAccountCustomerId($CustomerData->getCustomerId());
+ $AccountData->setAccountCategoryId($CategoryData->getCategoryId());
+ $AccountData->setAccountNotes($notes);
+ $AccountData->setAccountUrl($url);
+ $AccountData->setAccountPass($password);
+
+ try {
+ $this->addAccount($AccountData);
+ } catch (SPException $e) {
+ $this->LogMessage->addDetails(__('Error importando cuenta', false), $accountName);
+ $this->LogMessage->addDetails(__('Error procesando línea', false), $line);
+ $this->LogMessage->addDetails(__('Error', false), $e->getMessage());
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/inc/FileImport.class.php b/inc/SP/Import/FileImport.class.php
similarity index 57%
rename from inc/FileImport.class.php
rename to inc/SP/Import/FileImport.class.php
index ec8fe0a4..36632326 100644
--- a/inc/FileImport.class.php
+++ b/inc/SP/Import/FileImport.class.php
@@ -4,7 +4,7 @@
*
* @author nuxsmin
* @link http://syspass.org
- * @copyright 2012-2015 Rubén Domínguez nuxsmin@syspass.org
+ * @copyright 2012-2017, Rubén Domínguez nuxsmin@$syspass.org
*
* This file is part of sysPass.
*
@@ -19,13 +19,15 @@
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with sysPass. If not, see .
- *
+ * along with sysPass. If not, see .
*/
-namespace SP;
+namespace SP\Import;
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+use SP\Core\Exceptions\SPException;
+use SP\Util\Util;
+
+defined('APP_ROOT') || die();
/**
* Clase FileImport encargada el leer archivos para su importación
@@ -39,49 +41,27 @@ class FileImport
*
* @var string|array
*/
- protected $_fileContent = null;
+ protected $fileContent;
/**
* Archivo temporal utilizado en la subida HTML
*
* @var string
*/
- protected $_tmpFile = '';
+ 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;
- }
-
+ protected $fileType = '';
/**
* FileImport constructor.
+ *
+ * @param array $fileData Datos del archivo a importar
+ * @throws SPException
*/
public function __construct(&$fileData)
{
@@ -97,75 +77,113 @@ class FileImport
*
* @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'));
+ throw new SPException(
+ SPException::SP_CRITICAL,
+ __('Archivo no subido correctamente', false),
+ __('Verifique los permisos del usuario del servidor web', false));
}
if ($fileData['name']) {
// Comprobamos la extensión del archivo
$fileExtension = strtoupper(pathinfo($fileData['name'], PATHINFO_EXTENSION));
- if ($fileExtension != 'CSV' && $fileExtension != 'XML') {
+ if ($fileExtension !== 'CSV' && $fileExtension !== 'XML') {
throw new SPException(
SPException::SP_CRITICAL,
- _('Tipo de archivo no soportado'),
- _('Compruebe la extensión del archivo')
+ __('Tipo de archivo no soportado', false),
+ __('Compruebe la extensión del archivo', false)
);
}
}
// Variables con información del archivo
- $this->_tmpFile = $fileData['tmp_name'];
- $this->_fileType = $fileData['type'];
+ $this->tmpFile = $fileData['tmp_name'];
+ $this->fileType = strtolower($fileData['type']);
- if (!file_exists($this->_tmpFile) || !is_readable($this->_tmpFile)) {
+ 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')
+ __('Error interno al leer el archivo', false),
+ __('Compruebe la configuración de PHP para subir archivos', false)
);
}
}
+ /**
+ * @return array
+ */
+ public function getFileContent()
+ {
+ return $this->fileContent;
+ }
+
+ /**
+ * @return string
+ */
+ public function getTmpFile()
+ {
+ return $this->tmpFile;
+ }
+
+ /**
+ * @return string
+ */
+ public function getFileType()
+ {
+ return $this->fileType;
+ }
+
/**
* Leer los datos de un archivo subido a un array
*
- * @throws SPException
+ * @throws \SP\Core\Exceptions\SPException
*/
public function readFileToArray()
{
- $this->_fileContent = file($this->_tmpFile, FILE_SKIP_EMPTY_LINES);
+ $this->autodetectEOL();
- if ($this->_fileContent === false){
+ $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')
+ __('Error interno al leer el archivo', false),
+ __('Compruebe los permisos del directorio temporal', false)
);
}
}
+ /**
+ * Activar la autodetección de fin de línea
+ */
+ protected function autodetectEOL()
+ {
+ ini_set('auto_detect_line_endings', true);
+ }
+
/**
* Leer los datos de un archivo subido a una cadena
*
- * @throws SPException
+ * @throws \SP\Core\Exceptions\SPException
*/
public function readFileToString()
{
- $this->_fileContent = file_get_contents($this->_tmpFile);
+ $this->autodetectEOL();
- if ($this->_fileContent === false){
+ $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')
+ __('Error interno al leer el archivo', false),
+ __('Compruebe los permisos del directorio temporal', false)
);
}
}
diff --git a/inc/SP/Import/Import.class.php b/inc/SP/Import/Import.class.php
new file mode 100644
index 00000000..c5476cc9
--- /dev/null
+++ b/inc/SP/Import/Import.class.php
@@ -0,0 +1,119 @@
+.
+ */
+
+namespace SP\Import;
+
+use SP\Core\Exceptions\SPException;
+use SP\Core\Messages\LogMessage;
+use SP\Log\Email;
+use SP\Log\Log;
+use SP\Storage\DB;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Esta clase es la encargada de importar cuentas.
+ */
+class Import
+{
+ /**
+ * @var ImportParams Parámetros de importación
+ */
+ protected $ImportParams;
+
+ /**
+ * Import constructor.
+ *
+ * @param ImportParams $ImportParams
+ */
+ public function __construct(ImportParams $ImportParams)
+ {
+ $this->ImportParams = $ImportParams;
+ }
+
+ /**
+ * Iniciar la importación de cuentas.
+ *
+ * @param array $fileData Los datos del archivo
+ * @return LogMessage
+ * @throws SPException
+ */
+ public function doImport(&$fileData)
+ {
+ $LogMessage = new LogMessage();
+ $LogMessage->setAction(__('Importar Cuentas', false));
+ $Log = new Log($LogMessage);
+
+ try {
+ $file = new FileImport($fileData);
+
+ switch ($file->getFileType()) {
+ case 'text/csv':
+ case 'application/vnd.ms-excel':
+ $Import = new CsvImport($file, $this->ImportParams, $LogMessage);
+ break;
+ case 'text/xml':
+ $Import = new XmlImport($file, $this->ImportParams, $LogMessage);
+ break;
+ default:
+ throw new SPException(
+ SPException::SP_WARNING,
+ sprintf(__('Tipo mime no soportado ("%s")'), $file->getFileType()),
+ __('Compruebe el formato del archivo', false)
+ );
+ }
+
+ if (!DB::beginTransaction()) {
+ throw new SPException(SPException::SP_ERROR, __('No es posible iniciar una transacción', false));
+ }
+
+ $Import->doImport();
+
+ if (!DB::endTransaction()) {
+ throw new SPException(SPException::SP_ERROR, __('No es posible finalizar una transacción', false));
+ }
+
+ $LogMessage->addDetails(__('Cuentas importadas'), $Import->getCounter());
+ } catch (SPException $e) {
+ DB::rollbackTransaction();
+
+ $LogMessage->addDescription($e->getMessage());
+ $LogMessage->addDetails(__('Ayuda', false), $e->getHint());
+ $Log->setLogLevel(Log::ERROR);
+ $Log->writeLog();
+
+ throw $e;
+ }
+
+ $Log->writeLog(true);
+
+ Email::sendEmail($LogMessage);
+
+ $LogMessage->addDescription(__('Importación finalizada', false));
+ $LogMessage->addDescription(__('Revise el registro de eventos para más detalles', false));
+
+ return $LogMessage;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Import/ImportBase.class.php b/inc/SP/Import/ImportBase.class.php
new file mode 100644
index 00000000..29c6aad0
--- /dev/null
+++ b/inc/SP/Import/ImportBase.class.php
@@ -0,0 +1,215 @@
+.
+ */
+
+namespace SP\Import;
+
+use SP\Account\Account;
+use SP\Core\Crypt;
+use SP\Core\Exceptions\SPException;
+use SP\Core\Messages\LogMessage;
+use SP\DataModel\AccountExtData;
+use SP\DataModel\CategoryData;
+use SP\DataModel\CustomerData;
+use SP\DataModel\TagData;
+use SP\Log\Log;
+use SP\Mgmt\Categories\Category;
+use SP\Mgmt\Customers\Customer;
+use SP\Mgmt\Tags\Tag;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class ImportBase abstracta para manejo de archivos de importación
+ *
+ * @package SP
+ */
+abstract class ImportBase implements ImportInterface
+{
+ /**
+ * @var ImportParams
+ */
+ protected $ImportParams;
+ /**
+ * @var FileImport
+ */
+ protected $file;
+ /**
+ * @var LogMessage
+ */
+ protected $LogMessage;
+ /**
+ * @var int
+ */
+ protected $counter = 0;
+
+ /**
+ * ImportBase constructor.
+ *
+ * @param FileImport $File
+ * @param ImportParams $ImportParams
+ * @param LogMessage $LogMessage
+ */
+ public function __construct(FileImport $File = null, ImportParams $ImportParams = null, LogMessage $LogMessage = null)
+ {
+ $this->file = $File;
+ $this->ImportParams = $ImportParams;
+ $this->LogMessage = null !== $LogMessage ? $LogMessage : new LogMessage(__('Importar Cuentas', false));
+ }
+
+ /**
+ * @return LogMessage
+ */
+ public function getLogMessage()
+ {
+ return $this->LogMessage;
+ }
+
+ /**
+ * @param LogMessage $LogMessage
+ */
+ public function setLogMessage($LogMessage)
+ {
+ $this->LogMessage = $LogMessage;
+ }
+
+ /**
+ * @return int
+ */
+ public function getCounter()
+ {
+ return $this->counter;
+ }
+
+ /**
+ * @param ImportParams $ImportParams
+ */
+ public function setImportParams($ImportParams)
+ {
+ $this->ImportParams = $ImportParams;
+ }
+
+ /**
+ * Añadir una cuenta desde un archivo importado.
+ *
+ * @param \SP\DataModel\AccountExtData $AccountData
+ * @return bool
+ */
+ protected function addAccount(AccountExtData $AccountData)
+ {
+ if ($AccountData->getAccountCategoryId() === 0) {
+ Log::writeNewLog(__FUNCTION__, __('Id de categoría no definido. No es posible importar cuenta.', false), Log::INFO);
+ return false;
+ } elseif ($AccountData->getAccountCustomerId() === 0) {
+ Log::writeNewLog(__FUNCTION__, __('Id de cliente no definido. No es posible importar cuenta.', false), Log::INFO);
+ return false;
+ }
+
+ if ($this->ImportParams->getImportMasterPwd() !== '') {
+ $pass = Crypt::getDecrypt($AccountData->getAccountPass(), $AccountData->getAccountIV(), $this->ImportParams->getImportMasterPwd());
+ $AccountData->setAccountPass($pass);
+ }
+
+ $AccountData->setAccountUserId($this->ImportParams->getDefaultUser());
+ $AccountData->setAccountUserGroupId($this->ImportParams->getDefaultGroup());
+
+ try {
+ $Account = new Account($AccountData);
+ $Account->createAccount();
+
+ $this->LogMessage->addDetails(__('Cuenta creada', false), $AccountData->getAccountName());
+ $this->counter++;
+ } catch (SPException $e) {
+ $this->LogMessage->addDetails($e->getMessage(), $AccountData->getAccountName());
+ $this->LogMessage->addDetails(__('Error', false), $e->getHint());
+ }
+
+ return true;
+ }
+
+ /**
+ * Añadir una categoría y devolver el Id
+ *
+ * @param CategoryData $CategoryData
+ * @return Category|null
+ */
+ protected function addCategory(CategoryData $CategoryData)
+ {
+ try {
+ $Category = Category::getItem($CategoryData)->add();
+
+ $this->LogMessage->addDetails(__('Categoría creada', false), $CategoryData->getCategoryName());
+
+ return $Category;
+ } catch (SPException $e) {
+ $this->LogMessage->addDetails($e->getMessage(), $CategoryData->category_name);
+ $this->LogMessage->addDetails(__('Error', false), $e->getHint());
+ }
+
+ return null;
+ }
+
+ /**
+ * Añadir un cliente y devolver el Id
+ *
+ * @param CustomerData $CustomerData
+ * @return Customer|null
+ */
+ protected function addCustomer(CustomerData $CustomerData)
+ {
+ try {
+ $Customer = Customer::getItem($CustomerData)->add();
+
+ $this->LogMessage->addDetails(__('Cliente creado', false), $CustomerData->getCustomerName());
+
+ return $Customer;
+ } catch (SPException $e) {
+ $this->LogMessage->addDetails($e->getMessage(), $CustomerData->getCustomerName());
+ $this->LogMessage->addDetails(__('Error', false), $e->getHint());
+ }
+
+ return null;
+ }
+
+ /**
+ * Añadir una etiqueta y devolver el Id
+ *
+ * @param TagData $TagData
+ * @return Tag|null
+ */
+ protected function addTag(TagData $TagData)
+ {
+ try {
+ $Tag = Tag::getItem($TagData)->add();
+
+ $this->LogMessage->addDetails(__('Etiqueta creada', false), $TagData->getTagName());
+
+ return $Tag;
+ } catch (SPException $e) {
+ $this->LogMessage->addDetails($e->getMessage(), $TagData->getTagName());
+ $this->LogMessage->addDetails(__('Error', false), $e->getHint());
+ }
+
+ return null;
+ }
+}
\ No newline at end of file
diff --git a/inc/AccountInterface.class.php b/inc/SP/Import/ImportInterface.class.php
similarity index 55%
rename from inc/AccountInterface.class.php
rename to inc/SP/Import/ImportInterface.class.php
index 5877a215..25325ce2 100644
--- a/inc/AccountInterface.class.php
+++ b/inc/SP/Import/ImportInterface.class.php
@@ -4,7 +4,7 @@
*
* @author nuxsmin
* @link http://syspass.org
- * @copyright 2012-2015 Rubén Domínguez nuxsmin@syspass.org
+ * @copyright 2012-2017, Rubén Domínguez nuxsmin@$syspass.org
*
* This file is part of sysPass.
*
@@ -19,24 +19,27 @@
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with sysPass. If not, see .
- *
+ * along with sysPass. If not, see .
*/
-namespace SP;
-
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+namespace SP\Import;
/**
- * Interface AccountInterface con la definición de métodos comunes a las cuentas
+ * Interface ImportInterface
+ *
+ * @package Import
*/
-interface AccountInterface
+interface ImportInterface
{
- public function getAccountData();
+ /**
+ * Iniciar la importación
+ */
+ public function doImport();
- public function createAccount();
-
- public function deleteAccount();
-
- public function updateAccountsMasterPass($currentMasterPass, $newMasterPass, $newHash = null);
+ /**
+ * Devolver el contador de objetos importados
+ *
+ * @return int
+ */
+ public function getCounter();
}
\ No newline at end of file
diff --git a/inc/SP/Import/ImportParams.class.php b/inc/SP/Import/ImportParams.class.php
new file mode 100644
index 00000000..0279d52b
--- /dev/null
+++ b/inc/SP/Import/ImportParams.class.php
@@ -0,0 +1,135 @@
+.
+ */
+
+namespace SP\Import;
+
+
+/**
+ * Class ImportParams
+ *
+ * @package SP\Import
+ */
+class ImportParams
+{
+ /**
+ * @var string
+ */
+ protected $importPwd;
+ /**
+ * @var string
+ */
+ protected $importMasterPwd;
+ /**
+ * @var int
+ */
+ protected $defaultUser = 0;
+ /**
+ * @var int
+ */
+ protected $defaultGroup = 0;
+ /**
+ * @var string
+ */
+ protected $csvDelimiter = ';';
+
+ /**
+ * @return string
+ */
+ public function getImportPwd()
+ {
+ return $this->importPwd;
+ }
+
+ /**
+ * @param string $importPwd
+ */
+ public function setImportPwd($importPwd)
+ {
+ $this->importPwd = $importPwd;
+ }
+
+ /**
+ * @return int
+ */
+ public function getDefaultGroup()
+ {
+ return $this->defaultGroup;
+ }
+
+ /**
+ * @param int $defaultGroup
+ */
+ public function setDefaultGroup($defaultGroup)
+ {
+ $this->defaultGroup = (int)$defaultGroup;
+ }
+
+ /**
+ * @return string
+ */
+ public function getCsvDelimiter()
+ {
+ return $this->csvDelimiter;
+ }
+
+ /**
+ * @param string $csvDelimiter
+ */
+ public function setCsvDelimiter($csvDelimiter)
+ {
+ $this->csvDelimiter = $csvDelimiter;
+ }
+
+ /**
+ * @return string
+ */
+ public function getImportMasterPwd()
+ {
+ return $this->importMasterPwd;
+ }
+
+ /**
+ * @param string $importMasterPwd
+ */
+ public function setImportMasterPwd($importMasterPwd)
+ {
+ $this->importMasterPwd = $importMasterPwd;
+ }
+
+ /**
+ * @return int
+ */
+ public function getDefaultUser()
+ {
+ return $this->defaultUser;
+ }
+
+ /**
+ * @param int $defaultUser
+ */
+ public function setDefaultUser($defaultUser)
+ {
+ $this->defaultUser = (int)$defaultUser;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Import/KeepassImport.class.php b/inc/SP/Import/KeepassImport.class.php
new file mode 100644
index 00000000..d3f00f9c
--- /dev/null
+++ b/inc/SP/Import/KeepassImport.class.php
@@ -0,0 +1,134 @@
+.
+ */
+
+namespace SP\Import;
+
+use DOMElement;
+use DOMXPath;
+use SP\DataModel\AccountExtData;
+use SP\DataModel\CategoryData;
+use SP\DataModel\CustomerData;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Esta clase es la encargada de importar cuentas desde KeePass
+ */
+class KeepassImport extends ImportBase
+{
+ use XmlImportTrait;
+
+ /**
+ * @var int
+ */
+ protected $customerId = 0;
+
+ /**
+ * Iniciar la importación desde KeePass
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ */
+ public function doImport()
+ {
+ $customerData = new CustomerData(null, 'KeePass');
+ $this->addCustomer($customerData);
+
+ $this->customerId = $customerData->getCustomerId();
+
+ $this->process();
+ }
+
+ /**
+ * Obtener los grupos y procesar lan entradas de KeePass.
+ */
+ protected function process()
+ {
+ foreach ($this->getItems() as $group => $entry) {
+ $CategoryData = new CategoryData(null, $group);
+ $this->addCategory($CategoryData);
+
+ if (count($entry) > 0) {
+ foreach ($entry as $account) {
+ $AccountData = new AccountExtData();
+ $AccountData->setAccountNotes($account['Notes']);
+ $AccountData->setAccountPass($account['Password']);
+ $AccountData->setAccountName($account['Title']);
+ $AccountData->setAccountUrl($account['URL']);
+ $AccountData->setAccountLogin($account['UserName']);
+ $AccountData->setAccountCategoryId($CategoryData->getCategoryId());
+ $AccountData->setAccountCustomerId($this->customerId);
+
+ $this->addAccount($AccountData);
+ }
+ }
+ }
+ }
+
+ /**
+ * Obtener los grupos y procesar lan entradas de KeePass.
+ *
+ * @return array
+ */
+ protected function getItems()
+ {
+ $DomXpath = new DOMXPath($this->xmlDOM);
+ $Tags = $DomXpath->query('/KeePassFile/Root/Group//Group|/KeePassFile/Root/Group//Entry');
+ $items = [];
+
+ /** @var DOMElement[] $Tags */
+ foreach ($Tags as $tag) {
+ if ($tag->nodeType === 1) {
+ if ($tag->nodeName === 'Entry') {
+ $path = $tag->getNodePath();
+ $groupName = $DomXpath->query($path . '/../Name')->item(0)->nodeValue;
+ $entryData = [
+ 'Title' => '',
+ 'UserName' => '',
+ 'URL' => '',
+ 'Notes' => '',
+ 'Password' => ''
+ ];
+
+ /** @var DOMElement $key */
+ foreach ($DomXpath->query($path . '/String/Key') as $key) {
+ $value = $DomXpath->query($key->getNodePath() . '/../Value')->item(0)->nodeValue;
+
+ $entryData[$key->nodeValue] = $value;
+ }
+
+ $items[$groupName][] = $entryData;
+ } elseif ($tag->nodeName === 'Group') {
+ $groupName = $DomXpath->query($tag->getNodePath() . '/Name')->item(0)->nodeValue;
+
+ if (!isset($groups[$groupName])) {
+ $items[$groupName] = [];
+ }
+ }
+ }
+ }
+
+ return $items;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Import/KeepassXImport.class.php b/inc/SP/Import/KeepassXImport.class.php
new file mode 100644
index 00000000..05fc0beb
--- /dev/null
+++ b/inc/SP/Import/KeepassXImport.class.php
@@ -0,0 +1,130 @@
+.
+ */
+
+namespace SP\Import;
+
+use SimpleXMLElement;
+use SP\DataModel\AccountExtData;
+use SP\DataModel\CategoryData;
+use SP\DataModel\CustomerData;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Esta clase es la encargada de importar cuentas desde KeePassX
+ */
+class KeepassXImport extends ImportBase
+{
+ use XmlImportTrait;
+
+ /**
+ * @var int
+ */
+ protected $customerId = 0;
+
+ /**
+ * Iniciar la importación desde KeePassX.
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ * @return bool
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ */
+ public function doImport()
+ {
+ $customerData = new CustomerData(null, 'KeePassX');
+ $this->addCustomer($customerData);
+
+ $this->customerId = $customerData->getCustomerId();
+
+ $this->processCategories($this->xml);
+ }
+
+ /**
+ * Obtener los grupos y procesar lan entradas de KeePass.
+ *
+ * @param SimpleXMLElement $xml con objeto XML del archivo de KeePass
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ */
+ 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
+ $CategoryData = new CategoryData(null, $group->title, 'KeePassX');
+ $this->addCategory($CategoryData);
+
+ // Crear cuentas
+ $this->processAccounts($group->entry, $CategoryData->getCategoryId());
+ }
+
+ if ($group->group) {
+ // Analizar subgrupo
+ $this->processCategories($group);
+ }
+ }
+ }
+
+ if ($node->entry) {
+ $CategoryData = new CategoryData(null, $node->title, 'KeePassX');
+ $this->addCategory($CategoryData);
+
+ // Crear cuentas
+ $this->processAccounts($node->entry, $CategoryData->getCategoryId());
+ }
+ }
+ }
+
+ /**
+ * Obtener los datos de las entradas de KeePass.
+ *
+ * @param SimpleXMLElement $entries El objeto XML con las entradas
+ * @param int $categoryId Id de la categoría
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ protected function processAccounts(SimpleXMLElement $entries, $categoryId)
+ {
+ foreach ($entries as $entry) {
+ $name = isset($entry->title) ? (string)$entry->title : '';
+ $password = isset($entry->password) ? (string)$entry->password : '';
+ $url = isset($entry->url) ? (string)$entry->url : '';
+ $notes = isset($entry->comment) ? (string)$entry->comment : '';
+ $username = isset($entry->username) ? (string)$entry->username : '';
+
+ $AccountData = new AccountExtData();
+ $AccountData->setAccountPass($password);
+ $AccountData->setAccountNotes($notes);
+ $AccountData->setAccountName($name);
+ $AccountData->setAccountUrl($url);
+ $AccountData->setAccountLogin($username);
+ $AccountData->setAccountCustomerId($this->customerId);
+ $AccountData->setAccountCategoryId($categoryId);
+
+ $this->addAccount($AccountData);
+ }
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Import/SyspassImport.class.php b/inc/SP/Import/SyspassImport.class.php
new file mode 100644
index 00000000..22fa4a9e
--- /dev/null
+++ b/inc/SP/Import/SyspassImport.class.php
@@ -0,0 +1,284 @@
+.
+ */
+
+namespace SP\Import;
+
+use SP\Core\Crypt;
+use SP\Core\Exceptions\SPException;
+use SP\DataModel\AccountExtData;
+use SP\DataModel\CategoryData;
+use SP\DataModel\CustomerData;
+use SP\DataModel\TagData;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Esta clase es la encargada de importar cuentas desde sysPass
+ */
+class SyspassImport extends ImportBase
+{
+ use XmlImportTrait;
+
+ /**
+ * Mapeo de etiquetas
+ *
+ * @var array
+ */
+ protected $tags = [];
+ /**
+ * Mapeo de categorías.
+ *
+ * @var array
+ */
+ protected $categories = [];
+ /**
+ * Mapeo de clientes.
+ *
+ * @var array
+ */
+ protected $customers = [];
+
+ /**
+ * Iniciar la importación desde sysPass.
+ *
+ * @throws SPException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ */
+ public function doImport()
+ {
+ try {
+ if ($this->detectEncrypted()) {
+ if ($this->ImportParams->getImportPwd() === '') {
+ throw new SPException(SPException::SP_ERROR, __('Clave de encriptación no indicada', false));
+ }
+
+ $this->processEncrypted();
+ }
+ $this->processCategories();
+ $this->processCustomers();
+ $this->processTags();
+ $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
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ protected function processEncrypted()
+ {
+ $hash = $this->xmlDOM->getElementsByTagName('Encrypted')->item(0)->getAttribute('hash');
+
+ if ($hash !== '' && !Crypt::checkHashPass($this->ImportParams->getImportPwd(), $hash)) {
+ throw new SPException(SPException::SP_ERROR, __('Clave de encriptación incorrecta', false));
+ }
+
+ foreach ($this->xmlDOM->getElementsByTagName('Data') as $node) {
+ /** @var $node \DOMElement */
+ $data = base64_decode($node->nodeValue);
+ $iv = base64_decode($node->getAttribute('iv'));
+
+ $xmlDecrypted = Crypt::getDecrypt($data, $iv, $this->ImportParams->getImportPwd());
+
+ $newXmlData = new \DOMDocument();
+// $newXmlData->preserveWhiteSpace = true;
+ if (!$newXmlData->loadXML($xmlDecrypted)) {
+ throw new SPException(SPException::SP_ERROR, __('Clave de encriptación incorrecta', false));
+ }
+
+ $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.
+ *
+ * @param \DOMElement $Category
+ * @throws SPException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ */
+ protected function processCategories(\DOMElement $Category = null)
+ {
+ if ($Category === null) {
+ $this->getNodesData('Categories', 'Category', __FUNCTION__);
+ return;
+ }
+
+ $CategoryData = new CategoryData();
+
+ foreach ($Category->childNodes as $categoryNode) {
+ if (isset($categoryNode->tagName)) {
+ switch ($categoryNode->tagName) {
+ case 'name':
+ $CategoryData->setCategoryName($categoryNode->nodeValue);
+ break;
+ case 'description':
+ $CategoryData->setCategoryDescription($categoryNode->nodeValue);
+ break;
+ }
+ }
+ }
+
+ $this->addCategory($CategoryData);
+
+ $this->categories[$Category->getAttribute('id')] = $CategoryData->getCategoryId();
+ }
+
+ /**
+ * Obtener los clientes y añadirlos a sysPass.
+ *
+ * @param \DOMElement $Customer
+ * @throws SPException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ */
+ protected function processCustomers(\DOMElement $Customer = null)
+ {
+ if ($Customer === null) {
+ $this->getNodesData('Customers', 'Customer', __FUNCTION__);
+ return;
+ }
+
+ $CustomerData = new CustomerData();
+
+ foreach ($Customer->childNodes as $customerNode) {
+ if (isset($customerNode->tagName)) {
+ switch ($customerNode->tagName) {
+ case 'name':
+ $CustomerData->setCustomerName($customerNode->nodeValue);
+ break;
+ case 'description':
+ $CustomerData->setCustomerDescription($customerNode->nodeValue);
+ break;
+ }
+ }
+ }
+
+ $this->addCustomer($CustomerData);
+
+ $this->customers[$Customer->getAttribute('id')] = $CustomerData->getCustomerId();
+ }
+
+ /**
+ * Obtener las etiquetas y añadirlas a sysPass.
+ *
+ * @param \DOMElement $Tag
+ * @throws SPException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ */
+ protected function processTags(\DOMElement $Tag = null)
+ {
+ if ($Tag === null) {
+ $this->getNodesData('Tags', 'Tag', __FUNCTION__, false);
+ return;
+ }
+
+ $TagData = new TagData();
+
+ foreach ($Tag->childNodes as $tagNode) {
+ if (isset($tagNode->tagName)) {
+ switch ($tagNode->tagName) {
+ case 'name':
+ $TagData->setTagName($tagNode->nodeValue);
+ break;
+ }
+ }
+ }
+
+ $this->addTag($TagData);
+
+ $this->tags[$Tag->getAttribute('id')] = $TagData->getTagId();
+ }
+
+ /**
+ * Obtener los datos de las cuentas de sysPass y crearlas.
+ *
+ * @param \DOMElement $Account
+ * @throws SPException
+ */
+ protected function processAccounts(\DOMElement $Account = null)
+ {
+ if ($Account === null) {
+ $this->getNodesData('Accounts', 'Account', __FUNCTION__);
+ return;
+ }
+
+ $AccountData = new AccountExtData();
+
+ foreach ($Account->childNodes as $accountNode) {
+ if (isset($accountNode->tagName)) {
+ switch ($accountNode->tagName) {
+ case 'name';
+ $AccountData->setAccountName($accountNode->nodeValue);
+ break;
+ case 'login';
+ $AccountData->setAccountLogin($accountNode->nodeValue);
+ break;
+ case 'categoryId';
+ $AccountData->setAccountCategoryId($this->categories[(int)$accountNode->nodeValue]);
+ break;
+ case 'customerId';
+ $AccountData->setAccountCustomerId($this->customers[(int)$accountNode->nodeValue]);
+ break;
+ case 'url';
+ $AccountData->setAccountUrl($accountNode->nodeValue);
+ break;
+ case 'pass';
+ $AccountData->setAccountPass(base64_decode($accountNode->nodeValue));
+ break;
+ case 'passiv';
+ $AccountData->setAccountIV(base64_decode($accountNode->nodeValue));
+ break;
+ case 'notes';
+ $AccountData->setAccountNotes($accountNode->nodeValue);
+ break;
+ }
+ }
+ }
+
+ $this->addAccount($AccountData);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Import/XmlFileImport.class.php b/inc/SP/Import/XmlFileImport.class.php
new file mode 100644
index 00000000..785c1c2b
--- /dev/null
+++ b/inc/SP/Import/XmlFileImport.class.php
@@ -0,0 +1,148 @@
+.
+ */
+
+namespace SP\Import;
+
+use SP\Core\Exceptions\SPException;
+
+/**
+ * Class XmlFileImport
+ *
+ * @package Import
+ */
+class XmlFileImport
+{
+ /**
+ * @var FileImport
+ */
+ protected $FileImport;
+ /**
+ * @var \DOMDocument
+ */
+ protected $xmlDOM;
+
+ /**
+ * XmlFileImport constructor.
+ *
+ * @param FileImport $FileImport
+ */
+ public function __construct(FileImport $FileImport)
+ {
+ $this->FileImport = $FileImport;
+ }
+
+ /**
+ * Detectar la aplicación que generó el XML.
+ *
+ * @throws SPException
+ */
+ public function detectXMLFormat()
+ {
+ $this->readXMLFile();
+
+ $tags = $this->xmlDOM->getElementsByTagName('Generator');
+
+ /** @var \DOMElement[] $tags */
+ foreach ($tags as $tag) {
+ if ($tag->nodeValue === 'KeePass' || $tag->nodeValue === 'sysPass') {
+ return strtolower($tag->nodeValue);
+ }
+ }
+
+ 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', false),
+ __('No es posible detectar la aplicación que exportó los datos', false)
+ );
+ }
+
+ return '';
+ }
+
+ /**
+ * Leer el archivo a un objeto XML.
+ *
+ * @throws SPException
+ */
+ protected function readXMLFile()
+ {
+ // Cargar el XML con DOM
+ $this->xmlDOM = new \DOMDocument();
+
+ if ($this->xmlDOM->load($this->FileImport->getTmpFile()) === false) {
+ throw new SPException(
+ SPException::SP_CRITICAL,
+ __('Error interno', false),
+ __('No es posible procesar el archivo XML', false)
+ );
+ }
+ }
+
+ /**
+ * Leer la cabecera del archivo XML y obtener patrones de aplicaciones conocidas.
+ *
+ * @return bool
+ */
+ protected function parseFileHeader()
+ {
+ $handle = @fopen($this->FileImport->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;
+ }
+
+ /**
+ * @return \DOMDocument
+ */
+ public function getXmlDOM()
+ {
+ return $this->xmlDOM;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Import/XmlImport.class.php b/inc/SP/Import/XmlImport.class.php
new file mode 100644
index 00000000..b1eb87e3
--- /dev/null
+++ b/inc/SP/Import/XmlImport.class.php
@@ -0,0 +1,113 @@
+.
+ */
+
+namespace SP\Import;
+
+use SP\Core\Messages\LogMessage;
+
+defined('APP_ROOT') || die();
+
+/**
+ * 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 implements ImportInterface
+{
+ /**
+ * @var FileImport
+ */
+ protected $File;
+ /**
+ * @var ImportParams
+ */
+ protected $ImportParams;
+ /**
+ * @var LogMessage
+ */
+ protected $LogMessage;
+ /**
+ * @var ImportBase
+ */
+ protected $Import;
+
+ /**
+ * XmlImport constructor.
+ *
+ * @param FileImport $File
+ * @param ImportParams $ImportParams
+ * @param LogMessage $LogMessage
+ */
+ public function __construct(FileImport $File, ImportParams $ImportParams, LogMessage $LogMessage)
+ {
+ $this->File = $File;
+ $this->ImportParams = $ImportParams;
+ $this->LogMessage = $LogMessage;
+ }
+
+ /**
+ * Iniciar la importación desde XML.
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function doImport()
+ {
+ $XmlFileImport = new XmlFileImport($this->File);
+
+ $format = $XmlFileImport->detectXMLFormat();
+
+ switch ($format) {
+ case 'syspass':
+ $this->Import = new SyspassImport();
+ break;
+ case 'keepass':
+ $this->Import = new KeepassImport();
+ break;
+ case 'keepassx':
+ $this->Import = new KeepassXImport();
+ break;
+ default:
+ return;
+ }
+
+ $this->Import->setImportParams($this->ImportParams);
+ $this->Import->setXmlDOM($XmlFileImport->getXmlDOM());
+ $this->Import->setLogMessage($this->LogMessage);
+
+ $this->LogMessage->addDescription(sprintf(__('Formato detectado: %s'), strtoupper($format)));
+
+ $this->Import->doImport();
+ }
+
+ /**
+ * Devolver el contador de objetos importados
+ *
+ * @return int
+ */
+ public function getCounter()
+ {
+ return $this->Import->getCounter();
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Import/XmlImportTrait.class.php b/inc/SP/Import/XmlImportTrait.class.php
new file mode 100644
index 00000000..8bebb591
--- /dev/null
+++ b/inc/SP/Import/XmlImportTrait.class.php
@@ -0,0 +1,86 @@
+.
+ */
+
+namespace SP\Import;
+
+use Import\XmlFileImport;
+use SP\Core\Exceptions\SPException;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Trait XmlImportTrait para manejar archivos de importación en formato XML
+ *
+ * @package SP
+ */
+trait XmlImportTrait
+{
+ /**
+ * @var \DOMDocument
+ */
+ protected $xmlDOM;
+
+ /**
+ * @param \DOMDocument $xmlDOM
+ */
+ public function setXmlDOM($xmlDOM)
+ {
+ $this->xmlDOM =& $xmlDOM;
+ }
+
+ /**
+ * Obtener los datos de los nodos
+ *
+ * @param string $nodeName Nombre del nodo principal
+ * @param string $childNodeName Nombre de los nodos hijos
+ * @param string $callback Método a ejecutar
+ * @param bool $required Indica si el nodo es requerido
+ * @throws SPException
+ */
+ protected function getNodesData($nodeName, $childNodeName, $callback, $required = true)
+ {
+ $ParentNode = $this->xmlDOM->getElementsByTagName($nodeName);
+
+ if ($ParentNode->length === 0) {
+ if ($required === true) {
+ throw new SPException(
+ SPException::SP_WARNING,
+ __('Formato de XML inválido', false),
+ sprintf(__('El nodo "%s" no existe'), $nodeName));
+ }
+
+ return;
+ } elseif (!is_callable([$this, $callback])) {
+ throw new SPException(SPException::SP_WARNING, __('Método inválido', false));
+ }
+
+ /** @var \DOMElement $nodes */
+ foreach ($ParentNode as $nodes) {
+ /** @var \DOMElement $Account */
+ foreach ($nodes->getElementsByTagName($childNodeName) as $Node) {
+ $this->$callback($Node);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Log/AbstractLogger.class.php b/inc/SP/Log/AbstractLogger.class.php
new file mode 100644
index 00000000..3244db77
--- /dev/null
+++ b/inc/SP/Log/AbstractLogger.class.php
@@ -0,0 +1,150 @@
+.
+ */
+
+namespace SP\Log;
+
+/**
+ * This is a simple Logger implementation that other Loggers can inherit from.
+ *
+ * It simply delegates all log-level-specific methods to the `log` method to
+ * reduce boilerplate code that a simple Logger that does the same thing with
+ * messages regardless of the error level has to implement.
+ */
+abstract class AbstractLogger implements LoggerInterface
+{
+ /**
+ * System is unusable.
+ *
+ * @param string $message
+ * @param array $context
+ *
+ * @return null
+ */
+ public function emergency($message, array $context = array())
+ {
+ $this->log(LogLevel::EMERGENCY, $message, $context);
+ }
+
+ /**
+ * Action must be taken immediately.
+ *
+ * Example: Entire website down, database unavailable, etc. This should
+ * trigger the SMS alerts and wake you up.
+ *
+ * @param string $message
+ * @param array $context
+ *
+ * @return null
+ */
+ public function alert($message, array $context = array())
+ {
+ $this->log(LogLevel::ALERT, $message, $context);
+ }
+
+ /**
+ * Critical conditions.
+ *
+ * Example: Application component unavailable, unexpected exception.
+ *
+ * @param string $message
+ * @param array $context
+ *
+ * @return null
+ */
+ public function critical($message, array $context = array())
+ {
+ $this->log(LogLevel::CRITICAL, $message, $context);
+ }
+
+ /**
+ * Runtime errors that do not require immediate action but should typically
+ * be logged and monitored.
+ *
+ * @param string $message
+ * @param array $context
+ *
+ * @return null
+ */
+ public function error($message, array $context = array())
+ {
+ $this->log(LogLevel::ERROR, $message, $context);
+ }
+
+ /**
+ * Exceptional occurrences that are not errors.
+ *
+ * Example: Use of deprecated APIs, poor use of an API, undesirable things
+ * that are not necessarily wrong.
+ *
+ * @param string $message
+ * @param array $context
+ *
+ * @return null
+ */
+ public function warning($message, array $context = array())
+ {
+ $this->log(LogLevel::WARNING, $message, $context);
+ }
+
+ /**
+ * Normal but significant events.
+ *
+ * @param string $message
+ * @param array $context
+ *
+ * @return null
+ */
+ public function notice($message, array $context = array())
+ {
+ $this->log(LogLevel::NOTICE, $message, $context);
+ }
+
+ /**
+ * Interesting events.
+ *
+ * Example: User logs in, SQL logs.
+ *
+ * @param string $message
+ * @param array $context
+ *
+ * @return null
+ */
+ public function info($message, array $context = array())
+ {
+ $this->log(LogLevel::INFO, $message, $context);
+ }
+
+ /**
+ * Detailed debug information.
+ *
+ * @param string $message
+ * @param array $context
+ *
+ * @return null
+ */
+ public function debug($message, array $context = array())
+ {
+ $this->log(LogLevel::DEBUG, $message, $context);
+ }
+}
diff --git a/inc/SP/Log/ActionLog.class.php b/inc/SP/Log/ActionLog.class.php
new file mode 100644
index 00000000..247df398
--- /dev/null
+++ b/inc/SP/Log/ActionLog.class.php
@@ -0,0 +1,96 @@
+.
+ */
+
+namespace SP\Log;
+
+use SP\Core\Messages\LogMessage;
+
+/**
+ * Clase abstracta ActionLog para la gestión de mensajes de eventos
+ *
+ * @package SP
+ */
+abstract class ActionLog extends LogLevel
+{
+ /**
+ * Constante de nueva línea para descripciones
+ */
+ const NEWLINE_TXT = PHP_EOL;
+ /**
+ * Constante de nueva línea para descripciones en formato HTML
+ */
+ const NEWLINE_HTML = '
';
+ /**
+ * @var string
+ */
+ protected $logLevel = '';
+ /**
+ * @var LogMessage
+ */
+ protected $LogMessage;
+
+ /**
+ * Contructor
+ *
+ * @param LogMessage $LogMessage
+ * @param string $level El nivel del mensaje
+ */
+ public function __construct(LogMessage $LogMessage = null, $level = Log::INFO)
+ {
+ $this->LogMessage = $LogMessage ?: new LogMessage();
+ $this->logLevel = $level;
+ }
+
+ /**
+ * @return string
+ */
+ public function getLogLevel()
+ {
+ return strtoupper($this->logLevel);
+ }
+
+ /**
+ * @param string $logLevel
+ */
+ public function setLogLevel($logLevel)
+ {
+ $this->logLevel = $logLevel;
+ }
+
+ /**
+ * @return LogMessage
+ */
+ public function getLogMessage()
+ {
+ return $this->LogMessage;
+ }
+
+ /**
+ * @param LogMessage $LogMessage
+ */
+ public function setLogMessage(LogMessage $LogMessage)
+ {
+ $this->LogMessage = $LogMessage;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Log/Email.class.php b/inc/SP/Log/Email.class.php
new file mode 100644
index 00000000..9bea11dc
--- /dev/null
+++ b/inc/SP/Log/Email.class.php
@@ -0,0 +1,210 @@
+.
+ */
+
+namespace SP\Log;
+
+use phpmailer\PHPMailer;
+use phpmailer\phpmailerException;
+use SP\Config\Config;
+use SP\Core\Init;
+use SP\Core\Messages\LogMessage;
+use SP\Core\Messages\NoticeMessage;
+use SP\Core\Session;
+use SP\Html\Html;
+use SP\Util\Checks;
+use SP\Util\Util;
+
+/**
+ * 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 LogMessage $LogMessage 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(LogMessage $LogMessage, $mailTo = '', $isEvent = true)
+ {
+ if (!Checks::mailIsEnabled()) {
+ return false;
+ }
+
+ $Mail = self::getMailer($mailTo, $LogMessage->getAction(true));
+
+ if ($isEvent === true) {
+ $performer = Session::getUserData()->getUserLogin() ?: __('N/D');
+ $body[] = sprintf('%s: %s', Html::strongText(__('Acción')), $LogMessage->getAction(true));
+ $body[] = sprintf('%s: %s (%s)', Html::strongText(__('Realizado por')), $performer, $_SERVER['REMOTE_ADDR']);
+
+ $Mail->addCC(Config::getConfig()->getMailFrom());
+ }
+
+ $body[] = $LogMessage->getHtmlDescription(true);
+ $body[] = $LogMessage->getHtmlDetails(true);
+
+ $Mail->isHTML();
+ $Mail->Body = implode(Log::NEWLINE_HTML, array_merge($body, Email::getEmailFooter()));
+
+ $LogMessage = new LogMessage();
+ $LogMessage->setAction(__('Enviar Email', false));
+ $Log = new Log($LogMessage);
+
+ try {
+ $Mail->send();
+ $LogMessage->addDescription(__('Correo enviado', false));
+ $LogMessage->addDetails(__('Destinatario', false), $mailTo);
+
+ if ($isEvent === true) {
+ $LogMessage->addDetails(__('CC', false), Config::getConfig()->getMailFrom());
+ }
+
+ $Log->writeLog();
+ return true;
+ } catch (phpmailerException $e) {
+ $LogMessage->addDescription(__('Error al enviar correo', false));
+ $LogMessage->addDetails(__('Error', false), $e->getMessage());
+ $LogMessage->addDetails(__('Error', false), $Mail->ErrorInfo);
+ $Log->writeLog();
+ }
+
+ return false;
+ }
+
+ /**
+ * 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 getMailer($mailTo, $action)
+ {
+ $appName = Util::getAppInfo('appname');
+ $mailFrom = Config::getConfig()->getMailFrom();
+ $mailServer = Config::getConfig()->getMailServer();
+ $mailPort = Config::getConfig()->getMailPort();
+ $mailAuth = Config::getConfig()->isMailAuthenabled();
+
+ if (empty($mailTo)) {
+ $mailTo = $mailFrom;
+ }
+
+ $Mail = new PHPMailer();
+
+ $Mail->SMTPAutoTLS = false;
+ $Mail->isSMTP();
+ $Mail->CharSet = 'utf-8';
+ $Mail->Host = $mailServer;
+ $Mail->Port = $mailPort;
+
+ if ($mailAuth) {
+ $Mail->SMTPAuth = $mailAuth;
+ $Mail->Username = Config::getConfig()->getMailUser();
+ $Mail->Password = Config::getConfig()->getMailPass();
+ }
+
+ $Mail->SMTPSecure = strtolower(Config::getConfig()->getMailSecurity());
+ //$mail->SMTPDebug = 2;
+ //$mail->Debugoutput = 'error_log';
+
+ $Mail->setFrom($mailFrom, $appName);
+ $Mail->addAddress($mailTo);
+ $Mail->addReplyTo($mailFrom, $appName);
+ $Mail->WordWrap = 100;
+ $Mail->Subject = sprintf('%s (%s) - %s', $appName, __('Aviso'), $action);
+
+ return $Mail;
+ }
+
+ /**
+ * Devolver el pie del email con la firma de la aplicación
+ *
+ * @return array
+ */
+ protected function getEmailFooter()
+ {
+ return [
+ '',
+ '--',
+ sprintf('%s - %s', Util::getAppInfo('appname'), Util::getAppInfo('appdesc')),
+ Html::anchorText(Init::$WEBURI)
+ ];
+ }
+
+ /**
+ * Enviar un correo a varios destinatarios.
+ *
+ * Se envía en copia oculta.
+ *
+ * @param NoticeMessage $Message
+ * @param array $mailTo
+ * @return bool
+ */
+ public static function sendEmailBatch(NoticeMessage $Message, array $mailTo)
+ {
+ if (!Checks::mailIsEnabled()) {
+ return false;
+ }
+
+ $Mail = self::getMailer(Config::getConfig()->getMailFrom(), $Message->getTitle());
+ $Mail->isHTML();
+
+ foreach ($mailTo as $recipient) {
+ $Mail->addBCC($recipient->user_email, $recipient->user_name);
+ }
+
+ if (empty($Message->getFooter())) {
+ $Message->setFooter(self::getEmailFooter());
+ }
+
+ $Mail->Body = $Message->composeHtml();
+ $Mail->AltBody = $Message->composeText();
+
+ $LogMessage = new LogMessage();
+ $LogMessage->setAction(__('Enviar Email', false));
+ $LogMessage->addDetails(__('Destinatario', false), implode(';', array_keys($Mail->getAllRecipientAddresses())));
+
+ $Log = new Log($LogMessage);
+
+ try {
+ $Mail->send();
+ $LogMessage->addDescription(__('Correo enviado', false));
+ $Log->writeLog();
+ return true;
+ } catch (phpmailerException $e) {
+ $LogMessage->addDescription(__('Error al enviar correo', false));
+ $LogMessage->addDetails(__('Error', false), $e->getMessage());
+ $LogMessage->addDetails(__('Error', false), $Mail->ErrorInfo);
+ $Log->writeLog();
+ }
+
+ return false;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Log/Log.class.php b/inc/SP/Log/Log.class.php
new file mode 100644
index 00000000..0060ac64
--- /dev/null
+++ b/inc/SP/Log/Log.class.php
@@ -0,0 +1,233 @@
+.
+ */
+
+namespace SP\Log;
+
+use SP\Core\DiFactory;
+use SP\Core\Exceptions\SPException;
+use SP\Core\Language;
+use SP\Core\Messages\LogMessage;
+use SP\Core\Session;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+use SP\Util\Checks;
+use SP\Util\Util;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Esta clase es la encargada de manejar el registro de eventos
+ */
+class Log extends ActionLog
+{
+ /**
+ * @var int
+ */
+ public static $numRows = 0;
+
+ /**
+ * Obtener los eventos guardados.
+ *
+ * @param int $start con el número de registro desde el que empezar
+ * @param int $count Número de registros por consulta
+ * @return array|false con el resultado de la consulta
+ */
+ public static function getEvents($start, $count)
+ {
+ $Data = new QueryData();
+ $Data->setSelect('log_id,FROM_UNIXTIME(log_date) AS log_date,log_action,log_level,log_login,log_ipAddress,log_description');
+ $Data->setFrom('log');
+ $Data->setOrder('log_id DESC');
+ $Data->setLimit('?, ?');
+ $Data->addParam($start);
+ $Data->addParam($count);
+
+ // Obtenemos el número total de registros
+ DB::setFullRowCount();
+
+ $queryRes = DB::getResultsArray($Data);
+
+ self::$numRows = $Data->getQueryNumRows();
+
+ return $queryRes;
+ }
+
+ /**
+ * Limpiar el registro de eventos.
+ *
+ * @return bool con el resultado
+ * @throws \SP\Core\Exceptions\QueryException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ * @throws \phpmailer\phpmailerException
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public static function clearEvents()
+ {
+ $query = 'TRUNCATE TABLE log';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->setOnErrorMessage(__('Error al vaciar el registro de eventos', false));
+
+ return DB::getQuery($Data);
+ }
+
+ /**
+ * Obtener una nueva instancia de la clase inicializada
+ *
+ * @param string $action La acción realizada
+ * @param string $description La descripción de la acción realizada
+ * @param string $level
+ * @return Log
+ * @throws \phpmailer\phpmailerException
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public static function writeNewLogAndEmail($action, $description = null, $level = Log::INFO)
+ {
+ $Log = Log::writeNewLog($action, $description, $level);
+ Email::sendEmail($Log->getLogMessage());
+
+ return $Log;
+ }
+
+ /**
+ * Escribir un nuevo evento en el registro de eventos
+ *
+ * @param bool $resetDescription Restablecer la descripción
+ * @return bool
+ */
+ public function writeLog($resetDescription = false)
+ {
+ if ((defined('IS_INSTALLER') && IS_INSTALLER === 1)
+ || DiFactory::getDBStorage()->getDbStatus() === 1
+ ) {
+ debugLog('Action: ' . $this->LogMessage->getAction() . ' -- Description: ' . $this->LogMessage->getDescription() . ' -- Details: ' . $this->LogMessage->getDetails());
+
+ return false;
+ }
+
+ if (!Checks::logIsEnabled()) {
+ return false;
+ }
+
+ Language::setAppLocales();
+
+ if (Checks::syslogIsEnabled()) {
+ $this->sendToSyslog();
+ }
+
+ $description = trim($this->LogMessage->getDescription(true) . PHP_EOL . $this->LogMessage->getDetails(true));
+
+ $query = 'INSERT INTO log SET ' .
+ 'log_date = UNIX_TIMESTAMP(),' .
+ 'log_login = :login,' .
+ 'log_userId = :userId,' .
+ 'log_ipAddress = :ipAddress,' .
+ 'log_action = :action,' .
+ 'log_level = :level,' .
+ 'log_description = :description';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam(Session::getUserData()->getUserLogin(), 'login');
+ $Data->addParam(Session::getUserData()->getUserId(), 'userId');
+ $Data->addParam($_SERVER['REMOTE_ADDR'], 'ipAddress');
+ $Data->addParam(utf8_encode($this->LogMessage->getAction(true)), 'action');
+ $Data->addParam($this->getLogLevel(), 'level');
+ $Data->addParam(utf8_encode($description), 'description');
+
+ if ($resetDescription === true) {
+ $this->LogMessage->resetDescription();
+ }
+
+ try {
+ DB::getQuery($Data);
+ } catch (SPException $e) {
+ debugLog($e->getMessage(), true);
+ debugLog($e->getHint());
+ }
+
+ Language::unsetAppLocales();
+
+ return true;
+ }
+
+ /**
+ * Enviar mensaje al syslog
+ */
+ private function sendToSyslog()
+ {
+ $description = trim($this->LogMessage->getDescription(true) . PHP_EOL . $this->LogMessage->getDetails(true));
+
+ $msg = 'CEF:0|sysPass|logger|' . implode('.', Util::getVersion(true)) . '|';
+ $msg .= $this->LogMessage->getAction(true) . '|';
+ $msg .= $description . '|';
+ $msg .= '0|';
+ $msg .= sprintf('ip_addr="%s" user_name="%s"', $_SERVER['REMOTE_ADDR'], Session::getUserData()->getUserLogin());
+
+ $Syslog = new Syslog();
+ $Syslog->setIsRemote(Checks::remoteSyslogIsEnabled());
+ $Syslog->info($msg);
+ }
+
+ /**
+ * Obtener una nueva instancia de la clase inicializada
+ *
+ * @param string $action La acción realizada
+ * @param string $description La descripción de la acción realizada
+ * @param string $level
+ * @return Log
+ */
+ public static function newLog($action, $description = null, $level = Log::INFO)
+ {
+ $LogMessage = new LogMessage();
+ $LogMessage->setAction($action);
+
+ if ($description !== null) {
+ $LogMessage->addDescription($description);
+ }
+
+ return new Log($LogMessage, $level);
+ }
+
+ /**
+ * Escribir un nuevo evento en el registro de eventos
+ *
+ * @param string $action La acción realizada
+ * @param string $description La descripción de la acción realizada
+ * @param string $level
+ * @return Log
+ */
+ public static function writeNewLog($action, $description = null, $level = Log::INFO)
+ {
+ $LogMessage = new LogMessage();
+ $LogMessage->setAction($action);
+ $LogMessage->addDescription($description);
+
+ $Log = new Log($LogMessage, $level);
+ $Log->writeLog();
+
+ return $Log;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Log/LogLevel.class.php b/inc/SP/Log/LogLevel.class.php
new file mode 100644
index 00000000..fa84f0f3
--- /dev/null
+++ b/inc/SP/Log/LogLevel.class.php
@@ -0,0 +1,42 @@
+.
+ */
+
+namespace SP\Log;
+
+/**
+ * Class LogLevel
+ *
+ * @package SP\Log
+ */
+class LogLevel
+{
+ const EMERGENCY = 'emergency';
+ const ALERT = 'alert';
+ const CRITICAL = 'critical';
+ const ERROR = 'error';
+ const WARNING = 'warning';
+ const NOTICE = 'notice';
+ const INFO = 'info';
+ const DEBUG = 'debug';
+}
\ No newline at end of file
diff --git a/inc/SP/Log/LogUtil.class.php b/inc/SP/Log/LogUtil.class.php
new file mode 100644
index 00000000..b3f0a980
--- /dev/null
+++ b/inc/SP/Log/LogUtil.class.php
@@ -0,0 +1,48 @@
+.
+ */
+
+namespace SP\Log;
+
+/**
+ * Class LogUtil
+ *
+ * @package SP\Log
+ */
+class LogUtil
+{
+ /**
+ * Registrar que una extensión no ha sido cargada
+ *
+ * @param string $extension La extensión no cargada
+ * @param string $source El origen del error
+ * @return Log
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public static function extensionNotLoaded($extension, $source = __FUNCTION__)
+ {
+ $msg = sprintf(__('Extensión \'%s\' no cargada'), $extension);
+
+ return Log::writeNewLog($source, $msg, Log::ERROR);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Log/LoggerInterface.class.php b/inc/SP/Log/LoggerInterface.class.php
new file mode 100644
index 00000000..e652354a
--- /dev/null
+++ b/inc/SP/Log/LoggerInterface.class.php
@@ -0,0 +1,136 @@
+.
+ */
+
+namespace SP\Log;
+
+/**
+ * Describes a logger instance
+ *
+ * The message MUST be a string or object implementing __toString().
+ *
+ * The message MAY contain placeholders in the form: {foo} where foo
+ * will be replaced by the context data in key "foo".
+ *
+ * The context array can contain arbitrary data, the only assumption that
+ * can be made by implementors is that if an Exception instance is given
+ * to produce a stack trace, it MUST be in a key named "exception".
+ *
+ * See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md
+ * for the full interface specification.
+ */
+interface LoggerInterface
+{
+ /**
+ * System is unusable.
+ *
+ * @param string $message
+ * @param array $context
+ * @return null
+ */
+ public function emergency($message, array $context = array());
+
+ /**
+ * Action must be taken immediately.
+ *
+ * Example: Entire website down, database unavailable, etc. This should
+ * trigger the SMS alerts and wake you up.
+ *
+ * @param string $message
+ * @param array $context
+ * @return null
+ */
+ public function alert($message, array $context = array());
+
+ /**
+ * Critical conditions.
+ *
+ * Example: Application component unavailable, unexpected exception.
+ *
+ * @param string $message
+ * @param array $context
+ * @return null
+ */
+ public function critical($message, array $context = array());
+
+ /**
+ * Runtime errors that do not require immediate action but should typically
+ * be logged and monitored.
+ *
+ * @param string $message
+ * @param array $context
+ * @return null
+ */
+ public function error($message, array $context = array());
+
+ /**
+ * Exceptional occurrences that are not errors.
+ *
+ * Example: Use of deprecated APIs, poor use of an API, undesirable things
+ * that are not necessarily wrong.
+ *
+ * @param string $message
+ * @param array $context
+ * @return null
+ */
+ public function warning($message, array $context = array());
+
+ /**
+ * Normal but significant events.
+ *
+ * @param string $message
+ * @param array $context
+ * @return null
+ */
+ public function notice($message, array $context = array());
+
+ /**
+ * Interesting events.
+ *
+ * Example: User logs in, SQL logs.
+ *
+ * @param string $message
+ * @param array $context
+ * @return null
+ */
+ public function info($message, array $context = array());
+
+ /**
+ * Detailed debug information.
+ *
+ * @param string $message
+ * @param array $context
+ * @return null
+ */
+ public function debug($message, array $context = array());
+
+ /**
+ * Logs with an arbitrary level.
+ *
+ * @param mixed $level
+ * @param string $message
+ * @param array $context
+ * @return null
+ */
+ public function log($level, $message, array $context = array());
+}
\ No newline at end of file
diff --git a/inc/SP/Log/Syslog.class.php b/inc/SP/Log/Syslog.class.php
new file mode 100644
index 00000000..bdc168f2
--- /dev/null
+++ b/inc/SP/Log/Syslog.class.php
@@ -0,0 +1,122 @@
+.
+ */
+
+namespace SP\Log;
+
+use SP\Config\Config;
+use SP\Core\Exceptions\SPException;
+use SP\Util\Connection;
+
+/**
+ * Class Syslog para envío de mensaje al servicio de syslog
+ *
+ * @package SP\Log
+ */
+class Syslog extends AbstractLogger
+{
+ /**
+ * @var bool
+ */
+ private $isRemote = false;
+
+ /**
+ * @param boolean $isRemote
+ */
+ public function setIsRemote($isRemote)
+ {
+ $this->isRemote = $isRemote;
+ }
+
+ /**
+ * Logs with an arbitrary level.
+ *
+ * @param mixed $level
+ * @param string $message
+ * @param array $context
+ * @return null
+ */
+ public function log($level, $message, array $context = array())
+ {
+ if ($this->isRemote === false) {
+ openlog("sysPass", LOG_PID, LOG_LOCAL0);
+ syslog($this->getSyslogLevel($level), $message);
+ closelog();
+ } else {
+ $this->logRemote($message);
+ }
+ }
+
+ /**
+ * Devolver el código de nivel para la syslog
+ *
+ * @param $level string El nivel del mensaje
+ * @return int
+ */
+ private function getSyslogLevel($level)
+ {
+ switch ($level) {
+ case LogLevel::EMERGENCY:
+ return LOG_EMERG;
+ case LogLevel::ALERT:
+ return LOG_ALERT;
+ case LogLevel::CRITICAL:
+ return LOG_CRIT;
+ case LogLevel::ERROR:
+ return LOG_ERR;
+ case LogLevel::WARNING:
+ return LOG_WARNING;
+ case LogLevel::NOTICE:
+ return LOG_NOTICE;
+ case LogLevel::INFO:
+ return LOG_INFO;
+ case LogLevel::DEBUG:
+ return LOG_DEBUG;
+ }
+ }
+
+ /**
+ * Enviar un mensaje a syslog remoto
+ *
+ * @param $message
+ */
+ private function logRemote($message)
+ {
+ $server = Config::getConfig()->getSyslogServer();
+ $port = Config::getConfig()->getSyslogPort();
+
+ if (!empty($server)) {
+ $syslogMsg = date('M d H:i:s ') . "sysPass web: $message";
+
+ try {
+ $Connecion = new Connection($server, $port);
+ $Connecion->getSocket(Connection::TYPE_UDP);
+ $Connecion->send($syslogMsg);
+ $Connecion->closeSocket();
+ } catch (SPException $e) {
+ error_log($e->getMessage());
+ error_log($e->getHint());
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Categories/Category.class.php b/inc/SP/Mgmt/Categories/Category.class.php
new file mode 100644
index 00000000..cd865308
--- /dev/null
+++ b/inc/SP/Mgmt/Categories/Category.class.php
@@ -0,0 +1,258 @@
+.
+ */
+
+namespace SP\Mgmt\Categories;
+
+defined('APP_ROOT') || die();
+
+use SP\Core\ActionsInterface;
+use SP\Core\Exceptions\SPException;
+use SP\DataModel\CategoryData;
+use SP\DataModel\CustomFieldData;
+use SP\Log\Log;
+use SP\Mgmt\CustomFields\CustomField;
+use SP\Mgmt\ItemInterface;
+use SP\Mgmt\ItemSelectInterface;
+use SP\Mgmt\ItemTrait;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+
+
+/**
+ * Esta clase es la encargada de realizar las operaciones sobre las categorías de sysPass.
+ */
+class Category extends CategoryBase implements ItemInterface, ItemSelectInterface
+{
+ use ItemTrait;
+
+ /**
+ * @return $this
+ * @throws SPException
+ */
+ public function add()
+ {
+ if ($this->checkDuplicatedOnAdd()) {
+ throw new SPException(SPException::SP_WARNING, __('Categoría duplicada', false));
+ }
+
+ $query = /** @lang SQL */
+ 'INSERT INTO categories SET category_name = ?, category_description = ?, category_hash = ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getCategoryName());
+ $Data->addParam($this->itemData->getCategoryDescription());
+ $Data->addParam($this->makeItemHash($this->itemData->getCategoryName()));
+ $Data->setOnErrorMessage(__('Error al crear la categoría', false));
+
+ DB::getQuery($Data);
+
+ $this->itemData->setCategoryId(DB::$lastId);
+
+ return $this;
+ }
+
+ /**
+ * Comprobar duplicados
+ *
+ * @return bool
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function checkDuplicatedOnAdd()
+ {
+ $query = /** @lang SQL */
+ 'SELECT category_id FROM categories WHERE category_hash = ? OR category_name = ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->makeItemHash($this->itemData->getCategoryName()));
+ $Data->addParam($this->itemData->getCategoryName());
+
+ $queryRes = DB::getResults($Data);
+
+ if ($queryRes !== false) {
+ if ($Data->getQueryNumRows() === 0) {
+ return false;
+ } elseif ($Data->getQueryNumRows() === 1) {
+ $this->itemData->setCategoryId($queryRes->category_id);
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * @param $id int
+ * @return mixed
+ * @throws \SP\Core\Exceptions\QueryException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function delete($id)
+ {
+ $query = /** @lang SQL */
+ 'DELETE FROM categories WHERE category_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($id);
+ $Data->setOnErrorMessage(__('Error al eliminar la categoría', false));
+
+ DB::getQuery($Data);
+
+ if ($Data->getQueryNumRows() === 0) {
+ throw new SPException(SPException::SP_INFO, __('Categoría no encontrada', false));
+ }
+
+ return $this;
+ }
+
+ /**
+ * @param $id int
+ * @return mixed
+ * @throws \SP\Core\Exceptions\QueryException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ */
+ public function checkInUse($id)
+ {
+ $query = /** @lang SQL */
+ 'SELECT account_id FROM accounts WHERE account_categoryId = ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($id);
+
+ DB::getQuery($Data);
+
+ return $Data->getQueryNumRows() > 0;
+ }
+
+ /**
+ * @param $id int
+ * @return CategoryData
+ */
+ public function getById($id)
+ {
+ $query = /** @lang SQL */
+ 'SELECT category_id, category_name, category_description FROM categories WHERE category_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($id);
+ $Data->setMapClassName($this->getDataModel());
+
+ return DB::getResults($Data);
+ }
+
+ /**
+ * @return $this
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function update()
+ {
+ if ($this->checkDuplicatedOnUpdate()) {
+ throw new SPException(SPException::SP_WARNING, __('Nombre de categoría duplicado', false));
+ }
+
+ $query = /** @lang SQL */
+ 'UPDATE categories
+ SET category_name = ?,
+ category_description = ?,
+ category_hash = ?
+ WHERE category_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getCategoryName());
+ $Data->addParam($this->itemData->getCategoryDescription());
+ $Data->addParam($this->makeItemHash($this->itemData->getCategoryName()));
+ $Data->addParam($this->itemData->getCategoryId());
+ $Data->setOnErrorMessage(__('Error al actualizar la categoría', false));
+
+ DB::getQuery($Data);
+
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ * @throws \SP\Core\Exceptions\QueryException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ */
+ public function checkDuplicatedOnUpdate()
+ {
+ $query = /** @lang SQL */
+ 'SELECT category_id FROM categories WHERE (category_hash = ? OR category_name = ?) AND category_id <> ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->makeItemHash($this->itemData->getCategoryName()));
+ $Data->addParam($this->itemData->getCategoryName());
+ $Data->addParam($this->itemData->getCategoryId());
+
+ DB::getQuery($Data);
+
+ return $Data->getQueryNumRows() > 0;
+ }
+
+ /**
+ * @return CategoryData[]
+ */
+ public function getAll()
+ {
+ $query = /** @lang SQL */
+ 'SELECT category_id, category_name, category_description, category_hash FROM categories ORDER BY category_name';
+
+ $Data = new QueryData();
+ $Data->setMapClassName($this->getDataModel());
+ $Data->setQuery($query);
+
+ return DB::getResultsArray($Data);
+ }
+
+ /**
+ * Devolver los elementos con los ids especificados
+ *
+ * @param array $ids
+ * @return CategoryData[]
+ */
+ public function getByIdBatch(array $ids)
+ {
+ if (count($ids) === 0) {
+ return [];
+ }
+
+ $query = /** @lang SQL */
+ 'SELECT category_id, category_name, category_description FROM categories WHERE category_id IN (' . $this->getParamsFromArray($ids) . ')';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->setParams($ids);
+ $Data->setMapClassName($this->getDataModel());
+
+ return DB::getResultsArray($Data);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Categories/CategoryBase.class.php b/inc/SP/Mgmt/Categories/CategoryBase.class.php
new file mode 100644
index 00000000..852246bb
--- /dev/null
+++ b/inc/SP/Mgmt/Categories/CategoryBase.class.php
@@ -0,0 +1,65 @@
+.
+ */
+
+namespace SP\Mgmt\Categories;
+
+defined('APP_ROOT') || die();
+
+use SP\DataModel\CategoryData;
+use SP\Mgmt\ItemBase;
+
+/**
+ * Class CategoryBase
+ *
+ * @package SP\Mgmt\Categories
+ */
+abstract class CategoryBase extends ItemBase
+{
+ /** @var CategoryData */
+ protected $itemData;
+
+ /**
+ * Category constructor.
+ *
+ * @param $itemData
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ */
+ public function __construct($itemData = null)
+ {
+ if (!$this->dataModel) {
+ $this->setDataModel(CategoryData::class);
+ }
+
+ parent::__construct($itemData);
+ }
+
+ /**
+ * Devolver los datos del elemento
+ * @return CategoryData
+ */
+ public function getItemData()
+ {
+ return parent::getItemData();
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Categories/CategorySearch.class.php b/inc/SP/Mgmt/Categories/CategorySearch.class.php
new file mode 100644
index 00000000..8bab3507
--- /dev/null
+++ b/inc/SP/Mgmt/Categories/CategorySearch.class.php
@@ -0,0 +1,75 @@
+.
+ */
+
+namespace SP\Mgmt\Categories;
+
+defined('APP_ROOT') || die();
+
+use SP\DataModel\ItemSearchData;
+use SP\Mgmt\ItemSearchInterface;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+
+/**
+ * Class CategorySearch
+ *
+ * @package SP\Mgmt\Categories
+ */
+class CategorySearch extends CategoryBase implements ItemSearchInterface
+{
+ /**
+ * Obtiene el listado de categorías mediante una búsqueda
+ *
+ * @param ItemSearchData $SearchData
+ * @return array con el id de categoria como clave y en nombre como valor
+ */
+ public function getMgmtSearch(ItemSearchData $SearchData)
+ {
+ $Data = new QueryData();
+ $Data->setSelect('category_id, category_name, category_description');
+ $Data->setFrom('categories');
+ $Data->setOrder('category_name');
+
+ if ($SearchData->getSeachString() !== '') {
+ $Data->setWhere('category_name LIKE ? OR category_description LIKE ?');
+
+ $search = '%' . $SearchData->getSeachString() . '%';
+ $Data->addParam($search);
+ $Data->addParam($search);
+ }
+
+ $Data->setLimit('?,?');
+ $Data->addParam($SearchData->getLimitStart());
+ $Data->addParam($SearchData->getLimitCount());
+
+ DB::setFullRowCount();
+
+ /** @var array $queryRes */
+ $queryRes = DB::getResultsArray($Data);
+
+ $queryRes['count'] = $Data->getQueryNumRows();
+
+ return $queryRes;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/CustomFields/CustomField.class.php b/inc/SP/Mgmt/CustomFields/CustomField.class.php
new file mode 100644
index 00000000..daab449c
--- /dev/null
+++ b/inc/SP/Mgmt/CustomFields/CustomField.class.php
@@ -0,0 +1,358 @@
+.
+ */
+
+namespace SP\Mgmt\CustomFields;
+
+defined('APP_ROOT') || die();
+
+use SP\Core\Crypt;
+use SP\DataModel\CustomFieldData;
+use SP\DataModel\CustomFieldDefData;
+use SP\Mgmt\ItemInterface;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+use SP\Util\Util;
+
+/**
+ * Class CustomFields para la gestión de campos personalizados de los módulos
+ *
+ * @package SP
+ */
+class CustomField extends CustomFieldBase implements ItemInterface
+{
+ /**
+ * @param CustomFieldData $itemData
+ * @param int $customFieldDefId
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ */
+ public function __construct($itemData, $customFieldDefId = null)
+ {
+ $this->setDataModel(CustomFieldData::class);
+
+ parent::__construct($itemData);
+
+ if (null !== $customFieldDefId) {
+ $field = CustomFieldDef::getItem()->getById($customFieldDefId);
+
+ $itemData->setDefinitionId($customFieldDefId);
+ $itemData->setModule($field->getModule());
+ $itemData->setName($field->getName());
+ $itemData->setType($field->getType());
+ }
+
+ $this->itemData = $itemData;
+ }
+
+ /**
+ * @return mixed
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function update()
+ {
+ $exists = $this->checkExists();
+
+ if (!$exists && $this->itemData->getValue() !== '') {
+ return $this->add();
+ } elseif ($exists && $this->itemData->getValue() === '') {
+ return $this->delete($this->itemData->getId());
+ }
+
+ $cryptData = Crypt::encryptData($this->itemData->getValue());
+
+ $query = /** @lang SQL */
+ 'UPDATE customFieldsData SET
+ customfielddata_data = ?,
+ customfielddata_iv = ?
+ WHERE customfielddata_moduleId = ?
+ AND customfielddata_itemId = ?
+ AND customfielddata_defId = ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($cryptData['data']);
+ $Data->addParam($cryptData['iv']);
+ $Data->addParam($this->itemData->getModule());
+ $Data->addParam($this->itemData->getId());
+ $Data->addParam($this->itemData->getDefinitionId());
+
+ return DB::getQuery($Data);
+ }
+
+ /**
+ * Comprueba si el elemento tiene campos personalizados con datos
+ *
+ * @return bool
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ protected function checkExists()
+ {
+ $query = /** @lang SQL */
+ 'SELECT customfielddata_id
+ FROM customFieldsData
+ WHERE customfielddata_moduleId = ?
+ AND customfielddata_itemId = ?
+ AND customfielddata_defId = ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getModule());
+ $Data->addParam($this->itemData->getId());
+ $Data->addParam($this->itemData->getDefinitionId());
+
+ DB::getQuery($Data);
+
+ return ($Data->getQueryNumRows() >= 1);
+ }
+
+ /**
+ * @return mixed
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function add()
+ {
+ if ($this->itemData->getValue() === '') {
+ return true;
+ }
+
+ $cryptData = Crypt::encryptData($this->itemData->getValue());
+
+ $query = /** @lang SQL */
+ 'INSERT INTO customFieldsData SET
+ customfielddata_itemId = ?,
+ customfielddata_moduleId = ?,
+ customfielddata_defId = ?,
+ customfielddata_data = ?,
+ customfielddata_iv = ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getId());
+ $Data->addParam($this->itemData->getModule());
+ $Data->addParam($this->itemData->getDefinitionId());
+ $Data->addParam($cryptData['data']);
+ $Data->addParam($cryptData['iv']);
+
+ return DB::getQuery($Data);
+ }
+
+ /**
+ * @param $id int
+ * @return mixed
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function delete($id)
+ {
+ $query = /** @lang SQL */
+ 'DELETE FROM customFieldsData
+ WHERE customfielddata_itemId = ?
+ AND customfielddata_moduleId = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($id);
+ $Data->addParam($this->itemData->getCustomfielddataModuleId());
+
+ return DB::getQuery($Data);
+ }
+
+ /**
+ * @param $id int
+ * @return CustomFieldData[]
+ */
+ public function getById($id)
+ {
+ $query = /** @lang SQL */
+ 'SELECT customfielddata_id,
+ customfielddef_id,
+ customfielddata_data,
+ customfielddata_iv,
+ customfielddef_field
+ FROM customFieldsData
+ JOIN customFieldsDef ON customfielddata_defId = customfielddef_id
+ WHERE customfielddef_module = ?
+ AND customfielddata_itemId = ?
+ UNION
+ SELECT
+ 0 as customfielddata_id,
+ customfielddef_id,
+ "" as customfielddata_data,
+ "" as customfielddata_iv,
+ customfielddef_field
+ FROM customFieldsDef
+ WHERE customfielddef_module = ?
+ AND customfielddef_id NOT IN
+ (SELECT customfielddef_id
+ FROM customFieldsData
+ JOIN customFieldsDef ON customfielddata_defId = customfielddef_id
+ WHERE customfielddef_module = ?
+ AND customfielddata_itemId = ?)
+ ORDER BY customfielddef_id';
+
+ $Data = new QueryData();
+ $Data->setMapClassName($this->getDataModel());
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getModule());
+ $Data->addParam($id);
+ $Data->addParam($this->itemData->getModule());
+ $Data->addParam($this->itemData->getModule());
+ $Data->addParam($id);
+
+ /** @var CustomFieldData[] $queryRes */
+ $queryRes = DB::getResultsArray($Data);
+
+ $customFields = [];
+
+ foreach ($queryRes as $CustomFieldData) {
+ /** @var CustomFieldDefData $fieldDef */
+ $fieldDef = Util::castToClass(CustomFieldDefData::class, $CustomFieldData->getCustomfielddefField());
+
+ $CustomFieldData->setDefinition($fieldDef);
+ $CustomFieldData->setDefinitionId($CustomFieldData->getCustomfielddefId());
+ $CustomFieldData->setTypeName(CustomFieldTypes::getFieldsTypes($fieldDef->getType()));
+ $CustomFieldData->setValue($this->unencryptData($CustomFieldData));
+
+ $customFields[] = $CustomFieldData;
+ }
+
+ return $customFields;
+ }
+
+ /**
+ * Desencriptar y formatear los datos del campo
+ *
+ * @param CustomFieldData $CustomFieldData
+ * @return string
+ */
+ protected function unencryptData(CustomFieldData $CustomFieldData)
+ {
+ if ($CustomFieldData->getCustomfielddataData() !== '') {
+ return $this->formatValue(Crypt::getDecrypt($CustomFieldData->getCustomfielddataData(), $CustomFieldData->getCustomfielddataIv()));
+ }
+
+ return '';
+ }
+
+ /**
+ * Formatear el valor del campo
+ *
+ * @param $value string El valor del campo
+ * @return string
+ */
+ protected function formatValue($value)
+ {
+ if (preg_match('#https?://#', $value)) {
+ return '' . $value . '';
+ }
+
+ return $value;
+ }
+
+ /**
+ * @return CustomFieldDefData[]|array
+ */
+ public function getAll()
+ {
+ $query = /** @lang SQL */
+ 'SELECT customfielddef_id,
+ customfielddef_field
+ FROM customFieldsDef
+ WHERE customfielddef_module = ?';
+
+ $Data = new QueryData();
+ $Data->setMapClassName(CustomFieldDefData::class);
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getModule());
+
+ /** @var CustomFieldDefData[] $queryRes */
+ $queryRes = DB::getResultsArray($Data);
+
+ if (count($queryRes) === 0) {
+ return ['hash' => ''];
+ }
+
+ foreach ($queryRes as $CustomFieldDef) {
+ /** @var CustomFieldDefData $fieldDef */
+ $fieldDef = Util::castToClass(CustomFieldDefData::class, $CustomFieldDef->getCustomfielddefField());
+
+ $CustomFieldData = new CustomFieldData();
+ $CustomFieldData->setDefinition($fieldDef);
+ $CustomFieldData->setId($CustomFieldDef->getCustomfielddefId());
+ $CustomFieldData->setTypeName(CustomFieldTypes::getFieldsTypes($fieldDef->getType()));
+
+ $fields[] = $fieldDef;
+ }
+
+ $customFields['hash'] = '';
+
+ return $customFields;
+ }
+
+ /**
+ * @param $id int
+ * @return mixed
+ */
+ public function checkInUse($id)
+ {
+ // TODO: Implement checkInUse() method.
+ }
+
+ /**
+ * @return bool
+ */
+ public function checkDuplicatedOnUpdate()
+ {
+ // TODO: Implement checkDuplicatedOnUpdate() method.
+ }
+
+ /**
+ * @return bool
+ */
+ public function checkDuplicatedOnAdd()
+ {
+ // TODO: Implement checkDuplicatedOnAdd() method.
+ }
+
+ /**
+ * Eliminar elementos en lote
+ *
+ * @param array $ids
+ * @return $this
+ */
+ public function deleteBatch(array $ids)
+ {
+ // TODO: Implement deleteBatch() method.
+ }
+
+ /**
+ * Devolver los elementos con los ids especificados
+ *
+ * @param array $ids
+ * @return mixed
+ */
+ public function getByIdBatch(array $ids)
+ {
+ // TODO: Implement getByIdBatch() method.
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/CustomFields/CustomFieldBase.class.php b/inc/SP/Mgmt/CustomFields/CustomFieldBase.class.php
new file mode 100644
index 00000000..1e4d6035
--- /dev/null
+++ b/inc/SP/Mgmt/CustomFields/CustomFieldBase.class.php
@@ -0,0 +1,67 @@
+.
+ */
+
+namespace SP\Mgmt\CustomFields;
+
+defined('APP_ROOT') || die();
+
+use SP\DataModel\CustomFieldBaseData;
+use SP\DataModel\CustomFieldData;
+use SP\DataModel\CustomFieldDefData;
+use SP\Mgmt\ItemBase;
+
+/**
+ * Class CustomFieldsBase para la definición de campos personalizados
+ *
+ * @package SP
+ */
+abstract class CustomFieldBase extends ItemBase
+{
+ /** @var CustomFieldBaseData|CustomFieldDefData|CustomFieldData */
+ protected $itemData;
+
+ /**
+ * Category constructor.
+ *
+ * @param CustomFieldBaseData $itemData
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ */
+ public function __construct($itemData = null)
+ {
+ if (!$this->dataModel) {
+ $this->setDataModel(CustomFieldBaseData::class);
+ }
+
+ parent::__construct($itemData);
+ }
+
+ /**
+ * Devolver los datos del elemento
+ * @return CustomFieldBaseData|CustomFieldDefData|CustomFieldData
+ */
+ public function getItemData()
+ {
+ return parent::getItemData();
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php b/inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php
new file mode 100644
index 00000000..01da04b0
--- /dev/null
+++ b/inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php
@@ -0,0 +1,290 @@
+.
+ */
+
+namespace SP\Mgmt\CustomFields;
+
+defined('APP_ROOT') || die();
+
+use SP\Core\Exceptions\SPException;
+use SP\DataModel\CustomFieldDefData;
+use SP\Mgmt\ItemInterface;
+use SP\Mgmt\ItemTrait;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+use SP\Util\Util;
+
+/**
+ * Class CustomFieldDef para la gestión de definiciones de campos personalizados
+ *
+ * @package SP
+ */
+class CustomFieldDef extends CustomFieldBase implements ItemInterface
+{
+ use ItemTrait;
+
+ /**
+ * Category constructor.
+ *
+ * @param CustomFieldDefData $itemData
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ */
+ public function __construct($itemData = null)
+ {
+ $this->setDataModel(CustomFieldDefData::class);
+
+ parent::__construct($itemData);
+ }
+
+ /**
+ * @return mixed
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function add()
+ {
+ $query = /** @lang SQL */
+ 'INSERT INTO customFieldsDef SET customfielddef_module = ?, customfielddef_field = ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getModule());
+ $Data->addParam(serialize($this->itemData));
+ $Data->setOnErrorMessage(__('Error al crear el campo personalizado', false));
+
+ DB::getQuery($Data);
+
+ return $this;
+ }
+
+ /**
+ * @param $id int|array
+ * @return mixed
+ * @throws SPException
+ */
+ public function delete($id)
+ {
+ if ($this->deleteItemsDataForDefinition($id) === false) {
+ throw new SPException(SPException::SP_ERROR, __('Error al eliminar el campo personalizado', false));
+ }
+
+ $query = /** @lang SQL */
+ 'DELETE FROM customFieldsDef WHERE customfielddef_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($id);
+ $Data->setOnErrorMessage(__('Error al eliminar el campo personalizado', false));
+
+ DB::getQuery($Data);
+
+ return $this;
+ }
+
+ /**
+ * Eliminar los datos de los elementos de una definición
+ *
+ * @param $id
+ * @return bool
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ protected function deleteItemsDataForDefinition($id)
+ {
+ $query = /** @lang SQL */
+ 'DELETE FROM customFieldsData WHERE customfielddata_defId = ?';
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($id);
+
+ return DB::getQuery($Data);
+ }
+
+ /**
+ * @return mixed
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function update()
+ {
+ $curField = $this->getById($this->itemData->getId());
+
+ $query = /** @lang SQL */
+ 'UPDATE customFieldsDef SET
+ customfielddef_module = ?,
+ customfielddef_field = ?
+ WHERE customfielddef_id= ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getModule());
+ $Data->addParam(serialize($this->itemData));
+ $Data->addParam($this->itemData->getId());
+ $Data->setOnErrorMessage(__('Error al actualizar el campo personalizado', false));
+
+ DB::getQuery($Data);
+
+ if ($curField->getModule() !== $this->itemData->getModule()) {
+ $this->updateItemsModulesForDefinition();
+ }
+
+ return $this;
+ }
+
+ /**
+ * @param $id int
+ * @return CustomFieldDefData
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function getById($id)
+ {
+ $query = /** @lang SQL */
+ 'SELECT customfielddef_id,
+ customfielddef_module,
+ customfielddef_field
+ FROM customFieldsDef
+ WHERE customfielddef_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setMapClassName($this->getDataModel());
+ $Data->setQuery($query);
+ $Data->addParam($id);
+
+ /** @var CustomFieldDefData $CustomFieldDef */
+ $CustomFieldDef = DB::getResults($Data);
+
+ if ($CustomFieldDef === false) {
+ throw new SPException(SPException::SP_INFO, __('Campo personalizado no encontrado', false));
+ }
+
+ /** @var CustomFieldDefData $fieldDef */
+ $fieldDef = Util::castToClass($this->getDataModel(), $CustomFieldDef->getCustomfielddefField());
+ $fieldDef->setCustomfielddefId($CustomFieldDef->getCustomfielddefId());
+ $fieldDef->setId($CustomFieldDef->getCustomfielddefId());
+
+ return $fieldDef;
+ }
+
+ /**
+ * Actualizar el módulo de los elementos con campos personalizados
+ *
+ * @return bool
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ protected function updateItemsModulesForDefinition()
+ {
+ $query = /** @lang SQL */
+ 'UPDATE customFieldsData SET
+ customfielddata_moduleId = ?
+ WHERE customfielddata_defId = ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getModule());
+ $Data->addParam($this->itemData->getId());
+
+ return DB::getQuery($Data);
+ }
+
+ /**
+ * @return CustomFieldDefData[]|array
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function getAll()
+ {
+ $query = /** @lang SQL */
+ 'SELECT customfielddef_id,
+ customfielddef_module,
+ customfielddef_field
+ FROM customFieldsDef
+ ORDER BY customfielddef_module';
+
+ $Data = new QueryData();
+ $Data->setMapClassName($this->getDataModel());
+ $Data->setQuery($query);
+
+ /** @var CustomFieldDefData[] $queryRes */
+ $queryRes = DB::getResultsArray($Data);
+
+ if (count($queryRes) === 0) {
+ throw new SPException(SPException::SP_INFO, __('No se encontraron campos personalizados', false));
+ }
+
+ $fields = [];
+
+ foreach ($queryRes as $CustomFieldDef) {
+
+ /** @var CustomFieldDefData $fieldDef */
+ $fieldDef = Util::castToClass($this->getDataModel(), $CustomFieldDef->getCustomfielddefField());
+ $fieldDef->setId($CustomFieldDef->getCustomfielddefId());
+
+ $fields[] = $fieldDef;
+ }
+
+ return $fields;
+ }
+
+ /**
+ * @param $id int
+ * @return mixed
+ */
+ public function checkInUse($id)
+ {
+ // TODO: Implement checkInUse() method.
+ }
+
+ /**
+ * @return bool
+ */
+ public function checkDuplicatedOnUpdate()
+ {
+ // TODO: Implement checkDuplicatedOnUpdate() method.
+ }
+
+ /**
+ * @return bool
+ */
+ public function checkDuplicatedOnAdd()
+ {
+ // TODO: Implement checkDuplicatedOnAdd() method.
+ }
+
+ /**
+ * Devolver los elementos con los ids especificados
+ *
+ * @param array $ids
+ * @return mixed
+ */
+ public function getByIdBatch(array $ids)
+ {
+ $query = /** @lang SQL */
+ 'SELECT customfielddef_id,
+ customfielddef_module
+ FROM customFieldsDef
+ WHERE customfielddef_id IN (' . $this->getParamsFromArray($ids) . ')';
+
+ $Data = new QueryData();
+ $Data->setMapClassName($this->getDataModel());
+ $Data->setQuery($query);
+ $Data->setParams($ids);
+
+ return DB::getResultsArray($Data);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/CustomFields/CustomFieldDefSearch.class.php b/inc/SP/Mgmt/CustomFields/CustomFieldDefSearch.class.php
new file mode 100644
index 00000000..579999cb
--- /dev/null
+++ b/inc/SP/Mgmt/CustomFields/CustomFieldDefSearch.class.php
@@ -0,0 +1,98 @@
+.
+ */
+
+namespace SP\Mgmt\CustomFields;
+
+defined('APP_ROOT') || die();
+
+use SP\DataModel\CustomFieldDefData;
+use SP\DataModel\ItemSearchData;
+use SP\Mgmt\ItemSearchInterface;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+use SP\Util\Util;
+
+/**
+ * Class CustomFieldSearch
+ *
+ * @package SP\Mgmt\CustomFields
+ */
+class CustomFieldDefSearch extends CustomFieldBase implements ItemSearchInterface
+{
+ /**
+ * Category constructor.
+ *
+ * @param CustomFieldDefData $itemData
+ */
+ public function __construct($itemData = null)
+ {
+ $this->setDataModel('SP\DataModel\CustomFieldDefData');
+
+ parent::__construct($itemData);
+ }
+
+ /**
+ * @param ItemSearchData $SearchData
+ * @return array|\SP\DataModel\CustomFieldDefData[]
+ */
+ public function getMgmtSearch(ItemSearchData $SearchData)
+ {
+ $Data = new QueryData();
+ $Data->setMapClassName($this->getDataModel());
+ $Data->setSelect('customfielddef_id, customfielddef_module, customfielddef_field');
+ $Data->setFrom('customFieldsDef');
+ $Data->setOrder('customfielddef_module');
+
+ $Data->setLimit('?,?');
+ $Data->addParam($SearchData->getLimitStart());
+ $Data->addParam($SearchData->getLimitCount());
+
+ DB::setFullRowCount();
+
+ /** @var CustomFieldDefData[] $queryRes */
+ $queryRes = DB::getResultsArray($Data);
+
+ $customFields = [];
+
+ foreach ($queryRes as $CustomField) {
+
+ /** @var CustomFieldDefData $fieldDef */
+ $fieldDef = Util::castToClass($this->getDataModel(), $CustomField->getCustomfielddefField());
+
+ if ($SearchData->getSeachString() === ''
+ || stripos($fieldDef->getName(), $SearchData->getSeachString()) !== false
+ || stripos(CustomFieldTypes::getFieldsTypes($fieldDef->getType(), true), $SearchData->getSeachString()) !== false
+ || stripos(CustomFieldTypes::getFieldsModules($CustomField->getCustomfielddefModule()), $SearchData->getSeachString()) !== false
+ ) {
+ $fieldDef->setId($CustomField->getCustomfielddefId());
+
+ $customFields[] = $fieldDef;
+ }
+ }
+
+ $customFields['count'] = $Data->getQueryNumRows();
+
+ return $customFields;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php b/inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php
new file mode 100644
index 00000000..3d7c60c9
--- /dev/null
+++ b/inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php
@@ -0,0 +1,104 @@
+.
+ */
+
+namespace SP\Mgmt\CustomFields;
+
+defined('APP_ROOT') || die();
+
+use SP\Core\ActionsInterface;
+
+/**
+ * Class CustomFieldTypes
+ *
+ * @package SP\Mgmt\CustomFields
+ */
+class CustomFieldTypes
+{
+ /**
+ * Tipos de Campos
+ */
+ const TYPE_TEXT = 1;
+ const TYPE_PASSWORD = 2;
+ const TYPE_DATE = 3;
+ const TYPE_NUMBER = 4;
+ const TYPE_EMAIL = 5;
+ const TYPE_TELEPHONE = 6;
+ const TYPE_URL = 7;
+ const TYPE_COLOR = 8;
+ const TYPE_WIKI = 9;
+ const TYPE_TEXTAREA = 10;
+
+ /**
+ * Devolver los tipos de campos soportados
+ *
+ * @param int $typeId El tipo de campo
+ * @param bool $nice Devolver en formato "bonito"
+ * @return array
+ */
+ public static function getFieldsTypes($typeId = null, $nice = false)
+ {
+ $types = [
+ self::TYPE_TEXT => ['text', __('Texto')],
+ self::TYPE_WIKI => ['text', __('Wiki')],
+ self::TYPE_PASSWORD => ['password', __('Clave')],
+ self::TYPE_DATE => ['date', __('Fecha')],
+ self::TYPE_NUMBER => ['number', __('Número')],
+ self::TYPE_EMAIL => ['email', __('Email')],
+ self::TYPE_TELEPHONE => ['tel', __('Teléfono')],
+ self::TYPE_URL => ['url', __('Link')],
+ self::TYPE_COLOR => ['color', __('Color')],
+ self::TYPE_TEXTAREA => ['textarea', __('Área de Texto')]
+ ];
+
+ if (null !== $typeId) {
+ return ($nice === false) ? $types[$typeId][0] : $types[$typeId][1];
+ }
+
+ return $types;
+ }
+
+ /**
+ * Devuelve los módulos disponibles para los campos personalizados
+ *
+ * @param null $moduleId
+ * @return array|string
+ */
+ public static function getFieldsModules($moduleId = null)
+ {
+ $modules = [
+ ActionsInterface::ACTION_ACC => __('Cuentas'),
+ ActionsInterface::ACTION_MGM_CATEGORIES => __('Categorías'),
+ ActionsInterface::ACTION_MGM_CUSTOMERS => __('Clientes'),
+ ActionsInterface::ACTION_USR_USERS => __('Usuarios'),
+ ActionsInterface::ACTION_USR_GROUPS => __('Grupos')
+
+ ];
+
+ if (null !== $moduleId && !isset($modules[$moduleId])) {
+ return '';
+ }
+
+ return (null !== $moduleId) ? $modules[$moduleId] : $modules;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php b/inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php
new file mode 100644
index 00000000..361fa007
--- /dev/null
+++ b/inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php
@@ -0,0 +1,236 @@
+.
+ */
+
+namespace SP\Mgmt\CustomFields;
+
+defined('APP_ROOT') || die();
+
+use SP\Core\Crypt;
+use SP\Core\Exceptions\SPException;
+use SP\DataModel\CustomFieldData;
+use SP\DataModel\CustomFieldDefData;
+use SP\Log\Log;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+use SP\Util\Util;
+
+/**
+ * Class CustomFieldsUtil utilidades para los campos personalizados
+ *
+ * @package SP\Mgmt
+ */
+class CustomFieldsUtil
+{
+ /**
+ * Comprobar si el hash de cambios coincide con el camculado con el valor de los campos del elemento
+ *
+ * @param $fields
+ * @param $srcHhash
+ * @return bool
+ */
+ public static function checkHash(&$fields, $srcHhash)
+ {
+ return (!is_array($fields) || $srcHhash === md5(implode('', $fields)));
+ }
+
+ /**
+ * Actualizar los datos encriptados con una nueva clave
+ *
+ * @param string $currentMasterPass La clave maestra actual
+ * @param string $newMasterPassword La nueva clave maestra
+ * @return bool
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public static function updateCustomFieldsCrypt($currentMasterPass, $newMasterPassword)
+ {
+ $Log = new Log();
+ $LogMessage = $Log->getLogMessage();
+ $LogMessage->setAction(__('Campos Personalizados', false));
+
+ $query = /** @lang SQL */
+ 'SELECT customfielddata_id, customfielddata_data, customfielddata_iv FROM customFieldsData';
+
+ $Data = new QueryData();
+ $Data->setMapClassName(CustomFieldData::class);
+ $Data->setQuery($query);
+
+ /** @var CustomFieldData[] $queryRes */
+ $queryRes = DB::getResultsArray($Data);
+
+ if (count($queryRes) === 0) {
+ $LogMessage->addDescription(__('No hay datos de campos personalizados', false));
+ $Log->writeLog();
+ return true;
+ }
+
+ $LogMessage->addDescription(__('Actualizando datos encriptados', false));
+
+ $errors = [];
+ $success = [];
+
+ foreach ($queryRes as $CustomField) {
+ $fieldData = Crypt::getDecrypt($CustomField->getCustomfielddataData(), $CustomField->getCustomfielddataIv(), $currentMasterPass);
+ $fieldCryptData = Crypt::encryptData($fieldData, $newMasterPassword);
+
+ $query = /** @lang SQL */
+ 'UPDATE customFieldsData SET
+ customfielddata_data = ?,
+ customfielddata_iv = ?
+ WHERE customfielddata_id = ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($fieldCryptData['data']);
+ $Data->addParam($fieldCryptData['iv']);
+ $Data->addParam($CustomField->getCustomfielddataId());
+
+ try {
+ DB::getQuery($Data);
+
+ $success[] = $CustomField->getCustomfielddataId();
+ } catch (SPException $e) {
+ $errors[] = $CustomField->getCustomfielddataId();
+ }
+ }
+
+ $LogMessage->addDetails(__('Registros no actualizados', false), implode(',', $errors));
+ $LogMessage->addDetails(__('Registros actualizados', false), implode(',', $success));
+ $Log->writeLog();
+
+ return (count($errors) === 0);
+ }
+
+ /**
+ * Crear los campos personalizados de un elemento
+ *
+ * @param array $customFields
+ * @param CustomFieldData $CustomFieldData
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public static function addItemCustomFields(array &$customFields, CustomFieldData $CustomFieldData)
+ {
+ foreach ($customFields as $id => $value) {
+ $CustomFieldData->setDefinitionId($id);
+ $CustomFieldData->setValue($value);
+
+ CustomField::getItem($CustomFieldData)->add();
+ }
+ }
+
+ /**
+ * Actualizar los campos personalizados de un elemento
+ *
+ * @param array $customFields
+ * @param CustomFieldData $CustomFieldData
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public static function updateItemCustomFields(array $customFields, CustomFieldData $CustomFieldData)
+ {
+ foreach ($customFields as $id => $value) {
+ $CustomFieldData->setDefinitionId($id);
+ $CustomFieldData->setValue($value);
+
+ CustomField::getItem($CustomFieldData)->update();
+ }
+ }
+
+ /**
+ * Migración de campos personalizados
+ *
+ * @return bool
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ */
+ public static function migrateCustomFields()
+ {
+ $Log = new Log();
+ $LogMessage = $Log->getLogMessage();
+ $LogMessage->setAction(__FUNCTION__);
+
+ $query = /** @lang SQL */
+ 'SELECT DISTINCT customfielddef_id, customfielddef_field
+ FROM customFieldsData
+ LEFT JOIN customFieldsDef ON customfielddef_id = customfielddata_defId
+ WHERE customfielddata_moduleId = 20';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+
+ /** @var CustomFieldDefData[] $oldDefs */
+ $oldDefs = DB::getResultsArray($Data);
+
+ try {
+ if (count($oldDefs) > 0) {
+ $query = /** @lang SQL */
+ 'UPDATE customFieldsData SET customfielddata_moduleId = 10 WHERE customfielddata_moduleId = 20';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->setOnErrorMessage(__('Error al migrar campos personalizados', false));
+
+ DB::getQuery($Data);
+
+ $query = /** @lang SQL */
+ 'UPDATE customFieldsDef SET
+ customfielddef_module = ?,
+ customfielddef_field = ?
+ WHERE customfielddef_id= ? LIMIT 1';
+
+ foreach ($oldDefs as $cf) {
+ $CustomFieldDef = Util::castToClass(CustomFieldDefData::class, $cf->customfielddef_field);
+ $CustomFieldDef->setId($cf->customfielddef_id);
+ $CustomFieldDef->setModule(10);
+ $CustomFieldDef->setCustomfielddefModule(10);
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam(10);
+ $Data->addParam(serialize($CustomFieldDef));
+ $Data->addParam($cf->customfielddef_id);
+
+ try {
+ DB::getQuery($Data);
+
+ $LogMessage->addDetails(__('Campo actualizado', false), $cf->customfielddef_id);
+ } catch (SPException $e) {
+ $LogMessage->addDetails(__('Error al actualizar el campo personalizado', false), $cf->customfielddef_id);
+ }
+ }
+ }
+
+ $Log->writeLog();
+
+ return true;
+ } catch (SPException $e) {
+ $LogMessage->addDescription($e->getMessage());
+ $LogMessage->addDescription($e->getHint());
+ $Log->setLogLevel(Log::ERROR);
+ $Log->writeLog();
+ }
+
+ // We are here...wrong
+ return false;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Customers/Customer.class.php b/inc/SP/Mgmt/Customers/Customer.class.php
new file mode 100644
index 00000000..8f9fd2be
--- /dev/null
+++ b/inc/SP/Mgmt/Customers/Customer.class.php
@@ -0,0 +1,292 @@
+.
+ */
+
+namespace SP\Mgmt\Customers;
+
+defined('APP_ROOT') || die();
+
+use SP\Account\AccountUtil;
+use SP\Core\ActionsInterface;
+use SP\Core\Exceptions\SPException;
+use SP\Core\Session;
+use SP\DataModel\CustomerData;
+use SP\DataModel\CustomFieldData;
+use SP\Log\Log;
+use SP\Mgmt\CustomFields\CustomField;
+use SP\Mgmt\ItemInterface;
+use SP\Mgmt\ItemSelectInterface;
+use SP\Mgmt\ItemTrait;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+
+/**
+ * Esta clase es la encargada de realizar las operaciones sobre los clientes de sysPass
+ */
+class Customer extends CustomerBase implements ItemInterface, ItemSelectInterface
+{
+ use ItemTrait;
+
+ /**
+ * @return $this
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function add()
+ {
+ if ($this->checkDuplicatedOnAdd()) {
+ throw new SPException(SPException::SP_WARNING, __('Cliente duplicado', false));
+ }
+
+ $query = /** @lang SQL */
+ 'INSERT INTO customers
+ SET customer_name = ?,
+ customer_description = ?,
+ customer_hash = ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getCustomerName());
+ $Data->addParam($this->itemData->getCustomerDescription());
+ $Data->addParam($this->makeItemHash($this->itemData->getCustomerName()));
+ $Data->setOnErrorMessage(__('Error al crear el cliente', false));
+
+ DB::getQuery($Data);
+
+ $this->itemData->setCustomerId(DB::$lastId);
+
+ return $this;
+ }
+
+ /**
+ * @return bool
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function checkDuplicatedOnAdd()
+ {
+ $query = /** @lang SQL */
+ 'SELECT customer_id FROM customers WHERE customer_hash = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->makeItemHash($this->itemData->getCustomerName()));
+
+ $queryRes = DB::getResults($Data);
+
+ if ($queryRes !== false) {
+ if ($Data->getQueryNumRows() === 0) {
+ return false;
+ } elseif ($Data->getQueryNumRows() === 1) {
+ $this->itemData->setCustomerId($queryRes->customer_id);
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * @param $id int
+ * @return mixed
+ * @throws \SP\Core\Exceptions\QueryException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function delete($id)
+ {
+ if ($this->checkInUse($id)) {
+ throw new SPException(SPException::SP_WARNING, __('No es posible eliminar', false));
+ }
+
+ $query = /** @lang SQL */
+ 'DELETE FROM customers WHERE customer_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($id);
+ $Data->setOnErrorMessage(__('Error al eliminar el cliente', false));
+
+ DB::getQuery($Data);
+
+ if ($Data->getQueryNumRows() === 0) {
+ throw new SPException(SPException::SP_INFO, __('Cliente no encontrado', false));
+ }
+
+ return $this;
+ }
+
+ /**
+ * @param $id int
+ * @return mixed
+ * @throws \SP\Core\Exceptions\QueryException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ */
+ public function checkInUse($id)
+ {
+ $query = /** @lang SQL */
+ 'SELECT account_id FROM accounts WHERE account_customerId = ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($id);
+
+ DB::getQuery($Data);
+
+ return $Data->getQueryNumRows() > 0;
+ }
+
+ /**
+ * @param $id int
+ * @return CustomerData
+ */
+ public function getById($id)
+ {
+ $query = /** @lang SQL */
+ 'SELECT customer_id, customer_name, customer_description FROM customers WHERE customer_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setMapClassName($this->getDataModel());
+ $Data->setQuery($query);
+ $Data->addParam($id);
+
+ return DB::getResults($Data);
+ }
+
+ /**
+ * @return $this
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function update()
+ {
+ if ($this->checkDuplicatedOnUpdate()) {
+ throw new SPException(SPException::SP_WARNING, __('Cliente duplicado', false));
+ }
+
+ $query = /** @lang SQL */
+ 'UPDATE customers
+ SET customer_name = ?,
+ customer_description = ?,
+ customer_hash = ?
+ WHERE customer_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getCustomerName());
+ $Data->addParam($this->itemData->getCustomerDescription());
+ $Data->addParam($this->makeItemHash($this->itemData->getCustomerName()));
+ $Data->addParam($this->itemData->getCustomerId());
+ $Data->setOnErrorMessage(__('Error al actualizar el cliente', false));
+
+ DB::getQuery($Data);
+
+ if ($Data->getQueryNumRows() === 0) {
+ throw new SPException(SPException::SP_INFO, __('Cliente no encontrado', false));
+ }
+
+ return $this;
+ }
+
+ /**
+ * @return bool
+ * @throws \SP\Core\Exceptions\QueryException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ */
+ public function checkDuplicatedOnUpdate()
+ {
+ $query = /** @lang SQL */
+ 'SELECT customer_id FROM customers WHERE customer_hash = ? AND customer_id <> ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->makeItemHash($this->itemData->getCustomerName()));
+ $Data->addParam($this->itemData->getCustomerId());
+
+ DB::getQuery($Data);
+
+ return $Data->getQueryNumRows() > 0;
+ }
+
+ /**
+ * @return CustomerData[]
+ */
+ public function getAll()
+ {
+ $query = /** @lang SQL */
+ 'SELECT customer_id, customer_name, customer_description FROM customers ORDER BY customer_name';
+
+ $Data = new QueryData();
+ $Data->setMapClassName($this->getDataModel());
+ $Data->setQuery($query);
+
+ return DB::getResultsArray($Data);
+ }
+
+ /**
+ * Devolver los clientes visibles por el usuario
+ *
+ * @return array
+ */
+ public function getItemsForSelectByUser()
+ {
+ $Data = new QueryData();
+
+ // Acotar los resultados por usuario
+ $queryWhere = AccountUtil::getAccountFilterUser($Data);
+
+ $query = /** @lang SQL */
+ 'SELECT customer_id as id, customer_name as name
+ FROM accounts
+ RIGHT JOIN customers ON customer_id = account_customerId
+ WHERE account_customerId IS NULL
+ OR (' . implode(' AND ', $queryWhere) . ')
+ GROUP BY customer_id
+ ORDER BY customer_name';
+
+ $Data->setQuery($query);
+
+ return DB::getResultsArray($Data);
+ }
+
+ /**
+ * Devolver los elementos con los ids especificados
+ *
+ * @param array $ids
+ * @return CustomerData[]
+ */
+ public function getByIdBatch(array $ids)
+ {
+ if (count($ids) === 0) {
+ return [];
+ }
+
+ $query = /** @lang SQL */
+ 'SELECT customer_id, customer_name, customer_description FROM customers WHERE customer_id IN (' . $this->getParamsFromArray($ids) . ')';
+
+ $Data = new QueryData();
+ $Data->setMapClassName($this->getDataModel());
+ $Data->setQuery($query);
+ $Data->setParams($ids);
+
+ return DB::getResultsArray($Data);
+ }
+}
diff --git a/inc/SP/Mgmt/Customers/CustomerBase.class.php b/inc/SP/Mgmt/Customers/CustomerBase.class.php
new file mode 100644
index 00000000..b9341f27
--- /dev/null
+++ b/inc/SP/Mgmt/Customers/CustomerBase.class.php
@@ -0,0 +1,66 @@
+.
+ */
+
+namespace SP\Mgmt\Customers;
+
+defined('APP_ROOT') || die();
+
+use SP\DataModel\CustomerData;
+use SP\Mgmt\ItemBase;
+
+/**
+ * Class CustomerBase
+ *
+ * @package SP\Mgmt\Customers
+ */
+abstract class CustomerBase extends ItemBase
+{
+ /** @var CustomerData */
+ protected $itemData;
+
+ /**
+ * Category constructor.
+ *
+ * @param $itemData
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ */
+ public function __construct($itemData = null)
+ {
+ if (!$this->dataModel) {
+ $this->setDataModel(CustomerData::class);
+ }
+
+ parent::__construct($itemData);
+ }
+
+ /**
+ * Devolver los datos del elemento
+ *
+ * @return CustomerData
+ */
+ public function getItemData()
+ {
+ return parent::getItemData();
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Customers/CustomerSearch.class.php b/inc/SP/Mgmt/Customers/CustomerSearch.class.php
new file mode 100644
index 00000000..c6d03466
--- /dev/null
+++ b/inc/SP/Mgmt/Customers/CustomerSearch.class.php
@@ -0,0 +1,72 @@
+.
+ */
+
+namespace SP\Mgmt\Customers;
+
+defined('APP_ROOT') || die();
+
+use SP\DataModel\ItemSearchData;
+use SP\Mgmt\ItemSearchInterface;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+
+/**
+ * Class CustomerSearch
+ *
+ * @package SP\Mgmt\Customers
+ */
+class CustomerSearch extends CustomerBase implements ItemSearchInterface
+{
+ /**
+ * @param ItemSearchData $SearchData
+ * @return mixed
+ */
+ public function getMgmtSearch(ItemSearchData $SearchData)
+ {
+ $Data = new QueryData();
+ $Data->setSelect('customer_id, customer_name, customer_description');
+ $Data->setFrom('customers');
+ $Data->setOrder('customer_name');
+
+ if ($SearchData->getSeachString() !== '') {
+ $Data->setWhere('customer_name LIKE ? OR customer_description LIKE ?');
+
+ $search = '%' . $SearchData->getSeachString() . '%';
+ $Data->addParam($search);
+ $Data->addParam($search);
+ }
+
+ $Data->setLimit('?,?');
+ $Data->addParam($SearchData->getLimitStart());
+ $Data->addParam($SearchData->getLimitCount());
+
+ DB::setFullRowCount();
+
+ $queryRes = DB::getResultsArray($Data);
+
+ $queryRes['count'] = $Data->getQueryNumRows();
+
+ return $queryRes;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Files/File.class.php b/inc/SP/Mgmt/Files/File.class.php
new file mode 100644
index 00000000..f4d74d21
--- /dev/null
+++ b/inc/SP/Mgmt/Files/File.class.php
@@ -0,0 +1,265 @@
+.
+ */
+
+namespace SP\Mgmt\Files;
+
+use SP\Account\AccountUtil;
+use SP\Core\Exceptions\SPException;
+use SP\DataModel\FileData;
+use SP\DataModel\FileExtData;
+use SP\Log\Email;
+use SP\Log\Log;
+use SP\Mgmt\ItemInterface;
+use SP\Mgmt\ItemSelectInterface;
+use SP\Mgmt\ItemTrait;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+use SP\Util\ImageUtil;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Esta clase es la encargada de realizar operaciones con archivos de las cuentas de sysPass
+ */
+class File extends FileBase implements ItemInterface, ItemSelectInterface
+{
+ use ItemTrait;
+
+ /**
+ * @return mixed
+ * @throws \SP\Core\Exceptions\QueryException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ * @throws \phpmailer\phpmailerException
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function add()
+ {
+ $query = /** @lang SQL */
+ 'INSERT INTO accFiles
+ SET accfile_accountId = ?,
+ accfile_name = ?,
+ accfile_type = ?,
+ accfile_size = ?,
+ accfile_content = ?,
+ accfile_extension = ?,
+ accfile_thumb = ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getAccfileAccountId());
+ $Data->addParam($this->itemData->getAccfileName());
+ $Data->addParam($this->itemData->getAccfileType());
+ $Data->addParam($this->itemData->getAccfileSize());
+ $Data->addParam($this->itemData->getAccfileContent());
+ $Data->addParam($this->itemData->getAccfileExtension());
+ $Data->setOnErrorMessage(__('No se pudo guardar el archivo', false));
+
+ if (FileUtil::isImage($this->itemData)) {
+ $thumbnail = ImageUtil::createThumbnail($this->itemData->getAccfileContent());
+
+ if ($thumbnail !== false) {
+ $Data->addParam($thumbnail);
+ } else {
+ $Data->addParam('no_thumb');
+ }
+ } else {
+ $Data->addParam('no_thumb');
+ }
+
+ $Log = new Log();
+ $LogMessage = $Log->getLogMessage();
+ $LogMessage->setAction(__('Subir Archivo', false));
+ $LogMessage->addDetails(__('Cuenta', false), AccountUtil::getAccountNameById($this->itemData->getAccfileAccountId()));
+ $LogMessage->addDetails(__('Archivo', false), $this->itemData->getAccfileName());
+ $LogMessage->addDetails(__('Tipo', false), $this->itemData->getAccfileType());
+ $LogMessage->addDetails(__('Tamaño', false), $this->itemData->getRoundSize() . 'KB');
+
+ DB::getQuery($Data);
+
+ $LogMessage->addDescription(__('Archivo subido', false));
+ $Log->writeLog();
+
+ Email::sendEmail($LogMessage);
+
+ return true;
+ }
+
+ /**
+ * @param $id int
+ * @return mixed
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function delete($id)
+ {
+ // Eliminamos el archivo de la BBDD
+ $query = /** @lang SQL */
+ 'DELETE FROM accFiles WHERE accfile_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($id);
+ $Data->setOnErrorMessage(__('Error al eliminar archivo', false));
+
+ DB::getQuery($Data);
+
+ if ($Data->getQueryNumRows() === 0) {
+ throw new SPException(SPException::SP_INFO, __('Archivo no encontrado', false));
+ }
+
+ return $this;
+ }
+
+ /**
+ * @param $id
+ * @return FileExtData
+ */
+ public function getInfoById($id)
+ {
+ $query = /** @lang SQL */
+ 'SELECT accfile_name,
+ accfile_size,
+ accfile_type,
+ accfile_accountId,
+ accfile_extension,
+ account_name,
+ customer_name
+ FROM accFiles
+ LEFT JOIN accounts ON account_id = accfile_accountId
+ LEFT JOIN customers ON customer_id = account_customerId
+ WHERE accfile_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setMapClassName(FileExtData::class);
+ $Data->setQuery($query);
+ $Data->addParam($id);
+
+ return DB::getResults($Data);
+ }
+
+ /**
+ * @return mixed
+ */
+ public function update()
+ {
+ // TODO: Implement update() method.
+ }
+
+ /**
+ * @param $id int
+ * @return FileExtData
+ */
+ public function getById($id)
+ {
+ $query = /** @lang SQL */
+ 'SELECT accfile_name,
+ accfile_size,
+ accfile_type,
+ accfile_accountId,
+ accfile_content,
+ accfile_thumb,
+ accfile_extension,
+ account_name,
+ customer_name
+ FROM accFiles
+ LEFT JOIN accounts ON account_id = accfile_accountId
+ LEFT JOIN customers ON customer_id = account_customerId
+ WHERE accfile_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setMapClassName(FileExtData::class);
+ $Data->setQuery($query);
+ $Data->addParam($id);
+
+ return DB::getResults($Data);
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getAll()
+ {
+ // TODO: Implement getAll() method.
+ }
+
+ /**
+ * @param $id int
+ * @return mixed
+ */
+ public function checkInUse($id)
+ {
+ // TODO: Implement checkInUse() method.
+ }
+
+ /**
+ * @return bool
+ */
+ public function checkDuplicatedOnUpdate()
+ {
+ // TODO: Implement checkDuplicatedOnUpdate() method.
+ }
+
+ /**
+ * @return bool
+ */
+ public function checkDuplicatedOnAdd()
+ {
+ // TODO: Implement checkDuplicatedOnAdd() method.
+ }
+
+ /**
+ * Devolver los elementos con los ids especificados
+ *
+ * @param array $ids
+ * @return FileExtData[]
+ */
+ public function getByIdBatch(array $ids)
+ {
+ if (count($ids) === 0) {
+ return [];
+ }
+
+ $query = /** @lang SQL */
+ 'SELECT accfile_name,
+ accfile_size,
+ accfile_type,
+ accfile_accountId,
+ accfile_content,
+ accfile_thumb,
+ accfile_extension,
+ account_name,
+ customer_name
+ FROM accFiles
+ LEFT JOIN accounts ON account_id = accfile_accountId
+ LEFT JOIN customers ON customer_id = account_customerId
+ WHERE accfile_id IN (' . $this->getParamsFromArray($ids) . ')';
+
+ $Data = new QueryData();
+ $Data->setMapClassName(FileExtData::class);
+ $Data->setQuery($query);
+ $Data->setParams($ids);
+
+ return DB::getResultsArray($Data);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Files/FileBase.class.php b/inc/SP/Mgmt/Files/FileBase.class.php
new file mode 100644
index 00000000..12541b27
--- /dev/null
+++ b/inc/SP/Mgmt/Files/FileBase.class.php
@@ -0,0 +1,63 @@
+.
+ */
+
+namespace SP\Mgmt\Files;
+
+use SP\DataModel\FileData;
+use SP\Mgmt\ItemBase;
+
+/**
+ * Class FileBase
+ *
+ * @package SP\Mgmt\Files
+ */
+abstract class FileBase extends ItemBase
+{
+ /** @var FileData */
+ protected $itemData;
+
+ /**
+ * Category constructor.
+ *
+ * @param FileData $itemData
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ */
+ public function __construct($itemData = null)
+ {
+ if (!$this->dataModel) {
+ $this->setDataModel(FileData::class);
+ }
+
+ parent::__construct($itemData);
+ }
+
+ /**
+ * Devolver los datos del elemento
+ * @return FileData
+ */
+ public function getItemData()
+ {
+ return parent::getItemData();
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Files/FileSearch.class.php b/inc/SP/Mgmt/Files/FileSearch.class.php
new file mode 100644
index 00000000..6cb3fd7d
--- /dev/null
+++ b/inc/SP/Mgmt/Files/FileSearch.class.php
@@ -0,0 +1,73 @@
+.
+ */
+
+namespace SP\Mgmt\Files;
+
+use SP\DataModel\ItemSearchData;
+use SP\Mgmt\ItemSearchInterface;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+
+/**
+ * Class FileSearch
+ *
+ * @package SP\Mgmt\Files
+ */
+class FileSearch extends FileBase implements ItemSearchInterface
+{
+ /**
+ * @param ItemSearchData $SearchData
+ * @return mixed
+ */
+ public function getMgmtSearch(ItemSearchData $SearchData)
+ {
+ $Data = new QueryData();
+ $Data->setMapClassName('SP\DataModel\FileExtData');
+ $Data->setSelect('accfile_id, accfile_name, CONCAT(ROUND(accfile_size/1000, 2), "KB") AS accfile_size, accfile_thumb, accfile_type, account_name, customer_name');
+ $Data->setFrom('accFiles JOIN accounts ON account_id = accfile_accountId JOIN customers ON customer_id = account_customerId');
+ $Data->setOrder('accfile_name');
+
+ if ($SearchData->getSeachString() !== '') {
+ $Data->setWhere('accfile_name LIKE ? OR accfile_type LIKE ? OR account_name LIKE ? OR customer_name LIKE ?');
+
+ $search = '%' . $SearchData->getSeachString() . '%';
+ $Data->addParam($search);
+ $Data->addParam($search);
+ $Data->addParam($search);
+ $Data->addParam($search);
+ }
+
+ $Data->setLimit('?,?');
+ $Data->addParam($SearchData->getLimitStart());
+ $Data->addParam($SearchData->getLimitCount());
+
+ DB::setFullRowCount();
+
+ $queryRes = DB::getResultsArray($Data);
+
+ $queryRes['count'] = $Data->getQueryNumRows();
+
+ return $queryRes;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Files/FileUtil.class.php b/inc/SP/Mgmt/Files/FileUtil.class.php
new file mode 100644
index 00000000..dba7b904
--- /dev/null
+++ b/inc/SP/Mgmt/Files/FileUtil.class.php
@@ -0,0 +1,115 @@
+.
+ */
+
+namespace SP\Mgmt\Files;
+
+use SP\Core\Exceptions\SPException;
+use SP\DataModel\FileData;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+
+/**
+ * Class FileUtil
+ *
+ * @package SP\Mgmt\Files
+ */
+class FileUtil
+{
+ /**
+ * @var array
+ */
+ public static $imageExtensions = ['JPG', 'PNG', 'GIF'];
+
+ /**
+ * Obtener el listado de archivos de una cuenta.
+ *
+ * @param int $accountId Con el Id de la cuenta
+ * @return FileData[]|array Con los archivos de la cuenta.
+ */
+ public static function getAccountFiles($accountId)
+ {
+ $query = 'SELECT accfile_id,
+ accfile_name,
+ accfile_size,
+ accfile_thumb,
+ accfile_type
+ FROM accFiles
+ WHERE accfile_accountId = ?';
+
+ $Data = new QueryData();
+ $Data->setMapClassName('SP\DataModel\FileData');
+ $Data->setQuery($query);
+ $Data->addParam($accountId);
+
+ return DB::getResultsArray($Data);
+ }
+
+ /**
+ * Obtener el número de archivo de una cuenta.
+ *
+ * @param int $accountId con el Id de la cuenta
+ * @return int con el número de archivos
+ * @throws \SP\Core\Exceptions\QueryException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ */
+ public static function countAccountFiles($accountId)
+ {
+ $query = 'SELECT accfile_id FROM accFiles WHERE accfile_accountId = ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($accountId);
+
+ DB::getQuery($Data);
+
+ return $Data->getQueryNumRows();
+ }
+
+ /**
+ * Elimina los archivos de una cuenta en la BBDD.
+ *
+ * @param int $accountId con el Id de la cuenta
+ * @throws SPException
+ */
+ public static function deleteAccountFiles($accountId)
+ {
+ $query = 'DELETE FROM accFiles WHERE accfile_accountId = ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($accountId);
+ $Data->setOnErrorMessage(__('Error al eliminar archivos asociados a la cuenta', false));
+
+ DB::getQuery($Data);
+ }
+
+ /**
+ * @param FileData $FileData
+ * @return bool
+ */
+ public static function isImage(FileData $FileData)
+ {
+ return in_array(strtoupper($FileData->getAccfileExtension()), FileUtil::$imageExtensions);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Groups/Group.class.php b/inc/SP/Mgmt/Groups/Group.class.php
new file mode 100644
index 00000000..9ef68c58
--- /dev/null
+++ b/inc/SP/Mgmt/Groups/Group.class.php
@@ -0,0 +1,277 @@
+.
+ */
+
+namespace SP\Mgmt\Groups;
+
+use SP\Core\Exceptions\SPException;
+use SP\DataModel\GroupData;
+use SP\DataModel\GroupUsersData;
+use SP\Log\Log;
+use SP\Mgmt\ItemInterface;
+use SP\Mgmt\ItemSelectInterface;
+use SP\Mgmt\ItemTrait;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Esta clase es la encargada de realizar las operaciones sobre los grupos de usuarios.
+ */
+class Group extends GroupBase implements ItemInterface, ItemSelectInterface
+{
+ use ItemTrait;
+
+ /**
+ * @return $this
+ * @throws \SP\Core\Exceptions\QueryException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function add()
+ {
+ if ($this->checkDuplicatedOnAdd()) {
+ throw new SPException(SPException::SP_INFO, __('Nombre de grupo duplicado', false));
+ }
+
+ $query = /** @lang SQL */
+ 'INSERT INTO usrGroups SET usergroup_name = ?, usergroup_description = ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getUsergroupName());
+ $Data->addParam($this->itemData->getUsergroupDescription());
+ $Data->setOnErrorMessage(__('Error al crear el grupo', false));
+
+ DB::getQuery($Data);
+
+ $this->itemData->setUsergroupId(DB::$lastId);
+
+ $GroupUsers = new GroupUsersData();
+ $GroupUsers->setUsertogroupGroupId($this->itemData->getUsergroupId());
+ $GroupUsers->setUsers($this->itemData->getUsers());
+
+ GroupUsers::getItem($GroupUsers)->add();
+
+ return $this;
+ }
+
+ /**
+ * @return bool
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function checkDuplicatedOnAdd()
+ {
+ $query = /** @lang SQL */
+ 'SELECT usergroup_name FROM usrGroups WHERE UPPER(usergroup_name) = ?';
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getUsergroupName());
+
+ DB::getQuery($Data);
+
+ return $Data->getQueryNumRows() > 0;
+ }
+
+ /**
+ * @param $id int
+ * @return $this
+ * @throws \SP\Core\Exceptions\QueryException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function delete($id)
+ {
+ if ($this->checkInUse($id)) {
+ throw new SPException(SPException::SP_WARNING, __('Grupo en uso', false));
+ }
+
+ $query = /** @lang SQL */
+ 'DELETE FROM usrGroups WHERE usergroup_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($id);
+ $Data->setOnErrorMessage(__('Error al eliminar el grupo', false));
+
+ DB::getQuery($Data);
+
+ if ($Data->getQueryNumRows() === 0) {
+ throw new SPException(SPException::SP_INFO, __('Grupo no encontrado', false));
+ }
+
+ GroupUsers::getItem()->delete($id);
+
+ return $this;
+ }
+
+ /**
+ * @param $id int
+ * @return bool
+ * @throws \SP\Core\Exceptions\QueryException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ */
+ public function checkInUse($id)
+ {
+ $query = /** @lang SQL */
+ 'SELECT user_groupId as groupId
+ FROM usrData WHERE user_groupId = ?
+ UNION ALL
+ SELECT usertogroup_groupId as groupId
+ FROM usrToGroups WHERE usertogroup_groupId = ?
+ UNION ALL
+ SELECT accgroup_groupId as groupId
+ FROM accGroups WHERE accgroup_groupId = ?
+ UNION ALL
+ SELECT account_userGroupId as groupId
+ FROM accounts WHERE account_userGroupId = ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($id);
+ $Data->addParam($id);
+ $Data->addParam($id);
+ $Data->addParam($id);
+
+ DB::getQuery($Data);
+
+ return ($Data->getQueryNumRows() > 1);
+ }
+
+ /**
+ * @param $id int
+ * @return GroupData
+ */
+ public function getById($id)
+ {
+ $query = /** @lang SQL */
+ 'SELECT usergroup_id, usergroup_name, usergroup_description FROM usrGroups WHERE usergroup_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setMapClassName($this->getDataModel());
+ $Data->setQuery($query);
+ $Data->addParam($id);
+
+ return DB::getResults($Data);
+ }
+
+ /**
+ * @return $this
+ * @throws \SP\Core\Exceptions\QueryException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ * @throws \phpmailer\phpmailerException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function update()
+ {
+ if ($this->checkDuplicatedOnUpdate()) {
+ throw new SPException(SPException::SP_INFO, __('Nombre de grupo duplicado', false));
+ }
+
+ $query = /** @lang SQL */
+ 'UPDATE usrGroups SET usergroup_name = ?, usergroup_description = ? WHERE usergroup_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getUsergroupName());
+ $Data->addParam($this->itemData->getUsergroupDescription());
+ $Data->addParam($this->itemData->getUsergroupId());
+ $Data->setOnErrorMessage(__('Error al actualizar el grupo', false));
+
+ DB::getQuery($Data);
+
+ $GroupUsers = new GroupUsersData();
+ $GroupUsers->setUsertogroupGroupId($this->itemData->getUsergroupId());
+ $GroupUsers->setUsers($this->itemData->getUsers());
+
+ GroupUsers::getItem($GroupUsers)->update();
+
+ return $this;
+ }
+
+ /**
+ * @return bool
+ * @throws \SP\Core\Exceptions\QueryException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ */
+ public function checkDuplicatedOnUpdate()
+ {
+ $query = /** @lang SQL */
+ 'SELECT usergroup_name FROM usrGroups WHERE UPPER(usergroup_name) = ? AND usergroup_id <> ?';
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getUsergroupName());
+ $Data->addParam($this->itemData->getUsergroupId());
+
+ DB::getQuery($Data);
+
+ return $Data->getQueryNumRows() > 0;
+ }
+
+ /**
+ * @return GroupData[]
+ */
+ public function getAll()
+ {
+ $query = /** @lang SQL */
+ 'SELECT usergroup_id,
+ usergroup_name,
+ usergroup_description
+ FROM usrGroups
+ ORDER BY usergroup_name';
+
+ $Data = new QueryData();
+ $Data->setMapClassName($this->getDataModel());
+ $Data->setQuery($query);
+
+ return DB::getResultsArray($Data);
+ }
+
+ /**
+ * Devolver los elementos con los ids especificados
+ *
+ * @param array $ids
+ * @return GroupData[]
+ */
+ public function getByIdBatch(array $ids)
+ {
+ if (count($ids) === 0) {
+ return [];
+ }
+
+ $query = /** @lang SQL */
+ 'SELECT usergroup_id, usergroup_name, usergroup_description FROM usrGroups WHERE usergroup_id IN (' . $this->getParamsFromArray($ids) . ')';
+
+ $Data = new QueryData();
+ $Data->setMapClassName($this->getDataModel());
+ $Data->setQuery($query);
+ $Data->setParams($ids);
+
+ return DB::getResultsArray($Data);
+ }
+}
diff --git a/inc/SP/Mgmt/Groups/GroupAccounts.class.php b/inc/SP/Mgmt/Groups/GroupAccounts.class.php
new file mode 100644
index 00000000..36bf895f
--- /dev/null
+++ b/inc/SP/Mgmt/Groups/GroupAccounts.class.php
@@ -0,0 +1,193 @@
+.
+ */
+
+namespace SP\Mgmt\Groups;
+
+defined('APP_ROOT') || die();
+
+use SP\Core\Exceptions\SPException;
+use SP\DataModel\GroupAccountsData;
+use SP\Mgmt\ItemInterface;
+use SP\Mgmt\ItemTrait;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+
+/**
+ * Class GroupAccounts
+ *
+ * @package SP\Mgmt\Groups
+ */
+class GroupAccounts extends GroupAccountsBase implements ItemInterface
+{
+ use ItemTrait;
+
+ /**
+ * @return $this
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function update()
+ {
+ $this->delete($this->itemData->getAccgroupAccountId());
+ $this->add();
+
+ return $this;
+ }
+
+ /**
+ * @param $id int
+ * @return $this
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function delete($id)
+ {
+ $query = /** @lang SQL */
+ 'DELETE FROM accGroups WHERE accgroup_accountId = ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($id);
+ $Data->setOnErrorMessage(__('Error al eliminar grupos asociados a la cuenta', false));
+
+ DB::getQuery($Data);
+
+ return $this;
+ }
+
+ /**
+ * @return $this
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function add()
+ {
+ if (!is_array($this->itemData->getGroups())
+ || count($this->itemData->getGroups()) === 0
+ ) {
+ return $this;
+ }
+
+ $query = /** @lang SQL */
+ 'INSERT INTO accGroups (accgroup_accountId, accgroup_groupId) VALUES ' . $this->getParamsFromArray($this->itemData->getGroups(), '(?,?)');
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+
+ foreach ($this->itemData->getGroups() as $group) {
+ $Data->addParam($this->itemData->getAccgroupAccountId());
+ $Data->addParam($group);
+ }
+
+ $Data->setOnErrorMessage(__('Error al actualizar los grupos secundarios', false));
+
+ DB::getQuery($Data);
+
+ return $this;
+ }
+
+ /**
+ * @param $id int
+ * @return array
+ */
+ public function getById($id)
+ {
+ $query = /** @lang SQL */
+ 'SELECT accgroup_groupId, accgroup_accountId FROM accGroups WHERE accgroup_groupId = ?';
+
+ $Data = new QueryData();
+ $Data->setMapClassName($this->getDataModel());
+ $Data->setQuery($query);
+ $Data->addParam($id);
+
+ return DB::getResultsArray($Data);
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getAll()
+ {
+ // TODO: Implement getAll() method.
+ }
+
+ /**
+ * @param $id int
+ * @return bool
+ */
+ public function checkInUse($id)
+ {
+ $query = /** @lang SQL */
+ 'SELECT accgroup_groupId FROM accGroups WHERE accgroup_groupId = ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($id);
+
+ DB::getResults($Data);
+
+ return ($Data->getQueryNumRows() > 1);
+ }
+
+ /**
+ * @return bool
+ */
+ public function checkDuplicatedOnUpdate()
+ {
+ // TODO: Implement checkDuplicatedOnUpdate() method.
+ }
+
+ /**
+ * @return bool
+ */
+ public function checkDuplicatedOnAdd()
+ {
+ // TODO: Implement checkDuplicatedOnAdd() method.
+ }
+
+ /**
+ * @param $id int
+ * @return GroupAccountsData[]
+ */
+ public function getByAccountId($id)
+ {
+ $query = /** @lang SQL */
+ 'SELECT accgroup_groupId, accgroup_accountId FROM accGroups WHERE accgroup_accountId = ?';
+
+ $Data = new QueryData();
+ $Data->setMapClassName($this->getDataModel());
+ $Data->setQuery($query);
+ $Data->addParam($id);
+
+ return DB::getResultsArray($Data);
+ }
+
+ /**
+ * Devolver los elementos con los ids especificados
+ *
+ * @param array $ids
+ * @return mixed
+ */
+ public function getByIdBatch(array $ids)
+ {
+ // TODO: Implement getByIdBatch() method.
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Groups/GroupAccountsBase.class.php b/inc/SP/Mgmt/Groups/GroupAccountsBase.class.php
new file mode 100644
index 00000000..be745387
--- /dev/null
+++ b/inc/SP/Mgmt/Groups/GroupAccountsBase.class.php
@@ -0,0 +1,63 @@
+.
+ */
+
+namespace SP\Mgmt\Groups;
+
+use SP\DataModel\GroupAccountsData;
+use SP\Mgmt\ItemBase;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class GroupAccountsBase
+ *
+ * @package SP\Mgmt\Groups
+ */
+abstract class GroupAccountsBase extends ItemBase
+{
+ /** @var GroupAccountsData */
+ protected $itemData;
+
+ /**
+ * Category constructor.
+ *
+ * @param GroupAccountsData $itemData
+ */
+ public function __construct($itemData = null)
+ {
+ if (!$this->dataModel) {
+ $this->setDataModel('SP\DataModel\GroupAccountsData');
+ }
+
+ parent::__construct($itemData);
+ }
+
+ /**
+ * @return GroupAccountsData
+ */
+ public function getItemData()
+ {
+ return parent::getItemData();
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Groups/GroupAccountsUtil.class.php b/inc/SP/Mgmt/Groups/GroupAccountsUtil.class.php
new file mode 100644
index 00000000..fcbc6fb8
--- /dev/null
+++ b/inc/SP/Mgmt/Groups/GroupAccountsUtil.class.php
@@ -0,0 +1,82 @@
+.
+ */
+
+namespace SP\Mgmt\Groups;
+
+defined('APP_ROOT') || die();
+
+use SP\DataModel\GroupData;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+
+/**
+ * Class GroupAccountsUtil
+ *
+ * @package SP\Mgmt\Groups
+ */
+class GroupAccountsUtil
+{
+ /**
+ * Obtiene el listado con el nombre de los grupos de una cuenta.
+ *
+ * @param int $accountId con el Id de la cuenta
+ * @return GroupData[]
+ */
+ public static function getGroupsInfoForAccount($accountId)
+ {
+ $query = /** @lang SQL */
+ 'SELECT usergroup_id,
+ usergroup_name
+ FROM accGroups
+ JOIN usrGroups ON accgroup_groupId = usergroup_id
+ WHERE accgroup_accountId = ?
+ ORDER BY usergroup_name';
+
+ $Data = new QueryData();
+ $Data->setMapClassName(GroupData::class);
+ $Data->setQuery($query);
+ $Data->addParam($accountId);
+
+ return DB::getResultsArray($Data);
+ }
+
+ /**
+ * Obtiene el listado de grupos de una cuenta.
+ *
+ * @param int $accountId con el Id de la cuenta
+ * @return array Con los ids de los grupos
+ */
+ public static function getGroupsForAccount($accountId)
+ {
+ $GroupAccountsData = GroupAccounts::getItem()->getByAccountId($accountId);
+
+ $groups = [];
+
+ foreach ($GroupAccountsData as $Group) {
+ $groups[] = (int)$Group->getAccgroupGroupId();
+ }
+
+ return $groups;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Groups/GroupBase.class.php b/inc/SP/Mgmt/Groups/GroupBase.class.php
new file mode 100644
index 00000000..1e030f3d
--- /dev/null
+++ b/inc/SP/Mgmt/Groups/GroupBase.class.php
@@ -0,0 +1,62 @@
+.
+ */
+
+namespace SP\Mgmt\Groups;
+
+use SP\DataModel\GroupData;
+use SP\Mgmt\ItemBase;
+
+/**
+ * Class GroupBase
+ *
+ * @package SP\Mgmt\Groups
+ */
+abstract class GroupBase extends ItemBase
+{
+ /** @var GroupData */
+ protected $itemData;
+
+ /**
+ * Category constructor.
+ *
+ * @param GroupData $itemData
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ */
+ public function __construct($itemData = null)
+ {
+ if (!$this->dataModel) {
+ $this->setDataModel(GroupData::class);
+ }
+
+ parent::__construct($itemData);
+ }
+
+ /**
+ * @return GroupData
+ */
+ public function getItemData()
+ {
+ return parent::getItemData();
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Groups/GroupSearch.class.php b/inc/SP/Mgmt/Groups/GroupSearch.class.php
new file mode 100644
index 00000000..689e1800
--- /dev/null
+++ b/inc/SP/Mgmt/Groups/GroupSearch.class.php
@@ -0,0 +1,73 @@
+.
+ */
+
+namespace SP\Mgmt\Groups;
+
+defined('APP_ROOT') || die();
+
+use SP\DataModel\ItemSearchData;
+use SP\Mgmt\ItemSearchInterface;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+
+/**
+ * Class GroupSearch
+ *
+ * @package SP\Mgmt\Groups
+ */
+class GroupSearch extends GroupBase implements ItemSearchInterface
+{
+ /**
+ * @param ItemSearchData $SearchData
+ * @return mixed
+ */
+ public function getMgmtSearch(ItemSearchData $SearchData)
+ {
+ $Data = new QueryData();
+ $Data->setMapClassName($this->getDataModel());
+ $Data->setSelect('usergroup_id, usergroup_name, usergroup_description');
+ $Data->setFrom('usrGroups');
+ $Data->setOrder('usergroup_name');
+
+ if ($SearchData->getSeachString() !== '') {
+ $Data->setWhere('usergroup_name LIKE ? OR usergroup_description LIKE ?');
+
+ $search = '%' . $SearchData->getSeachString() . '%';
+ $Data->addParam($search);
+ $Data->addParam($search);
+ }
+
+ $Data->setLimit('?,?');
+ $Data->addParam($SearchData->getLimitStart());
+ $Data->addParam($SearchData->getLimitCount());
+
+ DB::setFullRowCount();
+
+ $queryRes = DB::getResultsArray($Data);
+
+ $queryRes['count'] = $Data->getQueryNumRows();
+
+ return $queryRes;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Groups/GroupUsers.class.php b/inc/SP/Mgmt/Groups/GroupUsers.class.php
new file mode 100644
index 00000000..56f4fa89
--- /dev/null
+++ b/inc/SP/Mgmt/Groups/GroupUsers.class.php
@@ -0,0 +1,179 @@
+.
+ */
+
+namespace SP\Mgmt\Groups;
+
+defined('APP_ROOT') || die();
+
+use SP\Core\Exceptions\SPException;
+use SP\DataModel\GroupUsersData;
+use SP\Mgmt\ItemInterface;
+use SP\Mgmt\ItemSelectInterface;
+use SP\Mgmt\ItemTrait;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+
+/**
+ * Class GroupUser
+ *
+ * @package SP\Mgmt\Groups
+ */
+class GroupUsers extends GroupUsersBase implements ItemInterface, ItemSelectInterface
+{
+ use ItemTrait;
+
+ /**
+ * @return $this
+ * @throws SPException
+ */
+ public function add()
+ {
+ if (!is_array($this->itemData->getUsers())
+ || count($this->itemData->getUsers()) === 0
+ ) {
+ return $this;
+ }
+
+ $query = /** @lang SQL */
+ 'INSERT INTO usrToGroups (usertogroup_userId, usertogroup_groupId) VALUES ' . $this->getParamsFromArray($this->itemData->getUsers(), '(?,?)');
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+
+ foreach ($this->itemData->getUsers() as $user){
+ $Data->addParam($user);
+ $Data->addParam($this->itemData->getUsertogroupGroupId());
+ }
+
+ $Data->setOnErrorMessage(__('Error al asignar los usuarios al grupo', false));
+
+ DB::getQuery($Data);
+
+ return $this;
+ }
+
+ /**
+ * @param $id int
+ * @return $this
+ * @throws SPException
+ */
+ public function delete($id)
+ {
+ $query = /** @lang SQL */
+ 'DELETE FROM usrToGroups WHERE usertogroup_groupId = ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($id);
+ $Data->setOnErrorMessage(__('Error al eliminar los usuarios del grupo', false));
+
+ DB::getQuery($Data);
+
+ return $this;
+ }
+
+ /**
+ * @return $this
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function update()
+ {
+ $this->delete($this->itemData->getUsertogroupGroupId());
+ $this->add();
+
+ return $this;
+ }
+
+ /**
+ * @param $id int
+ * @return GroupUsersData[]
+ */
+ public function getById($id)
+ {
+ $query = /** @lang SQL */
+ 'SELECT usertogroup_groupId, usertogroup_userId FROM usrToGroups WHERE usertogroup_groupId = ?';
+
+ $Data = new QueryData();
+ $Data->setMapClassName($this->getDataModel());
+ $Data->setQuery($query);
+ $Data->addParam($id);
+
+ return DB::getResultsArray($Data);
+ }
+
+ /**
+ * Devolver los usuarios que están asociados al grupo
+ *
+ * @return mixed
+ */
+ public function getAll()
+ {
+ // TODO: Implement getAll() method.
+ }
+
+ /**
+ * @param $id int
+ * @return mixed
+ */
+ public function checkInUse($id)
+ {
+ $query = /** @lang SQL */
+ 'SELECT usertogroup_groupId FROM usrToGroups WHERE usertogroup_groupId = ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($id);
+
+ DB::getResults($Data);
+
+ return ($Data->getQueryNumRows() > 1);
+ }
+
+ /**
+ * @return bool
+ */
+ public function checkDuplicatedOnUpdate()
+ {
+ // TODO: Implement checkDuplicatedOnUpdate() method.
+ }
+
+ /**
+ * @return bool
+ */
+ public function checkDuplicatedOnAdd()
+ {
+ // TODO: Implement checkDuplicatedOnAdd() method.
+ }
+
+ /**
+ * Devolver los elementos con los ids especificados
+ *
+ * @param array $ids
+ * @return mixed
+ */
+ public function getByIdBatch(array $ids)
+ {
+ // TODO: Implement getByIdBatch() method.
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Groups/GroupUsersBase.class.php b/inc/SP/Mgmt/Groups/GroupUsersBase.class.php
new file mode 100644
index 00000000..6d4cce52
--- /dev/null
+++ b/inc/SP/Mgmt/Groups/GroupUsersBase.class.php
@@ -0,0 +1,62 @@
+.
+ */
+
+namespace SP\Mgmt\Groups;
+
+use SP\DataModel\GroupUsersData;
+use SP\Mgmt\ItemBase;
+
+/**
+ * Class GroupUserBase
+ *
+ * @package SP\Mgmt\Groups
+ */
+abstract class GroupUsersBase extends ItemBase
+{
+ /** @var GroupUsersData */
+ protected $itemData;
+
+ /**
+ * Category constructor.
+ *
+ * @param GroupUsersData $itemData
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ */
+ public function __construct($itemData = null)
+ {
+ if (!$this->dataModel) {
+ $this->setDataModel(GroupUsersData::class);
+ }
+
+ parent::__construct($itemData);
+ }
+
+ /**
+ * @return GroupUsersData
+ */
+ public function getItemData()
+ {
+ return parent::getItemData();
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Groups/GroupUtil.class.php b/inc/SP/Mgmt/Groups/GroupUtil.class.php
new file mode 100644
index 00000000..cd57149a
--- /dev/null
+++ b/inc/SP/Mgmt/Groups/GroupUtil.class.php
@@ -0,0 +1,57 @@
+.
+ */
+
+namespace SP\Mgmt\Groups;
+
+
+use SP\DataModel\GroupData;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+
+/**
+ * Class GroupsUtil
+ *
+ * @package SP\Mgmt\Groups
+ */
+class GroupUtil
+{
+ /**
+ * Obtener el id de un grupo por a partir del nombre.
+ *
+ * @param int $name con el nombre del grupo
+ * @return GroupData|false
+ */
+ public static function getGroupIdByName($name)
+ {
+ $query = /** @lang SQL */
+ 'SELECT usergroup_id, usergroup_name FROM usrGroups WHERE usergroup_name = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setMapClassName(GroupData::class);
+ $Data->setQuery($query);
+ $Data->addParam($name);
+
+ return DB::getResults($Data);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/ItemBase.class.php b/inc/SP/Mgmt/ItemBase.class.php
new file mode 100644
index 00000000..16c22c6a
--- /dev/null
+++ b/inc/SP/Mgmt/ItemBase.class.php
@@ -0,0 +1,135 @@
+.
+ */
+
+namespace SP\Mgmt;
+
+use SP\Core\DiFactory;
+use SP\Core\Exceptions\InvalidClassException;
+use SP\Core\Exceptions\SPException;
+use SP\DataModel\DataModelInterface;
+
+/**
+ * Class ItemBase
+ *
+ * @package SP\Mgmt
+ */
+abstract class ItemBase
+{
+ /**
+ * @var string
+ */
+ protected $dataModel;
+ /**
+ * @var mixed|DataModelInterface
+ */
+ protected $itemData;
+
+ /**
+ * Constructor.
+ *
+ * @param null $itemData
+ * @throws InvalidClassException
+ */
+ public function __construct($itemData = null)
+ {
+ if (null !== $itemData) {
+ $this->setItemData($itemData);
+ } else {
+ $this->itemData = new $this->dataModel();
+ }
+ }
+
+ /**
+ * Devolver la instancia almacenada de la clase. Si no existe, se crea
+ *
+ * @param $itemData
+ * @return static
+ */
+ public final static function getItem($itemData = null)
+ {
+ return DiFactory::getItem(get_called_class(), $itemData);
+ }
+
+ /**
+ * Devolver una nueva instancia de la clase
+ *
+ * @param null $itemData
+ * @return static
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ */
+ public static final function getNewItem($itemData = null)
+ {
+ return new static($itemData);
+ }
+
+ /**
+ * Devolver los datos del elemento
+ *
+ * @return mixed|DataModelInterface
+ */
+ public function getItemData()
+ {
+ return is_object($this->itemData) ? $this->itemData : new $this->dataModel();
+ }
+
+ /**
+ * @param $itemData
+ * @return $this
+ * @throws InvalidClassException
+ */
+ public final function setItemData($itemData)
+ {
+ if (null !== $this->dataModel && !$itemData instanceof $this->dataModel) {
+ throw new InvalidClassException(SPException::SP_ERROR, $this->dataModel);
+ }
+
+ $this->itemData = $itemData;
+
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getDataModel()
+ {
+ return $this->dataModel;
+ }
+
+ /**
+ * @param string $dataModel
+ * @return $this
+ * @throws InvalidClassException
+ */
+ protected final function setDataModel($dataModel)
+ {
+ if (false === class_exists($dataModel)) {
+ throw new InvalidClassException($dataModel);
+ }
+
+ $this->dataModel = $dataModel;
+
+ return $this;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/ItemInterface.class.php b/inc/SP/Mgmt/ItemInterface.class.php
new file mode 100644
index 00000000..5a27628c
--- /dev/null
+++ b/inc/SP/Mgmt/ItemInterface.class.php
@@ -0,0 +1,111 @@
+.
+ */
+
+namespace SP\Mgmt;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Interface Item para la implementación de clases de elementos
+ *
+ * @package SP\Mgmt
+ */
+interface ItemInterface
+{
+ /**
+ * @param $itemData
+ * @return static
+ */
+ public static function getItem($itemData = null);
+
+ /**
+ * @return mixed
+ */
+ public function add();
+
+ /**
+ * @param $id int|array
+ * @return mixed
+ */
+ public function delete($id);
+
+ /**
+ * @return mixed
+ */
+ public function update();
+
+ /**
+ * @param $id int
+ * @return mixed
+ */
+ public function getById($id);
+
+ /**
+ * @return mixed
+ */
+ public function getAll();
+
+ /**
+ * @param $itemData
+ * @return mixed
+ */
+ public function setItemData($itemData);
+
+ /**
+ * @return mixed
+ */
+ public function getItemData();
+
+ /**
+ * @param $id int
+ * @return mixed
+ */
+ public function checkInUse($id);
+
+ /**
+ * @return bool
+ */
+ public function checkDuplicatedOnUpdate();
+
+ /**
+ * @return bool
+ */
+ public function checkDuplicatedOnAdd();
+
+ /**
+ * Eliminar elementos en lote
+ *
+ * @param array $ids
+ * @return $this
+ */
+ public function deleteBatch(array $ids);
+
+ /**
+ * Devolver los elementos con los ids especificados
+ *
+ * @param array $ids
+ * @return mixed
+ */
+ public function getByIdBatch(array $ids);
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/ItemSearchInterface.class.php b/inc/SP/Mgmt/ItemSearchInterface.class.php
new file mode 100644
index 00000000..1b3561dc
--- /dev/null
+++ b/inc/SP/Mgmt/ItemSearchInterface.class.php
@@ -0,0 +1,43 @@
+.
+ */
+
+namespace SP\Mgmt;
+
+use SP\DataModel\ItemSearchData;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Interface ItemSearchInterface para la implementación de clases con búsqueda de elementos
+ *
+ * @package SP\Mgmt
+ */
+interface ItemSearchInterface
+{
+ /**
+ * @param ItemSearchData $SearchData
+ * @return mixed
+ */
+ public function getMgmtSearch(ItemSearchData $SearchData);
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/ItemSelectInterface.class.php b/inc/SP/Mgmt/ItemSelectInterface.class.php
new file mode 100644
index 00000000..069a8b4c
--- /dev/null
+++ b/inc/SP/Mgmt/ItemSelectInterface.class.php
@@ -0,0 +1,38 @@
+.
+ */
+
+namespace SP\Mgmt;
+
+/**
+ * Interface ItemSelectInterface
+ *
+ * @package SP\Mgmt
+ */
+interface ItemSelectInterface
+{
+ /**
+ * @return array
+ */
+ public function getItemsForSelect();
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/ItemTrait.class.php b/inc/SP/Mgmt/ItemTrait.class.php
new file mode 100644
index 00000000..5a08f642
--- /dev/null
+++ b/inc/SP/Mgmt/ItemTrait.class.php
@@ -0,0 +1,110 @@
+.
+ */
+
+namespace SP\Mgmt;
+
+use SP\Core\Exceptions\SPException;
+use SP\DataModel\DataModelInterface;
+use SP\Storage\DBUtil;
+
+/**
+ * Class ItemTrait
+ *
+ * @package SP\Mgmt
+ */
+trait ItemTrait
+{
+ /**
+ * Devolver los elementos para un campo select
+ *
+ * @return array
+ */
+ public function getItemsForSelect()
+ {
+ $items = [];
+
+ /** @var DataModelInterface $item */
+ /** @var ItemInterface $this */
+ foreach ($this->getAll() as $item) {
+ $obj = new \stdClass();
+ $obj->id = (int)$item->getId();
+ $obj->name = $item->getName();
+
+ $items[] = $obj;
+ }
+
+ return $items;
+ }
+
+ /**
+ * Eliminar elementos en lotes
+ *
+ * @param $ids
+ * @return array
+ */
+ public function deleteBatch(array $ids)
+ {
+ $items = $this->getByIdBatch($ids);
+
+ /** @var DataModelInterface[] $items */
+ foreach ($items as $key => $item) {
+ try {
+ $this->delete($item->getId());
+ } catch (SPException $e) {
+ unset($items[$key]);
+ }
+ }
+
+ return $items;
+ }
+
+ /**
+ * Crear un hash con el nombre del elemento.
+ *
+ * Esta función crear un hash para detectar nombres de elementos duplicados mediante
+ * la eliminación de carácteres especiales y capitalización
+ *
+ * @param $name
+ * @return string con el hash generado
+ */
+ protected function makeItemHash($name)
+ {
+ $charsSrc = ['.', ' ', '_', ', ', '-', ';', '\'', '"', ':', '(', ')', '|', '/'];
+ $newValue = strtolower(str_replace($charsSrc, '', DBUtil::escape($name)));
+
+ return md5($newValue);
+ }
+
+ /**
+ * Devuelve una cadena con los parámetros para una consulta SQL desde un array
+ *
+ * @param array $items
+ * @param string $string Cadena a utilizar para los parámetros
+ * @return string
+ */
+ protected function getParamsFromArray(array $items, $string = '?')
+ {
+ return implode(',', array_fill(0, count($items), $string));
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Notices/Notice.class.php b/inc/SP/Mgmt/Notices/Notice.class.php
new file mode 100644
index 00000000..2710f0c4
--- /dev/null
+++ b/inc/SP/Mgmt/Notices/Notice.class.php
@@ -0,0 +1,392 @@
+.
+ */
+
+namespace SP\Mgmt\Notices;
+
+use SP\Core\Exceptions\SPException;
+use SP\Core\Session;
+use SP\DataModel\NoticeData;
+use SP\Mgmt\ItemInterface;
+use SP\Mgmt\ItemTrait;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+
+/**
+ * Class Notice
+ *
+ * @package SP\Mgmt\Notices
+ */
+class Notice extends NoticeBase implements ItemInterface
+{
+ use ItemTrait;
+
+ /**
+ * @return $this
+ * @throws SPException
+ */
+ public function add()
+ {
+ $query = /** @lang SQL */
+ 'INSERT INTO notices
+ SET notice_type = ?,
+ notice_component = ?,
+ notice_description = ?,
+ notice_date = UNIX_TIMESTAMP(),
+ notice_checked = 0,
+ notice_userId = ?,
+ notice_sticky = ?,
+ notice_onlyAdmin = ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getNoticeType());
+ $Data->addParam($this->itemData->getNoticeComponent());
+ $Data->addParam($this->itemData->getNoticeDescription());
+ $Data->addParam($this->itemData->getNoticeUserId());
+ $Data->addParam($this->itemData->isNoticeSticky());
+ $Data->addParam($this->itemData->isNoticeOnlyAdmin());
+ $Data->setOnErrorMessage(__('Error al crear la notificación', false));
+
+ DB::getQuery($Data);
+
+ $this->itemData->setNoticeId(DB::$lastId);
+
+ return $this;
+ }
+
+ /**
+ * @param $id int
+ * @return $this
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function delete($id)
+ {
+ if (Session::getUserData()->isUserIsAdminApp()) {
+ $query = 'DELETE FROM notices WHERE notice_id = ? LIMIT 1';
+ } else {
+ $query = 'DELETE FROM notices WHERE notice_id = ? AND BIN(notice_sticky) = 0 LIMIT 1';
+ }
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($id);
+ $Data->setOnErrorMessage(__('Error al eliminar la notificación', false));
+
+ DB::getQuery($Data);
+
+ if ($Data->getQueryNumRows() === 0) {
+ throw new SPException(SPException::SP_INFO, __('Notificación no encontrada', false));
+ }
+
+ return $this;
+ }
+
+ /**
+ * @return $this
+ * @throws SPException
+ */
+ public function update()
+ {
+ $query = /** @lang SQL */
+ 'UPDATE notices
+ SET notice_type = ?,
+ notice_component = ?,
+ notice_description = ?,
+ notice_date = UNIX_TIMESTAMP(),
+ notice_checked = 0,
+ notice_userId = ?,
+ notice_sticky = ?,
+ notice_onlyAdmin = ?
+ WHERE notice_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getNoticeType());
+ $Data->addParam($this->itemData->getNoticeComponent());
+ $Data->addParam($this->itemData->getNoticeDescription());
+ $Data->addParam($this->itemData->getNoticeUserId());
+ $Data->addParam($this->itemData->isNoticeSticky());
+ $Data->addParam($this->itemData->isNoticeOnlyAdmin());
+ $Data->addParam($this->itemData->getNoticeId());
+ $Data->setOnErrorMessage(__('Error al modificar la notificación', false));
+
+ DB::getQuery($Data);
+
+ if ($Data->getQueryNumRows() === 0) {
+ throw new SPException(SPException::SP_INFO, __('Notificación no encontrada', false));
+ }
+
+ return $this;
+ }
+
+ /**
+ * @param $id int
+ * @return NoticeData
+ * @throws SPException
+ */
+ public function getById($id)
+ {
+ $query = /** @lang SQL */
+ 'SELECT notice_id,
+ notice_type,
+ notice_component,
+ notice_description,
+ FROM_UNIXTIME(notice_date) AS notice_date,
+ notice_userId,
+ BIN(notice_checked) AS notice_checked,
+ BIN(notice_sticky) as notice_sticky,
+ BIN(notice_onlyAdmin) AS notice_onlyAdmin
+ FROM notices
+ WHERE notice_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->setMapClassName($this->getDataModel());
+ $Data->addParam($id);
+
+ try {
+ $queryRes = DB::getResults($Data);
+ } catch (SPException $e) {
+ throw new SPException(SPException::SP_ERROR, __('Error al obtener la notificación', false));
+ }
+
+ return $queryRes;
+ }
+
+ /**
+ * @return NoticeData[]
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function getAll()
+ {
+ $query = /** @lang SQL */
+ 'SELECT notice_id
+ notice_type,
+ notice_component,
+ notice_description,
+ FROM_UNIXTIME(notice_date) AS notice_date,
+ notice_userId,
+ BIN(notice_checked) AS notice_checked,
+ BIN(notice_sticky) as notice_sticky,
+ BIN(notice_onlyAdmin) AS notice_onlyAdmin
+ FROM notices';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->setMapClassName($this->getDataModel());
+
+ try {
+ $queryRes = DB::getResultsArray($Data);
+ } catch (SPException $e) {
+ throw new SPException(SPException::SP_ERROR, __('Error al obtener las notificaciones', false));
+ }
+
+ return $queryRes;
+ }
+
+ /**
+ * @param $id int
+ * @return mixed
+ */
+ public function checkInUse($id)
+ {
+ // TODO: Implement checkInUse() method.
+ }
+
+ /**
+ * @return bool
+ */
+ public function checkDuplicatedOnUpdate()
+ {
+ // TODO: Implement checkDuplicatedOnUpdate() method.
+ }
+
+ /**
+ * @return bool
+ */
+ public function checkDuplicatedOnAdd()
+ {
+ // TODO: Implement checkDuplicatedOnAdd() method.
+ }
+
+ /**
+ * Marcar una notificación como leída
+ *
+ * @param $id
+ * @return $this
+ * @throws SPException
+ */
+ public function setChecked($id)
+ {
+ $query = /** @lang SQL */
+ 'UPDATE notices SET notice_checked = 1 WHERE notice_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($id);
+ $Data->setOnErrorMessage(__('Error al modificar la notificación', false));
+
+ DB::getQuery($Data);
+
+ $this->itemData->setNoticeId(DB::$lastId);
+
+ return $this;
+ }
+
+ /**
+ * Devolver las notificaciones de un usuario para una fecha y componente determinados
+ *
+ * @return mixed
+ * @throws SPException
+ */
+ public function getByUserCurrentDate()
+ {
+ $query = /** @lang SQL */
+ 'SELECT notice_type,
+ notice_component,
+ notice_description,
+ notice_date,
+ notice_userId,
+ BIN(notice_checked) AS notice_checked,
+ BIN(notice_sticky) as notice_sticky,
+ BIN(notice_onlyAdmin) AS notice_onlyAdmin
+ FROM notices
+ WHERE notice_component = ? AND
+ (UNIX_TIMESTAMP() - notice_date) <= 86400 AND
+ notice_userId = ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->setMapClassName($this->getDataModel());
+ $Data->addParam($this->itemData->getNoticeComponent());
+ $Data->addParam($this->itemData->getNoticeUserId());
+
+ try {
+ $queryRes = DB::getResultsArray($Data);
+ } catch (SPException $e) {
+ throw new SPException(SPException::SP_ERROR, __('Error al obtener las notificaciones', false));
+ }
+
+ return $queryRes;
+ }
+
+ /**
+ * @return NoticeData[]
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function getAllForUser()
+ {
+ $query = /** @lang SQL */
+ 'SELECT notice_id,
+ notice_type,
+ notice_component,
+ notice_description,
+ FROM_UNIXTIME(notice_date) AS notice_date,
+ notice_userId,
+ BIN(notice_checked) AS notice_checked,
+ BIN(notice_sticky) as notice_sticky,
+ BIN(notice_onlyAdmin) AS notice_onlyAdmin
+ FROM notices
+ WHERE notice_userId = ? OR (notice_userId = NULL AND BIN(notice_onlyAdmin) = 0) OR BIN(notice_sticky) = 1
+ ORDER BY notice_date DESC ';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->setMapClassName($this->getDataModel());
+ $Data->addParam(Session::getUserData()->getUserId());
+
+ try {
+ $queryRes = DB::getResultsArray($Data);
+ } catch (SPException $e) {
+ throw new SPException(SPException::SP_ERROR, __('Error al obtener las notificaciones', false));
+ }
+
+ return $queryRes;
+ }
+
+ /**
+ * @return NoticeData[]
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function getAllActiveForUser()
+ {
+ $query = /** @lang SQL */
+ 'SELECT notice_id,
+ notice_type,
+ notice_component,
+ notice_description,
+ FROM_UNIXTIME(notice_date) AS notice_date,
+ notice_userId,
+ BIN(notice_checked) AS notice_checked,
+ BIN(notice_sticky) as notice_sticky,
+ BIN(notice_onlyAdmin) AS notice_onlyAdmin
+ FROM notices
+ WHERE (notice_userId = ? OR BIN(notice_sticky) = 1)
+ AND BIN(notice_onlyAdmin) = 0
+ AND BIN(notice_checked) = 0
+ ORDER BY notice_date DESC ';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->setMapClassName($this->getDataModel());
+ $Data->addParam(Session::getUserData()->getUserId());
+
+ try {
+ $queryRes = DB::getResultsArray($Data);
+ } catch (SPException $e) {
+ throw new SPException(SPException::SP_ERROR, __('Error al obtener las notificaciones', false));
+ }
+
+ return $queryRes;
+ }
+
+ /**
+ * Devolver los elementos con los ids especificados
+ *
+ * @param array $ids
+ * @return mixed
+ */
+ public function getByIdBatch(array $ids)
+ {
+ $query = /** @lang SQL */
+ 'SELECT notice_id,
+ notice_type,
+ notice_component,
+ notice_description,
+ FROM_UNIXTIME(notice_date) AS notice_date,
+ notice_userId,
+ BIN(notice_checked) AS notice_checked,
+ BIN(notice_sticky) as notice_sticky,
+ BIN(notice_onlyAdmin) AS notice_onlyAdmin
+ FROM notices
+ WHERE notice_id IN (' . $this->getParamsFromArray($ids) . ')';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->setMapClassName($this->getDataModel());
+ $Data->setParams($ids);
+
+ return DB::getResultsArray($Data);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Notices/NoticeBase.class.php b/inc/SP/Mgmt/Notices/NoticeBase.class.php
new file mode 100644
index 00000000..a3523d77
--- /dev/null
+++ b/inc/SP/Mgmt/Notices/NoticeBase.class.php
@@ -0,0 +1,65 @@
+.
+ */
+
+namespace SP\Mgmt\Notices;
+
+defined('APP_ROOT') || die();
+
+use SP\DataModel\NoticeData;
+use SP\Mgmt\ItemBase;
+
+/**
+ * Class NoticeBase
+ *
+ * @package SP\Mgmt\Notices
+ */
+abstract class NoticeBase extends ItemBase
+{
+ /** @var NoticeData */
+ protected $itemData;
+
+ /**
+ * Notice constructor.
+ *
+ * @param $itemData
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ */
+ public function __construct($itemData = null)
+ {
+ if (!$this->dataModel) {
+ $this->setDataModel(NoticeData::class);
+ }
+
+ parent::__construct($itemData);
+ }
+
+ /**
+ * Devolver los datos del elemento
+ * @return NoticeData
+ */
+ public function getItemData()
+ {
+ return parent::getItemData();
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Notices/NoticeSearch.class.php b/inc/SP/Mgmt/Notices/NoticeSearch.class.php
new file mode 100644
index 00000000..0b944450
--- /dev/null
+++ b/inc/SP/Mgmt/Notices/NoticeSearch.class.php
@@ -0,0 +1,114 @@
+.
+ */
+
+namespace SP\Mgmt\Notices;
+
+defined('APP_ROOT') || die();
+
+use SP\Core\Session;
+use SP\DataModel\ItemSearchData;
+use SP\Mgmt\ItemSearchInterface;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+
+/**
+ * Class NoticeSearch
+ *
+ * @package SP\Mgmt\Categories
+ */
+class NoticeSearch extends NoticeBase implements ItemSearchInterface
+{
+ /**
+ * Obtiene el listado de categorías mediante una búsqueda
+ *
+ * @param ItemSearchData $SearchData
+ * @return array con el id de categoria como clave y en nombre como valor
+ */
+ public function getMgmtSearch(ItemSearchData $SearchData)
+ {
+ $Data = new QueryData();
+ $Data->setSelect('notice_id, notice_type, notice_component, notice_description, FROM_UNIXTIME(notice_date) AS notice_date, notice_checked, notice_userId, notice_sticky, notice_onlyAdmin');
+ $Data->setFrom('notices');
+ $Data->setOrder('notice_date DESC');
+
+ if ($SearchData->getSeachString() !== '') {
+ $Data->setWhere('(notice_type LIKE ? OR notice_component LIKE ? OR notice_description LIKE ?) AND notice_onlyAdmin = 0');
+
+ $search = '%' . $SearchData->getSeachString() . '%';
+ $Data->addParam($search);
+ $Data->addParam($search);
+ $Data->addParam($search);
+ }
+
+ $Data->setLimit('?,?');
+ $Data->addParam($SearchData->getLimitStart());
+ $Data->addParam($SearchData->getLimitCount());
+
+ DB::setFullRowCount();
+
+ /** @var array $queryRes */
+ $queryRes = DB::getResultsArray($Data);
+
+ $queryRes['count'] = $Data->getQueryNumRows();
+
+ return $queryRes;
+ }
+
+ /**
+ * Obtiene el listado de categorías mediante una búsqueda
+ *
+ * @param ItemSearchData $SearchData
+ * @return array con el id de categoria como clave y en nombre como valor
+ */
+ public function getMgmtSearchUser(ItemSearchData $SearchData)
+ {
+ $Data = new QueryData();
+ $Data->setSelect('notice_id, notice_type, notice_component, notice_description, FROM_UNIXTIME(notice_date) AS notice_date, notice_checked, notice_userId, notice_sticky, notice_onlyAdmin');
+ $Data->setFrom('notices');
+ $Data->setOrder('notice_date DESC');
+
+ if ($SearchData->getSeachString() !== '') {
+ $Data->setWhere('(notice_type LIKE ? OR notice_component LIKE ? OR notice_description LIKE ?) AND notice_userId = ? AND notice_onlyAdmin = 0');
+
+ $search = '%' . $SearchData->getSeachString() . '%';
+ $Data->addParam($search);
+ $Data->addParam($search);
+ $Data->addParam($search);
+ $Data->addParam(Session::getUserData()->getUserId());
+ }
+
+ $Data->setLimit('?,?');
+ $Data->addParam($SearchData->getLimitStart());
+ $Data->addParam($SearchData->getLimitCount());
+
+ DB::setFullRowCount();
+
+ /** @var array $queryRes */
+ $queryRes = DB::getResultsArray($Data);
+
+ $queryRes['count'] = $Data->getQueryNumRows();
+
+ return $queryRes;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Plugins/Plugin.class.php b/inc/SP/Mgmt/Plugins/Plugin.class.php
new file mode 100644
index 00000000..d579f87c
--- /dev/null
+++ b/inc/SP/Mgmt/Plugins/Plugin.class.php
@@ -0,0 +1,276 @@
+.
+ */
+
+namespace SP\Mgmt\Plugins;
+
+use SP\Core\Exceptions\SPException;
+use SP\DataModel\PluginData;
+use SP\Mgmt\ItemInterface;
+use SP\Mgmt\ItemTrait;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+
+/**
+ * Class Plugin
+ *
+ * @package SP\Mgmt\Plugins
+ */
+class Plugin extends PluginBase implements ItemInterface
+{
+ use ItemTrait;
+
+ /**
+ * Añade un nuevo plugin
+ *
+ * @return $this
+ * @throws SPException
+ */
+ public function add()
+ {
+ $query = /** @lang SQL */
+ 'INSERT INTO plugins SET plugin_name = ?, plugin_data = ?, plugin_enabled = ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getPluginName());
+ $Data->addParam($this->itemData->getPluginData());
+ $Data->addParam($this->itemData->getPluginEnabled());
+ $Data->setOnErrorMessage(__('Error al crear el plugin', false));
+
+ DB::getQuery($Data);
+
+ $this->itemData->setPluginId(DB::$lastId);
+
+ return $this;
+ }
+
+ /**
+ * Eliminar un plugin
+ *
+ * @param $name string
+ * @return mixed
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function delete($name)
+ {
+ $query = /** @lang SQL */
+ 'DELETE FROM plugins WHERE plugin_name = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($name);
+ $Data->setOnErrorMessage(__('Error al eliminar el plugin', false));
+
+ DB::getQuery($Data);
+
+ if ($Data->getQueryNumRows() === 0) {
+ throw new SPException(SPException::SP_INFO, __('Plugin no encontrado', false));
+ }
+
+ return $this;
+ }
+
+ /**
+ * Actualizar los datos de un plugin
+ *
+ * @return $this
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function update()
+ {
+ $query = /** @lang SQL */
+ 'UPDATE plugins
+ SET plugin_name = ?,
+ plugin_data = ?,
+ plugin_enabled = ?
+ WHERE plugin_name = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getPluginName());
+ $Data->addParam($this->itemData->getPluginData());
+ $Data->addParam($this->itemData->getPluginEnabled());
+ $Data->addParam($this->itemData->getPluginName());
+ $Data->setOnErrorMessage(__('Error al actualizar el plugin', false));
+
+ DB::getQuery($Data);
+
+ if ($Data->getQueryNumRows() === 0) {
+ throw new SPException(SPException::SP_INFO, __('Plugin no encontrado', false));
+ }
+
+ return $this;
+ }
+
+ /**
+ * Devuelve los datos de un plugin por su id
+ *
+ * @param $id int
+ * @return bool|PluginData
+ */
+ public function getById($id)
+ {
+ $query = /** @lang SQL */
+ 'SELECT plugin_id, plugin_name, plugin_data, BIN(plugin_enabled) AS plugin_enabled FROM plugins WHERE plugin_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setMapClassName($this->getDataModel());
+ $Data->setQuery($query);
+ $Data->addParam($id);
+
+ return DB::getResults($Data);
+ }
+
+ /**
+ * Devolver todos los plugins
+ *
+ * @return PluginData[]
+ */
+ public function getAll()
+ {
+ $query = /** @lang SQL */
+ 'SELECT plugin_id, plugin_name, BIN(plugin_enabled) AS plugin_enabled FROM plugins ORDER BY plugin_name';
+
+ $Data = new QueryData();
+ $Data->setMapClassName($this->getDataModel());
+ $Data->setQuery($query);
+
+ return DB::getResultsArray($Data);
+ }
+
+ /**
+ * @param $id int
+ * @return mixed
+ */
+ public function checkInUse($id)
+ {
+ // TODO: Implement checkInUse() method.
+ }
+
+ /**
+ * @return bool
+ */
+ public function checkDuplicatedOnUpdate()
+ {
+ // TODO: Implement checkDuplicatedOnUpdate() method.
+ }
+
+ /**
+ * @return bool
+ */
+ public function checkDuplicatedOnAdd()
+ {
+ // TODO: Implement checkDuplicatedOnAdd() method.
+ }
+
+ /**
+ * Devuelve los datos de un plugin por su nombre
+ *
+ * @param $name int
+ * @return mixed
+ */
+ public function getByName($name)
+ {
+ $query = /** @lang SQL */
+ 'SELECT plugin_id, plugin_name, plugin_data, BIN(plugin_enabled) AS plugin_enabled FROM plugins WHERE plugin_name = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setMapClassName($this->getDataModel());
+ $Data->setQuery($query);
+ $Data->addParam($name);
+
+ return DB::getResults($Data);
+ }
+
+ /**
+ * Cambiar el estado del plugin
+ *
+ * @return $this
+ * @throws SPException
+ */
+ public function toggle()
+ {
+ $query = /** @lang SQL */
+ 'UPDATE plugins
+ SET plugin_enabled = ?
+ WHERE plugin_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getPluginEnabled());
+ $Data->addParam($this->itemData->getPluginId());
+ $Data->setOnErrorMessage(__('Error al actualizar el plugin', false));
+
+ DB::getQuery($Data);
+
+ return $this;
+ }
+
+ /**
+ * Restablecer los datos de un plugin
+ *
+ * @param int $id Id del plugin
+ * @return $this
+ * @throws SPException
+ */
+ public function reset($id)
+ {
+ $query = /** @lang SQL */
+ 'UPDATE plugins
+ SET plugin_data = NULL
+ WHERE plugin_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($id);
+ $Data->setOnErrorMessage(__('Error al actualizar el plugin', false));
+
+ DB::getQuery($Data);
+
+ return $this;
+ }
+
+ /**
+ * Devolver los elementos con los ids especificados
+ *
+ * @param array $ids
+ * @return PluginData[]
+ */
+ public function getByIdBatch(array $ids)
+ {
+ if (count($ids) === 0) {
+ return [];
+ }
+
+ $query = /** @lang SQL */
+ 'SELECT plugin_id, plugin_name, BIN(plugin_enabled) AS plugin_enabled FROM plugins WHERE plugin_id IN (' . $this->getParamsFromArray($ids) . ')';
+
+ $Data = new QueryData();
+ $Data->setMapClassName($this->getDataModel());
+ $Data->setQuery($query);
+ $Data->setParams($ids);
+
+ return DB::getResultsArray($Data);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Plugins/PluginBase.class.php b/inc/SP/Mgmt/Plugins/PluginBase.class.php
new file mode 100644
index 00000000..2ce29761
--- /dev/null
+++ b/inc/SP/Mgmt/Plugins/PluginBase.class.php
@@ -0,0 +1,65 @@
+.
+ */
+
+namespace SP\Mgmt\Plugins;
+
+defined('APP_ROOT') || die();
+
+use SP\DataModel\PluginData;
+use SP\Mgmt\ItemBase;
+
+/**
+ * Class CategoryBase
+ *
+ * @package SP\Mgmt\Categories
+ */
+abstract class PluginBase extends ItemBase
+{
+ /** @var PluginData */
+ protected $itemData;
+
+ /**
+ * Plugin constructor.
+ *
+ * @param $itemData
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ */
+ public function __construct($itemData = null)
+ {
+ if (!$this->dataModel) {
+ $this->setDataModel(PluginData::class);
+ }
+
+ parent::__construct($itemData);
+ }
+
+ /**
+ * Devolver los datos del elemento
+ * @return PluginData
+ */
+ public function getItemData()
+ {
+ return parent::getItemData();
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Plugins/PluginSearch.class.php b/inc/SP/Mgmt/Plugins/PluginSearch.class.php
new file mode 100644
index 00000000..05d24405
--- /dev/null
+++ b/inc/SP/Mgmt/Plugins/PluginSearch.class.php
@@ -0,0 +1,72 @@
+.
+ */
+
+namespace SP\Mgmt\Plugins;
+
+use SP\DataModel\ItemSearchData;
+use SP\Mgmt\ItemSearchInterface;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+
+/**
+ * Class PluginSearch
+ *
+ * @package SP\Mgmt\Plugins
+ */
+class PluginSearch extends PluginBase implements ItemSearchInterface
+{
+ /**
+ * Búsqueda de plugins
+ *
+ * @param ItemSearchData $SearchData
+ * @return mixed
+ */
+ public function getMgmtSearch(ItemSearchData $SearchData)
+ {
+ $Data = new QueryData();
+ $Data->setSelect('plugin_id, plugin_name, BIN(plugin_enabled) AS plugin_enabled');
+ $Data->setFrom('plugins');
+ $Data->setOrder('plugin_name');
+
+ if ($SearchData->getSeachString() !== '') {
+ $Data->setWhere('plugin_name LIKE ?');
+
+ $search = '%' . $SearchData->getSeachString() . '%';
+ $Data->addParam($search);
+ }
+
+ $Data->setLimit('?,?');
+ $Data->addParam($SearchData->getLimitStart());
+ $Data->addParam($SearchData->getLimitCount());
+
+ DB::setFullRowCount();
+
+ /** @var array $queryRes */
+ $queryRes = DB::getResultsArray($Data);
+
+ $queryRes['count'] = $Data->getQueryNumRows();
+
+ return $queryRes;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Profiles/Profile.class.php b/inc/SP/Mgmt/Profiles/Profile.class.php
new file mode 100644
index 00000000..bfff2394
--- /dev/null
+++ b/inc/SP/Mgmt/Profiles/Profile.class.php
@@ -0,0 +1,284 @@
+.
+ */
+
+namespace SP\Mgmt\Profiles;
+
+defined('APP_ROOT') || die();
+
+use SP\Core\Exceptions\SPException;
+use SP\Core\Session;
+use SP\DataModel\ProfileBaseData;
+use SP\DataModel\ProfileData;
+use SP\Mgmt\ItemInterface;
+use SP\Mgmt\ItemSelectInterface;
+use SP\Mgmt\ItemTrait;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+use SP\Util\Util;
+
+
+/**
+ * Esta clase es la encargada de realizar las operaciones sobre los perfiles de usuarios.
+ */
+class Profile extends ProfileBase implements ItemInterface, ItemSelectInterface
+{
+ use ItemTrait;
+
+ /**
+ * @return $this
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function add()
+ {
+ if ($this->checkDuplicatedOnAdd()) {
+ throw new SPException(SPException::SP_INFO, __('Nombre de perfil duplicado', false));
+ }
+
+ $query = /** @lang SQL */
+ 'INSERT INTO usrProfiles SET
+ userprofile_name = ?,
+ userprofile_profile = ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getUserprofileName());
+ $Data->addParam(serialize($this->itemData));
+ $Data->setOnErrorMessage(__('Error al crear perfil', false));
+
+ DB::getQuery($Data);
+
+ $this->itemData->setUserprofileId(DB::getLastId());
+
+ return $this;
+ }
+
+ /**
+ * @return bool
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function checkDuplicatedOnAdd()
+ {
+ $query = /** @lang SQL */
+ 'SELECT userprofile_name
+ FROM usrProfiles
+ WHERE UPPER(userprofile_name) = ?';
+
+ $Data = new QueryData();
+ $Data->addParam($this->itemData->getUserprofileName());
+ $Data->setQuery($query);
+
+ DB::getQuery($Data);
+
+ return ($Data->getQueryNumRows() > 0);
+ }
+
+ /**
+ * @param $id int
+ * @return $this
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function delete($id)
+ {
+ if ($this->checkInUse($id)) {
+ throw new SPException(SPException::SP_INFO, __('Perfil en uso', false));
+ }
+
+ $query = /** @lang SQL */
+ 'DELETE FROM usrProfiles WHERE userprofile_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($id);
+ $Data->setOnErrorMessage(__('Error al eliminar perfil', false));
+
+ DB::getQuery($Data);
+
+ if ($Data->getQueryNumRows() === 0) {
+ throw new SPException(SPException::SP_INFO, __('Perfil no encontrado', false));
+ }
+
+ return $this;
+ }
+
+ /**
+ * @param $id int
+ * @return bool
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function checkInUse($id)
+ {
+ $query = /** @lang SQL */
+ 'SELECT user_profileId FROM usrData WHERE user_profileId = ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($id);
+
+ DB::getQuery($Data);
+
+ return ($Data->getQueryNumRows() > 0);
+ }
+
+ /**
+ * @param $id int
+ * @return ProfileData
+ */
+ public function getById($id)
+ {
+ $query = /** @lang SQL */
+ 'SELECT userprofile_id,
+ userprofile_name,
+ userprofile_profile
+ FROM usrProfiles
+ WHERE userprofile_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setMapClassName($this->getDataModel());
+ $Data->setQuery($query);
+ $Data->addParam($id);
+
+ /**
+ * @var ProfileBaseData $queryRes
+ * @var ProfileData $Profile
+ */
+ $queryRes = DB::getResults($Data);
+
+ $Profile = Util::castToClass($this->getDataModel(), $queryRes->getUserprofileProfile());
+ $Profile->setUserprofileId($queryRes->getUserprofileId());
+ $Profile->setUserprofileName($queryRes->getUserprofileName());
+
+ return $Profile;
+ }
+
+ /**
+ * @return $this
+ * @throws SPException
+ */
+ public function update()
+ {
+ if ($this->checkDuplicatedOnUpdate()) {
+ throw new SPException(SPException::SP_INFO, __('Nombre de perfil duplicado', false));
+ }
+
+ $query = /** @lang SQL */
+ 'UPDATE usrProfiles SET
+ userprofile_name = ?,
+ userprofile_profile = ?
+ WHERE userprofile_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getUserprofileName());
+ $Data->addParam(serialize($this->itemData));
+ $Data->addParam($this->itemData->getUserprofileId());
+ $Data->setOnErrorMessage(__('Error al modificar perfil', false));
+
+ DB::getQuery($Data);
+
+ if ($Data->getQueryNumRows() === 0) {
+ throw new SPException(SPException::SP_INFO, __('Perfil no encontrado', false));
+ }
+
+ $this->updateSessionProfile();
+
+ return $this;
+ }
+
+ /**
+ * @return bool
+ * @throws \SP\Core\Exceptions\QueryException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ */
+ public function checkDuplicatedOnUpdate()
+ {
+ $query = /** @lang SQL */
+ 'SELECT userprofile_name
+ FROM usrProfiles
+ WHERE UPPER(userprofile_name) = ?
+ AND userprofile_id <> ?';
+
+ $Data = new QueryData();
+ $Data->addParam($this->itemData->getUserprofileName());
+ $Data->addParam($this->itemData->getUserprofileId());
+ $Data->setQuery($query);
+
+ DB::getQuery($Data);
+
+ return ($Data->getQueryNumRows() > 0);
+ }
+
+ /**
+ * Actualizar el perfil de la sesión
+ */
+ protected function updateSessionProfile()
+ {
+ if (Session::getUserProfile()->getUserprofileId() === $this->itemData->getUserprofileId()) {
+ Session::setUserProfile($this->itemData);
+ }
+ }
+
+ /**
+ * @return ProfileData[]
+ */
+ public function getAll()
+ {
+ $query = /** @lang SQL */
+ 'SELECT userprofile_id, userprofile_name
+ FROM usrProfiles
+ ORDER BY userprofile_name';
+
+ $Data = new QueryData();
+ $Data->setMapClassName($this->getDataModel());
+ $Data->setQuery($query);
+
+ return DB::getResultsArray($Data);
+ }
+
+ /**
+ * Devolver los elementos con los ids especificados
+ *
+ * @param array $ids
+ * @return ProfileBaseData[]
+ */
+ public function getByIdBatch(array $ids)
+ {
+ if (count($ids) === 0) {
+ return [];
+ }
+
+ $query = /** @lang SQL */
+ 'SELECT userprofile_id,
+ userprofile_name
+ FROM usrProfiles
+ WHERE userprofile_id IN (' . $this->getParamsFromArray($ids) . ')';
+
+ $Data = new QueryData();
+ $Data->setMapClassName($this->getDataModel());
+ $Data->setQuery($query);
+ $Data->setParams($ids);
+
+ return DB::getResultsArray($Data);
+ }
+}
diff --git a/inc/SP/Mgmt/Profiles/ProfileBase.class.php b/inc/SP/Mgmt/Profiles/ProfileBase.class.php
new file mode 100644
index 00000000..23cbc70f
--- /dev/null
+++ b/inc/SP/Mgmt/Profiles/ProfileBase.class.php
@@ -0,0 +1,64 @@
+.
+ */
+
+namespace SP\Mgmt\Profiles;
+
+use SP\DataModel\ProfileData;
+use SP\Mgmt\ItemBase;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Clase ProfileBase para la definición de perfiles de acceso de usuarios
+ *
+ * @package SP
+ */
+abstract class ProfileBase extends ItemBase
+{
+ /** @var ProfileData */
+ protected $itemData;
+
+ /**
+ * Category constructor.
+ *
+ * @param ProfileData $itemData
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ */
+ public function __construct($itemData = null)
+ {
+ if (!$this->dataModel) {
+ $this->setDataModel(ProfileData::class);
+ }
+
+ parent::__construct($itemData);
+ }
+
+ /**
+ * @return ProfileData
+ */
+ public function getItemData()
+ {
+ return parent::getItemData();
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Profiles/ProfileSearch.class.php b/inc/SP/Mgmt/Profiles/ProfileSearch.class.php
new file mode 100644
index 00000000..f1361da6
--- /dev/null
+++ b/inc/SP/Mgmt/Profiles/ProfileSearch.class.php
@@ -0,0 +1,71 @@
+.
+ */
+
+namespace SP\Mgmt\Profiles;
+
+defined('APP_ROOT') || die();
+
+use SP\DataModel\ItemSearchData;
+use SP\Mgmt\ItemSearchInterface;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+
+/**
+ * Class ProfileSearch
+ *
+ * @package SP\Mgmt\Profiles
+ */
+class ProfileSearch extends ProfileBase implements ItemSearchInterface
+{
+ /**
+ * @param ItemSearchData $SearchData
+ * @return mixed
+ */
+ public function getMgmtSearch(ItemSearchData $SearchData)
+ {
+ $Data = new QueryData();
+ $Data->setSelect('userprofile_id, userprofile_name');
+ $Data->setFrom('usrProfiles');
+ $Data->setOrder('userprofile_name');
+
+ if ($SearchData->getSeachString() !== '') {
+ $Data->setWhere('userprofile_name LIKE ?');
+
+ $search = '%' . $SearchData->getSeachString() . '%';
+ $Data->addParam($search);
+ }
+
+ $Data->setLimit('?,?');
+ $Data->addParam($SearchData->getLimitStart());
+ $Data->addParam($SearchData->getLimitCount());
+
+ DB::setFullRowCount();
+
+ $queryRes = DB::getResultsArray($Data);
+
+ $queryRes['count'] = $Data->getQueryNumRows();
+
+ return $queryRes;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Profiles/ProfileUtil.class.php b/inc/SP/Mgmt/Profiles/ProfileUtil.class.php
new file mode 100644
index 00000000..42332b99
--- /dev/null
+++ b/inc/SP/Mgmt/Profiles/ProfileUtil.class.php
@@ -0,0 +1,176 @@
+.
+ */
+
+namespace SP\Mgmt\Profiles;
+
+use SP\Core\Exceptions\SPException;
+use SP\DataModel\ProfileData;
+use SP\Log\Email;
+use SP\Log\Log;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class ProfileUtil
+ *
+ * @package SP\Mgmt\User
+ */
+class ProfileUtil
+{
+ /**
+ * Migrar los perfiles con formato anterior a v1.2
+ *
+ * @return bool
+ * @throws \phpmailer\phpmailerException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public static function migrateProfiles()
+ {
+ $Log = new Log();
+ $LogMessage = $Log->getLogMessage();
+ $LogMessage->setAction(__('Migrar Perfiles', false));
+
+ $query = /** @lang SQL */
+ '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';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+
+ $queryRes = DB::getResultsArray($Data);
+
+ if (count($queryRes) === 0) {
+ $LogMessage->addDescription(__('Error al obtener perfiles', false));
+ $Log->setLogLevel(Log::ERROR);
+ $Log->writeLog();
+ return false;
+ }
+
+ foreach ($queryRes as $oldProfile) {
+ $ProfileData = new ProfileData();
+ $ProfileData->setUserprofileId($oldProfile->id);
+ $ProfileData->setUserprofileName($oldProfile->name);
+ $ProfileData->setAccAdd($oldProfile->pAdd);
+ $ProfileData->setAccView($oldProfile->pView);
+ $ProfileData->setAccViewPass($oldProfile->pViewPass);
+ $ProfileData->setAccViewHistory($oldProfile->pViewHistory);
+ $ProfileData->setAccEdit($oldProfile->pEdit);
+ $ProfileData->setAccEditPass($oldProfile->pEditPass);
+ $ProfileData->setAccDelete($oldProfile->pDelete);
+ $ProfileData->setConfigGeneral($oldProfile->pConfig);
+ $ProfileData->setConfigEncryption($oldProfile->pConfigMasterPass);
+ $ProfileData->setConfigBackup($oldProfile->pConfigBackup);
+ $ProfileData->setMgmCategories($oldProfile->pAppMgmtCategories);
+ $ProfileData->setMgmCustomers($oldProfile->pAppMgmtCustomers);
+ $ProfileData->setMgmUsers($oldProfile->pUsers);
+ $ProfileData->setMgmGroups($oldProfile->pGroups);
+ $ProfileData->setMgmProfiles($oldProfile->pProfiles);
+ $ProfileData->setEvl($oldProfile->pEventlog);
+
+ try {
+ Profile::getItem($ProfileData)->add();
+ } catch (SPException $e) {
+ return false;
+ }
+ }
+
+ $query = /** @lang SQL */
+ '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';
+
+ $Data->setQuery($query);
+
+ try {
+ DB::getQuery($Data);
+
+ $LogMessage->addDescription(__('Operación realizada correctamente', false));
+ $Log->writeLog();
+ Email::sendEmail($LogMessage);
+ return true;
+ } catch (SPException $e) {
+ $LogMessage->addDescription(__('Fallo al realizar la operación', false));
+ $Log->writeLog();
+ Email::sendEmail($LogMessage);
+ return false;
+ }
+ }
+
+ /**
+ * Obtener el nombre de los usuarios que usan un perfil.
+ *
+ * @param $id int El id del perfil
+ * @return array
+ */
+ public static function getProfileInUsersName($id)
+ {
+ $query = /** @lang SQL */
+ 'SELECT user_login FROM usrData WHERE user_profileId = ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($id);
+
+ return DB::getResultsArray($Data);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/PublicLinks/PublicLink.class.php b/inc/SP/Mgmt/PublicLinks/PublicLink.class.php
new file mode 100644
index 00000000..4a511baa
--- /dev/null
+++ b/inc/SP/Mgmt/PublicLinks/PublicLink.class.php
@@ -0,0 +1,403 @@
+.
+ */
+
+namespace SP\Mgmt\PublicLinks;
+
+use SP\Account\AccountUtil;
+use SP\Config\Config;
+use SP\Core\Exceptions\SPException;
+use SP\Core\Session;
+use SP\DataModel\PublicLinkBaseData;
+use SP\DataModel\PublicLinkData;
+use SP\DataModel\PublicLinkListData;
+use SP\Log\Email;
+use SP\Log\Log;
+use SP\Mgmt\ItemInterface;
+use SP\Mgmt\ItemTrait;
+use SP\Mgmt\Users\UserUtil;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+use SP\Util\Util;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class PublicLink para la creación de enlaces públicos
+ *
+ * @package SP
+ */
+class PublicLink extends PublicLinkBase implements ItemInterface
+{
+ use ItemTrait;
+
+ /**
+ * Tipos de enlaces
+ */
+ const TYPE_ACCOUNT = 1;
+
+ /**
+ * Incrementar el contador de visitas de un enlace
+ *
+ * @return bool
+ * @throws \phpmailer\phpmailerException
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function addLinkView()
+ {
+ $this->itemData->addCountViews();
+ $this->updateUseInfo($_SERVER['REMOTE_ADDR']);
+
+ $Log = new Log();
+ $LogMessage = $Log->getLogMessage();
+ $LogMessage->setAction(__('Ver Enlace Público', false));
+ $LogMessage->addDescription(__('Enlace visualizado', false));
+ $LogMessage->addDetails(__('Tipo', false), $this->itemData->getTypeId());
+ $LogMessage->addDetails(__('Cuenta', false), AccountUtil::getAccountNameById($this->itemData->getItemId()));
+ $LogMessage->addDetails(__('Usuario', false), UserUtil::getUserLoginById($this->itemData->getUserId()));
+ $Log->writeLog();
+
+ if ($this->itemData->isNotify()) {
+ Email::sendEmail($LogMessage);
+ }
+
+ return $this->update();
+ }
+
+ /**
+ * @return bool
+ * @throws SPException
+ */
+ public function update()
+ {
+ $query = /** @lang SQL */
+ 'UPDATE publicLinks
+ SET publicLink_linkData = ?,
+ publicLink_hash = ?
+ WHERE publicLink_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam(serialize($this->itemData));
+ $Data->addParam($this->itemData->getLinkHash());
+ $Data->addParam($this->itemData->getPublicLinkId());
+ $Data->setOnErrorMessage(__('Error al actualizar enlace', false));
+
+ DB::getQuery($Data);
+
+ if ($Data->getQueryNumRows() === 0) {
+ throw new SPException(SPException::SP_INFO, __('Enlace no encontrado', false));
+ }
+
+ return true;
+ }
+
+ /**
+ * @return $this
+ * @throws SPException
+ */
+ public function add()
+ {
+ if ($this->checkDuplicatedOnAdd()) {
+ throw new SPException(SPException::SP_INFO, __('Enlace ya creado', false));
+ }
+
+ $this->itemData->setDateAdd(time());
+ $this->itemData->setUserId(Session::getUserData()->getUserId());
+ $this->itemData->setMaxCountViews(Config::getConfig()->getPublinksMaxViews());
+ $this->calcDateExpire();
+ $this->createLinkHash();
+ $this->createLinkPass();
+
+ $query = /** @lang SQL */
+ 'INSERT INTO publicLinks
+ SET publicLink_hash = ?,
+ publicLink_itemId = ?,
+ publicLink_linkData = ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getPublicLinkHash());
+ $Data->addParam($this->itemData->getPublicLinkItemId());
+ $Data->addParam(serialize($this->itemData));
+ $Data->setOnErrorMessage(__('Error al crear enlace', false));
+
+ DB::getQuery($Data);
+
+ return $this;
+ }
+
+ /**
+ * @return bool
+ */
+ public function checkDuplicatedOnAdd()
+ {
+ $query = /** @lang SQL */
+ 'SELECT publicLink_id FROM publicLinks WHERE publicLink_itemId = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getPublicLinkItemId());
+
+ DB::getResults($Data);
+
+ return ($Data->getQueryNumRows() === 1);
+ }
+
+ /**
+ * @param $id int
+ * @return $this
+ * @throws SPException
+ */
+ public function delete($id)
+ {
+ $query = /** @lang SQL */
+ 'DELETE FROM publicLinks WHERE publicLink_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($id);
+ $Data->setOnErrorMessage(__('Error al eliminar enlace', false));
+
+ DB::getQuery($Data);
+
+ if ($Data->getQueryNumRows() === 0) {
+ throw new SPException(SPException::SP_INFO, __('Enlace no encontrado', false));
+ }
+
+ return $this;
+ }
+
+ /**
+ * @return $this
+ * @throws SPException
+ */
+ public function refresh()
+ {
+ $this->itemData->setMaxCountViews($this->itemData->getMaxCountViews() + Config::getConfig()->getPublinksMaxViews());
+
+ $this->calcDateExpire();
+ $this->createLinkHash(true);
+ $this->createLinkPass();
+
+ $query = /** @lang SQL */
+ 'UPDATE publicLinks
+ SET publicLink_linkData = ?,
+ publicLink_hash = ?
+ WHERE publicLink_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam(serialize($this->itemData));
+ $Data->addParam($this->itemData->getPublicLinkHash());
+ $Data->addParam($this->itemData->getPublicLinkId());
+ $Data->setOnErrorMessage(__('Error al renovar enlace', false));
+
+ DB::getQuery($Data);
+
+ return $this;
+ }
+
+ /**
+ * @param $id int
+ * @return PublicLinkData
+ * @throws SPException
+ */
+ public function getById($id)
+ {
+ $query = /** @lang SQL */
+ 'SELECT publicLink_id,
+ publicLink_hash,
+ publicLink_linkData
+ FROM publicLinks WHERE publicLink_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setMapClassName($this->getDataModel());
+ $Data->setQuery($query);
+ $Data->addParam($id);
+
+ /** @var PublicLinkBaseData $queryRes */
+ $queryRes = DB::getResults($Data);
+
+ if ($queryRes === false) {
+ throw new SPException(SPException::SP_ERROR, __('Error al obtener enlace', false));
+ }
+
+ /** @var $PublicLink PublicLinkData */
+ $PublicLink = Util::castToClass($this->getDataModel(), $queryRes->getPublicLinkLinkData());
+ $PublicLink->setPublicLinkId($id);
+
+ return $PublicLink;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getAll()
+ {
+ $query = /** @lang SQL */
+ 'SELECT publicLink_id, publicLink_hash, publicLink_linkData FROM publicLinks';
+
+ $Data = new QueryData();
+ $Data->setMapClassName($this->getDataModel());
+ $Data->setQuery($query);
+
+ /** @var PublicLinkData[] $queryRes */
+ $queryRes = DB::getResultsArray($Data);
+
+ $publicLinks = [];
+
+ foreach ($queryRes as $PublicLinkListData) {
+ /** @var PublicLinkData $PublicLinkData */
+ $PublicLinkData = Util::castToClass($this->getDataModel(), $PublicLinkListData->getPublicLinkLinkData());
+ $PublicLinkData->setPublicLinkId($PublicLinkListData->getPublicLinkId());
+
+ $publicLinks[] = $this->getItemForList($PublicLinkData);
+ }
+
+ return $publicLinks;
+ }
+
+ /**
+ * Devuelve los datos de un enlace para mostrarlo
+ *
+ * @param PublicLinkData $PublicLinkData
+ * @return PublicLinkListData
+ */
+ public function getItemForList(PublicLinkData $PublicLinkData)
+ {
+ $PublicLinkListData = new PublicLinkListData();
+ $PublicLinkListData->setPublicLinkId($PublicLinkData->getPublicLinkId());
+ $PublicLinkListData->setPublicLinkHash($PublicLinkData->getLinkHash());
+ $PublicLinkListData->setAccountName(AccountUtil::getAccountNameById($PublicLinkData->getItemId()));
+ $PublicLinkListData->setUserLogin(UserUtil::getUserLoginById($PublicLinkData->getUserId()));
+ $PublicLinkListData->setNotify($PublicLinkData->isNotify() ? __('ON') : __('OFF'));
+ $PublicLinkListData->setDateAdd(date('Y-m-d H:i', $PublicLinkData->getDateAdd()));
+ $PublicLinkListData->setDateExpire(date('Y-m-d H:i', $PublicLinkData->getDateExpire()));
+ $PublicLinkListData->setCountViews($PublicLinkData->getCountViews() . '/' . $PublicLinkData->getMaxCountViews());
+ $PublicLinkListData->setUseInfo($PublicLinkData->getUseInfo());
+
+ return $PublicLinkListData;
+ }
+
+ /**
+ * @param $id int
+ * @return mixed
+ */
+ public function checkInUse($id)
+ {
+ // TODO: Implement checkInUse() method.
+ }
+
+ /**
+ * @return bool
+ */
+ public function checkDuplicatedOnUpdate()
+ {
+ // TODO: Implement checkDuplicatedOnUpdate() method.
+ }
+
+ /**
+ * @param $hash int
+ * @return bool|PublicLinkData
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function getByHash($hash)
+ {
+ $query = /** @lang SQL */
+ 'SELECT publicLink_id,
+ publicLink_hash,
+ publicLink_linkData
+ FROM publicLinks WHERE publicLink_hash = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setMapClassName($this->getDataModel());
+ $Data->setQuery($query);
+ $Data->addParam($hash);
+
+ /** @var PublicLinkBaseData $queryRes */
+ $queryRes = DB::getResults($Data);
+
+ if ($queryRes === false) {
+ throw new SPException(SPException::SP_ERROR, __('Error al obtener enlace', false));
+ } elseif (is_array($queryRes)) {
+ return false;
+ }
+
+ /**
+ * @var $PublicLink PublicLinkData
+ */
+ $PublicLink = Util::castToClass($this->getDataModel(), $queryRes->getPublicLinkLinkData());
+ $PublicLink->setPublicLinkId($queryRes->getPublicLinkId());
+
+ return $PublicLink;
+ }
+
+ /**
+ * Devolver el hash asociado a un elemento
+ *
+ * @param int $itemId
+ * @return PublicLinkData
+ * @throws SPException
+ */
+ public function getHashForItem($itemId)
+ {
+ $query = /** @lang SQL */
+ 'SELECT publicLink_hash FROM publicLinks WHERE publicLink_itemId = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setMapClassName($this->getDataModel());
+ $Data->setQuery($query);
+ $Data->addParam($itemId);
+
+ $queryRes = DB::getResults($Data);
+
+ if ($queryRes === false) {
+ throw new SPException(SPException::SP_ERROR, __('Error al obtener enlace', false));
+ }
+
+ return $queryRes;
+ }
+
+ /**
+ * Devolver los elementos con los ids especificados
+ *
+ * @param array $ids
+ * @return mixed
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function getByIdBatch(array $ids)
+ {
+ $query = /** @lang SQL */
+ 'SELECT publicLink_id,
+ publicLink_hash
+ FROM publicLinks WHERE publicLink_id IN (' . $this->getParamsFromArray($ids) . ')';
+
+ $Data = new QueryData();
+ $Data->setMapClassName($this->getDataModel());
+ $Data->setQuery($query);
+ $Data->setParams($ids);
+
+ return DB::getResultsArray($Data);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/PublicLinks/PublicLinkBase.class.php b/inc/SP/Mgmt/PublicLinks/PublicLinkBase.class.php
new file mode 100644
index 00000000..e500a0f8
--- /dev/null
+++ b/inc/SP/Mgmt/PublicLinks/PublicLinkBase.class.php
@@ -0,0 +1,123 @@
+.
+ */
+
+namespace SP\Mgmt\PublicLinks;
+
+defined('APP_ROOT') || die();
+
+use SP\Config\Config;
+use SP\Core\Crypt;
+use SP\Core\Exceptions\SPException;
+use SP\Core\SessionUtil;
+use SP\DataModel\PublicLinkData;
+use SP\Mgmt\ItemBase;
+use SP\DataModel\PublicLinkBaseData;
+
+/**
+ * Class PublicLinks para la gestión de enlaces públicos
+ *
+ * @package SP
+ */
+abstract class PublicLinkBase extends ItemBase
+{
+ /** @var PublicLinkData */
+ protected $itemData;
+
+ /**
+ * Category constructor.
+ *
+ * @param PublicLinkData $itemData
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ */
+ public function __construct($itemData = null)
+ {
+ if (!$this->dataModel) {
+ $this->setDataModel(PublicLinkBaseData::class);
+ }
+
+ parent::__construct($itemData);
+ }
+
+ /**
+ * @return PublicLinkData
+ */
+ public function getItemData()
+ {
+ return parent::getItemData();
+ }
+
+ /**
+ * Devolver la clave y el IV para el enlace
+ *
+ * @throws SPException
+ */
+ protected final function createLinkPass()
+ {
+ $pass = Crypt::generateAesKey($this->createLinkHash());
+ $cryptPass = Crypt::encryptData(SessionUtil::getSessionMPass(), $pass);
+
+ $this->itemData->setPass($cryptPass['data']);
+ $this->itemData->setPassIV($cryptPass['iv']);
+ }
+
+ /**
+ * Generar el hash para el enlace
+ *
+ * @param bool $refresh Si es necesario regenerar el hash
+ * @return string
+ */
+ protected final function createLinkHash($refresh = false)
+ {
+ if ($refresh === true
+ || $this->itemData->getLinkHash() === ''
+ ) {
+ $hash = hash('sha256', uniqid('sysPassPublicLink', true));
+
+ $this->itemData->setPublicLinkHash($hash);
+ $this->itemData->setLinkHash($hash);
+ }
+
+ return $this->itemData->getLinkHash();
+ }
+
+ /**
+ * Devolver el tiempo de caducidad del enlace
+ *
+ * @return int
+ */
+ protected final function calcDateExpire()
+ {
+ $this->itemData->setDateExpire(time() + (int)Config::getConfig()->getPublinksMaxTime());
+ }
+
+ /**
+ * Actualizar la información de uso
+ *
+ * @param string $who Quién lo ha visto
+ */
+ protected final function updateUseInfo($who)
+ {
+ $this->itemData->addUseInfo(['who' => $who, 'time' => time()]);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/PublicLinks/PublicLinkSearch.class.php b/inc/SP/Mgmt/PublicLinks/PublicLinkSearch.class.php
new file mode 100644
index 00000000..50015478
--- /dev/null
+++ b/inc/SP/Mgmt/PublicLinks/PublicLinkSearch.class.php
@@ -0,0 +1,88 @@
+.
+ */
+
+namespace SP\Mgmt\PublicLinks;
+
+use SP\Account\AccountUtil;
+use SP\DataModel\ItemSearchData;
+use SP\DataModel\PublicLinkListData;
+use SP\Mgmt\ItemSearchInterface;
+use SP\Mgmt\Users\UserUtil;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+use SP\Util\Util;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class PublicLinkUtil con utilidades para la gestión de enlaces
+ *
+ * @package SP
+ */
+class PublicLinkSearch extends PublicLinkBase implements ItemSearchInterface
+{
+ /**
+ * @param ItemSearchData $SearchData
+ * @return mixed
+ */
+ public function getMgmtSearch(ItemSearchData $SearchData)
+ {
+ $Data = new QueryData();
+ $Data->setMapClassName(PublicLinkListData::class);
+ $Data->setSelect('publicLink_id, publicLink_hash, publicLink_linkData');
+ $Data->setFrom('publicLinks');
+ $Data->setLimit('?,?');
+ $Data->addParam($SearchData->getLimitStart());
+ $Data->addParam($SearchData->getLimitCount());
+
+ DB::setFullRowCount();
+
+ /** @var PublicLinkListData[] $queryRes */
+ $queryRes = DB::getResultsArray($Data);
+
+ $publicLinks = [];
+ $publicLinks['count'] = $Data->getQueryNumRows();
+
+ foreach ($queryRes as $PublicLinkListData) {
+ $PublicLinkData = Util::castToClass($this->getDataModel(), $PublicLinkListData->getPublicLinkLinkData());
+
+ $PublicLinkListData->setAccountName(AccountUtil::getAccountNameById($PublicLinkData->getItemId()));
+ $PublicLinkListData->setUserLogin(UserUtil::getUserLoginById($PublicLinkData->getUserId()));
+ $PublicLinkListData->setNotify($PublicLinkData->isNotify() ? __('ON') : __('OFF'));
+ $PublicLinkListData->setDateAdd(date('Y-m-d H:i', $PublicLinkData->getDateAdd()));
+ $PublicLinkListData->setDateExpire(date('Y-m-d H:i', $PublicLinkData->getDateExpire()));
+ $PublicLinkListData->setCountViews($PublicLinkData->getCountViews() . '/' . $PublicLinkData->getMaxCountViews());
+ $PublicLinkListData->setUseInfo($PublicLinkData->getUseInfo());
+
+ if ($SearchData->getSeachString() === ''
+ || stripos($PublicLinkListData->getAccountName(), $SearchData->getSeachString()) !== false
+ || stripos($PublicLinkListData->getUserLogin(), $SearchData->getSeachString()) !== false
+ ){
+ $publicLinks[] = $PublicLinkListData;
+ }
+ }
+
+ return $publicLinks;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Tags/Tag.class.php b/inc/SP/Mgmt/Tags/Tag.class.php
new file mode 100644
index 00000000..82e21233
--- /dev/null
+++ b/inc/SP/Mgmt/Tags/Tag.class.php
@@ -0,0 +1,236 @@
+.
+ */
+
+namespace SP\Mgmt\Tags;
+
+defined('APP_ROOT') || die();
+
+use SP\Core\Exceptions\SPException;
+use SP\DataModel\TagData;
+use SP\Mgmt\ItemInterface;
+use SP\Mgmt\ItemSelectInterface;
+use SP\Mgmt\ItemTrait;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+
+/**
+ * Class Tags
+ *
+ * @package SP\Mgmt\Tags
+ */
+class Tag extends TagBase implements ItemInterface, ItemSelectInterface
+{
+ use ItemTrait;
+
+ /**
+ * @return $this
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function add()
+ {
+ if ($this->checkDuplicatedOnAdd()) {
+ throw new SPException(SPException::SP_INFO, __('Etiqueta duplicada', false));
+ }
+
+ $query = /** @lang SQL */
+ 'INSERT INTO tags SET tag_name = ?, tag_hash = ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getTagName());
+ $Data->addParam($this->itemData->getTagHash());
+ $Data->setOnErrorMessage(__('Error al crear etiqueta', false));
+
+ DB::getQuery($Data);
+
+ return $this;
+ }
+
+ /**
+ * @return bool
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function checkDuplicatedOnAdd()
+ {
+ $query = /** @lang SQL */
+ 'SELECT tag_id FROM tags WHERE tag_hash = ?';
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getTagHash());
+
+ $queryRes = DB::getResults($Data);
+
+ if ($queryRes !== false) {
+ if ($Data->getQueryNumRows() === 0) {
+ return false;
+ } elseif ($Data->getQueryNumRows() === 1) {
+ $this->itemData->setTagId($queryRes->tag_id);
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * @param $id int
+ * @return $this
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function delete($id)
+ {
+ $query = /** @lang SQL */
+ 'DELETE FROM tags WHERE tag_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($id);
+ $Data->setOnErrorMessage(__('Error al eliminar etiqueta', false));
+
+ DB::getQuery($Data);
+
+ if ($Data->getQueryNumRows() === 0) {
+ throw new SPException(SPException::SP_INFO, __('Etiqueta no encontrada', false));
+ }
+
+ return $this;
+ }
+
+ /**
+ * @return $this
+ * @throws SPException
+ */
+ public function update()
+ {
+ if ($this->checkDuplicatedOnUpdate()) {
+ throw new SPException(SPException::SP_INFO, __('Etiqueta duplicada', false));
+ }
+
+ $query = /** @lang SQL */
+ 'UPDATE tags SET tag_name = ?, tag_hash = ? WHERE tag_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getTagName());
+ $Data->addParam($this->itemData->getTagHash());
+ $Data->addParam($this->itemData->getTagId());
+ $Data->setOnErrorMessage(__('Error al actualizar etiqueta', false));
+
+ DB::getQuery($Data);
+
+ if ($Data->getQueryNumRows() === 0) {
+ throw new SPException(SPException::SP_INFO, __('Etiqueta no encontrada', false));
+ }
+
+ return $this;
+ }
+
+ /**
+ * @return bool
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function checkDuplicatedOnUpdate()
+ {
+ $query = /** @lang SQL */
+ 'SELECT tag_hash FROM tags WHERE tag_hash = ? AND tag_id <> ?';
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getTagHash());
+ $Data->addParam($this->itemData->getTagId());
+
+ DB::getQuery($Data);
+
+ return $Data->getQueryNumRows() > 0;
+ }
+
+ /**
+ * @param $id int
+ * @return TagData
+ * @throws SPException
+ */
+ public function getById($id)
+ {
+ $query = /** @lang SQL */
+ 'SELECT tag_id, tag_name FROM tags WHERE tag_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($id);
+ $Data->setMapClassName($this->getDataModel());
+
+ $queryRes = DB::getResults($Data);
+
+ if ($queryRes === false) {
+ throw new SPException(SPException::SP_ERROR, __('Error al obtener etiqueta', false));
+ }
+
+ return $queryRes;
+ }
+
+ /**
+ * @return TagData[]
+ */
+ public function getAll()
+ {
+ $query = /** @lang SQL */
+ 'SELECT tag_id, tag_name, tag_hash FROM tags ORDER BY tag_name';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->setMapClassName($this->getDataModel());
+
+ return DB::getResultsArray($Data);
+ }
+
+ /**
+ * @param $id int
+ * @return mixed
+ */
+ public function checkInUse($id)
+ {
+ // TODO: Implement checkInUse() method.
+ }
+
+ /**
+ * Devolver los elementos con los ids especificados
+ *
+ * @param array $ids
+ * @return TagData[]
+ */
+ public function getByIdBatch(array $ids)
+ {
+ if (count($ids) === 0) {
+ return [];
+ }
+
+ $query = /** @lang SQL */
+ 'SELECT tag_id, tag_name FROM tags WHERE tag_id IN (' . $this->getParamsFromArray($ids) . ')';
+
+ $Data = new QueryData();
+ $Data->setMapClassName($this->getDataModel());
+ $Data->setQuery($query);
+ $Data->setParams($ids);
+
+ return DB::getResultsArray($Data);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Tags/TagBase.class.php b/inc/SP/Mgmt/Tags/TagBase.class.php
new file mode 100644
index 00000000..712caeb5
--- /dev/null
+++ b/inc/SP/Mgmt/Tags/TagBase.class.php
@@ -0,0 +1,64 @@
+.
+ */
+
+namespace SP\Mgmt\Tags;
+
+use SP\DataModel\TagData;
+use SP\Mgmt\ItemBase;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class TagBase
+ *
+ * @package SP\Mgmt\Tags
+ */
+class TagBase extends ItemBase
+{
+ /** @var TagData */
+ protected $itemData;
+
+ /**
+ * Category constructor.
+ *
+ * @param TagData $itemData
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ */
+ public function __construct($itemData = null)
+ {
+ if (!$this->dataModel) {
+ $this->setDataModel(TagData::class);
+ }
+
+ parent::__construct($itemData);
+ }
+
+ /**
+ * @return TagData
+ */
+ public function getItemData()
+ {
+ return parent::getItemData();
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Tags/TagSearch.class.php b/inc/SP/Mgmt/Tags/TagSearch.class.php
new file mode 100644
index 00000000..d89a7383
--- /dev/null
+++ b/inc/SP/Mgmt/Tags/TagSearch.class.php
@@ -0,0 +1,71 @@
+.
+ */
+
+namespace SP\Mgmt\Tags;
+
+defined('APP_ROOT') || die();
+
+use SP\DataModel\ItemSearchData;
+use SP\Mgmt\ItemSearchInterface;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+
+/**
+ * Class TagSearch
+ *
+ * @package SP\Mgmt\Tags
+ */
+class TagSearch extends TagBase implements ItemSearchInterface
+{
+ /**
+ * @param ItemSearchData $SearchData
+ * @return mixed
+ */
+ public function getMgmtSearch(ItemSearchData $SearchData)
+ {
+ $Data = new QueryData();
+ $Data->setSelect('tag_id, tag_name');
+ $Data->setFrom('tags');
+ $Data->setOrder('tag_name');
+
+ if ($SearchData->getSeachString() !== '') {
+ $Data->setWhere('tag_name LIKE ?');
+
+ $search = '%' . $SearchData->getSeachString() . '%';
+ $Data->addParam($search);
+ }
+
+ $Data->setLimit('?,?');
+ $Data->addParam($SearchData->getLimitStart());
+ $Data->addParam($SearchData->getLimitCount());
+
+ DB::setFullRowCount();
+
+ $queryRes = DB::getResultsArray($Data);
+
+ $queryRes['count'] = $Data->getQueryNumRows();
+
+ return $queryRes;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Users/User.class.php b/inc/SP/Mgmt/Users/User.class.php
new file mode 100644
index 00000000..57e66e4a
--- /dev/null
+++ b/inc/SP/Mgmt/Users/User.class.php
@@ -0,0 +1,436 @@
+.
+ */
+
+namespace SP\Mgmt\Users;
+
+defined('APP_ROOT') || die();
+
+use SP\Core\Exceptions\SPException;
+use SP\DataModel\UserData;
+use SP\Mgmt\ItemInterface;
+use SP\Mgmt\ItemSelectInterface;
+use SP\Mgmt\ItemTrait;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+
+/**
+ * Class User
+ *
+ * @package SP
+ */
+class User extends UserBase implements ItemInterface, ItemSelectInterface
+{
+ use ItemTrait;
+
+ /**
+ * @return $this
+ * @throws SPException
+ */
+ public function add()
+ {
+ if ($this->checkDuplicatedOnAdd()) {
+ throw new SPException(SPException::SP_INFO, __('Login/email de usuario duplicados', false));
+ }
+
+ $passdata = UserPass::makeUserPassHash($this->itemData->getUserPass());
+
+ $query = /** @lang SQL */
+ 'INSERT INTO usrData SET
+ user_name = ?,
+ user_login = ?,
+ user_email = ?,
+ user_notes = ?,
+ user_groupId = ?,
+ user_profileId = ?,
+ user_mPass = \'\',
+ user_mIV = \'\',
+ user_isAdminApp = ?,
+ user_isAdminAcc = ?,
+ user_isDisabled = ?,
+ user_isChangePass = ?,
+ user_isLdap = 0,
+ user_pass = ?,
+ user_hashSalt = ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getUserName());
+ $Data->addParam($this->itemData->getUserLogin());
+ $Data->addParam($this->itemData->getUserEmail());
+ $Data->addParam($this->itemData->getUserNotes());
+ $Data->addParam($this->itemData->getUserGroupId());
+ $Data->addParam($this->itemData->getUserProfileId());
+ $Data->addParam($this->itemData->isUserIsAdminApp());
+ $Data->addParam($this->itemData->isUserIsAdminAcc());
+ $Data->addParam($this->itemData->isUserIsDisabled());
+ $Data->addParam($this->itemData->isUserIsChangePass());
+ $Data->addParam($passdata['pass']);
+ $Data->addParam($passdata['salt']);
+ $Data->setOnErrorMessage(__('Error al crear el usuario', false));
+
+ DB::getQuery($Data);
+
+ $this->itemData->setUserId(DB::getLastId());
+
+ return $this;
+ }
+
+ /**
+ * @return bool
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function checkDuplicatedOnAdd()
+ {
+ $query = /** @lang SQL */
+ 'SELECT user_login, user_email
+ FROM usrData
+ WHERE UPPER(user_login) = UPPER(?) OR UPPER(user_email) = UPPER(?)';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getUserLogin());
+ $Data->addParam($this->itemData->getUserEmail());
+
+ DB::getQuery($Data);
+
+ return $Data->getQueryNumRows() > 0;
+ }
+
+ /**
+ * @param $id int
+ * @return $this
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function delete($id)
+ {
+ $query = 'DELETE FROM usrData WHERE user_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($id);
+ $Data->setOnErrorMessage(__('Error al eliminar el usuario', false));
+
+ DB::getQuery($Data);
+
+ if ($Data->getQueryNumRows() === 0) {
+ throw new SPException(SPException::SP_INFO, __('Usuario no encontrado', false));
+ }
+
+ $this->itemData->setUserId(DB::$lastId);
+
+ return $this;
+ }
+
+ /**
+ * @return $this
+ * @throws SPException
+ */
+ public function update()
+ {
+ if ($this->checkDuplicatedOnUpdate()) {
+ throw new SPException(SPException::SP_INFO, __('Login/email de usuario duplicados', false));
+ }
+
+ $query = /** @lang SQL */
+ 'UPDATE usrData SET
+ user_name = ?,
+ user_login = ?,
+ user_email = ?,
+ user_notes = ?,
+ user_groupId = ?,
+ user_profileId = ?,
+ user_isAdminApp = ?,
+ user_isAdminAcc = ?,
+ user_isDisabled = ?,
+ user_isChangePass = ?,
+ user_lastUpdate = NOW()
+ WHERE user_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getUserName());
+ $Data->addParam($this->itemData->getUserLogin());
+ $Data->addParam($this->itemData->getUserEmail());
+ $Data->addParam($this->itemData->getUserNotes());
+ $Data->addParam($this->itemData->getUserGroupId());
+ $Data->addParam($this->itemData->getUserProfileId());
+ $Data->addParam($this->itemData->isUserIsAdminApp());
+ $Data->addParam($this->itemData->isUserIsAdminAcc());
+ $Data->addParam($this->itemData->isUserIsDisabled());
+ $Data->addParam($this->itemData->isUserIsChangePass());
+ $Data->addParam($this->itemData->getUserId());
+ $Data->setOnErrorMessage(__('Error al actualizar el usuario', false));
+
+ DB::getQuery($Data);
+
+ if ($Data->getQueryNumRows() === 0) {
+ throw new SPException(SPException::SP_INFO, __('Usuario no encontrado', false));
+ }
+
+ $this->itemData->setUserId(DB::getLastId());
+
+ return $this;
+ }
+
+ /**
+ * @return bool
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function checkDuplicatedOnUpdate()
+ {
+ $query = /** @lang SQL */
+ 'SELECT user_login, user_email
+ FROM usrData
+ WHERE (UPPER(user_login) = UPPER(?) OR UPPER(user_email) = UPPER(?))
+ AND user_id <> ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getUserLogin());
+ $Data->addParam($this->itemData->getUserEmail());
+ $Data->addParam($this->itemData->getUserId());
+
+ DB::getQuery($Data);
+
+ return $Data->getQueryNumRows() > 0;
+ }
+
+ /**
+ * @return UserData[]
+ * @throws SPException
+ */
+ public function getAll()
+ {
+ $query = /** @lang SQL */
+ 'SELECT user_id,
+ user_name,
+ user_groupId,
+ user_login,
+ user_email,
+ user_notes,
+ user_count,
+ user_profileId,
+ user_preferences,
+ 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';
+
+ $Data = new QueryData();
+ $Data->setMapClassName($this->getDataModel());
+ $Data->setQuery($query);
+
+
+ try {
+ $queryRes = DB::getResultsArray($Data);
+ } catch (SPException $e) {
+ throw new SPException(SPException::SP_ERROR, __('Error al obtener los usuarios', false));
+ }
+
+ return $queryRes;
+ }
+
+ /**
+ * @param $id int
+ * @return mixed
+ */
+ public function checkInUse($id)
+ {
+ // TODO: Implement checkInUse() method.
+ }
+
+ /**
+ * @return $this
+ * @throws SPException
+ */
+ public function updatePass()
+ {
+ $passdata = UserPass::makeUserPassHash($this->itemData->getUserPass());
+
+ $query = /** @lang SQL */
+ 'UPDATE usrData SET
+ user_pass = ?,
+ user_hashSalt = ?,
+ user_isChangePass = 0,
+ user_lastUpdate = NOW()
+ WHERE user_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($passdata['pass']);
+ $Data->addParam($passdata['salt']);
+ $Data->addParam($this->itemData->getUserId());
+ $Data->setOnErrorMessage(__('Error al modificar la clave', false));
+
+ DB::getQuery($Data);
+
+ return $this;
+ }
+
+ /**
+ * @param $id int
+ * @return UserData
+ * @throws SPException
+ */
+ public function getById($id)
+ {
+ $query = /** @lang SQL */
+ 'SELECT user_id,
+ user_name,
+ user_groupId,
+ usergroup_name,
+ user_login,
+ user_email,
+ user_notes,
+ user_count,
+ user_profileId,
+ user_count,
+ user_lastLogin,
+ user_lastUpdate,
+ user_lastUpdateMPass,
+ user_preferences,
+ 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,
+ BIN(user_isMigrate) AS user_isMigrate
+ FROM usrData
+ JOIN usrGroups ON usergroup_id = user_groupId
+ WHERE user_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+
+ if (is_object($this->itemData)) {
+ $Data->setMapClass($this->itemData);
+ } else {
+ $Data->setMapClassName($this->getDataModel());
+ }
+
+ $Data->setQuery($query);
+ $Data->addParam($id);
+
+ $queryRes = DB::getResults($Data);
+
+ if ($queryRes === false) {
+ throw new SPException(SPException::SP_ERROR, __('Error al obtener los datos del usuario', false));
+ }
+
+ return $queryRes;
+ }
+
+ /**
+ * @param $login string
+ * @return UserData
+ * @throws SPException
+ */
+ public function getByLogin($login)
+ {
+ $query = /** @lang SQL */
+ 'SELECT user_id,
+ user_name,
+ user_groupId,
+ usergroup_name,
+ user_login,
+ user_email,
+ user_notes,
+ user_count,
+ user_profileId,
+ user_count,
+ user_lastLogin,
+ user_lastUpdate,
+ user_lastUpdateMPass,
+ user_preferences,
+ 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,
+ BIN(user_isDisabled) AS user_isDisabled,
+ BIN(user_isMigrate) AS user_isMigrate
+ FROM usrData
+ JOIN usrGroups ON usergroup_id = user_groupId
+ WHERE user_login = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setMapClassName($this->getDataModel());
+ $Data->setQuery($query);
+ $Data->addParam($login);
+
+ $queryRes = DB::getResults($Data);
+
+ if ($queryRes === false) {
+ throw new SPException(SPException::SP_ERROR, __('Error al obtener los datos del usuario', false));
+ }
+
+ return $queryRes;
+ }
+
+ /**
+ * Devolver los elementos con los ids especificados
+ *
+ * @param array $ids
+ * @return UserData[]
+ */
+ public function getByIdBatch(array $ids)
+ {
+ if (count($ids) === 0) {
+ return [];
+ }
+
+ $query = /** @lang SQL */
+ 'SELECT user_id,
+ user_name,
+ user_groupId,
+ usergroup_name,
+ user_login,
+ user_email,
+ user_notes,
+ user_count,
+ user_profileId,
+ user_count,
+ user_lastLogin,
+ user_lastUpdate,
+ user_lastUpdateMPass,
+ user_preferences,
+ 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,
+ BIN(user_isMigrate) AS user_isMigrate
+ FROM usrData
+ JOIN usrGroups ON usergroup_id = user_groupId
+ WHERE user_id IN (' . $this->getParamsFromArray($ids) . ')';
+
+ $Data = new QueryData();
+ $Data->setMapClassName($this->getDataModel());
+ $Data->setQuery($query);
+ $Data->setParams($ids);
+
+ return DB::getResultsArray($Data);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Users/UserBase.class.php b/inc/SP/Mgmt/Users/UserBase.class.php
new file mode 100644
index 00000000..35ac26d2
--- /dev/null
+++ b/inc/SP/Mgmt/Users/UserBase.class.php
@@ -0,0 +1,64 @@
+.
+ */
+
+namespace SP\Mgmt\Users;
+
+defined('APP_ROOT') || die();
+
+use SP\DataModel\UserData;
+use SP\Mgmt\ItemBase;
+
+/**
+ * Class UserBase
+ *
+ * @package SP
+ */
+abstract class UserBase extends ItemBase
+{
+ /** @var UserData */
+ protected $itemData;
+
+ /**
+ * Category constructor.
+ *
+ * @param UserData $itemData
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ */
+ public function __construct($itemData = null)
+ {
+ if (!$this->dataModel) {
+ $this->setDataModel(UserData::class);
+ }
+
+ parent::__construct($itemData);
+ }
+
+ /**
+ * @return UserData
+ */
+ public function getItemData()
+ {
+ return parent::getItemData();
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Users/UserLdap.class.php b/inc/SP/Mgmt/Users/UserLdap.class.php
new file mode 100644
index 00000000..5dd80340
--- /dev/null
+++ b/inc/SP/Mgmt/Users/UserLdap.class.php
@@ -0,0 +1,260 @@
+.
+ */
+
+namespace SP\Mgmt\Users;
+
+use SP\Config\Config;
+use SP\Core\Exceptions\SPException;
+use SP\Core\Messages\LogMessage;
+use SP\Log\Email;
+use SP\Log\Log;
+use SP\Mgmt\ItemInterface;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class UserLdap
+ *
+ * @package SP
+ */
+class UserLdap extends UserBase implements ItemInterface
+{
+ /**
+ * Comprobar si los datos del usuario de LDAP están en la BBDD.
+ *
+ * @param $userLogin
+ * @return bool
+ * @throws \SP\Core\Exceptions\QueryException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ */
+ public static function checkLDAPUserInDB($userLogin)
+ {
+ $query = /** @lang SQL */
+ 'SELECT user_login FROM usrData WHERE user_login = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($userLogin);
+
+ DB::getQuery($Data);
+
+ return $Data->getQueryNumRows() === 1;
+ }
+
+ /**
+ * @return mixed
+ * @throws \SP\Core\Exceptions\QueryException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ * @throws \phpmailer\phpmailerException
+ * @throws SPException
+ */
+ public function add()
+ {
+ if ($this->checkDuplicatedOnAdd()) {
+ throw new SPException(SPException::SP_INFO, __('Login/email de usuario duplicados', false));
+ }
+
+ $passdata = UserPass::makeUserPassHash($this->itemData->getUserPass());
+ $groupId = Config::getConfig()->getLdapDefaultGroup();
+ $profileId = Config::getConfig()->getLdapDefaultProfile();
+ $this->itemData->setUserIsDisabled(($groupId === 0 || $profileId === 0) ? 1 : 0);
+
+ $query = /** @lang SQL */
+ 'INSERT INTO usrData SET
+ user_name = ?,
+ user_login = ?,
+ user_email = ?,
+ user_notes = ?,
+ user_groupId = ?,
+ user_profileId = ?,
+ user_mPass = \'\',
+ user_mIV = \'\',
+ user_isAdminApp = ?,
+ user_isAdminAcc = ?,
+ user_isDisabled = ?,
+ user_isChangePass = ?,
+ user_isLdap = 1,
+ user_pass = ?,
+ user_hashSalt = ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getUserName());
+ $Data->addParam($this->itemData->getUserLogin());
+ $Data->addParam($this->itemData->getUserEmail());
+ $Data->addParam(__('Usuario de LDAP'));
+ $Data->addParam($groupId);
+ $Data->addParam($profileId);
+ $Data->addParam((int)$this->itemData->isUserIsAdminApp());
+ $Data->addParam((int)$this->itemData->isUserIsAdminAcc());
+ $Data->addParam((int)$this->itemData->isUserIsDisabled());
+ $Data->addParam((int)$this->itemData->isUserIsChangePass());
+ $Data->addParam($passdata['pass']);
+ $Data->addParam($passdata['salt']);
+ $Data->setOnErrorMessage(__('Error al guardar los datos de LDAP', false));
+
+ DB::getQuery($Data);
+
+ $this->itemData->setUserId(DB::getLastId());
+
+ if (!$groupId || !$profileId) {
+ $LogEmail = new LogMessage();
+ $LogEmail->setAction(__('Activación Cuenta', false));
+ $LogEmail->addDescription(__('Su cuenta está pendiente de activación.', false));
+ $LogEmail->addDescription(__('En breve recibirá un email de confirmación.', false));
+
+ Email::sendEmail($LogEmail, $this->itemData->getUserEmail(), false);
+ }
+
+ $Log = new Log();
+ $Log->getLogMessage()
+ ->setAction(__('Nuevo usuario de LDAP', false))
+ ->addDescription(sprintf('%s (%s)', $this->itemData->getUserName(), $this->itemData->getUserLogin()));
+ $Log->writeLog();
+
+ Email::sendEmail($Log->getLogMessage());
+
+ return $this;
+ }
+
+ /**
+ * @return bool
+ * @throws \SP\Core\Exceptions\QueryException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ */
+ public function checkDuplicatedOnAdd()
+ {
+ $query = /** @lang SQL */
+ 'SELECT user_login, user_email
+ FROM usrData
+ WHERE UPPER(user_login) = UPPER(?) OR UPPER(user_email) = UPPER(?)';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getUserLogin());
+ $Data->addParam($this->itemData->getUserEmail());
+
+ DB::getQuery($Data);
+
+ return $Data->getQueryNumRows() > 0;
+ }
+
+ /**
+ * @param $id int
+ * @return mixed
+ */
+ public function delete($id)
+ {
+ // TODO: Implement delete() method.
+ }
+
+ /**
+ * @return $this
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function update()
+ {
+ $passdata = UserPass::makeUserPassHash($this->itemData->getUserPass());
+
+ $query = 'UPDATE usrData SET
+ user_pass = ?,
+ user_hashSalt = ?,
+ user_name = ?,
+ user_email = ?,
+ user_lastUpdate = NOW(),
+ user_isLdap = 1
+ WHERE user_login = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($passdata['pass']);
+ $Data->addParam($passdata['salt']);
+ $Data->addParam($this->itemData->getUserName());
+ $Data->addParam($this->itemData->getUserEmail());
+ $Data->addParam($this->itemData->getUserLogin());
+ $Data->setOnErrorMessage(__('Error al actualizar la clave del usuario en la BBDD', false));
+
+ DB::getQuery($Data);
+
+ return $this;
+ }
+
+ /**
+ * @param $id int
+ * @return mixed
+ */
+ public function getById($id)
+ {
+ // TODO: Implement getById() method.
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getAll()
+ {
+ // TODO: Implement getAll() method.
+ }
+
+ /**
+ * @param $id int
+ * @return mixed
+ */
+ public function checkInUse($id)
+ {
+ // TODO: Implement checkInUse() method.
+ }
+
+ /**
+ * @return bool
+ */
+ public function checkDuplicatedOnUpdate()
+ {
+ // TODO: Implement checkDuplicatedOnUpdate() method.
+ }
+
+ /**
+ * Eliminar elementos en lote
+ *
+ * @param array $ids
+ * @return $this
+ */
+ public function deleteBatch(array $ids)
+ {
+ // TODO: Implement deleteBatch() method.
+ }
+
+ /**
+ * Devolver los elementos con los ids especificados
+ *
+ * @param array $ids
+ * @return mixed
+ */
+ public function getByIdBatch(array $ids)
+ {
+ // TODO: Implement getByIdBatch() method.
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Users/UserLdapSync.class.php b/inc/SP/Mgmt/Users/UserLdapSync.class.php
new file mode 100644
index 00000000..99316c71
--- /dev/null
+++ b/inc/SP/Mgmt/Users/UserLdapSync.class.php
@@ -0,0 +1,121 @@
+.
+ */
+
+namespace SP\Mgmt\Users;
+
+use SP\Auth\Ldap\LdapMsAds;
+use SP\Auth\Ldap\LdapStd;
+use SP\Config\Config;
+use SP\Core\Exceptions\SPException;
+use SP\DataModel\UserData;
+use SP\Log\Log;
+use SP\Util\Util;
+
+class UserLdapSync
+{
+ /**
+ * @var int
+ */
+ public static $totalObjects = 0;
+ /**
+ * @var int
+ */
+ public static $syncedObjects = 0;
+ /**
+ * @var int
+ */
+ public static $errorObjects = 0;
+
+ /**
+ * Sincronizar usuarios de LDAP
+ *
+ * @return bool
+ * @throws \phpmailer\phpmailerException
+ */
+ public static function run()
+ {
+ $Log = new Log();
+ $LogMessage = $Log->getLogMessage();
+ $LogMessage->setAction(__('Sincronización LDAP', false));
+
+ $Ldap = Config::getConfig()->isLdapAds() ? new LdapMsAds() : new LdapStd();
+
+ $ldapObjects = $Ldap->findObjects();
+ self::$totalObjects = (int)$ldapObjects['count'];
+
+ $LogMessage->addDetails(__('Objetos encontrados', false), self::$totalObjects);
+
+ if (self::$totalObjects > 0) {
+ $UserData = new UserData();
+
+ foreach ($ldapObjects as $result) {
+ $User = clone $UserData;
+
+ if (is_array($result)) {
+ foreach ($result as $attribute => $values) {
+
+ $value = $values[0];
+
+ switch (strtolower($attribute)) {
+ case 'displayname':
+ case 'fullname':
+ $User->setUserName($value);
+ break;
+ case 'login':
+ case 'samaccountname':
+ case 'uid':
+ $User->setUserLogin(strtolower($value));
+ break;
+ case 'mail':
+ $User->setUserEmail(strtolower($value));
+ break;
+ }
+ }
+
+ $User->setUserPass(Util::generateRandomBytes());
+
+ try {
+ $LogMessage->addDetails(__('Usuario', false), sprintf('%s (%s)', $User->getUserName(), $User->getUserLogin()));
+ UserLdap::getItem($User)->add();
+
+ self::$syncedObjects++;
+ } catch (SPException $e) {
+ self::$errorObjects++;
+ $LogMessage->addDescription($e->getMessage());
+ }
+ }
+ }
+ } else {
+ $LogMessage->addDescription(__('No se encontraron objetos para sincronizar', false));
+ $Log->writeLog();
+
+ return true;
+ }
+
+ $LogMessage->addDescription(__('Sincronización finalizada', false));
+ $Log->writeLog();
+
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Users/UserMigrate.class.php b/inc/SP/Mgmt/Users/UserMigrate.class.php
new file mode 100644
index 00000000..992e41f2
--- /dev/null
+++ b/inc/SP/Mgmt/Users/UserMigrate.class.php
@@ -0,0 +1,173 @@
+.
+ */
+
+namespace SP\Mgmt\Users;
+
+defined('APP_ROOT') || die();
+
+use SP\Core\Exceptions\SPException;
+use SP\DataModel\GroupUsersData;
+use SP\Log\Email;
+use SP\Log\Log;
+use SP\Mgmt\Groups\GroupUsers;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+
+/**
+ * Class UserMigrate para la migración de usuarios
+ *
+ * @package SP
+ */
+class UserMigrate
+{
+ /**
+ * Comprobar si un usuario está migrado desde phpPMS.
+ *
+ * @param string $userLogin con el login del usuario
+ * @return bool
+ */
+ public static function checkUserIsMigrate($userLogin)
+ {
+ $query = /** @lang SQL */
+ 'SELECT BIN(user_isMigrate) AS user_isMigrate FROM usrData WHERE user_login = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($userLogin);
+
+ $queryRes = DB::getResults($Data);
+
+ return ($queryRes !== false && $Data->getQueryNumRows() === 1 && $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
+ *
+ * Esta función actualiza la clave de un usuario que ha sido migrado desde phpPMS
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \phpmailer\phpmailerException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ * @throws \SP\Core\Exceptions\QueryException
+ */
+ public static function migrateUser($userLogin, $userPass)
+ {
+ $passdata = UserPass::makeUserPassHash($userPass);
+
+ $query = /** @lang SQL */
+ 'UPDATE usrData SET
+ user_pass = ?,
+ user_hashSalt = ?,
+ user_lastUpdate = NOW(),
+ user_isMigrate = 0
+ WHERE user_login = ?
+ AND user_isMigrate = 1
+ AND (user_pass = SHA1(CONCAT(user_hashSalt,?))
+ OR user_pass = MD5(?)) LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($passdata['pass']);
+ $Data->addParam($passdata['salt']);
+ $Data->addParam($userLogin);
+ $Data->addParam($userPass);
+ $Data->addParam($userPass);
+ $Data->setOnErrorMessage(__('Error al migrar cuenta de usuario', false));
+
+ DB::getQuery($Data);
+
+ $Log = new Log();
+ $Log->getLogMessage()
+ ->setAction(__FUNCTION__)
+ ->addDescription(__('Usuario actualizado', false))
+ ->addDetails(__('Login', false), $userLogin);
+ $Log->writeLog();
+
+ Email::sendEmail($Log->getLogMessage());
+ }
+
+ /**
+ * Migrar el grupo de los usuarios a la nueva tabla
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ */
+ public static function migrateUsersGroup()
+ {
+ $Log = new Log();
+ $LogMessage = $Log->getLogMessage();
+ $LogMessage->setAction(__FUNCTION__);
+
+ $query = /** @lang SQL */
+ 'SELECT user_id, user_groupId FROM usrData';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+
+ $queryRes = DB::getResults($Data);
+
+ if ($queryRes === false) {
+ $LogMessage->addDescription(__('Error al obtener grupo de usuarios', false));
+ $Log->setLogLevel(Log::ERROR);
+ $Log->writeLog();
+
+ throw new SPException(SPException::SP_ERROR, $LogMessage->getDescription());
+ }
+
+ foreach ($queryRes as $user) {
+ $GroupUsers = new GroupUsersData();
+ $GroupUsers->setUsertogroupGroupId($user->user_groupId);
+ $GroupUsers->addUser($user->user_id);
+
+ try {
+ GroupUsers::getItem($GroupUsers)->update();
+ } catch (SPException $e) {
+ $LogMessage->addDetails(__('Error al migrar grupo del usuario', false), $user->user_id);
+ $Log->setLogLevel(Log::ERROR);
+ }
+ }
+
+ $Log->writeLog();
+
+ return true;
+ }
+
+ /**
+ * Establecer el campo isMigrate de cada usuario
+ *
+ * @throws \SP\Core\Exceptions\ConstraintException
+ * @throws \SP\Core\Exceptions\QueryException
+ */
+ public static function setMigrateUsers()
+ {
+ $query = 'UPDATE usrData SET user_isMigrate = 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+
+ return DB::getQuery($Data);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Users/UserPass.class.php b/inc/SP/Mgmt/Users/UserPass.class.php
new file mode 100644
index 00000000..9efe2b23
--- /dev/null
+++ b/inc/SP/Mgmt/Users/UserPass.class.php
@@ -0,0 +1,317 @@
+.
+ */
+
+namespace SP\Mgmt\Users;
+
+defined('APP_ROOT') || die();
+
+use SP\Config\ConfigDB;
+use SP\Core\Crypt;
+use SP\Core\Exceptions\SPException;
+use SP\Core\SessionUtil;
+use SP\DataModel\UserPassData;
+use SP\Log\Email;
+use SP\Log\Log;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+
+/**
+ * Class UserPass para la gestión de las claves de un usuario
+ *
+ * @package SP
+ */
+class UserPass extends UserBase
+{
+ /**
+ * @var string
+ */
+ protected $clearUserMPass = '';
+
+ /**
+ * Category constructor.
+ *
+ * @param UserPassData $itemData
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ */
+ public function __construct($itemData = null)
+ {
+ $this->setDataModel(UserPassData::class);
+
+ parent::__construct($itemData);
+ }
+
+ /**
+ * 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 = /** @lang SQL */
+ 'SELECT user_mIV FROM usrData WHERE user_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($id);
+
+ $queryRes = DB::getResults($Data);
+
+ if ($queryRes === false) {
+ return false;
+ }
+
+ return $queryRes->user_mIV;
+ }
+
+ /**
+ * Comprobar si el usuario tiene actualizada la clave maestra actual.
+ *
+ * @return bool
+ */
+ public function checkUserUpdateMPass()
+ {
+ $configMPassTime = ConfigDB::getValue('lastupdatempass');
+
+ if (empty($configMPassTime)) {
+ return false;
+ }
+
+ $query = /** @lang SQL */
+ 'SELECT user_lastUpdateMPass FROM usrData WHERE user_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setMapClassName(UserPassData::class);
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getUserId());
+
+ /** @var UserPassData $queryRes */
+ $queryRes = DB::getResults($Data);
+
+ return ($queryRes !== false && $queryRes->getUserLastUpdateMPass() >= $configMPassTime);
+ }
+
+ /**
+ * Modificar la clave de un usuario.
+ *
+ * @param $userId
+ * @param $userPass
+ * @return $this
+ * @throws \SP\Core\Exceptions\QueryException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ * @throws \phpmailer\phpmailerException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function updateUserPass($userId, $userPass)
+ {
+ $passdata = self::makeUserPassHash($userPass);
+ $this->setItemData(User::getItem()->getById($userId));
+
+ $query = /** @lang SQL */
+ 'UPDATE usrData SET
+ user_pass = ?,
+ user_hashSalt = ?,
+ user_isChangePass = 0,
+ user_lastUpdate = NOW()
+ WHERE user_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($passdata['pass']);
+ $Data->addParam($passdata['salt']);
+ $Data->addParam($userId);
+ $Data->setOnErrorMessage(__('Error al modificar la clave', false));
+
+ DB::getQuery($Data);
+
+ $Log = new Log();
+ $Log->getLogMessage()
+ ->setAction(__('Modificar Clave Usuario', false))
+ ->addDetails(__('Login', false), $this->itemData->getUserLogin());
+ $Log->writeLog();
+
+ Email::sendEmail($Log->getLogMessage());
+
+ return $this;
+ }
+
+ /**
+ * 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 makeUserPassHash($userPass)
+ {
+ $salt = Crypt::makeHashSalt();
+
+ return ['salt' => $salt, 'pass' => crypt($userPass, $salt)];
+ }
+
+ /**
+ * Comprueba la clave maestra del usuario.
+ *
+ * @return bool
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function loadUserMPass()
+ {
+ $userMPass = $this->getUserMPass();
+ $configHashMPass = ConfigDB::getValue('masterPwd');
+
+ if ($userMPass === false || empty($configHashMPass)) {
+ return false;
+
+ // Comprobamos el hash de la clave del usuario con la guardada
+ } elseif (Crypt::checkHashPass($userMPass, $configHashMPass, true)) {
+ $this->clearUserMPass = $userMPass;
+
+ SessionUtil::saveSessionMPass($userMPass);
+
+ return true;
+ }
+
+ return null;
+ }
+
+ /**
+ * Desencriptar la clave maestra del usuario para la sesión.
+ *
+ * @param string $cypher Clave de cifrado
+ * @return false|string Devuelve bool se hay error o string si se devuelve la clave
+ */
+ public function getUserMPass($cypher = null)
+ {
+ $query = /** @lang SQL */
+ 'SELECT user_mPass, user_mIV, user_lastUpdateMPass FROM usrData WHERE user_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getUserId());
+
+ $queryRes = DB::getResults($Data);
+
+ if ($queryRes === false
+ || empty($queryRes->user_mPass)
+ || empty($queryRes->user_mIV)
+ || $queryRes->user_lastUpdateMPass < ConfigDB::getValue('lastupdatempass')
+ ) {
+ return false;
+ }
+
+ $this->itemData->setUserMPass($queryRes->user_mPass);
+ $this->itemData->setUserMIV($queryRes->user_mIV);
+
+ return Crypt::getDecrypt($queryRes->user_mPass, $queryRes->user_mIV, $this->getCypherPass($cypher));
+ }
+
+ /**
+ * Obtener una clave de cifrado basada en la clave del usuario y un salt.
+ *
+ * @param string $cypher Clave de cifrado
+ * @return string con la clave de cifrado
+ */
+ private function getCypherPass($cypher = null)
+ {
+ $pass = $cypher === null ? $this->itemData->getUserPass() : $cypher;
+
+ return Crypt::generateAesKey($pass . $this->itemData->getUserLogin());
+ }
+
+ /**
+ * @return string
+ */
+ public function getClearUserMPass()
+ {
+ return $this->clearUserMPass;
+ }
+
+ /**
+ * Actualizar la clave maestra con la clave anterior del usuario
+ *
+ * @param $oldUserPass
+ * @return bool
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function updateMasterPass($oldUserPass)
+ {
+ $masterPass = $this->getUserMPass($oldUserPass);
+
+ if ($masterPass) {
+ return $this->updateUserMPass($masterPass);
+ }
+
+ return false;
+ }
+
+ /**
+ * Actualizar la clave maestra del usuario en la BBDD.
+ *
+ * @param string $masterPwd con la clave maestra
+ * @return bool
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function updateUserMPass($masterPwd)
+ {
+ $configHashMPass = ConfigDB::getValue('masterPwd');
+
+ if ($configHashMPass === false) {
+ return false;
+ } elseif (null === $configHashMPass) {
+ $configHashMPass = Crypt::mkHashPassword($masterPwd);
+ ConfigDB::setValue('masterPwd', $configHashMPass);
+ }
+
+ if (Crypt::checkHashPass($masterPwd, $configHashMPass, true)) {
+ $cryptMPass = Crypt::mkCustomMPassEncrypt($this->getCypherPass(), $masterPwd);
+
+ if (!empty($cryptMPass)) {
+ $query = /** @lang SQL */
+ 'UPDATE usrData SET
+ user_mPass = ?,
+ user_mIV = ?,
+ user_lastUpdateMPass = UNIX_TIMESTAMP()
+ WHERE user_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($cryptMPass[0]);
+ $Data->addParam($cryptMPass[1]);
+ $Data->addParam($this->itemData->getUserId());
+
+ $this->clearUserMPass = $masterPwd;
+
+ $this->itemData->setUserMPass($cryptMPass[0]);
+ $this->itemData->setUserMIV($cryptMPass[1]);
+
+ DB::getQuery($Data);
+
+ return true;
+ }
+ }
+
+ return false;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Users/UserPassRecover.class.php b/inc/SP/Mgmt/Users/UserPassRecover.class.php
new file mode 100644
index 00000000..539b1bb1
--- /dev/null
+++ b/inc/SP/Mgmt/Users/UserPassRecover.class.php
@@ -0,0 +1,237 @@
+.
+ */
+
+namespace SP\Mgmt\Users;
+
+use SP\Core\Exceptions\SPException;
+use SP\DataModel\UserData;
+use SP\DataModel\UserPassRecoverData;
+use SP\Mgmt\ItemInterface;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class UserPassRecover para la gestión de recuperaciones de claves de usuarios
+ *
+ * @package SP
+ */
+class UserPassRecover extends UserPassRecoverBase implements ItemInterface
+{
+ /**
+ * 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;
+
+ /**
+ * Comprobar el límite de recuperaciones de clave.
+ *
+ * @param UserData $UserData con el login del usuario
+ * @return bool
+ */
+ public static function checkPassRecoverLimit(UserData $UserData)
+ {
+ $query = /** @lang SQL */
+ 'SELECT userpassr_userId
+ FROM usrPassRecover
+ WHERE userpassr_userId = ?
+ AND userpassr_used = 0
+ AND userpassr_date >= ?';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($UserData->getUserId());
+ $Data->addParam(time() - self::MAX_PASS_RECOVER_TIME);
+
+ try {
+ DB::getQuery($Data);
+ } catch (SPException $e) {
+ return false;
+ }
+
+ return $Data->getQueryNumRows() >= self::MAX_PASS_RECOVER_LIMIT;
+ }
+
+ /**
+ * Comprobar el hash de recuperación de clave.
+ *
+ * @param $hash
+ * @return $this
+ * @throws SPException
+ */
+ public function getHashUserId($hash)
+ {
+ $query = /** @lang SQL */
+ 'SELECT userpassr_userId
+ FROM usrPassRecover
+ WHERE userpassr_hash = ?
+ AND userpassr_used = 0
+ AND userpassr_date >= ?
+ ORDER BY userpassr_date DESC LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setMapClassName($this->getDataModel());
+ $Data->setQuery($query);
+ $Data->addParam($hash);
+ $Data->addParam(time() - self::MAX_PASS_RECOVER_TIME);
+
+ /** @var UserPassRecoverData $queryRes */
+ $queryRes = DB::getResults($Data);
+
+ if ($queryRes === false) {
+ throw new SPException(SPException::SP_ERROR, __('Error en comprobación de hash', false));
+ } elseif ($Data->getQueryNumRows() === 0) {
+ throw new SPException(SPException::SP_INFO, __('Hash inválido o expirado', false));
+ }
+
+ $this->itemData = $queryRes;
+
+ $this->update();
+
+ return $this;
+ }
+
+ /**
+ * @return $this
+ * @throws SPException
+ */
+ public function update()
+ {
+ $query = /** @lang SQL */
+ 'UPDATE usrPassRecover SET userpassr_used = 1 WHERE userpassr_hash = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getUserpassrHash());
+ $Data->setOnErrorMessage(__('Error interno', false));
+
+ DB::getQuery($Data);
+
+ return $this;
+ }
+
+ /**
+ * @return $this
+ * @throws SPException
+ */
+ public function add()
+ {
+ $query = /** @lang SQL */
+ 'INSERT INTO usrPassRecover SET
+ userpassr_userId = ?,
+ userpassr_hash = ?,
+ userpassr_date = UNIX_TIMESTAMP(),
+ userpassr_used = 0';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($this->itemData->getUserpassrUserId());
+ $Data->addParam($this->itemData->getUserpassrHash());
+ $Data->setOnErrorMessage(__('Error al generar el hash de recuperación', false));
+
+ DB::getQuery($Data);
+
+ return $this;
+ }
+
+ /**
+ * @param $id int
+ * @return mixed
+ */
+ public function delete($id)
+ {
+ // TODO: Implement delete() method.
+ }
+
+ /**
+ * @param $id int
+ * @return mixed
+ */
+ public function getById($id)
+ {
+ // TODO: Implement getById() method.
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getAll()
+ {
+ // TODO: Implement getAll() method.
+ }
+
+ /**
+ * @param $id int
+ * @return mixed
+ */
+ public function checkInUse($id)
+ {
+ // TODO: Implement checkInUse() method.
+ }
+
+ /**
+ * @return bool
+ */
+ public function checkDuplicatedOnUpdate()
+ {
+ // TODO: Implement checkDuplicatedOnUpdate() method.
+ }
+
+ /**
+ * @return bool
+ */
+ public function checkDuplicatedOnAdd()
+ {
+ // TODO: Implement checkDuplicatedOnAdd() method.
+ }
+
+ /**
+ * Eliminar elementos en lote
+ *
+ * @param array $ids
+ * @return $this
+ */
+ public function deleteBatch(array $ids)
+ {
+ // TODO: Implement deleteBatch() method.
+ }
+
+ /**
+ * Devolver los elementos con los ids especificados
+ *
+ * @param array $ids
+ * @return mixed
+ */
+ public function getByIdBatch(array $ids)
+ {
+ // TODO: Implement getByIdBatch() method.
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Users/UserPassRecoverBase.class.php b/inc/SP/Mgmt/Users/UserPassRecoverBase.class.php
new file mode 100644
index 00000000..6a5d9812
--- /dev/null
+++ b/inc/SP/Mgmt/Users/UserPassRecoverBase.class.php
@@ -0,0 +1,61 @@
+.
+ */
+
+namespace SP\Mgmt\Users;
+
+defined('APP_ROOT') || die();
+
+use SP\DataModel\UserPassRecoverData;
+use SP\Mgmt\ItemBase;
+
+/**
+ * Class UserPassRecoverBase
+ *
+ * @package SP\Mgmt\Users
+ */
+abstract class UserPassRecoverBase extends ItemBase
+{
+ /** @var UserPassRecoverData */
+ protected $itemData;
+
+ /**
+ * Category constructor.
+ *
+ * @param UserPassRecoverData $itemData
+ */
+ public function __construct($itemData = null)
+ {
+ $this->setDataModel('SP\DataModel\UserPassRecoverData');
+
+ parent::__construct($itemData);
+ }
+
+ /**
+ * @return UserPassRecoverData
+ */
+ public function getItemData()
+ {
+ return parent::getItemData();
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Users/UserPreferences.class.php b/inc/SP/Mgmt/Users/UserPreferences.class.php
new file mode 100644
index 00000000..7457617f
--- /dev/null
+++ b/inc/SP/Mgmt/Users/UserPreferences.class.php
@@ -0,0 +1,156 @@
+.
+ */
+
+namespace SP\Mgmt\Users;
+
+defined('APP_ROOT') || die();
+
+use SP\Core\Exceptions\SPException;
+use SP\DataModel\UserData;
+use SP\DataModel\UserPreferencesData;
+use SP\Mgmt\ItemInterface;
+use SP\Mgmt\ItemTrait;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+use SP\Util\Util;
+
+/**
+ * Class UsersPreferences para la gestion de las preferencias de usuarios
+ *
+ * @package SP
+ */
+class UserPreferences extends UserPreferencesBase implements ItemInterface
+{
+ use ItemTrait;
+
+ /**
+ * @return mixed
+ */
+ public function add()
+ {
+ // TODO: Implement add() method.
+ }
+
+ /**
+ * @param $id int
+ * @return mixed
+ */
+ public function delete($id)
+ {
+ // TODO: Implement delete() method.
+ }
+
+ /**
+ * @return $this
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function update()
+ {
+ $query = /** @lang SQL */
+ 'UPDATE usrData
+ SET user_preferences = ?
+ WHERE user_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam(serialize($this->itemData));
+ $Data->addParam($this->itemData->getUserId());
+ $Data->setOnErrorMessage(__('Error al actualizar preferencias', false));
+
+ DB::getQuery($Data);
+
+ return $this;
+ }
+
+ /**
+ * @param $id int
+ * @return UserPreferencesData
+ */
+ public function getById($id)
+ {
+ $query = /** @lang SQL */
+ 'SELECT user_id, user_preferences FROM usrData WHERE user_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setMapClassName(UserData::class);
+ $Data->setQuery($query);
+ $Data->addParam($id);
+
+ /** @var UserData $queryRes */
+ $queryRes = DB::getResults($Data);
+
+ if ($queryRes === false
+ || $queryRes->getUserPreferences() === null
+ || $queryRes->getUserPreferences() === ''
+ ) {
+ return $this->getItemData();
+ }
+
+ return Util::castToClass($this->getDataModel(), $queryRes->getUserPreferences(), 'SP\UserPreferences');
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getAll()
+ {
+ // TODO: Implement getAll() method.
+ }
+
+ /**
+ * @param $id int
+ * @return mixed
+ */
+ public function checkInUse($id)
+ {
+ // TODO: Implement checkInUse() method.
+ }
+
+ /**
+ * @return bool
+ */
+ public function checkDuplicatedOnUpdate()
+ {
+ // TODO: Implement checkDuplicatedOnUpdate() method.
+ }
+
+ /**
+ * @return bool
+ */
+ public function checkDuplicatedOnAdd()
+ {
+ // TODO: Implement checkDuplicatedOnAdd() method.
+ }
+
+ /**
+ * Devolver los elementos con los ids especificados
+ *
+ * @param array $ids
+ * @return mixed
+ */
+ public function getByIdBatch(array $ids)
+ {
+ // TODO: Implement getByIdBatch() method.
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Users/UserPreferencesBase.class.php b/inc/SP/Mgmt/Users/UserPreferencesBase.class.php
new file mode 100644
index 00000000..a8eedbdd
--- /dev/null
+++ b/inc/SP/Mgmt/Users/UserPreferencesBase.class.php
@@ -0,0 +1,64 @@
+.
+ */
+
+namespace SP\Mgmt\Users;
+
+defined('APP_ROOT') || die();
+
+use SP\DataModel\UserPreferencesData;
+use SP\Mgmt\ItemBase;
+
+/**
+ * Class UserPreferencesBase
+ *
+ * @package SP\Mgmt\Users
+ */
+abstract class UserPreferencesBase extends ItemBase
+{
+ /** @var UserPreferencesData */
+ protected $itemData;
+
+ /**
+ * Category constructor.
+ *
+ * @param UserPreferencesData $itemData
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ */
+ public function __construct($itemData = null)
+ {
+ if (!$this->dataModel) {
+ $this->setDataModel(UserPreferencesData::class);
+ }
+
+ parent::__construct($itemData);
+ }
+
+ /**
+ * @return UserPreferencesData
+ */
+ public function getItemData()
+ {
+ return parent::getItemData();
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Users/UserPreferencesUtil.class.php b/inc/SP/Mgmt/Users/UserPreferencesUtil.class.php
new file mode 100644
index 00000000..86bae16e
--- /dev/null
+++ b/inc/SP/Mgmt/Users/UserPreferencesUtil.class.php
@@ -0,0 +1,124 @@
+.
+ */
+
+namespace SP\Mgmt\Users;
+
+use Plugins\Authenticator\AuthenticatorData;
+use Plugins\Authenticator\AuthenticatorPlugin;
+use SP\Config\Config;
+use SP\Core\Exceptions\SPException;
+use SP\Core\Init;
+use SP\DataModel\PluginData;
+use SP\DataModel\UserData;
+use SP\DataModel\UserPreferencesData;
+use SP\Log\Log;
+use SP\Mgmt\Plugins\Plugin;
+use SP\Util\Util;
+
+/**
+ * Class UserPreferencesUtil
+ *
+ * @package SP\Mgmt\Users
+ */
+class UserPreferencesUtil
+{
+ /**
+ * Migrar las preferencias
+ *
+ * @return bool
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \InvalidArgumentException
+ */
+ public static function migrate()
+ {
+ $Log = new Log();
+ $LogMessage = $Log->getLogMessage();
+ $LogMessage->setAction(__FUNCTION__);
+ $LogMessage->addDescription(__('Actualizando preferencias', false));
+
+ foreach (User::getItem()->getAll() as $User) {
+ try {
+ $Preferences = $User->getUserPreferences();
+
+ if (!empty($Preferences)) {
+ $LogMessage->addDetails(__('Usuario', false), $User->getUserLogin());
+
+ /** @var UserPreferencesData $Preferences */
+ $Preferences = Util::castToClass(UserPreferencesData::class, $Preferences, 'SP\UserPreferences');
+ $User->setUserPreferences($Preferences);
+
+ $Preferences->setTheme(Config::getConfig()->getSiteTheme());
+
+ if ($Preferences->isUse2Fa()) {
+ self::migrateTwoFA($User);
+ }
+ }
+ } catch (SPException $e) {
+ $LogMessage->addDescription($e->getMessage());
+ $Log->setLogLevel(Log::ERROR);
+ $Log->writeLog();
+ }
+ }
+
+ $LogMessage->addDescription(__('Preferencias actualizadas', false));
+ $Log->writeLog();
+
+ return true;
+ }
+
+ /**
+ * Migrar la función de 2FA a plugin Authenticator
+ *
+ * @param UserData $UserData
+ * @throws \SP\Core\Exceptions\SPException
+ * @throws \SP\Core\Exceptions\InvalidClassException
+ * @throws \InvalidArgumentException
+ */
+ protected static function migrateTwoFA(UserData $UserData)
+ {
+ Init::loadPlugins();
+
+ /** @var AuthenticatorData $AuthenticatorData */
+ $AuthenticatorData = new AuthenticatorData();
+ $AuthenticatorData->setUserId($UserData->getUserId());
+ $AuthenticatorData->setIV(UserPass::getUserIVById($UserData->getId()));
+ $AuthenticatorData->setTwofaEnabled(1);
+ $AuthenticatorData->setDate(time());
+
+ $data[$UserData->getUserId()] = $AuthenticatorData;
+
+ $PluginData = new PluginData();
+ $PluginData->setPluginName(AuthenticatorPlugin::PLUGIN_NAME);
+ $PluginData->setPluginEnabled(1);
+ $PluginData->setPluginData(serialize($data));
+
+ Plugin::getItem($PluginData)->update();
+
+ $UserPreferences = $UserData->getUserPreferences();
+ $UserPreferences->setUse2Fa(0);
+ $UserPreferences->setUserId($UserData->getUserId());
+ UserPreferences::getItem($UserPreferences)->update();
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Users/UserSearch.class.php b/inc/SP/Mgmt/Users/UserSearch.class.php
new file mode 100644
index 00000000..5a87ae28
--- /dev/null
+++ b/inc/SP/Mgmt/Users/UserSearch.class.php
@@ -0,0 +1,86 @@
+.
+ */
+
+namespace SP\Mgmt\Users;
+
+use SP\Core\Session;
+use SP\DataModel\ItemSearchData;
+use SP\Mgmt\ItemSearchInterface;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+
+/**
+ * Class UserSearch
+ *
+ * @package SP\Mgmt\Users
+ */
+class UserSearch extends UserBase implements ItemSearchInterface
+{
+ /**
+ * @param ItemSearchData $SearchData
+ * @return mixed
+ */
+ public function getMgmtSearch(ItemSearchData $SearchData)
+ {
+ $Data = new QueryData();
+ $Data->setSelect('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');
+ $Data->setFrom('usrData LEFT JOIN usrProfiles ON user_profileId = userprofile_id LEFT JOIN usrGroups ON usrData.user_groupId = usergroup_id');
+ $Data->setOrder('user_name');
+
+ if ($SearchData->getSeachString() !== '') {
+ if (Session::getUserData()->isUserIsAdminApp()) {
+ $Data->setWhere('user_name LIKE ? OR user_login LIKE ?');
+ } else {
+ $Data->setWhere('user_name LIKE ? OR user_login LIKE ? AND user_isAdminApp = 0');
+ }
+
+ $search = '%' . $SearchData->getSeachString() . '%';
+ $Data->addParam($search);
+ $Data->addParam($search);
+ } elseif (!Session::getUserData()->isUserIsAdminApp()) {
+ $Data->setWhere('user_isAdminApp = 0');
+ }
+
+ $Data->setLimit('?, ?');
+ $Data->addParam($SearchData->getLimitStart());
+ $Data->addParam($SearchData->getLimitCount());
+
+ DB::setFullRowCount();
+
+ $queryRes = DB::getResultsArray($Data);
+
+ $queryRes['count'] = $Data->getQueryNumRows();
+
+ return $queryRes;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Mgmt/Users/UserUtil.class.php b/inc/SP/Mgmt/Users/UserUtil.class.php
new file mode 100644
index 00000000..6c06f834
--- /dev/null
+++ b/inc/SP/Mgmt/Users/UserUtil.class.php
@@ -0,0 +1,194 @@
+.
+ */
+
+namespace SP\Mgmt\Users;
+
+defined('APP_ROOT') || die();
+
+use SP\DataModel\UserData;
+use SP\Storage\DB;
+use SP\Storage\QueryData;
+
+/**
+ * Class UserUtil
+ *
+ * @package SP
+ */
+class UserUtil
+{
+ const USER_LOGIN_EXIST = 1;
+ const USER_MAIL_EXIST = 2;
+
+ /**
+ * Comprobar si un usuario y email existen.
+ *
+ * @param UserData $UserData
+ * @return bool
+ * @throws \SP\Core\Exceptions\QueryException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ */
+ public static function checkUserMail(UserData $UserData)
+ {
+ $query = /** @lang SQL */
+ 'SELECT user_id FROM usrData WHERE user_login = ? AND user_email = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($UserData->getUserLogin());
+ $Data->addParam($UserData->getUserEmail());
+
+ DB::getQuery($Data);
+
+ return $Data->getQueryNumRows() === 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 = /** @lang SQL */
+ 'SELECT user_email FROM usrData WHERE user_id = ? AND user_email IS NOT NULL LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($userId);
+
+ $queryRes = DB::getResults($Data);
+
+ if ($queryRes === false) {
+ return false;
+ }
+
+ return $queryRes->user_email;
+ }
+
+ /**
+ * Actualiza el último inicio de sesión del usuario en la BBDD.
+ *
+ * @param $userId int El id del usuario
+ * @return bool
+ * @throws \SP\Core\Exceptions\QueryException
+ * @throws \SP\Core\Exceptions\ConstraintException
+ */
+ public static function setUserLastLogin($userId)
+ {
+ $query = /** @lang SQL */
+ 'UPDATE usrData SET user_lastLogin = NOW(), user_count = user_count + 1 WHERE user_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($userId);
+
+ return DB::getQuery($Data);
+ }
+
+
+ /**
+ * 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 = /** @lang SQL */
+ 'SELECT user_login FROM usrData WHERE user_id = ? LIMIT 1';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($id);
+
+ $queryRes = DB::getResults($Data);
+
+ if ($queryRes === false) {
+ return false;
+ }
+
+ return $queryRes->user_login;
+ }
+
+ /**
+ * Obtener el id y login de los usuarios disponibles
+ *
+ * @return UserData[]
+ */
+ public static function getUsersLogin()
+ {
+ $query = /** @lang SQL */
+ 'SELECT user_id, user_login, user_name FROM usrData ORDER BY user_login';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+
+ return DB::getResultsArray($Data);
+ }
+
+ /**
+ * Obtener el email de los usuarios de un grupo
+ *
+ * @param $groupId
+ * @return array
+ */
+ public static function getUserGroupEmail($groupId)
+ {
+ $query = /** @lang SQL */
+ 'SELECT user_id, user_login, user_name, user_email
+ FROM usrData
+ LEFT JOIN usrToGroups ON usertogroup_userId = user_id
+ WHERE user_email IS NOT NULL
+ AND user_groupId = ? OR usertogroup_groupId = ?
+ AND user_isDisabled = 0
+ ORDER BY user_login';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+ $Data->addParam($groupId);
+ $Data->addParam($groupId);
+
+ return DB::getResultsArray($Data);
+ }
+
+ /**
+ * Obtener el email de los usuarios
+ *
+ * @return array
+ */
+ public static function getUsersEmail()
+ {
+ $query = /** @lang SQL */
+ 'SELECT user_id, user_login, user_name, user_email
+ FROM usrData
+ WHERE user_email IS NOT NULL AND user_isDisabled = 0
+ ORDER BY user_login';
+
+ $Data = new QueryData();
+ $Data->setQuery($query);
+
+ return DB::getResultsArray($Data);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Storage/DB.class.php b/inc/SP/Storage/DB.class.php
new file mode 100644
index 00000000..742d415b
--- /dev/null
+++ b/inc/SP/Storage/DB.class.php
@@ -0,0 +1,402 @@
+.
+ */
+
+namespace SP\Storage;
+
+use PDO;
+use PDOStatement;
+use SP\Core\DiFactory;
+use SP\Core\Exceptions\ConstraintException;
+use SP\Core\Exceptions\QueryException;
+use SP\Core\Exceptions\SPException;
+use SP\Log\Log;
+use SP\Util\Util;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Esta clase es la encargada de realizar las operaciones con la BBDD de sysPass.
+ */
+class DB
+{
+ /**
+ * @var int
+ */
+ public static $lastId;
+ /**
+ * @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;
+
+ /**
+ * @return int
+ */
+ public static function getLastId()
+ {
+ return self::$lastId;
+ }
+
+ /**
+ * Devolver los resultados en array
+ *
+ * @param QueryData $queryData
+ * @return array
+ */
+ public static function getResultsArray(QueryData $queryData)
+ {
+ $results = self::getResults($queryData);
+
+ if ($results === false) {
+ return [];
+ }
+
+ return is_object($results) ? [$results] : $results;
+ }
+
+ /**
+ * Obtener los resultados de una consulta.
+ *
+ * @param $queryData QueryData Los datos de la consulta
+ * @return mixed devuelve bool si hay un error. Devuelve array con el array de registros devueltos
+ */
+ public static function getResults(QueryData $queryData)
+ {
+ if ($queryData->getQuery() === '') {
+ self::resetVars();
+ return false;
+ }
+
+ try {
+ $db = new DB();
+ $db->doQuery($queryData);
+
+ if (self::$fullRowCount === true) {
+ $db->getFullRowCount($queryData);
+ }
+ } catch (SPException $e) {
+ $queryData->setQueryStatus($e->getCode());
+
+ self::logDBException($queryData->getQuery(), $e->getMessage(), $e->getCode(), __FUNCTION__);
+ return false;
+ }
+
+ self::resetVars();
+
+ if ($db->numRows === 1 && !$queryData->isUseKeyPair()) {
+ return $db->lastResult[0];
+ }
+
+ return $db->lastResult;
+ }
+
+ /**
+ * Restablecer los atributos estáticos
+ */
+ private static function resetVars()
+ {
+ self::$fullRowCount = false;
+ }
+
+ /**
+ * Realizar una consulta a la BBDD.
+ *
+ * @param $queryData QueryData Los datos de la consulta
+ * @param $getRawData bool realizar la consulta para obtener registro a registro
+ * @return PDOStatement|array
+ * @throws SPException
+ */
+ public function doQuery(QueryData $queryData, $getRawData = false)
+ {
+ $isSelect = preg_match("/^(select|show)\s/i", $queryData->getQuery());
+
+ // Limpiar valores de caché
+ $this->lastResult = [];
+
+ try {
+ /** @var PDOStatement $queryRes */
+ $queryRes = $this->prepareQueryData($queryData);
+ } catch (SPException $e) {
+ throw $e;
+ }
+
+ if ($isSelect) {
+ if ($getRawData) {
+ return $queryRes;
+ }
+
+ $this->numFields = $queryRes->columnCount();
+ $this->lastResult = $queryRes->fetchAll();
+ $this->numRows = count($this->lastResult);
+
+ $queryData->setQueryNumRows($this->numRows);
+ } else {
+ $queryData->setQueryNumRows($queryRes->rowCount());
+ }
+
+ return $queryRes;
+ }
+
+ /**
+ * Asociar los parámetros de la consulta utilizando el tipo adecuado
+ *
+ * @param $queryData QueryData Los datos de la consulta
+ * @param $isCount bool Indica si es una consulta de contador de registros
+ * @return \PDOStatement|false
+ * @throws SPException
+ */
+ private function prepareQueryData(QueryData $queryData, $isCount = false)
+ {
+ if ($isCount === true) {
+ $query = $queryData->getQueryCount();
+ $paramMaxIndex = count($queryData->getParams()) - 3;
+ } else {
+ $query = $queryData->getQuery();
+ }
+
+ try {
+ $db = DiFactory::getDBStorage()->getConnection();
+
+ if (is_array($queryData->getParams())) {
+ $stmt = $db->prepare($query);
+ $paramIndex = 0;
+
+ foreach ($queryData->getParams() as $param => $value) {
+ if ($isCount === true
+ && $queryData->getLimit() !== ''
+ && $paramIndex > $paramMaxIndex
+ ) {
+ continue;
+ }
+
+ // 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 ($param === 'blobcontent') {
+ $stmt->bindValue($param, $value, PDO::PARAM_LOB);
+ } elseif (is_int($value)) {
+// error_log("INT: " . $param . " -> " . $value);
+ $stmt->bindValue($param, $value, PDO::PARAM_INT);
+ } else {
+// error_log("STR: " . $param . " -> " . print_r($value, true));
+ $stmt->bindValue($param, $value, PDO::PARAM_STR);
+ }
+
+ $paramIndex++;
+ }
+
+ $stmt->execute();
+ } else {
+ $stmt = $db->query($query);
+ }
+
+ if ($queryData->isUseKeyPair() === true) {
+ $stmt->setFetchMode(PDO::FETCH_KEY_PAIR);
+ } elseif (null !== $queryData->getMapClass()) {
+ $stmt->setFetchMode(PDO::FETCH_INTO, $queryData->getMapClass());
+ } elseif ($queryData->getMapClassName()) {
+ $stmt->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, $queryData->getMapClassName());
+ } else {
+ $stmt->setFetchMode(PDO::FETCH_OBJ);
+ }
+
+ DB::$lastId = $db->lastInsertId();
+
+ return $stmt;
+ } catch (SPException $e) {
+ ob_start();
+ debug_print_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
+ debugLog(sprintf('Exception: %s - %s', $e->getMessage(), $e->getHint()));
+ debugLog(ob_get_clean());
+
+ throw $e;
+ } catch (\Exception $e) {
+ ob_start();
+ debug_print_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
+ debugLog('Exception: ' . $e->getMessage());
+ debugLog(ob_get_clean());
+
+ throw new SPException(SPException::SP_CRITICAL, $e->getMessage(), '', $e->getCode());
+ }
+ }
+
+ /**
+ * Obtener el número de filas de una consulta realizada
+ *
+ * @param $queryData QueryData Los datos de la consulta
+ * @return int Número de files de la consulta
+ * @throws SPException
+ */
+ private function getFullRowCount(QueryData $queryData)
+ {
+ if ($queryData->getQueryCount() === '') {
+ return 0;
+ }
+
+ try {
+ $queryRes = $this->prepareQueryData($queryData, true);
+ $num = (int)$queryRes->fetchColumn();
+ $queryRes->closeCursor();
+ $queryData->setQueryNumRows($num);
+ } catch (SPException $e) {
+ debugLog('Exception: ' . $e->getMessage());
+
+ throw $e;
+ }
+ }
+
+ /**
+ * 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
+ * @param $queryFunction
+ */
+ private static function logDBException($query, $errorMsg, $errorCode, $queryFunction)
+ {
+ $caller = Util::traceLastCall($queryFunction);
+
+ $Log = new Log();
+ $LogMessage = $Log->getLogMessage();
+ $LogMessage->setAction($caller);
+ $LogMessage->addDescription(__('Error en la consulta', false));
+ $LogMessage->addDescription(sprintf('%s (%s)', $errorMsg, $errorCode));
+ $LogMessage->addDetails('SQL', DBUtil::escape($query));
+ $Log->setLogLevel(Log::ERROR);
+ $Log->writeLog();
+
+ debugLog($LogMessage->getDescription(), true);
+ debugLog($LogMessage->getDetails());
+ }
+
+ /**
+ * Devolver los resultados como objeto PDOStatement
+ *
+ * @param QueryData $queryData
+ * @return PDOStatement|false
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public static function getResultsRaw(QueryData $queryData)
+ {
+ try {
+ $db = new DB();
+ return $db->doQuery($queryData, true);
+ } catch (SPException $e) {
+ self::logDBException($queryData->getQuery(), $e->getMessage(), $e->getCode(), __FUNCTION__);
+
+ throw $e;
+ }
+ }
+
+ /**
+ * Realizar una consulta y devolver el resultado sin datos
+ *
+ * @param QueryData $queryData Los datos para realizar la consulta
+ * @return bool
+ * @throws ConstraintException
+ * @throws QueryException
+ */
+ public static function getQuery(QueryData $queryData)
+ {
+ if (null === $queryData->getOnErrorMessage()) {
+ $errorMessage = __('Error en la consulta', false);
+ } else {
+ $errorMessage = $queryData->getOnErrorMessage();
+ }
+
+ if ($queryData->getQuery() === '') {
+ throw new QueryException(SPException::SP_ERROR, $errorMessage, __('Consulta en blanco', false));
+ }
+
+ try {
+ $db = new DB();
+ $db->doQuery($queryData);;
+ } catch (SPException $e) {
+ $queryData->setQueryStatus($e->getCode());
+
+ self::logDBException($queryData->getQuery(), $e->getMessage(), $e->getCode(), __FUNCTION__);
+
+ if ($e->getCode() === 23000) {
+ throw new ConstraintException(SPException::SP_ERROR, __('Restricción de integridad', false), $e->getMessage(), $e->getCode());
+ } else {
+ throw new QueryException(SPException::SP_ERROR, $errorMessage, $e->getMessage(), $e->getCode());
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Establecer si es necesario contar el número total de resultados devueltos
+ */
+ public static function setFullRowCount()
+ {
+ self::$fullRowCount = true;
+ }
+
+ /**
+ * Iniciar una transacción
+ *
+ * @return bool
+ */
+ public static function beginTransaction()
+ {
+ $conn = DiFactory::getDBStorage()->getConnection();
+
+ return !$conn->inTransaction() && $conn->beginTransaction();
+ }
+
+ /**
+ * Finalizar una transacción
+ */
+ public static function endTransaction()
+ {
+ $conn = DiFactory::getDBStorage()->getConnection();
+
+ return $conn->inTransaction() && $conn->commit();
+ }
+
+ /**
+ * Rollback de una transacción
+ */
+ public static function rollbackTransaction()
+ {
+ $conn = DiFactory::getDBStorage()->getConnection();
+
+ return $conn->inTransaction() && $conn->rollBack();
+ }
+}
diff --git a/inc/SP/Storage/DBStorageInterface.class.php b/inc/SP/Storage/DBStorageInterface.class.php
new file mode 100644
index 00000000..dacdb683
--- /dev/null
+++ b/inc/SP/Storage/DBStorageInterface.class.php
@@ -0,0 +1,48 @@
+.
+ */
+
+namespace SP\Storage;
+
+/**
+ * Interface DBStorageInterface
+ *
+ * @package SP\Storage
+ */
+interface DBStorageInterface
+{
+ /**
+ * @return \PDO
+ */
+ public function getConnection();
+
+ /**
+ * @return mixed
+ */
+ public function setConnectionData();
+
+ /**
+ * @return int
+ */
+ public function getDbStatus();
+}
\ No newline at end of file
diff --git a/inc/SP/Storage/DBUtil.class.php b/inc/SP/Storage/DBUtil.class.php
new file mode 100644
index 00000000..2c393e99
--- /dev/null
+++ b/inc/SP/Storage/DBUtil.class.php
@@ -0,0 +1,140 @@
+.
+ */
+
+namespace SP\Storage;
+
+
+use SP\Config\Config;
+use SP\Core\DiFactory;
+use SP\Core\Exceptions\SPException;
+
+/**
+ * Class DBUtil con utilidades de la BD
+ *
+ * @package SP\Storage
+ */
+class DBUtil
+{
+ /**
+ * @var array Tablas de la BBDD
+ */
+ public static $tables = [
+ 'customers',
+ 'categories',
+ 'tags',
+ 'usrGroups',
+ 'usrProfiles',
+ 'usrData',
+ 'accounts',
+ 'accFavorites',
+ 'accFiles',
+ 'accGroups',
+ 'accHistory',
+ 'accTags',
+ 'accUsers',
+ 'authTokens',
+ 'config',
+ 'customFieldsDef',
+ 'customFieldsData',
+ 'log',
+ 'publicLinks',
+ 'usrPassRecover',
+ 'usrToGroups',
+ 'plugins',
+ 'notices',
+ 'account_data_v',
+ 'account_search_v'
+ ];
+
+ /**
+ * Comprobar que la base de datos existe.
+ *
+ * @return bool
+ */
+ public static function checkDatabaseExist()
+ {
+ try {
+ $db = DiFactory::getDBStorage()->getConnection();
+
+ $query = /** @lang SQL */
+ 'SELECT COUNT(*)
+ FROM information_schema.tables
+ WHERE table_schema = \'' . Config::getConfig()->getDbName() . '\'
+ AND table_name IN (\'customers\', \'categories\', \'accounts\', \'usrData\', \'config\', \'log\' )';
+
+ return (int)$db->query($query)->fetchColumn() === 6;
+ } catch (\Exception $e) {
+ debugLog($e->getMessage());
+ debugLog($e->getCode());
+ }
+
+ return false;
+ }
+
+ /**
+ * 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 = DiFactory::getDBStorage()->getConnection();
+
+ return $db->quote(trim($str));
+ } catch (SPException $e) {
+ return $str;
+ }
+ }
+
+ /**
+ * Obtener la información del servidor de base de datos
+ *
+ * @return array
+ */
+ public static function getDBinfo()
+ {
+ $dbinfo = array();
+
+ try {
+ $db = DiFactory::getDBStorage()->getConnection();
+
+ $attributes = [
+ '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;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Storage/FileStorageInterface.class.php b/inc/SP/Storage/FileStorageInterface.class.php
new file mode 100644
index 00000000..a22990f7
--- /dev/null
+++ b/inc/SP/Storage/FileStorageInterface.class.php
@@ -0,0 +1,54 @@
+.
+ */
+
+namespace SP\Storage;
+
+/**
+ * Interface StorageInterface
+ *
+ * @package SMD\Storage
+ */
+interface FileStorageInterface
+{
+ /**
+ * @return FileStorageInterface
+ */
+ public function load();
+
+ /**
+ * @return FileStorageInterface
+ */
+ public function save();
+
+ /**
+ * @return mixed
+ */
+ public function getItems();
+
+ /**
+ * @param $items
+ * @return mixed
+ */
+ public function setItems($items);
+}
\ No newline at end of file
diff --git a/inc/SP/Storage/MySQLHandler.class.php b/inc/SP/Storage/MySQLHandler.class.php
new file mode 100644
index 00000000..64a5955d
--- /dev/null
+++ b/inc/SP/Storage/MySQLHandler.class.php
@@ -0,0 +1,182 @@
+.
+ */
+
+namespace SP\Storage;
+
+use PDO;
+use SP\Config\Config;
+use SP\Core\Exceptions\SPException;
+use SP\Core\Init;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class MySQLHandler
+ *
+ * Esta clase se encarga de crear las conexiones a la BD
+ */
+class MySQLHandler implements DBStorageInterface
+{
+ /**
+ * @var PDO
+ */
+ private $db;
+ /**
+ * @var string
+ */
+ private $dbHost = '';
+ /**
+ * @var string
+ */
+ private $dbSocket;
+ /**
+ * @var int
+ */
+ private $dbPort = 0;
+ /**
+ * @var string
+ */
+ private $dbName = '';
+ /**
+ * @var string
+ */
+ private $dbUser = '';
+ /**
+ * @var string
+ */
+ private $dbPass = '';
+ /**
+ * @var int
+ */
+ private $dbStatus = 1;
+
+ /**
+ * MySQLHandler constructor.
+ *
+ * @param string $dbHost
+ * @param int $dbPort
+ * @param string $dbName
+ * @param string $dbUser
+ * @param string $dbPass
+ */
+ public function __construct($dbHost = null, $dbPort = null, $dbName = null, $dbUser = null, $dbPass = null)
+ {
+ if ($dbHost
+ && $dbPass
+ && $dbName
+ && $dbUser
+ && $dbPass
+ && $dbPort
+ ) {
+ $this->dbHost = $dbHost;
+ $this->dbPort = $dbPort;
+ $this->dbName = $dbName;
+ $this->dbUser = $dbUser;
+ $this->dbPass = $dbPass;
+ } else {
+ $this->setConnectionData();
+ }
+ }
+
+ /**
+ * @return mixed
+ */
+ public function setConnectionData()
+ {
+ $Config = Config::getConfig();
+
+ $this->dbHost = $Config->getDbHost();
+ $this->dbSocket = $Config->getDbSocket();
+ $this->dbUser = $Config->getDbUser();
+ $this->dbPass = $Config->getDbPass();
+ $this->dbName = $Config->getDbName();
+ $this->dbPort = $Config->getDbPort();
+ }
+
+ /**
+ * Realizar la conexión con la BBDD.
+ * Esta función utiliza PDO para conectar con la base de datos.
+ *
+ * @throws \SP\Core\Exceptions\SPException
+ * @return PDO
+ * @throws \SP\Core\Exceptions\FileNotFoundException
+ */
+
+ public function getConnection()
+ {
+ if (!$this->db) {
+ $isInstalled = Config::getConfig()->isInstalled();
+
+ if (empty($this->dbHost) || empty($this->dbUser) || empty($this->dbPass) || empty($this->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', false),
+ __('Compruebe los datos de conexión', false));
+ }
+ }
+
+ try {
+ $opts = [PDO::ATTR_EMULATE_PREPARES => true, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION];
+
+ if (empty($this->dbSocket)) {
+ $dsn = 'mysql:host=' . $this->dbHost . ';port=' . $this->dbPort . ';dbname=' . $this->dbName . ';charset=utf8';
+ } else {
+ $dsn = 'mysql:unix_socket=' . $this->dbSocket . ';dbname=' . $this->dbName . ';charset=utf8';
+ }
+
+ $this->db = new PDO($dsn, $this->dbUser, $this->dbPass, $opts);
+// $this->db = new PDO($dsn, $this->dbUser, $this->dbPass);
+ $this->dbStatus = 0;
+ } catch (\Exception $e) {
+ if ($isInstalled) {
+ if ($e->getCode() === 1049) {
+ Config::getConfig()->setInstalled(false);
+ Config::saveConfig();
+ }
+ 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());
+ }
+ }
+ }
+
+ return $this->db;
+ }
+
+ /**
+ * Devuelve el estado de conexión a la BBDD
+ * OK -> 0
+ * KO -> 1
+ *
+ * @return int
+ */
+ public function getDbStatus()
+ {
+ return $this->dbStatus;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Storage/QueryData.class.php b/inc/SP/Storage/QueryData.class.php
new file mode 100644
index 00000000..f99ef186
--- /dev/null
+++ b/inc/SP/Storage/QueryData.class.php
@@ -0,0 +1,341 @@
+.
+ */
+
+namespace SP\Storage;
+
+use SP\DataModel\DataModelBase;
+
+/**
+ * Class QueryData
+ *
+ * @package SP\Storage
+ */
+class QueryData
+{
+ /**
+ * @var array
+ */
+ protected $data = [];
+ /**
+ * @var string
+ */
+ protected $query = '';
+ /**
+ * @var string
+ */
+ protected $mapClassName = '';
+ /**
+ * @var DataModelBase
+ */
+ protected $mapClass;
+ /**
+ * @var bool
+ */
+ protected $useKeyPair = false;
+ /**
+ * @var string
+ */
+ protected $select = '';
+ /**
+ * @var string
+ */
+ protected $from = '';
+ /**
+ * @var string
+ */
+ protected $where = '';
+ /**
+ * @var string
+ */
+ protected $order = '';
+ /**
+ * @var string
+ */
+ protected $limit = '';
+ /**
+ * @var string
+ */
+ protected $queryCount = '';
+ /**
+ * @var int
+ */
+ protected $queryNumRows = 0;
+ /**
+ * @var int Código de estado tras realizar la consulta
+ */
+ protected $queryStatus = 0;
+ /**
+ * @var string
+ */
+ protected $onErrorMessage;
+
+ /**
+ * Añadir un parámetro a la consulta
+ *
+ * @param $value
+ * @param $name
+ */
+ public function addParam($value, $name = null)
+ {
+ if (null !== $name) {
+ $this->data[$name] = $value;
+ } else {
+ $this->data[] = $value;
+ }
+ }
+
+ /**
+ * @return array
+ */
+ public function getParams()
+ {
+ return $this->data;
+ }
+
+ /**
+ * @return string
+ */
+ public function getQuery()
+ {
+ if ($this->query === '') {
+ return $this->select . ' ' . $this->from . ' ' . $this->where . ' ' . $this->order . ' ' . $this->limit;
+ }
+
+ return $this->query;
+ }
+
+ /**
+ * @param $query
+ */
+ public function setQuery($query)
+ {
+ $this->query = $query;
+ }
+
+ /**
+ * @return string
+ */
+ public function getMapClassName()
+ {
+ return $this->mapClassName;
+ }
+
+ /**
+ * @param string $mapClassName
+ */
+ public function setMapClassName($mapClassName)
+ {
+ $this->mapClassName = $mapClassName;
+ }
+
+ /**
+ * @return DataModelBase
+ */
+ public function getMapClass()
+ {
+ return $this->mapClass;
+ }
+
+ /**
+ * @param DataModelBase $mapClass
+ */
+ public function setMapClass(DataModelBase $mapClass)
+ {
+ $this->mapClass = $mapClass;
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isUseKeyPair()
+ {
+ return $this->useKeyPair;
+ }
+
+ /**
+ * @param boolean $useKeyPair
+ */
+ public function setUseKeyPair($useKeyPair)
+ {
+ $this->useKeyPair = (bool)$useKeyPair;
+ }
+
+ /**
+ * Establecer los parámetros de la consulta
+ *
+ * @param array $data
+ */
+ public function setParams(array $data)
+ {
+ $this->data = $data;
+ }
+
+ /**
+ * @return string
+ */
+ public function getSelect()
+ {
+ return $this->select;
+ }
+
+ /**
+ * @param string $select
+ */
+ public function setSelect($select)
+ {
+ $this->select = 'SELECT ' . $select;
+ }
+
+ /**
+ * @return string
+ */
+ public function getOrder()
+ {
+ return $this->order;
+ }
+
+ /**
+ * @param string $order
+ */
+ public function setOrder($order)
+ {
+ if ($order !== '') {
+ $this->order = 'ORDER BY ' . $order;
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function getLimit()
+ {
+ return $this->limit;
+ }
+
+ /**
+ * @param string $limit
+ */
+ public function setLimit($limit)
+ {
+ if ($limit !== '') {
+ $this->limit = 'LIMIT ' . $limit;
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function getQueryCount()
+ {
+ if ($this->queryCount === '') {
+ return 'SELECT COUNT(*) ' . $this->getFrom() . ' ' . $this->getWhere();
+ }
+
+ return $this->queryCount;
+ }
+
+ /**
+ * @return string
+ */
+ public function getFrom()
+ {
+ return $this->from;
+ }
+
+ /**
+ * @param string $from
+ */
+ public function setFrom($from)
+ {
+ if ($from !== '') {
+ $this->from = 'FROM ' . $from;
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function getWhere()
+ {
+ return $this->where;
+ }
+
+ /**
+ * @param string $where
+ */
+ public function setWhere($where)
+ {
+ if ($where !== '') {
+ $this->where = 'WHERE ' . $where;
+ }
+ }
+
+ /**
+ * @return int
+ */
+ public function getQueryNumRows()
+ {
+ return (int)$this->queryNumRows;
+ }
+
+ /**
+ * @param int $queryNumRows
+ */
+ public function setQueryNumRows($queryNumRows)
+ {
+ $this->queryNumRows = (int)$queryNumRows;
+ }
+
+ /**
+ * @return int
+ */
+ public function getQueryStatus()
+ {
+ return $this->queryStatus;
+ }
+
+ /**
+ * @param int $queryStatus
+ */
+ public function setQueryStatus($queryStatus)
+ {
+ $this->queryStatus = $queryStatus;
+ }
+
+ /**
+ * @return string
+ */
+ public function getOnErrorMessage()
+ {
+ return $this->onErrorMessage;
+ }
+
+ /**
+ * @param string $onErrorMessage
+ */
+ public function setOnErrorMessage($onErrorMessage)
+ {
+ $this->onErrorMessage = $onErrorMessage;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Storage/XmlHandler.class.php b/inc/SP/Storage/XmlHandler.class.php
new file mode 100644
index 00000000..756c9c74
--- /dev/null
+++ b/inc/SP/Storage/XmlHandler.class.php
@@ -0,0 +1,280 @@
+.
+ */
+
+namespace SP\Storage;
+
+use DOMDocument;
+use DOMElement;
+use DOMNode;
+use DOMNodeList;
+use ReflectionObject;
+
+/**
+ * Class XmlHandler para manejo básico de documentos XML
+ *
+ * @package SMD\Storage
+ */
+class XmlHandler implements FileStorageInterface
+{
+ /**
+ * @var mixed
+ */
+ protected $items;
+ /**
+ * @var string
+ */
+ protected $file;
+ /**
+ * @var DOMDocument
+ */
+ private $Dom;
+ /**
+ * @var DOMElement
+ */
+ private $root;
+
+ /**
+ * XmlHandler constructor.
+ *
+ * @param $file
+ */
+ public function __construct($file)
+ {
+ $this->file = $file;
+ }
+
+ /**
+ * Cargar un archivo XML
+ *
+ * @param string $tag
+ * @return FileStorageInterface
+ * @throws \Exception
+ */
+ public function load($tag = 'root')
+ {
+ if (!$this->checkSourceFile()) {
+ throw new \Exception(sprintf(__('No es posible leer/escribir el archivo: %s', false), $this->file));
+ }
+
+ $this->setDOM();
+ $this->items = [];
+ $this->Dom->load($this->file);
+
+ $nodes = $this->Dom->getElementsByTagName($tag)->item(0)->childNodes;
+ $this->items = $this->readChildNodes($nodes);
+
+ return $this;
+ }
+
+ /**
+ * Comprobar que el archivo existe y se puede leer/escribir
+ *
+ * @return bool
+ */
+ protected function checkSourceFile()
+ {
+ return (is_writable($this->file) && filesize($this->file) > 0);
+ }
+
+ /**
+ * Crear un nuevo documento XML
+ */
+ private function setDOM()
+ {
+ $this->Dom = new DOMDocument('1.0', 'utf-8');
+ }
+
+ /**
+ * Leer de forma recursiva los nodos hijos y devolver un array multidimensional
+ *
+ * @param DOMNodeList $NodeList
+ * @return array
+ */
+ protected function readChildNodes(DOMNodeList $NodeList)
+ {
+ $nodes = array();
+
+ foreach ($NodeList as $node) {
+ /** @var $node DOMNode */
+ if (is_object($node->childNodes) && $node->childNodes->length > 1) {
+ if ($node->nodeName === 'item') {
+ $nodes[] = $this->readChildNodes($node->childNodes);
+ } else {
+ $nodes[$node->nodeName] = $this->readChildNodes($node->childNodes);
+ }
+ } elseif ($node->nodeType === XML_ELEMENT_NODE) {
+ $val = is_numeric($node->nodeValue) ? (int)$node->nodeValue : $node->nodeValue;
+
+ if ($node->nodeName === 'item') {
+ $nodes[] = $val;
+ } else {
+ $nodes[$node->nodeName] = $val;
+ }
+ }
+ }
+
+ return $nodes;
+ }
+
+ /**
+ * Obtener un elemento del array
+ *
+ * @param $id
+ * @return mixed
+ */
+ public function __get($id)
+ {
+ return $this->items[$id];
+ }
+
+ /**
+ * Guardar el archivo XML
+ *
+ * @param string $tag
+ * @return FileStorageInterface
+ * @throws \Exception
+ */
+ public function save($tag = 'root')
+ {
+ if (null === $this->items) {
+ throw new \Exception(__('No hay elementos para guardar', false));
+ }
+
+ $this->setDOM();
+ $this->Dom->formatOutput = true;
+
+ $this->root = $this->Dom->createElement($tag);
+ $this->Dom->appendChild($this->root);
+ $this->writeChildNodes($this->items, $this->root);
+// $this->Dom->save($this->file);
+
+ file_put_contents($this->file, $this->Dom->saveXML(), LOCK_EX);
+
+ return $this;
+ }
+
+ /**
+ * Crear los nodos hijos recursivamente a partir de un array multidimensional
+ *
+ * @param mixed $items
+ * @param DOMNode $Node
+ * @param null $type
+ */
+ protected function writeChildNodes($items, DOMNode $Node, $type = null)
+ {
+ foreach ($this->analyzeItems($items) as $key => $value) {
+ if (is_int($key)) {
+ $newNode = $this->Dom->createElement('item');
+ $newNode->setAttribute('type', $type);
+ } else {
+ $newNode = $this->Dom->createElement($key);
+ }
+
+ if (is_array($value) || is_object($value)) {
+ if (is_object($value)) {
+ $newNode->setAttribute('class', get_class($value));
+ $newNode->appendChild($this->Dom->createTextNode(base64_encode(serialize($value))));
+ } else {
+ $this->writeChildNodes($value, $newNode, $key);
+ }
+ } else {
+ $newNode->appendChild($this->Dom->createTextNode(trim($value)));
+ }
+
+ $Node->appendChild($newNode);
+ }
+ }
+
+ /**
+ * Analizar el tipo de elementos
+ *
+ * @param mixed $items
+ * @param bool $serialize
+ * @return array
+ */
+ protected function analyzeItems($items, $serialize = false)
+ {
+ if (is_array($items)) {
+ ksort($items);
+
+ return $items;
+ } elseif (is_object($items)) {
+
+ return $serialize ? serialize($items) : $this->analyzeObject($items);
+ }
+
+ return array();
+
+ }
+
+ /**
+ * Analizar un elemento del tipo objeto
+ *
+ * @param $object
+ * @return array
+ */
+ protected function analyzeObject($object)
+ {
+ $items = array();
+ $Reflection = new ReflectionObject($object);
+
+ foreach ($Reflection->getProperties() as $property) {
+ $property->setAccessible(true);
+ $value = $property->getValue($object);
+
+ if (is_numeric($value) || is_bool($value)) {
+ $items[$property->getName()] = (int)$value;
+ } else {
+ $items[$property->getName()] = $value;
+ }
+
+ $property->setAccessible(false);
+ }
+
+ ksort($items);
+
+ return $items;
+ }
+
+ /**
+ * Devolver los elementos cargados
+ *
+ * @return mixed
+ */
+ public function getItems()
+ {
+ return $this->items;
+ }
+
+ /**
+ * Establecer los elementos
+ *
+ * @param $items
+ * @return mixed
+ */
+ public function setItems($items)
+ {
+ $this->items = $items;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Util/ArrayUtil.class.php b/inc/SP/Util/ArrayUtil.class.php
new file mode 100644
index 00000000..2f6524df
--- /dev/null
+++ b/inc/SP/Util/ArrayUtil.class.php
@@ -0,0 +1,56 @@
+.
+ */
+
+namespace SP\Util;
+
+/**
+ * Class ArrayUtil
+ *
+ * @package SP\Util
+ */
+class ArrayUtil
+{
+ /**
+ * Buscar un objeto en un array según el valor de una propiedad
+ *
+ * @param array $array
+ * @param string $property Nombre de la propiedad
+ * @param string $value Valor de la propiedad
+ * @param object $default Valor por defecto
+ * @return false|object
+ */
+ public static function searchInObject(array $array, $property, $value, $default = null)
+ {
+ foreach ($array as $object) {
+ if (is_object($object)
+ && isset($object->$property)
+ && $value == $object->$property
+ ) {
+ return $object;
+ }
+ }
+
+ return null !== $default ? $default : false;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Util/Checks.class.php b/inc/SP/Util/Checks.class.php
new file mode 100644
index 00000000..07bf903e
--- /dev/null
+++ b/inc/SP/Util/Checks.class.php
@@ -0,0 +1,318 @@
+.
+ */
+
+namespace SP\Util;
+
+use SP\Config\Config;
+use SP\Core\Exceptions\SPException;
+use SP\Http\Request;
+
+/**
+ * Class Checks utilidades de comprobación
+ *
+ * @package SP\Util
+ */
+class Checks
+{
+ /**
+ * Comprobar si la función de números aleatorios está disponible.
+ *
+ * @return bool
+ */
+ public static function secureRNGIsAvailable()
+ {
+ // Check openssl_random_pseudo_bytes
+ if (function_exists('openssl_random_pseudo_bytes')) {
+ openssl_random_pseudo_bytes(1, $strong);
+
+ if ($strong === true) {
+ return true;
+ }
+ }
+
+ // Check /dev/urandom
+ $fp = @file_get_contents('/dev/urandom', false, null, 0, 1);
+
+ return $fp !== false;
+ }
+
+ /**
+ * Comprobar si sysPass se ejecuta en W$indows.
+ *
+ * @return bool
+ */
+ public static function checkIsWindows()
+ {
+ return 0 === strpos(PHP_OS, 'WIN');
+ }
+
+ /**
+ * Comprobar la versión de PHP.
+ *
+ * @return bool
+ */
+ public static function checkPhpVersion()
+ {
+ return version_compare(PHP_VERSION, '5.6.0', '>=') && version_compare(PHP_VERSION, '7.1.0') === -1;
+ }
+
+ /**
+ * Comprobar los módulos necesarios.
+ *
+ * @return array con los módulos no disponibles
+ */
+ public static function checkModules()
+ {
+ $modsNeed = [
+ 'ldap',
+ 'mcrypt',
+ 'curl',
+ 'SimpleXML',
+ 'Phar',
+ 'json',
+ 'xml',
+ 'PDO',
+ 'zlib',
+ 'gettext',
+ 'openssl',
+ 'pcre',
+ 'session',
+ 'gd',
+ 'mbstring'
+ ];
+
+ $missing = [];
+
+ foreach ($modsNeed as $module) {
+ if (!extension_loaded($module)) {
+ $missing[] = $module;
+ }
+ }
+
+ return $missing;
+ }
+
+ /**
+ * Comprobar si el módulo de LDAP está instalado.
+ *
+ * @return bool
+ */
+ public static function ldapIsAvailable()
+ {
+ return extension_loaded('ldap');
+ }
+
+ /**
+ * Comprobar si el módulo CURL está instalado.
+ *
+ * @return bool
+ */
+ public static function curlIsAvailable()
+ {
+ return extension_loaded('curl');
+ }
+
+ /**
+ * Comprobar si el módulo GD está instalado.
+ *
+ * @return bool
+ */
+ public static function gdIsAvailable()
+ {
+ return extension_loaded('gd');
+ }
+
+ /**
+ * Comprobar si está en modo DEMO.
+ *
+ * @return bool
+ */
+ public static function demoIsEnabled()
+ {
+ return Config::getConfig()->isDemoEnabled();
+ }
+
+ /**
+ * Comprobar si está habilitada la gestión de archivos.
+ *
+ * @return bool
+ */
+ public static function fileIsEnabled()
+ {
+ return Config::getConfig()->isFilesEnabled();
+ }
+
+ /**
+ * Comprobar si están habilitadas las notificaciones por correo.
+ *
+ * @return bool
+ */
+ public static function mailIsEnabled()
+ {
+ return Config::getConfig()->isMailEnabled();
+ }
+
+ /**
+ * Comprobar si está habilitada la Wiki.
+ *
+ * @return bool
+ */
+ public static function wikiIsEnabled()
+ {
+ return Config::getConfig()->isWikiEnabled();
+ }
+
+ /**
+ * Comprobar si está habilitada la API de DokuWiki.
+ *
+ * @return bool
+ */
+ public static function dokuWikiIsEnabled()
+ {
+ return Config::getConfig()->isDokuwikiEnabled();
+ }
+
+ /**
+ * Comprobar si están habilitadas las peticiones por correo.
+ *
+ * @return bool
+ */
+ public static function mailrequestIsEnabled()
+ {
+ return Config::getConfig()->isMailRequestsEnabled();
+ }
+
+ /**
+ * Comprobar si está habilitado LDAP.
+ *
+ * @return bool
+ */
+ public static function ldapIsEnabled()
+ {
+ return Config::getConfig()->isLdapEnabled();
+ }
+
+ /**
+ * Comprobar si está habilitado el log de eventos.
+ *
+ * @return bool
+ */
+ public static function logIsEnabled()
+ {
+ return Config::getConfig()->isLogEnabled();
+ }
+
+ /**
+ * Comprobar si está habilitado el servidor de syslog.
+ *
+ * @return bool
+ */
+ public static function syslogIsEnabled()
+ {
+ return Config::getConfig()->isSyslogEnabled();
+ }
+
+ /**
+ * Comprobar si está habilitado el servidor de syslog.
+ *
+ * @return bool
+ */
+ public static function remoteSyslogIsEnabled()
+ {
+ return Config::getConfig()->isSyslogRemoteEnabled();
+ }
+
+
+ /**
+ * Comprobar si está habilitado el formato de tarjeta en los resultados.
+ *
+ * @return bool
+ */
+ public static function resultsCardsIsEnabled()
+ {
+ return Config::getConfig()->isResultsAsCards();
+ }
+
+ /**
+ * Comprobar si está habilitado usar imagen para claves de cuentas
+ *
+ * @return bool
+ */
+ public static function accountPassToImageIsEnabled()
+ {
+ return Config::getConfig()->isAccountPassToImage();
+ }
+
+ /**
+ * Comprobar si está habilitado forzar la conexión por HTTPS
+ *
+ * @return bool
+ */
+ public static function forceHttpsIsEnabled()
+ {
+ return Config::getConfig()->isHttpsEnabled();
+ }
+
+ /**
+ * Comprobar si está habilitado la publicación de enlaces
+ *
+ * @return bool
+ */
+ public static function publicLinksIsEnabled()
+ {
+ return Config::getConfig()->isPublinksEnabled();
+ }
+
+ /**
+ * Comprobar si se utiliza HTTPS
+ *
+ * @return bool
+ */
+ public static function httpsEnabled()
+ {
+ return
+ (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')
+ || $_SERVER['SERVER_PORT'] === 443;
+ }
+
+ /**
+ * Comprobar si la petición es Ajax
+ *
+ * @return bool
+ */
+ public static function isAjax()
+ {
+ return Request::getRequestHeaders('X-Requested-With') === 'XMLHttpRequest';
+ }
+
+ /**
+ * Comprobar si la petición es en formato JSON
+ *
+ * @return bool
+ */
+ public static function isJson()
+ {
+ return strpos(Request::getRequestHeaders('Accept'), 'application/json') === 0;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Util/Connection.class.php b/inc/SP/Util/Connection.class.php
new file mode 100644
index 00000000..a2785d86
--- /dev/null
+++ b/inc/SP/Util/Connection.class.php
@@ -0,0 +1,165 @@
+.
+ */
+
+namespace SP\Util;
+
+use SP\Core\Exceptions\SPException;
+
+/**
+ * Class Connection para crear conexiones TCP o UDP
+ *
+ * @package SP\Util
+ */
+class Connection implements ConnectionInterface
+{
+ /**
+ * @var resource
+ */
+ protected $socket;
+
+ /**
+ * @var string
+ */
+ protected $host = '';
+
+ /**
+ * @var int
+ */
+ protected $port = 0;
+ /**
+ * Código de error del socket
+ *
+ * @var int
+ */
+ protected $errorno = 0;
+ /**
+ * Mensaje de error del socket
+ *
+ * @var string
+ */
+ protected $errorstr = '';
+
+ /**
+ * @param $host string El host a conectar
+ * @param $port string El puerto a conectar
+ */
+ public function __construct($host, $port)
+ {
+ $this->host = gethostbyname($host);
+ $this->port = $port;
+ }
+
+ /**
+ * Obtener un socket
+ *
+ * @param $type int EL tipo de socket TCP/UDP
+ * @return mixed
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function getSocket($type)
+ {
+ switch ($type){
+ case self::TYPE_TCP:
+ $this->socket = $this->getTCPSocket();
+ break;
+ case self::TYPE_UDP:
+ $this->socket = $this->getUDPSocket();
+ break;
+ default:
+ $this->socket = $this->getTCPSocket();
+ break;
+ }
+
+ if ($this->socket === false) {
+ throw new SPException(SPException::SP_WARNING, $this->getSocketError());
+ }
+
+ stream_set_timeout($this->socket, self::SOCKET_TIMEOUT);
+ }
+
+ /**
+ * Cerrar el socket
+ */
+ public function closeSocket()
+ {
+ fclose($this->socket);
+// @socket_close($this->_socket);
+ }
+
+ /**
+ * Enviar un mensaje al socket
+ *
+ * @param $message string El mensaje a enviar
+ * @return int|bool
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function send($message)
+ {
+ if (!is_resource($this->socket)) {
+ throw new SPException(SPException::SP_WARNING, __('Socket no inicializado', false));
+ }
+
+ $nBytes = @fwrite($this->socket, $message);
+// $nBytes = @socket_sendto($this->_socket, $message, strlen($message), 0, $this->_host, $this->port);
+
+ if ($nBytes === false) {
+ throw new SPException(SPException::SP_WARNING, __('Error al enviar datos', false), $this->getSocketError());
+ }
+
+ return $nBytes;
+ }
+
+ /**
+ * Obtener el último error del socket
+ *
+ * @return string
+ */
+ public function getSocketError()
+ {
+ return sprintf('%s (%d)', $this->errorstr, $this->errorno);
+// return socket_strerror(socket_last_error($this->_socket));
+ }
+
+ /**
+ * Obtener un socket del tipo UDP
+ *
+ * @return resource
+ */
+ private function getUDPSocket()
+ {
+ return stream_socket_client('udp://' . $this->host . ':' . $this->port, $this->errorno, $this->errorstr, self::SOCKET_TIMEOUT);
+// return @socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
+ }
+
+ /**
+ * Obtener un socket del tipo TCP
+ *
+ * @return resource
+ */
+ private function getTCPSocket()
+ {
+ return stream_socket_client('tcp://' . $this->host . ':' . $this->port, $this->errorno, $this->errorstr, self::SOCKET_TIMEOUT);
+// return @socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Util/ConnectionInterface.class.php b/inc/SP/Util/ConnectionInterface.class.php
new file mode 100644
index 00000000..833ebb82
--- /dev/null
+++ b/inc/SP/Util/ConnectionInterface.class.php
@@ -0,0 +1,67 @@
+.
+ */
+
+namespace SP\Util;
+
+/**
+ * Class ConnectionInterface
+ *
+ * @package SP\Util
+ */
+interface ConnectionInterface
+{
+ const TYPE_TCP = 1;
+ const TYPE_UDP = 2;
+ const SOCKET_TIMEOUT = 10;
+
+ /**
+ * Obtener un socket
+ *
+ * @param $type
+ * @return mixed
+ */
+ public function getSocket($type);
+
+ /**
+ * Cerrar un socket
+ *
+ * @return mixed
+ */
+ public function closeSocket();
+
+ /**
+ * Obtener el último error del socket
+ *
+ * @return string
+ */
+ public function getSocketError();
+
+ /**
+ * Enviar un mensaje al socket
+ *
+ * @param $message string El mensaje a enviar
+ * @return mixed
+ */
+ public function send($message);
+}
\ No newline at end of file
diff --git a/inc/ImageUtil.class.php b/inc/SP/Util/ImageUtil.class.php
similarity index 64%
rename from inc/ImageUtil.class.php
rename to inc/SP/Util/ImageUtil.class.php
index 555498cc..0a26cb70 100644
--- a/inc/ImageUtil.class.php
+++ b/inc/SP/Util/ImageUtil.class.php
@@ -2,9 +2,9 @@
/**
* sysPass
*
- * @author nuxsmin
- * @link http://syspass.org
- * @copyright 2012-2015 Rubén Domínguez nuxsmin@syspass.org
+ * @author nuxsmin
+ * @link http://syspass.org
+ * @copyright 2012-2017, Rubén Domínguez nuxsmin@$syspass.org
*
* This file is part of sysPass.
*
@@ -19,13 +19,15 @@
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with sysPass. If not, see .
- *
+ * along with sysPass. If not, see .
*/
-namespace SP;
+namespace SP\Util;
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
+use SP\Core\Init;
+use SP\Log\LogUtil;
+
+defined('APP_ROOT') || die();
/**
* Class ImageUtil para la manipulación de imágenes
@@ -39,30 +41,39 @@ class ImageUtil
*
* @param $text string El texto a convertir
* @return bool|string
+ * @throws \SP\Core\Exceptions\SPException
*/
public static function convertText($text)
{
- if(!function_exists('imagepng')){
+ if (!Checks::gdIsAvailable()) {
+ LogUtil::extensionNotLoaded('GD');
+
return false;
}
- $im = imagecreatetruecolor(strlen($text) * 20, 30);
+ $width = strlen($text) * 10;
+
+ $im = @imagecreatetruecolor($width, 30);
+
+ if ($im === false) {
+ return false;
+ }
// Colores de la imagen
- $bgColor = imagecolorallocate($im, 255, 255, 255);
+ $bgColor = imagecolorallocate($im, 245, 245, 245);
// $shadowColor = imagecolorallocate($im, 128, 128, 128);
$fgColor = imagecolorallocate($im, 128, 128, 128);
- imagefilledrectangle($im, 0, 0, strlen($text) * 20, 29, $bgColor);
+ imagefilledrectangle($im, 0, 0, $width, 30, $bgColor);
// Ruta de la fuente
- $font = Init::$SERVERROOT . '/imgs/NotoSansUI-Regular.ttf';
+ $font = Init::$SERVERROOT . '/css/fonts/NotoSans-Regular-webfont.ttf';
// Sombra
// imagettftext($im, 14, 0, 13, 23, $shadowColor, $font, $text);
// Crear el texto
- imagettftext($im, 12, 0, 10, 20, $fgColor, $font, $text);
+ imagettftext($im, 10, 0, 10, 20, $fgColor, $font, $text);
// Devolver la imagen
ob_start();
@@ -81,12 +92,11 @@ class ImageUtil
* @param $image string La imagen a redimensionar
* @return bool|string
*/
- public static function createThumbnail(&$image)
+ public static function createThumbnail($image)
{
- if(!function_exists('imagepng')
- || !function_exists('imagecreatefromjpeg')
- || !function_exists('imagecreatefrompng')
- ){
+ if (!Checks::gdIsAvailable()) {
+ LogUtil::extensionNotLoaded('GD', __FUNCTION__);
+
return false;
}
@@ -97,13 +107,13 @@ class ImageUtil
// Calcular el tamaño de la miniatura
$new_width = 48;
- $new_height = floor( $height * ( $new_width / $width ) );
+ $new_height = floor($height * ($new_width / $width));
// Crear nueva imagen
- $imTmp = imagecreatetruecolor($new_width, $new_height );
+ $imTmp = imagecreatetruecolor($new_width, $new_height);
// Redimensionar la imagen
- imagecopyresized( $imTmp, $im, 0, 0, 0, 0, $new_width, $new_height, $width, $height );
+ imagecopyresized($imTmp, $im, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
// Devolver la imagen
ob_start();
diff --git a/inc/SP/Util/Json.class.php b/inc/SP/Util/Json.class.php
new file mode 100644
index 00000000..ae5a76a5
--- /dev/null
+++ b/inc/SP/Util/Json.class.php
@@ -0,0 +1,117 @@
+.
+ */
+
+namespace SP\Util;
+
+use SP\Core\Exceptions\SPException;
+use SP\Http\JsonResponse;
+
+
+/**
+ * Class Json con utilidades para JSON
+ *
+ * @package SP\Util
+ */
+class Json
+{
+ /**
+ * Devuelve una respuesta en formato JSON con el estado y el mensaje.
+ *
+ * @param JsonResponse $json
+ * @return bool
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public static function returnJson(JsonResponse $json)
+ {
+ header('Content-type: application/json');
+ exit(self::getJson($json));
+ }
+
+ /**
+ * Devuelve una cadena en formato JSON
+ *
+ * @param $data
+ * @return string La cadena en formato JSON
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public static function getJson($data)
+ {
+ $json = json_encode($data);
+
+ if ($json === false) {
+ throw new SPException(SPException::SP_CRITICAL, __('Error de codificación', false), json_last_error_msg());
+ }
+
+ return $json;
+ }
+
+ /**
+ * Devuelve un array con las cadenas formateadas para JSON
+ *
+ * @param $data mixed
+ * @return mixed
+ */
+ public static function safeJson(&$data)
+ {
+ if (is_array($data) || is_object($data)) {
+ array_walk_recursive($data,
+ function (&$value) {
+ if (is_object($value)) {
+ foreach ($value as &$attribute) {
+ if (is_string($attribute) && $attribute !== '') {
+ self::safeJsonString($attribute);
+ }
+ }
+
+ return $value;
+ } elseif (is_string($value) && $value !== '') {
+ return self::safeJsonString($value);
+ } else {
+ return $value;
+ }
+ }
+ );
+ } elseif (is_string($data) && $data !== '') {
+ return self::safeJsonString($data);
+ }
+
+ return $data;
+ }
+
+ /**
+ * Devuelve una cadena con los carácteres formateadas para JSON
+ *
+ * @param $string
+ * @return mixed
+ */
+ public static function safeJsonString(&$string)
+ {
+ $strFrom = ['\\', '"', '\''];
+ $strTo = ['\\', '\"', '\\\''];
+
+ $string = str_replace($strFrom, $strTo, $string);
+
+ return $string;
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Util/Util.class.php b/inc/SP/Util/Util.class.php
new file mode 100644
index 00000000..f0a4d05d
--- /dev/null
+++ b/inc/SP/Util/Util.class.php
@@ -0,0 +1,636 @@
+.
+ */
+
+namespace SP\Util;
+
+use SP\Config\Config;
+use SP\Config\ConfigDB;
+use SP\Core\Exceptions\SPException;
+use SP\Core\Init;
+use SP\Core\Session;
+use SP\Html\Html;
+use SP\Log\Log;
+use SP\Log\LogUtil;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Clase con utilizades para la aplicación
+ */
+class Util
+{
+ /**
+ * Generar una clave aleatoria
+ *
+ * @param int $length Longitud de la clave
+ * @param bool $useNumbers Usar números
+ * @param bool $useSpecial Usar carácteres especiales
+ * @param bool $checKStrength
+ * @return string
+ */
+ public static function randomPassword($length = 16, $useNumbers = true, $useSpecial = true, $checKStrength = true)
+ {
+ $charsLower = 'abcdefghijklmnopqrstuwxyz';
+ $charsUpper = 'ABCDEFGHIJKLMNOPQRSTUWXYZ';
+
+ $alphabet = $charsLower . $charsUpper;
+
+ if ($useSpecial === true) {
+ $charsSpecial = '@$%&/()!_:.;{}^';
+ $alphabet .= $charsSpecial;
+ }
+
+ if ($useNumbers === true) {
+ $charsNumbers = '0123456789';
+ $alphabet .= $charsNumbers;
+ }
+
+ /**
+ * @return array
+ */
+ $passGen = function () use ($alphabet, $length) {
+ $pass = [];
+ $alphaLength = strlen($alphabet) - 1; //put the length -1 in cache
+
+ for ($i = 0; $i < $length; $i++) {
+ $n = mt_rand(0, $alphaLength);
+ $pass[] = $alphabet[$n];
+ }
+
+ return $pass;
+ };
+
+ if ($checKStrength === true) {
+ do {
+ $pass = $passGen();
+ $strength = ['lower' => 0, 'upper' => 0, 'special' => 0, 'number' => 0];
+
+ foreach ($pass as $char) {
+ if (strpos($charsLower, $char) !== false) {
+ $strength['lower']++;
+ } elseif (strpos($charsUpper, $char) !== false) {
+ $strength['upper']++;
+ } elseif ($useSpecial === true && strpos($charsSpecial, $char) !== false) {
+ $strength['special']++;
+ } elseif ($useNumbers === true && strpos($charsNumbers, $char) !== false) {
+ $strength['number']++;
+ }
+ }
+
+ if ($useSpecial === false) {
+ unset($strength['special']);
+ }
+
+ if ($useNumbers === false) {
+ unset($strength['number']);
+ }
+ } while (in_array(0, $strength, true));
+
+ return implode($pass);
+ } else {
+ return implode($passGen());
+ }
+ }
+
+ /**
+ * Generar una cadena aleatoria usuando criptografía.
+ *
+ * @param int $length opcional, con la longitud de la cadena
+ * @return string
+ */
+ public static function generateRandomBytes($length = 30)
+ {
+ // Try to use openssl_random_pseudo_bytes
+ if (function_exists('openssl_random_pseudo_bytes')) {
+ $pseudo_byte = bin2hex(openssl_random_pseudo_bytes($length));
+ return substr($pseudo_byte, 0, $length); // Truncate it to match the length
+ }
+
+ // Try to use /dev/urandom
+ $fp = @file_get_contents('/dev/urandom', false, null, 0, $length);
+ if ($fp !== false) {
+ return substr(bin2hex($fp), 0, $length);
+ }
+
+ // Fallback to mt_rand()
+ $characters = '0123456789';
+ $characters .= 'abcdefghijklmnopqrstuvwxyz';
+ $characters .= strtoupper('abcdefghijklmnopqrstuvwxyz');
+ $charactersLength = strlen($characters) - 1;
+ $pseudo_byte = '';
+
+ // Select some random characters
+ for ($i = 0; $i < $length; $i++) {
+ $pseudo_byte .= $characters[mt_rand(0, $charactersLength)];
+ }
+
+ return $pseudo_byte;
+ }
+
+
+ /**
+ * Devuelve el valor de la variable enviada por un formulario.
+ *
+ * @param string $s con el nombre de la variable
+ * @param string $d con el valor por defecto
+ * @return string con el valor de la variable
+ */
+ public static function init_var($s, $d = '')
+ {
+ $r = $d;
+ if (isset($_REQUEST[$s]) && !empty($_REQUEST[$s])) {
+ $r = Html::sanitize($_REQUEST[$s]);
+ }
+
+ return $r;
+ }
+
+
+ /**
+ * Devuelve la versión de sysPass.
+ *
+ * @return string con la versión
+ */
+ public static function getVersionString()
+ {
+ return '2.0';
+ }
+
+ /**
+ * Comprobar si hay actualizaciones de sysPass disponibles desde internet (github.com)
+ * Esta función hace una petición a GitHub y parsea el JSON devuelto para verificar
+ * si la aplicación está actualizada
+ *
+ * @return array|bool
+ */
+ public static function checkUpdates()
+ {
+ if (!Config::getConfig()->isCheckUpdates()) {
+ return false;
+ }
+
+ try {
+ $data = self::getDataFromUrl(self::getAppInfo('appupdates'));
+ } catch (SPException $e) {
+ return false;
+ }
+
+ $updateInfo = json_decode($data);
+
+ if (!isset($updateInfo->message)) {
+ // $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
+
+ $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);
+// preg_match('/v?(\d+)\.(\d+)\.(\d+)(\-[a-z0-9.]+)?$/', $version, $realVer);
+
+ if (is_array($realVer) && Init::isLoggedIn()) {
+ $appVersion = implode('', self::getVersion(true));
+ $pubVersion = $realVer[1] . $realVer[2] . $realVer[3] . $realVer[4];
+// $pubVersion = $realVer[1] . $realVer[2] . $realVer[3];
+
+ if ((int)$pubVersion > (int)$appVersion) {
+ return [
+ 'version' => $version,
+ 'url' => $url,
+ 'title' => $title,
+ 'description' => $description,
+ 'date' => $date];
+ } else {
+ return true;
+ }
+ } else {
+ return false;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Obtener datos desde una URL usando CURL
+ *
+ * @param string $url
+ * @param array $data
+ * @param bool|null $useCookie
+ * @param bool $weak
+ * @return bool|string
+ * @throws SPException
+ */
+ public static function getDataFromUrl($url, array $data = null, $useCookie = false, $weak = false)
+ {
+ if (!Checks::curlIsAvailable()) {
+ $Log = LogUtil::extensionNotLoaded('CURL', __FUNCTION__);
+
+ throw new SPException(SPException::SP_WARNING, $Log->getDescription());
+ }
+
+ $ch = curl_init($url);
+
+ if (Config::getConfig()->isProxyEnabled()) {
+ curl_setopt($ch, CURLOPT_PROXY, Config::getConfig()->getProxyServer());
+ curl_setopt($ch, CURLOPT_PROXYPORT, Config::getConfig()->getProxyPort());
+ curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
+
+ $proxyUser = Config::getConfig()->getProxyUser();
+
+ if ($proxyUser) {
+ $proxyAuth = $proxyUser . ':' . Config::getConfig()->getProxyPass();
+ curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyAuth);
+ }
+ }
+
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($ch, CURLOPT_HEADER, false);
+ curl_setopt($ch, CURLINFO_HEADER_OUT, true);
+ curl_setopt($ch, CURLOPT_USERAGENT, 'sysPass-App');
+ curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
+ curl_setopt($ch, CURLOPT_TIMEOUT, 60);
+
+ if ($weak === true) {
+ // Trust SSL enabled server
+ curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
+ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
+ }
+
+ if (null !== $data) {
+ curl_setopt($ch, CURLOPT_POST, 1);
+ curl_setopt($ch, CURLOPT_HTTPHEADER, $data['type']);
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $data['data']);
+ }
+
+ if ($useCookie) {
+ $cookie = self::getUserCookieFile();
+
+ if (!Session::getCurlCookieSession()) {
+ curl_setopt($ch, CURLOPT_COOKIESESSION, true);
+ curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
+
+ Session::setCurlCookieSession(true);
+ }
+
+ curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
+ }
+
+ $data = curl_exec($ch);
+
+ $httpStatus = curl_getinfo($ch, CURLINFO_HTTP_CODE);
+
+ if ($data === false || $httpStatus !== 200) {
+ $Log = new Log();
+ $LogMessgae = $Log->getLogMessage();
+ $LogMessgae->setAction(__FUNCTION__);
+ $LogMessgae->addDescription(curl_error($ch));
+ $LogMessgae->addDetails(__('Respuesta', false), $httpStatus);
+ $Log->setLogLevel(Log::ERROR);
+ $Log->writeLog();
+
+ throw new SPException(SPException::SP_WARNING, $LogMessgae->getDescription());
+ }
+
+ return $data;
+ }
+
+ /**
+ * Devuelve el nombre de archivo a utilizar para las cookies del usuario
+ *
+ * @return string
+ */
+ public static function getUserCookieFile()
+ {
+ return '/tmp/' . md5('syspass-' . Session::getUserData()->getUserLogin());
+ }
+
+ /**
+ * Devuelve información sobre la aplicación.
+ *
+ * @param string $index con la key a devolver
+ * @return array con las propiedades de la aplicación
+ */
+ public static function getAppInfo($index = null)
+ {
+ $appinfo = [
+ 'appname' => 'sysPass',
+ 'appdesc' => 'Systems Password Manager',
+ 'appalias' => 'SPM',
+ 'appwebsite' => 'http://www.syspass.org',
+ 'appblog' => 'http://www.cygnux.org',
+ 'appdoc' => 'http://wiki.syspass.org',
+ 'appupdates' => 'https://api.github.com/repos/nuxsmin/sysPass/releases/latest',
+ 'appnotices' => 'https://api.github.com/repos/nuxsmin/sysPass/issues?milestone=none&state=open&labels=Notices',
+ 'apphelp' => 'https://github.com/nuxsmin/sysPass/issues',
+ 'appchangelog' => 'https://github.com/nuxsmin/sysPass/blob/master/CHANGELOG'];
+
+ if (null !== $index && isset($appinfo[$index])) {
+ return $appinfo[$index];
+ }
+
+ return $appinfo;
+ }
+
+ /**
+ * Devuelve la versión de sysPass.
+ *
+ * @param bool $retBuild devolver el número de compilación
+ * @return array con el número de versión
+ */
+ public static function getVersion($retBuild = false)
+ {
+ $build = '17021301';
+ $version = [2, 0, 0];
+
+ if ($retBuild) {
+ $version[] = $build;
+ }
+
+ return $version;
+ }
+
+ /**
+ * 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::getConfig()->isChecknotices()) {
+ return false;
+ }
+
+ try {
+ $data = self::getDataFromUrl(self::getAppInfo('appnotices'));
+ } catch (SPException $e) {
+ return false;
+ }
+
+ $noticesData = json_decode($data);
+
+
+ if (!isset($noticesData->message)) {
+ $notices = [];
+
+ // $noticesData[0]->title
+ // $noticesData[0]->body
+ // $noticesData[0]->created_at
+
+ foreach ($noticesData as $notice) {
+ $notices[] = [
+ $notice->title,
+// $notice->body,
+ $notice->created_at
+ ];
+ }
+
+ return $notices;
+ } else {
+ debugLog($noticesData->message);
+ }
+
+ return false;
+ }
+
+ /**
+ * Realiza el proceso de logout.
+ */
+ public static function logout()
+ {
+ exit('');
+ }
+
+ /**
+ * Obtener el tamaño máximo de subida de PHP.
+ */
+ public static function getMaxUpload()
+ {
+ $max_upload = (int)ini_get('upload_max_filesize');
+ $max_post = (int)ini_get('post_max_size');
+ $memory_limit = (int)ini_get('memory_limit');
+ $upload_mb = min($max_upload, $max_post, $memory_limit);
+
+ Log::writeNewLog(__FUNCTION__, 'Max. PHP upload: ' . $upload_mb . 'MB');
+ }
+
+ /**
+ * Checks a variable to see if it should be considered a boolean true or false.
+ * Also takes into account some text-based representations of true of false,
+ * 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.
+ * @return bool The boolean equivalent or null (if strict, and no exact equivalent)
+ */
+ public static function boolval($in, $strict = false)
+ {
+ $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) {
+ 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)) {
+ return true;
+ }
+ } else {
+ // not strict? let the regular php bool check figure it out (will
+ // largely default to true)
+ return ($in ? true : false);
+ }
+ }
+
+ /**
+ * Establecer variable de sesión para recargar la aplicación.
+ */
+ public static function reload()
+ {
+ if (Session::getReload() === false) {
+ Session::setReload(true);
+ }
+ }
+
+ /**
+ * Comprobar si se necesita recargar la aplicación.
+ */
+ public static function checkReload()
+ {
+ if (Session::getReload() === true) {
+ Session::setReload(false);
+ exit('');
+ }
+ }
+
+ /**
+ * Recorrer un array y escapar los carácteres no válidos en Javascript.
+ *
+ * @param $array
+ * @return array
+ */
+ public static function arrayJSEscape(&$array)
+ {
+ array_walk($array, function (&$value, $index) {
+ $value = str_replace(['\'', '"'], '\\\'', $value);
+ });
+ return $array;
+ }
+
+ /**
+ * Obtener la URL de acceso al servidor
+ *
+ * @return string
+ */
+ public static function getServerUrl()
+ {
+ $urlScheme = Checks::httpsEnabled() ? 'https://' : 'http://';
+ $urlPort = ($_SERVER['SERVER_PORT'] !== 443) ? ':' . $_SERVER['SERVER_PORT'] : '';
+
+ return $urlScheme . $_SERVER['SERVER_NAME'] . $urlPort;
+ }
+
+ /**
+ * Cast an object to another class, keeping the properties, but changing the methods
+ *
+ * @param string $class Class name
+ * @param string|object $object
+ * @return mixed
+ * @link http://blog.jasny.net/articles/a-dark-corner-of-php-class-casting/
+ */
+ public static function castToClass($class, $object, $srcClass = null)
+ {
+ if (!is_object($object)) {
+ $object = unserialize($object);
+ }
+
+ if (get_class($object) === '__PHP_Incomplete_Class') {
+ // Elimina el nombre de la clase en los métodos privados
+ if ($srcClass !== null) {
+ $replace = preg_replace_callback(
+ '/:\d+:"\x00' . preg_quote($srcClass) . '\x00(\w+)"/',
+ function ($matches) {
+ return ':' . strlen($matches[1]) . ':"' . $matches[1] . '"';
+ },
+ serialize($object)
+ );
+
+ $replace = preg_replace('/^O:\d+:"[^"]++"/', 'O:' . strlen($class) . ':"' . $class . '"', $replace);
+ } else {
+ $replace = preg_replace('/^O:\d+:"[^"]++"/', 'O:' . strlen($class) . ':"' . $class . '"', serialize($object));
+ }
+
+ return unserialize($replace);
+ } else {
+ return $object;
+ }
+ }
+
+ /**
+ * Devuelve la última función llamada tras un error
+ *
+ * @param string $function La función utilizada como base
+ */
+ public static function traceLastCall($function = null)
+ {
+ $backtrace = debug_backtrace(0);
+
+ if (count($backtrace) === 1) {
+ return $backtrace[1]['function'];
+ }
+
+ foreach ($backtrace as $index => $fn) {
+ if ($fn['function'] === $function) {
+ return $backtrace[$index + 1]['function'];
+ }
+ }
+ }
+
+ /**
+ * Comprobar si un valor existe en un array de objetos
+ *
+ * @param array $objectArray
+ * @param string $method
+ * @param mixed $value
+ * @return bool
+ */
+ public static function checkInObjectArray(array $objectArray, $method, $value)
+ {
+ foreach ($objectArray as $object) {
+ if ($object->$method() === $value) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Bloquear la aplicación
+ * @param bool $setMaintenance
+ */
+ public static function lockApp($setMaintenance = true)
+ {
+ ConfigDB::setValue('lock', Session::getUserData()->getUserId(), false);
+
+ if ($setMaintenance) {
+ Config::getConfig()->setMaintenance(true);
+ Config::saveConfig(null, false);
+ }
+ }
+
+ /**
+ * Desbloquear la aplicación
+ * @param bool $unsetMaintenance
+ */
+ public static function unlockApp($unsetMaintenance = true)
+ {
+ ConfigDB::setValue('lock', 0, false);
+
+ if ($unsetMaintenance) {
+ Config::getConfig()->setMaintenance(false);
+ Config::saveConfig(null, false);
+ }
+ }
+
+ /**
+ * Comprueba si la aplicación está bloqueada
+ *
+ * @return int
+ */
+ public static function getAppLock()
+ {
+ return (int)ConfigDB::getValue('lock', 0);
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Util/Wiki/DokuWikiApi.class.php b/inc/SP/Util/Wiki/DokuWikiApi.class.php
new file mode 100644
index 00000000..3b1fbc66
--- /dev/null
+++ b/inc/SP/Util/Wiki/DokuWikiApi.class.php
@@ -0,0 +1,274 @@
+.
+ */
+
+namespace SP\Util\Wiki;
+
+use SP\Config\Config;
+use SP\Core\Exceptions\SPException;
+use SP\Core\Session;
+use SP\Log\Log;
+use SP\Log\LogLevel;
+
+defined('APP_ROOT') || die();
+
+/**
+ * Class DokuWikiApi para realizar consultas a la API de DokuWiki
+ *
+ * @package SP\Util\Wiki
+ */
+class DokuWikiApi extends DokuWikiApiBase
+{
+ /**
+ * @var string
+ */
+ private $namespace;
+
+ /**
+ * Constructor
+ *
+ * @param string $url La URL de conexión
+ * @param string $user El usuario de conexión
+ * @param string $pass La clave de conexión
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public function __construct($url = null, $user = null, $pass = null)
+ {
+ try {
+ $this->setConnectionData($url, $user, $pass);
+
+ if (!empty($this->apiUser) && Session::getDokuWikiSession() === false) {
+ $Res = new DokuWikiApiParse($this->doLogin());
+ $this->catchError($Res);
+ $resLogin = $Res->parseParams();
+
+ Session::setDokuWikiSession($resLogin[0]);
+
+ if ($resLogin[0] === false) {
+ throw new SPException(SPException::SP_WARNING, __('Fallo de autentificación', false));
+ }
+ }
+
+ $this->namespace = Config::getConfig()->getDokuwikiNamespace();
+ } catch (SPException $e) {
+ $this->logException($e);
+ throw $e;
+ } catch (\InvalidArgumentException $e) {
+ Log::writeNewLog('DokuWiki API', $e->getMessage(), LogLevel::ERROR);
+ throw new SPException(SPException::SP_WARNING, $e->getMessage());
+ }
+ }
+
+ /**
+ * Comprobar la conexión a DokuWiki
+ *
+ * @param string $url La URL de conexión
+ * @param string $user El usuario de conexión
+ * @param string $pass La clave de conexión
+ * @return DokuWikiApi
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ public static function checkConnection($url = null, $user = null, $pass = null)
+ {
+ try {
+ // Reinicializar la cookie de DokuWiki
+ Session::setDokuWikiSession(false);
+
+ return new DokuWikiApi($url, $user, $pass);
+ } catch (SPException $e) {
+ throw $e;
+ }
+ }
+
+ /**
+ * Obtener el listado de páginas de la Wiki
+ *
+ * @return bool
+ */
+ public function getPageList()
+ {
+ try {
+ $this->createMsg('dokuwiki.getPagelist');
+ $this->addParam($this->namespace);
+ $this->addParam(['depth' => 0]);
+ $Res = new DokuWikiApiParse($this->callWiki());
+ $this->catchError($Res);
+
+ return $Res->parseParams();
+ } catch (SPException $e) {
+ $this->logException($e, __FUNCTION__);
+ return false;
+ }
+ }
+
+ /**
+ * Realizar una búsqueda en la Wiki
+ *
+ * @param string $search El texto a buscar
+ * @return array|bool
+ */
+ public function getSearch($search)
+ {
+ try {
+ $this->createMsg('dokuwiki.search');
+ $this->addParam($search);
+ $Res = new DokuWikiApiParse($this->callWiki());
+ $this->catchError($Res);
+
+ return $Res->parseParams();
+ } catch (SPException $e) {
+ $this->logException($e, __FUNCTION__);
+ return false;
+ }
+ }
+
+ /**
+ * Obtener una página de la Wiki
+ *
+ * @param string $page El nombre de la página a obtener
+ * @return array|bool
+ */
+ public function getPage($page)
+ {
+ if (!empty($this->namespace)) {
+ $page = $this->namespace . ':' . $page;
+ }
+
+ try {
+ $this->createMsg('wiki.getPageHTML');
+ $this->addParam($page);
+ $Res = new DokuWikiApiParse($this->callWiki());
+ $this->catchError($Res);
+
+ return $Res->parseParams();
+ } catch (SPException $e) {
+ $this->logException($e, __FUNCTION__);
+ return false;
+ }
+ }
+
+ /**
+ * Obtener una página de la Wiki en formato original
+ *
+ * @param string $page El nombre de la página a obtener
+ * @return array|bool
+ */
+ public function getRawPage($page)
+ {
+ try {
+ $this->createMsg('wiki.getPage');
+ $this->addParam($page);
+ $Res = new DokuWikiApiParse($this->callWiki());
+ $this->catchError($Res);
+
+ return $Res->parseParams();
+ } catch (SPException $e) {
+ $this->logException($e, __FUNCTION__);
+ return false;
+ }
+ }
+
+ /**
+ * Obtener la información de una página de la Wiki
+ *
+ * @param string $page El nombre de la página a obtener
+ * @return array|bool
+ */
+ public function getPageInfo($page)
+ {
+ if (!empty($this->namespace)) {
+ $page = $this->namespace . ':' . $page;
+ }
+
+ try {
+ $this->createMsg('wiki.getPageInfo');
+ $this->addParam($page);
+ $Res = new DokuWikiApiParse($this->callWiki());
+ $this->catchError($Res);
+
+ return $Res->parseParams();
+ } catch (SPException $e) {
+ $this->logException($e, __FUNCTION__);
+ return false;
+ }
+ }
+
+ /**
+ * Obtener la versión de DokuWiki
+ *
+ * @return array|bool
+ */
+ public function getVersion()
+ {
+ try {
+ $this->createMsg('dokuwiki.getVersion');
+ $Res = new DokuWikiApiParse($this->callWiki());
+ $this->catchError($Res);
+
+ return $Res->parseParams();
+ } catch (SPException $e) {
+ $this->logException($e, __FUNCTION__);
+ return false;
+ }
+ }
+
+ /**
+ * Obtener el nombre de la Wiki
+ *
+ * @return array|bool
+ */
+ public function getTitle()
+ {
+ try {
+ $this->createMsg('dokuwiki.getTitle');
+ $Res = new DokuWikiApiParse($this->callWiki());
+ $this->catchError($Res);
+
+ return $Res->parseParams();
+ } catch (SPException $e) {
+ $this->logException($e, __FUNCTION__);
+ return false;
+ }
+ }
+
+ /**
+ * Obtener los permisos de la página
+ *
+ * @param $page
+ * @return array|bool
+ */
+ public function getAcl($page)
+ {
+ try {
+ $this->createMsg('wiki.aclCheck');
+ $this->addParam($page);
+ $Res = new DokuWikiApiParse($this->callWiki());
+ $this->catchError($Res);
+
+ return $Res->parseParams();
+ } catch (SPException $e) {
+ $this->logException($e, __FUNCTION__);
+ return false;
+ }
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Util/Wiki/DokuWikiApiBase.class.php b/inc/SP/Util/Wiki/DokuWikiApiBase.class.php
new file mode 100644
index 00000000..caf4f3f6
--- /dev/null
+++ b/inc/SP/Util/Wiki/DokuWikiApiBase.class.php
@@ -0,0 +1,222 @@
+.
+ */
+
+namespace SP\Util\Wiki;
+
+use DOMDocument;
+use DOMException;
+use SP\Config\Config;
+use SP\Core\Exceptions\SPException;
+use SP\Http\XMLRPCResponseParse;
+use SP\Log\Log;
+use SP\Log\LogLevel;
+use SP\Util\Util;
+
+/**
+ * Class DokuWikiApiBase
+ *
+ * @package SP\Util\Wiki
+ */
+abstract class DokuWikiApiBase
+{
+ /**
+ * @var string
+ */
+ protected $apiUser = '';
+ /**
+ * @var string
+ */
+ protected $apiPassword = '';
+ /**
+ * @var string
+ */
+ protected $apiUrl = '';
+ /**
+ * @var DOMDocument
+ */
+ private $xml;
+ /**
+ * @var \DOMElement
+ */
+ private $root;
+ /**
+ * @var \DOMElement
+ */
+ private $params;
+
+ /**
+ * @return string
+ */
+ public function getXml()
+ {
+ return $this->xml->saveXML();
+ }
+
+ /**
+ * Establecer la autorización
+ *
+ * @return bool|string
+ * @throws SPException
+ */
+ protected function doLogin()
+ {
+ try {
+ $this->createMsg('dokuwiki.login');
+ $this->addParam($this->apiUser);
+ $this->addParam($this->apiPassword);
+ return $this->callWiki();
+ } catch (SPException $e) {
+ throw $e;
+ }
+ }
+
+ /**
+ * Crear la llamada al método de DokuWiki
+ *
+ * @param $function
+ * @throws SPException
+ */
+ protected function createMsg($function)
+ {
+ try {
+ $this->xml = new DOMDocument('1.0', 'UTF-8');
+
+ $xmlMethodCall = $this->xml->createElement('methodCall');
+ $this->root = $this->xml->appendChild($xmlMethodCall);
+
+ $xmlMethodName = $this->xml->createElement('methodName', $function);
+ $this->root->appendChild($xmlMethodName);
+
+ $this->params = $this->xml->createElement('params');
+ $this->root->appendChild($this->params);
+ } catch (DOMException $e) {
+ throw new SPException(SPException::SP_WARNING, $e->getMessage(), __FUNCTION__);
+ }
+ }
+
+ /**
+ * Añadir un parámetro
+ *
+ * @param $value
+ * @throws \SP\Core\Exceptions\SPException
+ */
+ protected function addParam($value)
+ {
+ try {
+ $xmlParam = $this->xml->createElement('param');
+ $xmlValue = $this->xml->createElement('value');
+
+ if (is_numeric($value)) {
+ $xmlValue->appendChild($this->xml->createElement('int', (int)$value));
+ } elseif (is_string($value)) {
+ $xmlValue->appendChild($this->xml->createElement('string', $value));
+ } elseif (is_bool($value)) {
+ $xmlValue->appendChild($this->xml->createElement('boolean', (int)$value));
+ }
+
+ $xmlParam->appendChild($xmlValue);
+ $this->params->appendChild($xmlParam);
+ } catch (DOMException $e) {
+ throw new SPException(SPException::SP_WARNING, $e->getMessage(), __FUNCTION__);
+ }
+ }
+
+ /**
+ * Enviar el XML a la wiki y devolver la respuesta
+ */
+ protected function callWiki()
+ {
+ try {
+ $data['type'] = ['Content-Type: text/xml'];
+ $data['data'] = $this->xml->saveXML();
+
+ return Util::getDataFromUrl($this->apiUrl, $data, true, true);
+ } catch (SPException $e) {
+ throw $e;
+ }
+ }
+
+ /**
+ * Capturar si han habido errores en la consulta XML
+ *
+ * @param XMLRPCResponseParse $Res
+ * @throws SPException
+ */
+ protected function catchError(XMLRPCResponseParse $Res)
+ {
+ $error = $Res->getError();
+
+ if (count($error) > 0) {
+ throw new SPException(
+ SPException::SP_WARNING,
+ __('Error al realizar la consulta', false),
+ $error['faultString']
+ );
+ }
+ }
+
+ /**
+ * Escribir el error en el registro de eventos
+ *
+ * @param \SP\Core\Exceptions\SPException $e
+ * @param string $source Origen del error
+ */
+ protected function logException(SPException $e, $source = null)
+ {
+ $Log = new Log();
+ $LogMessgae = $Log->getLogMessage();
+ $LogMessgae->setAction('DokuWiki API');
+ $LogMessgae->addDescription($e->getMessage());
+
+ if ($e->getHint()) {
+ $LogMessgae->addDetails(__('Error', false), $e->getHint());
+ }
+
+ if (null !== $source) {
+ $LogMessgae->addDetails(__('Origen', false), $source);
+ }
+
+ $Log->setLogLevel(LogLevel::ERROR);
+ $Log->writeLog();
+ }
+
+ /**
+ * Establecer los datos de conexión a la API de DokuWiki
+ *
+ * @param string $url La URL de conexión
+ * @param string $user El usuario de conexión
+ * @param string $pass La clave de conexión
+ * @throws SPException
+ */
+ protected function setConnectionData($url, $user, $pass)
+ {
+ $this->apiUrl = empty($url) ? Config::getConfig()->getDokuwikiUrl() : $url;
+ $this->apiUser = empty($user) ? Config::getConfig()->getDokuwikiUser() : $user;
+ $this->apiPassword = empty($pass) ? Config::getConfig()->getDokuwikiPass() : $pass;
+
+ if (empty($this->apiUrl)) {
+ throw new SPException(SPException::SP_WARNING, __('URL de conexión no establecida', false));
+ }
+ }
+}
\ No newline at end of file
diff --git a/inc/SP/Util/Wiki/DokuWikiApiParse.class.php b/inc/SP/Util/Wiki/DokuWikiApiParse.class.php
new file mode 100644
index 00000000..a3446e7e
--- /dev/null
+++ b/inc/SP/Util/Wiki/DokuWikiApiParse.class.php
@@ -0,0 +1,37 @@
+.
+ */
+
+namespace SP\Util\Wiki;
+
+use SP\Http\XMLRPCResponseParse;
+
+/**
+ * Class DokuWikiApiParse para el parseo de las respuestas de DokuWiki
+ *
+ * @package SP\Util\Wiki
+ */
+class DokuWikiApiParse extends XMLRPCResponseParse
+{
+
+}
\ No newline at end of file
diff --git a/inc/SessionUtil.class.php b/inc/SessionUtil.class.php
deleted file mode 100644
index 12e86f04..00000000
--- a/inc/SessionUtil.class.php
+++ /dev/null
@@ -1,158 +0,0 @@
-.
- *
- */
-
-namespace SP;
-
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
-
-/**
- * Class SessionUtil para las utilidades de la sesión
- *
- * @package 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());
- }
-
- /**
- * Guardar la clave maestra encriptada en la sesión
- */
- public static function saveSessionMPass($masterPass)
- {
- $mPassPwd = Crypt::generateAesKey(session_id());
- $sessionMasterPass = Crypt::mkCustomMPassEncrypt($mPassPwd, $masterPass);
-
- Session::setMPass($sessionMasterPass[0]);
- Session::setMPassIV($sessionMasterPass[1]);
-
- return true;
- }
-
- /**
- * Desencriptar la clave maestra de la sesión.
- *
- * @return string con la clave maestra
- */
- public static function getSessionMPass()
- {
- $cryptPass = Crypt::generateAesKey(session_id());
- return Crypt::getDecrypt(Session::getMPass(), Session::getMPassIV(), $cryptPass);
- }
-
- /**
- * 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);
- }
-
- /**
- * Limpiar la sesión del usuario
- */
- public static function cleanSession()
- {
- Session::unsetSessionKey('uid');
- Session::unsetSessionKey('uisadminapp');
- Session::unsetSessionKey('uisadminacc');
- Session::unsetSessionKey('uprofile');
- Session::unsetSessionKey('ulogin');
- Session::unsetSessionKey('uname');
- Session::unsetSessionKey('ugroup');
- Session::unsetSessionKey('ugroupn');
- Session::unsetSessionKey('uemail');
- Session::unsetSessionKey('uisldap');
- Session::unsetSessionKey('usrprofile');
- Session::unsetSessionKey('searchFilters');
- Session::unsetSessionKey('accParentId');
- Session::unsetSessionKey('updated');
- Session::unsetSessionKey('sessionTimeout');
- Session::unsetSessionKey('mPass');
- Session::unsetSessionKey('mPassPwd');
- Session::unsetSessionKey('mPassIV');
- Session::unsetSessionKey('sidStartTime');
- Session::unsetSessionKey('startActivity');
- Session::unsetSessionKey('lastActivity');
- Session::unsetSessionKey('lastAccountId');
- Session::unsetSessionKey('theme');
- Session::unsetSessionKey('2fapass');
- Session::unsetSessionKey('locale');
- Session::unsetSessionKey('userpreferences');
- Session::unsetSessionKey('tempmasterpass');
- Session::unsetSessionKey('accountcolor');
- Session::unsetSessionKey('cache');
- }
-}
\ No newline at end of file
diff --git a/inc/ext/SplClassLoader.php b/inc/SplClassLoader.php
similarity index 87%
rename from inc/ext/SplClassLoader.php
rename to inc/SplClassLoader.php
index c2a10292..5ce777d7 100644
--- a/inc/ext/SplClassLoader.php
+++ b/inc/SplClassLoader.php
@@ -41,12 +41,15 @@ class SplClassLoader
private $_namespace;
private $_includePath;
private $_namespaceSeparator = '\\';
+ private $_prepend = false;
+ private $_excluded = array();
/**
* Creates a new SplClassLoader that loads classes of the
* specified namespace.
*
* @param string $ns The namespace to use.
+ * @param string $includePath
*/
public function __construct($ns = null, $includePath = null)
{
@@ -54,6 +57,22 @@ class SplClassLoader
$this->_includePath = $includePath;
}
+ /**
+ * @param string $excluded
+ */
+ public function addExcluded($excluded)
+ {
+ $this->_excluded[] = $excluded;
+ }
+
+ /**
+ * @param boolean $prepend
+ */
+ public function setPrepend($prepend)
+ {
+ $this->_prepend = $prepend;
+ }
+
/**
* Gets the namespace seperator used by classes in the namespace of this class loader.
*
@@ -119,7 +138,7 @@ class SplClassLoader
*/
public function register()
{
- spl_autoload_register(array($this, 'loadClass'));
+ spl_autoload_register([$this, 'loadClass'], true, $this->_prepend);
}
/**
@@ -127,7 +146,7 @@ class SplClassLoader
*/
public function unregister()
{
- spl_autoload_unregister(array($this, 'loadClass'));
+ spl_autoload_unregister([$this, 'loadClass']);
}
/**
@@ -138,9 +157,11 @@ class SplClassLoader
*/
public function loadClass($className)
{
- if (null === $this->_namespace || $this->_namespace . $this->_namespaceSeparator === substr($className, 0, strlen($this->_namespace . $this->_namespaceSeparator))) {
+ if (!in_array($className, $this->_excluded) &&
+ (null === $this->_namespace
+ || 0 === strpos($className, $this->_namespace . $this->_namespaceSeparator))
+ ) {
$fileName = '';
- $namespace = '';
if (false !== ($lastNsPos = strripos($className, $this->_namespaceSeparator))) {
$namespace = substr($className, 0, $lastNsPos);
$className = substr($className, $lastNsPos + 1);
diff --git a/inc/SyspassImport.class.php b/inc/SyspassImport.class.php
deleted file mode 100644
index 77426bc4..00000000
--- a/inc/SyspassImport.class.php
+++ /dev/null
@@ -1,197 +0,0 @@
-.
- *
- */
-
-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/Themes.class.php b/inc/Themes.class.php
deleted file mode 100644
index ee2e8217..00000000
--- a/inc/Themes.class.php
+++ /dev/null
@@ -1,151 +0,0 @@
-.
- *
- */
-
-namespace SP;
-
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
-
-/**
- * Class Themes para el manejo de los temas visuales
- *
- * @package SP
- */
-class Themes
-{
- /**
- * @var string
- */
- public static $themeUri = '';
- /**
- * @var string
- */
- public static $themePath = '';
- /**
- * @var string
- */
- public static $theme = '';
-
- /**
- * Obtener los temas disponibles desde el directorio de temas
- *
- * @return array Con la información del tema
- */
- public static function getThemesAvailable()
- {
- $themesAvailable = array();
-
- $dirThemes = dir(VIEW_PATH);
-
- while (false !== ($theme = $dirThemes->read())) {
- if ($theme != '.' && $theme != '..') {
- $themeFile = VIEW_PATH . DIRECTORY_SEPARATOR . $theme . DIRECTORY_SEPARATOR . 'index.php';
-
- if (file_exists($themeFile)) {
- include $themeFile;
-
- $themesAvailable[$theme] = $themeInfo['name'];
- }
- }
- }
-
- $dirThemes->close();
-
- return $themesAvailable;
- }
-
- /**
- * Establecer el tema visual a utilizar
- *
- * @param bool $force Forzar la detección del tema para los inicios de sesión
- */
- public static function setTheme($force = false)
- {
- $theme = Session::getTheme();
-
- if (empty($theme) || $force === true) {
- $Theme = new Themes();
-
- $userTheme = $Theme->getUserTheme();
- $globalTheme = $Theme->getGlobalTheme();
-
- $theme = ($userTheme) ? $userTheme : $globalTheme;
-
- Session::setTheme($theme);
- }
-
- self::setThemePaths($theme);
- Session::setTheme($theme);
- }
-
- /**
- * Obtener el tema visual del usuario
- *
- * @return string
- */
- private function getUserTheme()
- {
- return (Session::getUserId() > 0) ? UserPreferences::getPreferences(Session::getUserId())->getTheme() : '';
- }
-
- /**
- * Devolver el tema visual de sysPass desde la configuración
- */
- private function getGlobalTheme()
- {
- self::$theme = Config::getValue('sitetheme', 'material-blue');
-
- return self::$theme;
- }
-
- /**
- * Establecer las variables de rutas para el tema visual
- *
- * @param string $theme El tema a utilizar
- */
- private static function setThemePaths($theme)
- {
- self::$theme = $theme;
- self::$themeUri = Init::$WEBURI . '/inc/themes/' . $theme;
- self::$themePath = DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'themes' . DIRECTORY_SEPARATOR . $theme;
- }
-
- /**
- * Obtener la información del tema desde el archivo de información
- *
- * @return array
- *
- */
- public static function getThemeInfo()
- {
- $themeFile = Init::$SERVERROOT . self::$themePath . DIRECTORY_SEPARATOR . 'index.php';
- $themeInfo = array();
-
- if (file_exists($themeFile)) {
- include $themeFile;
- }
-
- return $themeInfo;
- }
-}
\ No newline at end of file
diff --git a/inc/Upgrade.class.php b/inc/Upgrade.class.php
deleted file mode 100644
index 137cc49a..00000000
--- a/inc/Upgrade.class.php
+++ /dev/null
@@ -1,244 +0,0 @@
-.
- *
- */
-
-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 Upgrade
-{
- private static $_dbUpgrade = array(110, 1121, 1122, 1123, 11213, 11219, 11220, 12001, 12002);
- private static $_cfgUpgrade = array(1124);
-
- /**
- * Inicia el proceso de actualización de la BBDD.
- *
- * @param int $version con la versión de la BBDD actual
- * @returns bool
- */
- public static function doUpgrade($version)
- {
- foreach (self::$_dbUpgrade as $upgradeVersion) {
- if ($version < $upgradeVersion) {
- if (self::upgradeTo($upgradeVersion) === false) {
- 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') . '');
- }
- }
- }
-
- return true;
- }
-
- /**
- * Actualiza la BBDD según la versión.
- *
- * @param int $version con la versión a actualizar
- * @returns bool
- */
- private static function upgradeTo($version)
- {
- $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)) 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;
- case 1121:
- $queries[] = 'ALTER TABLE `categories` ADD COLUMN `category_description` VARCHAR(255) NULL AFTER `category_name`;';
- $queries[] = 'ALTER TABLE `usrProfiles` ADD COLUMN `userProfile_pAppMgmtMenu` BIT(1) NULL DEFAULT b\'0\' AFTER `userProfile_pUsersMenu`,CHANGE COLUMN `userProfile_pConfigCategories` `userProfile_pAppMgmtCategories` BIT(1) NULL DEFAULT b\'0\' AFTER `userProfile_pAppMgmtMenu`,ADD COLUMN `userProfile_pAppMgmtCustomers` BIT(1) NULL DEFAULT b\'0\' AFTER `userProfile_pAppMgmtCategories`;';
- break;
- case 1122:
- $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 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;
- case 11213:
- $queries[] = 'ALTER TABLE `usrData` CHANGE COLUMN `user_mPass` `user_mPass` VARBINARY(32) NULL DEFAULT NULL ,CHANGE COLUMN `user_lastLogin` `user_lastLogin` DATETIME NULL DEFAULT NULL ,CHANGE COLUMN `user_lastUpdate` `user_lastUpdate` DATETIME NULL DEFAULT NULL, CHANGE COLUMN `user_mIV` `user_mIV` VARBINARY(32) NULL ;';
- $queries[] = 'ALTER TABLE `accounts` CHANGE COLUMN `account_login` `account_login` VARCHAR(50) NULL DEFAULT NULL ;';
- break;
- case 11219:
- $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` `user_mPass` 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;
- case 12002:
- $queries[] = 'ALTER TABLE config CHANGE config_value config_value VARCHAR(255);';
- $queries[] = 'ALTER TABLE usrData CHANGE user_pass user_pass VARBINARY(255);';
- $queries[] = 'ALTER TABLE usrData CHANGE user_hashSalt user_hashSalt VARBINARY(128);';
- $queries[] = 'ALTER TABLE accHistory CHANGE acchistory_mPassHash acchistory_mPassHash VARBINARY(255);';
- break;
- default :
- $log->addDescription(_('No es necesario actualizar la Base de Datos.'));
- return true;
- }
-
- foreach ($queries as $query) {
- 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;
- }
- }
-
- $log->addDescription(_('Actualización de la Base de Datos realizada correctamente.') . ' (v' . $version . ')');
- $log->writeLog();
-
- Email::sendEmail($log);
-
- return true;
- }
-
- /**
- * Comprueba si es necesario actualizar la BBDD.
- *
- * @param int $version con el número de versión actual
- * @returns bool
- */
- public static function needDBUpgrade($version)
- {
- $upgrades = array_filter(self::$_dbUpgrade, function ($uVersions) use ($version) {
- return ($uVersions > $version);
- });
-
- return (count($upgrades) > 0);
- }
-
- /**
- * Comprueba si es necesario actualizar la configuración.
- *
- * @param int $version con el número de versión actual
- * @returns bool
- */
- public static function needConfigUpgrade($version)
- {
- return (in_array($version, self::$_cfgUpgrade));
- }
-
- /**
- * Migrar valores de configuración.
- *
- * @param int $version El número de versión
- * @return bool
- */
- public static function upgradeConfig($version)
- {
- $mapParams = array(
- 'files_allowed_exts' => 'allowed_exts',
- 'files_allowed_size' => 'allowed_size',
- 'demo_enabled' => 'demoenabled',
- 'files_enabled' => 'filesenabled',
- 'ldap_base' => 'ldapbase',
- 'ldap_bindpass' => 'ldapbindpass',
- 'ldap_binduser' => 'ldapbinduser',
- 'ldap_enabled' => 'ldapenabled',
- 'ldap_group' => 'ldapgroup',
- 'ldap_server' => 'ldapserver',
- 'log_enabled' => 'logenabled',
- 'mail_enabled' => 'mailenabled',
- 'mail_from' => 'mailfrom',
- 'mail_pass' => 'mailpass',
- 'mail_port' => 'mailport',
- 'mail_requestsenabled' => 'mailrequestsenabled',
- 'mail_security' => 'mailsecurity',
- 'mail_server' => 'mailserver',
- 'mail_user' => 'mailuser',
- 'wiki_enabled' => 'wikienabled',
- 'wiki_filter' => 'wikifilter',
- 'wiki_pageurl' => 'wikipageurl',
- 'wiki_searchurl' => 'wikisearchurl'
- );
-
- $currData = Config::getKeys(true);
-
- foreach ($mapParams as $newParam => $oldParam) {
- if (array_key_exists($oldParam, $currData)) {
- Config::setValue($newParam, $currData[$oldParam]);
- Config::deleteParam($oldParam);
- }
- }
-
- 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() && UserMigrate::migrateUsersGroup());
- break;
- case 12002:
- return UserMigrate::setMigrateUsers();
- break;
- default:
- break;
- }
- }
-}
diff --git a/inc/User.class.php b/inc/User.class.php
deleted file mode 100644
index 3bb1a3f3..00000000
--- a/inc/User.class.php
+++ /dev/null
@@ -1,119 +0,0 @@
-.
- *
- */
-
-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)
- {
- $configHashMPass = ConfigDB::getValue('masterPwd');
-
- if ($configHashMPass === false) {
- return false;
- }
-
- if (is_null($configHashMPass)){
- $configHashMPass = Crypt::mkHashPassword($masterPwd);
- ConfigDB::setValue('masterPwd', $configHashMPass);
- }
-
- if (Crypt::checkHashPass($masterPwd, $configHashMPass, true)) {
- $cryptMPass = Crypt::mkCustomMPassEncrypt(self::getCypherPass(), $masterPwd);
-
- if (!$cryptMPass) {
- 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'] = $cryptMPass[0];
- $data['mIV'] = $cryptMPass[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()
- {
- return Crypt::generateAesKey($this->_userPass . $this->_userLogin);
- }
-
- /**
- * 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;
- }
-
- return ($showPass === true) ? $clearMasterPass : SessionUtil::saveSessionMPass($clearMasterPass);
- }
-
- return false;
- }
-}
\ No newline at end of file
diff --git a/inc/UserAccounts.class.php b/inc/UserAccounts.class.php
deleted file mode 100644
index aed025b4..00000000
--- a/inc/UserAccounts.class.php
+++ /dev/null
@@ -1,172 +0,0 @@
-.
- *
- */
-
-namespace SP;
-
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
-
-/**
- * Class UserAccounts para la gestión de usuarios en las cuentas
- *
- * @package SP
- */
-class UserAccounts
-{
- /**
- * 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;
- }
-
- /**
- * 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;
- }
-}
\ No newline at end of file
diff --git a/inc/UserBase.class.php b/inc/UserBase.class.php
deleted file mode 100644
index c07a6f78..00000000
--- a/inc/UserBase.class.php
+++ /dev/null
@@ -1,598 +0,0 @@
-.
- *
- */
-
-namespace SP;
-
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
-
-/**
- * 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 = UserPass::makeUserPassHash($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'] = intval($this->_userIsAdminApp);
- $data['isAdminAcc'] = intval($this->_userIsAdminAcc);
- $data['isDisabled'] = intval($this->_userIsDisabled);
- $data['isChangePass'] = intval($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'] = intval($this->_userIsAdminApp);
- $data['isAdminAcc'] = intval($this->_userIsAdminAcc);
- $data['isDisabled'] = intval($this->_userIsDisabled);
- $data['isChangePass'] = intval($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 = UserPass::makeUserPassHash($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
deleted file mode 100644
index f077778f..00000000
--- a/inc/UserLdap.class.php
+++ /dev/null
@@ -1,149 +0,0 @@
-.
- *
- */
-
-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 = UserPass::makeUserPassHash($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['salt'];
- $data['email'] = $User->getUserEmail();
- $data['notes'] = _('Usuario de LDAP');
- $data['groupId'] = $groupId;
- $data['profileId'] = $profileId;
- $data['isDisabled'] = ($groupId === 0 || $profileId === 0) ? 1 : 0;
-
- 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 = UserPass::makeUserPassHash($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/UserMigrate.class.php b/inc/UserMigrate.class.php
deleted file mode 100644
index e37d84a3..00000000
--- a/inc/UserMigrate.class.php
+++ /dev/null
@@ -1,133 +0,0 @@
-.
- *
- */
-
-namespace SP;
-
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
-
-/**
- * Class UserMigrate para la migración de usuarios
- *
- * @package SP
- */
-class UserMigrate
-{
-
- /**
- * 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
- * @param string $hash con el hash de la clave actual
- * @return bool Esta función actualiza la clave de un usuario que ha sido migrado desde phpPMS
- *
- * Esta función actualiza la clave de un usuario que ha sido migrado desde phpPMS
- */
- public static function migrateUser($userLogin, $userPass, $hash = '')
- {
- $passdata = UserPass::makeUserPassHash($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) OR user_pass = :passCur) LIMIT 1';
-
- $data['pass'] = $passdata['pass'];
- $data['salt'] = $passdata['salt'];
- $data['login'] = $userLogin;
- $data['passOld'] = $userPass;
- $data['passOldMd5'] = $userPass;
- $data['passCur'] = $hash;
-
- if (DB::getQuery($query, __FUNCTION__, $data) === false) {
- return false;
- }
-
- $rows = DB::$lastNumRows;
-
- $log = new Log(__FUNCTION__);
- $log->addDescription(_('Usuario actualizado'));
- $log->addDescription('Login: ' . $userLogin);
- $log->writeLog();
-
- Email::sendEmail($log);
-
- return $rows === 1;
- }
-
- /**
- * 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;
- }
-
- /**
- * Establecer el campo isMigrate de cada usuario
- */
- public static function setMigrateUsers()
- {
- $query = 'UPDATE usrData SET user_isMigrate = 1';
-
- return DB::getQuery($query, __FUNCTION__);
- }
-}
\ No newline at end of file
diff --git a/inc/UserPass.class.php b/inc/UserPass.class.php
deleted file mode 100644
index 6876b39a..00000000
--- a/inc/UserPass.class.php
+++ /dev/null
@@ -1,166 +0,0 @@
-.
- *
- */
-
-namespace SP;
-
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
-
-/**
- * Class UserPass para la gestión de las claves de un usuario
- *
- * @package SP
- */
-class UserPass
-{
- /**
- * @var int El último id de una consulta de actualización
- */
- public static $queryLastId = 0;
-
- /**
- * 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;
- }
-
- $configHashMPass = ConfigDB::getValue('masterPwd');
-
- if ($configHashMPass === false || is_null($configHashMPass)) {
- return false;
- }
-
- // Comprobamos el hash de la clave del usuario con la guardada
- return Crypt::checkHashPass($userMPass, $configHashMPass, true);
- }
-
- /**
- * 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)) ? UserUtil::getUserIdByLogin($login) : Session::getUserId();
-
- if ($userId === 0) {
- return false;
- }
-
- $configMPassTime = ConfigDB::getValue('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;
-
- }
-
- /**
- * Modificar la clave de un usuario.
- *
- * @param $userId
- * @param $userPass
- * @return bool
- */
- public static function updateUserPass($userId, $userPass)
- {
- $passdata = self::makeUserPassHash($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;
- }
-
- /**
- * 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 makeUserPassHash($userPass)
- {
- $salt = Crypt::makeHashSalt();
- $userPass = crypt($userPass, $salt);
-
- return array('salt' => $salt, 'pass' => $userPass);
- }
-
- /**
- * 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;
- }
-}
\ No newline at end of file
diff --git a/inc/UserPassRecover.class.php b/inc/UserPassRecover.class.php
deleted file mode 100644
index d067bde8..00000000
--- a/inc/UserPassRecover.class.php
+++ /dev/null
@@ -1,130 +0,0 @@
-.
- *
- */
-
-namespace SP;
-
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
-
-/**
- * Class UserPassRecover para la gestión de recuperaciones de claves de usuarios
- *
- * @package SP
- */
-class UserPassRecover
-{
- /**
- * 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;
-
- /**
- * 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['id'] = UserUtil::getUserIdByLogin($login);
- $data['date'] = time() - self::MAX_PASS_RECOVER_TIME;
-
- return (DB::getQuery($query, __FUNCTION__, $data) === false || DB::$lastNumRows >= self::MAX_PASS_RECOVER_LIMIT);
- }
-
- /**
- * 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'] = UserUtil::getUserIdByLogin($login);
- $data['hash'] = $hash;
-
- return DB::getQuery($query, __FUNCTION__, $data);
- }
-
-}
\ No newline at end of file
diff --git a/inc/UserUtil.class.php b/inc/UserUtil.class.php
deleted file mode 100644
index d76ead37..00000000
--- a/inc/UserUtil.class.php
+++ /dev/null
@@ -1,271 +0,0 @@
-.
- *
- */
-
-namespace SP;
-
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
-
-/**
- * Class UserUtil
- *
- * @package SP
- */
-class UserUtil
-{
- const USER_LOGIN_EXIST = 1;
- const USER_MAIL_EXIST = 2;
-
- /**
- * 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;
- }
-
-
- /**
- * 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 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;
- }
-
- /**
- * 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);
- }
-
-
- /**
- * 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);
- }
-
-
- /**
- * 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;
- }
-}
\ No newline at end of file
diff --git a/inc/Util.class.php b/inc/Util.class.php
deleted file mode 100644
index fef7f2be..00000000
--- a/inc/Util.class.php
+++ /dev/null
@@ -1,596 +0,0 @@
-.
- *
- */
-
-namespace SP;
-
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
-
-/**
- * Clase con utilizades para la aplicación
- */
-class Util
-{
- /**
- * Comprobar si la función de números aleatorios está disponible.
- *
- * @return bool
- */
- public static function secureRNG_available()
- {
- // Check openssl_random_pseudo_bytes
- if (function_exists('openssl_random_pseudo_bytes')) {
- openssl_random_pseudo_bytes(1, $strong);
- if ($strong == true) {
- return true;
- }
- }
-
- // Check /dev/urandom
- $fp = @file_get_contents('/dev/urandom', false, null, 0, 1);
- if ($fp !== false) {
- return true;
- }
-
- return false;
- }
-
- /**
- * Comprobar si sysPass se ejecuta en W$indows.
- *
- * @return bool
- */
- public static function runningOnWindows()
- {
- return (substr(PHP_OS, 0, 3) === "WIN");
- }
-
- /**
- * Generar una cadena aleatoria usuando criptografía.
- *
- * @param int $length opcional, con la longitud de la cadena
- * @param bool $useSpecial Usar caracteres especiales
- * @return string
- */
- public static function generate_random_bytes($length = 30, $useSpecial = false)
- {
- // Try to use openssl_random_pseudo_bytes
- if (function_exists('openssl_random_pseudo_bytes')) {
- $pseudo_byte = bin2hex(openssl_random_pseudo_bytes($length, $strong));
- if ($strong == true) {
- return substr($pseudo_byte, 0, $length); // Truncate it to match the length
- }
- }
-
- // Try to use /dev/urandom
- $fp = @file_get_contents('/dev/urandom', false, null, 0, $length);
- if ($fp !== false) {
- $string = substr(bin2hex($fp), 0, $length);
- return $string;
- }
-
- // Fallback to mt_rand()
- $characters = '0123456789';
- $characters .= 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWZ';
-
- if ($useSpecial === true) {
- $characters .= '@#$%&/?¿=!|_-^*';
- }
-
- $charactersLength = strlen($characters) - 1;
- $pseudo_byte = "";
-
- // Select some random characters
- for ($i = 0; $i < $length; $i++) {
- $pseudo_byte .= $characters[mt_rand(0, $charactersLength)];
- }
-
- return $pseudo_byte;
- }
-
- /**
- * Comprobar la versión de PHP.
- *
- * @return bool
- */
- public static function checkPhpVersion()
- {
- $error = array();
- $needsVersion = '5.3.0';
-
- 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;
- }
-
- /**
- * Comprobar los módulos necesarios.
- *
- * @return array con los módulos no disponibles
- */
- public static function checkModules()
- {
- $modsNeed = array(
- 'ldap',
- 'mcrypt',
- 'curl',
- 'SimpleXML',
- 'Phar',
- 'json',
- 'xml',
- 'PDO',
- 'zlib',
- 'gettext',
- 'openssl',
- 'pcre',
- 'session',
- 'gd'
- );
- $error = array();
-
- foreach ($modsNeed as $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.')
- );
- }
- }
-
- return $error;
- }
-
- /**
- * Devuelve el valor de la variable enviada por un formulario.
- *
- * @param string $s con el nombre de la variable
- * @param string $d con el valor por defecto
- * @return string con el valor de la variable
- */
- public static function init_var($s, $d = "")
- {
- $r = $d;
- if (isset($_REQUEST[$s]) && !empty($_REQUEST[$s])) {
- $r = Html::sanitize($_REQUEST[$s]);
- }
-
- return $r;
- }
-
- /**
- * Comprobar si el módulo de LDAP está instalado.
- *
- * @return bool
- */
- public static function ldapIsAvailable()
- {
- return extension_loaded('ldap');
- }
-
- /**
- * Devuelve la versión de sysPass.
- *
- * @return string con la versión
- */
- public static function getVersionString()
- {
- return '1.2';
- }
-
- /**
- * Comprobar si hay actualizaciones de sysPass disponibles desde internet (github.com)
- * Esta función hace una petición a GitHub y parsea el JSON devuelto para verificar
- * si la aplicación está actualizada
- *
- * @return array|bool
- */
- public static function checkUpdates()
- {
- if (!Config::getValue('checkupdates')) {
- return false;
- }
-
- $data = self::getDataFromUrl(self::getAppInfo('appupdates'));
-
- if ($data) {
- $updateInfo = json_decode($data);
-
- // $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
-
- $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) && 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);
- } else {
- return true;
- }
- } else {
- return false;
- }
- }
-
- 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;
- }
-
- $data = self::getDataFromUrl(self::getAppInfo('appnotices'));
-
- 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;
- }
-
- /**
- * Comprobar si el módulo CURL está instalado.
- *
- * @return bool
- */
- public static function curlIsAvailable()
- {
- return function_exists('curl_init');
- }
-
- /**
- * Devuelve la versión de sysPass.
- *
- * @param bool $retBuild devolver el número de compilación
- * @return array con el número de versión
- */
- public static function getVersion($retBuild = false)
- {
- $version = array(1, 2, 0, '21');
-
- if (!$retBuild) {
- array_pop($version);
- }
-
- return $version;
- }
-
-
- /**
- * Realiza el proceso de logout.
- */
- public static function logout()
- {
- exit('');
- }
-
- /**
- * Obtener el tamaño máximo de subida de PHP.
- */
- public static function getMaxUpload()
- {
- $max_upload = (int)ini_get('upload_max_filesize');
- $max_post = (int)ini_get('post_max_size');
- $memory_limit = (int)ini_get('memory_limit');
- $upload_mb = min($max_upload, $max_post, $memory_limit);
-
- Log::writeNewLog(__FUNCTION__, "Max. PHP upload: " . $upload_mb . "MB");
- }
-
- /**
- * Comprobar si está en modo DEMO.
- *
- * @return bool
- */
- public static function demoIsEnabled()
- {
- return self::boolval(Config::getValue('demo_enabled', false));
- }
-
- /**
- * Checks a variable to see if it should be considered a boolean true or false.
- * Also takes into account some text-based representations of true of false,
- * 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.
- * @return bool The boolean equivalent or null (if strict, and no exact equivalent)
- */
- public static function boolval($in, $strict = false)
- {
- $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) {
- 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)) {
- return true;
- }
- } else {
- // not strict? let the regular php bool check figure it out (will
- // largely default to true)
- return ($in ? true : false);
- }
- }
-
- /**
- * Comprobar si está habilitada la gestión de archivos.
- *
- * @return bool
- */
- public static function fileIsEnabled()
- {
- return self::boolval(Config::getValue('files_enabled', false));
- }
-
- /**
- * Comprobar si están habilitadas las notificaciones por correo.
- *
- * @return bool
- */
- public static function mailIsEnabled()
- {
- return self::boolval(Config::getValue('mail_enabled', false));
- }
-
- /**
- * Comprobar si está habilitada la Wiki.
- *
- * @return bool
- */
- public static function wikiIsEnabled()
- {
- return self::boolval(Config::getValue('wiki_enabled', false));
- }
-
- /**
- * Comprobar si están habilitadas las peticiones por correo.
- *
- * @return bool
- */
- public static function mailrequestIsEnabled()
- {
- return self::boolval(Config::getValue('mail_requestsenabled', false));
- }
-
- /**
- * Comprobar si está habilitado LDAP.
- *
- * @return bool
- */
- public static function ldapIsEnabled()
- {
- return self::boolval(Config::getValue('ldap_enabled', false));
- }
-
- /**
- * Comprobar si está habilitado el log de eventos.
- *
- * @return bool
- */
- public static function logIsEnabled()
- {
- return self::boolval(Config::getValue('log_enabled', false));
- }
-
- /**
- * Comprobar si está habilitado el formato de tarjeta en los resultados.
- *
- * @return bool
- */
- public static function resultsCardsIsEnabled()
- {
- return self::boolval(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));
- }
-
- /**
- * Comprobar si está habilitado forzar la conexión por HTTPS
- *
- * @return bool
- */
- public static function forceHttpsIsEnabled()
- {
- return self::boolval(Config::getValue('https_enabled', false));
- }
-
- /**
- * Comprobar si se utiliza HTTPS
- *
- * @return bool
- */
- public static function httpsEnabled() {
- return
- (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')
- || $_SERVER['SERVER_PORT'] == 443
- || Request::getRequestHeaders('X-Forwarded-Proto') === 'https';
- }
-
- /**
- * Establecer variable de sesión para recargar la aplicación.
- */
- public static function reload()
- {
- if (Session::getReload() === false) {
- Session::setReload(true);
- }
- }
-
- /**
- * Comprobar si se necesita recargar la aplicación.
- */
- public static function checkReload()
- {
- if (Session::getReload() === true) {
- Session::setReload(false);
- exit("");
- }
- }
-
-
- /**
- * Recorrer un array y escapar los carácteres no válidos en Javascript.
- *
- * @param $array
- * @return array
- */
- public static function arrayJSEscape(&$array)
- {
- array_walk($array, function (&$value, $index) {
- $value = str_replace(array("'", '"'), "\\'", $value);
- });
- return $array;
- }
-
- /**
- * Devuelve información sobre la aplicación.
- *
- * @param string $index con la key a devolver
- * @return array con las propiedades de la aplicación
- */
- public static function getAppInfo($index = null)
- {
- $appinfo = array(
- 'appname' => 'sysPass',
- 'appdesc' => 'Systems Password Manager',
- 'appwebsite' => 'http://www.syspass.org',
- 'appblog' => 'http://www.cygnux.org',
- 'appdoc' => 'http://wiki.syspass.org',
- 'appupdates' => 'https://api.github.com/repos/nuxsmin/sysPass/releases/latest',
- 'appnotices' => 'https://api.github.com/repos/nuxsmin/sysPass/issues?milestone=none&state=open&labels=Notices',
- 'apphelp' => 'https://github.com/nuxsmin/sysPass/issues',
- 'appchangelog' => 'https://github.com/nuxsmin/sysPass/blob/master/CHANGELOG');
-
- if (!is_null($index) && isset($appinfo[$index])) {
- return $appinfo[$index];
- }
-
- return $appinfo;
- }
-
- /**
- * Obtener datos desde una URL usando CURL
- *
- * @param $url string La URL
- * @return bool|string
- */
- public static function getDataFromUrl($url)
- {
- if (!self::curlIsAvailable()) {
- return false;
- }
-
- $ch = curl_init($url);
-
- 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);
- }
- }
-
- 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/XmlImport.class.php b/inc/XmlImport.class.php
deleted file mode 100644
index 19e23955..00000000
--- a/inc/XmlImport.class.php
+++ /dev/null
@@ -1,71 +0,0 @@
-.
- *
- */
-
-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
deleted file mode 100644
index 77b7f49d..00000000
--- a/inc/XmlImportBase.class.php
+++ /dev/null
@@ -1,115 +0,0 @@
-.
- *
- */
-
-namespace SP;
-
-defined('APP_ROOT') || die(_('No es posible acceder directamente a este archivo'));
-
-/**
- * Class XmlImportBase abstracta para manejar archivos de importación en formato XML
- *
- * @package SP
- */
-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/dbstructure.sql b/inc/dbstructure.sql
deleted file mode 100644
index 2c1a821a..00000000
--- a/inc/dbstructure.sql
+++ /dev/null
@@ -1,241 +0,0 @@
-/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
-/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
-/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
-/*!40101 SET NAMES utf8 */;
-/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
-/*!40103 SET TIME_ZONE='+00:00' */;
-/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
-/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
-/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
-/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
-
-CREATE TABLE `accFiles` (
- `accfile_id` int(11) NOT NULL AUTO_INCREMENT,
- `accfile_accountId` smallint(5) unsigned NOT NULL,
- `accfile_name` varchar(100) NOT NULL,
- `accfile_type` varchar(100) NOT NULL,
- `accfile_size` int(11) NOT NULL,
- `accfile_content` mediumblob NOT NULL,
- `accfile_extension` varchar(10) NOT NULL,
- `accFile_thumb` longblob,
- PRIMARY KEY (`accfile_id`),
- KEY `IDX_accountId` (`accfile_accountId`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-CREATE TABLE `accGroups` (
- `accgroup_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `accgroup_accountId` int(10) unsigned NOT NULL,
- `accgroup_groupId` int(10) unsigned NOT NULL,
- PRIMARY KEY (`accgroup_id`),
- KEY `IDX_accountId` (`accgroup_accountId`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-CREATE TABLE `accHistory` (
- `acchistory_id` int(11) NOT NULL AUTO_INCREMENT,
- `acchistory_accountId` smallint(5) unsigned NOT NULL,
- `acchistory_userGroupId` tinyint(3) unsigned NOT NULL,
- `acchistory_userId` tinyint(3) unsigned NOT NULL,
- `acchistory_userEditId` tinyint(3) unsigned DEFAULT NULL,
- `acchistory_customerId` tinyint(3) unsigned NOT NULL,
- `acchistory_name` varchar(255) NOT NULL,
- `acchistory_categoryId` tinyint(3) unsigned NOT NULL,
- `acchistory_login` varchar(50) NOT NULL,
- `acchistory_url` varchar(255) DEFAULT NULL,
- `acchistory_pass` varbinary(255) NOT NULL,
- `acchistory_IV` varbinary(32) NOT NULL,
- `acchistory_notes` text NOT NULL,
- `acchistory_countView` int(10) unsigned NOT NULL DEFAULT '0',
- `acchistory_countDecrypt` int(10) unsigned NOT NULL DEFAULT '0',
- `acchistory_dateAdd` datetime NOT NULL,
- `acchistory_dateEdit` datetime DEFAULT NULL,
- `acchistory_isModify` bit(1) DEFAULT NULL,
- `acchistory_isDeleted` bit(1) DEFAULT NULL,
- `acchistory_mPassHash` varbinary(255) NOT NULL,
- `accHistory_otherUserEdit` bit(1) DEFAULT b'0',
- `accHistory_otherGroupEdit` bit(1) DEFAULT b'0',
- PRIMARY KEY (`acchistory_id`),
- KEY `IDX_accountId` (`acchistory_accountId`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-CREATE TABLE `accUsers` (
- `accuser_id` int(11) NOT NULL AUTO_INCREMENT,
- `accuser_accountId` int(10) unsigned NOT NULL,
- `accuser_userId` int(10) unsigned NOT NULL,
- PRIMARY KEY (`accuser_id`),
- KEY `idx_account` (`accuser_accountId`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-CREATE TABLE `accViewLinks` (
- `accviewlinks_id` int(10) unsigned NOT NULL DEFAULT '0',
- `accviewlinks_accountId` int(10) unsigned DEFAULT NULL,
- `accviewlinks_expireTime` int(10) unsigned DEFAULT NULL,
- `accviewlinks_expired` bit(1) DEFAULT b'0',
- `accviewlinks_userId` int(10) unsigned DEFAULT NULL,
- `accviewlinks_hash` varbinary(100) DEFAULT '',
- `accviewlinks_actionId` smallint(5) unsigned DEFAULT NULL,
- PRIMARY KEY (`accviewlinks_id`),
- UNIQUE KEY `unique_accviewlinks_id` (`accviewlinks_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-
-CREATE TABLE `accounts` (
- `account_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
- `account_userGroupId` tinyint(3) unsigned NOT NULL,
- `account_userId` tinyint(3) unsigned NOT NULL,
- `account_userEditId` tinyint(3) unsigned DEFAULT NULL,
- `account_customerId` int(10) unsigned NOT NULL,
- `account_name` varchar(50) NOT NULL,
- `account_categoryId` tinyint(3) unsigned NOT NULL,
- `account_login` varchar(50) DEFAULT NULL,
- `account_url` varchar(255) DEFAULT NULL,
- `account_pass` varbinary(255) NOT NULL,
- `account_IV` varbinary(32) NOT NULL,
- `account_notes` text,
- `account_countView` int(10) unsigned NOT NULL DEFAULT '0',
- `account_countDecrypt` int(10) unsigned NOT NULL DEFAULT '0',
- `account_dateAdd` datetime NOT NULL,
- `account_dateEdit` datetime DEFAULT NULL,
- `account_otherGroupEdit` bit(1) DEFAULT b'0',
- `account_otherUserEdit` bit(1) DEFAULT b'0',
- PRIMARY KEY (`account_id`),
- KEY `IDX_categoryId` (`account_categoryId`),
- KEY `IDX_userId` (`account_userGroupId`,`account_userId`),
- KEY `IDX_customerId` (`account_customerId`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-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;
-
-CREATE TABLE `categories` (
- `category_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
- `category_name` varchar(50) NOT NULL,
- `category_description` varchar(255) DEFAULT NULL,
- PRIMARY KEY (`category_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-CREATE TABLE `config` (
- `config_parameter` varchar(50) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL,
- `config_value` varchar(255) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL,
- UNIQUE KEY `vacParameter` (`config_parameter`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-CREATE TABLE `customers` (
- `customer_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `customer_name` varchar(100) NOT NULL,
- `customer_hash` varbinary(40) NOT NULL,
- `customer_description` varchar(255) DEFAULT NULL,
- PRIMARY KEY (`customer_id`),
- KEY `IDX_name` (`customer_name`,`customer_hash`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-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;
-
-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;
-
-CREATE TABLE `log` (
- `log_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `log_date` int(10) unsigned NOT NULL,
- `log_login` varchar(25) NOT NULL,
- `log_userId` tinyint(3) unsigned NOT NULL,
- `log_ipAddress` varchar(45) NOT NULL,
- `log_action` varchar(50) NOT NULL,
- `log_description` text NOT NULL,
- PRIMARY KEY (`log_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-CREATE TABLE `usrData` (
- `user_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
- `user_name` varchar(80) NOT NULL,
- `user_groupId` tinyint(3) unsigned NOT NULL,
- `user_secGroupId` tinyint(3) unsigned DEFAULT NULL,
- `user_login` varchar(50) NOT NULL,
- `user_pass` varbinary(255) NOT NULL,
- `user_mPass` varbinary(255) DEFAULT NULL,
- `user_mIV` varbinary(32) NOT NULL,
- `user_email` varchar(80) DEFAULT NULL,
- `user_notes` text,
- `user_count` int(10) unsigned NOT NULL DEFAULT '0',
- `user_profileId` tinyint(4) NOT NULL,
- `user_lastLogin` datetime DEFAULT NULL,
- `user_lastUpdate` datetime DEFAULT NULL,
- `user_lastUpdateMPass` int(11) unsigned NOT NULL DEFAULT '0',
- `user_isAdminApp` bit(1) NOT NULL DEFAULT b'0',
- `user_isAdminAcc` bit(1) NOT NULL DEFAULT b'0',
- `user_isLdap` bit(1) NOT NULL DEFAULT b'0',
- `user_isDisabled` bit(1) NOT NULL DEFAULT b'0',
- `user_hashSalt` varbinary(128) NOT NULL,
- `user_isMigrate` bit(1) DEFAULT b'0',
- `user_isChangePass` bit(1) DEFAULT b'0',
- `user_preferences` blob,
- PRIMARY KEY (`user_id`),
- UNIQUE KEY `IDX_login` (`user_login`),
- KEY `IDX_pass` (`user_pass`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-CREATE TABLE `usrGroups` (
- `usergroup_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
- `usergroup_name` varchar(50) NOT NULL,
- `usergroup_description` varchar(255) DEFAULT NULL,
- PRIMARY KEY (`usergroup_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-CREATE TABLE `usrPassRecover` (
- `userpassr_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `userpassr_userId` smallint(5) unsigned NOT NULL,
- `userpassr_hash` varbinary(40) NOT NULL,
- `userpassr_date` int(10) unsigned NOT NULL,
- `userpassr_used` bit(1) NOT NULL,
- PRIMARY KEY (`userpassr_id`),
- KEY `IDX_userId` (`userpassr_userId`,`userpassr_date`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-CREATE TABLE `usrProfiles` (
- `userprofile_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
- `userprofile_name` varchar(45) NOT NULL,
- `userProfile_profile` blob NOT NULL,
- PRIMARY KEY (`userprofile_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-CREATE TABLE `usrToGroups` (
- `usertogroup_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `usertogroup_userId` int(10) unsigned NOT NULL,
- `usertogroup_groupId` int(10) unsigned NOT NULL,
- PRIMARY KEY (`usertogroup_id`),
- KEY `IDX_usertogroup_userId` (`usertogroup_userId`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
-
-/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
-/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
-/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
-/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
-/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
-/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
-/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
\ No newline at end of file
diff --git a/inc/ext/phpmailer/class.smtp.php b/inc/ext/phpmailer/class.smtp.php
deleted file mode 100644
index 6201515b..00000000
--- a/inc/ext/phpmailer/class.smtp.php
+++ /dev/null
@@ -1,1003 +0,0 @@
-
- * @author Jim Jagielski (jimjag)
- * @author Andy Prevost (codeworxtech)
- * @copyright 2013 Marcus Bointon
- * @copyright 2004 - 2008 Andy Prevost
- * @copyright 2010 - 2012 Jim Jagielski
- * @license http://www.gnu.org/copyleft/lesser.html Distributed under the Lesser General Public License (LGPL)
- */
-
-/**
- * PHPMailer RFC821 SMTP email transport class.
- *
- * Implements RFC 821 SMTP commands
- * and provides some utility methods for sending mail to an SMTP server.
- *
- * PHP Version 5.0.0
- *
- * @category PHP
- * @package PHPMailer
- * @link https://github.com/PHPMailer/PHPMailer/blob/master/class.smtp.php
- * @author Chris Ryan
- * @author Marcus Bointon
- * @license http://www.gnu.org/copyleft/lesser.html Distributed under the Lesser General Public License (LGPL)
- */
-class SMTP
-{
- /**
- * The PHPMailer SMTP Version number.
- */
- const VERSION = '5.2.7';
-
- /**
- * SMTP line break constant.
- */
- const CRLF = "\r\n";
-
- /**
- * The SMTP port to use if one is not specified.
- */
- const DEFAULT_SMTP_PORT = 25;
-
- /**
- * The PHPMailer SMTP Version number.
- *
- * @type string
- * @deprecated This should be a constant
- * @see SMTP::VERSION
- */
- public $Version = '5.2.7';
-
- /**
- * SMTP server port number.
- *
- * @type int
- * @deprecated This is only ever ued as default value, so should be a constant
- * @see SMTP::DEFAULT_SMTP_PORT
- */
- public $SMTP_PORT = 25;
-
- /**
- * SMTP reply line ending
- *
- * @type string
- * @deprecated Use the class constant instead
- * @see SMTP::CRLF
- */
- public $CRLF = "\r\n";
-
- /**
- * Debug output level.
- * Options:
- * 0: no output
- * 1: commands
- * 2: data and commands
- * 3: as 2 plus connection status
- * 4: low level data output
- *
- * @type int
- */
- public $do_debug = 0;
-
- /**
- * The function/method to use for debugging output.
- * Options: 'echo', 'html' or 'error_log'
- *
- * @type string
- */
- public $Debugoutput = 'echo';
-
- /**
- * Whether to use VERP.
- *
- * @type bool
- */
- public $do_verp = false;
-
- /**
- * The timeout value for connection, in seconds.
- * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2
- *
- * @type int
- */
- public $Timeout = 300;
-
- /**
- * The SMTP timelimit value for reads, in seconds.
- *
- * @type int
- */
- public $Timelimit = 30;
-
- /**
- * The socket for the server connection.
- *
- * @type resource
- */
- protected $smtp_conn;
-
- /**
- * Error message, if any, for the last call.
- *
- * @type string
- */
- protected $error = '';
-
- /**
- * The reply the server sent to us for HELO.
- *
- * @type string
- */
- protected $helo_rply = '';
-
- /**
- * The most recent reply received from the server.
- *
- * @type string
- */
- protected $last_reply = '';
-
- /**
- * Constructor.
- *
- * @access public
- */
- public function __construct()
- {
- $this->smtp_conn = 0;
- $this->error = null;
- $this->helo_rply = null;
-
- $this->do_debug = 0;
- }
-
- /**
- * Output debugging info via a user-selected method.
- *
- * @param string $str Debug string to output
- * @return void
- */
- protected function edebug($str)
- {
- switch ($this->Debugoutput) {
- case 'error_log':
- //Don't output, just log
- error_log($str);
- break;
- case 'html':
- //Cleans up output a bit for a better looking, HTML-safe output
- echo htmlentities(
- preg_replace('/[\r\n]+/', '', $str),
- ENT_QUOTES,
- 'UTF-8'
- )
- . "
\n";
- break;
- case 'echo':
- default:
- echo gmdate('Y-m-d H:i:s') . "\t" . trim($str) . "\n";
- }
- }
-
- /**
- * Connect to an SMTP server.
- *
- * @param string $host SMTP server IP or host name
- * @param int $port The port number to connect to
- * @param int $timeout How long to wait for the connection to open
- * @param array $options An array of options for stream_context_create()
- * @access public
- * @return bool
- */
- public function connect($host, $port = null, $timeout = 30, $options = array())
- {
- // Clear errors to avoid confusion
- $this->error = null;
-
- // Make sure we are __not__ connected
- if ($this->connected()) {
- // Already connected, generate error
- $this->error = array('error' => 'Already connected to a server');
- return false;
- }
-
- if (empty($port)) {
- $port = self::DEFAULT_SMTP_PORT;
- }
-
- // Connect to the SMTP server
- if ($this->do_debug >= 3) {
- $this->edebug('Connection: opening');
- }
-
- $errno = 0;
- $errstr = '';
- $socket_context = stream_context_create($options);
- //Suppress errors; connection failures are handled at a higher level
- $this->smtp_conn = @stream_socket_client(
- $host . ":" . $port,
- $errno,
- $errstr,
- $timeout,
- STREAM_CLIENT_CONNECT,
- $socket_context
- );
-
- // Verify we connected properly
- if (empty($this->smtp_conn)) {
- $this->error = array(
- 'error' => 'Failed to connect to server',
- 'errno' => $errno,
- 'errstr' => $errstr
- );
- if ($this->do_debug >= 1) {
- $this->edebug(
- 'SMTP ERROR: ' . $this->error['error']
- . ": $errstr ($errno)"
- );
- }
- return false;
- }
- if ($this->do_debug >= 3) {
- $this->edebug('Connection: opened');
- }
-
- // SMTP server can take longer to respond, give longer timeout for first read
- // Windows does not have support for this timeout function
- if (substr(PHP_OS, 0, 3) != 'WIN') {
- $max = ini_get('max_execution_time');
- if ($max != 0 && $timeout > $max) { // Don't bother if unlimited
- @set_time_limit($timeout);
- }
- stream_set_timeout($this->smtp_conn, $timeout, 0);
- }
-
- // Get any announcement
- $announce = $this->get_lines();
-
- if ($this->do_debug >= 2) {
- $this->edebug('SERVER -> CLIENT: ' . $announce);
- }
-
- return true;
- }
-
- /**
- * Initiate a TLS (encrypted) session.
- *
- * @access public
- * @return bool
- */
- public function startTLS()
- {
- if (!$this->sendCommand("STARTTLS", "STARTTLS", 220)) {
- return false;
- }
- // Begin encrypted connection
- if (!stream_socket_enable_crypto(
- $this->smtp_conn,
- true,
- STREAM_CRYPTO_METHOD_TLS_CLIENT
- )
- ) {
- return false;
- }
- return true;
- }
-
- /**
- * Perform SMTP authentication.
- * Must be run after hello().
- *
- * @see hello()
- * @param string $username The user name
- * @param string $password The password
- * @param string $authtype The auth type (PLAIN, LOGIN, NTLM, CRAM-MD5)
- * @param string $realm The auth realm for NTLM
- * @param string $workstation The auth workstation for NTLM
- * @access public
- * @return bool True if successfully authenticated.
- */
- public function authenticate(
- $username,
- $password,
- $authtype = 'LOGIN',
- $realm = '',
- $workstation = ''
- )
- {
- if (empty($authtype)) {
- $authtype = 'LOGIN';
- }
-
- switch ($authtype) {
- case 'PLAIN':
- // Start authentication
- if (!$this->sendCommand('AUTH', 'AUTH PLAIN', 334)) {
- return false;
- }
- // Send encoded username and password
- if (!$this->sendCommand(
- 'User & Password',
- base64_encode("\0" . $username . "\0" . $password),
- 235
- )
- ) {
- return false;
- }
- break;
- case 'LOGIN':
- // Start authentication
- if (!$this->sendCommand('AUTH', 'AUTH LOGIN', 334)) {
- return false;
- }
- if (!$this->sendCommand("Username", base64_encode($username), 334)) {
- return false;
- }
- if (!$this->sendCommand("Password", base64_encode($password), 235)) {
- return false;
- }
- break;
- case 'NTLM':
- /*
- * ntlm_sasl_client.php
- * Bundled with Permission
- *
- * How to telnet in windows:
- * http://technet.microsoft.com/en-us/library/aa995718%28EXCHG.65%29.aspx
- * PROTOCOL Docs http://curl.haxx.se/rfc/ntlm.html#ntlmSmtpAuthentication
- */
- require_once 'extras/ntlm_sasl_client.php';
- $temp = new stdClass();
- $ntlm_client = new ntlm_sasl_client_class;
- //Check that functions are available
- if (!$ntlm_client->Initialize($temp)) {
- $this->error = array('error' => $temp->error);
- if ($this->do_debug >= 1) {
- $this->edebug(
- 'You need to enable some modules in your php.ini file: '
- . $this->error['error']
- );
- }
- return false;
- }
- //msg1
- $msg1 = $ntlm_client->TypeMsg1($realm, $workstation); //msg1
-
- if (!$this->sendCommand(
- 'AUTH NTLM',
- 'AUTH NTLM ' . base64_encode($msg1),
- 334
- )
- ) {
- return false;
- }
-
- //Though 0 based, there is a white space after the 3 digit number
- //msg2
- $challenge = substr($this->last_reply, 3);
- $challenge = base64_decode($challenge);
- $ntlm_res = $ntlm_client->NTLMResponse(
- substr($challenge, 24, 8),
- $password
- );
- //msg3
- $msg3 = $ntlm_client->TypeMsg3(
- $ntlm_res,
- $username,
- $realm,
- $workstation
- );
- // send encoded username
- return $this->sendCommand('Username', base64_encode($msg3), 235);
- break;
- case 'CRAM-MD5':
- // Start authentication
- if (!$this->sendCommand('AUTH CRAM-MD5', 'AUTH CRAM-MD5', 334)) {
- return false;
- }
- // Get the challenge
- $challenge = base64_decode(substr($this->last_reply, 4));
-
- // Build the response
- $response = $username . ' ' . $this->hmac($challenge, $password);
-
- // send encoded credentials
- return $this->sendCommand('Username', base64_encode($response), 235);
- break;
- }
- return true;
- }
-
- /**
- * Calculate an MD5 HMAC hash.
- * Works like hash_hmac('md5', $data, $key)
- * in case that function is not available
- *
- * @param string $data The data to hash
- * @param string $key The key to hash with
- * @access protected
- * @return string
- */
- protected function hmac($data, $key)
- {
- if (function_exists('hash_hmac')) {
- return hash_hmac('md5', $data, $key);
- }
-
- // The following borrowed from
- // http://php.net/manual/en/function.mhash.php#27225
-
- // RFC 2104 HMAC implementation for php.
- // Creates an md5 HMAC.
- // Eliminates the need to install mhash to compute a HMAC
- // Hacked by Lance Rushing
-
- $b = 64; // byte length for md5
- if (strlen($key) > $b) {
- $key = pack('H*', md5($key));
- }
- $key = str_pad($key, $b, chr(0x00));
- $ipad = str_pad('', $b, chr(0x36));
- $opad = str_pad('', $b, chr(0x5c));
- $k_ipad = $key ^ $ipad;
- $k_opad = $key ^ $opad;
-
- return md5($k_opad . pack('H*', md5($k_ipad . $data)));
- }
-
- /**
- * Check connection state.
- *
- * @access public
- * @return bool True if connected.
- */
- public function connected()
- {
- if (!empty($this->smtp_conn)) {
- $sock_status = stream_get_meta_data($this->smtp_conn);
- if ($sock_status['eof']) {
- // the socket is valid but we are not connected
- if ($this->do_debug >= 1) {
- $this->edebug(
- 'SMTP NOTICE: EOF caught while checking if connected'
- );
- }
- $this->close();
- return false;
- }
- return true; // everything looks good
- }
- return false;
- }
-
- /**
- * Close the socket and clean up the state of the class.
- * Don't use this function without first trying to use QUIT.
- *
- * @see quit()
- * @access public
- * @return void
- */
- public function close()
- {
- $this->error = null; // so there is no confusion
- $this->helo_rply = null;
- if (!empty($this->smtp_conn)) {
- // close the connection and cleanup
- fclose($this->smtp_conn);
- if ($this->do_debug >= 3) {
- $this->edebug('Connection: closed');
- }
- $this->smtp_conn = 0;
- }
- }
-
- /**
- * Send an SMTP DATA command.
- * Issues a data command and sends the msg_data to the server,
- * finializing the mail transaction. $msg_data is the message
- * that is to be send with the headers. Each header needs to be
- * on a single line followed by a with the message headers
- * and the message body being separated by and additional .
- * Implements rfc 821: DATA
- *
- * @param string $msg_data Message data to send
- * @access public
- * @return bool
- */
- public function data($msg_data)
- {
- if (!$this->sendCommand('DATA', 'DATA', 354)) {
- return false;
- }
-
- /* The server is ready to accept data!
- * according to rfc821 we should not send more than 1000
- * including the CRLF
- * characters on a single line so we will break the data up
- * into lines by \r and/or \n then if needed we will break
- * each of those into smaller lines to fit within the limit.
- * in addition we will be looking for lines that start with
- * a period '.' and append and additional period '.' to that
- * line. NOTE: this does not count towards limit.
- */
-
- // Normalize the line breaks before exploding
- $msg_data = str_replace("\r\n", "\n", $msg_data);
- $msg_data = str_replace("\r", "\n", $msg_data);
- $lines = explode("\n", $msg_data);
-
- /* We need to find a good way to determine if headers are
- * in the msg_data or if it is a straight msg body
- * currently I am assuming rfc822 definitions of msg headers
- * and if the first field of the first line (':' separated)
- * does not contain a space then it _should_ be a header
- * and we can process all lines before a blank "" line as
- * headers.
- */
-
- $field = substr($lines[0], 0, strpos($lines[0], ':'));
- $in_headers = false;
- if (!empty($field) && !strstr($field, ' ')) {
- $in_headers = true;
- }
-
- //RFC 2822 section 2.1.1 limit
- $max_line_length = 998;
-
- foreach ($lines as $line) {
- $lines_out = null;
- if ($line == '' && $in_headers) {
- $in_headers = false;
- }
- // ok we need to break this line up into several smaller lines
- while (strlen($line) > $max_line_length) {
- $pos = strrpos(substr($line, 0, $max_line_length), ' ');
-
- // Patch to fix DOS attack
- if (!$pos) {
- $pos = $max_line_length - 1;
- $lines_out[] = substr($line, 0, $pos);
- $line = substr($line, $pos);
- } else {
- $lines_out[] = substr($line, 0, $pos);
- $line = substr($line, $pos + 1);
- }
-
- /* If processing headers add a LWSP-char to the front of new line
- * rfc822 on long msg headers
- */
- if ($in_headers) {
- $line = "\t" . $line;
- }
- }
- $lines_out[] = $line;
-
- // send the lines to the server
- while (list(, $line_out) = @each($lines_out)) {
- if (strlen($line_out) > 0) {
- if (substr($line_out, 0, 1) == '.') {
- $line_out = '.' . $line_out;
- }
- }
- $this->client_send($line_out . self::CRLF);
- }
- }
-
- // Message data has been sent, complete the command
- return $this->sendCommand('DATA END', '.', 250);
- }
-
- /**
- * Send an SMTP HELO or EHLO command.
- * Used to identify the sending server to the receiving server.
- * This makes sure that client and server are in a known state.
- * Implements from RFC 821: HELO
- * and RFC 2821 EHLO.
- *
- * @param string $host The host name or IP to connect to
- * @access public
- * @return bool
- */
- public function hello($host = '')
- {
- // Try extended hello first (RFC 2821)
- if (!$this->sendHello('EHLO', $host)) {
- if (!$this->sendHello('HELO', $host)) {
- return false;
- }
- }
-
- return true;
- }
-
- /**
- * Send an SMTP HELO or EHLO command.
- * Low-level implementation used by hello()
- *
- * @see hello()
- * @param string $hello The HELO string
- * @param string $host The hostname to say we are
- * @access protected
- * @return bool
- */
- protected function sendHello($hello, $host)
- {
- $noerror = $this->sendCommand($hello, $hello . ' ' . $host, 250);
- $this->helo_rply = $this->last_reply;
- return $noerror;
- }
-
- /**
- * Send an SMTP MAIL command.
- * Starts a mail transaction from the email address specified in
- * $from. Returns true if successful or false otherwise. If True
- * the mail transaction is started and then one or more recipient
- * commands may be called followed by a data command.
- * Implements rfc 821: MAIL FROM:
- *
- * @param string $from Source address of this message
- * @access public
- * @return bool
- */
- public function mail($from)
- {
- $useVerp = ($this->do_verp ? ' XVERP' : '');
- return $this->sendCommand(
- 'MAIL FROM',
- 'MAIL FROM:<' . $from . '>' . $useVerp,
- 250
- );
- }
-
- /**
- * Send an SMTP QUIT command.
- * Closes the socket if there is no error or the $close_on_error argument is true.
- * Implements from rfc 821: QUIT
- *
- * @param bool $close_on_error Should the connection close if an error occurs?
- * @access public
- * @return bool
- */
- public function quit($close_on_error = true)
- {
- $noerror = $this->sendCommand('QUIT', 'QUIT', 221);
- $e = $this->error; //Save any error
- if ($noerror or $close_on_error) {
- $this->close();
- $this->error = $e; //Restore any error from the quit command
- }
- return $noerror;
- }
-
- /**
- * Send an SMTP RCPT command.
- * Sets the TO argument to $to.
- * Returns true if the recipient was accepted false if it was rejected.
- * Implements from rfc 821: RCPT TO:
- *
- * @param string $to The address the message is being sent to
- * @access public
- * @return bool
- */
- public function recipient($to)
- {
- return $this->sendCommand(
- 'RCPT TO ',
- 'RCPT TO:<' . $to . '>',
- array(250, 251)
- );
- }
-
- /**
- * Send an SMTP RSET command.
- * Abort any transaction that is currently in progress.
- * Implements rfc 821: RSET
- *
- * @access public
- * @return bool True on success.
- */
- public function reset()
- {
- return $this->sendCommand('RSET', 'RSET', 250);
- }
-
- /**
- * Send a command to an SMTP server and check its return code.
- *
- * @param string $command The command name - not sent to the server
- * @param string $commandstring The actual command to send
- * @param int|array $expect One or more expected integer success codes
- * @access protected
- * @return bool True on success.
- */
- protected function sendCommand($command, $commandstring, $expect)
- {
- if (!$this->connected()) {
- $this->error = array(
- "error" => "Called $command without being connected"
- );
- return false;
- }
- $this->client_send($commandstring . self::CRLF);
-
- $reply = $this->get_lines();
- $code = substr($reply, 0, 3);
-
- if ($this->do_debug >= 2) {
- $this->edebug('SERVER -> CLIENT: ' . $reply);
- }
-
- if (!in_array($code, (array)$expect)) {
- $this->last_reply = null;
- $this->error = array(
- "error" => "$command command failed",
- "smtp_code" => $code,
- "detail" => substr($reply, 4)
- );
- if ($this->do_debug >= 1) {
- $this->edebug(
- 'SMTP ERROR: ' . $this->error['error'] . ': ' . $reply
- );
- }
- return false;
- }
-
- $this->last_reply = $reply;
- $this->error = null;
- return true;
- }
-
- /**
- * Send an SMTP SAML command.
- * Starts a mail transaction from the email address specified in $from.
- * Returns true if successful or false otherwise. If True
- * the mail transaction is started and then one or more recipient
- * commands may be called followed by a data command. This command
- * will send the message to the users terminal if they are logged
- * in and send them an email.
- * Implements rfc 821: SAML FROM:
- *
- * @param string $from The address the message is from
- * @access public
- * @return bool
- */
- public function sendAndMail($from)
- {
- return $this->sendCommand("SAML", "SAML FROM:$from", 250);
- }
-
- /**
- * Send an SMTP VRFY command.
- *
- * @param string $name The name to verify
- * @access public
- * @return bool
- */
- public function verify($name)
- {
- return $this->sendCommand("VRFY", "VRFY $name", array(250, 251));
- }
-
- /**
- * Send an SMTP NOOP command.
- * Used to keep keep-alives alive, doesn't actually do anything
- *
- * @access public
- * @return bool
- */
- public function noop()
- {
- return $this->sendCommand("NOOP", "NOOP", 250);
- }
-
- /**
- * Send an SMTP TURN command.
- * This is an optional command for SMTP that this class does not support.
- * This method is here to make the RFC821 Definition
- * complete for this class and __may__ be implemented in future
- * Implements from rfc 821: TURN
- *
- * @access public
- * @return bool
- */
- public function turn()
- {
- $this->error = array(
- 'error' => 'The SMTP TURN command is not implemented'
- );
- if ($this->do_debug >= 1) {
- $this->edebug('SMTP NOTICE: ' . $this->error['error']);
- }
- return false;
- }
-
- /**
- * Send raw data to the server.
- *
- * @param string $data The data to send
- * @access public
- * @return int|bool The number of bytes sent to the server or false on error
- */
- public function client_send($data)
- {
- if ($this->do_debug >= 1) {
- $this->edebug("CLIENT -> SERVER: $data");
- }
- return fwrite($this->smtp_conn, $data);
- }
-
- /**
- * Get the latest error.
- *
- * @access public
- * @return array
- */
- public function getError()
- {
- return $this->error;
- }
-
- /**
- * Get the last reply from the server.
- *
- * @access public
- * @return string
- */
- public function getLastReply()
- {
- return $this->last_reply;
- }
-
- /**
- * Read the SMTP server's response.
- * Either before eof or socket timeout occurs on the operation.
- * With SMTP we can tell if we have more lines to read if the
- * 4th character is '-' symbol. If it is a space then we don't
- * need to read anything else.
- *
- * @access protected
- * @return string
- */
- protected function get_lines()
- {
- $data = '';
- $endtime = 0;
- // If the connection is bad, give up now
- if (!is_resource($this->smtp_conn)) {
- return $data;
- }
- stream_set_timeout($this->smtp_conn, $this->Timeout);
- if ($this->Timelimit > 0) {
- $endtime = time() + $this->Timelimit;
- }
- while (is_resource($this->smtp_conn) && !feof($this->smtp_conn)) {
- $str = @fgets($this->smtp_conn, 515);
- if ($this->do_debug >= 4) {
- $this->edebug("SMTP -> get_lines(): \$data was \"$data\"");
- $this->edebug("SMTP -> get_lines(): \$str is \"$str\"");
- }
- $data .= $str;
- if ($this->do_debug >= 4) {
- $this->edebug("SMTP -> get_lines(): \$data is \"$data\"");
- }
- // if 4th character is a space, we are done reading, break the loop
- if (substr($str, 3, 1) == ' ') {
- break;
- }
- // Timed-out? Log and break
- $info = stream_get_meta_data($this->smtp_conn);
- if ($info['timed_out']) {
- if ($this->do_debug >= 4) {
- $this->edebug(
- 'SMTP -> get_lines(): timed-out (' . $this->Timeout . ' sec)'
- );
- }
- break;
- }
- // Now check if reads took too long
- if ($endtime) {
- if (time() > $endtime) {
- if ($this->do_debug >= 4) {
- $this->edebug(
- 'SMTP -> get_lines(): timelimit reached ('
- . $this->Timelimit . ' sec)'
- );
- }
- break;
- }
- }
- }
- return $data;
- }
-
- /**
- * Enable or disable VERP address generation.
- *
- * @param bool $enabled
- */
- public function setVerp($enabled = false)
- {
- $this->do_verp = $enabled;
- }
-
- /**
- * Get VERP address generation mode.
- *
- * @return bool
- */
- public function getVerp()
- {
- return $this->do_verp;
- }
-
- /**
- * Set debug output method.
- *
- * @param string $method The function/method to use for debugging output.
- */
- public function setDebugOutput($method = 'echo')
- {
- $this->Debugoutput = $method;
- }
-
- /**
- * Get debug output method.
- *
- * @return string
- */
- public function getDebugOutput()
- {
- return $this->Debugoutput;
- }
-
- /**
- * Set debug output level.
- *
- * @param int $level
- */
- public function setDebugLevel($level = 0)
- {
- $this->do_debug = $level;
- }
-
- /**
- * Get debug output level.
- *
- * @return int
- */
- public function getDebugLevel()
- {
- return $this->do_debug;
- }
-
- /**
- * Set SMTP timeout.
- *
- * @param int $timeout
- */
- public function setTimeout($timeout = 0)
- {
- $this->Timeout = $timeout;
- }
-
- /**
- * Get SMTP timeout.
- *
- * @return int
- */
- public function getTimeout()
- {
- return $this->Timeout;
- }
-}
diff --git a/inc/locales/ca_ES/LC_MESSAGES/messages.mo b/inc/locales/ca_ES/LC_MESSAGES/messages.mo
index 299425a9..8cc9f79d 100644
Binary files a/inc/locales/ca_ES/LC_MESSAGES/messages.mo and b/inc/locales/ca_ES/LC_MESSAGES/messages.mo differ
diff --git a/inc/locales/ca_ES/LC_MESSAGES/messages.po b/inc/locales/ca_ES/LC_MESSAGES/messages.po
index cddd17ea..45ba1b97 100644
--- a/inc/locales/ca_ES/LC_MESSAGES/messages.po
+++ b/inc/locales/ca_ES/LC_MESSAGES/messages.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: sysPass\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-13 18:32+0100\n"
-"PO-Revision-Date: 2015-12-13 18:33+0100\n"
+"POT-Creation-Date: 2016-01-10 19:26+0100\n"
+"PO-Revision-Date: 2016-01-10 19:26+0100\n"
"Last-Translator: nuxsmin \n"
"Language-Team: \n"
"Language: ca_ES\n"
@@ -16,88 +16,116 @@ msgstr ""
"X-Generator: Poedit 1.6.10\n"
"X-Poedit-SearchPath-0: ../../../..\n"
-#: ../../../../ajax/ajax_2fa.php:37 ../../../../ajax/ajax_accountSave.php:42
-#: ../../../../ajax/ajax_appMgmtSave.php:43
-#: ../../../../ajax/ajax_backup.php:41 ../../../../ajax/ajax_checkLdap.php:42
-#: ../../../../ajax/ajax_configSave.php:44 ../../../../ajax/ajax_files.php:42
-#: ../../../../ajax/ajax_files.php:57 ../../../../ajax/ajax_getFiles.php:47
-#: ../../../../ajax/ajax_import.php:50 ../../../../ajax/ajax_migrate.php:46
-#: ../../../../ajax/ajax_passReset.php:40 ../../../../ajax/ajax_search.php:42
-#: ../../../../ajax/ajax_sendRequest.php:42
-#: ../../../../ajax/ajax_userPrefsSave.php:43
+#: ../../../../ajax/ajax_2fa.php:41 ../../../../ajax/ajax_accFavorites.php:42
+#: ../../../../ajax/ajax_accountSave.php:51
+#: ../../../../ajax/ajax_appMgmtSave.php:56
+#: ../../../../ajax/ajax_appMgmtSearch.php:48
+#: ../../../../ajax/ajax_backup.php:47
+#: ../../../../ajax/ajax_checkConnection.php:45
+#: ../../../../ajax/ajax_configSave.php:58 ../../../../ajax/ajax_files.php:52
+#: ../../../../ajax/ajax_files.php:67 ../../../../ajax/ajax_getFiles.php:51
+#: ../../../../ajax/ajax_import.php:54 ../../../../ajax/ajax_migrate.php:50
+#: ../../../../ajax/ajax_passReset.php:46 ../../../../ajax/ajax_search.php:46
+#: ../../../../ajax/ajax_sendRequest.php:52
+#: ../../../../ajax/ajax_userPrefsSave.php:52
msgid "CONSULTA INVÁLIDA"
msgstr "CONSULTA INVÀLIDA"
-#: ../../../../ajax/ajax_2fa.php:48
+#: ../../../../ajax/ajax_2fa.php:57
msgid "Código correcto"
msgstr "Codi correcte"
-#: ../../../../ajax/ajax_2fa.php:51 ../../../../ajax/ajax_userPrefsSave.php:99
+#: ../../../../ajax/ajax_2fa.php:60
+#: ../../../../ajax/ajax_userPrefsSave.php:109
msgid "Código incorrecto"
msgstr "Codi incorrecte"
-#: ../../../../ajax/ajax_accountSave.php:36
-#: ../../../../ajax/ajax_appMgmtSave.php:37
-#: ../../../../ajax/ajax_backup.php:35 ../../../../ajax/ajax_checkLdap.php:36
-#: ../../../../ajax/ajax_configSave.php:38 ../../../../ajax/ajax_import.php:36
-#: ../../../../ajax/ajax_migrate.php:36
-#: ../../../../ajax/ajax_sendRequest.php:36
-#: ../../../../ajax/ajax_userPrefsSave.php:37
-#: ../../../../ajax/ajax_viewpass.php:37
-msgid "La sesión no se ha iniciado o ha caducado"
-msgstr "La sessió no s'ha iniciat o ha caducat"
-
-#: ../../../../ajax/ajax_accountSave.php:78
-#: ../../../../ajax/ajax_accountSave.php:93
-msgid "Es necesario un nombre de cuenta"
-msgstr "És necessari un nom de compte"
-
-#: ../../../../ajax/ajax_accountSave.php:80
-#: ../../../../ajax/ajax_accountSave.php:91
-#: ../../../../ajax/ajax_appMgmtSave.php:329
-msgid "Es necesario un nombre de cliente"
-msgstr "És necessari un nom de client"
-
-#: ../../../../ajax/ajax_accountSave.php:82
-#: ../../../../ajax/ajax_accountSave.php:95
-msgid "Es necesario un usuario"
-msgstr "És necessari un usuari"
-
-#: ../../../../ajax/ajax_accountSave.php:84
-#: ../../../../ajax/ajax_accountSave.php:106
-msgid "Es necesaria una clave"
-msgstr "És necessària una contrasenya"
-
-#: ../../../../ajax/ajax_accountSave.php:86
-#: ../../../../ajax/ajax_accountSave.php:97
-msgid "Es necesario una categoría"
-msgstr "És necessari una categoria"
-
-#: ../../../../ajax/ajax_accountSave.php:101
-#: ../../../../ajax/ajax_accountSave.php:110
-msgid "Id inválido"
-msgstr "Id invàlid"
-
-#: ../../../../ajax/ajax_accountSave.php:113
-#: ../../../../ajax/ajax_accountSave.php:263
-#: ../../../../ajax/ajax_appMgmtSave.php:535
-#: ../../../../ajax/ajax_configSave.php:334
-#: ../../../../ajax/ajax_userPrefsSave.php:113 ../../../../api.php:53
+#: ../../../../ajax/ajax_accFavorites.php:50
+#: ../../../../ajax/ajax_accountSave.php:122
+#: ../../../../ajax/ajax_accountSave.php:260
+#: ../../../../ajax/ajax_appMgmtSave.php:606
+#: ../../../../ajax/ajax_appMgmtSearch.php:101
+#: ../../../../ajax/ajax_configSave.php:429
+#: ../../../../ajax/ajax_files.php:208
+#: ../../../../ajax/ajax_userPrefsSave.php:123
msgid "Acción Inválida"
msgstr "Acció Invàlida"
-#: ../../../../ajax/ajax_accountSave.php:121
-#: ../../../../ajax/ajax_appMgmtSave.php:112
-#: ../../../../ajax/ajax_appMgmtSave.php:149
-#: ../../../../ajax/ajax_backup.php:68
+#: ../../../../ajax/ajax_accFavorites.php:55
+msgid "Favorito añadido"
+msgstr ""
+
+#: ../../../../ajax/ajax_accFavorites.php:58
+#, fuzzy
+msgid "Error al añadir favorito"
+msgstr "Error en crear usuaris"
+
+#: ../../../../ajax/ajax_accFavorites.php:61
+#, fuzzy
+msgid "Favorito eliminado"
+msgstr "Usuari eliminat"
+
+#: ../../../../ajax/ajax_accFavorites.php:64
+#, fuzzy
+msgid "Error al eliminar favorito"
+msgstr "Error en eliminar l'usuari"
+
+#: ../../../../ajax/ajax_accountSave.php:45
+#: ../../../../ajax/ajax_appMgmtSave.php:50
+#: ../../../../ajax/ajax_appMgmtSearch.php:42
+#: ../../../../ajax/ajax_backup.php:41
+#: ../../../../ajax/ajax_checkConnection.php:39
+#: ../../../../ajax/ajax_configSave.php:52 ../../../../ajax/ajax_import.php:40
+#: ../../../../ajax/ajax_migrate.php:40
+#: ../../../../ajax/ajax_sendRequest.php:46
+#: ../../../../ajax/ajax_userPrefsSave.php:46
+#: ../../../../ajax/ajax_viewpass.php:44 ../../../../ajax/ajax_wiki.php:37
+msgid "La sesión no se ha iniciado o ha caducado"
+msgstr "La sessió no s'ha iniciat o ha caducat"
+
+#: ../../../../ajax/ajax_accountSave.php:87
+#: ../../../../ajax/ajax_accountSave.php:102
+msgid "Es necesario un nombre de cuenta"
+msgstr "És necessari un nom de compte"
+
+#: ../../../../ajax/ajax_accountSave.php:89
+#: ../../../../ajax/ajax_accountSave.php:100
+#: ../../../../ajax/ajax_appMgmtSave.php:343
+msgid "Es necesario un nombre de cliente"
+msgstr "És necessari un nom de client"
+
+#: ../../../../ajax/ajax_accountSave.php:91
+#: ../../../../ajax/ajax_accountSave.php:104
+msgid "Es necesario un usuario"
+msgstr "És necessari un usuari"
+
+#: ../../../../ajax/ajax_accountSave.php:93
+#: ../../../../ajax/ajax_accountSave.php:115
+msgid "Es necesaria una clave"
+msgstr "És necessària una contrasenya"
+
+#: ../../../../ajax/ajax_accountSave.php:95
+#: ../../../../ajax/ajax_accountSave.php:106
+msgid "Es necesario una categoría"
+msgstr "És necessari una categoria"
+
+#: ../../../../ajax/ajax_accountSave.php:110
+#: ../../../../ajax/ajax_accountSave.php:119
+msgid "Id inválido"
+msgstr "Id invàlid"
+
+#: ../../../../ajax/ajax_accountSave.php:130
+#: ../../../../ajax/ajax_appMgmtSave.php:124
+#: ../../../../ajax/ajax_appMgmtSave.php:161
+#: ../../../../ajax/ajax_backup.php:70
msgid "Las claves no coinciden"
msgstr "Les claus no coincideixen"
-#: ../../../../ajax/ajax_accountSave.php:173
+#: ../../../../ajax/ajax_accountSave.php:184
msgid "Cuenta creada"
msgstr "Compte creat"
-#: ../../../../ajax/ajax_accountSave.php:176
+#: ../../../../ajax/ajax_accountSave.php:187
msgid "Error al crear la cuenta"
msgstr "Error en crear el compte"
@@ -105,608 +133,713 @@ msgstr "Error en crear el compte"
msgid "Sin cambios"
msgstr "Sense canvis"
-#: ../../../../ajax/ajax_accountSave.php:223
+#: ../../../../ajax/ajax_accountSave.php:220
msgid "Cuenta actualizada"
msgstr "Compte actualitzat"
-#: ../../../../ajax/ajax_accountSave.php:226
+#: ../../../../ajax/ajax_accountSave.php:223
msgid "Error al modificar la cuenta"
msgstr "Error en modificar el compte"
-#: ../../../../ajax/ajax_accountSave.php:233
+#: ../../../../ajax/ajax_accountSave.php:232
+#: ../../../../ajax/ajax_appMgmtSave.php:601
msgid "Cuenta eliminada"
msgstr "Compte eliminat"
-#: ../../../../ajax/ajax_accountSave.php:236
+#: ../../../../ajax/ajax_accountSave.php:235
+#: ../../../../ajax/ajax_appMgmtSave.php:604
msgid "Error al eliminar la cuenta"
msgstr "Error en eliminar el compte"
-#: ../../../../ajax/ajax_accountSave.php:246
-#: ../../../../ajax/ajax_appMgmtSave.php:153
-#: ../../../../ajax/ajax_passReset.php:75
+#: ../../../../ajax/ajax_accountSave.php:243
+#: ../../../../ajax/ajax_appMgmtSave.php:165
+#: ../../../../ajax/ajax_passReset.php:85
+#: ../../../../ajax/ajax_passReset.php:89
msgid "Clave actualizada"
msgstr "Contrasenya actualitzada"
-#: ../../../../ajax/ajax_accountSave.php:249
+#: ../../../../ajax/ajax_accountSave.php:246
msgid "Error al actualizar la clave"
msgstr "Error en actualitzar la contrasenya"
-#: ../../../../ajax/ajax_accountSave.php:256
+#: ../../../../ajax/ajax_accountSave.php:253
msgid "Cuenta restaurada"
msgstr "Compte restaurat"
-#: ../../../../ajax/ajax_accountSave.php:259
+#: ../../../../ajax/ajax_accountSave.php:256
msgid "Error al restaurar cuenta"
msgstr "Error al restaurar cuenta"
-#: ../../../../ajax/ajax_appMgmtData.php:54
+#: ../../../../ajax/ajax_appMgmtData.php:60
msgid "Ver Usuario"
msgstr "Veure Usuari"
-#: ../../../../ajax/ajax_appMgmtData.php:61
-#: ../../../../web/UsersMgmtC.class.php:137
+#: ../../../../ajax/ajax_appMgmtData.php:67
+#: ../../../../inc/SP/Controller/Grids.class.php:469
+#: ../../../../inc/SP/Controller/Grids.class.php:470
msgid "Editar Usuario"
msgstr "Editar Usuari"
-#: ../../../../ajax/ajax_appMgmtData.php:67
-#: ../../../../inc/UserBase.class.php:383
-#: ../../../../web/UsersMgmtC.class.php:122
+#: ../../../../ajax/ajax_appMgmtData.php:73
+#: ../../../../inc/SP/Controller/Grids.class.php:446
+#: ../../../../inc/SP/Controller/Grids.class.php:447
+#: ../../../../inc/SP/Mgmt/User/UserBase.class.php:393
msgid "Nuevo Usuario"
msgstr "Nou Usuari"
-#: ../../../../ajax/ajax_appMgmtData.php:73
+#: ../../../../ajax/ajax_appMgmtData.php:79
msgid "Ver Grupo"
msgstr "Veure Grup"
-#: ../../../../ajax/ajax_appMgmtData.php:80
-#: ../../../../web/UsersMgmtC.class.php:203
+#: ../../../../ajax/ajax_appMgmtData.php:86
+#: ../../../../inc/SP/Controller/Grids.class.php:565
+#: ../../../../inc/SP/Controller/Grids.class.php:566
msgid "Editar Grupo"
msgstr "Editar Grup"
-#: ../../../../ajax/ajax_appMgmtData.php:86
-#: ../../../../inc/Groups.class.php:152 ../../../../inc/Groups.class.php:253
-#: ../../../../web/UsersMgmtC.class.php:195
+#: ../../../../ajax/ajax_appMgmtData.php:92
+#: ../../../../inc/SP/Controller/Grids.class.php:553
+#: ../../../../inc/SP/Controller/Grids.class.php:554
+#: ../../../../inc/SP/Mgmt/User/Groups.class.php:165
+#: ../../../../inc/SP/Mgmt/User/Groups.class.php:273
msgid "Nuevo Grupo"
msgstr "Nou Grup"
-#: ../../../../ajax/ajax_appMgmtData.php:92
+#: ../../../../ajax/ajax_appMgmtData.php:98
msgid "Ver Perfil"
msgstr "Veure Perfil"
-#: ../../../../ajax/ajax_appMgmtData.php:99
-#: ../../../../web/UsersMgmtC.class.php:268
+#: ../../../../ajax/ajax_appMgmtData.php:105
+#: ../../../../inc/SP/Controller/Grids.class.php:649
+#: ../../../../inc/SP/Controller/Grids.class.php:650
msgid "Editar Perfil"
msgstr "Editar Perfil"
-#: ../../../../ajax/ajax_appMgmtData.php:105
-#: ../../../../inc/ProfileBase.class.php:512
-#: ../../../../web/UsersMgmtC.class.php:253
+#: ../../../../ajax/ajax_appMgmtData.php:111
+#: ../../../../inc/SP/Controller/Grids.class.php:626
+#: ../../../../inc/SP/Controller/Grids.class.php:627
+#: ../../../../inc/SP/Mgmt/User/ProfileBase.class.php:518
msgid "Nuevo Perfil"
msgstr "Nou Perfil"
-#: ../../../../ajax/ajax_appMgmtData.php:111
+#: ../../../../ajax/ajax_appMgmtData.php:117
msgid "Ver Cliente"
msgstr "Veure Perfil"
-#: ../../../../ajax/ajax_appMgmtData.php:118
-#: ../../../../web/AccountsMgmtC.class.php:153
+#: ../../../../ajax/ajax_appMgmtData.php:124
+#: ../../../../inc/SP/Controller/Grids.class.php:198
+#: ../../../../inc/SP/Controller/Grids.class.php:199
msgid "Editar Cliente"
msgstr "Editar Client"
-#: ../../../../ajax/ajax_appMgmtData.php:124
-#: ../../../../inc/Customer.class.php:65
-#: ../../../../web/AccountsMgmtC.class.php:146
+#: ../../../../ajax/ajax_appMgmtData.php:130
+#: ../../../../inc/SP/Controller/Grids.class.php:186
+#: ../../../../inc/SP/Controller/Grids.class.php:187
+#: ../../../../inc/SP/Mgmt/Customer.class.php:342
msgid "Nuevo Cliente"
msgstr "Nou Client"
-#: ../../../../ajax/ajax_appMgmtData.php:130
+#: ../../../../ajax/ajax_appMgmtData.php:136
msgid "Ver Categoría"
msgstr "Veure Categoria"
-#: ../../../../ajax/ajax_appMgmtData.php:137
-#: ../../../../web/AccountsMgmtC.class.php:95
+#: ../../../../ajax/ajax_appMgmtData.php:143
+#: ../../../../inc/SP/Controller/Grids.class.php:104
+#: ../../../../inc/SP/Controller/Grids.class.php:105
msgid "Editar Categoría"
msgstr "Editar Categoria"
-#: ../../../../ajax/ajax_appMgmtData.php:143
-#: ../../../../inc/Category.class.php:83
-#: ../../../../web/AccountsMgmtC.class.php:87
-#: ../../../../inc/themes/classic/account.inc:53
-#: ../../../../inc/themes/material-blue/account.inc:62
+#: ../../../../ajax/ajax_appMgmtData.php:149
+#: ../../../../inc/SP/Controller/Grids.class.php:92
+#: ../../../../inc/SP/Controller/Grids.class.php:93
+#: ../../../../inc/SP/Mgmt/Category.class.php:348
+#: ../../../../inc/themes/classic/account.inc:59
+#: ../../../../inc/themes/material-blue/account.inc:75
msgid "Nueva Categoría"
msgstr "Nova Categoria"
-#: ../../../../ajax/ajax_appMgmtData.php:149
+#: ../../../../ajax/ajax_appMgmtData.php:155
msgid "Ver Autorización"
msgstr "Veure Autorització"
-#: ../../../../ajax/ajax_appMgmtData.php:156
-#: ../../../../inc/ApiTokens.class.php:189
-#: ../../../../web/UsersMgmtC.class.php:400
+#: ../../../../ajax/ajax_appMgmtData.php:162
+#: ../../../../inc/SP/Api/ApiTokens.class.php:110
+#: ../../../../inc/SP/Controller/Grids.class.php:709
+#: ../../../../inc/SP/Controller/Grids.class.php:710
msgid "Nueva Autorización"
msgstr "Nova Autorització"
-#: ../../../../ajax/ajax_appMgmtData.php:162
-#: ../../../../web/UsersMgmtC.class.php:415
+#: ../../../../ajax/ajax_appMgmtData.php:168
+#: ../../../../inc/SP/Controller/Grids.class.php:732
+#: ../../../../inc/SP/Controller/Grids.class.php:733
msgid "Editar Autorización"
msgstr "Editar Autorització"
-#: ../../../../ajax/ajax_appMgmtData.php:168
-#: ../../../../web/AccountsMgmtC.class.php:274
+#: ../../../../ajax/ajax_appMgmtData.php:174
+#: ../../../../inc/SP/Controller/Grids.class.php:259
+#: ../../../../inc/SP/Controller/Grids.class.php:260
msgid "Nuevo Campo"
msgstr "Nou Camp"
-#: ../../../../ajax/ajax_appMgmtData.php:174
-#: ../../../../web/AccountsMgmtC.class.php:281
+#: ../../../../ajax/ajax_appMgmtData.php:180
+#: ../../../../inc/SP/Controller/Grids.class.php:271
+#: ../../../../inc/SP/Controller/Grids.class.php:272
msgid "Editar Campo"
msgstr "Editar Camp"
-#: ../../../../ajax/ajax_appMgmtSave.php:86
+#: ../../../../ajax/ajax_appMgmtData.php:186
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:196
+msgid "Ver Enlace Público"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:98
msgid "Es necesario un nombre de usuario"
msgstr "És necessari un nom d'usuari"
-#: ../../../../ajax/ajax_appMgmtSave.php:88
+#: ../../../../ajax/ajax_appMgmtSave.php:100
msgid "Es necesario un login"
msgstr "És necessari un login"
-#: ../../../../ajax/ajax_appMgmtSave.php:90
+#: ../../../../ajax/ajax_appMgmtSave.php:102
msgid "Es necesario un perfil"
msgstr "És necessari un perfil"
-#: ../../../../ajax/ajax_appMgmtSave.php:92
+#: ../../../../ajax/ajax_appMgmtSave.php:104
msgid "Es necesario un grupo"
msgstr "És necessari un grup"
-#: ../../../../ajax/ajax_appMgmtSave.php:94
+#: ../../../../ajax/ajax_appMgmtSave.php:106
msgid "Es necesario un email"
msgstr "És necessari un email"
-#: ../../../../ajax/ajax_appMgmtSave.php:96
-#: ../../../../ajax/ajax_appMgmtSave.php:145
-#: ../../../../ajax/ajax_appMgmtSave.php:160
-#: ../../../../ajax/ajax_backup.php:54
-#: ../../../../ajax/ajax_configSave.php:307
-#: ../../../../ajax/ajax_import.php:40 ../../../../ajax/ajax_migrate.php:40
-#: ../../../../ajax/ajax_userPrefsSave.php:88
+#: ../../../../ajax/ajax_appMgmtSave.php:108
+#: ../../../../ajax/ajax_appMgmtSave.php:157
+#: ../../../../ajax/ajax_appMgmtSave.php:172
+#: ../../../../ajax/ajax_backup.php:60
+#: ../../../../ajax/ajax_configSave.php:379
+#: ../../../../ajax/ajax_import.php:44 ../../../../ajax/ajax_migrate.php:44
+#: ../../../../ajax/ajax_userPrefsSave.php:98
msgid "Ey, esto es una DEMO!!"
msgstr "Ey, això és una DEMO!!"
-#: ../../../../ajax/ajax_appMgmtSave.php:101
+#: ../../../../ajax/ajax_appMgmtSave.php:113
msgid "Login de usuario duplicado"
msgstr "Login d'usuari duplicat"
-#: ../../../../ajax/ajax_appMgmtSave.php:104
+#: ../../../../ajax/ajax_appMgmtSave.php:116
msgid "Email de usuario duplicado"
msgstr "Email d'usuari duplicat"
-#: ../../../../ajax/ajax_appMgmtSave.php:110
-#: ../../../../ajax/ajax_appMgmtSave.php:147
+#: ../../../../ajax/ajax_appMgmtSave.php:122
+#: ../../../../ajax/ajax_appMgmtSave.php:159
msgid "La clave no puede estar en blanco"
msgstr "La contrasenya no pot estar en blanc"
-#: ../../../../ajax/ajax_appMgmtSave.php:123
+#: ../../../../ajax/ajax_appMgmtSave.php:135
msgid "Usuario creado"
msgstr "Usuari creat"
-#: ../../../../ajax/ajax_appMgmtSave.php:126
+#: ../../../../ajax/ajax_appMgmtSave.php:138
msgid "Error al crear el usuario"
msgstr "Error en crear l'usuari"
-#: ../../../../ajax/ajax_appMgmtSave.php:136
-#: ../../../../inc/UserMigrate.class.php:89
+#: ../../../../ajax/ajax_appMgmtSave.php:148
+#: ../../../../inc/SP/Mgmt/User/UserMigrate.class.php:98
msgid "Usuario actualizado"
msgstr "Usuari actualitzat"
-#: ../../../../ajax/ajax_appMgmtSave.php:139
+#: ../../../../ajax/ajax_appMgmtSave.php:151
msgid "Error al actualizar el usuario"
msgstr "Error en actualitzar l'usuari"
-#: ../../../../ajax/ajax_appMgmtSave.php:156
-#: ../../../../ajax/ajax_passReset.php:79
+#: ../../../../ajax/ajax_appMgmtSave.php:168
+#: ../../../../ajax/ajax_passReset.php:93
+#: ../../../../ajax/ajax_passReset.php:96
msgid "Error al modificar la clave"
msgstr "Error en modificar la contrasenya"
-#: ../../../../ajax/ajax_appMgmtSave.php:162
+#: ../../../../ajax/ajax_appMgmtSave.php:174
msgid "No es posible eliminar, usuario en uso"
msgstr "No és possible eliminar, usuari en ús"
-#: ../../../../ajax/ajax_appMgmtSave.php:166
+#: ../../../../ajax/ajax_appMgmtSave.php:178
msgid "Usuario eliminado"
msgstr "Usuari eliminat"
-#: ../../../../ajax/ajax_appMgmtSave.php:169
+#: ../../../../ajax/ajax_appMgmtSave.php:181
msgid "Error al eliminar el usuario"
msgstr "Error en eliminar l'usuari"
-#: ../../../../ajax/ajax_appMgmtSave.php:184
+#: ../../../../ajax/ajax_appMgmtSave.php:196
msgid "Es necesario un nombre de grupo"
msgstr "És necessari un nom de grup"
-#: ../../../../ajax/ajax_appMgmtSave.php:192
+#: ../../../../ajax/ajax_appMgmtSave.php:204
msgid "Nombre de grupo duplicado"
msgstr "Nom de grup duplicat"
-#: ../../../../ajax/ajax_appMgmtSave.php:204
+#: ../../../../ajax/ajax_appMgmtSave.php:216
msgid "Grupo creado"
msgstr "Grup creat"
-#: ../../../../ajax/ajax_appMgmtSave.php:206
+#: ../../../../ajax/ajax_appMgmtSave.php:218
msgid "Error al crear el grupo"
msgstr "Error en crear el grup"
-#: ../../../../ajax/ajax_appMgmtSave.php:217
+#: ../../../../ajax/ajax_appMgmtSave.php:229
msgid "Grupo actualizado"
msgstr "Grup actualitzat"
-#: ../../../../ajax/ajax_appMgmtSave.php:220
+#: ../../../../ajax/ajax_appMgmtSave.php:232
msgid "Error al actualizar el grupo"
msgstr "Error en actualitzar el grup"
-#: ../../../../ajax/ajax_appMgmtSave.php:229
-#: ../../../../ajax/ajax_appMgmtSave.php:306
-#: ../../../../inc/CustomFieldsBase.class.php:109
-#: ../../../../inc/themes/classic/account.inc:112
+#: ../../../../ajax/ajax_appMgmtSave.php:241
+#: ../../../../ajax/ajax_appMgmtSave.php:320
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:111
+#: ../../../../inc/themes/classic/account.inc:121
#: ../../../../inc/themes/classic/groups.inc:24
#: ../../../../inc/themes/classic/profiles.inc:85
-#: ../../../../inc/themes/material-blue/account.inc:138
-#: ../../../../inc/themes/material-blue/groups.inc:32
-#: ../../../../inc/themes/material-blue/profiles.inc:99
+#: ../../../../inc/themes/material-blue/account.inc:157
+#: ../../../../inc/themes/material-blue/groups.inc:35
+#: ../../../../inc/themes/material-blue/profiles.inc:106
msgid "Usuarios"
msgstr "Usuaris"
-#: ../../../../ajax/ajax_appMgmtSave.php:233
-#: ../../../../inc/Category.class.php:266
-#: ../../../../inc/CustomFieldsBase.class.php:106
-#: ../../../../inc/Customer.class.php:150
+#: ../../../../ajax/ajax_appMgmtSave.php:245
+#: ../../../../inc/SP/Mgmt/Category.class.php:93
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:108
+#: ../../../../inc/SP/Mgmt/Customer.class.php:163
#: ../../../../inc/themes/classic/profiles.inc:15
-#: ../../../../inc/themes/material-blue/config.inc:176
-#: ../../../../inc/themes/material-blue/profiles.inc:19
+#: ../../../../inc/themes/material-blue/config-accounts.inc:4
+#: ../../../../inc/themes/material-blue/profiles.inc:21
msgid "Cuentas"
msgstr "Comptes"
-#: ../../../../ajax/ajax_appMgmtSave.php:236
-#: ../../../../ajax/ajax_appMgmtSave.php:308
-#: ../../../../inc/Category.class.php:119
-#: ../../../../inc/Customer.class.php:150
+#: ../../../../ajax/ajax_appMgmtSave.php:248
+#: ../../../../ajax/ajax_appMgmtSave.php:322
+#: ../../../../inc/SP/Mgmt/Category.class.php:58
+#: ../../../../inc/SP/Mgmt/Customer.class.php:163
msgid "No es posible eliminar"
msgstr "No és possible eliminar"
-#: ../../../../ajax/ajax_appMgmtSave.php:236
+#: ../../../../ajax/ajax_appMgmtSave.php:248
msgid "Grupo en uso por:"
msgstr "Grup en ús per:"
-#: ../../../../ajax/ajax_appMgmtSave.php:241
+#: ../../../../ajax/ajax_appMgmtSave.php:253
msgid "Grupo eliminado"
msgstr "Grup eliminat"
-#: ../../../../ajax/ajax_appMgmtSave.php:244
+#: ../../../../ajax/ajax_appMgmtSave.php:256
msgid "Error al eliminar el grupo"
msgstr "Error en eliminar el grup"
-#: ../../../../ajax/ajax_appMgmtSave.php:283
+#: ../../../../ajax/ajax_appMgmtSave.php:297
msgid "Es necesario un nombre de perfil"
msgstr "És necessari un nom de perfil"
-#: ../../../../ajax/ajax_appMgmtSave.php:285
+#: ../../../../ajax/ajax_appMgmtSave.php:299
msgid "Nombre de perfil duplicado"
msgstr "Nom de perfil duplicat"
-#: ../../../../ajax/ajax_appMgmtSave.php:290
+#: ../../../../ajax/ajax_appMgmtSave.php:304
msgid "Perfil creado"
msgstr "Perfil creat"
-#: ../../../../ajax/ajax_appMgmtSave.php:293
+#: ../../../../ajax/ajax_appMgmtSave.php:307
msgid "Error al crear el perfil"
msgstr "Error al crear el perfil"
-#: ../../../../ajax/ajax_appMgmtSave.php:296
+#: ../../../../ajax/ajax_appMgmtSave.php:310
msgid "Perfil actualizado"
msgstr "Perfil actualitzat"
-#: ../../../../ajax/ajax_appMgmtSave.php:299
+#: ../../../../ajax/ajax_appMgmtSave.php:313
msgid "Error al actualizar el perfil"
msgstr "Error en actualitzar el perfil"
-#: ../../../../ajax/ajax_appMgmtSave.php:308
+#: ../../../../ajax/ajax_appMgmtSave.php:322
msgid "Perfil en uso por:"
msgstr "Perfil en ús per:"
-#: ../../../../ajax/ajax_appMgmtSave.php:311
+#: ../../../../ajax/ajax_appMgmtSave.php:325
msgid "Perfil eliminado"
msgstr "Perfil eliminat"
-#: ../../../../ajax/ajax_appMgmtSave.php:314
+#: ../../../../ajax/ajax_appMgmtSave.php:328
msgid "Error al eliminar el perfil"
msgstr "Error en eliminar el perfil"
-#: ../../../../ajax/ajax_appMgmtSave.php:349
+#: ../../../../ajax/ajax_appMgmtSave.php:363
msgid "Cliente creado"
msgstr "Client creat"
-#: ../../../../ajax/ajax_appMgmtSave.php:364
+#: ../../../../ajax/ajax_appMgmtSave.php:378
msgid "Cliente actualizado"
msgstr "Client actualitzat"
-#: ../../../../ajax/ajax_appMgmtSave.php:374
+#: ../../../../ajax/ajax_appMgmtSave.php:388
msgid "Cliente eliminado"
msgstr "Client eliminat"
-#: ../../../../ajax/ajax_appMgmtSave.php:388
+#: ../../../../ajax/ajax_appMgmtSave.php:402
msgid "Es necesario un nombre de categoría"
msgstr "És necessari un nom de categoria"
-#: ../../../../ajax/ajax_appMgmtSave.php:408
+#: ../../../../ajax/ajax_appMgmtSave.php:422
msgid "Categoría creada"
msgstr "Categoria creada"
-#: ../../../../ajax/ajax_appMgmtSave.php:423
+#: ../../../../ajax/ajax_appMgmtSave.php:437
msgid "Categoría actualizada"
msgstr "Categoria actualitzada"
-#: ../../../../ajax/ajax_appMgmtSave.php:434
+#: ../../../../ajax/ajax_appMgmtSave.php:448
msgid "Categoría eliminada"
msgstr "Categoria eliminada"
-#: ../../../../ajax/ajax_appMgmtSave.php:450
+#: ../../../../ajax/ajax_appMgmtSave.php:464
msgid "Usuario o acción no indicado"
msgstr "Usuari o acció no indicat"
-#: ../../../../ajax/ajax_appMgmtSave.php:460
+#: ../../../../ajax/ajax_appMgmtSave.php:474
msgid "Autorización creada"
msgstr "Autorització creada"
-#: ../../../../ajax/ajax_appMgmtSave.php:468
+#: ../../../../ajax/ajax_appMgmtSave.php:482
msgid "Autorización actualizada"
msgstr "Autorització actualitzada"
-#: ../../../../ajax/ajax_appMgmtSave.php:478
+#: ../../../../ajax/ajax_appMgmtSave.php:492
msgid "Autorización eliminada"
msgstr "Autorització eliminada"
-#: ../../../../ajax/ajax_appMgmtSave.php:495
+#: ../../../../ajax/ajax_appMgmtSave.php:509
msgid "Nombre del campo no indicado"
msgstr "Nom del camp no indicat"
-#: ../../../../ajax/ajax_appMgmtSave.php:497
+#: ../../../../ajax/ajax_appMgmtSave.php:511
msgid "Tipo del campo no indicado"
msgstr "Tipus del camp no indicat"
-#: ../../../../ajax/ajax_appMgmtSave.php:499
+#: ../../../../ajax/ajax_appMgmtSave.php:513
msgid "Módulo del campo no indicado"
msgstr "Mòdul del camp no indicat"
-#: ../../../../ajax/ajax_appMgmtSave.php:513
+#: ../../../../ajax/ajax_appMgmtSave.php:527
msgid "Campo creado"
msgstr "Camp creat"
-#: ../../../../ajax/ajax_appMgmtSave.php:522
+#: ../../../../ajax/ajax_appMgmtSave.php:536
msgid "Campo actualizado"
msgstr "Camp actualitzat"
-#: ../../../../ajax/ajax_appMgmtSave.php:532
+#: ../../../../ajax/ajax_appMgmtSave.php:546
msgid "Campo eliminado"
msgstr "Camp eliminat"
-#: ../../../../ajax/ajax_backup.php:58 ../../../../ajax/ajax_backup.php:63
-#: ../../../../inc/themes/classic/backup.inc:54
-msgid "Realizar Backup"
-msgstr "Realitzar Còpia de seguretat"
+#: ../../../../ajax/ajax_appMgmtSave.php:564
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:153
+#, fuzzy
+msgid "Enlace creado"
+msgstr "Client creat"
-#: ../../../../ajax/ajax_backup.php:58 ../../../../ajax/ajax_backup.php:60
+#: ../../../../ajax/ajax_appMgmtSave.php:573
+#: ../../../../inc/SP/Mgmt/PublicLinkBase.class.php:276
+#, fuzzy
+msgid "Enlace eliminado"
+msgstr "Client eliminat"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:582
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:231
+#, fuzzy
+msgid "Enlace actualizado"
+msgstr "Contrasenya actualitzada"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:587
+#: ../../../../ajax/ajax_files.php:149 ../../../../ajax/ajax_files.php:201
+msgid "No es un ID de archivo válido"
+msgstr "No és un ID d'arxiu vàlid"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:589
+#: ../../../../ajax/ajax_files.php:203
+#: ../../../../inc/SP/Mgmt/Files.class.php:138
+msgid "Archivo eliminado"
+msgstr "Arxiu eliminat"
+
+#: ../../../../ajax/ajax_appMgmtSave.php:592
+#: ../../../../ajax/ajax_files.php:206
+#: ../../../../inc/SP/Mgmt/Files.class.php:145
+msgid "Error al eliminar el archivo"
+msgstr "Error en eliminar l'arxiu"
+
+#: ../../../../ajax/ajax_backup.php:64
+#: ../../../../inc/SP/Core/Backup.class.php:71
msgid "Error al realizar el backup"
msgstr "Error en realitzar la còpia de seguretat"
-#: ../../../../ajax/ajax_backup.php:60 ../../../../ajax/ajax_backup.php:74
-#: ../../../../ajax/ajax_checkLdap.php:58 ../../../../inc/Import.class.php:128
-#: ../../../../inc/Migrate.class.php:92
+#: ../../../../ajax/ajax_backup.php:64 ../../../../ajax/ajax_backup.php:74
+#: ../../../../ajax/ajax_checkConnection.php:63
+#: ../../../../ajax/ajax_checkConnection.php:89
+#: ../../../../inc/SP/Import/Import.class.php:140
+#: ../../../../inc/SP/Import/Migrate.class.php:101
+#: ../../../../inc/SP/Mgmt/PublicLinkBase.class.php:272
+#: ../../../../inc/SP/Mgmt/PublicLinkBase.class.php:304
msgid "Revise el registro de eventos para más detalles"
msgstr "Revisi el registre d'esdeveniments per a més detalls"
-#: ../../../../ajax/ajax_backup.php:63
-msgid "Copia de la aplicación y base de datos realizada correctamente"
-msgstr "Còpia de l'aplicació i base de dades realitzada correctament"
-
-#: ../../../../ajax/ajax_backup.php:65
+#: ../../../../ajax/ajax_backup.php:67
msgid "Proceso de backup finalizado"
msgstr "Procés de còpia de seguretat finalitzat"
-#: ../../../../ajax/ajax_backup.php:72 ../../../../ajax/ajax_backup.php:77
-msgid "Realizar Exportación"
-msgstr "Realitzar Exportació"
-
-#: ../../../../ajax/ajax_backup.php:72
-msgid "Error al realizar la exportación de cuentas"
-msgstr "Error en realitzar l'exportació de comptes"
-
#: ../../../../ajax/ajax_backup.php:74
msgid "Error al realizar la exportación"
msgstr "Error en realitzar l'exportació"
#: ../../../../ajax/ajax_backup.php:77
-msgid "Exportación de cuentas realizada correctamente"
-msgstr "Exportació de comptes realitzada correctament"
-
-#: ../../../../ajax/ajax_backup.php:79
msgid "Proceso de exportación finalizado"
msgstr "Procés d'exportació finalitzat"
-#: ../../../../ajax/ajax_checkLdap.php:52 ../../../../inc/Ldap.class.php:264
+#: ../../../../ajax/ajax_checkConnection.php:57
+#: ../../../../inc/SP/Auth/Ldap.class.php:287
msgid "Los parámetros de LDAP no están configurados"
msgstr "Els paràmetres de LDAP no estan configurats"
-#: ../../../../ajax/ajax_checkLdap.php:58
+#: ../../../../ajax/ajax_checkConnection.php:63
msgid "Error de conexión a LDAP"
msgstr "Error de connexió a LDAP"
-#: ../../../../ajax/ajax_checkLdap.php:60
+#: ../../../../ajax/ajax_checkConnection.php:65
msgid "Conexión a LDAP correcta"
msgstr "Connexió a LDAP correcta"
-#: ../../../../ajax/ajax_checkLdap.php:60
+#: ../../../../ajax/ajax_checkConnection.php:65
msgid "Objetos encontrados"
msgstr "Objectes trobats"
-#: ../../../../ajax/ajax_configSave.php:58
+#: ../../../../ajax/ajax_checkConnection.php:73
+#, fuzzy
+msgid "Los parámetros de DokuWiki no están configurados"
+msgstr "Els paràmetres de LDAP no estan configurats"
+
+#: ../../../../ajax/ajax_checkConnection.php:80
+msgid "Error"
+msgstr ""
+
+#: ../../../../ajax/ajax_checkConnection.php:83
+#, fuzzy
+msgid "Conexión correcta"
+msgstr "Connexió a LDAP correcta"
+
+#: ../../../../ajax/ajax_checkConnection.php:84
+#: ../../../../inc/SP/Core/Init.class.php:536
+#: ../../../../inc/themes/classic/info.inc:33
+#: ../../../../inc/themes/material-blue/info.inc:33
+msgid "Versión"
+msgstr "Versió"
+
+#: ../../../../ajax/ajax_checkConnection.php:89
+#, fuzzy
+msgid "Error de conexión a DokuWiki"
+msgstr "Error de connexió a LDAP"
+
+#: ../../../../ajax/ajax_configSave.php:72
msgid "Modificar Configuración"
msgstr "Modificar Configuració"
-#: ../../../../ajax/ajax_configSave.php:101
+#: ../../../../ajax/ajax_configSave.php:105
+#, fuzzy
+msgid "Faltan parámetros de syslog remoto"
+msgstr "Falten paràmetres de Correu"
+
+#: ../../../../ajax/ajax_configSave.php:113
+#, fuzzy
+msgid "Syslog remoto deshabilitado"
+msgstr "Correu deshabilitat"
+
+#: ../../../../ajax/ajax_configSave.php:135
msgid "El tamaño máximo por archivo es de 16MB"
msgstr "La grandària màxima per arxiu és de 16MB"
-#: ../../../../ajax/ajax_configSave.php:109 ../../../../js/strings.js.php:46
+#: ../../../../ajax/ajax_configSave.php:142 ../../../../js/strings.js.php:46
msgid "Extensión no permitida"
msgstr "Extensió no permesa"
-#: ../../../../ajax/ajax_configSave.php:128
+#: ../../../../ajax/ajax_configSave.php:172
msgid "Faltan parámetros de Proxy"
msgstr "Falten paràmetres de Proxy"
-#: ../../../../ajax/ajax_configSave.php:136
+#: ../../../../ajax/ajax_configSave.php:180
msgid "Proxy habiltado"
msgstr "Proxy habilitat"
-#: ../../../../ajax/ajax_configSave.php:140
+#: ../../../../ajax/ajax_configSave.php:184
msgid "Proxy deshabilitado"
msgstr "Proxy deshabilitat"
-#: ../../../../ajax/ajax_configSave.php:143
-#: ../../../../ajax/ajax_configSave.php:167
-#: ../../../../ajax/ajax_configSave.php:201
-#: ../../../../ajax/ajax_configSave.php:240
+#: ../../../../ajax/ajax_configSave.php:187
+#: ../../../../ajax/ajax_configSave.php:237
+#: ../../../../ajax/ajax_configSave.php:271
+#: ../../../../ajax/ajax_configSave.php:310
msgid "Sección"
msgstr "Secció"
-#: ../../../../ajax/ajax_configSave.php:143
-#: ../../../../web/ConfigC.class.php:108
+#: ../../../../ajax/ajax_configSave.php:187
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:125
#: ../../../../inc/themes/classic/profiles.inc:61
-#: ../../../../inc/themes/material-blue/profiles.inc:72
+#: ../../../../inc/themes/material-blue/profiles.inc:79
msgid "General"
msgstr "General"
-#: ../../../../ajax/ajax_configSave.php:153
+#: ../../../../ajax/ajax_configSave.php:197
msgid "Faltan parámetros de Wiki"
msgstr "Falten paràmetres de Wiki"
-#: ../../../../ajax/ajax_configSave.php:160
+#: ../../../../ajax/ajax_configSave.php:204
msgid "Wiki habiltada"
msgstr "Wiki habiltada"
-#: ../../../../ajax/ajax_configSave.php:164
+#: ../../../../ajax/ajax_configSave.php:208
msgid "Wiki deshabilitada"
msgstr "Wiki deshabilitada"
-#: ../../../../ajax/ajax_configSave.php:167
-#: ../../../../web/ConfigC.class.php:244
+#: ../../../../ajax/ajax_configSave.php:221
+#, fuzzy
+msgid "Faltan parámetros de DokuWiki"
+msgstr "Falten paràmetres de Wiki"
+
+#: ../../../../ajax/ajax_configSave.php:230
+#, fuzzy
+msgid "DokuWiki habiltada"
+msgstr "Wiki habiltada"
+
+#: ../../../../ajax/ajax_configSave.php:234
+#, fuzzy
+msgid "DokuWiki deshabilitada"
+msgstr "Wiki deshabilitada"
+
+#: ../../../../ajax/ajax_configSave.php:237
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:270
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:88
#: ../../../../inc/themes/classic/wiki.inc:4
-#: ../../../../inc/themes/material-blue/wiki.inc:4
+#: ../../../../inc/themes/material-blue/wiki.inc:9
msgid "Wiki"
msgstr "Wiki"
-#: ../../../../ajax/ajax_configSave.php:182
+#: ../../../../ajax/ajax_configSave.php:252
msgid "Faltan parámetros de LDAP"
msgstr "Falten paràmetres de LDAP"
-#: ../../../../ajax/ajax_configSave.php:194
+#: ../../../../ajax/ajax_configSave.php:264
msgid "LDAP habiltado"
msgstr "LDAP habiltat"
-#: ../../../../ajax/ajax_configSave.php:198
+#: ../../../../ajax/ajax_configSave.php:268
msgid "LDAP deshabilitado"
msgstr "LDAP deshabilitat"
-#: ../../../../ajax/ajax_configSave.php:201
-#: ../../../../web/ConfigC.class.php:276
+#: ../../../../ajax/ajax_configSave.php:271
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:302
#: ../../../../inc/themes/classic/ldap.inc:4
-#: ../../../../inc/themes/material-blue/ldap.inc:4
+#: ../../../../inc/themes/material-blue/ldap.inc:6
msgid "LDAP"
msgstr "LDAP"
-#: ../../../../ajax/ajax_configSave.php:216
+#: ../../../../ajax/ajax_configSave.php:286
msgid "Faltan parámetros de Correo"
msgstr "Falten paràmetres de Correu"
-#: ../../../../ajax/ajax_configSave.php:231
+#: ../../../../ajax/ajax_configSave.php:301
msgid "Correo habiltado"
msgstr "Correu habiltat"
-#: ../../../../ajax/ajax_configSave.php:237
+#: ../../../../ajax/ajax_configSave.php:307
msgid "Correo deshabilitado"
msgstr "Correu deshabilitat"
-#: ../../../../ajax/ajax_configSave.php:240
-#: ../../../../web/ConfigC.class.php:306
+#: ../../../../ajax/ajax_configSave.php:310
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:332
#: ../../../../inc/themes/classic/mail.inc:4
-#: ../../../../inc/themes/material-blue/mail.inc:4
+#: ../../../../inc/themes/material-blue/mail.inc:6
msgid "Correo"
msgstr "Correu"
-#: ../../../../ajax/ajax_configSave.php:262
+#: ../../../../ajax/ajax_configSave.php:316
+#, fuzzy
+msgid "Error al guardar la configuración"
+msgstr "Error en obtenir la configuració"
+
+#: ../../../../ajax/ajax_configSave.php:334
msgid "Configuración actualizada"
msgstr "Configuració actualitzada"
-#: ../../../../ajax/ajax_configSave.php:271
-#: ../../../../ajax/ajax_configSave.php:317
-#: ../../../../ajax/ajax_viewpass.php:61
-#: ../../../../inc/Controller.class.php:169
+#: ../../../../ajax/ajax_configSave.php:343
+#: ../../../../ajax/ajax_configSave.php:389
+#: ../../../../ajax/ajax_configSave.php:394
+#: ../../../../ajax/ajax_viewpass.php:69
+#: ../../../../inc/SP/Controller/Controller.class.php:195
msgid "Clave maestra actualizada"
msgstr "Clau mestra actualitzada"
-#: ../../../../ajax/ajax_configSave.php:271
-#: ../../../../ajax/ajax_viewpass.php:61
-#: ../../../../inc/Controller.class.php:169
+#: ../../../../ajax/ajax_configSave.php:343
+#: ../../../../ajax/ajax_viewpass.php:69
+#: ../../../../inc/SP/Controller/Controller.class.php:195
msgid "Reinicie la sesión para cambiarla"
msgstr "Reiniciï la sessió per canviar-la"
-#: ../../../../ajax/ajax_configSave.php:273
+#: ../../../../ajax/ajax_configSave.php:345
msgid "Clave maestra no indicada"
msgstr "Clau mestra no indicada"
-#: ../../../../ajax/ajax_configSave.php:275
+#: ../../../../ajax/ajax_configSave.php:347
msgid "Se ha de confirmar el cambio de clave"
msgstr "S'ha de confirmar el canvi de clau"
-#: ../../../../ajax/ajax_configSave.php:279
+#: ../../../../ajax/ajax_configSave.php:351
msgid "Las claves son idénticas"
msgstr "Les claus són idèntiques"
-#: ../../../../ajax/ajax_configSave.php:281
+#: ../../../../ajax/ajax_configSave.php:353
msgid "Las claves maestras no coinciden"
msgstr "Les claus mestres no coincideixen"
-#: ../../../../ajax/ajax_configSave.php:283
+#: ../../../../ajax/ajax_configSave.php:355
msgid "La clave maestra actual no coincide"
msgstr "La clau mestra actual no coincideix"
-#: ../../../../ajax/ajax_configSave.php:292
+#: ../../../../ajax/ajax_configSave.php:364
msgid "Errores al actualizar las claves de las cuentas"
msgstr "Errors en actualitzar les claus dels comptes"
-#: ../../../../ajax/ajax_configSave.php:298
+#: ../../../../ajax/ajax_configSave.php:370
msgid "Errores al actualizar las claves de las cuentas del histórico"
msgstr "Errors en actualitzar les claus dels comptes de l'històric"
-#: ../../../../ajax/ajax_configSave.php:302
+#: ../../../../ajax/ajax_configSave.php:374
msgid "Errores al actualizar datos de campos personalizados"
msgstr "Errors en actualitzar dades de camps personalitzats"
-#: ../../../../ajax/ajax_configSave.php:315
-#: ../../../../inc/Account.class.php:512
+#: ../../../../ajax/ajax_configSave.php:386
+#: ../../../../inc/SP/Account/Account.class.php:499
msgid "Actualizar Clave Maestra"
msgstr "Actualitzar Clau Mestra"
-#: ../../../../ajax/ajax_configSave.php:319
+#: ../../../../ajax/ajax_configSave.php:397
+#: ../../../../ajax/ajax_configSave.php:402
msgid "Error al guardar el hash de la clave maestra"
msgstr "Error en guardar el hash de la clau mestra"
-#: ../../../../ajax/ajax_configSave.php:327
-msgid "Generar Clave Temporal"
-msgstr "Generar Clau Temporal"
+#: ../../../../ajax/ajax_configSave.php:412
+#: ../../../../ajax/ajax_configSave.php:418
+msgid "Clave Temporal Generada"
+msgstr "Clau Temporal Generada"
-#: ../../../../ajax/ajax_configSave.php:327
-#: ../../../../inc/CustomFieldsBase.class.php:87
-#: ../../../../inc/themes/classic/account.inc:86
-#: ../../../../inc/themes/classic/editpass.inc:25
+#: ../../../../ajax/ajax_configSave.php:413
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:89
+#: ../../../../inc/themes/classic/account-editpass.inc:25
+#: ../../../../inc/themes/classic/account.inc:93
+#: ../../../../inc/themes/classic/config-proxy.inc:45
#: ../../../../inc/themes/classic/encryption.inc:143
#: ../../../../inc/themes/classic/install.inc:38
#: ../../../../inc/themes/classic/install.inc:39
@@ -718,87 +851,104 @@ msgstr "Generar Clau Temporal"
#: ../../../../inc/themes/classic/users.inc:75
#: ../../../../inc/themes/classic/userspass.inc:8
#: ../../../../inc/themes/classic/userspass.inc:11
-#: ../../../../inc/themes/material-blue/account.inc:99
-#: ../../../../inc/themes/material-blue/account.inc:104
-#: ../../../../inc/themes/material-blue/config.inc:414
-#: ../../../../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/encryption.inc:161
+#: ../../../../inc/themes/classic/wiki.inc:188
+#: ../../../../inc/themes/material-blue/account-editpass.inc:28
+#: ../../../../inc/themes/material-blue/account-editpass.inc:33
+#: ../../../../inc/themes/material-blue/account-editpass.inc:43
+#: ../../../../inc/themes/material-blue/account-link.inc:47
+#: ../../../../inc/themes/material-blue/account.inc:113
+#: ../../../../inc/themes/material-blue/account.inc:119
+#: ../../../../inc/themes/material-blue/config-proxy.inc:63
+#: ../../../../inc/themes/material-blue/encryption.inc:163
#: ../../../../inc/themes/material-blue/install.inc:47
-#: ../../../../inc/themes/material-blue/ldap.inc:105
+#: ../../../../inc/themes/material-blue/ldap.inc:107
#: ../../../../inc/themes/material-blue/login.inc:18
#: ../../../../inc/themes/material-blue/login.inc:41
-#: ../../../../inc/themes/material-blue/mail.inc:73
-#: ../../../../inc/themes/material-blue/mail.inc:80
+#: ../../../../inc/themes/material-blue/mail.inc:75
+#: ../../../../inc/themes/material-blue/mail.inc:82
#: ../../../../inc/themes/material-blue/passreset.inc:30
-#: ../../../../inc/themes/material-blue/users.inc:89
-#: ../../../../inc/themes/material-blue/users.inc:96
+#: ../../../../inc/themes/material-blue/users.inc:90
+#: ../../../../inc/themes/material-blue/users.inc:97
#: ../../../../inc/themes/material-blue/userspass.inc:8
#: ../../../../inc/themes/material-blue/userspass.inc:13
+#: ../../../../inc/themes/material-blue/wiki.inc:216
+#: ../../../../inc/themes/material-blue/wiki.inc:223
msgid "Clave"
msgstr "Clau"
-#: ../../../../ajax/ajax_configSave.php:329
-msgid "Clave Temporal Generada"
-msgstr "Clau Temporal Generada"
-
-#: ../../../../ajax/ajax_configSave.php:331
+#: ../../../../ajax/ajax_configSave.php:421
+#: ../../../../ajax/ajax_configSave.php:426
msgid "Error al generar clave temporal"
msgstr "Error en generar clau temporal"
-#: ../../../../ajax/ajax_doLogin.php:49
+#: ../../../../ajax/ajax_doLogin.php:61
msgid "Usuario/Clave no introducidos"
msgstr "Usuari/Clau no introduïts"
-#: ../../../../ajax/ajax_doLogin.php:61
+#: ../../../../ajax/ajax_doLogin.php:73
msgid "Inicio sesión"
msgstr "Inici sessió"
-#: ../../../../ajax/ajax_doLogin.php:66
+#: ../../../../ajax/ajax_doLogin.php:78
msgid "Servidor Login"
msgstr "Servidor Login"
-#: ../../../../ajax/ajax_doLogin.php:72
+#: ../../../../ajax/ajax_doLogin.php:85
msgid "Error al guardar los datos de LDAP"
msgstr "Error en guardar les dades de LDAP"
-#: ../../../../ajax/ajax_doLogin.php:75 ../../../../ajax/ajax_doLogin.php:83
-#: ../../../../ajax/ajax_doLogin.php:135 ../../../../ajax/ajax_doLogin.php:179
-#: ../../../../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:188
-#: ../../../../inc/Crypt.class.php:199
-#: ../../../../inc/XmlImportBase.class.php:79
+#: ../../../../ajax/ajax_doLogin.php:88 ../../../../ajax/ajax_doLogin.php:97
+#: ../../../../ajax/ajax_doLogin.php:160 ../../../../ajax/ajax_doLogin.php:209
+#: ../../../../inc/SP/Api/ApiTokens.class.php:107
+#: ../../../../inc/SP/Api/ApiTokens.class.php:140
+#: ../../../../inc/SP/Api/ApiTokens.class.php:168
+#: ../../../../inc/SP/Api/ApiTokens.class.php:189
+#: ../../../../inc/SP/Api/ApiTokens.class.php:233
+#: ../../../../inc/SP/Api/ApiTokens.class.php:259
+#: ../../../../inc/SP/Api/ApiTokensUtil.class.php:180
+#: ../../../../inc/SP/Core/Crypt.class.php:195
+#: ../../../../inc/SP/Core/Crypt.class.php:206
+#: ../../../../inc/SP/Import/XmlImportBase.class.php:81
+#: ../../../../inc/SP/Mgmt/PublicLinkBase.class.php:272
+#: ../../../../inc/SP/Mgmt/PublicLinkBase.class.php:304
msgid "Error interno"
msgstr "Error intern"
-#: ../../../../ajax/ajax_doLogin.php:80
+#: ../../../../ajax/ajax_doLogin.php:94
msgid "Error al actualizar la clave del usuario en la BBDD"
msgstr "Error en actualitzar la clau de l'usuari en la BBDD"
-#: ../../../../ajax/ajax_doLogin.php:88 ../../../../ajax/ajax_doLogin.php:113
+#: ../../../../ajax/ajax_doLogin.php:102 ../../../../ajax/ajax_doLogin.php:127
+#: ../../../../ajax/ajax_doLogin.php:137
msgid "Login incorrecto"
msgstr "Login incorrecte"
-#: ../../../../ajax/ajax_doLogin.php:89 ../../../../ajax/ajax_doLogin.php:96
-#: ../../../../ajax/ajax_doLogin.php:103 ../../../../ajax/ajax_doLogin.php:114
-#: ../../../../ajax/ajax_doLogin.php:124 ../../../../ajax/ajax_doLogin.php:174
-#: ../../../../inc/ApiTokens.class.php:190
-#: ../../../../inc/ApiTokens.class.php:308 ../../../../inc/Auth.class.php:108
-#: ../../../../inc/Init.class.php:466 ../../../../inc/Ldap.class.php:295
-#: ../../../../inc/Ldap.class.php:308 ../../../../inc/Ldap.class.php:316
-#: ../../../../inc/UserBase.class.php:384
-#: ../../../../inc/UserBase.class.php:528 ../../../../res/test.php:64
-#: ../../../../web/SearchC.class.php:305
-#: ../../../../web/UsersMgmtC.class.php:393
-#: ../../../../inc/themes/classic/account.inc:73
-#: ../../../../inc/themes/classic/editpass.inc:21
-#: ../../../../inc/themes/classic/eventlog.inc:23
+#: ../../../../ajax/ajax_doLogin.php:103 ../../../../ajax/ajax_doLogin.php:110
+#: ../../../../ajax/ajax_doLogin.php:117 ../../../../ajax/ajax_doLogin.php:128
+#: ../../../../ajax/ajax_doLogin.php:138 ../../../../ajax/ajax_doLogin.php:148
+#: ../../../../ajax/ajax_doLogin.php:200
+#: ../../../../inc/SP/Api/ApiTokens.class.php:111
+#: ../../../../inc/SP/Api/ApiTokens.class.php:237
+#: ../../../../inc/SP/Auth/Auth.class.php:122
+#: ../../../../inc/SP/Auth/Ldap.class.php:318
+#: ../../../../inc/SP/Auth/Ldap.class.php:332
+#: ../../../../inc/SP/Auth/Ldap.class.php:341
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:520
+#: ../../../../inc/SP/Controller/Grids.class.php:752
+#: ../../../../inc/SP/Controller/Grids.class.php:827
+#: ../../../../inc/SP/Core/Init.class.php:463
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:156
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:200
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:234
+#: ../../../../inc/SP/Mgmt/User/UserBase.class.php:394
+#: ../../../../inc/SP/Mgmt/User/UserBase.class.php:544
+#: ../../../../res/test.php:64
+#: ../../../../inc/themes/classic/account-editpass.inc:21
+#: ../../../../inc/themes/classic/account-request.inc:17
+#: ../../../../inc/themes/classic/account.inc:80
+#: ../../../../inc/themes/classic/config-proxy.inc:36
+#: ../../../../inc/themes/classic/datasearch-rows.inc:45
+#: ../../../../inc/themes/classic/eventlog.inc:26
#: ../../../../inc/themes/classic/info.inc:39
#: ../../../../inc/themes/classic/install.inc:27
#: ../../../../inc/themes/classic/install.inc:28
@@ -806,1262 +956,1740 @@ msgstr "Login incorrecte"
#: ../../../../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:89
+#: ../../../../inc/themes/classic/search.inc:62
#: ../../../../inc/themes/classic/tokens.inc:8
-#: ../../../../inc/themes/material-blue/account.inc:84
-#: ../../../../inc/themes/material-blue/config.inc:400
-#: ../../../../inc/themes/material-blue/editpass.inc:22
-#: ../../../../inc/themes/material-blue/eventlog.inc:23
+#: ../../../../inc/themes/classic/wiki.inc:172
+#: ../../../../inc/themes/material-blue/account-editpass.inc:24
+#: ../../../../inc/themes/material-blue/account-link.inc:36
+#: ../../../../inc/themes/material-blue/account.inc:98
+#: ../../../../inc/themes/material-blue/config-proxy.inc:49
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:45
+#: ../../../../inc/themes/material-blue/eventlog.inc:28
#: ../../../../inc/themes/material-blue/info.inc:39
-#: ../../../../inc/themes/material-blue/ldap.inc:86
+#: ../../../../inc/themes/material-blue/ldap.inc:88
#: ../../../../inc/themes/material-blue/login.inc:11
#: ../../../../inc/themes/material-blue/login.inc:34
-#: ../../../../inc/themes/material-blue/mail.inc:61
-#: ../../../../inc/themes/material-blue/mail.inc:67
+#: ../../../../inc/themes/material-blue/mail.inc:63
+#: ../../../../inc/themes/material-blue/mail.inc:69
#: ../../../../inc/themes/material-blue/passreset.inc:16
-#: ../../../../inc/themes/material-blue/request.inc:20
-#: ../../../../inc/themes/material-blue/search.inc:91
+#: ../../../../inc/themes/material-blue/publiclinks.inc:18
+#: ../../../../inc/themes/material-blue/request.inc:22
#: ../../../../inc/themes/material-blue/tokens.inc:8
+#: ../../../../inc/themes/material-blue/wiki.inc:197
+#: ../../../../inc/themes/material-blue/wiki.inc:210
msgid "Usuario"
msgstr "Usuari"
-#: ../../../../ajax/ajax_doLogin.php:92 ../../../../ajax/ajax_doLogin.php:106
-#: ../../../../ajax/ajax_doLogin.php:117
+#: ../../../../ajax/ajax_doLogin.php:106 ../../../../ajax/ajax_doLogin.php:120
+#: ../../../../ajax/ajax_doLogin.php:131 ../../../../ajax/ajax_doLogin.php:142
msgid "Usuario/Clave incorrectos"
msgstr "Usuari/Clau incorrectes"
-#: ../../../../ajax/ajax_doLogin.php:95 ../../../../ajax/ajax_doLogin.php:99
+#: ../../../../ajax/ajax_doLogin.php:109 ../../../../ajax/ajax_doLogin.php:113
msgid "Cuenta expirada"
msgstr "Compte expirat"
-#: ../../../../ajax/ajax_doLogin.php:102
+#: ../../../../ajax/ajax_doLogin.php:116
msgid "El usuario no tiene grupos asociados"
msgstr "L'usuari no té grups associats"
-#: ../../../../ajax/ajax_doLogin.php:123 ../../../../ajax/ajax_doLogin.php:127
+#: ../../../../ajax/ajax_doLogin.php:139
+#: ../../../../inc/themes/material-blue/preferences-security.inc:6
+msgid "Autentificación"
+msgstr "Autenticació"
+
+#: ../../../../ajax/ajax_doLogin.php:147 ../../../../ajax/ajax_doLogin.php:151
msgid "Usuario deshabilitado"
msgstr "Usuari deshabilitat"
-#: ../../../../ajax/ajax_doLogin.php:132
+#: ../../../../ajax/ajax_doLogin.php:157
msgid "Error al obtener los datos del usuario de la BBDD"
msgstr "Error en obtenir les dades de l'usuari de la BBDD"
-#: ../../../../ajax/ajax_doLogin.php:142
+#: ../../../../ajax/ajax_doLogin.php:167
msgid "La clave maestra no ha sido guardada o es incorrecta"
msgstr "La clau mestra no ha estat guardada o és incorrecta"
-#: ../../../../ajax/ajax_doLogin.php:149 ../../../../ajax/ajax_doLogin.php:152
+#: ../../../../ajax/ajax_doLogin.php:175 ../../../../ajax/ajax_doLogin.php:178
msgid "Clave maestra incorrecta"
msgstr "Clau mestra incorrecta"
-#: ../../../../ajax/ajax_doLogin.php:175
-#: ../../../../inc/ProfileBase.class.php:512
-#: ../../../../inc/ProfileBase.class.php:550
-#: ../../../../inc/ProfileBase.class.php:593
-#: ../../../../web/UsersMgmtC.class.php:90
+#: ../../../../ajax/ajax_doLogin.php:201
+#: ../../../../inc/SP/Controller/Grids.class.php:503
+#: ../../../../inc/SP/Mgmt/User/ProfileBase.class.php:519
+#: ../../../../inc/SP/Mgmt/User/ProfileBase.class.php:563
+#: ../../../../inc/SP/Mgmt/User/ProfileBase.class.php:612
#: ../../../../inc/themes/classic/users.inc:37
-#: ../../../../inc/themes/material-blue/users.inc:43
+#: ../../../../inc/themes/material-blue/users.inc:44
msgid "Perfil"
msgstr "Perfil"
-#: ../../../../ajax/ajax_doLogin.php:176 ../../../../inc/Groups.class.php:158
-#: ../../../../inc/Groups.class.php:259 ../../../../inc/Groups.class.php:375
-#: ../../../../inc/Ldap.class.php:218 ../../../../inc/Ldap.class.php:231
-#: ../../../../inc/Ldap.class.php:241 ../../../../inc/Ldap.class.php:390
-#: ../../../../web/UsersMgmtC.class.php:91
+#: ../../../../ajax/ajax_doLogin.php:202
+#: ../../../../inc/SP/Auth/Ldap.class.php:225
+#: ../../../../inc/SP/Auth/Ldap.class.php:239
+#: ../../../../inc/SP/Auth/Ldap.class.php:250
+#: ../../../../inc/SP/Auth/Ldap.class.php:416
+#: ../../../../inc/SP/Controller/Grids.class.php:504
+#: ../../../../inc/SP/Mgmt/User/Groups.class.php:171
+#: ../../../../inc/SP/Mgmt/User/Groups.class.php:279
+#: ../../../../inc/SP/Mgmt/User/Groups.class.php:403
#: ../../../../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
+#: ../../../../inc/themes/material-blue/ldap.inc:141
+#: ../../../../inc/themes/material-blue/ldap.inc:166
+#: ../../../../inc/themes/material-blue/users.inc:58
msgid "Grupo"
msgstr "Grup"
-#: ../../../../ajax/ajax_files.php:46 ../../../../ajax/ajax_getFiles.php:40
+#: ../../../../ajax/ajax_doLogin.php:206
+#, fuzzy
+msgid "Error al obtener la clave maestra del usuario"
+msgstr "Error en actualitzar la clau mestra de l'usuari \"admin\""
+
+#: ../../../../ajax/ajax_files.php:56 ../../../../ajax/ajax_getFiles.php:44
msgid "Gestión de archivos deshabilitada"
msgstr "Gestió d'arxius deshabilitada"
-#: ../../../../ajax/ajax_files.php:60 ../../../../inc/Files.class.php:63
+#: ../../../../ajax/ajax_files.php:70
+#: ../../../../inc/SP/Mgmt/Files.class.php:71
msgid "Subir Archivo"
msgstr "Pujar Arxiu"
-#: ../../../../ajax/ajax_files.php:69
+#: ../../../../ajax/ajax_files.php:79
msgid "No hay extensiones permitidas"
msgstr "No hi ha extensions permeses"
-#: ../../../../ajax/ajax_files.php:80 ../../../../inc/FileImport.class.php:115
+#: ../../../../ajax/ajax_files.php:90
+#: ../../../../inc/SP/Import/FileImport.class.php:118
msgid "Tipo de archivo no soportado"
msgstr "Tipus d'arxiu no suportat"
-#: ../../../../ajax/ajax_files.php:86
+#: ../../../../ajax/ajax_files.php:91
+#, fuzzy
+msgid "Extensión"
+msgstr "Extensions"
+
+#: ../../../../ajax/ajax_files.php:97
msgid "Archivo inválido"
msgstr "Arxiu invàlid"
-#: ../../../../ajax/ajax_files.php:102 ../../../../ajax/ajax_files.php:119
-#: ../../../../inc/FileImport.class.php:131
-#: ../../../../inc/FileImport.class.php:149
-#: ../../../../inc/FileImport.class.php:167
-msgid "Error interno al leer el archivo"
-msgstr "Error intern en llegir l'arxiu"
-
-#: ../../../../ajax/ajax_files.php:109
-msgid "El archivo es mayor de "
-msgstr "L'arxiu és major de"
-
-#: ../../../../ajax/ajax_files.php:126
-msgid "Archivo guardado"
-msgstr "Arxiu guardat"
-
-#: ../../../../ajax/ajax_files.php:131
-msgid "No se pudo guardar el archivo"
-msgstr "No es va poder guardar l'arxiu"
-
-#: ../../../../ajax/ajax_files.php:141 ../../../../ajax/ajax_files.php:200
-msgid "No es un ID de archivo válido"
-msgstr "No és un ID d'arxiu vàlid"
-
-#: ../../../../ajax/ajax_files.php:149
-msgid "El archivo no existe"
-msgstr "L'arxiu no existeix"
-
-#: ../../../../ajax/ajax_files.php:158
-#: ../../../../inc/themes/classic/files.inc:19
-#: ../../../../inc/themes/material-blue/files.inc:19
-msgid "Descargar Archivo"
-msgstr "Descarregar Arxiu"
-
-#: ../../../../ajax/ajax_files.php:159 ../../../../ajax/ajax_viewpass.php:70
-#: ../../../../inc/Files.class.php:112
-#: ../../../../inc/themes/classic/eventlog.inc:14
-#: ../../../../inc/themes/material-blue/eventlog.inc:14
-msgid "ID"
-msgstr "ID"
-
-#: ../../../../ajax/ajax_files.php:160 ../../../../inc/Files.class.php:65
-#: ../../../../inc/Files.class.php:113
-#: ../../../../inc/themes/classic/import.inc:152
-#: ../../../../inc/themes/material-blue/import.inc:80
+#: ../../../../ajax/ajax_files.php:98 ../../../../ajax/ajax_files.php:167
+#: ../../../../inc/SP/Mgmt/Files.class.php:73
+#: ../../../../inc/SP/Mgmt/Files.class.php:133
+#: ../../../../inc/themes/classic/import.inc:70
+#: ../../../../inc/themes/material-blue/import.inc:82
msgid "Archivo"
msgstr "Arxiu"
-#: ../../../../ajax/ajax_files.php:161 ../../../../inc/Files.class.php:66
-#: ../../../../inc/Files.class.php:114
-#: ../../../../web/AccountsMgmtC.class.php:267
+#: ../../../../ajax/ajax_files.php:114 ../../../../ajax/ajax_files.php:132
+#: ../../../../inc/SP/Import/FileImport.class.php:134
+#: ../../../../inc/SP/Import/FileImport.class.php:152
+#: ../../../../inc/SP/Import/FileImport.class.php:170
+msgid "Error interno al leer el archivo"
+msgstr "Error intern en llegir l'arxiu"
+
+#: ../../../../ajax/ajax_files.php:121
+#, fuzzy
+msgid "Tamaño de archivo superado"
+msgstr "Tipus d'arxiu no suportat"
+
+#: ../../../../ajax/ajax_files.php:122 ../../../../ajax/ajax_files.php:169
+#: ../../../../inc/SP/Controller/Grids.class.php:356
+#: ../../../../inc/SP/Mgmt/Files.class.php:75
+#: ../../../../inc/SP/Mgmt/Files.class.php:135
+msgid "Tamaño"
+msgstr "Grandària"
+
+#: ../../../../ajax/ajax_files.php:139
+msgid "Archivo guardado"
+msgstr "Arxiu guardat"
+
+#: ../../../../ajax/ajax_files.php:141
+#: ../../../../inc/SP/Mgmt/Files.class.php:85
+msgid "No se pudo guardar el archivo"
+msgstr "No es va poder guardar l'arxiu"
+
+#: ../../../../ajax/ajax_files.php:155
+msgid "El archivo no existe"
+msgstr "L'arxiu no existeix"
+
+#: ../../../../ajax/ajax_files.php:164
+#: ../../../../inc/themes/material-blue/files.inc:21
+msgid "Descargar Archivo"
+msgstr "Descarregar Arxiu"
+
+#: ../../../../ajax/ajax_files.php:165 ../../../../ajax/ajax_viewpass.php:78
+#: ../../../../inc/SP/Api/ApiTokens.class.php:263
+#: ../../../../inc/SP/Mgmt/Files.class.php:131
+#: ../../../../inc/SP/Mgmt/PublicLinkBase.class.php:277
+#: ../../../../inc/themes/classic/eventlog.inc:14
+#: ../../../../inc/themes/material-blue/eventlog.inc:16
+msgid "ID"
+msgstr "ID"
+
+#: ../../../../ajax/ajax_files.php:166
+#: ../../../../ajax/ajax_sendRequest.php:74
+#: ../../../../ajax/ajax_viewpass.php:79
+#: ../../../../inc/SP/Account/Account.class.php:136
+#: ../../../../inc/SP/Account/Account.class.php:194
+#: ../../../../inc/SP/Account/Account.class.php:395
+#: ../../../../inc/SP/Account/Account.class.php:418
+#: ../../../../inc/SP/Account/Account.class.php:680
+#: ../../../../inc/SP/Controller/Grids.class.php:352
+#: ../../../../inc/SP/Controller/Grids.class.php:824
+#: ../../../../inc/SP/Mgmt/Files.class.php:72
+#: ../../../../inc/SP/Mgmt/Files.class.php:132
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:155
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:199
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:233
+#: ../../../../inc/themes/material-blue/publiclinks.inc:6
+msgid "Cuenta"
+msgstr "Compte"
+
+#: ../../../../ajax/ajax_files.php:168
+#: ../../../../inc/SP/Controller/Grids.class.php:293
+#: ../../../../inc/SP/Controller/Grids.class.php:355
+#: ../../../../inc/SP/Mgmt/Files.class.php:74
+#: ../../../../inc/SP/Mgmt/Files.class.php:134
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:154
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:198
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:232
#: ../../../../inc/themes/classic/customfields.inc:16
#: ../../../../inc/themes/material-blue/customfields.inc:19
msgid "Tipo"
msgstr "Tipus"
-#: ../../../../ajax/ajax_files.php:162 ../../../../inc/Files.class.php:67
-#: ../../../../inc/Files.class.php:115
-msgid "Tamaño"
-msgstr "Grandària"
-
-#: ../../../../ajax/ajax_files.php:204
-msgid "Archivo eliminado"
-msgstr "Arxiu eliminat"
-
-#: ../../../../ajax/ajax_files.php:209
-msgid "Error al eliminar el archivo"
-msgstr "Error en eliminar l'arxiu"
-
-#: ../../../../ajax/ajax_getContent.php:42
-#: ../../../../inc/ApiRequest.class.php:55
-#: ../../../../inc/CustomFieldDef.class.php:45
-#: ../../../../inc/CustomFields.class.php:54
+#: ../../../../ajax/ajax_getContent.php:51
+#: ../../../../inc/SP/Api/ApiRequest.class.php:126
+#: ../../../../inc/SP/Api/SyspassApi.class.php:63
+#: ../../../../inc/SP/Api/SyspassApi.class.php:91
+#: ../../../../inc/SP/Api/SyspassApi.class.php:116
+#: ../../../../inc/SP/Mgmt/CustomFieldDef.class.php:49
+#: ../../../../inc/SP/Mgmt/CustomFields.class.php:61
msgid "Parámetros incorrectos"
msgstr "Paràmetres incorrectes"
-#: ../../../../ajax/ajax_migrate.php:56
+#: ../../../../ajax/ajax_migrate.php:60
msgid "Confirmar la importación de cuentas"
msgstr "Confirmar la importació de comptes"
-#: ../../../../ajax/ajax_migrate.php:58
+#: ../../../../ajax/ajax_migrate.php:62
msgid "Es necesario un usuario de conexión"
msgstr "És necessari un usuari de connexió"
-#: ../../../../ajax/ajax_migrate.php:60
+#: ../../../../ajax/ajax_migrate.php:64
msgid "Es necesaria una clave de conexión"
msgstr "És necessària una clau de connexió"
-#: ../../../../ajax/ajax_migrate.php:62
+#: ../../../../ajax/ajax_migrate.php:66
msgid "Es necesario el nombre de la BBDD"
msgstr "És necessari el nom de la BBDD"
-#: ../../../../ajax/ajax_migrate.php:64
+#: ../../../../ajax/ajax_migrate.php:68
msgid "Es necesario un nombre de host"
msgstr "És necessari un nom de host"
-#: ../../../../ajax/ajax_passReset.php:50
-#: ../../../../ajax/ajax_passReset.php:53
+#: ../../../../ajax/ajax_passReset.php:56
+#: ../../../../ajax/ajax_passReset.php:59
msgid "Recuperación de Clave"
msgstr "Recuperació de Clau"
-#: ../../../../ajax/ajax_passReset.php:56
#: ../../../../ajax/ajax_passReset.php:61
msgid "Solicitado para"
msgstr "Sol·licitat per"
-#: ../../../../ajax/ajax_passReset.php:58
-#: ../../../../ajax/ajax_sendRequest.php:76
+#: ../../../../ajax/ajax_passReset.php:64
+#: ../../../../ajax/ajax_passReset.php:67
+#: ../../../../ajax/ajax_sendRequest.php:86
msgid "Solicitud enviada"
msgstr "Sol·licitud enviada"
-#: ../../../../ajax/ajax_passReset.php:58
+#: ../../../../ajax/ajax_passReset.php:67
msgid "En breve recibirá un correo para completar la solicitud."
msgstr "En breu rebrà un correu per completar la sol·licitud."
-#: ../../../../ajax/ajax_passReset.php:63
+#: ../../../../ajax/ajax_passReset.php:70
+#, fuzzy
+msgid "Solicitud no enviada"
+msgstr "Sol·licitud enviada"
+
+#: ../../../../ajax/ajax_passReset.php:75
msgid "No se ha podido realizar la solicitud. Consulte con el administrador."
msgstr "No s'ha pogut realitzar la sol·licitud. Consulti amb l'administrador."
-#: ../../../../ajax/ajax_passReset.php:73
-#: ../../../../inc/UserBase.class.php:570
-#: ../../../../inc/UserPass.class.php:127
+#: ../../../../ajax/ajax_passReset.php:79
+#: ../../../../inc/SP/Mgmt/User/UserBase.class.php:588
+#: ../../../../inc/SP/Mgmt/User/UserPass.class.php:140
msgid "Modificar Clave Usuario"
msgstr "Modificar Clau Usuari"
-#: ../../../../ajax/ajax_passReset.php:73
-#: ../../../../inc/UserBase.class.php:570
-#: ../../../../inc/UserBase.class.php:594
-#: ../../../../inc/UserPass.class.php:127
-#: ../../../../web/UsersMgmtC.class.php:89
+#: ../../../../ajax/ajax_passReset.php:86
+#: ../../../../inc/SP/Controller/Grids.class.php:502
+#: ../../../../inc/SP/Mgmt/User/UserBase.class.php:589
+#: ../../../../inc/SP/Mgmt/User/UserBase.class.php:619
+#: ../../../../inc/SP/Mgmt/User/UserMigrate.class.php:99
+#: ../../../../inc/SP/Mgmt/User/UserPass.class.php:141
#: ../../../../inc/themes/classic/users.inc:21
-#: ../../../../inc/themes/material-blue/users.inc:24
+#: ../../../../inc/themes/material-blue/users.inc:25
msgid "Login"
msgstr "Login"
-#: ../../../../ajax/ajax_passReset.php:81
+#: ../../../../ajax/ajax_passReset.php:98
msgid "La clave es incorrecta o no coincide"
msgstr "La clau és incorrecta o no coincideix"
-#: ../../../../ajax/ajax_sendRequest.php:49
+#: ../../../../ajax/ajax_sendRequest.php:59
msgid "Es necesaria una descripción"
msgstr "És necessària una descripció"
-#: ../../../../ajax/ajax_sendRequest.php:62
+#: ../../../../ajax/ajax_sendRequest.php:72
msgid "Solicitud de Modificación de Cuenta"
msgstr "Sol·licitud de Modificació de Compte"
-#: ../../../../ajax/ajax_sendRequest.php:63
+#: ../../../../ajax/ajax_sendRequest.php:73
msgid "Solicitante"
msgstr "Sol·licitant"
-#: ../../../../ajax/ajax_sendRequest.php:64
-#: ../../../../ajax/ajax_viewpass.php:71 ../../../../inc/Account.class.php:181
-#: ../../../../inc/Account.class.php:236 ../../../../inc/Account.class.php:417
-#: ../../../../inc/Account.class.php:440 ../../../../inc/Account.class.php:684
-#: ../../../../inc/Files.class.php:64
-msgid "Cuenta"
-msgstr "Compte"
-
-#: ../../../../ajax/ajax_sendRequest.php:65
-#: ../../../../inc/Account.class.php:180 ../../../../inc/Account.class.php:235
-#: ../../../../inc/Account.class.php:416 ../../../../inc/Account.class.php:439
-#: ../../../../inc/Account.class.php:683 ../../../../inc/Customer.class.php:65
-#: ../../../../inc/Customer.class.php:115
-#: ../../../../inc/Customer.class.php:163
-#: ../../../../web/SearchC.class.php:287
-#: ../../../../inc/themes/classic/account.inc:23
-#: ../../../../inc/themes/classic/editpass.inc:12
-#: ../../../../inc/themes/classic/request.inc:9
-#: ../../../../inc/themes/classic/search.inc:58
-#: ../../../../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:60
+#: ../../../../ajax/ajax_sendRequest.php:75
+#: ../../../../inc/SP/Account/Account.class.php:135
+#: ../../../../inc/SP/Account/Account.class.php:193
+#: ../../../../inc/SP/Account/Account.class.php:394
+#: ../../../../inc/SP/Account/Account.class.php:417
+#: ../../../../inc/SP/Account/Account.class.php:679
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:499
+#: ../../../../inc/SP/Controller/Grids.class.php:353
+#: ../../../../inc/SP/Controller/Grids.class.php:408
+#: ../../../../inc/SP/Mgmt/Customer.class.php:81
+#: ../../../../inc/SP/Mgmt/Customer.class.php:179
+#: ../../../../inc/SP/Mgmt/Customer.class.php:343
+#: ../../../../inc/themes/classic/account-editpass.inc:12
+#: ../../../../inc/themes/classic/account-request.inc:9
+#: ../../../../inc/themes/classic/account.inc:29
+#: ../../../../inc/themes/classic/datasearch-rows.inc:14
+#: ../../../../inc/themes/classic/search.inc:31
+#: ../../../../inc/themes/material-blue/account-editpass.inc:15
+#: ../../../../inc/themes/material-blue/account-link.inc:18
+#: ../../../../inc/themes/material-blue/account.inc:41
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:14
+#: ../../../../inc/themes/material-blue/request.inc:12
msgid "Cliente"
msgstr "Client"
-#: ../../../../ajax/ajax_sendRequest.php:66
-#: ../../../../web/AccountsMgmtC.class.php:80
-#: ../../../../web/AccountsMgmtC.class.php:139
-#: ../../../../web/UsersMgmtC.class.php:188
+#: ../../../../ajax/ajax_sendRequest.php:76
+#: ../../../../inc/SP/Controller/Grids.class.php:125
+#: ../../../../inc/SP/Controller/Grids.class.php:219
+#: ../../../../inc/SP/Controller/Grids.class.php:586
#: ../../../../inc/themes/classic/categories.inc:16
-#: ../../../../inc/themes/classic/customers.inc:16
-#: ../../../../inc/themes/classic/eventlog.inc:29
+#: ../../../../inc/themes/classic/customers.inc:17
+#: ../../../../inc/themes/classic/eventlog.inc:32
#: ../../../../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:29
-#: ../../../../inc/themes/material-blue/groups.inc:20
+#: ../../../../inc/themes/material-blue/categories.inc:21
+#: ../../../../inc/themes/material-blue/customers.inc:22
+#: ../../../../inc/themes/material-blue/eventlog.inc:34
+#: ../../../../inc/themes/material-blue/groups.inc:23
msgid "Descripción"
msgstr "Descripció"
-#: ../../../../ajax/ajax_sendRequest.php:79
+#: ../../../../ajax/ajax_sendRequest.php:89
msgid "Error al enviar la solicitud"
msgstr "Error en enviar la sol·licitud"
-#: ../../../../ajax/ajax_userPrefsSave.php:75
-#: ../../../../ajax/ajax_userPrefsSave.php:108
+#: ../../../../ajax/ajax_userPrefsSave.php:84
+#: ../../../../ajax/ajax_userPrefsSave.php:118
msgid "Error al actualizar preferencias"
msgstr "Error en actualitzar preferències"
-#: ../../../../ajax/ajax_userPrefsSave.php:85
-#: ../../../../ajax/ajax_userPrefsSave.php:111
+#: ../../../../ajax/ajax_userPrefsSave.php:95
+#: ../../../../ajax/ajax_userPrefsSave.php:121
msgid "Preferencias actualizadas"
msgstr "Preferències actualitzades"
-#: ../../../../ajax/ajax_viewpass.php:55
+#: ../../../../ajax/ajax_viewpass.php:62
msgid "La clave maestra no coincide"
msgstr "La clau mestra no coincideix"
-#: ../../../../ajax/ajax_viewpass.php:59
-#: ../../../../inc/Controller.class.php:166
+#: ../../../../ajax/ajax_viewpass.php:67
+#: ../../../../inc/SP/Controller/Controller.class.php:192
msgid "No tiene permisos para acceder a esta cuenta"
msgstr "No té permisos per accedir a aquest compte"
-#: ../../../../ajax/ajax_viewpass.php:69 ../../../../inc/Acl.class.php:133
-#: ../../../../inc/themes/classic/account.inc:389
+#: ../../../../ajax/ajax_viewpass.php:77
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:360
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:361
+#: ../../../../inc/SP/Core/Acl.class.php:141
+#: ../../../../inc/themes/classic/inc/Icons.class.php:49
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:47
+#: ../../../../inc/themes/classic/account-actions.inc:22
#: ../../../../inc/themes/classic/profiles.inc:23
-#: ../../../../inc/themes/classic/search.inc:139
-#: ../../../../inc/themes/material-blue/account.inc:433
-#: ../../../../inc/themes/material-blue/profiles.inc:35
-#: ../../../../inc/themes/material-blue/search.inc:149
+#: ../../../../inc/themes/classic/search.inc:114
+#: ../../../../inc/themes/material-blue/account-actions.inc:28
+#: ../../../../inc/themes/material-blue/profiles.inc:37
msgid "Ver Clave"
msgstr "Veure Clau"
-#: ../../../../ajax/ajax_viewpass.php:80 ../../../../js/strings.js.php:73
+#: ../../../../ajax/ajax_viewpass.php:88 ../../../../js/strings.js.php:73
msgid "Clave de Cuenta"
msgstr "Clau de Compte"
-#: ../../../../api.php:56
-msgid "Ayuda Parámetros"
-msgstr "Ajuda Paràmetres"
-
-#: ../../../../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:33 ../../../../inc/Backup.class.php:28
-#: ../../../../inc/Base.php:26 ../../../../inc/Cache.class.php:28
-#: ../../../../inc/Category.class.php:29 ../../../../inc/Config.class.php:28
-#: ../../../../inc/ConfigDB.class.php:28
-#: ../../../../inc/ConfigInterface.class.php:28
-#: ../../../../inc/Controller.class.php:31 ../../../../inc/Crypt.class.php:28
-#: ../../../../inc/CryptMasterPass.class.php:28
-#: ../../../../inc/CryptPKI.class.php:28
-#: ../../../../inc/CsvImport.class.php:28
-#: ../../../../inc/CsvImportBase.class.php:28
-#: ../../../../inc/CustomFieldDef.class.php:28
-#: ../../../../inc/CustomFields.class.php:28
-#: ../../../../inc/CustomFieldsBase.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/Language.class.php:28 ../../../../inc/Ldap.class.php:29
-#: ../../../../inc/LdapADS.class.php:28 ../../../../inc/Log.class.php:28
-#: ../../../../inc/Migrate.class.php:28 ../../../../inc/Minify.class.php:30
-#: ../../../../inc/Profile.class.php:29
-#: ../../../../inc/ProfileBase.class.php:28
-#: ../../../../inc/Request.class.php:46 ../../../../inc/Response.class.php:28
-#: ../../../../inc/SPException.class.php:28
-#: ../../../../inc/Session.class.php:28
-#: ../../../../inc/SessionUtil.class.php:28
-#: ../../../../inc/SyspassImport.class.php:28
-#: ../../../../inc/Template.class.php:27 ../../../../inc/Themes.class.php:28
-#: ../../../../inc/Upgrade.class.php:29 ../../../../inc/User.class.php:28
-#: ../../../../inc/UserAccounts.class.php:28
-#: ../../../../inc/UserBase.class.php:28 ../../../../inc/UserLdap.class.php:28
-#: ../../../../inc/UserMigrate.class.php:28
-#: ../../../../inc/UserPass.class.php:28
-#: ../../../../inc/UserPassRecover.class.php:28
-#: ../../../../inc/UserPreferences.class.php:28
-#: ../../../../inc/UserUtil.class.php:28 ../../../../inc/Util.class.php:28
-#: ../../../../inc/XmlExport.class.php:28
-#: ../../../../inc/XmlImport.class.php:28
-#: ../../../../inc/XmlImportBase.class.php:28
-#: ../../../../web/AccountC.class.php:41
-#: ../../../../web/AccountsMgmtC.class.php:33
-#: ../../../../web/ConfigC.class.php:35 ../../../../web/EventlogC.class.php:30
-#: ../../../../web/SearchC.class.php:33
-#: ../../../../web/UsersMgmtC.class.php:40
-#: ../../../../web/UsersPrefsC.class.php:35
+#: ../../../../inc/Base.php:28 ../../../../inc/SP/Account/Account.class.php:40
+#: ../../../../inc/SP/Account/AccountBase.class.php:30
+#: ../../../../inc/SP/Account/AccountHistory.class.php:37
+#: ../../../../inc/SP/Account/AccountInterface.class.php:28
+#: ../../../../inc/SP/Account/AccountSearch.class.php:36
+#: ../../../../inc/SP/Account/AccountUtil.class.php:32
+#: ../../../../inc/SP/Account/UserAccounts.class.php:31
+#: ../../../../inc/SP/Api/ApiBase.class.php:28
+#: ../../../../inc/SP/Api/ApiRequest.class.php:32
+#: ../../../../inc/SP/Api/ApiTokens.class.php:28
+#: ../../../../inc/SP/Api/ApiTokensUtil.class.php:34
+#: ../../../../inc/SP/Api/SyspassApi.class.php:34
+#: ../../../../inc/SP/Auth/Auth.class.php:43
+#: ../../../../inc/SP/Auth/Auth2FA.class.php:34
+#: ../../../../inc/SP/Auth/Ldap.class.php:32
+#: ../../../../inc/SP/Auth/LdapADS.class.php:31
+#: ../../../../inc/SP/Config/Cache.class.php:28
+#: ../../../../inc/SP/Config/Config.class.php:31
+#: ../../../../inc/SP/Config/ConfigDB.class.php:33
+#: ../../../../inc/SP/Config/ConfigInterface.class.php:28
+#: ../../../../inc/SP/Controller/AccItemMgmt.class.php:28
+#: ../../../../inc/SP/Controller/AccItemsMgmt.class.php:28
+#: ../../../../inc/SP/Controller/AccItemsMgmtSearch.class.php:28
+#: ../../../../inc/SP/Controller/Account.class.php:28
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:28
+#: ../../../../inc/SP/Controller/AccountsSearchData.class.php:28
+#: ../../../../inc/SP/Controller/AppItemMgmt.class.php:28
+#: ../../../../inc/SP/Controller/AppItemsMgmt.class.php:28
+#: ../../../../inc/SP/Controller/AppItemsMgmtSearch.class.php:28
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:28
+#: ../../../../inc/SP/Controller/Controller.class.php:28
+#: ../../../../inc/SP/Controller/Eventlog.class.php:28
+#: ../../../../inc/SP/Controller/GridItemsSearch.class.php:11
+#: ../../../../inc/SP/Controller/GridTabController.class.php:28
+#: ../../../../inc/SP/Controller/Grids.class.php:28
+#: ../../../../inc/SP/Controller/Main.class.php:28
+#: ../../../../inc/SP/Controller/UsersPrefs.class.php:28
+#: ../../../../inc/SP/Controller/Wiki.class.php:28
+#: ../../../../inc/SP/Core/Acl.class.php:33
+#: ../../../../inc/SP/Core/Backup.class.php:37
+#: ../../../../inc/SP/Core/Crypt.class.php:35
+#: ../../../../inc/SP/Core/CryptMasterPass.class.php:31
+#: ../../../../inc/SP/Core/CryptPKI.class.php:28
+#: ../../../../inc/SP/Core/Init.class.php:40
+#: ../../../../inc/SP/Core/Installer.class.php:38
+#: ../../../../inc/SP/Core/Language.class.php:31
+#: ../../../../inc/SP/Core/SPException.class.php:30
+#: ../../../../inc/SP/Core/Session.class.php:33
+#: ../../../../inc/SP/Core/SessionUtil.class.php:32
+#: ../../../../inc/SP/Core/Template.class.php:28
+#: ../../../../inc/SP/Core/ThemeIconsBase.class.php:31
+#: ../../../../inc/SP/Core/ThemeIconsInterface.class.php:28
+#: ../../../../inc/SP/Core/Themes.class.php:32
+#: ../../../../inc/SP/Core/Upgrade.class.php:37
+#: ../../../../inc/SP/Core/XmlExport.class.php:36
+#: ../../../../inc/SP/Html/Assets/FontIcon.class.php:28
+#: ../../../../inc/SP/Html/Assets/IconBase.class.php:28
+#: ../../../../inc/SP/Html/Assets/IconInterface.class.php:28
+#: ../../../../inc/SP/Html/Assets/ImageIcon.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGrid.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGridAction.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGridActionBase.class.php:30
+#: ../../../../inc/SP/Html/DataGrid/DataGridActionInterface.class.php:30
+#: ../../../../inc/SP/Html/DataGrid/DataGridActionSearch.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGridActionType.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGridBase.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGridData.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGridDataBase.class.php:30
+#: ../../../../inc/SP/Html/DataGrid/DataGridDataInterface.class.php:30
+#: ../../../../inc/SP/Html/DataGrid/DataGridHeader.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGridHeaderBase.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGridHeaderInterface.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGridHeaderSort.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGridInterface.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGridPager.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGridPagerBase.class.php:30
+#: ../../../../inc/SP/Html/DataGrid/DataGridPagerInterface.class.php:30
+#: ../../../../inc/SP/Html/DataGrid/DataGridSort.class.php:30
+#: ../../../../inc/SP/Html/DataGrid/DataGridSortInterface.class.php:30
+#: ../../../../inc/SP/Html/DataGrid/DataGridTab.class.php:28
+#: ../../../../inc/SP/Html/Html.class.php:28
+#: ../../../../inc/SP/Html/Minify.class.php:33
+#: ../../../../inc/SP/Http/Request.class.php:50
+#: ../../../../inc/SP/Http/Response.class.php:28
+#: ../../../../inc/SP/Import/CsvImport.class.php:30
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:34
+#: ../../../../inc/SP/Import/FileImport.class.php:31
+#: ../../../../inc/SP/Import/Import.class.php:33
+#: ../../../../inc/SP/Import/ImportBase.class.php:34
+#: ../../../../inc/SP/Import/KeepassImport.class.php:30
+#: ../../../../inc/SP/Import/KeepassXImport.class.php:31
+#: ../../../../inc/SP/Import/Migrate.class.php:37
+#: ../../../../inc/SP/Import/SyspassImport.class.php:31
+#: ../../../../inc/SP/Import/XmlImport.class.php:31
+#: ../../../../inc/SP/Import/XmlImportBase.class.php:30
+#: ../../../../inc/SP/Log/Log.class.php:35
+#: ../../../../inc/SP/Mgmt/Category.class.php:36
+#: ../../../../inc/SP/Mgmt/CustomFieldDef.class.php:32
+#: ../../../../inc/SP/Mgmt/CustomFields.class.php:35
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:28
+#: ../../../../inc/SP/Mgmt/Customer.class.php:37
+#: ../../../../inc/SP/Mgmt/Files.class.php:36
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:40
+#: ../../../../inc/SP/Mgmt/PublicLinkBase.class.php:38
+#: ../../../../inc/SP/Mgmt/PublicLinkUtil.class.php:34
+#: ../../../../inc/SP/Mgmt/User/Groups.class.php:35
+#: ../../../../inc/SP/Mgmt/User/Profile.class.php:34
+#: ../../../../inc/SP/Mgmt/User/ProfileBase.class.php:37
+#: ../../../../inc/SP/Mgmt/User/ProfileUtil.class.php:34
+#: ../../../../inc/SP/Mgmt/User/User.class.php:34
+#: ../../../../inc/SP/Mgmt/User/UserBase.class.php:36
+#: ../../../../inc/SP/Mgmt/User/UserLdap.class.php:34
+#: ../../../../inc/SP/Mgmt/User/UserMigrate.class.php:33
+#: ../../../../inc/SP/Mgmt/User/UserPass.class.php:37
+#: ../../../../inc/SP/Mgmt/User/UserPassRecover.class.php:31
+#: ../../../../inc/SP/Mgmt/User/UserPreferences.class.php:33
+#: ../../../../inc/SP/Mgmt/User/UserUtil.class.php:32
+#: ../../../../inc/SP/Storage/DB.class.php:33
+#: ../../../../inc/SP/Storage/DBConnectionFactory.class.php:33
+#: ../../../../inc/SP/Util/ImageUtil.class.php:30
+#: ../../../../inc/SP/Util/Util.class.php:35
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApi.class.php:34
+#: ../../../../inc/themes/classic/inc/Icons.class.php:28
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:28
msgid "No es posible acceder directamente a este archivo"
msgstr "No és possible accedir directament a aquest arxiu"
-#: ../../../../inc/Account.class.php:112 ../../../../inc/Account.class.php:201
-#: ../../../../inc/Account.class.php:653
+#: ../../../../inc/SP/Account/Account.class.php:63
+#: ../../../../inc/SP/Account/Account.class.php:157
+#: ../../../../inc/SP/Account/Account.class.php:647
msgid "Error al actualizar el historial"
msgstr "Error en actualitzar l'historial"
-#: ../../../../inc/Account.class.php:117
+#: ../../../../inc/SP/Account/Account.class.php:68
msgid "Actualizar Cuenta"
msgstr "Actualitzar Compte"
-#: ../../../../inc/Account.class.php:120 ../../../../inc/Account.class.php:398
+#: ../../../../inc/SP/Account/Account.class.php:71
+#: ../../../../inc/SP/Account/Account.class.php:376
msgid "Error al actualizar los grupos secundarios"
msgstr "Error en actualitzar els grups secundaris"
-#: ../../../../inc/Account.class.php:126 ../../../../inc/Account.class.php:406
+#: ../../../../inc/SP/Account/Account.class.php:77
+#: ../../../../inc/SP/Account/Account.class.php:384
msgid "Error al actualizar los usuarios de la cuenta"
msgstr "Error en actualitzar els usuaris del compte"
-#: ../../../../inc/Account.class.php:234
+#: ../../../../inc/SP/Account/Account.class.php:192
msgid "Restaurar Cuenta"
msgstr "Restaurar Compte"
-#: ../../../../inc/Account.class.php:341
-#: ../../../../inc/AccountHistory.class.php:348
-#: ../../../../inc/AccountHistory.class.php:508
+#: ../../../../inc/SP/Account/Account.class.php:304
+#: ../../../../inc/SP/Account/AccountHistory.class.php:371
+#: ../../../../inc/SP/Account/AccountHistory.class.php:539
msgid "No se pudieron obtener los datos de la cuenta"
msgstr "No es van poder obtenir les dades del compte"
-#: ../../../../inc/Account.class.php:415 ../../../../inc/Acl.class.php:129
-#: ../../../../web/AccountC.class.php:150 ../../../../web/MainC.class.php:183
+#: ../../../../inc/SP/Account/Account.class.php:393
+#: ../../../../inc/SP/Controller/Account.class.php:125
+#: ../../../../inc/SP/Controller/Main.class.php:194
+#: ../../../../inc/SP/Core/Acl.class.php:137
msgid "Nueva Cuenta"
msgstr "Nou Compte"
-#: ../../../../inc/Account.class.php:433
+#: ../../../../inc/SP/Account/Account.class.php:411
msgid "ERROR: Error en la operación."
msgstr "ERROR: Error en l'operació."
-#: ../../../../inc/Account.class.php:438 ../../../../inc/Acl.class.php:134
-#: ../../../../web/AccountC.class.php:358
-#: ../../../../inc/themes/classic/account.inc:376
-#: ../../../../inc/themes/classic/search.inc:167
-#: ../../../../inc/themes/material-blue/account.inc:427
-#: ../../../../inc/themes/material-blue/search.inc:178
+#: ../../../../inc/SP/Account/Account.class.php:416
+#: ../../../../inc/SP/Controller/Account.class.php:386
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:428
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:429
+#: ../../../../inc/SP/Controller/Grids.class.php:398
+#: ../../../../inc/SP/Controller/Grids.class.php:399
+#: ../../../../inc/SP/Core/Acl.class.php:142
+#: ../../../../inc/themes/classic/account-actions.inc:8
+#: ../../../../inc/themes/classic/search.inc:144
+#: ../../../../inc/themes/material-blue/account-actions.inc:10
msgid "Eliminar Cuenta"
msgstr "Eliminar Compte"
-#: ../../../../inc/Account.class.php:451
+#: ../../../../inc/SP/Account/Account.class.php:432
msgid "Error al eliminar grupos asociados a la cuenta"
msgstr "Error en eliminar grups associats al compte"
-#: ../../../../inc/Account.class.php:455
+#: ../../../../inc/SP/Account/Account.class.php:437
msgid "Error al eliminar usuarios asociados a la cuenta"
msgstr "Error en eliminar usuaris associats al compte"
-#: ../../../../inc/Account.class.php:459
+#: ../../../../inc/SP/Account/Account.class.php:442
msgid "Error al eliminar archivos asociados a la cuenta"
msgstr "Error en eliminar arxius associats al compte"
-#: ../../../../inc/Account.class.php:513
-#: ../../../../inc/AccountHistory.class.php:129
-#: ../../../../inc/XmlImport.class.php:62
+#: ../../../../inc/SP/Account/Account.class.php:500
+#: ../../../../inc/SP/Account/AccountHistory.class.php:140
+#: ../../../../inc/SP/Import/XmlImport.class.php:65
msgid "Inicio"
msgstr "Inici"
-#: ../../../../inc/Account.class.php:518
-#: ../../../../inc/AccountHistory.class.php:135
+#: ../../../../inc/SP/Account/Account.class.php:506
+#: ../../../../inc/SP/Account/AccountHistory.class.php:147
msgid "Error en el módulo de encriptación"
msgstr "Error en el mòdul d'encriptació"
-#: ../../../../inc/Account.class.php:526
-#: ../../../../inc/AccountHistory.class.php:143
+#: ../../../../inc/SP/Account/Account.class.php:515
+#: ../../../../inc/SP/Account/AccountHistory.class.php:156
msgid "Error al obtener las claves de las cuentas"
msgstr "Error en obtenir les claus dels comptes"
-#: ../../../../inc/Account.class.php:542
-#: ../../../../inc/AccountHistory.class.php:165
+#: ../../../../inc/SP/Account/Account.class.php:531
+#: ../../../../inc/SP/Account/AccountHistory.class.php:177
msgid "Clave de cuenta vacía"
msgstr "Clau de compte buit"
-#: ../../../../inc/Account.class.php:547
-#: ../../../../inc/AccountHistory.class.php:170
+#: ../../../../inc/SP/Account/Account.class.php:536
+#: ../../../../inc/SP/Account/AccountHistory.class.php:182
msgid "IV de encriptación incorrecto"
msgstr "IV d'encriptació incorrecte"
-#: ../../../../inc/Account.class.php:556
-#: ../../../../inc/AccountHistory.class.php:179
+#: ../../../../inc/SP/Account/Account.class.php:545
+#: ../../../../inc/SP/Account/AccountHistory.class.php:191
msgid "No es posible desencriptar la clave de la cuenta"
msgstr "No és possible desencriptar la clau del compte"
-#: ../../../../inc/Account.class.php:562
+#: ../../../../inc/SP/Account/Account.class.php:551
msgid "Fallo al actualizar la clave de la cuenta"
msgstr "Fallada en actualitzar la clau del compte"
-#: ../../../../inc/Account.class.php:576
+#: ../../../../inc/SP/Account/Account.class.php:565
msgid "Cuentas actualizadas"
msgstr "Comptes actualitzats"
-#: ../../../../inc/Account.class.php:581
-#: ../../../../inc/AccountHistory.class.php:204
-#: ../../../../inc/CustomFields.class.php:285
-#: ../../../../inc/CustomFields.class.php:327
+#: ../../../../inc/SP/Account/Account.class.php:570
+#: ../../../../inc/SP/Account/AccountHistory.class.php:216
+#: ../../../../inc/SP/Mgmt/CustomFields.class.php:325
+#: ../../../../inc/SP/Mgmt/CustomFields.class.php:369
msgid "Fin"
msgstr "Fi"
-#: ../../../../inc/Account.class.php:682
+#: ../../../../inc/SP/Account/Account.class.php:678
msgid "Modificar Clave"
msgstr "Modificar Clau"
-#: ../../../../inc/Account.class.php:717
-msgid "No se pudieron obtener los datos de las cuentas"
-msgstr "No ha estat possible obtenir les dades dels comptes"
-
-#: ../../../../inc/AccountHistory.class.php:128
+#: ../../../../inc/SP/Account/AccountHistory.class.php:139
msgid "Actualizar Clave Maestra (H)"
msgstr "Actualitzar Clau Mestra (H)"
-#: ../../../../inc/AccountHistory.class.php:160
+#: ../../../../inc/SP/Account/AccountHistory.class.php:172
msgid "La clave maestra del registro no coincide"
msgstr "La clau mestra del registre no coincideix"
-#: ../../../../inc/AccountHistory.class.php:185
+#: ../../../../inc/SP/Account/AccountHistory.class.php:197
msgid "Fallo al actualizar la clave del histórico"
msgstr "Fallada en actualitzar la clau de l'històric"
-#: ../../../../inc/AccountHistory.class.php:199
-#: ../../../../inc/CustomFields.class.php:323
+#: ../../../../inc/SP/Account/AccountHistory.class.php:211
+#: ../../../../inc/SP/Mgmt/CustomFields.class.php:365
msgid "Registros actualizados"
msgstr "Registres actualitzats"
-#: ../../../../inc/Acl.class.php:112
-msgid "Denegado acceso a"
-msgstr "Denegat accés a"
+#: ../../../../inc/SP/Account/AccountUtil.class.php:133
+msgid "No se pudieron obtener los datos de las cuentas"
+msgstr "No ha estat possible obtenir les dades dels comptes"
-#: ../../../../inc/Acl.class.php:126
-msgid "Buscar Cuentas"
-msgstr "Buscar Comptes"
-
-#: ../../../../inc/Acl.class.php:127
-msgid "Ver Cuenta"
-msgstr "Veure Compte"
-
-#: ../../../../inc/Acl.class.php:128 ../../../../web/AccountC.class.php:265
-#: ../../../../inc/themes/classic/search.inc:161
-#: ../../../../inc/themes/material-blue/search.inc:172
-msgid "Copiar Cuenta"
-msgstr "Copiar Compte"
-
-#: ../../../../inc/Acl.class.php:130 ../../../../web/AccountC.class.php:329
-msgid "Editar Cuenta"
-msgstr "Editar Compte"
-
-#: ../../../../inc/Acl.class.php:131
-msgid "Editar Clave de Cuenta"
-msgstr "Editar Clau de Compte"
-
-#: ../../../../inc/Acl.class.php:132
-#: ../../../../inc/themes/classic/profiles.inc:28
-#: ../../../../inc/themes/material-blue/profiles.inc:40
-msgid "Ver Historial"
-msgstr "Veure Historial"
-
-#: ../../../../inc/Acl.class.php:135
-#: ../../../../inc/themes/classic/account.inc:191
-#: ../../../../inc/themes/classic/profiles.inc:50
-#: ../../../../inc/themes/material-blue/account.inc:234
-#: ../../../../inc/themes/material-blue/config.inc:280
-#: ../../../../inc/themes/material-blue/profiles.inc:60
-msgid "Archivos"
-msgstr "Arxius"
-
-#: ../../../../inc/Acl.class.php:136
-msgid "Peticiones"
-msgstr "Peticions"
-
-#: ../../../../inc/Acl.class.php:137
-msgid "Gestión Aplicación"
-msgstr "Gestió Aplicació"
-
-#: ../../../../inc/Acl.class.php:138
-msgid "Gestión Categorías"
-msgstr "Gestió Categories"
-
-#: ../../../../inc/Acl.class.php:139
-msgid "Gestión Clientes"
-msgstr "Gestió Clients"
-
-#: ../../../../inc/Acl.class.php:140
-msgid "Gestión Campos Personalizados"
-msgstr "Gestió Campos Personalitzats"
-
-#: ../../../../inc/Acl.class.php:141
-msgid "Gestión Autorizaciones API"
-msgstr "Gestió Autoritzacions API"
-
-#: ../../../../inc/Acl.class.php:142 ../../../../inc/Acl.class.php:143
-msgid "Gestión Usuarios"
-msgstr "Gestió Usuaris"
-
-#: ../../../../inc/Acl.class.php:144
-msgid "Gestión Grupos"
-msgstr "Gestió Grups"
-
-#: ../../../../inc/Acl.class.php:145
-msgid "Gestión Perfiles"
-msgstr "Gestió Perfilis"
-
-#: ../../../../inc/Acl.class.php:146 ../../../../inc/ConfigDB.class.php:91
-#: ../../../../inc/ConfigDB.class.php:119 ../../../../web/MainC.class.php:201
-#: ../../../../inc/themes/classic/profiles.inc:57
-#: ../../../../inc/themes/material-blue/profiles.inc:66
-msgid "Configuración"
-msgstr "Configuració"
-
-#: ../../../../inc/Acl.class.php:147
-msgid "Configuración General"
-msgstr "Configuració General"
-
-#: ../../../../inc/Acl.class.php:148 ../../../../web/ConfigC.class.php:132
-#: ../../../../inc/themes/classic/profiles.inc:65
-#: ../../../../inc/themes/material-blue/profiles.inc:77
-msgid "Encriptación"
-msgstr "Encriptació"
-
-#: ../../../../inc/Acl.class.php:149 ../../../../web/ConfigC.class.php:177
-#: ../../../../inc/themes/classic/backup.inc:4
-#: ../../../../inc/themes/material-blue/backup.inc:4
-msgid "Copia de Seguridad"
-msgstr "Còpia de seguretat"
-
-#: ../../../../inc/Acl.class.php:150
-msgid "Exportar"
-msgstr "Exportar"
-
-#: ../../../../inc/Acl.class.php:151
-#: ../../../../inc/themes/classic/profiles.inc:74
-#: ../../../../inc/themes/material-blue/profiles.inc:87
-msgid "Importar"
-msgstr "Importar"
-
-#: ../../../../inc/Api.class.php:65 ../../../../inc/Api.class.php:88
-#: ../../../../inc/Api.class.php:126
+#: ../../../../inc/SP/Api/ApiBase.class.php:81
+#: ../../../../inc/SP/Api/ApiBase.class.php:105
+#: ../../../../inc/SP/Api/ApiBase.class.php:133
msgid "Acceso no permitido"
msgstr "Accés no permès"
-#: ../../../../inc/Api.class.php:166
+#: ../../../../inc/SP/Api/ApiBase.class.php:173
msgid "Error de codificación"
msgstr "Error de codificació"
-#: ../../../../inc/ApiRequest.class.php:102
+#: ../../../../inc/SP/Api/ApiRequest.class.php:96
+#, fuzzy
+msgid "Método inválido"
+msgstr "Id invàlid"
+
+#: ../../../../inc/SP/Api/ApiRequest.class.php:112
+#, fuzzy
+msgid "Datos inválidos"
+msgstr "Id invàlid"
+
+#: ../../../../inc/SP/Api/ApiRequest.class.php:140
+#, fuzzy
+msgid "Acción inválida"
+msgstr "Acció Invàlida"
+
+#: ../../../../inc/SP/Api/ApiRequest.class.php:152
msgid "Token de autorización"
msgstr "Token d'autorització"
-#: ../../../../inc/ApiRequest.class.php:103
+#: ../../../../inc/SP/Api/ApiRequest.class.php:153
msgid "Acción a realizar"
msgstr "Acció a realitzar"
-#: ../../../../inc/ApiRequest.class.php:104
+#: ../../../../inc/SP/Api/ApiRequest.class.php:154
msgid "Clave de usuario (opcional)"
msgstr "Clau d'usuari (opcional)"
-#: ../../../../inc/ApiRequest.class.php:105
+#: ../../../../inc/SP/Api/ApiRequest.class.php:155
msgid "Cadena a buscar"
msgstr "Cadena a buscar"
-#: ../../../../inc/ApiRequest.class.php:106
+#: ../../../../inc/SP/Api/ApiRequest.class.php:156
msgid "Numero de cuentas a mostar en la búsqueda"
msgstr "Numero de comptes a visualitzar en la cerca"
-#: ../../../../inc/ApiRequest.class.php:107
+#: ../../../../inc/SP/Api/ApiRequest.class.php:157
msgid "Item a devolver"
msgstr "Element a retornar"
-#: ../../../../inc/ApiTokens.class.php:221
+#: ../../../../inc/SP/Api/ApiTokens.class.php:144
msgid "La autorización ya existe"
msgstr "L'autorització ja existeix"
-#: ../../../../inc/ApiTokens.class.php:307
+#: ../../../../inc/SP/Api/ApiTokens.class.php:236
msgid "Actualizar Autorización"
msgstr "Actualitzar Autorització"
-#: ../../../../inc/ApiTokens.class.php:331
-#: ../../../../web/UsersMgmtC.class.php:422
+#: ../../../../inc/SP/Api/ApiTokens.class.php:262
+#: ../../../../inc/SP/Controller/Grids.class.php:743
+#: ../../../../inc/SP/Controller/Grids.class.php:744
msgid "Eliminar Autorización"
msgstr "Eliminar Autorització"
-#: ../../../../inc/Auth.class.php:107
+#: ../../../../inc/SP/Auth/Auth.class.php:121
msgid "Usuario no pertenece al grupo"
msgstr "Usuari no pertany al grup"
-#: ../../../../inc/Auth.class.php:186
+#: ../../../../inc/SP/Auth/Auth.class.php:202
#: ../../../../inc/themes/classic/users.inc:117
#: ../../../../inc/themes/classic/userspass.inc:2
-#: ../../../../inc/themes/material-blue/users.inc:161
+#: ../../../../inc/themes/material-blue/users.inc:162
#: ../../../../inc/themes/material-blue/userspass.inc:2
msgid "Cambio de Clave"
msgstr "Canvi de Clau"
-#: ../../../../inc/Auth.class.php:188
+#: ../../../../inc/SP/Auth/Auth.class.php:204
msgid "Se ha solicitado el cambio de su clave de usuario."
msgstr "S'ha sol·licitat el canvi de la seva clau d'usuari."
-#: ../../../../inc/Auth.class.php:190
+#: ../../../../inc/SP/Auth/Auth.class.php:206
msgid "Para completar el proceso es necesario que acceda a la siguiente URL:"
msgstr "Per completar el procés és necessari que accedeixi a la següent URL:"
-#: ../../../../inc/Auth.class.php:194
+#: ../../../../inc/SP/Auth/Auth.class.php:210
msgid "Si no ha solicitado esta acción, ignore este mensaje."
msgstr "Si no ha sol·licitat aquesta acció, ignori aquest missatge."
-#: ../../../../inc/Backup.class.php:167
-msgid "Esta operación sólo es posible en entornos Linux"
-msgstr "Aquesta operació només és possible en entorns Linux"
+#: ../../../../inc/SP/Auth/Ldap.class.php:136
+#: ../../../../inc/SP/Auth/Ldap.class.php:140
+msgid "No es posible conectar con el servidor de LDAP"
+msgstr "No és possible connectar amb el servidor de LDAP"
-#: ../../../../inc/Backup.class.php:169
-msgid "Error al realizar backup en modo compatibilidad"
-msgstr "Error en realitzar la còpia de seguretat en manera compatibilitat"
+#: ../../../../inc/SP/Auth/Ldap.class.php:166
+#: ../../../../inc/SP/Auth/Ldap.class.php:171
+msgid "Error al conectar (BIND)"
+msgstr "Error en connectar (BIND)"
-#: ../../../../inc/Backup.class.php:223
-#: ../../../../inc/XmlExport.class.php:467
-msgid "No es posible crear el directorio de backups"
-msgstr "No és possible crear el directori de còpia de seguretat"
+#: ../../../../inc/SP/Auth/Ldap.class.php:195
+#: ../../../../inc/SP/Auth/Ldap.class.php:200
+msgid "Error al buscar objetos en DN base"
+msgstr "Error en buscar objectes en DN base"
-#: ../../../../inc/Backup.class.php:228
-#: ../../../../inc/XmlExport.class.php:472
-msgid "Compruebe los permisos del directorio de backups"
-msgstr "Comprovi els permisos del directori de còpia de seguretat"
+#: ../../../../inc/SP/Auth/Ldap.class.php:224
+#: ../../../../inc/SP/Auth/Ldap.class.php:230
+#: ../../../../inc/SP/Auth/Ldap.class.php:238
+#: ../../../../inc/SP/Auth/Ldap.class.php:243
+#: ../../../../inc/SP/Auth/Ldap.class.php:249
+#: ../../../../inc/SP/Auth/Ldap.class.php:254
+msgid "Error al buscar RDN de grupo"
+msgstr "Error en buscar RDN de grup"
-#: ../../../../inc/Category.class.php:69
-#: ../../../../inc/Category.class.php:165
-msgid "Nombre de categoría duplicado"
-msgstr "Nom de categoria duplicat"
+#: ../../../../inc/SP/Auth/Ldap.class.php:317
+#: ../../../../inc/SP/Auth/Ldap.class.php:323
+#: ../../../../inc/SP/Auth/Ldap.class.php:340
+#: ../../../../inc/SP/Auth/Ldap.class.php:345
+msgid "Error al buscar el DN del usuario"
+msgstr "Error en buscar el DN de l'usuari"
-#: ../../../../inc/Category.class.php:78
-msgid "Error al crear la categoría"
-msgstr "Error en crear la categoria"
+#: ../../../../inc/SP/Auth/Ldap.class.php:331
+#: ../../../../inc/SP/Auth/Ldap.class.php:336
+msgid "Error al localizar el usuario en LDAP"
+msgstr "Error en localitzar l'usuari en LDAP"
-#: ../../../../inc/Category.class.php:83
-#: ../../../../inc/Category.class.php:132
-#: ../../../../inc/Category.class.php:182
-#: ../../../../web/SearchC.class.php:299
-#: ../../../../inc/themes/classic/account.inc:42
-#: ../../../../inc/themes/classic/search.inc:83
-#: ../../../../inc/themes/material-blue/account.inc:51
-#: ../../../../inc/themes/material-blue/search.inc:85
-msgid "Categoría"
-msgstr "Categoria"
+#: ../../../../inc/SP/Auth/Ldap.class.php:415
+#: ../../../../inc/SP/Auth/Ldap.class.php:421
+#: ../../../../inc/SP/Auth/LdapADS.class.php:107
+#: ../../../../inc/SP/Auth/LdapADS.class.php:112
+msgid "Error al buscar el grupo de usuarios"
+msgstr "Error en buscar el grup d'usuaris"
-#: ../../../../inc/Category.class.php:119
-msgid "Categoría en uso por:"
-msgstr "Categoria en ús per:"
+#: ../../../../inc/SP/Auth/Ldap.class.php:428
+msgid "Usuario verificado en grupo"
+msgstr "Usuari verificat en grup"
-#: ../../../../inc/Category.class.php:129
-msgid "Error al eliminar la categoría"
-msgstr "Error en eliminar la categoria"
+#: ../../../../inc/SP/Auth/LdapADS.class.php:117
+#: ../../../../inc/SP/Auth/LdapADS.class.php:122
+msgid "No se encontró el grupo con ese nombre"
+msgstr "No s'ha trobat el grup amb aquest nom"
-#: ../../../../inc/Category.class.php:132
-#: ../../../../web/AccountsMgmtC.class.php:102
-msgid "Eliminar Categoría"
-msgstr "Eliminar Categoria"
-
-#: ../../../../inc/Category.class.php:179
-msgid "Error al actualizar la categoría"
-msgstr "Error en actualitzar la categoria"
-
-#: ../../../../inc/Category.class.php:182
-msgid "Modificar Categoría"
-msgstr "Modificar Categoria"
-
-#: ../../../../inc/Config.class.php:148
+#: ../../../../inc/SP/Config/Config.class.php:151
msgid "No es posible escribir el archivo de configuración"
msgstr "No és possible escriure l'arxiu de configuració"
-#: ../../../../inc/Config.class.php:148
+#: ../../../../inc/SP/Config/Config.class.php:151
msgid "Compruebe los permisos del directorio \"config\""
msgstr "Comprovi els permisos del directori \"config\""
-#: ../../../../inc/ConfigDB.class.php:91
-#: ../../../../inc/ConfigDB.class.php:120
+#: ../../../../inc/SP/Config/ConfigDB.class.php:102
+#: ../../../../inc/SP/Config/ConfigDB.class.php:136
+#: ../../../../inc/SP/Controller/Main.class.php:212
+#: ../../../../inc/SP/Core/Acl.class.php:154
+#: ../../../../inc/themes/classic/profiles.inc:57
+#: ../../../../inc/themes/material-blue/profiles.inc:73
+msgid "Configuración"
+msgstr "Configuració"
+
+#: ../../../../inc/SP/Config/ConfigDB.class.php:103
+#: ../../../../inc/SP/Config/ConfigDB.class.php:137
msgid "Modificar configuración"
msgstr "Modificar configuració"
-#: ../../../../inc/ConfigDB.class.php:121
+#: ../../../../inc/SP/Config/ConfigDB.class.php:138
msgid "Parámetro"
msgstr "Paràmetre"
-#: ../../../../inc/ConfigDB.class.php:122
+#: ../../../../inc/SP/Config/ConfigDB.class.php:139
msgid "Valor"
msgstr "Valor"
-#: ../../../../inc/Controller.class.php:165
-msgid "Opción no disponible"
-msgstr "Opció no disponible"
+#: ../../../../inc/SP/Controller/AccItemMgmt.class.php:166
+msgid "Token de autorización visualizado"
+msgstr "Token d'autorización visualizat"
-#: ../../../../inc/Controller.class.php:165
-#: ../../../../inc/Controller.class.php:166
-#: ../../../../inc/Controller.class.php:167
-#: ../../../../inc/Controller.class.php:168 ../../../../inc/Init.class.php:282
-msgid "Consulte con el administrador"
-msgstr "Consulti amb l'administrador"
+#: ../../../../inc/SP/Controller/AccItemMgmt.class.php:167
+msgid "Autorizaciones"
+msgstr "Autoritzacions"
-#: ../../../../inc/Controller.class.php:167
-msgid "No tiene permisos para acceder a esta página"
-msgstr "No té permisos per accedir a aquesta pàgina"
+#: ../../../../inc/SP/Controller/Account.class.php:279
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:410
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:411
+#: ../../../../inc/SP/Core/Acl.class.php:136
+#: ../../../../inc/themes/classic/search.inc:138
+msgid "Copiar Cuenta"
+msgstr "Copiar Compte"
-#: ../../../../inc/Controller.class.php:168
-msgid "No tiene permisos para realizar esta operación"
-msgstr "No té permisos per realitzar aquesta operació"
+#: ../../../../inc/SP/Controller/Account.class.php:358
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:392
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:393
+#: ../../../../inc/SP/Core/Acl.class.php:138
+msgid "Editar Cuenta"
+msgstr "Editar Compte"
-#: ../../../../inc/Crypt.class.php:125 ../../../../inc/Email.class.php:148
-msgid "Aviso"
-msgstr "Avís"
+#: ../../../../inc/SP/Controller/Account.class.php:413
+#: ../../../../inc/SP/Controller/Account.class.php:445
+#: ../../../../inc/SP/Controller/Account.class.php:538
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:348
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:349
+#: ../../../../inc/themes/classic/datasearch-rows.inc:31
+#: ../../../../inc/themes/classic/search.inc:48
+#: ../../../../inc/themes/classic/search.inc:109
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:31
+msgid "Detalles de Cuenta"
+msgstr "Detalls de Compte"
-#: ../../../../inc/Crypt.class.php:125
-msgid ""
-"Se ha regenerado el HASH de clave maestra. No es necesaria ninguna acción."
-msgstr "S'ha regenerat el HASH de clau mestra. No és necessària cap acció."
+#: ../../../../inc/SP/Controller/Account.class.php:501
+#: ../../../../inc/themes/classic/account-actions.inc:37
+#: ../../../../inc/themes/material-blue/account-actions.inc:46
+msgid "Modificar Clave de Cuenta"
+msgstr "Modificar Clau de Compte"
-#: ../../../../inc/Crypt.class.php:189
-msgid "No se puede usar el módulo de encriptación"
-msgstr "No es pot usar el mòdul d'encriptació"
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:375
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:376
+#: ../../../../inc/themes/classic/account-actions.inc:28
+#: ../../../../inc/themes/classic/search.inc:118
+#: ../../../../inc/themes/material-blue/account-actions.inc:35
+msgid "Copiar Clave en Portapapeles"
+msgstr "Copiar Clau en Portapapers"
-#: ../../../../inc/Crypt.class.php:200
-msgid "Error al generar datos cifrados"
-msgstr "Error en generar dades xifrades"
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:439
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:440
+#: ../../../../inc/themes/classic/account-actions.inc:61
+#: ../../../../inc/themes/classic/search.inc:153
+#: ../../../../inc/themes/material-blue/account-actions.inc:78
+msgid "Solicitar Modificación"
+msgstr "Sol·licitar Modificació"
-#: ../../../../inc/CryptPKI.class.php:46
-msgid "No es posible generar las claves RSA"
-msgstr "No és possible generar les claus RSA"
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:450
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:451
+#: ../../../../inc/themes/classic/search.inc:127
+msgid "Más Acciones"
+msgstr "Més Accions"
-#: ../../../../inc/CryptPKI.class.php:112
-#: ../../../../inc/CryptPKI.class.php:143
-msgid "El archivo de clave no existe"
-msgstr "L'arxiu de clau no existeix"
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:500
+msgid "Ordenar por Cliente"
+msgstr "Ordenar per Client"
-#: ../../../../inc/CsvImportBase.class.php:109
-#, php-format
-msgid "El número de campos es incorrecto (%d)"
-msgstr "El nombre de camps és incorrecte (%d)"
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:506
+#: ../../../../inc/SP/Controller/Grids.class.php:124
+#: ../../../../inc/SP/Controller/Grids.class.php:218
+#: ../../../../inc/SP/Controller/Grids.class.php:292
+#: ../../../../inc/SP/Controller/Grids.class.php:354
+#: ../../../../inc/SP/Controller/Grids.class.php:407
+#: ../../../../inc/SP/Controller/Grids.class.php:501
+#: ../../../../inc/SP/Controller/Grids.class.php:585
+#: ../../../../inc/SP/Controller/Grids.class.php:669
+#: ../../../../inc/themes/classic/account-editpass.inc:8
+#: ../../../../inc/themes/classic/account-request.inc:6
+#: ../../../../inc/themes/classic/account.inc:17
+#: ../../../../inc/themes/classic/categories.inc:8
+#: ../../../../inc/themes/classic/customers.inc:9
+#: ../../../../inc/themes/classic/customfields.inc:9
+#: ../../../../inc/themes/classic/datasearch-rows.inc:29
+#: ../../../../inc/themes/classic/groups.inc:8
+#: ../../../../inc/themes/classic/info.inc:25
+#: ../../../../inc/themes/classic/profiles.inc:8
+#: ../../../../inc/themes/classic/search.inc:46
+#: ../../../../inc/themes/classic/users.inc:8
+#: ../../../../inc/themes/material-blue/account-editpass.inc:11
+#: ../../../../inc/themes/material-blue/account-link.inc:12
+#: ../../../../inc/themes/material-blue/account.inc:27
+#: ../../../../inc/themes/material-blue/categories.inc:9
+#: ../../../../inc/themes/material-blue/customers.inc:10
+#: ../../../../inc/themes/material-blue/customfields.inc:8
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:29
+#: ../../../../inc/themes/material-blue/groups.inc:11
+#: ../../../../inc/themes/material-blue/info.inc:25
+#: ../../../../inc/themes/material-blue/profiles.inc:10
+#: ../../../../inc/themes/material-blue/request.inc:8
+#: ../../../../inc/themes/material-blue/users.inc:9
+msgid "Nombre"
+msgstr "Nom"
-#: ../../../../inc/CsvImportBase.class.php:110
-#, php-format
-msgid "Compruebe el formato del archivo CSV en línea %s"
-msgstr "Comprovi el format de l'arxiu CSV en línia %s"
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:507
+msgid "Ordenar por Nombre"
+msgstr "Ordenar per Nom"
-#: ../../../../inc/CsvImportBase.class.php:140
-#: ../../../../inc/CsvImportBase.class.php:145
-#: ../../../../inc/Import.class.php:118 ../../../../inc/Import.class.php:124
-#: ../../../../inc/Migrate.class.php:348
-#: ../../../../inc/XmlImport.class.php:62
-#: ../../../../inc/XmlImport.class.php:63
-#: ../../../../web/ConfigC.class.php:199
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:513
+#: ../../../../inc/SP/Mgmt/Category.class.php:74
+#: ../../../../inc/SP/Mgmt/Category.class.php:174
+#: ../../../../inc/SP/Mgmt/Category.class.php:349
+#: ../../../../inc/themes/classic/account.inc:48
+#: ../../../../inc/themes/classic/datasearch-rows.inc:39
+#: ../../../../inc/themes/classic/search.inc:56
+#: ../../../../inc/themes/material-blue/account-link.inc:24
+#: ../../../../inc/themes/material-blue/account.inc:64
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:39
+msgid "Categoría"
+msgstr "Categoria"
+
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:514
+msgid "Ordenar por Categoría"
+msgstr "Ordenar per Categoría"
+
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:521
+msgid "Ordenar por Usuario"
+msgstr "Ordenar per Usuari"
+
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:527
+#: ../../../../inc/themes/classic/account-editpass.inc:16
+#: ../../../../inc/themes/classic/account-request.inc:13
+#: ../../../../inc/themes/classic/account.inc:68
+#: ../../../../inc/themes/classic/datasearch-rows.inc:50
+#: ../../../../inc/themes/classic/search.inc:69
+#: ../../../../inc/themes/material-blue/account-editpass.inc:19
+#: ../../../../inc/themes/material-blue/account-link.inc:30
+#: ../../../../inc/themes/material-blue/account.inc:84
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:50
+#: ../../../../inc/themes/material-blue/request.inc:17
+msgid "URL / IP"
+msgstr "URL / IP"
+
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:528
+msgid "Ordenar por URL / IP"
+msgstr "Ordenar per URL / IP"
+
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:149
+#: ../../../../inc/SP/Core/Acl.class.php:156
+#: ../../../../inc/themes/classic/profiles.inc:65
+#: ../../../../inc/themes/material-blue/profiles.inc:84
+msgid "Encriptación"
+msgstr "Encriptació"
+
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:185
+msgid "Último backup"
+msgstr "Ultima còpia de seguretat"
+
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:185
+msgid "No se encontraron backups"
+msgstr "No es van trobar còpia de seguretat"
+
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:192
+msgid "Última exportación"
+msgstr "Última exportació"
+
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:192
+msgid "No se encontró archivo de exportación"
+msgstr "No es va trobar arxiu d'exportació"
+
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:194
+#: ../../../../inc/SP/Core/Acl.class.php:157
+#: ../../../../inc/themes/classic/backup.inc:6
+#: ../../../../inc/themes/material-blue/backup.inc:6
+msgid "Copia de Seguridad"
+msgstr "Còpia de seguretat"
+
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:216
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:146
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:151
+#: ../../../../inc/SP/Import/Import.class.php:97
+#: ../../../../inc/SP/Import/Migrate.class.php:366
+#: ../../../../inc/SP/Import/XmlImport.class.php:65
+#: ../../../../inc/SP/Import/XmlImport.class.php:66
msgid "Importar Cuentas"
msgstr "Importar Comptes"
-#: ../../../../inc/CsvImportBase.class.php:141
-msgid "Error importando cuenta"
-msgstr "Error important compte"
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:238
+msgid "Información"
+msgstr "Informació"
-#: ../../../../inc/CsvImportBase.class.php:142
-#, php-format
-msgid "Error procesando línea %s"
-msgstr "Error processant línia %s"
+#: ../../../../inc/SP/Controller/Controller.class.php:191
+msgid "Opción no disponible"
+msgstr "Opció no disponible"
-#: ../../../../inc/CsvImportBase.class.php:145
-#, php-format
-msgid "Cuenta importada: %s"
-msgstr "Compte importat: %s"
+#: ../../../../inc/SP/Controller/Controller.class.php:191
+#: ../../../../inc/SP/Controller/Controller.class.php:192
+#: ../../../../inc/SP/Controller/Controller.class.php:193
+#: ../../../../inc/SP/Controller/Controller.class.php:194
+#: ../../../../inc/SP/Core/Init.class.php:267
+msgid "Consulte con el administrador"
+msgstr "Consulti amb l'administrador"
-#: ../../../../inc/CustomFields.class.php:276
-#: ../../../../web/AccountsMgmtC.class.php:301
-#: ../../../../inc/themes/classic/profiles.inc:107
-#: ../../../../inc/themes/material-blue/profiles.inc:124
-msgid "Campos Personalizados"
-msgstr "Campos Personalitzats"
+#: ../../../../inc/SP/Controller/Controller.class.php:193
+msgid "No tiene permisos para acceder a esta página"
+msgstr "No té permisos per accedir a aquesta pàgina"
-#: ../../../../inc/CustomFields.class.php:291
-msgid "Actualizando datos encriptados"
-msgstr "Actualitzant dades encriptades"
+#: ../../../../inc/SP/Controller/Controller.class.php:194
+msgid "No tiene permisos para realizar esta operación"
+msgstr "No té permisos per realitzar aquesta operació"
-#: ../../../../inc/CustomFields.class.php:318
-msgid "Registros no actualizados"
-msgstr "Registres no actualitzats"
+#: ../../../../inc/SP/Controller/Eventlog.class.php:102
+msgid "Registro de eventos vaciado"
+msgstr "Registre d'esdeveniments buidat"
-#: ../../../../inc/CustomFieldsBase.class.php:86
-msgid "Texto"
-msgstr "Text"
+#: ../../../../inc/SP/Controller/Eventlog.class.php:104
+msgid "Error al vaciar el registro de eventos"
+msgstr "Error en buidar el registre d'esdeveniments"
-#: ../../../../inc/CustomFieldsBase.class.php:88
-msgid "Fecha"
-msgstr "Data"
+#: ../../../../inc/SP/Controller/Grids.class.php:85
+#, fuzzy
+msgid "Buscar Categoría"
+msgstr "Nova Categoria"
-#: ../../../../inc/CustomFieldsBase.class.php:89
-msgid "Número"
-msgstr "Nombre"
+#: ../../../../inc/SP/Controller/Grids.class.php:115
+#: ../../../../inc/SP/Controller/Grids.class.php:116
+#: ../../../../inc/SP/Mgmt/Category.class.php:73
+msgid "Eliminar Categoría"
+msgstr "Eliminar Categoria"
-#: ../../../../inc/CustomFieldsBase.class.php:90
-#: ../../../../inc/themes/classic/passreset.inc:22
-#: ../../../../inc/themes/classic/users.inc:61
-#: ../../../../inc/themes/material-blue/users.inc:71
-msgid "Email"
-msgstr "Email"
+#: ../../../../inc/SP/Controller/Grids.class.php:143
+msgid "Gestión de Categorías"
+msgstr "Gestió de Categories"
-#: ../../../../inc/CustomFieldsBase.class.php:91
-msgid "Teléfono"
-msgstr "Telèfon"
+#: ../../../../inc/SP/Controller/Grids.class.php:179
+#, fuzzy
+msgid "Buscar Cliente"
+msgstr "Buscar Comptes"
-#: ../../../../inc/CustomFieldsBase.class.php:92
-msgid "Link"
-msgstr "Enllaç"
-
-#: ../../../../inc/CustomFieldsBase.class.php:93
-msgid "Color"
-msgstr "Color"
-
-#: ../../../../inc/CustomFieldsBase.class.php:107
-#: ../../../../inc/themes/classic/profiles.inc:98
-#: ../../../../inc/themes/material-blue/profiles.inc:114
-msgid "Categorías"
-msgstr "Categories"
-
-#: ../../../../inc/CustomFieldsBase.class.php:108
-#: ../../../../inc/themes/classic/profiles.inc:103
-#: ../../../../inc/themes/material-blue/profiles.inc:119
-msgid "Clientes"
-msgstr "Clients"
-
-#: ../../../../inc/CustomFieldsBase.class.php:110
-#: ../../../../inc/themes/classic/account.inc:143
-#: ../../../../inc/themes/classic/profiles.inc:89
-#: ../../../../inc/themes/material-blue/account.inc:170
-#: ../../../../inc/themes/material-blue/profiles.inc:104
-msgid "Grupos"
-msgstr "Grups"
-
-#: ../../../../inc/Customer.class.php:50 ../../../../inc/Customer.class.php:95
-msgid "Cliente duplicado"
-msgstr "Client duplicat"
-
-#: ../../../../inc/Customer.class.php:60
-msgid "Error al crear el cliente"
-msgstr "Error en crear el client"
-
-#: ../../../../inc/Customer.class.php:112
-msgid "Error al actualizar el cliente"
-msgstr "Error en actualitzar el client"
-
-#: ../../../../inc/Customer.class.php:115
-msgid "Actualizar Cliente"
-msgstr "Actualitzar Client"
-
-#: ../../../../inc/Customer.class.php:150
-msgid "Cliente en uso por:"
-msgstr "Client en ús per:"
-
-#: ../../../../inc/Customer.class.php:160
-msgid "Error al eliminar el cliente"
-msgstr "Error en eliminar el client"
-
-#: ../../../../inc/Customer.class.php:163
-#: ../../../../web/AccountsMgmtC.class.php:160
+#: ../../../../inc/SP/Controller/Grids.class.php:209
+#: ../../../../inc/SP/Controller/Grids.class.php:210
+#: ../../../../inc/SP/Mgmt/Customer.class.php:178
msgid "Eliminar Cliente"
msgstr "Eliminar Client"
-#: ../../../../inc/DBConnectionFactory.class.php:83
-#: ../../../../inc/DBConnectionFactory.class.php:85
-#: ../../../../inc/DBConnectionFactory.class.php:99
-#: ../../../../inc/Installer.class.php:235
-#: ../../../../inc/Migrate.class.php:114
-msgid "No es posible conectar con la BD"
-msgstr "No és possible connectar amb la BBDD"
+#: ../../../../inc/SP/Controller/Grids.class.php:237
+msgid "Gestión de Clientes"
+msgstr "Gestió de Clients"
-#: ../../../../inc/DBConnectionFactory.class.php:83
-#: ../../../../inc/DBConnectionFactory.class.php:85
-#: ../../../../inc/Installer.class.php:236
-#: ../../../../inc/Migrate.class.php:115
-msgid "Compruebe los datos de conexión"
-msgstr "Comprovi les dades de connexió"
+#: ../../../../inc/SP/Controller/Grids.class.php:252
+#, fuzzy
+msgid "Buscar Campo"
+msgstr "Buscar Comptes"
-#: ../../../../inc/Email.class.php:59 ../../../../inc/UserUtil.class.php:182
-msgid "N/D"
-msgstr "N/D"
+#: ../../../../inc/SP/Controller/Grids.class.php:282
+#: ../../../../inc/SP/Controller/Grids.class.php:283
+msgid "Eliminar Campo"
+msgstr "Eliminar Camp"
-#: ../../../../inc/Email.class.php:60 ../../../../web/UsersMgmtC.class.php:393
+#: ../../../../inc/SP/Controller/Grids.class.php:291
+#: ../../../../inc/themes/classic/customfields.inc:27
+#: ../../../../inc/themes/material-blue/customfields.inc:30
+msgid "Módulo"
+msgstr "Mòdul"
+
+#: ../../../../inc/SP/Controller/Grids.class.php:312
+#: ../../../../inc/SP/Mgmt/CustomFields.class.php:313
+#: ../../../../inc/themes/classic/profiles.inc:107
+#: ../../../../inc/themes/material-blue/profiles.inc:131
+msgid "Campos Personalizados"
+msgstr "Campos Personalitzats"
+
+#: ../../../../inc/SP/Controller/Grids.class.php:327
+#, fuzzy
+msgid "Buscar Archivo"
+msgstr "Descarregar Arxiu"
+
+#: ../../../../inc/SP/Controller/Grids.class.php:334
+#: ../../../../inc/themes/material-blue/files.inc:23
+msgid "Ver Archivo"
+msgstr "Veure Arxiu"
+
+#: ../../../../inc/SP/Controller/Grids.class.php:344
+#: ../../../../inc/SP/Mgmt/Files.class.php:130
+#: ../../../../inc/themes/material-blue/files.inc:18
+msgid "Eliminar Archivo"
+msgstr "Eliminar Arxiu"
+
+#: ../../../../inc/SP/Controller/Grids.class.php:376
+#, fuzzy
+msgid "Gestión de Archivos"
+msgstr "Gestió d'arxius"
+
+#: ../../../../inc/SP/Controller/Grids.class.php:391
+#, fuzzy
+msgid "Buscar Cuenta"
+msgstr "Buscar Comptes"
+
+#: ../../../../inc/SP/Controller/Grids.class.php:424
+#, fuzzy
+msgid "Gestión de Cuentas"
+msgstr "Gestió de Clients"
+
+#: ../../../../inc/SP/Controller/Grids.class.php:439
+#, fuzzy
+msgid "Buscar Usuario"
+msgstr "Veure Usuari"
+
+#: ../../../../inc/SP/Controller/Grids.class.php:458
+#: ../../../../inc/SP/Controller/Grids.class.php:459
+msgid "Ver Detalles de Usuario"
+msgstr "Veure Detalls d'Usuari"
+
+#: ../../../../inc/SP/Controller/Grids.class.php:480
+#: ../../../../inc/SP/Controller/Grids.class.php:481
+#: ../../../../inc/SP/Mgmt/User/UserBase.class.php:618
+msgid "Eliminar Usuario"
+msgstr "Eliminar Usuari"
+
+#: ../../../../inc/SP/Controller/Grids.class.php:491
+#: ../../../../inc/SP/Controller/Grids.class.php:492
+msgid "Cambiar Clave de Usuario"
+msgstr "Canviar Clau d'Usuari"
+
+#: ../../../../inc/SP/Controller/Grids.class.php:505
+msgid "Propiedades"
+msgstr "Propietats"
+
+#: ../../../../inc/SP/Controller/Grids.class.php:531
+msgid "Gestión de Usuarios"
+msgstr "Gestió d'Usuaris"
+
+#: ../../../../inc/SP/Controller/Grids.class.php:546
+#, fuzzy
+msgid "Buscar Grupo"
+msgstr "Editar Grup"
+
+#: ../../../../inc/SP/Controller/Grids.class.php:576
+#: ../../../../inc/SP/Controller/Grids.class.php:577
+#: ../../../../inc/SP/Mgmt/User/Groups.class.php:397
+msgid "Eliminar Grupo"
+msgstr "Eliminar Grup"
+
+#: ../../../../inc/SP/Controller/Grids.class.php:604
+msgid "Gestión de Grupos"
+msgstr "Gestió de Grups"
+
+#: ../../../../inc/SP/Controller/Grids.class.php:619
+#, fuzzy
+msgid "Buscar Perfil"
+msgstr "Veure Perfil"
+
+#: ../../../../inc/SP/Controller/Grids.class.php:638
+#: ../../../../inc/SP/Controller/Grids.class.php:639
+msgid "Ver Detalles de Perfil"
+msgstr "Veure Detalls de Perfil"
+
+#: ../../../../inc/SP/Controller/Grids.class.php:660
+#: ../../../../inc/SP/Controller/Grids.class.php:661
+#: ../../../../inc/SP/Mgmt/User/ProfileBase.class.php:562
+msgid "Eliminar Perfil"
+msgstr "Eliminar Perfil"
+
+#: ../../../../inc/SP/Controller/Grids.class.php:687
+msgid "Gestión de Perfiles"
+msgstr "Gestió de Perfils"
+
+#: ../../../../inc/SP/Controller/Grids.class.php:702
+#, fuzzy
+msgid "Buscar Token"
+msgstr "Buscar Comptes"
+
+#: ../../../../inc/SP/Controller/Grids.class.php:721
+#: ../../../../inc/SP/Controller/Grids.class.php:722
+msgid "Ver token de Autorización"
+msgstr "Veure token d'Autorització"
+
+#: ../../../../inc/SP/Controller/Grids.class.php:753
+#: ../../../../inc/SP/Log/Email.class.php:68
#: ../../../../inc/themes/classic/tokens.inc:20
#: ../../../../inc/themes/material-blue/tokens.inc:20
msgid "Acción"
msgstr "Acció"
-#: ../../../../inc/Email.class.php:61
-msgid "Realizado por"
-msgstr "Realitzat per"
+#: ../../../../inc/SP/Controller/Grids.class.php:772
+msgid "Gestión de Autorizaciones API"
+msgstr "Gestió d'Autoritzacions API"
-#: ../../../../inc/Email.class.php:77
-msgid "Enviar Email"
-msgstr "Enviar Email"
+#: ../../../../inc/SP/Controller/Grids.class.php:787
+#, fuzzy
+msgid "Buscar Enlace"
+msgstr "Obrir enllaç a"
-#: ../../../../inc/Email.class.php:81
-msgid "Correo enviado"
-msgstr "Correu enviat"
+#: ../../../../inc/SP/Controller/Grids.class.php:794
+#: ../../../../inc/SP/Controller/Grids.class.php:795
+#, fuzzy
+msgid "Ver Enlace"
+msgstr "Veure Clau"
-#: ../../../../inc/Email.class.php:83
-msgid "Error al enviar correo"
-msgstr "Error en enviar correu"
+#: ../../../../inc/SP/Controller/Grids.class.php:804
+#: ../../../../inc/SP/Controller/Grids.class.php:805
+msgid "Renovar Enlace"
+msgstr ""
-#: ../../../../inc/Email.class.php:87
-msgid "Destinatario"
-msgstr "Destinatari"
+#: ../../../../inc/SP/Controller/Grids.class.php:815
+#: ../../../../inc/SP/Controller/Grids.class.php:816
+#: ../../../../inc/SP/Mgmt/PublicLinkBase.class.php:275
+#, fuzzy
+msgid "Eliminar Enlace"
+msgstr "Eliminar Compte"
-#: ../../../../inc/Email.class.php:90
-msgid "CC"
-msgstr "CC"
+#: ../../../../inc/SP/Controller/Grids.class.php:825
+#: ../../../../inc/themes/material-blue/publiclinks.inc:10
+#, fuzzy
+msgid "Fecha Creación"
+msgstr "Data Edició"
-#: ../../../../inc/FileImport.class.php:105
-msgid "Archivo no subido correctamente"
-msgstr "Arxiu no pujat correctament"
+#: ../../../../inc/SP/Controller/Grids.class.php:826
+#: ../../../../inc/themes/material-blue/publiclinks.inc:14
+#, fuzzy
+msgid "Fecha Caducidad"
+msgstr "Data Edició"
-#: ../../../../inc/FileImport.class.php:105
-msgid "Verifique los permisos del usuario del servidor web"
-msgstr "Verifiqui els permisos de l'usuari del servidor web"
+#: ../../../../inc/SP/Controller/Grids.class.php:828
+#: ../../../../inc/themes/material-blue/publiclinks.inc:22
+#, fuzzy
+msgid "Notificar"
+msgstr "Verificar"
-#: ../../../../inc/FileImport.class.php:116
-msgid "Compruebe la extensión del archivo"
-msgstr "Comprovi l'extensió de l'arxiu"
+#: ../../../../inc/SP/Controller/Grids.class.php:829
+#: ../../../../inc/themes/classic/account-details.inc:3
+#: ../../../../inc/themes/material-blue/account-details.inc:3
+#: ../../../../inc/themes/material-blue/publiclinks.inc:26
+msgid "Visitas"
+msgstr "Visites"
-#: ../../../../inc/FileImport.class.php:132
-msgid "Compruebe la configuración de PHP para subir archivos"
-msgstr "Comprovi la configuració de PHP per pujar arxius"
+#: ../../../../inc/SP/Controller/Grids.class.php:851
+#, fuzzy
+msgid "Gestión de Enlaces"
+msgstr "Gestió de Clients"
-#: ../../../../inc/FileImport.class.php:150
-#: ../../../../inc/FileImport.class.php:168
-msgid "Compruebe los permisos del directorio temporal"
-msgstr "Comprovi els permisos del directori temporal"
+#: ../../../../inc/SP/Controller/Main.class.php:170
+#: ../../../../inc/themes/classic/inc/Icons.class.php:53
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:51
+msgid "Admin Aplicación"
+msgstr "Admin Aplicació"
-#: ../../../../inc/Files.class.php:111
-#: ../../../../inc/themes/classic/files.inc:15
-#: ../../../../inc/themes/material-blue/files.inc:16
-msgid "Eliminar Archivo"
-msgstr "Eliminar Arxiu"
+#: ../../../../inc/SP/Controller/Main.class.php:188
+msgid "Buscar"
+msgstr "Buscar"
-#: ../../../../inc/Groups.class.php:155
-msgid "Error al añadir los usuarios del grupo"
-msgstr "Error en afegir els usuaris del grup"
+#: ../../../../inc/SP/Controller/Main.class.php:200
+msgid "Usuarios y Accesos"
+msgstr "Usuaris i Accessos"
-#: ../../../../inc/Groups.class.php:256
-msgid "Error al actualizar los usuarios del grupo"
-msgstr "Error en actualitzar els usuaris del grup"
+#: ../../../../inc/SP/Controller/Main.class.php:206
+msgid "Elementos y Personalización"
+msgstr "Elements i Personalització"
-#: ../../../../inc/Groups.class.php:369
-#: ../../../../web/UsersMgmtC.class.php:210
-msgid "Eliminar Grupo"
-msgstr "Eliminar Grup"
+#: ../../../../inc/SP/Controller/Main.class.php:218
+#: ../../../../inc/themes/classic/eventlog.inc:2
+#: ../../../../inc/themes/material-blue/eventlog.inc:4
+msgid "Registro de Eventos"
+msgstr "Registre d'Esdeveniments"
-#: ../../../../inc/Groups.class.php:372
-msgid "Error al eliminar los usuarios del grupo"
-msgstr "Error en eliminar els usuaris del grup"
+#: ../../../../inc/SP/Controller/Main.class.php:239
+msgid "Nuevo estilo visual basado en Material Design Lite by Google"
+msgstr "Nou estil visual basat en Material Design Lite by Google"
-#: ../../../../inc/Import.class.php:109
-msgid "Tipo mime no soportado"
-msgstr "Tipus mime no suportat"
+#: ../../../../inc/SP/Controller/Main.class.php:240
+msgid "Usuarios en múltiples grupos"
+msgstr "Usuaris en múltiples grups"
-#: ../../../../inc/Import.class.php:110
-msgid "Compruebe el formato del archivo"
-msgstr "Comprovi el format de l'arxiu"
+#: ../../../../inc/SP/Controller/Main.class.php:241
+msgid "Previsualización de imágenes"
+msgstr "Previsualització d'imatges"
-#: ../../../../inc/Import.class.php:124 ../../../../inc/Import.class.php:127
-#: ../../../../inc/Migrate.class.php:91
-msgid "Importación finalizada"
-msgstr "Importació finalitzada"
+#: ../../../../inc/SP/Controller/Main.class.php:242
+msgid "Mostrar claves como imágenes"
+msgstr "Mostrar claus com a imatges"
-#: ../../../../inc/Init.class.php:182
+#: ../../../../inc/SP/Controller/Main.class.php:243
+msgid "Campos personalizados"
+msgstr "Camps personalitzats"
+
+#: ../../../../inc/SP/Controller/Main.class.php:244
+msgid "API de consultas"
+msgstr "API de consultes"
+
+#: ../../../../inc/SP/Controller/Main.class.php:245
+#: ../../../../inc/themes/classic/login-2fa.inc:9
+#: ../../../../inc/themes/material-blue/login-2fa.inc:7
+#: ../../../../inc/themes/material-blue/preferences-security.inc:13
+msgid "Autentificación en 2 pasos"
+msgstr "Autenticació en 2 passos"
+
+#: ../../../../inc/SP/Controller/Main.class.php:246
+msgid "Complejidad de generador de claves"
+msgstr "Complexitat de generador de claus"
+
+#: ../../../../inc/SP/Controller/Main.class.php:247
+msgid "Consultas especiales"
+msgstr "Consultes especials"
+
+#: ../../../../inc/SP/Controller/Main.class.php:248
+msgid "Exportación a XML"
+msgstr "Exportació a XML"
+
+#: ../../../../inc/SP/Controller/Main.class.php:249
+msgid "Clave maestra temporal"
+msgstr "Clau mestra temporal"
+
+#: ../../../../inc/SP/Controller/Main.class.php:250
+msgid "Importación de cuentas desde sysPass, KeePass, KeePassX y CSV"
+msgstr "Importació de comptes des de sysPass, KeePass, KeePassX i CSV"
+
+#: ../../../../inc/SP/Controller/Main.class.php:251
+msgid "Optimización del código y mayor rapidez de carga"
+msgstr "Optimització del codi i major rapidesa de càrrega"
+
+#: ../../../../inc/SP/Controller/Main.class.php:252
+msgid "Mejoras de seguridad en XSS e inyección SQL"
+msgstr "Millores de seguretat en XSS i injecció SQL"
+
+#: ../../../../inc/SP/Controller/Main.class.php:293
+msgid "La version de PHP es vulnerable al ataque NULL Byte (CVE-2006-7243)"
+msgstr "La versió de PHP és vulnerable a l'atac NULL Byte (CVE-2006-7243)"
+
+#: ../../../../inc/SP/Controller/Main.class.php:294
+msgid "Actualice la versión de PHP para usar sysPass de forma segura"
+msgstr "Actualitzi la versió de PHP per usar sysPass de forma segura"
+
+#: ../../../../inc/SP/Controller/Main.class.php:301
+msgid "No se encuentra el generador de números aleatorios."
+msgstr "No es troba el generador de nombres aleatoris."
+
+#: ../../../../inc/SP/Controller/Main.class.php:302
+msgid ""
+"Sin esta función un atacante puede utilizar su cuenta al resetear la clave"
+msgstr ""
+"Sense aquesta funció un atacant pot utilitzar el seu compte en restablir la "
+"clau"
+
+#: ../../../../inc/SP/Controller/Main.class.php:321
+msgid "Instalación finalizada"
+msgstr "Instal·lació finalitzada"
+
+#: ../../../../inc/SP/Controller/Main.class.php:322
+msgid "Pulse aquí para acceder"
+msgstr "Feu clic aquí per accedir"
+
+#: ../../../../inc/SP/Controller/Main.class.php:419
+msgid "Descargar nueva versión"
+msgstr "Descarregar nova versió"
+
+#: ../../../../inc/SP/Controller/Main.class.php:430
+msgid "Avisos de sysPass"
+msgstr "Avisos de sysPass"
+
+#: ../../../../inc/SP/Controller/UsersPrefs.class.php:94
+#: ../../../../inc/themes/classic/mail.inc:63
+#: ../../../../inc/themes/material-blue/mail.inc:88
+msgid "Seguridad"
+msgstr "Seguretat"
+
+#: ../../../../inc/SP/Controller/UsersPrefs.class.php:132
+#: ../../../../inc/themes/classic/sessionbar.inc:9
+msgid "Preferencias"
+msgstr "Preferencies"
+
+#: ../../../../inc/SP/Core/Acl.class.php:120
+msgid "Denegado acceso a"
+msgstr "Denegat accés a"
+
+#: ../../../../inc/SP/Core/Acl.class.php:134
+msgid "Buscar Cuentas"
+msgstr "Buscar Comptes"
+
+#: ../../../../inc/SP/Core/Acl.class.php:135
+msgid "Ver Cuenta"
+msgstr "Veure Compte"
+
+#: ../../../../inc/SP/Core/Acl.class.php:139
+msgid "Editar Clave de Cuenta"
+msgstr "Editar Clau de Compte"
+
+#: ../../../../inc/SP/Core/Acl.class.php:140
+#: ../../../../inc/themes/classic/profiles.inc:28
+#: ../../../../inc/themes/material-blue/profiles.inc:42
+msgid "Ver Historial"
+msgstr "Veure Historial"
+
+#: ../../../../inc/SP/Core/Acl.class.php:143
+#: ../../../../inc/themes/classic/account-files.inc:3
+#: ../../../../inc/themes/classic/profiles.inc:50
+#: ../../../../inc/themes/material-blue/account-files.inc:3
+#: ../../../../inc/themes/material-blue/config-files.inc:4
+#: ../../../../inc/themes/material-blue/profiles.inc:62
+msgid "Archivos"
+msgstr "Arxius"
+
+#: ../../../../inc/SP/Core/Acl.class.php:144
+msgid "Peticiones"
+msgstr "Peticions"
+
+#: ../../../../inc/SP/Core/Acl.class.php:145
+msgid "Gestión Aplicación"
+msgstr "Gestió Aplicació"
+
+#: ../../../../inc/SP/Core/Acl.class.php:146
+msgid "Gestión Categorías"
+msgstr "Gestió Categories"
+
+#: ../../../../inc/SP/Core/Acl.class.php:147
+msgid "Gestión Clientes"
+msgstr "Gestió Clients"
+
+#: ../../../../inc/SP/Core/Acl.class.php:148
+msgid "Gestión Campos Personalizados"
+msgstr "Gestió Campos Personalitzats"
+
+#: ../../../../inc/SP/Core/Acl.class.php:149
+msgid "Gestión Autorizaciones API"
+msgstr "Gestió Autoritzacions API"
+
+#: ../../../../inc/SP/Core/Acl.class.php:150
+#: ../../../../inc/SP/Core/Acl.class.php:151
+msgid "Gestión Usuarios"
+msgstr "Gestió Usuaris"
+
+#: ../../../../inc/SP/Core/Acl.class.php:152
+msgid "Gestión Grupos"
+msgstr "Gestió Grups"
+
+#: ../../../../inc/SP/Core/Acl.class.php:153
+msgid "Gestión Perfiles"
+msgstr "Gestió Perfilis"
+
+#: ../../../../inc/SP/Core/Acl.class.php:155
+msgid "Configuración General"
+msgstr "Configuració General"
+
+#: ../../../../inc/SP/Core/Acl.class.php:158
+msgid "Exportar"
+msgstr "Exportar"
+
+#: ../../../../inc/SP/Core/Acl.class.php:159
+#: ../../../../inc/themes/classic/profiles.inc:74
+#: ../../../../inc/themes/material-blue/profiles.inc:94
+msgid "Importar"
+msgstr "Importar"
+
+#: ../../../../inc/SP/Core/Backup.class.php:51
+#: ../../../../inc/themes/classic/backup.inc:56
+msgid "Realizar Backup"
+msgstr "Realitzar Còpia de seguretat"
+
+#: ../../../../inc/SP/Core/Backup.class.php:79
+msgid "Copia de la aplicación y base de datos realizada correctamente"
+msgstr "Còpia de l'aplicació i base de dades realitzada correctament"
+
+#: ../../../../inc/SP/Core/Backup.class.php:197
+msgid "Esta operación sólo es posible en entornos Linux"
+msgstr "Aquesta operació només és possible en entorns Linux"
+
+#: ../../../../inc/SP/Core/Backup.class.php:199
+msgid "Error al realizar backup en modo compatibilidad"
+msgstr "Error en realitzar la còpia de seguretat en manera compatibilitat"
+
+#: ../../../../inc/SP/Core/Backup.class.php:253
+#: ../../../../inc/SP/Core/XmlExport.class.php:487
+msgid "No es posible crear el directorio de backups"
+msgstr "No és possible crear el directori de còpia de seguretat"
+
+#: ../../../../inc/SP/Core/Backup.class.php:258
+#: ../../../../inc/SP/Core/XmlExport.class.php:492
+msgid "Compruebe los permisos del directorio de backups"
+msgstr "Comprovi els permisos del directori de còpia de seguretat"
+
+#: ../../../../inc/SP/Core/Crypt.class.php:132
+#: ../../../../inc/SP/Log/Email.class.php:154
+#: ../../../../inc/themes/classic/inc/Icons.class.php:70
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:68
+msgid "Aviso"
+msgstr "Avís"
+
+#: ../../../../inc/SP/Core/Crypt.class.php:132
+msgid ""
+"Se ha regenerado el HASH de clave maestra. No es necesaria ninguna acción."
+msgstr "S'ha regenerat el HASH de clau mestra. No és necessària cap acció."
+
+#: ../../../../inc/SP/Core/Crypt.class.php:196
+msgid "No se puede usar el módulo de encriptación"
+msgstr "No es pot usar el mòdul d'encriptació"
+
+#: ../../../../inc/SP/Core/Crypt.class.php:207
+msgid "Error al generar datos cifrados"
+msgstr "Error en generar dades xifrades"
+
+#: ../../../../inc/SP/Core/CryptPKI.class.php:47
+msgid "No es posible generar las claves RSA"
+msgstr "No és possible generar les claus RSA"
+
+#: ../../../../inc/SP/Core/CryptPKI.class.php:113
+#: ../../../../inc/SP/Core/CryptPKI.class.php:115
+#: ../../../../inc/SP/Core/CryptPKI.class.php:146
+#: ../../../../inc/SP/Core/CryptPKI.class.php:148
+msgid "El archivo de clave no existe"
+msgstr "L'arxiu de clau no existeix"
+
+#: ../../../../inc/SP/Core/Init.class.php:135
msgid "Error en la verificación de la base de datos"
msgstr "Error en la verificació de la base de dades"
-#: ../../../../inc/Init.class.php:278
+#: ../../../../inc/SP/Core/Init.class.php:263
msgid "Sesion"
msgstr "Sessió"
-#: ../../../../inc/Init.class.php:278 ../../../../inc/Init.class.php:282
+#: ../../../../inc/SP/Core/Init.class.php:263
+#: ../../../../inc/SP/Core/Init.class.php:267
msgid "La sesión no puede ser inicializada"
msgstr "La sessió no es pot inicialitzar"
-#: ../../../../inc/Init.class.php:366
+#: ../../../../inc/SP/Core/Init.class.php:364
msgid "El directorio \"/config\" no existe"
msgstr "El directori \"/config\" no existeix"
-#: ../../../../inc/Init.class.php:371
+#: ../../../../inc/SP/Core/Init.class.php:369
msgid "No es posible escribir en el directorio \"config\""
msgstr "No és possible escriure en el directori \"config\""
-#: ../../../../inc/Init.class.php:379
+#: ../../../../inc/SP/Core/Init.class.php:376
msgid "Los permisos del directorio \"/config\" son incorrectos"
msgstr "Els permisos del directori \"/config\" són incorrectes"
-#: ../../../../inc/Init.class.php:379
+#: ../../../../inc/SP/Core/Init.class.php:376
msgid "Actual:"
msgstr "Actual:"
-#: ../../../../inc/Init.class.php:379
+#: ../../../../inc/SP/Core/Init.class.php:376
msgid "Necesario: 750"
msgstr "Necessari: 750"
-#: ../../../../inc/Init.class.php:428
+#: ../../../../inc/SP/Core/Init.class.php:425
msgid "Aplicación en mantenimiento"
msgstr "Aplicació en manteniment"
-#: ../../../../inc/Init.class.php:428
+#: ../../../../inc/SP/Core/Init.class.php:425
msgid "En breve estará operativa"
msgstr "En breu estarà operativa"
-#: ../../../../inc/Init.class.php:465
+#: ../../../../inc/SP/Core/Init.class.php:462
msgid "Finalizar sesión"
msgstr "Finalitzar sessió"
-#: ../../../../inc/Init.class.php:467
+#: ../../../../inc/SP/Core/Init.class.php:464
msgid "Tiempo inactivo"
msgstr "Temps inactiu"
-#: ../../../../inc/Init.class.php:468
+#: ../../../../inc/SP/Core/Init.class.php:465
msgid "Tiempo total"
msgstr "Temps total"
-#: ../../../../inc/Init.class.php:507
+#: ../../../../inc/SP/Core/Init.class.php:504
msgid "La aplicación necesita actualizarse"
msgstr "L'aplicació necessita actualitzar-se"
-#: ../../../../inc/Init.class.php:507
+#: ../../../../inc/SP/Core/Init.class.php:504
#, php-format
msgid "Si es un administrador pulse en el enlace: %s"
msgstr "Si és un administrador premi a l'enllaç: %s"
-#: ../../../../inc/Init.class.php:507
+#: ../../../../inc/SP/Core/Init.class.php:504
+#: ../../../../inc/themes/classic/inc/Icons.class.php:57
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:55
#: ../../../../inc/themes/classic/upgrade.inc:20
-#: ../../../../inc/themes/material-blue/upgrade.inc:22
+#: ../../../../inc/themes/material-blue/upgrade.inc:26
msgid "Actualizar"
msgstr "Actualitzar"
-#: ../../../../inc/Init.class.php:538
+#: ../../../../inc/SP/Core/Init.class.php:534
+#: ../../../../inc/themes/material-blue/upgrade.inc:4
msgid "Actualización"
msgstr "Actualització"
-#: ../../../../inc/Init.class.php:539
+#: ../../../../inc/SP/Core/Init.class.php:535
msgid "Actualización de versión realizada."
msgstr "Actualització de versió realitzada."
-#: ../../../../inc/Init.class.php:540
-#: ../../../../inc/themes/classic/info.inc:33
-#: ../../../../inc/themes/material-blue/info.inc:33
-msgid "Versión"
-msgstr "Versió"
-
-#: ../../../../inc/Installer.class.php:127
+#: ../../../../inc/SP/Core/Installer.class.php:136
msgid "Indicar nombre de usuario admin"
msgstr "Indicar nom d'usuari admin"
-#: ../../../../inc/Installer.class.php:128
+#: ../../../../inc/SP/Core/Installer.class.php:137
msgid "Usuario admin para acceso a la aplicación"
msgstr "Usuari admin per a accés a l'aplicació"
-#: ../../../../inc/Installer.class.php:132
+#: ../../../../inc/SP/Core/Installer.class.php:141
msgid "Indicar la clave de admin"
msgstr "Indicar la clau de admin"
-#: ../../../../inc/Installer.class.php:133
+#: ../../../../inc/SP/Core/Installer.class.php:142
msgid "Clave del usuario admin de la aplicación"
msgstr "Clau de l'usuari admin de l'aplicació"
-#: ../../../../inc/Installer.class.php:137
+#: ../../../../inc/SP/Core/Installer.class.php:146
msgid "Indicar la clave maestra"
msgstr "Indicar la clau mestra"
-#: ../../../../inc/Installer.class.php:138
+#: ../../../../inc/SP/Core/Installer.class.php:147
msgid "Clave maestra para encriptar las claves"
msgstr "Clau mestra per encriptar les claus"
-#: ../../../../inc/Installer.class.php:142
+#: ../../../../inc/SP/Core/Installer.class.php:151
msgid "Clave maestra muy corta"
msgstr "Clau mestra massa curta"
-#: ../../../../inc/Installer.class.php:143
+#: ../../../../inc/SP/Core/Installer.class.php:152
msgid "La longitud de la clave maestra ha de ser mayor de 11 caracteres"
msgstr "La longitud de la clau mestra ha de ser major d'11 caràcters"
-#: ../../../../inc/Installer.class.php:147
+#: ../../../../inc/SP/Core/Installer.class.php:156
msgid "Indicar el usuario de la BBDD"
msgstr "Indicar l'usuari de la BBDD"
-#: ../../../../inc/Installer.class.php:148
+#: ../../../../inc/SP/Core/Installer.class.php:157
msgid "Usuario con permisos de administrador de la Base de Datos"
msgstr "Usuari amb permisos d'administrador de la Base de dades"
-#: ../../../../inc/Installer.class.php:152
+#: ../../../../inc/SP/Core/Installer.class.php:161
msgid "Indicar la clave de la BBDD"
msgstr "Indicar la clau de la BBDD"
-#: ../../../../inc/Installer.class.php:153
+#: ../../../../inc/SP/Core/Installer.class.php:162
msgid "Clave del usuario administrador de la Base de Datos"
msgstr "Clau de l'usuari administrador de la Base de dades"
-#: ../../../../inc/Installer.class.php:157
+#: ../../../../inc/SP/Core/Installer.class.php:166
msgid "Indicar el nombre de la BBDD"
msgstr "Indicar el nom de la BBDD"
-#: ../../../../inc/Installer.class.php:158
+#: ../../../../inc/SP/Core/Installer.class.php:167
msgid "Nombre para la BBDD de la aplicación pej. syspass"
msgstr "Nom per a la BBDD de l'aplicació per exemple syspass"
-#: ../../../../inc/Installer.class.php:162
+#: ../../../../inc/SP/Core/Installer.class.php:171
msgid "El nombre de la BBDD no puede contener \".\""
msgstr "El nom de la BBDD no pot contenir \".\""
-#: ../../../../inc/Installer.class.php:163
+#: ../../../../inc/SP/Core/Installer.class.php:172
msgid "Elimine los puntos del nombre de la Base de Datos"
msgstr "Elimini els punts del nom de la Base de dades"
-#: ../../../../inc/Installer.class.php:167
+#: ../../../../inc/SP/Core/Installer.class.php:176
msgid "Indicar el servidor de la BBDD"
msgstr "Indicar el servidor de la BBDD"
-#: ../../../../inc/Installer.class.php:168
+#: ../../../../inc/SP/Core/Installer.class.php:177
msgid "Servidor donde se instalará la Base de Datos"
msgstr "Servidor on s'instal·larà la Base de dades"
-#: ../../../../inc/Installer.class.php:267
+#: ../../../../inc/SP/Core/Installer.class.php:245
+#: ../../../../inc/SP/Import/Migrate.class.php:123
+#: ../../../../inc/SP/Storage/DBConnectionFactory.class.php:86
+#: ../../../../inc/SP/Storage/DBConnectionFactory.class.php:88
+#: ../../../../inc/SP/Storage/DBConnectionFactory.class.php:102
+msgid "No es posible conectar con la BD"
+msgstr "No és possible connectar amb la BBDD"
+
+#: ../../../../inc/SP/Core/Installer.class.php:246
+#: ../../../../inc/SP/Import/Migrate.class.php:124
+#: ../../../../inc/SP/Storage/DBConnectionFactory.class.php:86
+#: ../../../../inc/SP/Storage/DBConnectionFactory.class.php:88
+msgid "Compruebe los datos de conexión"
+msgstr "Comprovi les dades de connexió"
+
+#: ../../../../inc/SP/Core/Installer.class.php:276
msgid "No es posible comprobar el usuario de sysPass"
msgstr "No és possible comprovar l'usuari de sysPass"
-#: ../../../../inc/Installer.class.php:268
+#: ../../../../inc/SP/Core/Installer.class.php:277
msgid "Compruebe los permisos del usuario de conexión a la BD"
msgstr "Comprovi els permisos de l'usuari de connexió a la BBDD"
-#: ../../../../inc/Installer.class.php:319
+#: ../../../../inc/SP/Core/Installer.class.php:328
msgid "El usuario de MySQL ya existe"
msgstr "L'usuari de MySQL ja existeix"
-#: ../../../../inc/Installer.class.php:320
+#: ../../../../inc/SP/Core/Installer.class.php:329
msgid "Indique un nuevo usuario o elimine el existente"
msgstr "Indiqui un nou usuari o elimini l'existent"
-#: ../../../../inc/Installer.class.php:333
+#: ../../../../inc/SP/Core/Installer.class.php:342
msgid "La BBDD ya existe"
msgstr "La BBDD ja existeix"
-#: ../../../../inc/Installer.class.php:334
+#: ../../../../inc/SP/Core/Installer.class.php:343
msgid "Indique una nueva Base de Datos o elimine la existente"
msgstr "Indiqui una nova Base de dades o elimini l'existent"
-#: ../../../../inc/Installer.class.php:343
-#: ../../../../inc/Installer.class.php:414
+#: ../../../../inc/SP/Core/Installer.class.php:352
+#: ../../../../inc/SP/Core/Installer.class.php:423
msgid "Error al crear la BBDD"
msgstr "Error en crear la BBDD"
-#: ../../../../inc/Installer.class.php:344
-#: ../../../../inc/Installer.class.php:355
+#: ../../../../inc/SP/Core/Installer.class.php:353
+#: ../../../../inc/SP/Core/Installer.class.php:364
msgid "Verifique los permisos del usuario de la Base de Datos"
msgstr "Verifiqui els permisos de l'usuari de la Base de dades"
-#: ../../../../inc/Installer.class.php:354
+#: ../../../../inc/SP/Core/Installer.class.php:363
msgid "Error al establecer permisos de la BBDD"
msgstr "Error en establir permisos de la BBDD"
-#: ../../../../inc/Installer.class.php:387
+#: ../../../../inc/SP/Core/Installer.class.php:395
msgid "El archivo de estructura de la BBDD no existe"
msgstr "L'arxiu d'estructura de la BBDD no existeix"
-#: ../../../../inc/Installer.class.php:388
+#: ../../../../inc/SP/Core/Installer.class.php:396
msgid "No es posible crear la BBDD de la aplicación. Descárguela de nuevo."
msgstr "No és possible crear la BBDD de l'aplicació. Descarregui-la de nou."
-#: ../../../../inc/Installer.class.php:396
+#: ../../../../inc/SP/Core/Installer.class.php:404
msgid "Error al seleccionar la BBDD"
msgstr "Error en seleccionar la BBDD"
-#: ../../../../inc/Installer.class.php:397
+#: ../../../../inc/SP/Core/Installer.class.php:405
msgid ""
"No es posible usar la Base de Datos para crear la estructura. Compruebe los "
"permisos y que no exista."
@@ -2069,412 +2697,820 @@ msgstr ""
"No és possible usar la Base de dades per crear l'estructura. Comprovi els "
"permisos i que no existeixi."
-#: ../../../../inc/Installer.class.php:415
+#: ../../../../inc/SP/Core/Installer.class.php:424
msgid "Error al crear la estructura de la Base de Datos."
msgstr "Error en crear l'estructura de la Base de dades."
-#: ../../../../inc/Installer.class.php:438
+#: ../../../../inc/SP/Core/Installer.class.php:447
msgid "Error al crear el grupo \"admin\""
msgstr "Error en crear el grup \"admin\""
-#: ../../../../inc/Installer.class.php:439
-#: ../../../../inc/Installer.class.php:472
-#: ../../../../inc/Installer.class.php:489
-#: ../../../../inc/Installer.class.php:502
+#: ../../../../inc/SP/Core/Installer.class.php:448
+#: ../../../../inc/SP/Core/Installer.class.php:481
+#: ../../../../inc/SP/Core/Installer.class.php:498
+#: ../../../../inc/SP/Core/Installer.class.php:511
msgid "Informe al desarrollador"
msgstr "Informe al desenvolupador"
-#: ../../../../inc/Installer.class.php:471
+#: ../../../../inc/SP/Core/Installer.class.php:480
msgid "Error al crear el perfil \"admin\""
msgstr "Error en crear el perfil \"admin\""
-#: ../../../../inc/Installer.class.php:488
+#: ../../../../inc/SP/Core/Installer.class.php:497
msgid "Error al crear el usuario \"admin\""
msgstr "Error en crear l'usuari \"admin\""
-#: ../../../../inc/Installer.class.php:501
+#: ../../../../inc/SP/Core/Installer.class.php:510
msgid "Error al actualizar la clave maestra del usuario \"admin\""
msgstr "Error en actualitzar la clau mestra de l'usuari \"admin\""
-#: ../../../../inc/Ldap.class.php:132 ../../../../inc/Ldap.class.php:136
-msgid "No es posible conectar con el servidor de LDAP"
-msgstr "No és possible connectar amb el servidor de LDAP"
-
-#: ../../../../inc/Ldap.class.php:161 ../../../../inc/Ldap.class.php:166
-msgid "Error al conectar (BIND)"
-msgstr "Error en connectar (BIND)"
-
-#: ../../../../inc/Ldap.class.php:189 ../../../../inc/Ldap.class.php:194
-msgid "Error al buscar objetos en DN base"
-msgstr "Error en buscar objectes en DN base"
-
-#: ../../../../inc/Ldap.class.php:217 ../../../../inc/Ldap.class.php:223
-#: ../../../../inc/Ldap.class.php:230 ../../../../inc/Ldap.class.php:235
-#: ../../../../inc/Ldap.class.php:240 ../../../../inc/Ldap.class.php:245
-msgid "Error al buscar RDN de grupo"
-msgstr "Error en buscar RDN de grup"
-
-#: ../../../../inc/Ldap.class.php:294 ../../../../inc/Ldap.class.php:300
-#: ../../../../inc/Ldap.class.php:315 ../../../../inc/Ldap.class.php:320
-msgid "Error al buscar el DN del usuario"
-msgstr "Error en buscar el DN de l'usuari"
-
-#: ../../../../inc/Ldap.class.php:307 ../../../../inc/Ldap.class.php:312
-msgid "Error al localizar el usuario en LDAP"
-msgstr "Error en localitzar l'usuari en LDAP"
-
-#: ../../../../inc/Ldap.class.php:389 ../../../../inc/Ldap.class.php:395
-#: ../../../../inc/LdapADS.class.php:103 ../../../../inc/LdapADS.class.php:108
-msgid "Error al buscar el grupo de usuarios"
-msgstr "Error en buscar el grup d'usuaris"
-
-#: ../../../../inc/Ldap.class.php:402
-msgid "Usuario verificado en grupo"
-msgstr "Usuari verificat en grup"
-
-#: ../../../../inc/LdapADS.class.php:112 ../../../../inc/LdapADS.class.php:117
-msgid "No se encontró el grupo con ese nombre"
-msgstr "No s'ha trobat el grup amb aquest nom"
-
-#: ../../../../inc/Log.class.php:88
-msgid "Vaciar Eventos"
-msgstr "Buidar Esdeveniments"
-
-#: ../../../../inc/Log.class.php:88
-#: ../../../../inc/themes/classic/eventlog.inc:98
-#: ../../../../inc/themes/material-blue/eventlog.inc:99
-msgid "Vaciar registro de eventos"
-msgstr "Buidar registre d'esdeveniments"
-
-#: ../../../../inc/Migrate.class.php:51
-msgid "Faltan parámetros"
-msgstr "Falten paràmetres"
-
-#: ../../../../inc/Migrate.class.php:148
-msgid "La versión no es compatible"
-msgstr "La versió no és compatible"
-
-#: ../../../../inc/Migrate.class.php:149
-msgid "Actualice a la última versión de phpPMS"
-msgstr "Actualitzi a l'última versió de phpPMS"
-
-#: ../../../../inc/Migrate.class.php:167
-msgid "Error al obtener la configuración"
-msgstr "Error en obtenir la configuració"
-
-#: ../../../../inc/Migrate.class.php:210 ../../../../inc/Migrate.class.php:223
-msgid "Error al vaciar tabla"
-msgstr "Error al vaciar tabla"
-
-#: ../../../../inc/Migrate.class.php:228
-msgid "Usuario actual no es administrador de la aplicación"
-msgstr "L'usuari actual no és administrador de l'aplicació"
-
-#: ../../../../inc/Migrate.class.php:273
-msgid "No es posible crear el cliente"
-msgstr "No és possible crear el client"
-
-#: ../../../../inc/Migrate.class.php:274
-msgid "Contacte con el desarrollador"
-msgstr "Contacti amb el desenvolupador"
-
-#: ../../../../inc/Migrate.class.php:278
-msgid "Importar Clientes"
-msgstr "Importar Clients"
-
-#: ../../../../inc/Migrate.class.php:280 ../../../../inc/Migrate.class.php:350
-#: ../../../../inc/Migrate.class.php:451 ../../../../inc/Migrate.class.php:524
-#: ../../../../inc/Migrate.class.php:632 ../../../../inc/Migrate.class.php:697
-#: ../../../../inc/Migrate.class.php:771 ../../../../inc/Migrate.class.php:861
-#: ../../../../inc/Migrate.class.php:932
-msgid "Registros"
-msgstr "Registres"
-
-#: ../../../../inc/Migrate.class.php:302
-msgid "Error al obtener los clientes"
-msgstr "Error en obtenir els clients"
-
-#: ../../../../inc/Migrate.class.php:344
-msgid "Error al obtener cuentas"
-msgstr "Error en obtenir comptes"
-
-#: ../../../../inc/Migrate.class.php:373
-msgid "Cliente no encontrado"
-msgstr "Client no trobat"
-
-#: ../../../../inc/Migrate.class.php:416
-msgid "Error al migrar cuenta"
-msgstr "Error al migrar compte"
-
-#: ../../../../inc/Migrate.class.php:445
-msgid "Error al obtener los grupos de cuentas"
-msgstr "Error en obtenir els grups de comptes"
-
-#: ../../../../inc/Migrate.class.php:449
-msgid "Importar Grupos de Cuentas"
-msgstr "Importar Grups de Comptes"
-
-#: ../../../../inc/Migrate.class.php:471
-msgid "Error al crear grupos de cuentas"
-msgstr "Error en crear grups de comptes"
-
-#: ../../../../inc/Migrate.class.php:518
-msgid "Error al obtener el historico de cuentas"
-msgstr "Error en obtenir el històric de comptes"
-
-#: ../../../../inc/Migrate.class.php:522
-msgid "Importar Histórico de Cuentas"
-msgstr "Importar Històric de Comptes"
-
-#: ../../../../inc/Migrate.class.php:591
-msgid "Error al crear historico de cuentas"
-msgstr "Error en crear històric de comptes"
-
-#: ../../../../inc/Migrate.class.php:626
-msgid "Error al obtener los archivos de cuentas"
-msgstr "Error en obtenir els arxius de comptes"
-
-#: ../../../../inc/Migrate.class.php:630
-msgid "Importar Archivos de Cuentas"
-msgstr "Importar Arxius de Comptes"
-
-#: ../../../../inc/Migrate.class.php:662
-msgid "Error al crear archivos de cuentas"
-msgstr "Error en crear arxius de comptes"
-
-#: ../../../../inc/Migrate.class.php:691
-msgid "Error al obtener las categorías de cuentas"
-msgstr "Error en obtenir les categories de comptes"
-
-#: ../../../../inc/Migrate.class.php:695
-msgid "Importar Categorías de Cuentas"
-msgstr "Importar Categorías de Cuentas"
-
-#: ../../../../inc/Migrate.class.php:717
-msgid "Error al crear categorías de cuentas"
-msgstr "Error en crear categories de comptes"
-
-#: ../../../../inc/Migrate.class.php:765
-msgid "Error al obtener los usuarios"
-msgstr "Error en obtenir els usuaris"
-
-#: ../../../../inc/Migrate.class.php:769
-msgid "Importar Usuarios"
-msgstr "Importar Usuaris"
-
-#: ../../../../inc/Migrate.class.php:826
-msgid "Error al crear usuarios"
-msgstr "Error en crear usuaris"
-
-#: ../../../../inc/Migrate.class.php:855
-msgid "Error al obtener los grupos de usuarios"
-msgstr "Error en obtenir els grups d'usuaris"
-
-#: ../../../../inc/Migrate.class.php:859
-msgid "Importar Grupos de Usuarios"
-msgstr "Importar Grups d'Usuaris"
-
-#: ../../../../inc/Migrate.class.php:885
-msgid "Error al crear los grupos de usuarios"
-msgstr "Error en crear els grups d'usuaris"
-
-#: ../../../../inc/Migrate.class.php:930
-msgid "Importar Configuración"
-msgstr "Importar Configuració"
-
-#: ../../../../inc/Profile.class.php:69 ../../../../inc/Profile.class.php:123
-#: ../../../../inc/Profile.class.php:128
-msgid "Migrar Perfiles"
-msgstr "Migrar Perfils"
-
-#: ../../../../inc/Profile.class.php:69
-msgid "Error al obtener perfiles"
-msgstr "Error en obtenir perfils"
-
-#: ../../../../inc/Profile.class.php:126
-msgid "Operación realizada correctamente"
-msgstr "Operación realizada correctamente"
-
-#: ../../../../inc/Profile.class.php:128
-msgid "Fallo al realizar la operación"
-msgstr "Fallada en realitzar l'operació"
-
-#: ../../../../inc/ProfileBase.class.php:164
-msgid "Datos de perfil incorrectos"
-msgstr "Dades de perfil incorrectes"
-
-#: ../../../../inc/ProfileBase.class.php:550
-#: ../../../../web/UsersMgmtC.class.php:275
-msgid "Eliminar Perfil"
-msgstr "Eliminar Perfil"
-
-#: ../../../../inc/ProfileBase.class.php:593
-msgid "Modificar Perfil"
-msgstr "Modificar Perfil"
-
-#: ../../../../inc/SyspassImport.class.php:111
-#: ../../../../inc/SyspassImport.class.php:136
-#: ../../../../inc/SyspassImport.class.php:161
-msgid "Formato de XML inválido"
-msgstr "Format de XML invàlid"
-
-#: ../../../../inc/SyspassImport.class.php:111
-msgid "No hay categorías para importar"
-msgstr "No hi ha categories per importar"
-
-#: ../../../../inc/SyspassImport.class.php:136
-msgid "No hay clientes para importar"
-msgstr "No hi ha clients per importar"
-
-#: ../../../../inc/SyspassImport.class.php:161
-msgid "No hay cuentas para importar"
-msgstr "No hi ha comptes per importar"
-
-#: ../../../../inc/Template.class.php:91
+#: ../../../../inc/SP/Core/Template.class.php:113
+#: ../../../../inc/SP/Core/Template.class.php:114
+#: ../../../../inc/SP/Html/DataGrid/DataGridBase.class.php:222
#, php-format
msgid "No es posible obtener la plantilla \"%s\" : %s"
msgstr "No és possible obtenir la plantilla \"%s\" : %s"
-#: ../../../../inc/Template.class.php:130
+#: ../../../../inc/SP/Core/Template.class.php:152
#, php-format
msgid "No es posible obtener la variable \"%s\""
msgstr "No és possible obtenir la variable \"%s\""
-#: ../../../../inc/Template.class.php:173
+#: ../../../../inc/SP/Core/Template.class.php:195
#, php-format
msgid "No es posible destruir la variable \"%s\""
msgstr "No és possible destruir la variable \"%s\""
-#: ../../../../inc/Upgrade.class.php:51
+#: ../../../../inc/SP/Core/Upgrade.class.php:59
msgid "Error al aplicar la actualización de la Base de Datos"
msgstr "Error en aplicar l'actualització de la Base de dades"
-#: ../../../../inc/Upgrade.class.php:52 ../../../../inc/Upgrade.class.php:58
+#: ../../../../inc/SP/Core/Upgrade.class.php:60
+#: ../../../../inc/SP/Core/Upgrade.class.php:66
msgid "Compruebe el registro de eventos para más detalles"
msgstr "Comprovi el registre d'esdeveniments per a més detalls"
-#: ../../../../inc/Upgrade.class.php:52 ../../../../inc/Upgrade.class.php:58
+#: ../../../../inc/SP/Core/Upgrade.class.php:60
+#: ../../../../inc/SP/Core/Upgrade.class.php:66
#: ../../../../inc/themes/classic/login.inc:32
-#: ../../../../inc/themes/material-blue/2fa.inc:24
+#: ../../../../inc/themes/material-blue/login-2fa.inc:24
#: ../../../../inc/themes/material-blue/login.inc:65
msgid "Acceder"
msgstr "Accedir"
-#: ../../../../inc/Upgrade.class.php:57
+#: ../../../../inc/SP/Core/Upgrade.class.php:65
msgid "Error al aplicar la actualización auxiliar"
msgstr "Error en aplicar l'actualització auxiliar"
-#: ../../../../inc/Upgrade.class.php:74
+#: ../../../../inc/SP/Core/Upgrade.class.php:82
msgid "Actualizar BBDD"
msgstr "Actualitzar BBDD"
-#: ../../../../inc/Upgrade.class.php:127
+#: ../../../../inc/SP/Core/Upgrade.class.php:143
msgid "No es necesario actualizar la Base de Datos."
msgstr "No és necessari actualitzar la Base de dades."
-#: ../../../../inc/Upgrade.class.php:135
+#: ../../../../inc/SP/Core/Upgrade.class.php:155
msgid "Error al aplicar la actualización de la Base de Datos."
msgstr "Error en aplicar l'actualització de la Base de dades."
-#: ../../../../inc/Upgrade.class.php:144
+#: ../../../../inc/SP/Core/Upgrade.class.php:164
msgid "Actualización de la Base de Datos realizada correctamente."
msgstr "Actualització de la Base de dades realitzada correctament."
-#: ../../../../inc/Upgrade.class.php:221
+#: ../../../../inc/SP/Core/Upgrade.class.php:241
msgid "Actualizar Configuración"
msgstr "Actualitzar Configuració"
-#: ../../../../inc/Upgrade.class.php:221
+#: ../../../../inc/SP/Core/Upgrade.class.php:241
msgid "Actualización de la Configuración realizada correctamente."
msgstr "Actualització de la Configuració realitzada correctament."
-#: ../../../../inc/UserBase.class.php:388
-#: ../../../../inc/UserBase.class.php:532
+#: ../../../../inc/SP/Core/XmlExport.class.php:125
+msgid "Exportar XML"
+msgstr "Exportar XML"
+
+#: ../../../../inc/SP/Core/XmlExport.class.php:138
+msgid "Error al realizar la exportación de cuentas"
+msgstr "Error en realitzar l'exportació de comptes"
+
+#: ../../../../inc/SP/Core/XmlExport.class.php:146
+msgid "Exportación de cuentas realizada correctamente"
+msgstr "Exportació de comptes realitzada correctament"
+
+#: ../../../../inc/SP/Core/XmlExport.class.php:432
+msgid "Error al crear el archivo XML"
+msgstr "Error en crear l'arxiu XML"
+
+#: ../../../../inc/SP/Http/XMLRPCResponseParse.class.php:68
+msgid "Respuesta XML-RPC inválida"
+msgstr ""
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:115
+#, php-format
+msgid "El número de campos es incorrecto (%d)"
+msgstr "El nombre de camps és incorrecte (%d)"
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:116
+#, php-format
+msgid "Compruebe el formato del archivo CSV en línea %s"
+msgstr "Comprovi el format de l'arxiu CSV en línia %s"
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:147
+msgid "Error importando cuenta"
+msgstr "Error important compte"
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:148
+#, php-format
+msgid "Error procesando línea %s"
+msgstr "Error processant línia %s"
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:151
+#, php-format
+msgid "Cuenta importada: %s"
+msgstr "Compte importat: %s"
+
+#: ../../../../inc/SP/Import/FileImport.class.php:108
+msgid "Archivo no subido correctamente"
+msgstr "Arxiu no pujat correctament"
+
+#: ../../../../inc/SP/Import/FileImport.class.php:108
+msgid "Verifique los permisos del usuario del servidor web"
+msgstr "Verifiqui els permisos de l'usuari del servidor web"
+
+#: ../../../../inc/SP/Import/FileImport.class.php:119
+msgid "Compruebe la extensión del archivo"
+msgstr "Comprovi l'extensió de l'arxiu"
+
+#: ../../../../inc/SP/Import/FileImport.class.php:135
+msgid "Compruebe la configuración de PHP para subir archivos"
+msgstr "Comprovi la configuració de PHP per pujar arxius"
+
+#: ../../../../inc/SP/Import/FileImport.class.php:153
+#: ../../../../inc/SP/Import/FileImport.class.php:171
+msgid "Compruebe los permisos del directorio temporal"
+msgstr "Comprovi els permisos del directori temporal"
+
+#: ../../../../inc/SP/Import/Import.class.php:115
+msgid "Tipo mime no soportado"
+msgstr "Tipus mime no suportat"
+
+#: ../../../../inc/SP/Import/Import.class.php:116
+msgid "Compruebe el formato del archivo"
+msgstr "Comprovi el format de l'arxiu"
+
+#: ../../../../inc/SP/Import/Import.class.php:126
+#: ../../../../inc/themes/classic/inc/Icons.class.php:66
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:64
+#: ../../../../inc/themes/classic/backup.inc:47
+#: ../../../../inc/themes/classic/backup.inc:51
+#: ../../../../inc/themes/classic/backup.inc:115
+#: ../../../../inc/themes/classic/backup.inc:119
+#: ../../../../inc/themes/classic/encryption.inc:90
+#: ../../../../inc/themes/classic/encryption.inc:94
+#: ../../../../inc/themes/classic/encryption.inc:159
+#: ../../../../inc/themes/classic/encryption.inc:163
+#: ../../../../inc/themes/classic/import.inc:12
+#: ../../../../inc/themes/classic/import.inc:33
+#: ../../../../inc/themes/classic/import.inc:86
+#: ../../../../inc/themes/classic/import.inc:90
+#: ../../../../inc/themes/classic/import.inc:117
+#: ../../../../inc/themes/classic/import.inc:139
+#: ../../../../inc/themes/classic/import.inc:153
+#: ../../../../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/classic/wiki.inc:107
+#: ../../../../inc/themes/classic/wiki.inc:127
+#: ../../../../inc/themes/classic/wiki.inc:150
+#: ../../../../inc/themes/classic/wiki.inc:173
+#: ../../../../inc/themes/classic/wiki.inc:200
+#: ../../../../inc/themes/material-blue/backup.inc:53
+#: ../../../../inc/themes/material-blue/encryption.inc:110
+#: ../../../../inc/themes/material-blue/encryption.inc:184
+#: ../../../../inc/themes/material-blue/import.inc:103
+#: ../../../../inc/themes/material-blue/js-common.inc:11
+msgid "Ayuda"
+msgstr "Ajuda"
+
+#: ../../../../inc/SP/Import/Import.class.php:133
+#: ../../../../inc/SP/Import/Import.class.php:139
+#: ../../../../inc/SP/Import/Migrate.class.php:100
+msgid "Importación finalizada"
+msgstr "Importació finalitzada"
+
+#: ../../../../inc/SP/Import/Migrate.class.php:60
+msgid "Faltan parámetros"
+msgstr "Falten paràmetres"
+
+#: ../../../../inc/SP/Import/Migrate.class.php:157
+msgid "La versión no es compatible"
+msgstr "La versió no és compatible"
+
+#: ../../../../inc/SP/Import/Migrate.class.php:158
+msgid "Actualice a la última versión de phpPMS"
+msgstr "Actualitzi a l'última versió de phpPMS"
+
+#: ../../../../inc/SP/Import/Migrate.class.php:176
+msgid "Error al obtener la configuración"
+msgstr "Error en obtenir la configuració"
+
+#: ../../../../inc/SP/Import/Migrate.class.php:222
+#: ../../../../inc/SP/Import/Migrate.class.php:239
+msgid "Error al vaciar tabla"
+msgstr "Error al vaciar tabla"
+
+#: ../../../../inc/SP/Import/Migrate.class.php:244
+msgid "Usuario actual no es administrador de la aplicación"
+msgstr "L'usuari actual no és administrador de l'aplicació"
+
+#: ../../../../inc/SP/Import/Migrate.class.php:291
+msgid "No es posible crear el cliente"
+msgstr "No és possible crear el client"
+
+#: ../../../../inc/SP/Import/Migrate.class.php:292
+msgid "Contacte con el desarrollador"
+msgstr "Contacti amb el desenvolupador"
+
+#: ../../../../inc/SP/Import/Migrate.class.php:296
+msgid "Importar Clientes"
+msgstr "Importar Clients"
+
+#: ../../../../inc/SP/Import/Migrate.class.php:298
+#: ../../../../inc/SP/Import/Migrate.class.php:368
+#: ../../../../inc/SP/Import/Migrate.class.php:471
+#: ../../../../inc/SP/Import/Migrate.class.php:548
+#: ../../../../inc/SP/Import/Migrate.class.php:658
+#: ../../../../inc/SP/Import/Migrate.class.php:725
+#: ../../../../inc/SP/Import/Migrate.class.php:801
+#: ../../../../inc/SP/Import/Migrate.class.php:893
+#: ../../../../inc/SP/Import/Migrate.class.php:966
+msgid "Registros"
+msgstr "Registres"
+
+#: ../../../../inc/SP/Import/Migrate.class.php:320
+msgid "Error al obtener los clientes"
+msgstr "Error en obtenir els clients"
+
+#: ../../../../inc/SP/Import/Migrate.class.php:362
+msgid "Error al obtener cuentas"
+msgstr "Error en obtenir comptes"
+
+#: ../../../../inc/SP/Import/Migrate.class.php:391
+msgid "Cliente no encontrado"
+msgstr "Client no trobat"
+
+#: ../../../../inc/SP/Import/Migrate.class.php:436
+msgid "Error al migrar cuenta"
+msgstr "Error al migrar compte"
+
+#: ../../../../inc/SP/Import/Migrate.class.php:465
+msgid "Error al obtener los grupos de cuentas"
+msgstr "Error en obtenir els grups de comptes"
+
+#: ../../../../inc/SP/Import/Migrate.class.php:469
+msgid "Importar Grupos de Cuentas"
+msgstr "Importar Grups de Comptes"
+
+#: ../../../../inc/SP/Import/Migrate.class.php:495
+msgid "Error al crear grupos de cuentas"
+msgstr "Error en crear grups de comptes"
+
+#: ../../../../inc/SP/Import/Migrate.class.php:542
+msgid "Error al obtener el historico de cuentas"
+msgstr "Error en obtenir el històric de comptes"
+
+#: ../../../../inc/SP/Import/Migrate.class.php:546
+msgid "Importar Histórico de Cuentas"
+msgstr "Importar Històric de Comptes"
+
+#: ../../../../inc/SP/Import/Migrate.class.php:617
+msgid "Error al crear historico de cuentas"
+msgstr "Error en crear històric de comptes"
+
+#: ../../../../inc/SP/Import/Migrate.class.php:652
+msgid "Error al obtener los archivos de cuentas"
+msgstr "Error en obtenir els arxius de comptes"
+
+#: ../../../../inc/SP/Import/Migrate.class.php:656
+msgid "Importar Archivos de Cuentas"
+msgstr "Importar Arxius de Comptes"
+
+#: ../../../../inc/SP/Import/Migrate.class.php:690
+msgid "Error al crear archivos de cuentas"
+msgstr "Error en crear arxius de comptes"
+
+#: ../../../../inc/SP/Import/Migrate.class.php:719
+msgid "Error al obtener las categorías de cuentas"
+msgstr "Error en obtenir les categories de comptes"
+
+#: ../../../../inc/SP/Import/Migrate.class.php:723
+msgid "Importar Categorías de Cuentas"
+msgstr "Importar Categorías de Cuentas"
+
+#: ../../../../inc/SP/Import/Migrate.class.php:747
+msgid "Error al crear categorías de cuentas"
+msgstr "Error en crear categories de comptes"
+
+#: ../../../../inc/SP/Import/Migrate.class.php:795
+msgid "Error al obtener los usuarios"
+msgstr "Error en obtenir els usuaris"
+
+#: ../../../../inc/SP/Import/Migrate.class.php:799
+msgid "Importar Usuarios"
+msgstr "Importar Usuaris"
+
+#: ../../../../inc/SP/Import/Migrate.class.php:858
+msgid "Error al crear usuarios"
+msgstr "Error en crear usuaris"
+
+#: ../../../../inc/SP/Import/Migrate.class.php:887
+msgid "Error al obtener los grupos de usuarios"
+msgstr "Error en obtenir els grups d'usuaris"
+
+#: ../../../../inc/SP/Import/Migrate.class.php:891
+msgid "Importar Grupos de Usuarios"
+msgstr "Importar Grups d'Usuaris"
+
+#: ../../../../inc/SP/Import/Migrate.class.php:919
+msgid "Error al crear los grupos de usuarios"
+msgstr "Error en crear els grups d'usuaris"
+
+#: ../../../../inc/SP/Import/Migrate.class.php:964
+msgid "Importar Configuración"
+msgstr "Importar Configuració"
+
+#: ../../../../inc/SP/Import/SyspassImport.class.php:114
+#: ../../../../inc/SP/Import/SyspassImport.class.php:139
+#: ../../../../inc/SP/Import/SyspassImport.class.php:164
+msgid "Formato de XML inválido"
+msgstr "Format de XML invàlid"
+
+#: ../../../../inc/SP/Import/SyspassImport.class.php:114
+msgid "No hay categorías para importar"
+msgstr "No hi ha categories per importar"
+
+#: ../../../../inc/SP/Import/SyspassImport.class.php:139
+msgid "No hay clientes para importar"
+msgstr "No hi ha clients per importar"
+
+#: ../../../../inc/SP/Import/SyspassImport.class.php:164
+msgid "No hay cuentas para importar"
+msgstr "No hi ha comptes per importar"
+
+#: ../../../../inc/SP/Import/XmlImport.class.php:66
+msgid "Formato detectado"
+msgstr "Format detectat"
+
+#: ../../../../inc/SP/Import/XmlImportBase.class.php:82
+msgid "No es posible procesar el archivo XML"
+msgstr "No és possible processar l'arxiu XML"
+
+#: ../../../../inc/SP/Import/XmlImportBase.class.php:110
+msgid "Archivo XML no soportado"
+msgstr "Arxiu XML no suportat"
+
+#: ../../../../inc/SP/Import/XmlImportBase.class.php:111
+msgid "No es posible detectar la aplicación que exportó los datos"
+msgstr "No és possible detectar l'aplicació que va exportar les dades"
+
+#: ../../../../inc/SP/Log/Email.class.php:67
+#: ../../../../inc/SP/Mgmt/User/UserUtil.class.php:196
+msgid "N/D"
+msgstr "N/D"
+
+#: ../../../../inc/SP/Log/Email.class.php:69
+msgid "Realizado por"
+msgstr "Realitzat per"
+
+#: ../../../../inc/SP/Log/Email.class.php:86
+msgid "Enviar Email"
+msgstr "Enviar Email"
+
+#: ../../../../inc/SP/Log/Email.class.php:90
+msgid "Correo enviado"
+msgstr "Correu enviat"
+
+#: ../../../../inc/SP/Log/Email.class.php:92
+msgid "Error al enviar correo"
+msgstr "Error en enviar correu"
+
+#: ../../../../inc/SP/Log/Email.class.php:96
+msgid "Destinatario"
+msgstr "Destinatari"
+
+#: ../../../../inc/SP/Log/Email.class.php:99
+msgid "CC"
+msgstr "CC"
+
+#: ../../../../inc/SP/Log/Log.class.php:104
+msgid "Vaciar Eventos"
+msgstr "Buidar Esdeveniments"
+
+#: ../../../../inc/SP/Log/Log.class.php:104
+#: ../../../../inc/themes/classic/eventlog.inc:105
+#: ../../../../inc/themes/material-blue/eventlog.inc:108
+msgid "Vaciar registro de eventos"
+msgstr "Buidar registre d'esdeveniments"
+
+#: ../../../../inc/SP/Mgmt/Category.class.php:58
+msgid "Categoría en uso por:"
+msgstr "Categoria en ús per:"
+
+#: ../../../../inc/SP/Mgmt/Category.class.php:70
+msgid "Error al eliminar la categoría"
+msgstr "Error en eliminar la categoria"
+
+#: ../../../../inc/SP/Mgmt/Category.class.php:154
+#: ../../../../inc/SP/Mgmt/Category.class.php:332
+msgid "Nombre de categoría duplicado"
+msgstr "Nom de categoria duplicat"
+
+#: ../../../../inc/SP/Mgmt/Category.class.php:170
+msgid "Error al actualizar la categoría"
+msgstr "Error en actualitzar la categoria"
+
+#: ../../../../inc/SP/Mgmt/Category.class.php:173
+msgid "Modificar Categoría"
+msgstr "Modificar Categoria"
+
+#: ../../../../inc/SP/Mgmt/Category.class.php:343
+msgid "Error al crear la categoría"
+msgstr "Error en crear la categoria"
+
+#: ../../../../inc/SP/Mgmt/CustomFields.class.php:331
+msgid "Actualizando datos encriptados"
+msgstr "Actualitzant dades encriptades"
+
+#: ../../../../inc/SP/Mgmt/CustomFields.class.php:360
+msgid "Registros no actualizados"
+msgstr "Registres no actualitzats"
+
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:87
+msgid "Texto"
+msgstr "Text"
+
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:90
+#: ../../../../inc/themes/classic/wikipage.inc:24
+#: ../../../../inc/themes/material-blue/wikipage.inc:24
+msgid "Fecha"
+msgstr "Data"
+
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:91
+msgid "Número"
+msgstr "Nombre"
+
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:92
+#: ../../../../inc/themes/classic/inc/Icons.class.php:60
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:58
+#: ../../../../inc/themes/classic/passreset.inc:22
+#: ../../../../inc/themes/classic/users.inc:61
+#: ../../../../inc/themes/material-blue/users.inc:72
+msgid "Email"
+msgstr "Email"
+
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:93
+msgid "Teléfono"
+msgstr "Telèfon"
+
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:94
+msgid "Link"
+msgstr "Enllaç"
+
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:95
+msgid "Color"
+msgstr "Color"
+
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:109
+#: ../../../../inc/themes/classic/profiles.inc:98
+#: ../../../../inc/themes/material-blue/profiles.inc:121
+msgid "Categorías"
+msgstr "Categories"
+
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:110
+#: ../../../../inc/themes/classic/profiles.inc:103
+#: ../../../../inc/themes/material-blue/profiles.inc:126
+msgid "Clientes"
+msgstr "Clients"
+
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:112
+#: ../../../../inc/themes/classic/account.inc:152
+#: ../../../../inc/themes/classic/profiles.inc:89
+#: ../../../../inc/themes/material-blue/account.inc:190
+#: ../../../../inc/themes/material-blue/profiles.inc:111
+msgid "Grupos"
+msgstr "Grups"
+
+#: ../../../../inc/SP/Mgmt/Customer.class.php:58
+#: ../../../../inc/SP/Mgmt/Customer.class.php:322
+msgid "Cliente duplicado"
+msgstr "Client duplicat"
+
+#: ../../../../inc/SP/Mgmt/Customer.class.php:77
+msgid "Error al actualizar el cliente"
+msgstr "Error en actualitzar el client"
+
+#: ../../../../inc/SP/Mgmt/Customer.class.php:80
+msgid "Actualizar Cliente"
+msgstr "Actualitzar Client"
+
+#: ../../../../inc/SP/Mgmt/Customer.class.php:163
+msgid "Cliente en uso por:"
+msgstr "Client en ús per:"
+
+#: ../../../../inc/SP/Mgmt/Customer.class.php:175
+msgid "Error al eliminar el cliente"
+msgstr "Error en eliminar el client"
+
+#: ../../../../inc/SP/Mgmt/Customer.class.php:337
+msgid "Error al crear el cliente"
+msgstr "Error en crear el client"
+
+#: ../../../../inc/SP/Mgmt/Files.class.php:78
+#, fuzzy
+msgid "Archivo subido"
+msgstr "Arxiu guardat"
+
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:136
+#, fuzzy
+msgid "Enlace ya creado"
+msgstr "Enllaç a Wiki"
+
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:152
+#, fuzzy
+msgid "Nuevo Enlace"
+msgstr "Nova Clau"
+
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:197
+#, fuzzy
+msgid "Enlace visualizado"
+msgstr "Contrasenya actualitzada"
+
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:230
+#, fuzzy
+msgid "Actualizar Enlace"
+msgstr "Actualitzar Compte"
+
+#: ../../../../inc/SP/Mgmt/PublicLinkUtil.class.php:87
+#: ../../../../inc/SP/Mgmt/PublicLinkUtil.class.php:144
+msgid "ON"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/PublicLinkUtil.class.php:87
+#: ../../../../inc/SP/Mgmt/PublicLinkUtil.class.php:144
+msgid "OFF"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/User/Groups.class.php:168
+msgid "Error al añadir los usuarios del grupo"
+msgstr "Error en afegir els usuaris del grup"
+
+#: ../../../../inc/SP/Mgmt/User/Groups.class.php:276
+msgid "Error al actualizar los usuarios del grupo"
+msgstr "Error en actualitzar els usuaris del grup"
+
+#: ../../../../inc/SP/Mgmt/User/Groups.class.php:400
+msgid "Error al eliminar los usuarios del grupo"
+msgstr "Error en eliminar els usuaris del grup"
+
+#: ../../../../inc/SP/Mgmt/User/Profile.class.php:48
+msgid "Migrar Perfiles"
+msgstr "Migrar Perfils"
+
+#: ../../../../inc/SP/Mgmt/User/Profile.class.php:80
+msgid "Error al obtener perfiles"
+msgstr "Error en obtenir perfils"
+
+#: ../../../../inc/SP/Mgmt/User/Profile.class.php:137
+msgid "Operación realizada correctamente"
+msgstr "Operación realizada correctamente"
+
+#: ../../../../inc/SP/Mgmt/User/Profile.class.php:139
+msgid "Fallo al realizar la operación"
+msgstr "Fallada en realitzar l'operació"
+
+#: ../../../../inc/SP/Mgmt/User/ProfileBase.class.php:611
+msgid "Modificar Perfil"
+msgstr "Modificar Perfil"
+
+#: ../../../../inc/SP/Mgmt/User/UserBase.class.php:398
+#: ../../../../inc/SP/Mgmt/User/UserBase.class.php:548
msgid "No se pudo realizar la petición de cambio de clave."
msgstr "No s'ha pogut realitzar la petició de canvi de clau."
-#: ../../../../inc/UserBase.class.php:527
+#: ../../../../inc/SP/Mgmt/User/UserBase.class.php:543
msgid "Modificar Usuario"
msgstr "Modificar Usuari"
-#: ../../../../inc/UserBase.class.php:594
-#: ../../../../web/UsersMgmtC.class.php:151
-msgid "Eliminar Usuario"
-msgstr "Eliminar Usuari"
-
-#: ../../../../inc/UserLdap.class.php:68
-#: ../../../../web/UsersMgmtC.class.php:109
+#: ../../../../inc/SP/Mgmt/User/UserLdap.class.php:74
+#: ../../../../inc/themes/classic/inc/Icons.class.php:55
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:53
#: ../../../../inc/themes/classic/users.inc:28
-#: ../../../../inc/themes/material-blue/users.inc:34
+#: ../../../../inc/themes/material-blue/users.inc:35
msgid "Usuario de LDAP"
msgstr "Usuari de LDAP"
-#: ../../../../inc/UserLdap.class.php:78
+#: ../../../../inc/SP/Mgmt/User/UserLdap.class.php:88
msgid "Activación Cuenta"
msgstr "Activació Comptes"
-#: ../../../../inc/UserLdap.class.php:79
+#: ../../../../inc/SP/Mgmt/User/UserLdap.class.php:89
msgid "Su cuenta está pendiente de activación."
msgstr "El seu compte està pendent d'activació."
-#: ../../../../inc/UserLdap.class.php:80
+#: ../../../../inc/SP/Mgmt/User/UserLdap.class.php:90
msgid "En breve recibirá un email de confirmación."
msgstr "En breu rebrà un email de confirmació."
-#: ../../../../inc/UserLdap.class.php:86
+#: ../../../../inc/SP/Mgmt/User/UserLdap.class.php:96
msgid "Nuevo usuario de LDAP"
msgstr "Nou usuari de LDAP"
-#: ../../../../inc/UserMigrate.class.php:113
+#: ../../../../inc/SP/Mgmt/User/UserMigrate.class.php:125
msgid "Migrar Grupos"
msgstr "Migrar Grups"
-#: ../../../../inc/UserMigrate.class.php:113
+#: ../../../../inc/SP/Mgmt/User/UserMigrate.class.php:125
msgid "Error al migrar grupo del usuario"
msgstr "Error al migrar grup de l'usuari"
-#: ../../../../inc/Util.class.php:119
+#: ../../../../inc/SP/Util/Checks.class.php:86
msgid "Versión de PHP requerida >= "
msgstr "Versió de PHP requerida >="
-#: ../../../../inc/Util.class.php:120
+#: ../../../../inc/SP/Util/Checks.class.php:87
msgid ""
"Actualice la versión de PHP para que la aplicación funcione correctamente"
msgstr "Actualitzi la versió de PHP perquè l'aplicació funcioni correctament"
-#: ../../../../inc/Util.class.php:156
+#: ../../../../inc/SP/Util/Checks.class.php:123
#: ../../../../inc/themes/classic/ldap.inc:212
-#: ../../../../inc/themes/material-blue/ldap.inc:238
+#: ../../../../inc/themes/material-blue/ldap.inc:240
msgid "Módulo no disponible"
msgstr "Mòdul no disponible"
-#: ../../../../inc/Util.class.php:157
+#: ../../../../inc/SP/Util/Checks.class.php:124
msgid "Sin este módulo la aplicación puede no funcionar correctamente."
msgstr "Sense aquest mòdul l'aplicació pot no funcionar correctament."
-#: ../../../../inc/XmlExport.class.php:127
-msgid "Exportar XML"
-msgstr "Exportar XML"
+#: ../../../../inc/SP/Util/Connection.class.php:121
+#, fuzzy
+msgid "Socket no inicializado"
+msgstr "Sessió finalitzada"
-#: ../../../../inc/XmlExport.class.php:412
-msgid "Error al crear el archivo XML"
-msgstr "Error en crear l'arxiu XML"
+#: ../../../../inc/SP/Util/Connection.class.php:128
+#, fuzzy
+msgid "Error al enviar datos"
+msgstr "Error en enviar correu"
-#: ../../../../inc/XmlImport.class.php:63
-msgid "Formato detectado"
-msgstr "Format detectat"
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApi.class.php:69
+#, fuzzy
+msgid "Fallo de autentificación"
+msgstr "Autenticació"
-#: ../../../../inc/XmlImportBase.class.php:80
-msgid "No es posible procesar el archivo XML"
-msgstr "No és possible processar l'arxiu XML"
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApiBase.class.php:175
+#, fuzzy
+msgid "Error al realizar la consulta"
+msgstr "Error en crear el compte"
-#: ../../../../inc/XmlImportBase.class.php:108
-msgid "Archivo XML no soportado"
-msgstr "Arxiu XML no suportat"
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApiBase.class.php:212
+msgid "URL de conexión no establecida"
+msgstr ""
-#: ../../../../inc/XmlImportBase.class.php:109
-msgid "No es posible detectar la aplicación que exportó los datos"
-msgstr "No és possible detectar l'aplicació que va exportar les dades"
+#: ../../../../inc/themes/classic/inc/Icons.class.php:47
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:45
+#: ../../../../inc/themes/classic/profiles.inc:41
+msgid "Añadir"
+msgstr "Afegir"
+
+#: ../../../../inc/themes/classic/inc/Icons.class.php:48
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:46
+#, fuzzy
+msgid "Ver Detalles"
+msgstr "Veure Detalls de Perfil"
+
+#: ../../../../inc/themes/classic/inc/Icons.class.php:50
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:48
+#: ../../../../inc/themes/classic/profiles.inc:32
+#: ../../../../inc/themes/material-blue/profiles.inc:47
+msgid "Editar"
+msgstr "Editar"
+
+#: ../../../../inc/themes/classic/inc/Icons.class.php:51
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:49
+#: ../../../../inc/themes/material-blue/profiles.inc:57
+msgid "Eliminar"
+msgstr "Eliminar"
+
+#: ../../../../inc/themes/classic/inc/Icons.class.php:52
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:50
+#: ../../../../inc/themes/classic/passreset.inc:52
+msgid "Cambiar Clave"
+msgstr "Canviar Clau"
+
+#: ../../../../inc/themes/classic/inc/Icons.class.php:54
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:52
+msgid "Admin Cuentas"
+msgstr "Admin Comptes"
+
+#: ../../../../inc/themes/classic/inc/Icons.class.php:56
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:54
+#: ../../../../inc/themes/classic/users.inc:113
+#: ../../../../inc/themes/material-blue/users.inc:152
+#: ../../../../inc/themes/material-blue/users.inc:155
+msgid "Deshabilitado"
+msgstr "Deshabilitat"
+
+#: ../../../../inc/themes/classic/inc/Icons.class.php:58
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:56
+#, fuzzy
+msgid "Copiar"
+msgstr "Copiar Clau"
+
+#: ../../../../inc/themes/classic/inc/Icons.class.php:63
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:61
+#: ../../../../inc/themes/classic/account-actions.inc:49
+#: ../../../../inc/themes/classic/account-editpass.inc:45
+#: ../../../../inc/themes/classic/passreset.inc:46
+#: ../../../../inc/themes/material-blue/error.inc:22
+#: ../../../../inc/themes/material-blue/error.inc:23
+#: ../../../../inc/themes/material-blue/passreset.inc:48
+msgid "Volver"
+msgstr "Tornar"
+
+#: ../../../../inc/themes/classic/inc/Icons.class.php:65
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:63
+#: ../../../../inc/themes/classic/account-editpass.inc:50
+#: ../../../../inc/themes/classic/encryption.inc:99
+#: ../../../../inc/themes/classic/mail.inc:107
+#: ../../../../inc/themes/classic/preferences-security.inc:57
+#: ../../../../inc/themes/classic/preferences-site.inc:130
+#: ../../../../inc/themes/material-blue/account-actions.inc:94
+msgid "Guardar"
+msgstr "Desar"
+
+#: ../../../../inc/themes/classic/inc/Icons.class.php:67
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:65
+#: ../../../../inc/themes/classic/datatabs-grid.inc:38
+#: ../../../../inc/themes/classic/searchbox.inc:5
+#: ../../../../inc/themes/material-blue/datatabs-grid.inc:38
+#: ../../../../inc/themes/material-blue/searchbox.inc:12
+msgid "Limpiar"
+msgstr "Netejar"
+
+#: ../../../../inc/themes/classic/inc/Icons.class.php:68
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:66
+msgid "Realizar"
+msgstr "Realitzar"
+
+#: ../../../../inc/themes/classic/inc/Icons.class.php:69
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:67
+#, fuzzy
+msgid "Descargar"
+msgstr "Descarregar Actual"
+
+#: ../../../../inc/themes/classic/inc/Icons.class.php:73
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:71
+#: ../../../../inc/themes/classic/eventlog.inc:93
+#: ../../../../inc/themes/classic/search.inc:178
+#: ../../../../inc/themes/material-blue/eventlog.inc:95
+msgid "Página anterior"
+msgstr "Pàgina anterior"
+
+#: ../../../../inc/themes/classic/inc/Icons.class.php:74
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:72
+#: ../../../../inc/themes/classic/eventlog.inc:98
+#: ../../../../inc/themes/classic/search.inc:183
+#: ../../../../inc/themes/material-blue/eventlog.inc:100
+msgid "Página siguiente"
+msgstr "Pàgina següent"
+
+#: ../../../../inc/themes/classic/inc/Icons.class.php:75
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:73
+#: ../../../../inc/themes/classic/eventlog.inc:91
+#: ../../../../inc/themes/classic/search.inc:176
+#: ../../../../inc/themes/material-blue/eventlog.inc:93
+msgid "Primera página"
+msgstr "Primera pàgina"
+
+#: ../../../../inc/themes/classic/inc/Icons.class.php:76
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:74
+#: ../../../../inc/themes/classic/eventlog.inc:100
+#: ../../../../inc/themes/classic/search.inc:185
+#: ../../../../inc/themes/material-blue/eventlog.inc:102
+msgid "Última página"
+msgstr "Última pàgina"
#: ../../../../js/strings.js.php:27
msgid "Error en la consulta"
@@ -2531,6 +3567,10 @@ msgid "Borrar elemento?"
msgstr "Esborrar element?"
#: ../../../../js/strings.js.php:40
+#: ../../../../inc/themes/classic/wikipage.inc:8
+#: ../../../../inc/themes/classic/wikipage.inc:17
+#: ../../../../inc/themes/material-blue/wikipage.inc:8
+#: ../../../../inc/themes/material-blue/wikipage.inc:17
msgid "Página no encontrada"
msgstr "Pàgina no trobada"
@@ -2551,8 +3591,9 @@ msgid "Demasiados archivos"
msgstr "Massa arxius"
#: ../../../../js/strings.js.php:45
+#, fuzzy
msgid "Tamaño de archivo no permitido"
-msgstr "Grandària d'arxiu no suportat"
+msgstr "Tipus d'arxiu no suportat"
#: ../../../../js/strings.js.php:47
msgid "Vaciar el registro de eventos?"
@@ -2599,7 +3640,7 @@ msgid "Restablecer"
msgstr "Restablir"
#: ../../../../js/strings.js.php:58
-#: ../../../../inc/themes/classic/editpass.inc:33
+#: ../../../../inc/themes/classic/account-editpass.inc:33
msgid "Nivel de fortaleza de la clave"
msgstr "Nivell de fortalesa de la clau"
@@ -2636,9 +3677,15 @@ msgid "Seleccionar Acción"
msgstr "Seleccionar Acció"
#: ../../../../js/strings.js.php:67
-#: ../../../../inc/themes/classic/account.inc:136
-#: ../../../../inc/themes/classic/account.inc:167
-#: ../../../../inc/themes/classic/account.inc:458
+#: ../../../../inc/themes/classic/account.inc:145
+#: ../../../../inc/themes/classic/account.inc:176
+#: ../../../../inc/themes/classic/account.inc:289
+#: ../../../../inc/themes/classic/config-events.inc:18
+#: ../../../../inc/themes/classic/config-events.inc:28
+#: ../../../../inc/themes/classic/config-events.inc:38
+#: ../../../../inc/themes/classic/config-links.inc:25
+#: ../../../../inc/themes/classic/config-links.inc:61
+#: ../../../../inc/themes/classic/config-proxy.inc:11
#: ../../../../inc/themes/classic/config.inc:70
#: ../../../../inc/themes/classic/config.inc:86
#: ../../../../inc/themes/classic/config.inc:102
@@ -2656,19 +3703,26 @@ msgstr "Seleccionar Acció"
#: ../../../../inc/themes/classic/mail.inc:14
#: ../../../../inc/themes/classic/mail.inc:40
#: ../../../../inc/themes/classic/mail.inc:88
-#: ../../../../inc/themes/classic/preferences.inc:48
-#: ../../../../inc/themes/classic/preferences.inc:82
-#: ../../../../inc/themes/classic/preferences.inc:99
-#: ../../../../inc/themes/classic/preferences.inc:116
-#: ../../../../inc/themes/classic/security.inc:26
+#: ../../../../inc/themes/classic/preferences-security.inc:26
+#: ../../../../inc/themes/classic/preferences-site.inc:48
+#: ../../../../inc/themes/classic/preferences-site.inc:82
+#: ../../../../inc/themes/classic/preferences-site.inc:99
+#: ../../../../inc/themes/classic/preferences-site.inc:116
#: ../../../../inc/themes/classic/wiki.inc:20
+#: ../../../../inc/themes/classic/wiki.inc:118
msgid "SI"
msgstr "SI"
#: ../../../../js/strings.js.php:68
-#: ../../../../inc/themes/classic/account.inc:136
-#: ../../../../inc/themes/classic/account.inc:167
-#: ../../../../inc/themes/classic/account.inc:456
+#: ../../../../inc/themes/classic/account.inc:145
+#: ../../../../inc/themes/classic/account.inc:176
+#: ../../../../inc/themes/classic/account.inc:287
+#: ../../../../inc/themes/classic/config-events.inc:18
+#: ../../../../inc/themes/classic/config-events.inc:28
+#: ../../../../inc/themes/classic/config-events.inc:38
+#: ../../../../inc/themes/classic/config-links.inc:25
+#: ../../../../inc/themes/classic/config-links.inc:61
+#: ../../../../inc/themes/classic/config-proxy.inc:11
#: ../../../../inc/themes/classic/config.inc:70
#: ../../../../inc/themes/classic/config.inc:86
#: ../../../../inc/themes/classic/config.inc:102
@@ -2682,20 +3736,21 @@ msgstr "SI"
#: ../../../../inc/themes/classic/customfields.inc:46
#: ../../../../inc/themes/classic/encryption.inc:58
#: ../../../../inc/themes/classic/encryption.inc:77
-#: ../../../../inc/themes/classic/import.inc:67
+#: ../../../../inc/themes/classic/import.inc:172
#: ../../../../inc/themes/classic/install.inc:99
#: ../../../../inc/themes/classic/ldap.inc:25
#: ../../../../inc/themes/classic/ldap.inc:195
#: ../../../../inc/themes/classic/mail.inc:14
#: ../../../../inc/themes/classic/mail.inc:40
#: ../../../../inc/themes/classic/mail.inc:88
-#: ../../../../inc/themes/classic/preferences.inc:48
-#: ../../../../inc/themes/classic/preferences.inc:82
-#: ../../../../inc/themes/classic/preferences.inc:99
-#: ../../../../inc/themes/classic/preferences.inc:116
-#: ../../../../inc/themes/classic/security.inc:26
+#: ../../../../inc/themes/classic/preferences-security.inc:26
+#: ../../../../inc/themes/classic/preferences-site.inc:48
+#: ../../../../inc/themes/classic/preferences-site.inc:82
+#: ../../../../inc/themes/classic/preferences-site.inc:99
+#: ../../../../inc/themes/classic/preferences-site.inc:116
#: ../../../../inc/themes/classic/tokens.inc:36
#: ../../../../inc/themes/classic/wiki.inc:20
+#: ../../../../inc/themes/classic/wiki.inc:118
msgid "NO"
msgstr "NO"
@@ -2715,611 +3770,225 @@ msgstr "Clau Copiada al Portapapers"
msgid "Error al copiar al portapapeles"
msgstr "Error en copiar al portapapers"
-#: ../../../../web/AccountC.class.php:386
-#: ../../../../web/AccountC.class.php:417
-#: ../../../../inc/themes/classic/search.inc:75
-#: ../../../../inc/themes/classic/search.inc:134
-#: ../../../../inc/themes/material-blue/search.inc:77
-#: ../../../../inc/themes/material-blue/search.inc:144
-msgid "Detalles de Cuenta"
-msgstr "Detalls de Compte"
+#: ../../../../js/strings.js.php:74
+#, fuzzy
+msgid "Recibir notificaciones?"
+msgstr "Comprovar notificacions"
-#: ../../../../web/AccountC.class.php:474
-#: ../../../../inc/themes/classic/account.inc:403
-#: ../../../../inc/themes/material-blue/account.inc:444
-msgid "Modificar Clave de Cuenta"
-msgstr "Modificar Clau de Compte"
-
-#: ../../../../web/AccountsMgmtC.class.php:80
-#: ../../../../web/AccountsMgmtC.class.php:139
-#: ../../../../web/AccountsMgmtC.class.php:267
-#: ../../../../web/SearchC.class.php:293
-#: ../../../../web/UsersMgmtC.class.php:88
-#: ../../../../web/UsersMgmtC.class.php:188
-#: ../../../../web/UsersMgmtC.class.php:246
-#: ../../../../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:73
-#: ../../../../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:75
-#: ../../../../inc/themes/material-blue/users.inc:8
-msgid "Nombre"
-msgstr "Nom"
-
-#: ../../../../web/AccountsMgmtC.class.php:116
-msgid "Gestión de Categorías"
-msgstr "Gestió de Categories"
-
-#: ../../../../web/AccountsMgmtC.class.php:173
-msgid "Gestión de Clientes"
-msgstr "Gestió de Clients"
-
-#: ../../../../web/AccountsMgmtC.class.php:267
-#: ../../../../inc/themes/classic/customfields.inc:27
-#: ../../../../inc/themes/material-blue/customfields.inc:30
-msgid "Módulo"
-msgstr "Mòdul"
-
-#: ../../../../web/AccountsMgmtC.class.php:288
-msgid "Eliminar Campo"
-msgstr "Eliminar Camp"
-
-#: ../../../../web/ConfigC.class.php:168
-msgid "Último backup"
-msgstr "Ultima còpia de seguretat"
-
-#: ../../../../web/ConfigC.class.php:168
-msgid "No se encontraron backups"
-msgstr "No es van trobar còpia de seguretat"
-
-#: ../../../../web/ConfigC.class.php:175
-msgid "Última exportación"
-msgstr "Última exportació"
-
-#: ../../../../web/ConfigC.class.php:175
-msgid "No se encontró archivo de exportación"
-msgstr "No es va trobar arxiu d'exportació"
-
-#: ../../../../web/ConfigC.class.php:220
-msgid "Información"
-msgstr "Informació"
-
-#: ../../../../web/EventlogC.class.php:95
-msgid "Registro de eventos vaciado"
-msgstr "Registre d'esdeveniments buidat"
-
-#: ../../../../web/EventlogC.class.php:97
-msgid "Error al vaciar el registro de eventos"
-msgstr "Error en buidar el registre d'esdeveniments"
-
-#: ../../../../web/MainC.class.php:159
-#: ../../../../web/UsersMgmtC.class.php:101
-msgid "Admin Aplicación"
-msgstr "Admin Aplicació"
-
-#: ../../../../web/MainC.class.php:177
-msgid "Buscar"
-msgstr "Buscar"
-
-#: ../../../../web/MainC.class.php:189
-msgid "Usuarios y Accesos"
-msgstr "Usuaris i Accessos"
-
-#: ../../../../web/MainC.class.php:195
-msgid "Elementos y Personalización"
-msgstr "Elements i Personalització"
-
-#: ../../../../web/MainC.class.php:207
-#: ../../../../inc/themes/classic/eventlog.inc:2
-#: ../../../../inc/themes/material-blue/eventlog.inc:2
-msgid "Registro de Eventos"
-msgstr "Registre d'Esdeveniments"
-
-#: ../../../../web/MainC.class.php:228
-msgid "Nuevo estilo visual basado en Material Design Lite by Google"
-msgstr "Nou estil visual basat en Material Design Lite by Google"
-
-#: ../../../../web/MainC.class.php:229
-msgid "Usuarios en múltiples grupos"
-msgstr "Usuaris en múltiples grups"
-
-#: ../../../../web/MainC.class.php:230
-msgid "Previsualización de imágenes"
-msgstr "Previsualització d'imatges"
-
-#: ../../../../web/MainC.class.php:231
-msgid "Mostrar claves como imágenes"
-msgstr "Mostrar claus com a imatges"
-
-#: ../../../../web/MainC.class.php:232
-msgid "Campos personalizados"
-msgstr "Camps personalitzats"
-
-#: ../../../../web/MainC.class.php:233
-msgid "API de consultas"
-msgstr "API de consultes"
-
-#: ../../../../web/MainC.class.php:234
-#: ../../../../inc/themes/classic/2fa.inc:9
-#: ../../../../inc/themes/material-blue/2fa.inc:7
-#: ../../../../inc/themes/material-blue/security.inc:11
-msgid "Autentificación en 2 pasos"
-msgstr "Autenticació en 2 passos"
-
-#: ../../../../web/MainC.class.php:235
-msgid "Complejidad de generador de claves"
-msgstr "Complexitat de generador de claus"
-
-#: ../../../../web/MainC.class.php:236
-msgid "Consultas especiales"
-msgstr "Consultes especials"
-
-#: ../../../../web/MainC.class.php:237
-msgid "Exportación a XML"
-msgstr "Exportació a XML"
-
-#: ../../../../web/MainC.class.php:238
-msgid "Clave maestra temporal"
-msgstr "Clau mestra temporal"
-
-#: ../../../../web/MainC.class.php:239
-msgid "Importación de cuentas desde sysPass, KeePass, KeePassX y CSV"
-msgstr "Importació de comptes des de sysPass, KeePass, KeePassX i CSV"
-
-#: ../../../../web/MainC.class.php:240
-msgid "Optimización del código y mayor rapidez de carga"
-msgstr "Optimització del codi i major rapidesa de càrrega"
-
-#: ../../../../web/MainC.class.php:241
-msgid "Mejoras de seguridad en XSS e inyección SQL"
-msgstr "Millores de seguretat en XSS i injecció SQL"
-
-#: ../../../../web/MainC.class.php:282
-msgid "La version de PHP es vulnerable al ataque NULL Byte (CVE-2006-7243)"
-msgstr "La versió de PHP és vulnerable a l'atac NULL Byte (CVE-2006-7243)"
-
-#: ../../../../web/MainC.class.php:283
-msgid "Actualice la versión de PHP para usar sysPass de forma segura"
-msgstr "Actualitzi la versió de PHP per usar sysPass de forma segura"
-
-#: ../../../../web/MainC.class.php:290
-msgid "No se encuentra el generador de números aleatorios."
-msgstr "No es troba el generador de nombres aleatoris."
-
-#: ../../../../web/MainC.class.php:291
-msgid ""
-"Sin esta función un atacante puede utilizar su cuenta al resetear la clave"
+#: ../../../../js/strings.js.php:75
+msgid "Marcar Favorito"
msgstr ""
-"Sense aquesta funció un atacant pot utilitzar el seu compte en restablir la "
-"clau"
-#: ../../../../web/MainC.class.php:310
-msgid "Instalación finalizada"
-msgstr "Instal·lació finalitzada"
+#: ../../../../js/strings.js.php:76
+#, fuzzy
+msgid "Eliminar Favorito"
+msgstr "Eliminar Usuari"
-#: ../../../../web/MainC.class.php:311
-msgid "Pulse aquí para acceder"
-msgstr "Feu clic aquí per accedir"
+#: ../../../../inc/themes/classic/account-actions.inc:15
+#: ../../../../inc/themes/material-blue/account-actions.inc:86
+msgid "Restaurar cuenta desde este punto"
+msgstr "Restaurar compte des d'aquest punt"
-#: ../../../../web/MainC.class.php:408
-msgid "Descargar nueva versión"
-msgstr "Descarregar nova versió"
+#: ../../../../inc/themes/classic/account-actions.inc:44
+#: ../../../../inc/themes/material-blue/account-actions.inc:55
+msgid "Ver Actual"
+msgstr "Veure Actual"
-#: ../../../../web/MainC.class.php:419
-msgid "Avisos de sysPass"
-msgstr "Avisos de sysPass"
+#: ../../../../inc/themes/classic/account-actions.inc:56
+#: ../../../../inc/themes/classic/search.inc:132
+#: ../../../../inc/themes/material-blue/account-actions.inc:71
+msgid "Modificar Cuenta"
+msgstr "Modificar Compte"
-#: ../../../../web/SearchC.class.php:286
-msgid "Ordenar por Cliente"
-msgstr "Ordenar per Client"
+#: ../../../../inc/themes/classic/account-details.inc:7
+#: ../../../../inc/themes/material-blue/account-details.inc:7
+msgid "Fecha Alta"
+msgstr "Data Alta"
-#: ../../../../web/SearchC.class.php:292
-msgid "Ordenar por Nombre"
-msgstr "Ordenar per Nom"
+#: ../../../../inc/themes/classic/account-details.inc:11
+#: ../../../../inc/themes/material-blue/account-details.inc:11
+msgid "Creador"
+msgstr "Creador"
-#: ../../../../web/SearchC.class.php:298
-msgid "Ordenar por Categoría"
-msgstr "Ordenar per Categoría"
+#: ../../../../inc/themes/classic/account-details.inc:15
+#: ../../../../inc/themes/classic/account.inc:186
+#: ../../../../inc/themes/material-blue/account-details.inc:15
+#: ../../../../inc/themes/material-blue/account.inc:225
+msgid "Grupo Principal"
+msgstr "Grup Principal"
-#: ../../../../web/SearchC.class.php:304
-msgid "Ordenar por Usuario"
-msgstr "Ordenar per Usuari"
+#: ../../../../inc/themes/classic/account-details.inc:20
+#: ../../../../inc/themes/material-blue/account-details.inc:20
+msgid "Usuarios Secundarios"
+msgstr "Usuaris Secundaris"
-#: ../../../../web/SearchC.class.php:310
-msgid "Ordenar por URL / IP"
-msgstr "Ordenar per URL / IP"
+#: ../../../../inc/themes/classic/account-details.inc:39
+#: ../../../../inc/themes/material-blue/account-details.inc:39
+msgid "Grupos Secundarios"
+msgstr "Grups Secundaris"
-#: ../../../../web/SearchC.class.php:311
-#: ../../../../inc/themes/classic/account.inc:61
-#: ../../../../inc/themes/classic/editpass.inc:16
-#: ../../../../inc/themes/classic/request.inc:13
-#: ../../../../inc/themes/classic/search.inc:96
-#: ../../../../inc/themes/material-blue/account.inc:70
-#: ../../../../inc/themes/material-blue/editpass.inc:17
-#: ../../../../inc/themes/material-blue/request.inc:15
-#: ../../../../inc/themes/material-blue/search.inc:98
-msgid "URL / IP"
-msgstr "URL / IP"
+#: ../../../../inc/themes/classic/account-details.inc:59
+#: ../../../../inc/themes/material-blue/account-details.inc:59
+msgid "Fecha Edición"
+msgstr "Data Edició"
-#: ../../../../web/UsersMgmtC.class.php:92
-msgid "Propiedades"
-msgstr "Propietats"
+#: ../../../../inc/themes/classic/account-details.inc:63
+#: ../../../../inc/themes/material-blue/account-details.inc:63
+msgid "Editor"
+msgstr "Editor"
-#: ../../../../web/UsersMgmtC.class.php:105
-msgid "Admin Cuentas"
-msgstr "Admin Comptes"
-
-#: ../../../../web/UsersMgmtC.class.php:113
-#: ../../../../inc/themes/classic/users.inc:113
-#: ../../../../inc/themes/material-blue/users.inc:151
-#: ../../../../inc/themes/material-blue/users.inc:154
-msgid "Deshabilitado"
-msgstr "Deshabilitat"
-
-#: ../../../../web/UsersMgmtC.class.php:130
-msgid "Ver Detalles de Usuario"
-msgstr "Veure Detalls d'Usuari"
-
-#: ../../../../web/UsersMgmtC.class.php:144
-msgid "Cambiar Clave de Usuario"
-msgstr "Canviar Clau d'Usuari"
-
-#: ../../../../web/UsersMgmtC.class.php:164
-msgid "Gestión de Usuarios"
-msgstr "Gestió d'Usuaris"
-
-#: ../../../../web/UsersMgmtC.class.php:223
-msgid "Gestión de Grupos"
-msgstr "Gestió de Grups"
-
-#: ../../../../web/UsersMgmtC.class.php:261
-msgid "Ver Detalles de Perfil"
-msgstr "Veure Detalls de Perfil"
-
-#: ../../../../web/UsersMgmtC.class.php:288
-msgid "Gestión de Perfiles"
-msgstr "Gestió de Perfils"
-
-#: ../../../../web/UsersMgmtC.class.php:408
-msgid "Ver token de Autorización"
-msgstr "Veure token d'Autorització"
-
-#: ../../../../web/UsersMgmtC.class.php:435
-msgid "Gestión de Autorizaciones API"
-msgstr "Gestió d'Autoritzacions API"
-
-#: ../../../../web/UsersMgmtC.class.php:457
-msgid "Token de autorización visualizado"
-msgstr "Token d'autorización visualizat"
-
-#: ../../../../web/UsersMgmtC.class.php:458
-msgid "Autorizaciones"
-msgstr "Autoritzacions"
-
-#: ../../../../web/UsersPrefsC.class.php:93
-#: ../../../../inc/themes/classic/mail.inc:63
-#: ../../../../inc/themes/material-blue/mail.inc:86
-msgid "Seguridad"
-msgstr "Seguretat"
-
-#: ../../../../web/UsersPrefsC.class.php:118
-#: ../../../../inc/themes/classic/sessionbar.inc:9
-msgid "Preferencias"
-msgstr "Preferencies"
-
-#: ../../../../inc/themes/classic/2fa.inc:14
-#: ../../../../inc/themes/material-blue/2fa.inc:12
-msgid "Introducir código"
-msgstr "Introduir codi"
-
-#: ../../../../inc/themes/classic/2fa.inc:26
-msgid "Verificar"
-msgstr "Verificar"
-
-#: ../../../../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 "Buscar en desplegable o introduir"
-
-#: ../../../../inc/themes/classic/account.inc:64
-#: ../../../../inc/themes/material-blue/account.inc:76
-msgid "URL o IP de acceso"
-msgstr "URL o IP d'accés"
-
-#: ../../../../inc/themes/classic/account.inc:76
-#: ../../../../inc/themes/material-blue/account.inc:90
-msgid "Usuario de acceso"
-msgstr "Usuari d'accés"
-
-#: ../../../../inc/themes/classic/account.inc:93
-#: ../../../../inc/themes/classic/editpass.inc:31
+#: ../../../../inc/themes/classic/account-editpass.inc:31
+#: ../../../../inc/themes/classic/account.inc:101
#: ../../../../inc/themes/classic/passreset.inc:35
#: ../../../../inc/themes/classic/users.inc:83
#: ../../../../inc/themes/classic/userspass.inc:19
#: ../../../../inc/themes/classic/userspass.inc:21
-#: ../../../../inc/themes/material-blue/account.inc:109
-#: ../../../../inc/themes/material-blue/editpass.inc:36
+#: ../../../../inc/themes/material-blue/account-editpass.inc:38
+#: ../../../../inc/themes/material-blue/account.inc:124
#: ../../../../inc/themes/material-blue/install.inc:67
#: ../../../../inc/themes/material-blue/passreset.inc:36
-#: ../../../../inc/themes/material-blue/users.inc:102
-#: ../../../../inc/themes/material-blue/users.inc:109
+#: ../../../../inc/themes/material-blue/users.inc:103
+#: ../../../../inc/themes/material-blue/users.inc:110
#: ../../../../inc/themes/material-blue/userspass.inc:19
#: ../../../../inc/themes/material-blue/userspass.inc:25
msgid "Clave (repetir)"
msgstr "Clau (repetir)"
-#: ../../../../inc/themes/classic/account.inc:100
-#: ../../../../inc/themes/classic/search.inc:112
-#: ../../../../inc/themes/classic/users.inc:91
-#: ../../../../inc/themes/material-blue/account.inc:120
-#: ../../../../inc/themes/material-blue/search.inc:118
-#: ../../../../inc/themes/material-blue/users.inc:116
-msgid "Notas"
-msgstr "Notes"
-
-#: ../../../../inc/themes/classic/account.inc:102
-#: ../../../../inc/themes/material-blue/account.inc:125
-#: ../../../../inc/themes/material-blue/users.inc:123
-msgid "Notas sobre la cuenta"
-msgstr "Notes sobre el compte"
-
-#: ../../../../inc/themes/classic/account.inc:108
-#: ../../../../inc/themes/material-blue/account.inc:134
-#: ../../../../inc/themes/material-blue/search.inc:111
-msgid "Permisos"
-msgstr "Permisos"
-
-#: ../../../../inc/themes/classic/account.inc:135
-#: ../../../../inc/themes/classic/account.inc:166
-#: ../../../../inc/themes/material-blue/account.inc:163
-#: ../../../../inc/themes/material-blue/account.inc:195
-msgid "Hablitar edición"
-msgstr "Hablitar edició"
-
-#: ../../../../inc/themes/classic/account.inc:201
-#: ../../../../inc/themes/material-blue/account.inc:245
+#: ../../../../inc/themes/classic/account-files.inc:13
+#: ../../../../inc/themes/material-blue/account-files.inc:13
msgid "Soltar archivos aquí (max. 5) o click para seleccionar"
msgstr "Deixar anar arxius aquí (max. 5) o clic per seleccionar"
-#: ../../../../inc/themes/classic/account.inc:201
+#: ../../../../inc/themes/classic/account-files.inc:13
#: ../../../../inc/themes/classic/config.inc:212
-#: ../../../../inc/themes/material-blue/account.inc:245
-#: ../../../../inc/themes/material-blue/config.inc:328
+#: ../../../../inc/themes/material-blue/account-files.inc:13
+#: ../../../../inc/themes/material-blue/config-files.inc:54
msgid "Tamaño máximo de archivo"
msgstr "Grandària màxima d'arxiu"
-#: ../../../../inc/themes/classic/account.inc:223
-#: ../../../../inc/themes/material-blue/account.inc:267
+#: ../../../../inc/themes/classic/account-request.inc:1
+#: ../../../../inc/themes/material-blue/request.inc:3
+msgid "Solicitar Modificación de Cuenta"
+msgstr "Sol·licitar Modificació de Compte"
+
+#: ../../../../inc/themes/classic/account-request.inc:22
+#: ../../../../inc/themes/material-blue/request.inc:27
+msgid "Petición"
+msgstr "Petició"
+
+#: ../../../../inc/themes/classic/account-request.inc:24
+#: ../../../../inc/themes/material-blue/request.inc:31
+msgid "Descripción de la petición"
+msgstr "Descripció de la petició"
+
+#: ../../../../inc/themes/classic/account-request.inc:38
+#: ../../../../inc/themes/material-blue/request.inc:50
+msgid "Enviar"
+msgstr "Enviar"
+
+#: ../../../../inc/themes/classic/account.inc:20
+#: ../../../../inc/themes/material-blue/account.inc:33
+msgid "Nombre de cuenta"
+msgstr "Nom de compte"
+
+#: ../../../../inc/themes/classic/account.inc:41
+msgid "Buscar en desplegable o introducir"
+msgstr "Buscar en desplegable o introduir"
+
+#: ../../../../inc/themes/classic/account.inc:71
+#: ../../../../inc/themes/material-blue/account.inc:90
+msgid "URL o IP de acceso"
+msgstr "URL o IP d'accés"
+
+#: ../../../../inc/themes/classic/account.inc:83
+#: ../../../../inc/themes/material-blue/account.inc:104
+msgid "Usuario de acceso"
+msgstr "Usuari d'accés"
+
+#: ../../../../inc/themes/classic/account.inc:109
+#: ../../../../inc/themes/classic/datasearch-rows.inc:73
+#: ../../../../inc/themes/classic/search.inc:85
+#: ../../../../inc/themes/classic/users.inc:91
+#: ../../../../inc/themes/material-blue/account-link.inc:42
+#: ../../../../inc/themes/material-blue/account.inc:137
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:77
+#: ../../../../inc/themes/material-blue/users.inc:117
+msgid "Notas"
+msgstr "Notes"
+
+#: ../../../../inc/themes/classic/account.inc:111
+#: ../../../../inc/themes/material-blue/account.inc:144
+#: ../../../../inc/themes/material-blue/users.inc:124
+msgid "Notas sobre la cuenta"
+msgstr "Notes sobre el compte"
+
+#: ../../../../inc/themes/classic/account.inc:117
+#: ../../../../inc/themes/classic/datasearch-rows.inc:62
+#: ../../../../inc/themes/material-blue/account.inc:153
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:64
+msgid "Permisos"
+msgstr "Permisos"
+
+#: ../../../../inc/themes/classic/account.inc:144
+#: ../../../../inc/themes/classic/account.inc:175
+#: ../../../../inc/themes/material-blue/account.inc:183
+#: ../../../../inc/themes/material-blue/account.inc:216
+msgid "Hablitar edición"
+msgstr "Hablitar edició"
+
+#: ../../../../inc/themes/classic/account.inc:203
+#: ../../../../inc/themes/material-blue/account.inc:242
msgid "Historial"
msgstr "Historial"
-#: ../../../../inc/themes/classic/account.inc:242
-#: ../../../../inc/themes/material-blue/account.inc:287
+#: ../../../../inc/themes/classic/account.inc:223
+#: ../../../../inc/themes/material-blue/account.inc:262
msgid "Seleccionar fecha"
msgstr "Seleccionar data"
-#: ../../../../inc/themes/classic/account.inc:251
-#: ../../../../inc/themes/classic/users.inc:164
-#: ../../../../inc/themes/material-blue/account.inc:296
-#: ../../../../inc/themes/material-blue/users.inc:208
+#: ../../../../inc/themes/classic/account.inc:232
+#: ../../../../inc/themes/classic/users.inc:140
+#: ../../../../inc/themes/material-blue/account.inc:271
+#: ../../../../inc/themes/material-blue/users.inc:183
msgid "Última Modificación"
msgstr "Última Modificació"
-#: ../../../../inc/themes/classic/account.inc:253
-#: ../../../../inc/themes/material-blue/account.inc:298
+#: ../../../../inc/themes/classic/account.inc:234
+#: ../../../../inc/themes/material-blue/account.inc:273
msgid "por"
msgstr "per"
-#: ../../../../inc/themes/classic/account.inc:296
-#: ../../../../inc/themes/material-blue/account.inc:347
-msgid "Visitas"
-msgstr "Visites"
-
-#: ../../../../inc/themes/classic/account.inc:300
-#: ../../../../inc/themes/material-blue/account.inc:351
-msgid "Fecha Alta"
-msgstr "Data Alta"
-
-#: ../../../../inc/themes/classic/account.inc:304
-#: ../../../../inc/themes/material-blue/account.inc:355
-msgid "Creador"
-msgstr "Creador"
-
-#: ../../../../inc/themes/classic/account.inc:308
-#: ../../../../inc/themes/material-blue/account.inc:204
-#: ../../../../inc/themes/material-blue/account.inc:359
-msgid "Grupo Principal"
-msgstr "Grup Principal"
-
-#: ../../../../inc/themes/classic/account.inc:313
-#: ../../../../inc/themes/material-blue/account.inc:364
-msgid "Usuarios Secundarios"
-msgstr "Usuaris Secundaris"
-
-#: ../../../../inc/themes/classic/account.inc:332
-#: ../../../../inc/themes/material-blue/account.inc:383
-msgid "Grupos Secundarios"
-msgstr "Grups Secundaris"
-
-#: ../../../../inc/themes/classic/account.inc:352
-#: ../../../../inc/themes/material-blue/account.inc:403
-msgid "Fecha Edición"
-msgstr "Data Edició"
-
-#: ../../../../inc/themes/classic/account.inc:356
-#: ../../../../inc/themes/material-blue/account.inc:407
-msgid "Editor"
-msgstr "Editor"
-
-#: ../../../../inc/themes/classic/account.inc:383
-#: ../../../../inc/themes/material-blue/account.inc:470
-msgid "Restaurar cuenta desde este punto"
-msgstr "Restaurar compte des d'aquest punt"
-
-#: ../../../../inc/themes/classic/account.inc:395
-#: ../../../../inc/themes/classic/search.inc:143
-#: ../../../../inc/themes/material-blue/account.inc:437
-#: ../../../../inc/themes/material-blue/search.inc:154
-msgid "Copiar Clave en Portapapeles"
-msgstr "Copiar Clau en Portapapers"
-
-#: ../../../../inc/themes/classic/account.inc:410
-#: ../../../../inc/themes/material-blue/account.inc:450
-msgid "Ver Actual"
-msgstr "Veure Actual"
-
-#: ../../../../inc/themes/classic/account.inc:415
-#: ../../../../inc/themes/classic/editpass.inc:45
-#: ../../../../inc/themes/classic/mgmttabs.inc:4
-#: ../../../../inc/themes/classic/passreset.inc:46
-#: ../../../../inc/themes/material-blue/passreset.inc:48
-msgid "Volver"
-msgstr "Tornar"
-
-#: ../../../../inc/themes/classic/account.inc:422
-#: ../../../../inc/themes/classic/search.inc:155
-#: ../../../../inc/themes/material-blue/account.inc:460
-#: ../../../../inc/themes/material-blue/search.inc:166
-msgid "Modificar Cuenta"
-msgstr "Modificar Compte"
-
-#: ../../../../inc/themes/classic/account.inc:427
-#: ../../../../inc/themes/classic/search.inc:176
-#: ../../../../inc/themes/material-blue/account.inc:464
-#: ../../../../inc/themes/material-blue/search.inc:187
-msgid "Solicitar Modificación"
-msgstr "Sol·licitar Modificació"
-
-#: ../../../../inc/themes/classic/account.inc:434
-#: ../../../../inc/themes/classic/categories.inc:62
-#: ../../../../inc/themes/classic/config.inc:294
-#: ../../../../inc/themes/classic/customers.inc:62
-#: ../../../../inc/themes/classic/customfields.inc:63
-#: ../../../../inc/themes/classic/editpass.inc:50
-#: ../../../../inc/themes/classic/encryption.inc:99
-#: ../../../../inc/themes/classic/groups.inc:77
-#: ../../../../inc/themes/classic/ldap.inc:229
-#: ../../../../inc/themes/classic/mail.inc:107
-#: ../../../../inc/themes/classic/preferences.inc:130
-#: ../../../../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:476
-#: ../../../../inc/themes/material-blue/categories.inc:72
-#: ../../../../inc/themes/material-blue/config.inc:444
-#: ../../../../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/preferences.inc:134
-#: ../../../../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 "Desar"
-
-#: ../../../../inc/themes/classic/account.inc:444
-#: ../../../../inc/themes/material-blue/account.inc:486
+#: ../../../../inc/themes/classic/account.inc:275
+#: ../../../../inc/themes/material-blue/account.inc:318
msgid "Seleccionar grupos secundarios"
msgstr "Seleccionar grups secundaris"
-#: ../../../../inc/themes/classic/account.inc:448
-#: ../../../../inc/themes/material-blue/account.inc:489
+#: ../../../../inc/themes/classic/account.inc:279
+#: ../../../../inc/themes/material-blue/account.inc:321
msgid "Seleccionar usuarios"
msgstr "Seleccionar usuaris"
-#: ../../../../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
+#: ../../../../inc/themes/classic/backup.inc:12
+#: ../../../../inc/themes/classic/backup.inc:69
+#: ../../../../inc/themes/material-blue/backup.inc:12
+#: ../../../../inc/themes/material-blue/backup.inc:73
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
+#: ../../../../inc/themes/classic/backup.inc:20
+#: ../../../../inc/themes/classic/backup.inc:77
+#: ../../../../inc/themes/material-blue/backup.inc:20
+#: ../../../../inc/themes/material-blue/backup.inc:81
msgid "Descargar Actual"
msgstr "Descarregar Actual"
-#: ../../../../inc/themes/classic/backup.inc:31
-#: ../../../../inc/themes/material-blue/backup.inc:31
+#: ../../../../inc/themes/classic/backup.inc:33
+#: ../../../../inc/themes/material-blue/backup.inc:33
msgid "No hay backups para descargar"
msgstr "No hi ha còpies de seguretat per descarregar"
-#: ../../../../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:90
-#: ../../../../inc/themes/classic/encryption.inc:94
-#: ../../../../inc/themes/classic/encryption.inc:159
-#: ../../../../inc/themes/classic/encryption.inc:163
-#: ../../../../inc/themes/classic/import.inc:12
-#: ../../../../inc/themes/classic/import.inc:34
-#: ../../../../inc/themes/classic/import.inc:48
-#: ../../../../inc/themes/classic/import.inc:94
-#: ../../../../inc/themes/classic/import.inc:115
-#: ../../../../inc/themes/classic/import.inc:168
-#: ../../../../inc/themes/classic/import.inc:172
-#: ../../../../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:104
-#: ../../../../inc/themes/material-blue/encryption.inc:108
-#: ../../../../inc/themes/material-blue/encryption.inc:178
-#: ../../../../inc/themes/material-blue/encryption.inc:182
-#: ../../../../inc/themes/material-blue/import.inc:97
-#: ../../../../inc/themes/material-blue/import.inc:101
-#: ../../../../inc/themes/material-blue/js-common.inc:11
-msgid "Ayuda"
-msgstr "Ajuda"
-
-#: ../../../../inc/themes/classic/backup.inc:50
-#: ../../../../inc/themes/material-blue/backup.inc:52
+#: ../../../../inc/themes/classic/backup.inc:52
+#: ../../../../inc/themes/material-blue/backup.inc:54
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."
@@ -3327,8 +3996,8 @@ msgstr ""
"La còpia de seguretat permet guardar i descarregar tant la base de dades de "
"sysPass com els arxius de l'aplicació i la seva configuració."
-#: ../../../../inc/themes/classic/backup.inc:52
-#: ../../../../inc/themes/material-blue/backup.inc:54
+#: ../../../../inc/themes/classic/backup.inc:54
+#: ../../../../inc/themes/material-blue/backup.inc:56
msgid ""
"Con este método es posible guardar todos los datos de sysPass en otro lugar "
"o utilizarlos para hacer la aplicación portable."
@@ -3336,31 +4005,31 @@ msgstr ""
"Amb aquest mètode és possible guardar totes les dades de sysPass en un altre "
"lloc o utilitzar-los per fer l'aplicació transportable."
-#: ../../../../inc/themes/classic/backup.inc:60
-#: ../../../../inc/themes/classic/backup.inc:126
-#: ../../../../inc/themes/material-blue/backup.inc:64
+#: ../../../../inc/themes/classic/backup.inc:62
+#: ../../../../inc/themes/classic/backup.inc:128
+#: ../../../../inc/themes/material-blue/backup.inc:66
msgid "Exportar Cuentas"
msgstr "Exportar Comptes"
-#: ../../../../inc/themes/classic/backup.inc:84
-#: ../../../../inc/themes/material-blue/backup.inc:88
+#: ../../../../inc/themes/classic/backup.inc:86
+#: ../../../../inc/themes/material-blue/backup.inc:90
msgid "No hay archivos XML para descargar"
msgstr "No hi ha arxius XML per descarregar"
-#: ../../../../inc/themes/classic/backup.inc:90
-#: ../../../../inc/themes/material-blue/backup.inc:94
-#: ../../../../inc/themes/material-blue/backup.inc:101
+#: ../../../../inc/themes/classic/backup.inc:92
+#: ../../../../inc/themes/material-blue/backup.inc:96
+#: ../../../../inc/themes/material-blue/backup.inc:103
msgid "Clave de Exportación"
msgstr "Clau d'Exportació"
-#: ../../../../inc/themes/classic/backup.inc:98
-#: ../../../../inc/themes/material-blue/backup.inc:107
-#: ../../../../inc/themes/material-blue/backup.inc:114
+#: ../../../../inc/themes/classic/backup.inc:100
+#: ../../../../inc/themes/material-blue/backup.inc:109
+#: ../../../../inc/themes/material-blue/backup.inc:116
msgid "Clave de Exportación (repetir)"
msgstr "Clau d'Exportació (repetir)"
-#: ../../../../inc/themes/classic/backup.inc:118
-#: ../../../../inc/themes/material-blue/backup.inc:134
+#: ../../../../inc/themes/classic/backup.inc:120
+#: ../../../../inc/themes/material-blue/backup.inc:136
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."
@@ -3369,13 +4038,13 @@ msgstr ""
"format XML para posteriorment poder ser importats en altres instàncies de "
"sysPass."
-#: ../../../../inc/themes/classic/backup.inc:120
-#: ../../../../inc/themes/material-blue/backup.inc:136
+#: ../../../../inc/themes/classic/backup.inc:122
+#: ../../../../inc/themes/material-blue/backup.inc:138
msgid "Los elementos exportados son cuentas, clientes y categorías."
msgstr "Els elements exportats són comptes, clients i categories."
-#: ../../../../inc/themes/classic/backup.inc:122
-#: ../../../../inc/themes/material-blue/backup.inc:138
+#: ../../../../inc/themes/classic/backup.inc:124
+#: ../../../../inc/themes/material-blue/backup.inc:140
msgid ""
"Las claves de las cuentas son exportadas de forma encriptada para mayor "
"seguridad."
@@ -3383,8 +4052,8 @@ msgstr ""
"Les claus dels comptes són exportades de forma encriptada per major "
"seguretat."
-#: ../../../../inc/themes/classic/backup.inc:124
-#: ../../../../inc/themes/material-blue/backup.inc:140
+#: ../../../../inc/themes/classic/backup.inc:126
+#: ../../../../inc/themes/material-blue/backup.inc:142
msgid ""
"Es posible establecer una clave de exportación para guardar todos los datos "
"encriptados en el archivo XML."
@@ -3398,31 +4067,160 @@ msgid "Javascript es necesario para el correcto funcionamiento"
msgstr "Javascript és necessari per al correcte funcionament"
#: ../../../../inc/themes/classic/categories.inc:10
-#: ../../../../inc/themes/material-blue/categories.inc:14
+#: ../../../../inc/themes/material-blue/categories.inc:15
msgid "Nombre de la categoría"
msgstr "Nom de la categoria"
#: ../../../../inc/themes/classic/categories.inc:18
-#: ../../../../inc/themes/material-blue/categories.inc:26
+#: ../../../../inc/themes/material-blue/categories.inc:27
msgid "Descripción de la categoría"
msgstr "Descripció de la categoria"
+#: ../../../../inc/themes/classic/config-events.inc:2
+#: ../../../../inc/themes/material-blue/config-events.inc:4
+#, fuzzy
+msgid "Eventos"
+msgstr "Event"
+
+#: ../../../../inc/themes/classic/config-events.inc:8
+#: ../../../../inc/themes/classic/config.inc:61
+#: ../../../../inc/themes/material-blue/config-events.inc:10
+msgid "Habilitar log de eventos"
+msgstr "Habilitar registre d'esdeveniments"
+
+#: ../../../../inc/themes/classic/config-events.inc:13
+#: ../../../../inc/themes/classic/config.inc:65
+#: ../../../../inc/themes/material-blue/config-events.inc:14
+msgid "Guarda las acciones realizadas en la aplicación."
+msgstr "Guarda les accions realitzades en l'aplicació."
+
+#: ../../../../inc/themes/classic/config-events.inc:25
+#: ../../../../inc/themes/material-blue/config-events.inc:28
+#, fuzzy
+msgid "Habilitar Syslog"
+msgstr "Habilitar LDAP"
+
+#: ../../../../inc/themes/classic/config-events.inc:35
+#: ../../../../inc/themes/material-blue/config-events.inc:40
+#, fuzzy
+msgid "Habilitar Syslog Remoto"
+msgstr "Habilitar registre d'esdeveniments"
+
+#: ../../../../inc/themes/classic/config-events.inc:45
+#: ../../../../inc/themes/classic/config-proxy.inc:18
+#: ../../../../inc/themes/classic/info.inc:44
+#: ../../../../inc/themes/classic/ldap.inc:32
+#: ../../../../inc/themes/classic/mail.inc:21
+#: ../../../../inc/themes/material-blue/config-events.inc:52
+#: ../../../../inc/themes/material-blue/config-proxy.inc:21
+#: ../../../../inc/themes/material-blue/info.inc:44
+#: ../../../../inc/themes/material-blue/ldap.inc:37
+#: ../../../../inc/themes/material-blue/ldap.inc:60
+#: ../../../../inc/themes/material-blue/mail.inc:26
+#: ../../../../inc/themes/material-blue/mail.inc:32
+msgid "Servidor"
+msgstr "Servidor"
+
+#: ../../../../inc/themes/classic/config-events.inc:54
+#: ../../../../inc/themes/classic/config-proxy.inc:27
+#: ../../../../inc/themes/classic/mail.inc:29
+#: ../../../../inc/themes/material-blue/config-events.inc:66
+#: ../../../../inc/themes/material-blue/config-events.inc:74
+#: ../../../../inc/themes/material-blue/config-proxy.inc:35
+#: ../../../../inc/themes/material-blue/mail.inc:38
+#: ../../../../inc/themes/material-blue/mail.inc:45
+msgid "Puerto"
+msgstr "Port"
+
+#: ../../../../inc/themes/classic/config-links.inc:2
+#: ../../../../inc/themes/material-blue/config-links.inc:4
+#: ../../../../inc/themes/material-blue/profiles.inc:141
+msgid "Enlaces Públicos"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config-links.inc:8
+#: ../../../../inc/themes/material-blue/config-links.inc:10
+#, fuzzy
+msgid "Habilitar Enlaces Públicos"
+msgstr "Habilitar enllaços Wiki"
+
+#: ../../../../inc/themes/classic/config-links.inc:12
+#: ../../../../inc/themes/material-blue/config-links.inc:15
+#, fuzzy
+msgid ""
+"Habilita la posibilidad de generar enlaces públicos para ver los detalles de "
+"una cuenta."
+msgstr ""
+"Habilita el nom del compte de la cerca, com a enllaç als detalls del compte."
+
+#: ../../../../inc/themes/classic/config-links.inc:16
+#: ../../../../inc/themes/material-blue/config-links.inc:19
+msgid ""
+"Las cuentas enlazadas serán visibles por cualquiera que disponga del enlace."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config-links.inc:20
+#: ../../../../inc/themes/material-blue/config-links.inc:23
+msgid ""
+"Para crear enlaces, los usuarios tienen que tener activada la opción en su "
+"perfl."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config-links.inc:32
+#: ../../../../inc/themes/material-blue/config-links.inc:38
+#, fuzzy
+msgid "Tiempo de caducidad"
+msgstr "Tipus del camp no indicat"
+
+#: ../../../../inc/themes/classic/config-links.inc:37
+#: ../../../../inc/themes/classic/config-links.inc:47
+#: ../../../../inc/themes/material-blue/config-links.inc:46
+#, fuzzy
+msgid "Tiempo en minutos"
+msgstr "Temps inactiu"
+
+#: ../../../../inc/themes/classic/config-links.inc:42
+#: ../../../../inc/themes/material-blue/config-links.inc:52
+msgid "Número máximo de visitas"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config-links.inc:52
+#: ../../../../inc/themes/material-blue/config-links.inc:64
+#, fuzzy
+msgid "Usar imagen para clave"
+msgstr "Imatge per mostrar clau"
+
+#: ../../../../inc/themes/classic/config-links.inc:56
+#: ../../../../inc/themes/material-blue/config-links.inc:69
+msgid "La clave de la cuenta es visualizada como una imagen."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config-proxy.inc:2
+#: ../../../../inc/themes/material-blue/config-proxy.inc:2
+msgid "Proxy"
+msgstr "Proxy"
+
+#: ../../../../inc/themes/classic/config-proxy.inc:8
+#: ../../../../inc/themes/material-blue/config-proxy.inc:8
+msgid "Usar Proxy"
+msgstr "Utilitzar Proxy"
+
#: ../../../../inc/themes/classic/config.inc:4
-#: ../../../../inc/themes/classic/preferences.inc:4
-#: ../../../../inc/themes/material-blue/config.inc:4
-#: ../../../../inc/themes/material-blue/preferences.inc:4
+#: ../../../../inc/themes/classic/preferences-site.inc:4
+#: ../../../../inc/themes/material-blue/config-site.inc:4
+#: ../../../../inc/themes/material-blue/preferences-site.inc:6
msgid "Sitio"
msgstr "Lloc"
#: ../../../../inc/themes/classic/config.inc:11
-#: ../../../../inc/themes/classic/preferences.inc:12
-#: ../../../../inc/themes/material-blue/config.inc:12
-#: ../../../../inc/themes/material-blue/preferences.inc:12
+#: ../../../../inc/themes/classic/preferences-site.inc:12
+#: ../../../../inc/themes/material-blue/config-site.inc:10
+#: ../../../../inc/themes/material-blue/preferences-site.inc:14
msgid "Idioma"
msgstr "Idioma"
#: ../../../../inc/themes/classic/config.inc:15
-#: ../../../../inc/themes/material-blue/config.inc:16
+#: ../../../../inc/themes/material-blue/config-site.inc:15
msgid ""
"Establece el idioma global de la aplicación. Es posible establecer un idioma "
"por usuario en las preferencias."
@@ -3431,7 +4229,7 @@ msgstr ""
"usuari en les preferències."
#: ../../../../inc/themes/classic/config.inc:18
-#: ../../../../inc/themes/material-blue/config.inc:19
+#: ../../../../inc/themes/material-blue/config-site.inc:19
msgid ""
"Para mejorar/añadir las traducciones, puede colaborar en http:://translate."
"syspass.org"
@@ -3440,14 +4238,14 @@ msgstr ""
"syspass.org"
#: ../../../../inc/themes/classic/config.inc:33
-#: ../../../../inc/themes/classic/preferences.inc:24
-#: ../../../../inc/themes/material-blue/config.inc:34
-#: ../../../../inc/themes/material-blue/preferences.inc:23
+#: ../../../../inc/themes/classic/preferences-site.inc:24
+#: ../../../../inc/themes/material-blue/config-site.inc:34
+#: ../../../../inc/themes/material-blue/preferences-site.inc:25
msgid "Tema Visual"
msgstr "Tema Visual"
#: ../../../../inc/themes/classic/config.inc:37
-#: ../../../../inc/themes/material-blue/config.inc:38
+#: ../../../../inc/themes/material-blue/config-site.inc:39
msgid ""
"Establece el tema visual global de la aplicación. Es posible establecer un "
"tema visual por usuario en las preferencias."
@@ -3456,28 +4254,18 @@ msgstr ""
"visual per usuari en les preferències."
#: ../../../../inc/themes/classic/config.inc:52
-#: ../../../../inc/themes/material-blue/config.inc:53
-#: ../../../../inc/themes/material-blue/config.inc:61
+#: ../../../../inc/themes/material-blue/config-site.inc:55
+#: ../../../../inc/themes/material-blue/config-site.inc:63
msgid "Timeout de sesión (s)"
msgstr "Timeout de sessió (s)"
-#: ../../../../inc/themes/classic/config.inc:61
-#: ../../../../inc/themes/material-blue/config.inc:85
-msgid "Habilitar log de eventos"
-msgstr "Habilitar registre d'esdeveniments"
-
-#: ../../../../inc/themes/classic/config.inc:65
-#: ../../../../inc/themes/material-blue/config.inc:89
-msgid "Guarda las acciones realizadas en la aplicación."
-msgstr "Guarda les accions realitzades en l'aplicació."
-
#: ../../../../inc/themes/classic/config.inc:77
-#: ../../../../inc/themes/material-blue/config.inc:103
+#: ../../../../inc/themes/material-blue/config-site.inc:89
msgid "Habilitar depuración"
msgstr "Habilitar depuració"
#: ../../../../inc/themes/classic/config.inc:81
-#: ../../../../inc/themes/material-blue/config.inc:107
+#: ../../../../inc/themes/material-blue/config-site.inc:94
msgid ""
"Muestra información relativa a la configuración de la aplicación y "
"rendimiento."
@@ -3485,12 +4273,12 @@ msgstr ""
"Mostra informació relativa a la configuració de l'aplicació i rendiment."
#: ../../../../inc/themes/classic/config.inc:93
-#: ../../../../inc/themes/material-blue/config.inc:121
+#: ../../../../inc/themes/material-blue/config-site.inc:108
msgid "Modo mantenimiento"
msgstr "Mode mantenimient"
#: ../../../../inc/themes/classic/config.inc:97
-#: ../../../../inc/themes/material-blue/config.inc:125
+#: ../../../../inc/themes/material-blue/config-site.inc:113
msgid ""
"En este modo no se puede acceder a la aplicación. Para deshabilitarlo es "
"necesario modificar el archivo de configuración."
@@ -3499,12 +4287,12 @@ msgstr ""
"necessari modificar l'arxiu de configuració."
#: ../../../../inc/themes/classic/config.inc:109
-#: ../../../../inc/themes/material-blue/config.inc:139
+#: ../../../../inc/themes/material-blue/config-site.inc:127
msgid "Comprobar actualizaciones"
msgstr "Comprovar actualitzacions"
#: ../../../../inc/themes/classic/config.inc:113
-#: ../../../../inc/themes/material-blue/config.inc:143
+#: ../../../../inc/themes/material-blue/config-site.inc:132
msgid ""
"Comprobar actualizaciones de la aplicación (sólo para los usuarios "
"administradores)."
@@ -3513,12 +4301,12 @@ msgstr ""
"administradors)."
#: ../../../../inc/themes/classic/config.inc:125
-#: ../../../../inc/themes/material-blue/config.inc:157
+#: ../../../../inc/themes/material-blue/config-site.inc:146
msgid "Comprobar notificaciones"
msgstr "Comprovar notificacions"
#: ../../../../inc/themes/classic/config.inc:129
-#: ../../../../inc/themes/material-blue/config.inc:161
+#: ../../../../inc/themes/material-blue/config-site.inc:151
msgid ""
"Comprobar si existen notificaciones de seguridad o avisos de sysPass (sólo "
"para los usuarios administradores)."
@@ -3527,16 +4315,16 @@ msgstr ""
"(només per als usuaris administradors)."
#: ../../../../inc/themes/classic/config.inc:141
-#: ../../../../inc/themes/classic/preferences.inc:38
-#: ../../../../inc/themes/material-blue/config.inc:182
-#: ../../../../inc/themes/material-blue/preferences.inc:36
+#: ../../../../inc/themes/classic/preferences-site.inc:38
+#: ../../../../inc/themes/material-blue/config-accounts.inc:10
+#: ../../../../inc/themes/material-blue/preferences-site.inc:38
msgid "Nombre de cuenta como enlace"
msgstr "Nom de compte com a enllaç"
#: ../../../../inc/themes/classic/config.inc:145
-#: ../../../../inc/themes/classic/preferences.inc:43
-#: ../../../../inc/themes/material-blue/config.inc:186
-#: ../../../../inc/themes/material-blue/preferences.inc:40
+#: ../../../../inc/themes/classic/preferences-site.inc:43
+#: ../../../../inc/themes/material-blue/config-accounts.inc:14
+#: ../../../../inc/themes/material-blue/preferences-site.inc:42
msgid ""
"Habilita el nombre de la cuenta de la búsqueda, como enlace a los detalles "
"de la cuenta."
@@ -3544,22 +4332,22 @@ msgstr ""
"Habilita el nom del compte de la cerca, com a enllaç als detalls del compte."
#: ../../../../inc/themes/classic/config.inc:157
-#: ../../../../inc/themes/material-blue/config.inc:286
+#: ../../../../inc/themes/material-blue/config-files.inc:10
msgid "Gestión de archivos"
msgstr "Gestió d'arxius"
#: ../../../../inc/themes/classic/config.inc:161
-#: ../../../../inc/themes/material-blue/config.inc:290
+#: ../../../../inc/themes/material-blue/config-files.inc:15
msgid "Habilita la subida/descarga de archivos para las cuentas."
msgstr "Habilita la pujada/descarrega d'arxius per als comptes."
#: ../../../../inc/themes/classic/config.inc:173
-#: ../../../../inc/themes/material-blue/config.inc:200
+#: ../../../../inc/themes/material-blue/config-accounts.inc:28
msgid "Búsquedas globales"
msgstr "Cerques globals"
#: ../../../../inc/themes/classic/config.inc:177
-#: ../../../../inc/themes/material-blue/config.inc:204
+#: ../../../../inc/themes/material-blue/config-accounts.inc:32
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."
@@ -3568,22 +4356,22 @@ msgstr ""
"però no poden veure el contingut de les quals no tenen permisos."
#: ../../../../inc/themes/classic/config.inc:189
-#: ../../../../inc/themes/material-blue/config.inc:305
+#: ../../../../inc/themes/material-blue/config-files.inc:30
msgid "Extensiones de archivos permitidas"
msgstr "Extensions d'arxius permeses"
#: ../../../../inc/themes/classic/config.inc:193
-#: ../../../../inc/themes/material-blue/config.inc:309
+#: ../../../../inc/themes/material-blue/config-files.inc:35
msgid "Extensiones permitidas para la subida de archivos."
msgstr "Extensions permeses per a la pujada d'arxius."
#: ../../../../inc/themes/classic/config.inc:197
-#: ../../../../inc/themes/material-blue/config.inc:313
+#: ../../../../inc/themes/material-blue/config-files.inc:39
msgid "Se permite un máximo de 4 caracteres."
msgstr "Es permet un màxim de 4 caràcters."
#: ../../../../inc/themes/classic/config.inc:201
-#: ../../../../inc/themes/material-blue/config.inc:317
+#: ../../../../inc/themes/material-blue/config-files.inc:43
msgid ""
"Escribir extensión y pulsar intro para añadir. Es necesario guardar la "
"configuración."
@@ -3592,71 +4380,71 @@ msgstr ""
"configuració."
#: ../../../../inc/themes/classic/config.inc:216
-#: ../../../../inc/themes/material-blue/config.inc:332
+#: ../../../../inc/themes/material-blue/config-files.inc:59
msgid "Establece el tamaño máximo para subir archivos."
msgstr "Estableix la grandària màxima per pujar arxius."
#: ../../../../inc/themes/classic/config.inc:220
-#: ../../../../inc/themes/material-blue/config.inc:336
+#: ../../../../inc/themes/material-blue/config-files.inc:63
msgid "El máximo absuluto es de 16MB."
msgstr "El màxim absulut és de 16MB."
#: ../../../../inc/themes/classic/config.inc:231
-#: ../../../../inc/themes/classic/preferences.inc:56
-#: ../../../../inc/themes/material-blue/config.inc:218
-#: ../../../../inc/themes/material-blue/preferences.inc:54
+#: ../../../../inc/themes/classic/preferences-site.inc:56
+#: ../../../../inc/themes/material-blue/config-accounts.inc:46
+#: ../../../../inc/themes/material-blue/preferences-site.inc:56
msgid "Resultados por página"
msgstr "Resultats per pàgina"
#: ../../../../inc/themes/classic/config.inc:235
-#: ../../../../inc/themes/classic/preferences.inc:61
-#: ../../../../inc/themes/material-blue/config.inc:222
-#: ../../../../inc/themes/material-blue/preferences.inc:58
+#: ../../../../inc/themes/classic/preferences-site.inc:61
+#: ../../../../inc/themes/material-blue/config-accounts.inc:50
+#: ../../../../inc/themes/material-blue/preferences-site.inc:60
msgid "Número de resultados por página a mostrar, al realizar una búsqueda."
msgstr "Nombre de resultats per pàgina a mostrar, en realitzar una cerca."
#: ../../../../inc/themes/classic/config.inc:246
-#: ../../../../inc/themes/material-blue/config.inc:260
+#: ../../../../inc/themes/material-blue/config-accounts.inc:89
msgid "Resultados en Tarjetas"
msgstr "Resultats en Targetes"
#: ../../../../inc/themes/classic/config.inc:250
-#: ../../../../inc/themes/material-blue/config.inc:264
+#: ../../../../inc/themes/material-blue/config-accounts.inc:93
msgid "Muestra los resultados de búsqueda de cuentas en formato tarjeta."
msgstr "Mostra els resultats de cerca de comptes en format targeta."
#: ../../../../inc/themes/classic/config.inc:262
-#: ../../../../inc/themes/material-blue/config.inc:238
+#: ../../../../inc/themes/material-blue/config-accounts.inc:66
msgid "Imagen para mostrar clave"
msgstr "Imatge per mostrar clau"
#: ../../../../inc/themes/classic/config.inc:266
-#: ../../../../inc/themes/material-blue/config.inc:242
+#: ../../../../inc/themes/material-blue/config-accounts.inc:70
msgid "Generar una imagen con el texto de la clave de la cuenta."
msgstr "Generar una imatge amb el text de la clau del compte."
#: ../../../../inc/themes/classic/config.inc:269
-#: ../../../../inc/themes/material-blue/config.inc:245
+#: ../../../../inc/themes/material-blue/config-accounts.inc:74
msgid "Util para entornos donde copiar la clave supone un riesgo de seguridad."
msgstr "Util per a entorns on copiar la clau suposa un risc de seguretat."
-#: ../../../../inc/themes/classic/config.inc:304
-#: ../../../../inc/themes/material-blue/config.inc:454
+#: ../../../../inc/themes/classic/config.inc:308
+#: ../../../../inc/themes/material-blue/config.inc:39
msgid "Añadir extensión"
msgstr "Afegir extensió"
-#: ../../../../inc/themes/classic/config.inc:305
-#: ../../../../inc/themes/material-blue/config.inc:455
+#: ../../../../inc/themes/classic/config.inc:309
+#: ../../../../inc/themes/material-blue/config.inc:40
msgid "Eliminar extensión"
msgstr "Eliminar extensió"
-#: ../../../../inc/themes/classic/customers.inc:10
-#: ../../../../inc/themes/material-blue/customers.inc:14
+#: ../../../../inc/themes/classic/customers.inc:11
+#: ../../../../inc/themes/material-blue/customers.inc:16
msgid "Nombre del cliente"
msgstr "Nom del client"
-#: ../../../../inc/themes/classic/customers.inc:18
-#: ../../../../inc/themes/material-blue/customers.inc:26
+#: ../../../../inc/themes/classic/customers.inc:19
+#: ../../../../inc/themes/material-blue/customers.inc:28
msgid "Descripción del cliente"
msgstr "Descripció del client"
@@ -3670,13 +4458,62 @@ msgstr "Text Ajuda"
msgid "Obligatorio"
msgstr "Obligatori"
+#: ../../../../inc/themes/classic/datagrid-nav-full.inc:11
+#: ../../../../inc/themes/classic/search.inc:166
+#: ../../../../inc/themes/material-blue/datagrid-nav-full.inc:11
+msgid "Filtro ON"
+msgstr "Filtre ON"
+
+#: ../../../../inc/themes/classic/datagrid-rows.inc:10
+#: ../../../../inc/themes/classic/datasearch-grid.inc:12
+#: ../../../../inc/themes/classic/eventlog.inc:6
+#: ../../../../inc/themes/classic/search.inc:5
+#: ../../../../inc/themes/material-blue/datagrid-rows.inc:10
+#: ../../../../inc/themes/material-blue/datasearch-grid.inc:12
+#: ../../../../inc/themes/material-blue/eventlog.inc:8
+msgid "No se encontraron registros"
+msgstr "No es van trobar registres"
+
+#: ../../../../inc/themes/classic/datasearch-rows.inc:19
+#: ../../../../inc/themes/classic/search.inc:36
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:19
+msgid "Buscar en Wiki"
+msgstr "Cercar en Wiki"
+
+#: ../../../../inc/themes/classic/datasearch-rows.inc:53
+#: ../../../../inc/themes/classic/search.inc:72
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:53
+msgid "Abrir enlace a"
+msgstr "Obrir enllaç a"
+
+#: ../../../../inc/themes/classic/datasearch-rows.inc:78
+#: ../../../../inc/themes/classic/search.inc:90
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:84
+msgid "Archivos adjuntos"
+msgstr "Arxius adjunts"
+
+#: ../../../../inc/themes/classic/datasearch-rows.inc:85
+#: ../../../../inc/themes/classic/datasearch-rows.inc:92
+#: ../../../../inc/themes/classic/search.inc:99
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:93
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:100
+msgid "Enlace a Wiki"
+msgstr "Enllaç a Wiki"
+
+#: ../../../../inc/themes/classic/datasearch-rows.inc:88
+#: ../../../../inc/themes/classic/search.inc:96
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:95
+#, fuzzy
+msgid "Ver en Wiki"
+msgstr "Cercar en Wiki"
+
#: ../../../../inc/themes/classic/encryption.inc:5
#: ../../../../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:5
+#: ../../../../inc/themes/material-blue/encryption.inc:7
#: ../../../../inc/themes/material-blue/install.inc:52
#: ../../../../inc/themes/material-blue/install.inc:59
#: ../../../../inc/themes/material-blue/login.inc:26
@@ -3686,69 +4523,69 @@ msgstr "Clau Mestra"
#: ../../../../inc/themes/classic/encryption.inc:13
#: ../../../../inc/themes/classic/encryption.inc:113
-#: ../../../../inc/themes/material-blue/encryption.inc:13
-#: ../../../../inc/themes/material-blue/encryption.inc:128
+#: ../../../../inc/themes/material-blue/encryption.inc:15
+#: ../../../../inc/themes/material-blue/encryption.inc:130
msgid "Último cambio"
msgstr "Últim canvi"
#: ../../../../inc/themes/classic/encryption.inc:22
-#: ../../../../inc/themes/material-blue/encryption.inc:22
-#: ../../../../inc/themes/material-blue/encryption.inc:28
+#: ../../../../inc/themes/material-blue/encryption.inc:24
+#: ../../../../inc/themes/material-blue/encryption.inc:30
msgid "Clave Maestra actual"
msgstr "Clau Mestra actual"
#: ../../../../inc/themes/classic/encryption.inc:31
-#: ../../../../inc/themes/material-blue/encryption.inc:34
-#: ../../../../inc/themes/material-blue/encryption.inc:40
+#: ../../../../inc/themes/material-blue/encryption.inc:36
+#: ../../../../inc/themes/material-blue/encryption.inc:42
msgid "Nueva Clave Maestra"
msgstr "Nova Clau Mestra"
#: ../../../../inc/themes/classic/encryption.inc:40
-#: ../../../../inc/themes/material-blue/encryption.inc:46
-#: ../../../../inc/themes/material-blue/encryption.inc:52
+#: ../../../../inc/themes/material-blue/encryption.inc:48
+#: ../../../../inc/themes/material-blue/encryption.inc:54
msgid "Nueva Clave Maestra (repetir)"
msgstr "Nova Clau Mestra (repetir)"
#: ../../../../inc/themes/classic/encryption.inc:48
-#: ../../../../inc/themes/material-blue/encryption.inc:58
+#: ../../../../inc/themes/material-blue/encryption.inc:60
msgid "No modificar cuentas"
msgstr "No modificar comptes"
#: ../../../../inc/themes/classic/encryption.inc:53
-#: ../../../../inc/themes/material-blue/encryption.inc:63
+#: ../../../../inc/themes/material-blue/encryption.inc:65
msgid "Establece una nueva clave maestra sin re-encriptar las cuentas"
msgstr "Estableix una nova clau mestra sense re-encriptar els comptes"
#: ../../../../inc/themes/classic/encryption.inc:64
-#: ../../../../inc/themes/material-blue/encryption.inc:76
+#: ../../../../inc/themes/material-blue/encryption.inc:78
msgid "Confirmar cambio"
msgstr "Confirmar canvi"
#: ../../../../inc/themes/classic/encryption.inc:67
#: ../../../../inc/themes/classic/encryption.inc:70
#: ../../../../inc/themes/classic/encryption.inc:73
-#: ../../../../inc/themes/classic/import.inc:64
-#: ../../../../inc/themes/classic/security.inc:43
+#: ../../../../inc/themes/classic/import.inc:169
+#: ../../../../inc/themes/classic/preferences-security.inc:43
msgid "Atención"
msgstr "Atenció"
#: ../../../../inc/themes/classic/encryption.inc:68
-#: ../../../../inc/themes/material-blue/encryption.inc:80
+#: ../../../../inc/themes/material-blue/encryption.inc:82
msgid "Guarde la nueva clave en un lugar seguro."
msgstr "Guardi la nova clau en un lloc segur."
#: ../../../../inc/themes/classic/encryption.inc:71
-#: ../../../../inc/themes/material-blue/encryption.inc:83
+#: ../../../../inc/themes/material-blue/encryption.inc:85
msgid "Se volverán a encriptar las claves de todas las cuentas."
msgstr "Es tornaran a encriptar les claus de tots els comptes."
#: ../../../../inc/themes/classic/encryption.inc:74
-#: ../../../../inc/themes/material-blue/encryption.inc:86
+#: ../../../../inc/themes/material-blue/encryption.inc:88
msgid "Los usuarios deberán de introducir la nueva clave maestra."
msgstr "Els usuaris deuran introduir la nova clau mestra."
#: ../../../../inc/themes/classic/encryption.inc:95
-#: ../../../../inc/themes/material-blue/encryption.inc:109
+#: ../../../../inc/themes/material-blue/encryption.inc:111
msgid ""
"La clave maestra es utilizada para encriptar las claves de las cuentas de "
"sysPass para mantenerlas seguras."
@@ -3757,7 +4594,7 @@ msgstr ""
"per mantenir-les segures."
#: ../../../../inc/themes/classic/encryption.inc:97
-#: ../../../../inc/themes/material-blue/encryption.inc:111
+#: ../../../../inc/themes/material-blue/encryption.inc:113
msgid ""
"Es recomendable cambiarla cada cierto tiempo y utilizar una clave compleja "
"que incluya números, letras y símbolos."
@@ -3766,25 +4603,25 @@ msgstr ""
"inclogui nombres, lletres i símbols."
#: ../../../../inc/themes/classic/encryption.inc:105
-#: ../../../../inc/themes/material-blue/encryption.inc:121
+#: ../../../../inc/themes/material-blue/encryption.inc:123
msgid "Clave Temporal"
msgstr "Clau Temporal"
#: ../../../../inc/themes/classic/encryption.inc:116
#: ../../../../inc/themes/classic/encryption.inc:127
-#: ../../../../inc/themes/material-blue/encryption.inc:131
-#: ../../../../inc/themes/material-blue/encryption.inc:142
+#: ../../../../inc/themes/material-blue/encryption.inc:133
+#: ../../../../inc/themes/material-blue/encryption.inc:144
msgid "No generada"
msgstr "No generada"
#: ../../../../inc/themes/classic/encryption.inc:121
-#: ../../../../inc/themes/material-blue/encryption.inc:136
+#: ../../../../inc/themes/material-blue/encryption.inc:138
msgid "Válido hasta"
msgstr "Vàlid fins a"
#: ../../../../inc/themes/classic/encryption.inc:133
-#: ../../../../inc/themes/material-blue/encryption.inc:148
-#: ../../../../inc/themes/material-blue/encryption.inc:154
+#: ../../../../inc/themes/material-blue/encryption.inc:150
+#: ../../../../inc/themes/material-blue/encryption.inc:156
msgid "Validez (s)"
msgstr "Validesa (s)"
@@ -3793,7 +4630,7 @@ msgid "Validez"
msgstr "Validesa"
#: ../../../../inc/themes/classic/encryption.inc:164
-#: ../../../../inc/themes/material-blue/encryption.inc:183
+#: ../../../../inc/themes/material-blue/encryption.inc:185
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 "
@@ -3804,73 +4641,31 @@ msgstr ""
"la clau mestra original."
#: ../../../../inc/themes/classic/encryption.inc:166
-#: ../../../../inc/themes/material-blue/encryption.inc:187
+#: ../../../../inc/themes/material-blue/encryption.inc:189
msgid "Generar"
msgstr "Generar"
-#: ../../../../inc/themes/classic/eventlog.inc:6
-#: ../../../../inc/themes/classic/search.inc:3
-#: ../../../../inc/themes/material-blue/eventlog.inc:6
-#: ../../../../inc/themes/material-blue/search.inc:3
-msgid "No se encontraron registros"
-msgstr "No es van trobar registres"
-
#: ../../../../inc/themes/classic/eventlog.inc:17
-#: ../../../../inc/themes/material-blue/eventlog.inc:17
+#: ../../../../inc/themes/material-blue/eventlog.inc:19
msgid "Fecha / Hora"
msgstr "Data / Hora"
#: ../../../../inc/themes/classic/eventlog.inc:20
-#: ../../../../inc/themes/material-blue/eventlog.inc:20
+#: ../../../../inc/themes/material-blue/eventlog.inc:22
+#, fuzzy
+msgid "Nivel"
+msgstr "Nivell alt"
+
+#: ../../../../inc/themes/classic/eventlog.inc:23
+#: ../../../../inc/themes/material-blue/eventlog.inc:25
msgid "Evento"
msgstr "Event"
-#: ../../../../inc/themes/classic/eventlog.inc:26
-#: ../../../../inc/themes/material-blue/eventlog.inc:26
+#: ../../../../inc/themes/classic/eventlog.inc:29
+#: ../../../../inc/themes/material-blue/eventlog.inc:31
msgid "IP"
msgstr "IP"
-#: ../../../../inc/themes/classic/eventlog.inc:84
-#: ../../../../inc/themes/classic/search.inc:20
-#: ../../../../inc/themes/classic/search.inc:199
-#: ../../../../inc/themes/material-blue/eventlog.inc:84
-#: ../../../../inc/themes/material-blue/search.inc:20
-#: ../../../../inc/themes/material-blue/search.inc:209
-msgid "Primera página"
-msgstr "Primera pàgina"
-
-#: ../../../../inc/themes/classic/eventlog.inc:86
-#: ../../../../inc/themes/classic/search.inc:22
-#: ../../../../inc/themes/classic/search.inc:201
-#: ../../../../inc/themes/material-blue/eventlog.inc:86
-#: ../../../../inc/themes/material-blue/search.inc:22
-#: ../../../../inc/themes/material-blue/search.inc:211
-msgid "Página anterior"
-msgstr "Pàgina anterior"
-
-#: ../../../../inc/themes/classic/eventlog.inc:91
-#: ../../../../inc/themes/classic/search.inc:27
-#: ../../../../inc/themes/classic/search.inc:206
-#: ../../../../inc/themes/material-blue/eventlog.inc:91
-#: ../../../../inc/themes/material-blue/search.inc:27
-#: ../../../../inc/themes/material-blue/search.inc:216
-msgid "Página siguiente"
-msgstr "Pàgina següent"
-
-#: ../../../../inc/themes/classic/eventlog.inc:93
-#: ../../../../inc/themes/classic/search.inc:29
-#: ../../../../inc/themes/classic/search.inc:208
-#: ../../../../inc/themes/material-blue/eventlog.inc:93
-#: ../../../../inc/themes/material-blue/search.inc:29
-#: ../../../../inc/themes/material-blue/search.inc:218
-msgid "Última página"
-msgstr "Última pàgina"
-
-#: ../../../../inc/themes/classic/files.inc:22
-#: ../../../../inc/themes/material-blue/files.inc:21
-msgid "Ver Archivo"
-msgstr "Veure Arxiu"
-
#: ../../../../inc/themes/classic/footer.inc:6
#: ../../../../inc/themes/material-blue/footer.inc:29
msgid "Indica si la conexión utiliza HTTPS."
@@ -3904,127 +4699,61 @@ msgid "Un proyecto de cygnux.org"
msgstr "Un projecte de cygnux.org"
#: ../../../../inc/themes/classic/groups.inc:10
-#: ../../../../inc/themes/material-blue/groups.inc:14
+#: ../../../../inc/themes/material-blue/groups.inc:17
msgid "Nombre del grupo"
msgstr "Nom del grup"
#: ../../../../inc/themes/classic/groups.inc:18
-#: ../../../../inc/themes/material-blue/groups.inc:26
+#: ../../../../inc/themes/material-blue/groups.inc:29
msgid "Descripción del grupo"
msgstr "Descripció del grup"
#: ../../../../inc/themes/classic/import.inc:4
-#: ../../../../inc/themes/material-blue/import.inc:119
-msgid "Importar phpPMS"
-msgstr "Importar phpPMS"
-
-#: ../../../../inc/themes/classic/import.inc:11
-#: ../../../../inc/themes/classic/install.inc:63
-#: ../../../../inc/themes/classic/install.inc:64
-#: ../../../../inc/themes/material-blue/import.inc:126
-#: ../../../../inc/themes/material-blue/import.inc:138
-msgid "Usuario BBDD"
-msgstr "Usuari BBDD"
-
-#: ../../../../inc/themes/classic/import.inc:15
-#: ../../../../inc/themes/material-blue/import.inc:130
-msgid "Indicar el usuario de conexión a la base de datos de phpPMS."
-msgstr "Indicar l'usuari de connexió a la base de dades de phpPMS."
-
-#: ../../../../inc/themes/classic/import.inc:25
-#: ../../../../inc/themes/classic/install.inc:71
-#: ../../../../inc/themes/classic/install.inc:73
-#: ../../../../inc/themes/material-blue/import.inc:144
-#: ../../../../inc/themes/material-blue/import.inc:150
-msgid "Clave BBDD"
-msgstr "Clau BBDD"
-
-#: ../../../../inc/themes/classic/import.inc:33
-#: ../../../../inc/themes/classic/install.inc:78
-#: ../../../../inc/themes/classic/install.inc:79
-#: ../../../../inc/themes/material-blue/import.inc:156
-#: ../../../../inc/themes/material-blue/import.inc:168
-msgid "Nombre BBDD"
-msgstr "Nom BBDD"
-
-#: ../../../../inc/themes/classic/import.inc:37
-#: ../../../../inc/themes/material-blue/import.inc:160
-msgid "Indicar el nombre de la base de datos de phpPMS."
-msgstr "Indicar el nom de la base de dades de phpPMS."
-
-#: ../../../../inc/themes/classic/import.inc:47
-#: ../../../../inc/themes/classic/install.inc:87
-#: ../../../../inc/themes/classic/install.inc:88
-#: ../../../../inc/themes/material-blue/import.inc:174
-#: ../../../../inc/themes/material-blue/import.inc:186
-msgid "Servidor BBDD"
-msgstr "Servidor BBDD"
-
-#: ../../../../inc/themes/classic/import.inc:51
-#: ../../../../inc/themes/material-blue/import.inc:178
-msgid "Indicar el servidor de la base de datos de phpPMS."
-msgstr "Indicar el servidor de la base de dades de phpPMS."
-
-#: ../../../../inc/themes/classic/import.inc:61
-#: ../../../../inc/themes/material-blue/import.inc:192
-msgid "Confirmar"
-msgstr "Confirmar"
-
-#: ../../../../inc/themes/classic/import.inc:65
-#: ../../../../inc/themes/material-blue/import.inc:196
-msgid "Los datos actuales serán borrados (excepto el usuario actual)"
-msgstr "Les dades actuals seran esborrats (excepte l'usuari actual)"
-
-#: ../../../../inc/themes/classic/import.inc:80
-msgid "Iniciar"
-msgstr "Iniciar"
-
-#: ../../../../inc/themes/classic/import.inc:86
-#: ../../../../inc/themes/material-blue/import.inc:4
+#: ../../../../inc/themes/material-blue/import.inc:6
msgid "Importar CSV/XML"
msgstr "Importar CSV/XML"
-#: ../../../../inc/themes/classic/import.inc:93
-#: ../../../../inc/themes/material-blue/import.inc:11
+#: ../../../../inc/themes/classic/import.inc:11
+#: ../../../../inc/themes/material-blue/import.inc:13
msgid "Usuario por Defecto"
msgstr "Usuari per Defecte"
-#: ../../../../inc/themes/classic/import.inc:97
-#: ../../../../inc/themes/material-blue/import.inc:15
+#: ../../../../inc/themes/classic/import.inc:15
+#: ../../../../inc/themes/material-blue/import.inc:17
msgid "Define el usuario por defecto para las cuentas importadas."
msgstr "Defineix l'usuari per defecte per als comptes importats."
-#: ../../../../inc/themes/classic/import.inc:114
+#: ../../../../inc/themes/classic/import.inc:32
#: ../../../../inc/themes/classic/ldap.inc:144
-#: ../../../../inc/themes/material-blue/import.inc:33
-#: ../../../../inc/themes/material-blue/ldap.inc:170
+#: ../../../../inc/themes/material-blue/import.inc:35
+#: ../../../../inc/themes/material-blue/ldap.inc:172
msgid "Grupo por Defecto"
msgstr "Grup per Defecte"
-#: ../../../../inc/themes/classic/import.inc:118
-#: ../../../../inc/themes/material-blue/import.inc:37
+#: ../../../../inc/themes/classic/import.inc:36
+#: ../../../../inc/themes/material-blue/import.inc:39
msgid "Define el grupo por defecto para las cuentas importadas."
msgstr "Defineix el grup per defecte per als comptes importats."
-#: ../../../../inc/themes/classic/import.inc:135
-#: ../../../../inc/themes/material-blue/import.inc:55
-#: ../../../../inc/themes/material-blue/import.inc:61
+#: ../../../../inc/themes/classic/import.inc:53
+#: ../../../../inc/themes/material-blue/import.inc:57
+#: ../../../../inc/themes/material-blue/import.inc:63
msgid "Clave de Importación"
msgstr "Clau d'Importació"
-#: ../../../../inc/themes/classic/import.inc:143
-#: ../../../../inc/themes/material-blue/import.inc:67
-#: ../../../../inc/themes/material-blue/import.inc:73
+#: ../../../../inc/themes/classic/import.inc:61
+#: ../../../../inc/themes/material-blue/import.inc:69
+#: ../../../../inc/themes/material-blue/import.inc:75
msgid "Delimitador CSV"
msgstr "Delimitador CSV"
-#: ../../../../inc/themes/classic/import.inc:157
-#: ../../../../inc/themes/material-blue/import.inc:85
+#: ../../../../inc/themes/classic/import.inc:75
+#: ../../../../inc/themes/material-blue/import.inc:87
msgid "Soltar archivo aquí o click para seleccionar"
msgstr "Deixar anar arxiu aquí o clic per seleccionar"
-#: ../../../../inc/themes/classic/import.inc:173
-#: ../../../../inc/themes/material-blue/import.inc:102
+#: ../../../../inc/themes/classic/import.inc:91
+#: ../../../../inc/themes/material-blue/import.inc:104
msgid ""
"Permite realizar la importación de Cuentas, Categorías y Clientes desde "
"archivos XML y CSV."
@@ -4032,22 +4761,22 @@ msgstr ""
"Permet realitzar la importació de Comptes, Categories i Clients des d'arxius "
"XML i CSV."
-#: ../../../../inc/themes/classic/import.inc:175
-#: ../../../../inc/themes/material-blue/import.inc:104
+#: ../../../../inc/themes/classic/import.inc:93
+#: ../../../../inc/themes/material-blue/import.inc:106
msgid ""
"Los formatos de archivos XML soportados son: sysPass, KeePass y KeePassX"
msgstr "Els formats d'arxius XML suportats són: sysPass, KeePass i KeePassX"
-#: ../../../../inc/themes/classic/import.inc:177
-#: ../../../../inc/themes/material-blue/import.inc:106
+#: ../../../../inc/themes/classic/import.inc:95
+#: ../../../../inc/themes/material-blue/import.inc:108
msgid ""
"Arrastar el archivo a importar a la zona indicada o hacer click sobre la "
"flecha."
msgstr ""
"Arrossegarr l'arxiu a importar a la zona indicada o fer clic sobre la fletxa."
-#: ../../../../inc/themes/classic/import.inc:179
-#: ../../../../inc/themes/material-blue/import.inc:108
+#: ../../../../inc/themes/classic/import.inc:97
+#: ../../../../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."
@@ -4055,18 +4784,18 @@ msgstr ""
"Per a arxius de KeePass o KeePassX, el nom del client serà igual a KeePass o "
"KeePassX i la categoria igual al nom dels grups."
-#: ../../../../inc/themes/classic/import.inc:181
-#: ../../../../inc/themes/material-blue/import.inc:110
+#: ../../../../inc/themes/classic/import.inc:99
+#: ../../../../inc/themes/material-blue/import.inc:112
msgid "La importación de archivos CSV se realiza con el siguiente formato:"
msgstr "La importació d'arxius CSV es realitza amb el següent format:"
-#: ../../../../inc/themes/classic/import.inc:183
-#: ../../../../inc/themes/material-blue/import.inc:112
+#: ../../../../inc/themes/classic/import.inc:101
+#: ../../../../inc/themes/material-blue/import.inc:114
msgid "nombre_de_cuenta;cliente;categoría;url;usuario;clave;notas"
msgstr "nom_de_compte;client;categoria;url;usuari;clau;notes"
-#: ../../../../inc/themes/classic/import.inc:185
-#: ../../../../inc/themes/material-blue/import.inc:114
+#: ../../../../inc/themes/classic/import.inc:103
+#: ../../../../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."
@@ -4074,6 +4803,72 @@ msgstr ""
"En tots els casos, si el client o la categoria no estan creats, es creen "
"automàticament."
+#: ../../../../inc/themes/classic/import.inc:109
+#: ../../../../inc/themes/material-blue/import.inc:121
+msgid "Importar phpPMS"
+msgstr "Importar phpPMS"
+
+#: ../../../../inc/themes/classic/import.inc:116
+#: ../../../../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 "Usuari BBDD"
+
+#: ../../../../inc/themes/classic/import.inc:120
+#: ../../../../inc/themes/material-blue/import.inc:132
+msgid "Indicar el usuario de conexión a la base de datos de phpPMS."
+msgstr "Indicar l'usuari de connexió a la base de dades de phpPMS."
+
+#: ../../../../inc/themes/classic/import.inc:130
+#: ../../../../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 "Clau BBDD"
+
+#: ../../../../inc/themes/classic/import.inc:138
+#: ../../../../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 BBDD"
+
+#: ../../../../inc/themes/classic/import.inc:142
+#: ../../../../inc/themes/material-blue/import.inc:162
+msgid "Indicar el nombre de la base de datos de phpPMS."
+msgstr "Indicar el nom de la base de dades de phpPMS."
+
+#: ../../../../inc/themes/classic/import.inc:152
+#: ../../../../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 "Servidor BBDD"
+
+#: ../../../../inc/themes/classic/import.inc:156
+#: ../../../../inc/themes/material-blue/import.inc:180
+msgid "Indicar el servidor de la base de datos de phpPMS."
+msgstr "Indicar el servidor de la base de dades de phpPMS."
+
+#: ../../../../inc/themes/classic/import.inc:166
+#: ../../../../inc/themes/material-blue/import.inc:194
+msgid "Confirmar"
+msgstr "Confirmar"
+
+#: ../../../../inc/themes/classic/import.inc:170
+#: ../../../../inc/themes/material-blue/import.inc:198
+msgid "Los datos actuales serán borrados (excepto el usuario actual)"
+msgstr "Les dades actuals seran esborrats (excepte l'usuari actual)"
+
+#: ../../../../inc/themes/classic/import.inc:185
+msgid "Iniciar"
+msgstr "Iniciar"
+
#: ../../../../inc/themes/classic/info.inc:4
#: ../../../../inc/themes/material-blue/info.inc:4
msgid "Información de la Aplicación"
@@ -4104,18 +4899,6 @@ msgstr "Extensions"
msgid "Memoria Usada"
msgstr "Memòria Utilitzada"
-#: ../../../../inc/themes/classic/info.inc:44
-#: ../../../../inc/themes/classic/ldap.inc:32
-#: ../../../../inc/themes/classic/mail.inc:21
-#: ../../../../inc/themes/material-blue/config.inc:372
-#: ../../../../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/mail.inc:24
-#: ../../../../inc/themes/material-blue/mail.inc:30
-msgid "Servidor"
-msgstr "Servidor"
-
#: ../../../../inc/themes/classic/install.inc:4
#: ../../../../inc/themes/material-blue/install.inc:4
msgid "Instalación "
@@ -4166,22 +4949,22 @@ msgid "Instalar"
msgstr "Instal·lar"
#: ../../../../inc/themes/classic/ldap.inc:12
-#: ../../../../inc/themes/material-blue/ldap.inc:12
+#: ../../../../inc/themes/material-blue/ldap.inc:14
msgid "Habilitar LDAP"
msgstr "Habilitar LDAP"
#: ../../../../inc/themes/classic/ldap.inc:16
-#: ../../../../inc/themes/material-blue/ldap.inc:16
+#: ../../../../inc/themes/material-blue/ldap.inc:18
msgid "Habilita de autentificación mediante servidor LDAP."
msgstr "Habilita l'autenticació mitjançant servidor LDAP."
#: ../../../../inc/themes/classic/ldap.inc:20
-#: ../../../../inc/themes/material-blue/ldap.inc:20
+#: ../../../../inc/themes/material-blue/ldap.inc:22
msgid "Este método utilizará MySQL en caso de fallo."
msgstr "Aquest mètode utilitzarà MySQL en cas de fallada."
#: ../../../../inc/themes/classic/ldap.inc:36
-#: ../../../../inc/themes/material-blue/ldap.inc:39
+#: ../../../../inc/themes/material-blue/ldap.inc:41
msgid "Nombre o dirección IP del servidor de LDAP."
msgstr "Nom o adreça IP del servidor de LDAP."
@@ -4190,89 +4973,100 @@ msgstr "Nom o adreça IP del servidor de LDAP."
#: ../../../../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
+#: ../../../../inc/themes/material-blue/ldap.inc:45
+#: ../../../../inc/themes/material-blue/ldap.inc:74
+#: ../../../../inc/themes/material-blue/ldap.inc:121
+#: ../../../../inc/themes/material-blue/ldap.inc:153
+#: ../../../../inc/themes/material-blue/wiki.inc:105
msgid "Ejemplos:"
msgstr "Exemples:"
#: ../../../../inc/themes/classic/ldap.inc:57
-#: ../../../../inc/themes/material-blue/ldap.inc:64
+#: ../../../../inc/themes/material-blue/ldap.inc:66
msgid "Usuario de conexión"
msgstr "Usuari de connexió"
#: ../../../../inc/themes/classic/ldap.inc:61
-#: ../../../../inc/themes/material-blue/ldap.inc:68
+#: ../../../../inc/themes/material-blue/ldap.inc:70
msgid "Usuario para conectar con el servicio de LDAP."
msgstr "Usuari per connectar amb el servei de LDAP."
#: ../../../../inc/themes/classic/ldap.inc:81
-#: ../../../../inc/themes/material-blue/ldap.inc:92
+#: ../../../../inc/themes/material-blue/ldap.inc:94
msgid "Clave de conexión"
msgstr "Clau de connexió"
#: ../../../../inc/themes/classic/ldap.inc:92
-#: ../../../../inc/themes/material-blue/ldap.inc:111
-#: ../../../../inc/themes/material-blue/ldap.inc:133
+#: ../../../../inc/themes/material-blue/ldap.inc:113
+#: ../../../../inc/themes/material-blue/ldap.inc:135
msgid "Base de búsqueda"
msgstr "Base de cerca"
#: ../../../../inc/themes/classic/ldap.inc:96
-#: ../../../../inc/themes/material-blue/ldap.inc:115
+#: ../../../../inc/themes/material-blue/ldap.inc:117
msgid "Base en la que realizar la búsqueda de usuarios de LDAP."
msgstr "Base en la qual realitzar la cerca d'usuaris de LDAP."
#: ../../../../inc/themes/classic/ldap.inc:120
-#: ../../../../inc/themes/material-blue/ldap.inc:143
+#: ../../../../inc/themes/material-blue/ldap.inc:145
msgid ""
"Grupo de LDAP al que debe de pertenecer el usuario para permitir el acceso."
msgstr "Grup de LDAP al que deu pertànyer l'usuari per permetre l'accés."
#: ../../../../inc/themes/classic/ldap.inc:124
-#: ../../../../inc/themes/material-blue/ldap.inc:147
+#: ../../../../inc/themes/material-blue/ldap.inc:149
msgid "Este grupo debe de estar ubicado en la base de búsquedas de LDAP."
msgstr "Aquest grup deu estar situat a la base de cerques de LDAP."
#: ../../../../inc/themes/classic/ldap.inc:148
-#: ../../../../inc/themes/material-blue/ldap.inc:174
+#: ../../../../inc/themes/material-blue/ldap.inc:176
msgid ""
"Define el grupo de usuarios por defecto para los nuevos usuarios de LDAP."
msgstr "Defineix el grup d'usuaris per defecte per als nous usuaris de LDAP."
#: ../../../../inc/themes/classic/ldap.inc:165
-#: ../../../../inc/themes/material-blue/ldap.inc:190
+#: ../../../../inc/themes/material-blue/ldap.inc:192
msgid "Perfil por Defecto"
msgstr "Perfil per Defecte"
#: ../../../../inc/themes/classic/ldap.inc:169
-#: ../../../../inc/themes/material-blue/ldap.inc:194
+#: ../../../../inc/themes/material-blue/ldap.inc:196
msgid ""
"Define el perfil de usuarios por defecto para los nuevos usuarios de LDAP."
msgstr ""
"Defineix el perfil d'usuaris per defecte per als nous usuaris de *LDAP."
#: ../../../../inc/themes/classic/ldap.inc:186
-#: ../../../../inc/themes/material-blue/ldap.inc:210
+#: ../../../../inc/themes/material-blue/ldap.inc:212
msgid "Active Directory"
msgstr "Active Directory"
#: ../../../../inc/themes/classic/ldap.inc:190
-#: ../../../../inc/themes/material-blue/ldap.inc:214
+#: ../../../../inc/themes/material-blue/ldap.inc:216
msgid "Habilita el modo de conexión con LDAP de Active Directory."
msgstr "Habilita el mode de connexió amb LDAP d'Active Directory."
#: ../../../../inc/themes/classic/ldap.inc:202
-#: ../../../../inc/themes/material-blue/ldap.inc:228
+#: ../../../../inc/themes/classic/wiki.inc:214
+#: ../../../../inc/themes/material-blue/ldap.inc:230
+#: ../../../../inc/themes/material-blue/wiki.inc:247
msgid "Comprobar"
msgstr "Comprovar"
#: ../../../../inc/themes/classic/ldap.inc:206
-#: ../../../../inc/themes/material-blue/ldap.inc:232
+#: ../../../../inc/themes/material-blue/ldap.inc:234
msgid "Comprobar conexión con LDAP"
msgstr "Comprovar connexió amb LDAP"
+#: ../../../../inc/themes/classic/login-2fa.inc:14
+#: ../../../../inc/themes/material-blue/login-2fa.inc:12
+msgid "Introducir código"
+msgstr "Introduir codi"
+
+#: ../../../../inc/themes/classic/login-2fa.inc:26
+msgid "Verificar"
+msgstr "Verificar"
+
#: ../../../../inc/themes/classic/login.inc:46
#: ../../../../inc/themes/material-blue/login.inc:74
msgid "¿Olvidó su clave?"
@@ -4292,44 +5086,31 @@ msgid "Nuevas Características"
msgstr "Noves Característiques"
#: ../../../../inc/themes/classic/mail.inc:11
-#: ../../../../inc/themes/material-blue/mail.inc:11
+#: ../../../../inc/themes/material-blue/mail.inc:13
msgid "Habilitar notificaciones de correo"
msgstr "Habilitar notificacions de correu"
-#: ../../../../inc/themes/classic/mail.inc:29
-#: ../../../../inc/themes/material-blue/config.inc:386
-#: ../../../../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
+#: ../../../../inc/themes/material-blue/mail.inc:51
msgid "Habilitar Autentificación"
msgstr "Habilitar Autenticació"
#: ../../../../inc/themes/classic/mail.inc:68
-#: ../../../../inc/themes/material-blue/mail.inc:91
+#: ../../../../inc/themes/material-blue/mail.inc:93
msgid "Deshabilitada"
msgstr "Deshabilitada"
#: ../../../../inc/themes/classic/mail.inc:77
-#: ../../../../inc/themes/material-blue/mail.inc:100
-#: ../../../../inc/themes/material-blue/mail.inc:107
+#: ../../../../inc/themes/material-blue/mail.inc:102
+#: ../../../../inc/themes/material-blue/mail.inc:109
msgid "Dirección de correo de envío"
msgstr "Adreça de correu d'enviament"
#: ../../../../inc/themes/classic/mail.inc:85
-#: ../../../../inc/themes/material-blue/mail.inc:113
+#: ../../../../inc/themes/material-blue/mail.inc:115
msgid "Habilitar peticiones por correo"
msgstr "Habilitar peticions per correu"
-#: ../../../../inc/themes/classic/mgmttabs.inc:70
-#: ../../../../inc/themes/classic/search.inc:150
-#: ../../../../inc/themes/material-blue/search.inc:160
-msgid "Más Acciones"
-msgstr "Més Accions"
-
#: ../../../../inc/themes/classic/passreset.inc:13
#: ../../../../inc/themes/material-blue/passreset.inc:9
msgid "Solicitud de Cambio de Clave"
@@ -4354,7 +5135,7 @@ msgid "Volver a iniciar sesión"
msgstr "Tornar a iniciar sessió"
#: ../../../../inc/themes/classic/passreset.inc:48
-#: ../../../../inc/themes/material-blue/2fa.inc:25
+#: ../../../../inc/themes/material-blue/login-2fa.inc:25
#: ../../../../inc/themes/material-blue/passreset.inc:53
#: ../../../../inc/themes/material-blue/passreset.inc:54
msgid "Solicitar"
@@ -4370,84 +5151,125 @@ msgstr "Sol·licitar canvi de clau"
msgid "Cambiar"
msgstr "Canviar"
-#: ../../../../inc/themes/classic/passreset.inc:52
-msgid "Cambiar Clave"
-msgstr "Canviar Clau"
+#: ../../../../inc/themes/classic/preferences-security.inc:4
+msgid "Autenticación"
+msgstr "Autenticació"
-#: ../../../../inc/themes/classic/preferences.inc:73
-#: ../../../../inc/themes/material-blue/preferences.inc:74
+#: ../../../../inc/themes/classic/preferences-security.inc:13
+msgid "Autenticación en 2 pasos"
+msgstr "Autenticació en 2 passos"
+
+#: ../../../../inc/themes/classic/preferences-security.inc:17
+#: ../../../../inc/themes/material-blue/preferences-security.inc:17
+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 ""
+"Habilita l'autenticació en 2 passos que requereix de la introducció d'un "
+"token generat per una aplicació com Google Authenticator."
+
+#: ../../../../inc/themes/classic/preferences-security.inc:21
+#: ../../../../inc/themes/material-blue/preferences-security.inc:21
+msgid ""
+"Escanee el código QR proporcionado y a continuación introduzca la clave de 6 "
+"dígitos."
+msgstr ""
+"Escanegi el codi QR proporcionat i a continuació introdueixi la clau de 6 "
+"dígits."
+
+#: ../../../../inc/themes/classic/preferences-security.inc:29
+#: ../../../../inc/themes/material-blue/preferences-security.inc:29
+msgid "Activar"
+msgstr "Activar"
+
+#: ../../../../inc/themes/classic/preferences-security.inc:34
+#: ../../../../inc/themes/material-blue/preferences-security.inc:35
+msgid "Error al obtener el código QR. Inténtelo de nuevo"
+msgstr "Error en obtenir el codi QR. Intenti-ho de nou"
+
+#: ../../../../inc/themes/classic/preferences-security.inc:39
+#: ../../../../inc/themes/material-blue/preferences-security.inc:43
+msgid "Código"
+msgstr "Codi"
+
+#: ../../../../inc/themes/classic/preferences-security.inc:44
+#: ../../../../inc/themes/material-blue/preferences-security.inc:48
+msgid ""
+"Una vez activada, sólo es posible acceder si se dispone del dispositivo "
+"generador de códigos asociado."
+msgstr ""
+"Una vegada activada, només és possible accedir si es disposa del dispositiu "
+"generador de codis associat."
+
+#: ../../../../inc/themes/classic/preferences-site.inc:73
+#: ../../../../inc/themes/material-blue/preferences-site.inc:76
msgid "Ordenar resultados por visitas"
msgstr "Ordenar resultats per visites"
-#: ../../../../inc/themes/classic/preferences.inc:77
-#: ../../../../inc/themes/material-blue/preferences.inc:78
+#: ../../../../inc/themes/classic/preferences-site.inc:77
+#: ../../../../inc/themes/material-blue/preferences-site.inc:80
msgid ""
"Ordena los resultados de búsqueda por el número de visitas de las cuentas."
msgstr "Ordena els resultats de cerca pel nombre de visites dels comptes."
-#: ../../../../inc/themes/classic/preferences.inc:90
-#: ../../../../inc/themes/material-blue/preferences.inc:91
+#: ../../../../inc/themes/classic/preferences-site.inc:90
+#: ../../../../inc/themes/material-blue/preferences-site.inc:93
msgid "Barra de navegación superior"
msgstr "Barra de navegació superior"
-#: ../../../../inc/themes/classic/preferences.inc:94
-#: ../../../../inc/themes/material-blue/preferences.inc:95
+#: ../../../../inc/themes/classic/preferences-site.inc:94
+#: ../../../../inc/themes/material-blue/preferences-site.inc:97
msgid "Mostrar una barra de navegación superior en las búsquedas."
msgstr "Mostrar una barra de navegació superior en les cerques."
-#: ../../../../inc/themes/classic/preferences.inc:107
-#: ../../../../inc/themes/material-blue/preferences.inc:108
+#: ../../../../inc/themes/classic/preferences-site.inc:107
+#: ../../../../inc/themes/material-blue/preferences-site.inc:110
msgid "Mostrar Acciones Ocultas"
msgstr "Mostrar Accions Ocultes"
-#: ../../../../inc/themes/classic/preferences.inc:111
-#: ../../../../inc/themes/material-blue/preferences.inc:112
+#: ../../../../inc/themes/classic/preferences-site.inc:111
+#: ../../../../inc/themes/material-blue/preferences-site.inc:114
msgid ""
"Mostrar las acciones ocultas para los elementos de la búsqueda de cuentas."
msgstr "Mostrar les accions ocultes per als elements de la cerca de comptes."
#: ../../../../inc/themes/classic/profiles.inc:11
-#: ../../../../inc/themes/material-blue/profiles.inc:14
+#: ../../../../inc/themes/material-blue/profiles.inc:16
msgid "Nombre del perfil"
msgstr "Nom del perfil"
#: ../../../../inc/themes/classic/profiles.inc:19
-#: ../../../../inc/themes/material-blue/profiles.inc:30
+#: ../../../../inc/themes/material-blue/profiles.inc:32
msgid "Ver detalles de cuenta"
msgstr "Veure detalls de compte"
#: ../../../../inc/themes/classic/profiles.inc:19
-#: ../../../../inc/themes/material-blue/profiles.inc:30
+#: ../../../../inc/themes/material-blue/profiles.inc:32
msgid "Ver"
msgstr "Veure"
#: ../../../../inc/themes/classic/profiles.inc:23
-#: ../../../../inc/themes/material-blue/profiles.inc:35
+#: ../../../../inc/themes/material-blue/profiles.inc:37
msgid "Ver clave de cuenta"
msgstr "Veure clau de compte"
#: ../../../../inc/themes/classic/profiles.inc:28
-#: ../../../../inc/themes/material-blue/profiles.inc:40
+#: ../../../../inc/themes/material-blue/profiles.inc:42
msgid "Ver historial de cuenta"
msgstr "Veure historial de compte"
#: ../../../../inc/themes/classic/profiles.inc:32
-#: ../../../../inc/themes/material-blue/profiles.inc:45
+#: ../../../../inc/themes/material-blue/profiles.inc:47
msgid "Editar cuenta"
msgstr "Editar compte"
-#: ../../../../inc/themes/classic/profiles.inc:32
-#: ../../../../inc/themes/material-blue/profiles.inc:45
-msgid "Editar"
-msgstr "Editar"
-
#: ../../../../inc/themes/classic/profiles.inc:37
-#: ../../../../inc/themes/material-blue/profiles.inc:50
+#: ../../../../inc/themes/material-blue/profiles.inc:52
msgid "Editar clave de cuenta"
msgstr "Editar clau de compte"
#: ../../../../inc/themes/classic/profiles.inc:37
-#: ../../../../inc/themes/material-blue/profiles.inc:50
+#: ../../../../inc/themes/material-blue/profiles.inc:52
msgid "Editar Clave"
msgstr "Editar Clau"
@@ -4455,10 +5277,6 @@ msgstr "Editar Clau"
msgid "Añadir nueva cuenta"
msgstr "Afegir nou compte"
-#: ../../../../inc/themes/classic/profiles.inc:41
-msgid "Añadir"
-msgstr "Afegir"
-
#: ../../../../inc/themes/classic/profiles.inc:46
msgid "Borrar cuenta"
msgstr "Esborrar compte"
@@ -4468,12 +5286,12 @@ msgid "Borrar"
msgstr "Esborrar"
#: ../../../../inc/themes/classic/profiles.inc:50
-#: ../../../../inc/themes/material-blue/profiles.inc:60
+#: ../../../../inc/themes/material-blue/profiles.inc:62
msgid "Ver archivos de cuenta"
msgstr "Veure arxius de compte"
#: ../../../../inc/themes/classic/profiles.inc:61
-#: ../../../../inc/themes/material-blue/profiles.inc:72
+#: ../../../../inc/themes/material-blue/profiles.inc:79
msgid "Configuración general"
msgstr "Configuració general"
@@ -4486,248 +5304,151 @@ msgid "Realizar copia de seguridad"
msgstr "Realitzar còpia de seguretat"
#: ../../../../inc/themes/classic/profiles.inc:70
-#: ../../../../inc/themes/material-blue/profiles.inc:82
+#: ../../../../inc/themes/material-blue/profiles.inc:89
msgid "Backup"
msgstr "Còpia de seguretat"
#: ../../../../inc/themes/classic/profiles.inc:74
-#: ../../../../inc/themes/material-blue/profiles.inc:87
+#: ../../../../inc/themes/material-blue/profiles.inc:94
msgid "Realizar importación de cuentas"
msgstr "Realitzar importació de comptes"
#: ../../../../inc/themes/classic/profiles.inc:81
-#: ../../../../inc/themes/material-blue/profiles.inc:93
+#: ../../../../inc/themes/material-blue/profiles.inc:100
msgid "Gestión"
msgstr "Gestió"
#: ../../../../inc/themes/classic/profiles.inc:85
-#: ../../../../inc/themes/material-blue/profiles.inc:99
+#: ../../../../inc/themes/material-blue/profiles.inc:106
msgid "Gestión de usuarios"
msgstr "Gestión d'usuaris"
#: ../../../../inc/themes/classic/profiles.inc:89
-#: ../../../../inc/themes/material-blue/profiles.inc:104
+#: ../../../../inc/themes/material-blue/profiles.inc:111
msgid "Gestión de grupos"
msgstr "Gestión de grups"
#: ../../../../inc/themes/classic/profiles.inc:94
-#: ../../../../inc/themes/material-blue/profiles.inc:109
+#: ../../../../inc/themes/material-blue/profiles.inc:116
msgid "Gestión de perfiles"
msgstr "Gestión de perfils"
#: ../../../../inc/themes/classic/profiles.inc:94
-#: ../../../../inc/themes/material-blue/profiles.inc:109
+#: ../../../../inc/themes/material-blue/profiles.inc:116
msgid "Perfiles"
msgstr "Perfils"
#: ../../../../inc/themes/classic/profiles.inc:98
-#: ../../../../inc/themes/material-blue/profiles.inc:114
+#: ../../../../inc/themes/material-blue/profiles.inc:121
msgid "Gestión de categorías"
msgstr "Gestió de categories"
#: ../../../../inc/themes/classic/profiles.inc:103
-#: ../../../../inc/themes/material-blue/profiles.inc:119
+#: ../../../../inc/themes/material-blue/profiles.inc:126
msgid "Gestión de clientes"
msgstr "Gestión de clients"
#: ../../../../inc/themes/classic/profiles.inc:107
-#: ../../../../inc/themes/material-blue/profiles.inc:124
+#: ../../../../inc/themes/material-blue/profiles.inc:131
msgid "Gestión de campos personalizados"
msgstr "Gestió de camps personalitzats"
#: ../../../../inc/themes/classic/profiles.inc:112
-#: ../../../../inc/themes/material-blue/profiles.inc:129
+#: ../../../../inc/themes/material-blue/profiles.inc:136
msgid "Gestión de autorizaciones API"
msgstr "Gestió d'autoritzacions API"
#: ../../../../inc/themes/classic/profiles.inc:112
-#: ../../../../inc/themes/material-blue/profiles.inc:129
+#: ../../../../inc/themes/material-blue/profiles.inc:136
msgid "Autorizaciones API"
msgstr "Autoritzacions API"
#: ../../../../inc/themes/classic/profiles.inc:120
-#: ../../../../inc/themes/material-blue/profiles.inc:135
+#: ../../../../inc/themes/material-blue/profiles.inc:147
msgid "Otros"
msgstr "Altres"
#: ../../../../inc/themes/classic/profiles.inc:124
-#: ../../../../inc/themes/material-blue/profiles.inc:141
+#: ../../../../inc/themes/material-blue/profiles.inc:153
msgid "Ver log de eventos"
msgstr "Veure registre d'esdeveniments"
#: ../../../../inc/themes/classic/profiles.inc:124
-#: ../../../../inc/themes/material-blue/profiles.inc:141
+#: ../../../../inc/themes/material-blue/profiles.inc:153
msgid "Log de Eventos"
msgstr "Registre d'Esdeveniments"
#: ../../../../inc/themes/classic/profiles.inc:132
-#: ../../../../inc/themes/material-blue/profiles.inc:148
+#: ../../../../inc/themes/material-blue/profiles.inc:160
msgid "Usado por"
msgstr "Utilitzat per"
#: ../../../../inc/themes/classic/profiles.inc:139
-#: ../../../../inc/themes/material-blue/profiles.inc:155
+#: ../../../../inc/themes/material-blue/profiles.inc:167
msgid "No usado"
msgstr "No utilitzat"
-#: ../../../../inc/themes/classic/request.inc:1
-#: ../../../../inc/themes/material-blue/request.inc:1
-msgid "Solicitar Modificación de Cuenta"
-msgstr "Sol·licitar Modificació de Compte"
-
-#: ../../../../inc/themes/classic/request.inc:22
-#: ../../../../inc/themes/material-blue/request.inc:25
-msgid "Petición"
-msgstr "Petició"
-
-#: ../../../../inc/themes/classic/request.inc:24
-#: ../../../../inc/themes/material-blue/request.inc:29
-msgid "Descripción de la petición"
-msgstr "Descripció de la petició"
-
-#: ../../../../inc/themes/classic/request.inc:33
-#: ../../../../inc/themes/material-blue/account.inc:454
-#: ../../../../inc/themes/material-blue/editpass.inc:55
-#: ../../../../inc/themes/material-blue/mgmttabs.inc:13
-#: ../../../../inc/themes/material-blue/request.inc:42
-msgid "Atrás"
-msgstr "Enrere"
-
-#: ../../../../inc/themes/classic/request.inc:38
-#: ../../../../inc/themes/material-blue/request.inc:48
-msgid "Enviar"
-msgstr "Enviar"
-
-#: ../../../../inc/themes/classic/search.inc:10
-#: ../../../../inc/themes/classic/search.inc:189
-#: ../../../../inc/themes/material-blue/search.inc:10
-#: ../../../../inc/themes/material-blue/search.inc:199
-msgid "Filtro ON"
-msgstr "Filtre ON"
-
-#: ../../../../inc/themes/classic/search.inc:14
-#: ../../../../inc/themes/classic/search.inc:193
-#: ../../../../inc/themes/material-blue/search.inc:14
-#: ../../../../inc/themes/material-blue/search.inc:203
+#: ../../../../inc/themes/classic/search.inc:170
msgid "Global ON"
msgstr "Global ON"
-#: ../../../../inc/themes/classic/search.inc:63
-#: ../../../../inc/themes/material-blue/search.inc:65
-msgid "Buscar en Wiki"
-msgstr "Cercar en Wiki"
-
-#: ../../../../inc/themes/classic/search.inc:99
-#: ../../../../inc/themes/material-blue/search.inc:101
-msgid "Abrir enlace a"
-msgstr "Obrir enllaç a"
-
-#: ../../../../inc/themes/classic/search.inc:117
-#: ../../../../inc/themes/material-blue/search.inc:125
-msgid "Archivos adjuntos"
-msgstr "Arxius adjunts"
-
-#: ../../../../inc/themes/classic/search.inc:124
-#: ../../../../inc/themes/material-blue/search.inc:134
-msgid "Enlace a Wiki"
-msgstr "Enllaç a Wiki"
-
-#: ../../../../inc/themes/classic/searchbox.inc:5
-#: ../../../../inc/themes/material-blue/searchbox.inc:5
-msgid "Limpiar"
-msgstr "Netejar"
-
#: ../../../../inc/themes/classic/searchbox.inc:7
-#: ../../../../inc/themes/material-blue/searchbox.inc:10
+#: ../../../../inc/themes/material-blue/searchbox.inc:17
msgid "Texto a buscar"
msgstr "Text a cercar"
#: ../../../../inc/themes/classic/searchbox.inc:12
-#: ../../../../inc/themes/material-blue/searchbox.inc:15
+#: ../../../../inc/themes/material-blue/searchbox.inc:22
msgid "Parámetros especiales:"
msgstr "Paràmetres especials:"
#: ../../../../inc/themes/classic/searchbox.inc:15
-#: ../../../../inc/themes/material-blue/searchbox.inc:18
+#: ../../../../inc/themes/material-blue/searchbox.inc:25
msgid "Buscar cuentas a las que 'login' tenga acceso"
msgstr "Buscar comptes a les quals 'login' tingui accés"
#: ../../../../inc/themes/classic/searchbox.inc:17
-#: ../../../../inc/themes/material-blue/searchbox.inc:19
+#: ../../../../inc/themes/material-blue/searchbox.inc:27
msgid "Buscar cuentas a las que 'group_name' tenga acceso"
msgstr "Buscar comptes a les quals 'group_name' tingui accés"
#: ../../../../inc/themes/classic/searchbox.inc:19
-#: ../../../../inc/themes/material-blue/searchbox.inc:20
+#: ../../../../inc/themes/material-blue/searchbox.inc:29
msgid "Buscar cuentas con archivos con el nombre 'file_name'"
msgstr "Buscar comptes amb arxius amb el nom 'file_name'"
#: ../../../../inc/themes/classic/searchbox.inc:24
-#: ../../../../inc/themes/material-blue/searchbox.inc:25
-#: ../../../../inc/themes/material-blue/searchbox.inc:28
+#: ../../../../inc/themes/material-blue/searchbox.inc:35
+#: ../../../../inc/themes/material-blue/searchbox.inc:38
msgid "Búsqueda global"
msgstr "Cerca global"
-#: ../../../../inc/themes/classic/searchbox.inc:50
-#: ../../../../inc/themes/material-blue/searchbox.inc:54
+#: ../../../../inc/themes/classic/searchbox.inc:49
+#: ../../../../inc/themes/classic/searchbox.inc:121
+#: ../../../../inc/themes/material-blue/searchbox.inc:62
+#: ../../../../inc/themes/material-blue/searchbox.inc:129
+#, fuzzy
+msgid "Mostrar Todos"
+msgstr "Mostrar Clau"
+
+#: ../../../../inc/themes/classic/searchbox.inc:49
+#: ../../../../inc/themes/classic/searchbox.inc:118
+#: ../../../../inc/themes/material-blue/searchbox.inc:62
+#: ../../../../inc/themes/material-blue/searchbox.inc:126
+#, fuzzy
+msgid "Mostrar Favoritos"
+msgstr "Mostrar Clau"
+
+#: ../../../../inc/themes/classic/searchbox.inc:52
+#: ../../../../inc/themes/material-blue/searchbox.inc:66
msgid "CPP"
msgstr "CPP"
-#: ../../../../inc/themes/classic/searchbox.inc:51
-#: ../../../../inc/themes/material-blue/searchbox.inc:54
+#: ../../../../inc/themes/classic/searchbox.inc:53
+#: ../../../../inc/themes/material-blue/searchbox.inc:66
msgid "Cuentas por página"
msgstr "Comptes per pàgina"
-#: ../../../../inc/themes/classic/security.inc:4
-msgid "Autenticación"
-msgstr "Autenticació"
-
-#: ../../../../inc/themes/classic/security.inc:13
-msgid "Autenticación en 2 pasos"
-msgstr "Autenticació en 2 passos"
-
-#: ../../../../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 ""
-"Habilita l'autenticació en 2 passos que requereix de la introducció d'un "
-"token generat per una aplicació com Google Authenticator."
-
-#: ../../../../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 ""
-"Escanegi el codi QR proporcionat i a continuació introdueixi la clau de 6 "
-"dígits."
-
-#: ../../../../inc/themes/classic/security.inc:29
-#: ../../../../inc/themes/material-blue/security.inc:27
-msgid "Activar"
-msgstr "Activar"
-
-#: ../../../../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 en obtenir el codi QR. Intenti-ho de nou"
-
-#: ../../../../inc/themes/classic/security.inc:39
-#: ../../../../inc/themes/material-blue/security.inc:41
-msgid "Código"
-msgstr "Codi"
-
-#: ../../../../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 ""
-"Una vegada activada, només és possible accedir si es disposa del dispositiu "
-"generador de codis associat."
-
#: ../../../../inc/themes/classic/sessionbar.inc:6
#: ../../../../inc/themes/material-blue/footer.inc:7
msgid "Cambiar clave de usuario"
@@ -4741,7 +5462,7 @@ msgstr "Sortir"
#: ../../../../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
+#: ../../../../inc/themes/material-blue/users.inc:133
msgid "Opciones"
msgstr "Opcions"
@@ -4767,7 +5488,7 @@ msgid "Error al comprobar actualizaciones"
msgstr "Error en comprovar actualitzacions"
#: ../../../../inc/themes/classic/upgrade.inc:8
-#: ../../../../inc/themes/material-blue/upgrade.inc:6
+#: ../../../../inc/themes/material-blue/upgrade.inc:10
msgid "Actualización de BBDD"
msgstr "Actualització de BBDD"
@@ -4776,77 +5497,77 @@ msgid "Introducir Código de Seguridad"
msgstr "Introduir Codi de Seguretat"
#: ../../../../inc/themes/classic/upgrade.inc:11
-#: ../../../../inc/themes/material-blue/upgrade.inc:12
+#: ../../../../inc/themes/material-blue/upgrade.inc:16
msgid "Código de Seguridad"
msgstr "Codi de Seguretat"
#: ../../../../inc/themes/classic/upgrade.inc:21
-#: ../../../../inc/themes/material-blue/upgrade.inc:23
+#: ../../../../inc/themes/material-blue/upgrade.inc:27
msgid "Iniciar Actualización"
msgstr "Iniciar Actualització"
#: ../../../../inc/themes/classic/users.inc:12
-#: ../../../../inc/themes/material-blue/users.inc:15
+#: ../../../../inc/themes/material-blue/users.inc:16
msgid "Nombre de usuario completo"
msgstr "Nom d'usuari complet"
#: ../../../../inc/themes/classic/users.inc:25
-#: ../../../../inc/themes/material-blue/users.inc:31
+#: ../../../../inc/themes/material-blue/users.inc:32
msgid "Login de inicio de sesión"
msgstr "Login d'inici de sessió"
#: ../../../../inc/themes/classic/users.inc:64
-#: ../../../../inc/themes/material-blue/users.inc:78
+#: ../../../../inc/themes/material-blue/users.inc:79
msgid "Dirección de correo"
msgstr "Adreça de correu"
#: ../../../../inc/themes/classic/users.inc:103
-#: ../../../../inc/themes/material-blue/users.inc:136
+#: ../../../../inc/themes/material-blue/users.inc:137
msgid "Administrador de la aplicación"
msgstr "Administrador de l'aplicació"
#: ../../../../inc/themes/classic/users.inc:103
-#: ../../../../inc/themes/material-blue/users.inc:139
+#: ../../../../inc/themes/material-blue/users.inc:140
msgid "Admin. Aplicación"
msgstr "Admin. Aplicació"
#: ../../../../inc/themes/classic/users.inc:107
-#: ../../../../inc/themes/material-blue/users.inc:143
+#: ../../../../inc/themes/material-blue/users.inc:144
msgid "Administrador de cuentas"
msgstr "Administrador de comptes"
#: ../../../../inc/themes/classic/users.inc:107
-#: ../../../../inc/themes/material-blue/users.inc:146
+#: ../../../../inc/themes/material-blue/users.inc:147
msgid "Admin. Cuentas"
msgstr "Admin. Comptes"
#: ../../../../inc/themes/classic/users.inc:117
-#: ../../../../inc/themes/material-blue/users.inc:158
+#: ../../../../inc/themes/material-blue/users.inc:159
msgid "Forzar cambio de clave"
msgstr "Forçar canvi de clau"
-#: ../../../../inc/themes/classic/users.inc:154
-#: ../../../../inc/themes/material-blue/users.inc:198
+#: ../../../../inc/themes/classic/users.inc:130
+#: ../../../../inc/themes/material-blue/users.inc:173
msgid "Entradas"
msgstr "Entrades"
-#: ../../../../inc/themes/classic/users.inc:159
-#: ../../../../inc/themes/material-blue/users.inc:203
+#: ../../../../inc/themes/classic/users.inc:135
+#: ../../../../inc/themes/material-blue/users.inc:178
msgid "Último Acceso"
msgstr "Últim Accés"
-#: ../../../../inc/themes/classic/users.inc:169
-#: ../../../../inc/themes/material-blue/users.inc:213
+#: ../../../../inc/themes/classic/users.inc:145
+#: ../../../../inc/themes/material-blue/users.inc:188
msgid "Fecha Clave Maestra"
msgstr "Data Clau Mestra"
#: ../../../../inc/themes/classic/wiki.inc:11
-#: ../../../../inc/themes/material-blue/wiki.inc:11
+#: ../../../../inc/themes/material-blue/wiki.inc:15
msgid "Habilitar enlaces Wiki"
msgstr "Habilitar enllaços Wiki"
#: ../../../../inc/themes/classic/wiki.inc:15
-#: ../../../../inc/themes/material-blue/wiki.inc:15
+#: ../../../../inc/themes/material-blue/wiki.inc:19
msgid ""
"Habilita la opción de añadir un enlace a Wiki externa para los resultados de "
"la búsqueda."
@@ -4855,41 +5576,45 @@ msgstr ""
"cerca."
#: ../../../../inc/themes/classic/wiki.inc:27
-#: ../../../../inc/themes/material-blue/wiki.inc:30
-#: ../../../../inc/themes/material-blue/wiki.inc:56
+#: ../../../../inc/themes/material-blue/wiki.inc:34
+#: ../../../../inc/themes/material-blue/wiki.inc:60
msgid "URL de búsqueda Wiki"
msgstr "URL de cerca Wiki"
#: ../../../../inc/themes/classic/wiki.inc:31
-#: ../../../../inc/themes/material-blue/wiki.inc:34
+#: ../../../../inc/themes/material-blue/wiki.inc:38
msgid "URL que utiliza la wiki para realizar una búsqueda de una página."
msgstr "URL que utilitza la wiki per realitzar una cerca d'una pàgina."
#: ../../../../inc/themes/classic/wiki.inc:35
-#: ../../../../inc/themes/material-blue/wiki.inc:38
+#: ../../../../inc/themes/material-blue/wiki.inc:42
msgid "Como parámetro se utiliza el nombre del cliente."
msgstr "Com a paràmetre s'utilitza el nom del client."
#: ../../../../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
+#: ../../../../inc/themes/classic/wiki.inc:134
+#: ../../../../inc/themes/classic/wiki.inc:157
+#: ../../../../inc/themes/material-blue/wiki.inc:46
+#: ../../../../inc/themes/material-blue/wiki.inc:78
+#: ../../../../inc/themes/material-blue/wiki.inc:153
+#: ../../../../inc/themes/material-blue/wiki.inc:179
msgid "Ejemplo:"
msgstr "Exemple:"
#: ../../../../inc/themes/classic/wiki.inc:54
-#: ../../../../inc/themes/material-blue/wiki.inc:62
-#: ../../../../inc/themes/material-blue/wiki.inc:87
+#: ../../../../inc/themes/material-blue/wiki.inc:66
+#: ../../../../inc/themes/material-blue/wiki.inc:91
msgid "URL de página en Wiki"
msgstr "URL de pàgina en Wiki"
#: ../../../../inc/themes/classic/wiki.inc:58
-#: ../../../../inc/themes/material-blue/wiki.inc:66
+#: ../../../../inc/themes/material-blue/wiki.inc:70
msgid "URL que utiliza la wiki para acceder a los detalles de una página."
msgstr "URL que utilitza la wiki per accedir als detalls d'una pàgina."
#: ../../../../inc/themes/classic/wiki.inc:62
-#: ../../../../inc/themes/material-blue/wiki.inc:70
+#: ../../../../inc/themes/material-blue/wiki.inc:74
msgid ""
"El nombre de la cuenta se utiliza como parámetro de la variable de búsqueda "
"de la Wiki."
@@ -4898,91 +5623,186 @@ msgstr ""
"Wiki."
#: ../../../../inc/themes/classic/wiki.inc:81
-#: ../../../../inc/themes/material-blue/wiki.inc:93
+#: ../../../../inc/themes/material-blue/wiki.inc:97
msgid "Prefijo para nombre de cuenta"
msgstr "Prefix per a nom de compte"
#: ../../../../inc/themes/classic/wiki.inc:85
-#: ../../../../inc/themes/material-blue/wiki.inc:97
+#: ../../../../inc/themes/material-blue/wiki.inc:101
msgid ""
"Prefijo para determinar qué cuentas tienen un enlace a una página de la Wiki."
msgstr ""
"Prefix per determinar què comptes tenen un enllaç a una pàgina de la Wiki."
-#: ../../../../inc/themes/classic/wiki.inc:121
-#: ../../../../inc/themes/material-blue/wiki.inc:135
+#: ../../../../inc/themes/classic/wiki.inc:100
+#: ../../../../inc/themes/material-blue/wiki.inc:116
+msgid "DokuWiki API"
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:106
+#: ../../../../inc/themes/material-blue/wiki.inc:122
+#, fuzzy
+msgid "Habilitar API de DokuWiki"
+msgstr "Habilitar enllaços Wiki"
+
+#: ../../../../inc/themes/classic/wiki.inc:110
+#: ../../../../inc/themes/material-blue/wiki.inc:126
+msgid ""
+"Habilita la conexión a la API XML-RPC de DokuWiki para los enlaces Wiki."
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:113
+#: ../../../../inc/themes/material-blue/wiki.inc:129
+msgid ""
+"Para que esta característica funcione, es necesario habilitar los enlaces "
+"Wiki para el filtrado de cuentas."
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:126
+#: ../../../../inc/themes/material-blue/wiki.inc:145
+#: ../../../../inc/themes/material-blue/wiki.inc:165
+#, fuzzy
+msgid "URL API"
+msgstr "URL / IP"
+
+#: ../../../../inc/themes/classic/wiki.inc:130
+#: ../../../../inc/themes/material-blue/wiki.inc:149
+#, fuzzy
+msgid "URL de la API de DokuWiki."
+msgstr "URL de pàgina en Wiki"
+
+#: ../../../../inc/themes/classic/wiki.inc:149
+#: ../../../../inc/themes/material-blue/wiki.inc:171
+#: ../../../../inc/themes/material-blue/wiki.inc:191
+msgid "URL Base"
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:153
+#: ../../../../inc/themes/material-blue/wiki.inc:175
+#, fuzzy
+msgid "URL base de DokuWiki."
+msgstr "URL de cerca Wiki"
+
+#: ../../../../inc/themes/classic/wiki.inc:176
+#: ../../../../inc/themes/material-blue/wiki.inc:201
+#, fuzzy
+msgid "Usuario para conectar a la API de DokuWiki."
+msgstr "Usuari per connectar amb el servei de LDAP."
+
+#: ../../../../inc/themes/classic/wiki.inc:199
+#: ../../../../inc/themes/material-blue/wiki.inc:229
+#: ../../../../inc/themes/material-blue/wiki.inc:242
+msgid "Namespace"
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:203
+#: ../../../../inc/themes/material-blue/wiki.inc:233
+msgid "Namespace utilizado para buscar las páginas."
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:217
+#: ../../../../inc/themes/material-blue/wiki.inc:250
+#, fuzzy
+msgid "Comprobar conexión con DokuWiki"
+msgstr "Comprovar connexió amb LDAP"
+
+#: ../../../../inc/themes/classic/wiki.inc:246
+#: ../../../../inc/themes/material-blue/wiki.inc:280
msgid "Añadir filtro"
msgstr "Afegir filtre"
-#: ../../../../inc/themes/classic/wiki.inc:122
-#: ../../../../inc/themes/material-blue/wiki.inc:136
+#: ../../../../inc/themes/classic/wiki.inc:247
+#: ../../../../inc/themes/material-blue/wiki.inc:281
msgid "Eliminar filtro"
msgstr "Eliminar filtre"
-#: ../../../../inc/themes/material-blue/account.inc:4
+#: ../../../../inc/themes/classic/wikipage.inc:2
+#: ../../../../inc/themes/material-blue/wikipage.inc:2
+#, fuzzy
+msgid "Ver Wiki"
+msgstr "Wiki"
+
+#: ../../../../inc/themes/classic/wikipage.inc:10
+#: ../../../../inc/themes/material-blue/wikipage.inc:10
+#, fuzzy, php-format
+msgid "Resultados de búsqueda de '%s'"
+msgstr "Base de cerca"
+
+#: ../../../../inc/themes/classic/wikipage.inc:13
+#: ../../../../inc/themes/classic/wikipage.inc:23
+#: ../../../../inc/themes/material-blue/wikipage.inc:13
+#: ../../../../inc/themes/material-blue/wikipage.inc:23
+#, fuzzy
+msgid "Página"
+msgstr "Primera pàgina"
+
+#: ../../../../inc/themes/classic/wikipage.inc:25
+#: ../../../../inc/themes/material-blue/wikipage.inc:25
+msgid "Autor"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/account-actions.inc:19
+msgid "Crear Enlace Público"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/account-actions.inc:62
+msgid "Atrás"
+msgstr "Enrere"
+
+#: ../../../../inc/themes/material-blue/account-details.inc:69
+msgid "Enlace Público"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/account.inc:5
msgid "Histórico"
msgstr "Històric"
-#: ../../../../inc/themes/material-blue/account.inc:34
-msgid "> Usar texto y crear nuevo"
-msgstr ""
-
-#: ../../../../inc/themes/material-blue/account.inc:43
+#: ../../../../inc/themes/material-blue/account.inc:56
msgid "Seleccionar o escribir para crear uno nuevo"
msgstr "Seleccionar o escriure per crear un de nou"
-#: ../../../../inc/themes/material-blue/account.inc:114
+#: ../../../../inc/themes/material-blue/account.inc:131
msgid "Clave (Repetir)"
msgstr "Clau (Repetir)"
-#: ../../../../inc/themes/material-blue/backup.inc:58
-#: ../../../../inc/themes/material-blue/backup.inc:144
-#: ../../../../inc/themes/material-blue/encryption.inc:115
-#: ../../../../inc/themes/material-blue/import.inc:215
-msgid "Realizar"
-msgstr "Realitzar"
-
-#: ../../../../inc/themes/material-blue/config.inc:67
-msgid "Forzar HTTPS"
-msgstr "Forçar HTTPS"
-
-#: ../../../../inc/themes/material-blue/config.inc:71
-msgid "Fuerza para que todas las conexiones sean a través de HTTPS."
-msgstr "Força perquè totes les connexions siguin a través d'HTTPS."
-
-#: ../../../../inc/themes/material-blue/config.inc:232
-#: ../../../../inc/themes/material-blue/preferences.inc:68
+#: ../../../../inc/themes/material-blue/config-accounts.inc:60
+#: ../../../../inc/themes/material-blue/preferences-site.inc:70
msgid "Número de resultados por página"
msgstr "Nombre de resultats per pàgina"
-#: ../../../../inc/themes/material-blue/config.inc:346
+#: ../../../../inc/themes/material-blue/config-events.inc:60
+#, fuzzy
+msgid "Nombre o dirección IP"
+msgstr "Nom o adreça IP del servidor de LDAP."
+
+#: ../../../../inc/themes/material-blue/config-files.inc:73
msgid "Tamaño máximo de archivo en bytes"
msgstr "Grandària màxima d'arxiu en bytes"
-#: ../../../../inc/themes/material-blue/config.inc:353
-msgid "Proxy"
-msgstr "Proxy"
-
-#: ../../../../inc/themes/material-blue/config.inc:359
-msgid "Usar Proxy"
-msgstr "Utilitzar Proxy"
-
-#: ../../../../inc/themes/material-blue/config.inc:380
+#: ../../../../inc/themes/material-blue/config-proxy.inc:29
msgid "Servidor proxy"
msgstr "Servidor proxy"
-#: ../../../../inc/themes/material-blue/config.inc:394
+#: ../../../../inc/themes/material-blue/config-proxy.inc:43
msgid "Puerto del servidor proxy"
msgstr "Port del servidor proxy"
-#: ../../../../inc/themes/material-blue/config.inc:408
+#: ../../../../inc/themes/material-blue/config-proxy.inc:57
msgid "Usuario del servidor proxy"
msgstr "Usuari del servidor proxy"
-#: ../../../../inc/themes/material-blue/config.inc:422
+#: ../../../../inc/themes/material-blue/config-proxy.inc:71
msgid "Clave del servidor proxy"
msgstr "Clau del servidor proxy"
+#: ../../../../inc/themes/material-blue/config-site.inc:69
+msgid "Forzar HTTPS"
+msgstr "Forçar HTTPS"
+
+#: ../../../../inc/themes/material-blue/config-site.inc:74
+msgid "Fuerza para que todas las conexiones sean a través de HTTPS."
+msgstr "Força perquè totes les connexions siguin a través d'HTTPS."
+
#: ../../../../inc/themes/material-blue/customfields.inc:14
msgid "Nombre del campo"
msgstr "Nom del camp"
@@ -4995,6 +5815,11 @@ msgstr "Ajuda del camp"
msgid "Preferencias de usuario"
msgstr "Preferències d'usuari"
+#: ../../../../inc/themes/material-blue/info.inc:52
+#, fuzzy
+msgid "Copia de Configuración"
+msgstr "Modificar Configuració"
+
#: ../../../../inc/themes/material-blue/install.inc:33
msgid "Usuario administrador de sysPass"
msgstr "Usuari administrador de sysPass"
@@ -5023,11 +5848,11 @@ msgstr "Servidor BBDD per a sysPass"
msgid "Nombre del servidor para instalar la base de datos de sysPass"
msgstr "Nom del servidor per instal·lar la base de dades de sysPass"
-#: ../../../../inc/themes/material-blue/ldap.inc:96
+#: ../../../../inc/themes/material-blue/ldap.inc:98
msgid "Clave del usuario de conexión a LDAP."
msgstr "Clau de l'usuari de connexió a LDAP."
-#: ../../../../inc/themes/material-blue/mail.inc:118
+#: ../../../../inc/themes/material-blue/mail.inc:120
msgid ""
"Habilita que los usuarios puedan solicitar modificaciones o acceso a las "
"cuentas sin permisos."
@@ -5035,33 +5860,46 @@ msgstr ""
"Habilita que els usuaris puguin sol·licitar modificacions o accés als "
"comptes sense permisos."
-#: ../../../../inc/themes/material-blue/profiles.inc:25
+#: ../../../../inc/themes/material-blue/profiles.inc:27
msgid "Crear nueva cuenta"
msgstr "Crear nou compte"
-#: ../../../../inc/themes/material-blue/profiles.inc:25
+#: ../../../../inc/themes/material-blue/profiles.inc:27
msgid "Crear"
msgstr "Crear"
-#: ../../../../inc/themes/material-blue/profiles.inc:55
+#: ../../../../inc/themes/material-blue/profiles.inc:57
msgid "Eliminar cuenta"
msgstr "Eliminar compte"
-#: ../../../../inc/themes/material-blue/profiles.inc:55
-msgid "Eliminar"
-msgstr "Eliminar"
+#: ../../../../inc/themes/material-blue/profiles.inc:67
+#, fuzzy
+msgid "Publicar enlace a cuenta"
+msgstr "Editar clau de compte"
-#: ../../../../inc/themes/material-blue/profiles.inc:77
+#: ../../../../inc/themes/material-blue/profiles.inc:67
+#, fuzzy
+msgid "Publicar Enlace"
+msgstr "Obrir enllaç a"
+
+#: ../../../../inc/themes/material-blue/profiles.inc:84
msgid "Opciones de encriptación"
msgstr "Opcions d'encriptació"
-#: ../../../../inc/themes/material-blue/profiles.inc:82
+#: ../../../../inc/themes/material-blue/profiles.inc:89
msgid "Realizar copia de seguridad y exportar"
msgstr "Realitzar còpia de seguretat i exportar"
-#: ../../../../inc/themes/material-blue/security.inc:4
-msgid "Autentificación"
-msgstr "Autenticació"
+#: ../../../../inc/themes/material-blue/profiles.inc:141
+#, fuzzy
+msgid "Gestión de enlaces"
+msgstr "Gestió de Clients"
-#~ msgid "No es posible guardar el archivo \"%s\" Tamaño máximo:"
-#~ msgstr "No és possible guardar l'arxiu \"%s\" Grandària màxima:"
+#: ../../../../inc/themes/material-blue/publiclinks.inc:30
+#, fuzzy
+msgid "Uso"
+msgstr "Usuari"
+
+#: ../../../../inc/themes/material-blue/publiclinks.inc:38
+msgid "Hash"
+msgstr ""
diff --git a/inc/locales/de_DE/LC_MESSAGES/messages.mo b/inc/locales/de_DE/LC_MESSAGES/messages.mo
index fafc3f02..9bb863d7 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 53e9199e..3ef6d9c3 100644
--- a/inc/locales/de_DE/LC_MESSAGES/messages.po
+++ b/inc/locales/de_DE/LC_MESSAGES/messages.po
@@ -2,3335 +2,4612 @@ msgid ""
msgstr ""
"Project-Id-Version: sysPass\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-13 18:32+0100\n"
-"PO-Revision-Date: 2016-02-06 06:40+0100\n"
+"POT-Creation-Date: 2017-02-13 00:10+0100\n"
+"PO-Revision-Date: 2017-02-13 00:10+0100\n"
"Last-Translator: nuxsmin \n"
"Language-Team: \n"
"Language: de_DE\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-KeywordsList: _;gettext;gettext_noop\n"
+"X-Poedit-KeywordsList: _;gettext;gettext_noop;__\n"
"X-Poedit-Basepath: .\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Generator: Poedit 1.6.10\n"
"X-Poedit-SearchPath-0: ../../../..\n"
-#: ../../../../ajax/ajax_2fa.php:37 ../../../../ajax/ajax_accountSave.php:42
-#: ../../../../ajax/ajax_appMgmtSave.php:43
-#: ../../../../ajax/ajax_backup.php:41 ../../../../ajax/ajax_checkLdap.php:42
-#: ../../../../ajax/ajax_configSave.php:44 ../../../../ajax/ajax_files.php:42
-#: ../../../../ajax/ajax_files.php:57 ../../../../ajax/ajax_getFiles.php:47
-#: ../../../../ajax/ajax_import.php:50 ../../../../ajax/ajax_migrate.php:46
-#: ../../../../ajax/ajax_passReset.php:40 ../../../../ajax/ajax_search.php:42
-#: ../../../../ajax/ajax_sendRequest.php:42
-#: ../../../../ajax/ajax_userPrefsSave.php:43
-msgid "CONSULTA INVÁLIDA"
-msgstr "Ungültige Anfrage"
-
-#: ../../../../ajax/ajax_2fa.php:48
-msgid "Código correcto"
-msgstr "Code bestätigt"
-
-#: ../../../../ajax/ajax_2fa.php:51 ../../../../ajax/ajax_userPrefsSave.php:99
-msgid "Código incorrecto"
-msgstr "Falscher Code"
-
-#: ../../../../ajax/ajax_accountSave.php:36
-#: ../../../../ajax/ajax_appMgmtSave.php:37
-#: ../../../../ajax/ajax_backup.php:35 ../../../../ajax/ajax_checkLdap.php:36
-#: ../../../../ajax/ajax_configSave.php:38 ../../../../ajax/ajax_import.php:36
-#: ../../../../ajax/ajax_migrate.php:36
-#: ../../../../ajax/ajax_sendRequest.php:36
-#: ../../../../ajax/ajax_userPrefsSave.php:37
-#: ../../../../ajax/ajax_viewpass.php:37
-msgid "La sesión no se ha iniciado o ha caducado"
-msgstr "Sitzung konnte nicht gestartet werden oder ist abgelaufen"
-
-#: ../../../../ajax/ajax_accountSave.php:78
-#: ../../../../ajax/ajax_accountSave.php:93
-msgid "Es necesario un nombre de cuenta"
-msgstr "Kontoname ist notwendig"
-
-#: ../../../../ajax/ajax_accountSave.php:80
-#: ../../../../ajax/ajax_accountSave.php:91
-#: ../../../../ajax/ajax_appMgmtSave.php:329
-msgid "Es necesario un nombre de cliente"
-msgstr "Kunde ist notwendig"
-
-#: ../../../../ajax/ajax_accountSave.php:82
-#: ../../../../ajax/ajax_accountSave.php:95
-msgid "Es necesario un usuario"
-msgstr "Benutzername ist notwendig"
-
-#: ../../../../ajax/ajax_accountSave.php:84
-#: ../../../../ajax/ajax_accountSave.php:106
-msgid "Es necesaria una clave"
-msgstr "Ein Schlüssel wird benötigt"
-
-#: ../../../../ajax/ajax_accountSave.php:86
-#: ../../../../ajax/ajax_accountSave.php:97
-msgid "Es necesario una categoría"
-msgstr "Eine Kategorie wird benötigt"
-
-#: ../../../../ajax/ajax_accountSave.php:101
-#: ../../../../ajax/ajax_accountSave.php:110
-msgid "Id inválido"
-msgstr "Ungültige ID"
-
-#: ../../../../ajax/ajax_accountSave.php:113
-#: ../../../../ajax/ajax_accountSave.php:263
-#: ../../../../ajax/ajax_appMgmtSave.php:535
-#: ../../../../ajax/ajax_configSave.php:334
-#: ../../../../ajax/ajax_userPrefsSave.php:113 ../../../../api.php:53
-msgid "Acción Inválida"
-msgstr "Ungültige Aktion"
-
-#: ../../../../ajax/ajax_accountSave.php:121
-#: ../../../../ajax/ajax_appMgmtSave.php:112
-#: ../../../../ajax/ajax_appMgmtSave.php:149
-#: ../../../../ajax/ajax_backup.php:68
-msgid "Las claves no coinciden"
-msgstr "Die Passwörter stimmen nicht überein"
-
-#: ../../../../ajax/ajax_accountSave.php:173
-msgid "Cuenta creada"
-msgstr "Konto hinzugefügt"
-
-#: ../../../../ajax/ajax_accountSave.php:176
-msgid "Error al crear la cuenta"
-msgstr "Fehler beim Anlegen des Kontos"
-
-#: ../../../../ajax/ajax_accountSave.php:211
-msgid "Sin cambios"
-msgstr "Keine Änderungen"
-
-#: ../../../../ajax/ajax_accountSave.php:223
-msgid "Cuenta actualizada"
-msgstr "Konto aktualisiert"
-
-#: ../../../../ajax/ajax_accountSave.php:226
-msgid "Error al modificar la cuenta"
-msgstr "Fehler beim Änderns des Kontos"
-
-#: ../../../../ajax/ajax_accountSave.php:233
-msgid "Cuenta eliminada"
-msgstr "Konto gelöscht"
-
-#: ../../../../ajax/ajax_accountSave.php:236
-msgid "Error al eliminar la cuenta"
-msgstr "Fehler beim Löschen eines Kontos"
-
-#: ../../../../ajax/ajax_accountSave.php:246
-#: ../../../../ajax/ajax_appMgmtSave.php:153
-#: ../../../../ajax/ajax_passReset.php:75
-msgid "Clave actualizada"
-msgstr "Passwort aktualisiert"
-
-#: ../../../../ajax/ajax_accountSave.php:249
-msgid "Error al actualizar la clave"
-msgstr "Fehler beim Ändern des Passworts"
-
-#: ../../../../ajax/ajax_accountSave.php:256
-msgid "Cuenta restaurada"
-msgstr "Konto wiederhergestellt"
-
-#: ../../../../ajax/ajax_accountSave.php:259
-msgid "Error al restaurar cuenta"
-msgstr "Fehler bei der Wiederherstellung der Rechnung"
-
-#: ../../../../ajax/ajax_appMgmtData.php:54
-msgid "Ver Usuario"
-msgstr "Benutzer anzeigen"
-
-#: ../../../../ajax/ajax_appMgmtData.php:61
-#: ../../../../web/UsersMgmtC.class.php:137
-msgid "Editar Usuario"
-msgstr "Benutzer ändern"
-
-#: ../../../../ajax/ajax_appMgmtData.php:67
-#: ../../../../inc/UserBase.class.php:383
-#: ../../../../web/UsersMgmtC.class.php:122
-msgid "Nuevo Usuario"
-msgstr "Neuer Benutzer"
-
-#: ../../../../ajax/ajax_appMgmtData.php:73
-msgid "Ver Grupo"
-msgstr "Gruppe anzeigen"
-
-#: ../../../../ajax/ajax_appMgmtData.php:80
-#: ../../../../web/UsersMgmtC.class.php:203
-msgid "Editar Grupo"
-msgstr "Gruppe ändern"
-
-#: ../../../../ajax/ajax_appMgmtData.php:86
-#: ../../../../inc/Groups.class.php:152 ../../../../inc/Groups.class.php:253
-#: ../../../../web/UsersMgmtC.class.php:195
-msgid "Nuevo Grupo"
-msgstr "Neue Gruppe"
-
-#: ../../../../ajax/ajax_appMgmtData.php:92
-msgid "Ver Perfil"
-msgstr "Profil anzeigen"
-
-#: ../../../../ajax/ajax_appMgmtData.php:99
-#: ../../../../web/UsersMgmtC.class.php:268
-msgid "Editar Perfil"
-msgstr "Profil ändern"
-
-#: ../../../../ajax/ajax_appMgmtData.php:105
-#: ../../../../inc/ProfileBase.class.php:512
-#: ../../../../web/UsersMgmtC.class.php:253
-msgid "Nuevo Perfil"
-msgstr "Neues Profil"
-
-#: ../../../../ajax/ajax_appMgmtData.php:111
-msgid "Ver Cliente"
-msgstr "Kunde anzeigen"
-
-#: ../../../../ajax/ajax_appMgmtData.php:118
-#: ../../../../web/AccountsMgmtC.class.php:153
-msgid "Editar Cliente"
-msgstr "Kunde ändern"
-
-#: ../../../../ajax/ajax_appMgmtData.php:124
-#: ../../../../inc/Customer.class.php:65
-#: ../../../../web/AccountsMgmtC.class.php:146
-msgid "Nuevo Cliente"
-msgstr "Neuer Kunde"
-
-#: ../../../../ajax/ajax_appMgmtData.php:130
-msgid "Ver Categoría"
-msgstr "Kategorie anzeigen"
-
-#: ../../../../ajax/ajax_appMgmtData.php:137
-#: ../../../../web/AccountsMgmtC.class.php:95
-msgid "Editar Categoría"
-msgstr "Kategorie ändern"
-
-#: ../../../../ajax/ajax_appMgmtData.php:143
-#: ../../../../inc/Category.class.php:83
-#: ../../../../web/AccountsMgmtC.class.php:87
-#: ../../../../inc/themes/classic/account.inc:53
-#: ../../../../inc/themes/material-blue/account.inc:62
-msgid "Nueva Categoría"
-msgstr "Neue Kategorie"
-
-#: ../../../../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:400
-msgid "Nueva Autorización"
-msgstr "Neue Authentifizierung"
-
-#: ../../../../ajax/ajax_appMgmtData.php:162
-#: ../../../../web/UsersMgmtC.class.php:415
-msgid "Editar Autorización"
-msgstr "Authentifizierung bearbeiten"
-
-#: ../../../../ajax/ajax_appMgmtData.php:168
-#: ../../../../web/AccountsMgmtC.class.php:274
-msgid "Nuevo Campo"
-msgstr "Neues Feld"
-
-#: ../../../../ajax/ajax_appMgmtData.php:174
-#: ../../../../web/AccountsMgmtC.class.php:281
-msgid "Editar Campo"
-msgstr "Feld bearbeiten"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:86
-msgid "Es necesario un nombre de usuario"
-msgstr "Benutzername ist notwendig"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:88
-msgid "Es necesario un login"
-msgstr "Login ist notwendig"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:90
-msgid "Es necesario un perfil"
-msgstr "Profil ist notwendig"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:92
-msgid "Es necesario un grupo"
-msgstr "Gruppe ist notwendig"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:94
-msgid "Es necesario un email"
-msgstr "E-Mail ist notwendig"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:96
-#: ../../../../ajax/ajax_appMgmtSave.php:145
-#: ../../../../ajax/ajax_appMgmtSave.php:160
-#: ../../../../ajax/ajax_backup.php:54
-#: ../../../../ajax/ajax_configSave.php:307
-#: ../../../../ajax/ajax_import.php:40 ../../../../ajax/ajax_migrate.php:40
-#: ../../../../ajax/ajax_userPrefsSave.php:88
-msgid "Ey, esto es una DEMO!!"
-msgstr "Hey, dies ist eine DEMO!!"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:101
-msgid "Login de usuario duplicado"
-msgstr "Dupbliziertes Benutzer-Anmeldung "
-
-#: ../../../../ajax/ajax_appMgmtSave.php:104
-msgid "Email de usuario duplicado"
-msgstr "Bereits verwendete Benutzer-E-Mail"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:110
-#: ../../../../ajax/ajax_appMgmtSave.php:147
-msgid "La clave no puede estar en blanco"
-msgstr "Passwort darf nicht leer sein"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:123
-msgid "Usuario creado"
-msgstr "Benutzer hinzugefügt"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:126
-msgid "Error al crear el usuario"
-msgstr "Fehler beim Anlegen des Benutzers"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:136
-#: ../../../../inc/UserMigrate.class.php:89
-msgid "Usuario actualizado"
-msgstr "Benutzer aktualisiert"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:139
-msgid "Error al actualizar el usuario"
-msgstr "Fehler beim Ändern des Benutzers"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:156
-#: ../../../../ajax/ajax_passReset.php:79
-msgid "Error al modificar la clave"
-msgstr "Fehler beim Ändern des Passworts"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:162
-msgid "No es posible eliminar, usuario en uso"
-msgstr "Benutzer kann nicht gelöscht werden, wird noch benutzt"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:166
-msgid "Usuario eliminado"
-msgstr "Benutzer gelöscht"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:169
-msgid "Error al eliminar el usuario"
-msgstr "Fehler beim Löschen eines Benutzers"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:184
-msgid "Es necesario un nombre de grupo"
-msgstr "Gruppename ist notwendig"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:192
-msgid "Nombre de grupo duplicado"
-msgstr "Duplizierter Gruppenname"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:204
-msgid "Grupo creado"
-msgstr "Gruppe hinzugefügt"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:206
-msgid "Error al crear el grupo"
-msgstr "Fehler beim Anlegen des Kunden"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:217
-msgid "Grupo actualizado"
-msgstr "Gruppe aktualisiert"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:220
-msgid "Error al actualizar el grupo"
-msgstr "Fehler beim Ändern der Gruppe"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:229
-#: ../../../../ajax/ajax_appMgmtSave.php:306
-#: ../../../../inc/CustomFieldsBase.class.php:109
-#: ../../../../inc/themes/classic/account.inc:112
-#: ../../../../inc/themes/classic/groups.inc:24
-#: ../../../../inc/themes/classic/profiles.inc:85
-#: ../../../../inc/themes/material-blue/account.inc:138
-#: ../../../../inc/themes/material-blue/groups.inc:32
-#: ../../../../inc/themes/material-blue/profiles.inc:99
-msgid "Usuarios"
-msgstr "Benutzer"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:233
-#: ../../../../inc/Category.class.php:266
-#: ../../../../inc/CustomFieldsBase.class.php:106
-#: ../../../../inc/Customer.class.php:150
-#: ../../../../inc/themes/classic/profiles.inc:15
-#: ../../../../inc/themes/material-blue/config.inc:176
-#: ../../../../inc/themes/material-blue/profiles.inc:19
-msgid "Cuentas"
-msgstr "Konten"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:236
-#: ../../../../ajax/ajax_appMgmtSave.php:308
-#: ../../../../inc/Category.class.php:119
-#: ../../../../inc/Customer.class.php:150
-msgid "No es posible eliminar"
-msgstr "Kann nicht gelöscht werden"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:236
-msgid "Grupo en uso por:"
-msgstr "Gruppe in Benutzung durch:"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:241
-msgid "Grupo eliminado"
-msgstr "Gruppe gelöscht"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:244
-msgid "Error al eliminar el grupo"
-msgstr "Fehler beim Löschen einer Gruppe"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:283
-msgid "Es necesario un nombre de perfil"
-msgstr "Profil ist notwendig"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:285
-msgid "Nombre de perfil duplicado"
-msgstr "Duplizierter Profilname"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:290
-msgid "Perfil creado"
-msgstr "Profil hinzugefügt"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:293
-msgid "Error al crear el perfil"
-msgstr "Fehler beim Anlegen des Profils"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:296
-msgid "Perfil actualizado"
-msgstr "Profil aktualisiert"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:299
-msgid "Error al actualizar el perfil"
-msgstr "Fehler beim Ändern des Profils"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:308
-msgid "Perfil en uso por:"
-msgstr "Profil wird benutzt durch: "
-
-#: ../../../../ajax/ajax_appMgmtSave.php:311
-msgid "Perfil eliminado"
-msgstr "Profil gelöscht"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:314
-msgid "Error al eliminar el perfil"
-msgstr "Fehler beim Löschen eines Profils"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:349
-msgid "Cliente creado"
-msgstr "Kunde hinzugefügt"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:364
-msgid "Cliente actualizado"
-msgstr "Kunde aktualisiert"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:374
-msgid "Cliente eliminado"
-msgstr "Kunde gelöscht"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:388
-msgid "Es necesario un nombre de categoría"
-msgstr "Kategoriename ist notwendig"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:408
-msgid "Categoría creada"
-msgstr "Kategorie hinzugefügt"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:423
-msgid "Categoría actualizada"
-msgstr "Kategorie aktualisiert"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:434
-msgid "Categoría eliminada"
-msgstr "Kategorie gelöscht"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:450
-msgid "Usuario o acción no indicado"
-msgstr "Benutzer oder Aktion nicht gesetzt"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:460
-msgid "Autorización creada"
-msgstr "Authentifizierung hinzugefügt"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:468
-msgid "Autorización actualizada"
-msgstr "Authentifizierung aktualisiert"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:478
-msgid "Autorización eliminada"
-msgstr "Authentifizierung gelöscht"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:495
-msgid "Nombre del campo no indicado"
-msgstr "Feldname nicht gesetzt"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:497
-msgid "Tipo del campo no indicado"
-msgstr "Feldtyp nicht gesetzt"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:499
-msgid "Módulo del campo no indicado"
-msgstr "Feldmodul nicht gesetzt"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:513
-msgid "Campo creado"
-msgstr "Feld hinzugefügt"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:522
-msgid "Campo actualizado"
-msgstr "Feld aktualisiert"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:532
-msgid "Campo eliminado"
-msgstr "Feld gelöscht"
-
-#: ../../../../ajax/ajax_backup.php:58 ../../../../ajax/ajax_backup.php:63
-#: ../../../../inc/themes/classic/backup.inc:54
-msgid "Realizar Backup"
-msgstr "Backup erstellen"
-
-#: ../../../../ajax/ajax_backup.php:58 ../../../../ajax/ajax_backup.php:60
-msgid "Error al realizar el backup"
-msgstr "Fehler beim Ausführen des Backups"
-
-#: ../../../../ajax/ajax_backup.php:60 ../../../../ajax/ajax_backup.php:74
-#: ../../../../ajax/ajax_checkLdap.php:58 ../../../../inc/Import.class.php:128
-#: ../../../../inc/Migrate.class.php:92
-msgid "Revise el registro de eventos para más detalles"
-msgstr "Mehr Details in den Log Dateien"
-
-#: ../../../../ajax/ajax_backup.php:63
-msgid "Copia de la aplicación y base de datos realizada correctamente"
-msgstr "Sicherung der Applikation und der Datenbank erfolgreich durchgeführt"
-
-#: ../../../../ajax/ajax_backup.php:65
-msgid "Proceso de backup finalizado"
-msgstr "Sicherung fertig gestellt"
-
-#: ../../../../ajax/ajax_backup.php:72 ../../../../ajax/ajax_backup.php:77
-msgid "Realizar Exportación"
-msgstr "Export starten"
-
-#: ../../../../ajax/ajax_backup.php:72
-msgid "Error al realizar la exportación de cuentas"
-msgstr "Fehler beim exportieren der Accounts"
-
-#: ../../../../ajax/ajax_backup.php:74
-msgid "Error al realizar la exportación"
-msgstr "Fehler beim exportieren"
-
-#: ../../../../ajax/ajax_backup.php:77
-msgid "Exportación de cuentas realizada correctamente"
-msgstr "Export erfolgreich abgeschlossen"
-
-#: ../../../../ajax/ajax_backup.php:79
-msgid "Proceso de exportación finalizado"
-msgstr "Export fertig"
-
-#: ../../../../ajax/ajax_checkLdap.php:52 ../../../../inc/Ldap.class.php:264
-msgid "Los parámetros de LDAP no están configurados"
-msgstr "LDAP-Parameter sind nicht gesetzt"
-
-#: ../../../../ajax/ajax_checkLdap.php:58
-msgid "Error de conexión a LDAP"
-msgstr "LDAP Verbindungsfehler"
-
-#: ../../../../ajax/ajax_checkLdap.php:60
-msgid "Conexión a LDAP correcta"
-msgstr "LDAP-Verbindung ist OK"
-
-#: ../../../../ajax/ajax_checkLdap.php:60
-msgid "Objetos encontrados"
-msgstr "Objekte gefunden"
-
-#: ../../../../ajax/ajax_configSave.php:58
-msgid "Modificar Configuración"
-msgstr "Konfiguration ändern"
-
-#: ../../../../ajax/ajax_configSave.php:101
-msgid "El tamaño máximo por archivo es de 16MB"
-msgstr "Die maximale Dateigröße ist 16MB"
-
-#: ../../../../ajax/ajax_configSave.php:109 ../../../../js/strings.js.php:46
-msgid "Extensión no permitida"
-msgstr "Erweiterung nicht erlaubt"
-
-#: ../../../../ajax/ajax_configSave.php:128
-msgid "Faltan parámetros de Proxy"
-msgstr "Proxy Parameter fehlt"
-
-#: ../../../../ajax/ajax_configSave.php:136
-msgid "Proxy habiltado"
-msgstr "Proxy aktiviert"
-
-#: ../../../../ajax/ajax_configSave.php:140
-msgid "Proxy deshabilitado"
-msgstr "Proxy deaktiviert"
-
-#: ../../../../ajax/ajax_configSave.php:143
-#: ../../../../ajax/ajax_configSave.php:167
-#: ../../../../ajax/ajax_configSave.php:201
-#: ../../../../ajax/ajax_configSave.php:240
-msgid "Sección"
-msgstr "Sektion"
-
-#: ../../../../ajax/ajax_configSave.php:143
-#: ../../../../web/ConfigC.class.php:108
-#: ../../../../inc/themes/classic/profiles.inc:61
-#: ../../../../inc/themes/material-blue/profiles.inc:72
-msgid "General"
-msgstr "Allgemein"
-
-#: ../../../../ajax/ajax_configSave.php:153
-msgid "Faltan parámetros de Wiki"
-msgstr "Fehlender Wiki-Parameter"
-
-#: ../../../../ajax/ajax_configSave.php:160
-msgid "Wiki habiltada"
-msgstr "Wiki aktiviert"
-
-#: ../../../../ajax/ajax_configSave.php:164
-msgid "Wiki deshabilitada"
-msgstr "Wiki deaktiviert"
-
-#: ../../../../ajax/ajax_configSave.php:167
-#: ../../../../web/ConfigC.class.php:244
-#: ../../../../inc/themes/classic/wiki.inc:4
-#: ../../../../inc/themes/material-blue/wiki.inc:4
-msgid "Wiki"
-msgstr "Wiki"
-
-#: ../../../../ajax/ajax_configSave.php:182
-msgid "Faltan parámetros de LDAP"
-msgstr "Fehlender LDAP-Parameter"
-
-#: ../../../../ajax/ajax_configSave.php:194
-msgid "LDAP habiltado"
-msgstr "LDAP aktiviert"
-
-#: ../../../../ajax/ajax_configSave.php:198
-msgid "LDAP deshabilitado"
-msgstr "LDAP deaktiviert"
-
-#: ../../../../ajax/ajax_configSave.php:201
-#: ../../../../web/ConfigC.class.php:276
-#: ../../../../inc/themes/classic/ldap.inc:4
-#: ../../../../inc/themes/material-blue/ldap.inc:4
-msgid "LDAP"
-msgstr "LDAP"
-
-#: ../../../../ajax/ajax_configSave.php:216
-msgid "Faltan parámetros de Correo"
-msgstr "Fehlende Mail Parameter"
-
-#: ../../../../ajax/ajax_configSave.php:231
-msgid "Correo habiltado"
-msgstr "Mail aktiviert"
-
-#: ../../../../ajax/ajax_configSave.php:237
-msgid "Correo deshabilitado"
-msgstr "Mail deaktiviert"
-
-#: ../../../../ajax/ajax_configSave.php:240
-#: ../../../../web/ConfigC.class.php:306
-#: ../../../../inc/themes/classic/mail.inc:4
-#: ../../../../inc/themes/material-blue/mail.inc:4
-msgid "Correo"
-msgstr "E-Mail"
-
-#: ../../../../ajax/ajax_configSave.php:262
-msgid "Configuración actualizada"
-msgstr "Konfiguration aktualisiert"
-
-#: ../../../../ajax/ajax_configSave.php:271
-#: ../../../../ajax/ajax_configSave.php:317
-#: ../../../../ajax/ajax_viewpass.php:61
-#: ../../../../inc/Controller.class.php:169
-msgid "Clave maestra actualizada"
-msgstr "Master-Passwort aktualisiert"
-
-#: ../../../../ajax/ajax_configSave.php:271
-#: ../../../../ajax/ajax_viewpass.php:61
-#: ../../../../inc/Controller.class.php:169
-msgid "Reinicie la sesión para cambiarla"
-msgstr "Neue Sitzung beginnen"
-
-#: ../../../../ajax/ajax_configSave.php:273
-msgid "Clave maestra no indicada"
-msgstr "Master-Passwort notwendig"
-
-#: ../../../../ajax/ajax_configSave.php:275
-msgid "Se ha de confirmar el cambio de clave"
-msgstr "Passwort muss bestätigt werden"
-
-#: ../../../../ajax/ajax_configSave.php:279
-msgid "Las claves son idénticas"
-msgstr "Passwörter sind identisch"
-
-#: ../../../../ajax/ajax_configSave.php:281
-msgid "Las claves maestras no coinciden"
-msgstr "Master-Passwort stimmt nicht"
-
-#: ../../../../ajax/ajax_configSave.php:283
-msgid "La clave maestra actual no coincide"
-msgstr "Aktuelles Master-Passwort stimmt nicht"
-
-#: ../../../../ajax/ajax_configSave.php:292
-msgid "Errores al actualizar las claves de las cuentas"
-msgstr "Fehler beim Ändern der Passwörter eines Kontos"
-
-#: ../../../../ajax/ajax_configSave.php:298
-msgid "Errores al actualizar las claves de las cuentas del histórico"
-msgstr "Fehler beim Aktualisieren des Kontopasswörter in der History"
-
-#: ../../../../ajax/ajax_configSave.php:302
-msgid "Errores al actualizar datos de campos personalizados"
-msgstr "Fehler beim aktualisieren der Benutzerfelder"
-
-#: ../../../../ajax/ajax_configSave.php:315
-#: ../../../../inc/Account.class.php:512
-msgid "Actualizar Clave Maestra"
-msgstr "Master-Passwort ändern"
-
-#: ../../../../ajax/ajax_configSave.php:319
-msgid "Error al guardar el hash de la clave maestra"
-msgstr "Fehler beim Speichern des Hash für das Master-Passwort"
-
-#: ../../../../ajax/ajax_configSave.php:327
-msgid "Generar Clave Temporal"
-msgstr "temporäres Passwort erstellen"
-
-#: ../../../../ajax/ajax_configSave.php:327
-#: ../../../../inc/CustomFieldsBase.class.php:87
-#: ../../../../inc/themes/classic/account.inc:86
-#: ../../../../inc/themes/classic/editpass.inc:25
-#: ../../../../inc/themes/classic/encryption.inc:143
-#: ../../../../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/passreset.inc:34
-#: ../../../../inc/themes/classic/users.inc:75
-#: ../../../../inc/themes/classic/userspass.inc:8
-#: ../../../../inc/themes/classic/userspass.inc:11
-#: ../../../../inc/themes/material-blue/account.inc:99
-#: ../../../../inc/themes/material-blue/account.inc:104
-#: ../../../../inc/themes/material-blue/config.inc:414
-#: ../../../../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/encryption.inc:161
-#: ../../../../inc/themes/material-blue/install.inc:47
-#: ../../../../inc/themes/material-blue/ldap.inc:105
-#: ../../../../inc/themes/material-blue/login.inc:18
-#: ../../../../inc/themes/material-blue/login.inc:41
-#: ../../../../inc/themes/material-blue/mail.inc:73
-#: ../../../../inc/themes/material-blue/mail.inc:80
-#: ../../../../inc/themes/material-blue/passreset.inc:30
-#: ../../../../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"
-
-#: ../../../../ajax/ajax_configSave.php:329
-msgid "Clave Temporal Generada"
-msgstr "temporäres Passwort erstellt"
-
-#: ../../../../ajax/ajax_configSave.php:331
-msgid "Error al generar clave temporal"
-msgstr "Fehler beim erstellen eines temporären Passwortes"
-
-#: ../../../../ajax/ajax_doLogin.php:49
-msgid "Usuario/Clave no introducidos"
-msgstr "Keine Benutzername/Passwort eingegeben"
-
-#: ../../../../ajax/ajax_doLogin.php:61
-msgid "Inicio sesión"
-msgstr "Anmelden"
-
-#: ../../../../ajax/ajax_doLogin.php:66
-msgid "Servidor Login"
-msgstr "Anmeldeserver"
-
-#: ../../../../ajax/ajax_doLogin.php:72
-msgid "Error al guardar los datos de LDAP"
-msgstr "Fehler beim Speichern der LDAP-Benutzerdaten"
-
-#: ../../../../ajax/ajax_doLogin.php:75 ../../../../ajax/ajax_doLogin.php:83
-#: ../../../../ajax/ajax_doLogin.php:135 ../../../../ajax/ajax_doLogin.php:179
-#: ../../../../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:188
-#: ../../../../inc/Crypt.class.php:199
-#: ../../../../inc/XmlImportBase.class.php:79
-msgid "Error interno"
-msgstr "Interner Fehler"
-
-#: ../../../../ajax/ajax_doLogin.php:80
-msgid "Error al actualizar la clave del usuario en la BBDD"
-msgstr "Fehler beim Ändern des Benutzer-Passworts in der BD"
-
-#: ../../../../ajax/ajax_doLogin.php:88 ../../../../ajax/ajax_doLogin.php:113
-msgid "Login incorrecto"
-msgstr "Fehlerhafte Anmeldung"
-
-#: ../../../../ajax/ajax_doLogin.php:89 ../../../../ajax/ajax_doLogin.php:96
-#: ../../../../ajax/ajax_doLogin.php:103 ../../../../ajax/ajax_doLogin.php:114
-#: ../../../../ajax/ajax_doLogin.php:124 ../../../../ajax/ajax_doLogin.php:174
-#: ../../../../inc/ApiTokens.class.php:190
-#: ../../../../inc/ApiTokens.class.php:308 ../../../../inc/Auth.class.php:108
-#: ../../../../inc/Init.class.php:466 ../../../../inc/Ldap.class.php:295
-#: ../../../../inc/Ldap.class.php:308 ../../../../inc/Ldap.class.php:316
-#: ../../../../inc/UserBase.class.php:384
-#: ../../../../inc/UserBase.class.php:528 ../../../../res/test.php:64
-#: ../../../../web/SearchC.class.php:305
-#: ../../../../web/UsersMgmtC.class.php:393
-#: ../../../../inc/themes/classic/account.inc:73
-#: ../../../../inc/themes/classic/editpass.inc:21
-#: ../../../../inc/themes/classic/eventlog.inc:23
-#: ../../../../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:89
-#: ../../../../inc/themes/classic/tokens.inc:8
-#: ../../../../inc/themes/material-blue/account.inc:84
-#: ../../../../inc/themes/material-blue/config.inc:400
-#: ../../../../inc/themes/material-blue/editpass.inc:22
-#: ../../../../inc/themes/material-blue/eventlog.inc:23
-#: ../../../../inc/themes/material-blue/info.inc:39
-#: ../../../../inc/themes/material-blue/ldap.inc:86
-#: ../../../../inc/themes/material-blue/login.inc:11
-#: ../../../../inc/themes/material-blue/login.inc:34
-#: ../../../../inc/themes/material-blue/mail.inc:61
-#: ../../../../inc/themes/material-blue/mail.inc:67
-#: ../../../../inc/themes/material-blue/passreset.inc:16
-#: ../../../../inc/themes/material-blue/request.inc:20
-#: ../../../../inc/themes/material-blue/search.inc:91
-#: ../../../../inc/themes/material-blue/tokens.inc:8
-msgid "Usuario"
-msgstr "Benutzer"
-
-#: ../../../../ajax/ajax_doLogin.php:92 ../../../../ajax/ajax_doLogin.php:106
-#: ../../../../ajax/ajax_doLogin.php:117
-msgid "Usuario/Clave incorrectos"
-msgstr "Falscher/s Benutzername/Passwort"
-
-#: ../../../../ajax/ajax_doLogin.php:95 ../../../../ajax/ajax_doLogin.php:99
-msgid "Cuenta expirada"
-msgstr "Konto abgelaufen"
-
-#: ../../../../ajax/ajax_doLogin.php:102
-msgid "El usuario no tiene grupos asociados"
-msgstr "Der Benutzer hat keine zugewiesene Gruppe"
-
-#: ../../../../ajax/ajax_doLogin.php:123 ../../../../ajax/ajax_doLogin.php:127
-msgid "Usuario deshabilitado"
-msgstr "Benutzer gespert"
-
-#: ../../../../ajax/ajax_doLogin.php:132
-msgid "Error al obtener los datos del usuario de la BBDD"
-msgstr "Fehler beim Laden der Benutzerdaten aus der Datenbank"
-
-#: ../../../../ajax/ajax_doLogin.php:142
-msgid "La clave maestra no ha sido guardada o es incorrecta"
-msgstr "Master-Passwort ist nicht sicher oder stimmt nicht"
-
-#: ../../../../ajax/ajax_doLogin.php:149 ../../../../ajax/ajax_doLogin.php:152
-msgid "Clave maestra incorrecta"
-msgstr "Ungültiges Master-Passwort"
-
-#: ../../../../ajax/ajax_doLogin.php:175
-#: ../../../../inc/ProfileBase.class.php:512
-#: ../../../../inc/ProfileBase.class.php:550
-#: ../../../../inc/ProfileBase.class.php:593
-#: ../../../../web/UsersMgmtC.class.php:90
-#: ../../../../inc/themes/classic/users.inc:37
-#: ../../../../inc/themes/material-blue/users.inc:43
-msgid "Perfil"
-msgstr "Profil"
-
-#: ../../../../ajax/ajax_doLogin.php:176 ../../../../inc/Groups.class.php:158
-#: ../../../../inc/Groups.class.php:259 ../../../../inc/Groups.class.php:375
-#: ../../../../inc/Ldap.class.php:218 ../../../../inc/Ldap.class.php:231
-#: ../../../../inc/Ldap.class.php:241 ../../../../inc/Ldap.class.php:390
-#: ../../../../web/UsersMgmtC.class.php:91
-#: ../../../../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"
-
-#: ../../../../ajax/ajax_files.php:46 ../../../../ajax/ajax_getFiles.php:40
+#: ../../../../ajax/ajax_accGetFiles.php:43
+#: ../../../../ajax/ajax_filesMgmt.php:58
msgid "Gestión de archivos deshabilitada"
msgstr "Dateiverwaltung gesperrt"
-#: ../../../../ajax/ajax_files.php:60 ../../../../inc/Files.class.php:63
+#: ../../../../ajax/ajax_accGetFiles.php:50
+#: ../../../../ajax/ajax_accSearch.php:44
+#: ../../../../ajax/ajax_filesMgmt.php:54
+#: ../../../../ajax/ajax_filesMgmt.php:70
+#: ../../../../ajax/ajax_passReset.php:49
+#: ../../../../ajax/ajax_userPrefsSave.php:58
+msgid "CONSULTA INVÁLIDA"
+msgstr "Ungültige Anfrage"
+
+#: ../../../../ajax/ajax_accSearch.php:38
+#: ../../../../ajax/ajax_userPrefsSave.php:51
+#: ../../../../inc/SP/Controller/RequestControllerTrait.class.php:125
+msgid "La sesión no se ha iniciado o ha caducado"
+msgstr "Sitzung konnte nicht gestartet werden oder ist abgelaufen"
+
+#: ../../../../ajax/ajax_filesMgmt.php:73
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:93
msgid "Subir Archivo"
msgstr "Datei hochladen"
-#: ../../../../ajax/ajax_files.php:69
+#: ../../../../ajax/ajax_filesMgmt.php:79
+#, fuzzy
msgid "No hay extensiones permitidas"
msgstr "Es gibt keine erlaubten Dateiendungen"
-#: ../../../../ajax/ajax_files.php:80 ../../../../inc/FileImport.class.php:115
+#: ../../../../ajax/ajax_filesMgmt.php:96
+#: ../../../../inc/SP/Import/FileImport.class.php:97
msgid "Tipo de archivo no soportado"
msgstr "Dateityp nicht erlaubt"
-#: ../../../../ajax/ajax_files.php:86
+#: ../../../../ajax/ajax_filesMgmt.php:97
+msgid "Extensión"
+msgstr "Erweiterung"
+
+#: ../../../../ajax/ajax_filesMgmt.php:103
msgid "Archivo inválido"
msgstr "Ungültige Datei"
-#: ../../../../ajax/ajax_files.php:102 ../../../../ajax/ajax_files.php:119
-#: ../../../../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:109
-msgid "El archivo es mayor de "
-msgstr "Datei ist größer als"
-
-#: ../../../../ajax/ajax_files.php:126
-msgid "Archivo guardado"
-msgstr "Datei gespeichert"
-
-#: ../../../../ajax/ajax_files.php:131
-msgid "No se pudo guardar el archivo"
-msgstr "Fehler beim Speichern der Datei"
-
-#: ../../../../ajax/ajax_files.php:141 ../../../../ajax/ajax_files.php:200
-msgid "No es un ID de archivo válido"
-msgstr "Ungültige Datei-ID"
-
-#: ../../../../ajax/ajax_files.php:149
-msgid "El archivo no existe"
-msgstr "Datei existiert nicht"
-
-#: ../../../../ajax/ajax_files.php:158
-#: ../../../../inc/themes/classic/files.inc:19
-#: ../../../../inc/themes/material-blue/files.inc:19
-msgid "Descargar Archivo"
-msgstr "Datei herunterladen"
-
-#: ../../../../ajax/ajax_files.php:159 ../../../../ajax/ajax_viewpass.php:70
-#: ../../../../inc/Files.class.php:112
-#: ../../../../inc/themes/classic/eventlog.inc:14
-#: ../../../../inc/themes/material-blue/eventlog.inc:14
-msgid "ID"
-msgstr "ID"
-
-#: ../../../../ajax/ajax_files.php:160 ../../../../inc/Files.class.php:65
-#: ../../../../inc/Files.class.php:113
-#: ../../../../inc/themes/classic/import.inc:152
-#: ../../../../inc/themes/material-blue/import.inc:80
+#: ../../../../ajax/ajax_filesMgmt.php:104
+#: ../../../../ajax/ajax_filesMgmt.php:166
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:835
+#: ../../../../inc/SP/Core/Upgrade.class.php:285
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:95
+#: ../../../../inc/themes/material-blue/views/config/import.inc:66
+#: ../../../../inc/themes/material-blue/views/config/import.inc:69
msgid "Archivo"
msgstr "Datei"
-#: ../../../../ajax/ajax_files.php:161 ../../../../inc/Files.class.php:66
-#: ../../../../inc/Files.class.php:114
-#: ../../../../web/AccountsMgmtC.class.php:267
-#: ../../../../inc/themes/classic/customfields.inc:16
-#: ../../../../inc/themes/material-blue/customfields.inc:19
-msgid "Tipo"
-msgstr "Typ"
+#: ../../../../ajax/ajax_filesMgmt.php:117
+#: ../../../../ajax/ajax_filesMgmt.php:135
+#: ../../../../inc/SP/Import/FileImport.class.php:113
+#: ../../../../inc/SP/Import/FileImport.class.php:157
+#: ../../../../inc/SP/Import/FileImport.class.php:185
+msgid "Error interno al leer el archivo"
+msgstr "Interner Fehler beim Lesen der Datei"
-#: ../../../../ajax/ajax_files.php:162 ../../../../inc/Files.class.php:67
-#: ../../../../inc/Files.class.php:115
+#: ../../../../ajax/ajax_filesMgmt.php:124
+msgid "Tamaño de archivo superado"
+msgstr "Dateigröße erreicht"
+
+#: ../../../../ajax/ajax_filesMgmt.php:125
+#: ../../../../ajax/ajax_filesMgmt.php:168
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:284
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:97
msgid "Tamaño"
msgstr "Größe"
-#: ../../../../ajax/ajax_files.php:204
-msgid "Archivo eliminado"
-msgstr "Datei gelöscht"
+#: ../../../../ajax/ajax_filesMgmt.php:144
+msgid "Archivo guardado"
+msgstr "Datei gespeichert"
-#: ../../../../ajax/ajax_files.php:209
-msgid "Error al eliminar el archivo"
-msgstr "Fehler beim Löschen einer Datei"
+#: ../../../../ajax/ajax_filesMgmt.php:146
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:77
+msgid "No se pudo guardar el archivo"
+msgstr "Fehler beim Speichern der Datei"
-#: ../../../../ajax/ajax_getContent.php:42
-#: ../../../../inc/ApiRequest.class.php:55
-#: ../../../../inc/CustomFieldDef.class.php:45
-#: ../../../../inc/CustomFields.class.php:54
-msgid "Parámetros incorrectos"
-msgstr "Fehlerhafter Parameter"
+#: ../../../../ajax/ajax_filesMgmt.php:154
+#: ../../../../ajax/ajax_filesMgmt.php:198
+msgid "No es un ID de archivo válido"
+msgstr "Ungültige Datei-ID"
-#: ../../../../ajax/ajax_migrate.php:56
-msgid "Confirmar la importación de cuentas"
-msgstr "Import der Konten bestätigen"
+#: ../../../../ajax/ajax_filesMgmt.php:160
+msgid "El archivo no existe"
+msgstr "Datei existiert nicht"
-#: ../../../../ajax/ajax_migrate.php:58
-msgid "Es necesario un usuario de conexión"
-msgstr "Benutzername der Verbindung ist notwendig"
+#: ../../../../ajax/ajax_filesMgmt.php:163
+#: ../../../../inc/themes/material-blue/views/account/files-list.inc:34
+msgid "Descargar Archivo"
+msgstr "Datei herunterladen"
-#: ../../../../ajax/ajax_migrate.php:60
-msgid "Es necesaria una clave de conexión"
-msgstr "Verbindungs-Passwort wird benötigt"
+#: ../../../../ajax/ajax_filesMgmt.php:164
+#: ../../../../inc/SP/Api/SyspassApi.class.php:82
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:518
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:19
+msgid "ID"
+msgstr "ID"
-#: ../../../../ajax/ajax_migrate.php:62
-msgid "Es necesario el nombre de la BBDD"
-msgstr "Datenbank ist notwendig"
-
-#: ../../../../ajax/ajax_migrate.php:64
-msgid "Es necesario un nombre de host"
-msgstr "Hostname ist notwendig"
-
-#: ../../../../ajax/ajax_passReset.php:50
-#: ../../../../ajax/ajax_passReset.php:53
-msgid "Recuperación de Clave"
-msgstr "Wiederherstellung des Passworts"
-
-#: ../../../../ajax/ajax_passReset.php:56
-#: ../../../../ajax/ajax_passReset.php:61
-msgid "Solicitado para"
-msgstr "Anfrage für"
-
-#: ../../../../ajax/ajax_passReset.php:58
-#: ../../../../ajax/ajax_sendRequest.php:76
-msgid "Solicitud enviada"
-msgstr "Anfrage verschickt."
-
-#: ../../../../ajax/ajax_passReset.php:58
-msgid "En breve recibirá un correo para completar la solicitud."
-msgstr "Sie bekommen in Kürze eine E-Mail, um die Anfrage zu beenden"
-
-#: ../../../../ajax/ajax_passReset.php:63
-msgid "No se ha podido realizar la solicitud. Consulte con el administrador."
-msgstr ""
-"Anfrage konnte nicht ausgeführt werden. Bitte Administrator benachrichtigen."
-
-#: ../../../../ajax/ajax_passReset.php:73
-#: ../../../../inc/UserBase.class.php:570
-#: ../../../../inc/UserPass.class.php:127
-msgid "Modificar Clave Usuario"
-msgstr "Benutzer-Passwort ändern"
-
-#: ../../../../ajax/ajax_passReset.php:73
-#: ../../../../inc/UserBase.class.php:570
-#: ../../../../inc/UserBase.class.php:594
-#: ../../../../inc/UserPass.class.php:127
-#: ../../../../web/UsersMgmtC.class.php:89
-#: ../../../../inc/themes/classic/users.inc:21
-#: ../../../../inc/themes/material-blue/users.inc:24
-msgid "Login"
-msgstr "Anmeldung"
-
-#: ../../../../ajax/ajax_passReset.php:81
-msgid "La clave es incorrecta o no coincide"
-msgstr "Das Passwort is falsch oder nicht gleich"
-
-#: ../../../../ajax/ajax_sendRequest.php:49
-msgid "Es necesaria una descripción"
-msgstr "Beschreibung ist notwendig"
-
-#: ../../../../ajax/ajax_sendRequest.php:62
-msgid "Solicitud de Modificación de Cuenta"
-msgstr "Kontoänderung initiiert"
-
-#: ../../../../ajax/ajax_sendRequest.php:63
-msgid "Solicitante"
-msgstr "Anfrager"
-
-#: ../../../../ajax/ajax_sendRequest.php:64
-#: ../../../../ajax/ajax_viewpass.php:71 ../../../../inc/Account.class.php:181
-#: ../../../../inc/Account.class.php:236 ../../../../inc/Account.class.php:417
-#: ../../../../inc/Account.class.php:440 ../../../../inc/Account.class.php:684
-#: ../../../../inc/Files.class.php:64
+#: ../../../../ajax/ajax_filesMgmt.php:165
+#: ../../../../inc/SP/Api/SyspassApi.class.php:83
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:280
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:832
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:719
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:729
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:744
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:833
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1102
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:519
+#: ../../../../inc/SP/Controller/MainController.class.php:573
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:94
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:76
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:11
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:13
msgid "Cuenta"
msgstr "Konto"
-#: ../../../../ajax/ajax_sendRequest.php:65
-#: ../../../../inc/Account.class.php:180 ../../../../inc/Account.class.php:235
-#: ../../../../inc/Account.class.php:416 ../../../../inc/Account.class.php:439
-#: ../../../../inc/Account.class.php:683 ../../../../inc/Customer.class.php:65
-#: ../../../../inc/Customer.class.php:115
-#: ../../../../inc/Customer.class.php:163
-#: ../../../../web/SearchC.class.php:287
-#: ../../../../inc/themes/classic/account.inc:23
-#: ../../../../inc/themes/classic/editpass.inc:12
-#: ../../../../inc/themes/classic/request.inc:9
-#: ../../../../inc/themes/classic/search.inc:58
-#: ../../../../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:60
-msgid "Cliente"
-msgstr "Kunde"
+#: ../../../../ajax/ajax_filesMgmt.php:167
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:206
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:283
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:55
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:718
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:728
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:743
+#: ../../../../inc/SP/Controller/LoginController.class.php:344
+#: ../../../../inc/SP/Controller/LoginController.class.php:369
+#: ../../../../inc/SP/Controller/LoginController.class.php:407
+#: ../../../../inc/SP/Controller/LoginController.class.php:425
+#: ../../../../inc/SP/Controller/LoginController.class.php:431
+#: ../../../../inc/SP/Core/Init.class.php:430
+#: ../../../../inc/SP/Core/Init.class.php:670
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:96
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:75
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:31
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:33
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:39
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:46
+msgid "Tipo"
+msgstr "Typ"
-#: ../../../../ajax/ajax_sendRequest.php:66
-#: ../../../../web/AccountsMgmtC.class.php:80
-#: ../../../../web/AccountsMgmtC.class.php:139
-#: ../../../../web/UsersMgmtC.class.php:188
-#: ../../../../inc/themes/classic/categories.inc:16
-#: ../../../../inc/themes/classic/customers.inc:16
-#: ../../../../inc/themes/classic/eventlog.inc:29
-#: ../../../../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:29
-#: ../../../../inc/themes/material-blue/groups.inc:20
-msgid "Descripción"
-msgstr "Beschreibung"
+#: ../../../../ajax/ajax_filesMgmt.php:204
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:827
+msgid "Archivo eliminado"
+msgstr "Datei gelöscht"
-#: ../../../../ajax/ajax_sendRequest.php:79
-msgid "Error al enviar la solicitud"
-msgstr "Fehler beim Senden der Anfrage"
+#: ../../../../ajax/ajax_filesMgmt.php:206
+msgid "Error al eliminar el archivo"
+msgstr "Fehler beim Löschen der Datei"
-#: ../../../../ajax/ajax_userPrefsSave.php:75
-#: ../../../../ajax/ajax_userPrefsSave.php:108
-msgid "Error al actualizar preferencias"
-msgstr "Fehler beim aktualisieren der Einstellungen"
+#: ../../../../ajax/ajax_filesMgmt.php:209
+#: ../../../../ajax/ajax_userPrefsSave.php:97
+#: ../../../../inc/SP/Api/ApiRequest.class.php:192
+#: ../../../../inc/SP/Controller/RequestControllerTrait.class.php:112
+msgid "Acción Inválida"
+msgstr "Ungültige Aktion"
-#: ../../../../ajax/ajax_userPrefsSave.php:85
-#: ../../../../ajax/ajax_userPrefsSave.php:111
+#: ../../../../ajax/ajax_getContent.php:55
+#: ../../../../inc/SP/Api/ApiBase.class.php:156
+#: ../../../../inc/SP/Api/ApiRequest.class.php:178
+msgid "Parámetros incorrectos"
+msgstr "Fehlerhafter Parameter"
+
+#: ../../../../ajax/ajax_install.php:58
+msgid "Instalación finalizada"
+msgstr "Installation beendet"
+
+#: ../../../../ajax/ajax_passReset.php:62
+msgid "Recuperación de Clave"
+msgstr "Wiederherstellung des Passworts"
+
+#: ../../../../ajax/ajax_passReset.php:63
+msgid "Solicitado para"
+msgstr "Anfrage für"
+
+#: ../../../../ajax/ajax_passReset.php:70
+msgid "Solicitud enviada"
+msgstr "Anfrage verschickt."
+
+#: ../../../../ajax/ajax_passReset.php:74
+msgid "En breve recibirá un correo para completar la solicitud."
+msgstr "Sie bekommen in Kürze eine E-Mail, um die Anfrage zu beenden"
+
+#: ../../../../ajax/ajax_passReset.php:78
+msgid "Solicitud no enviada"
+msgstr "Anfrage nicht abgeschickt"
+
+#: ../../../../ajax/ajax_passReset.php:79
+msgid "Compruebe datos de usuario o consulte con el administrador"
+msgstr ""
+"Bitte überprüfen Sie die Benutzerdaten oder kontaktieren den Administrator"
+
+#: ../../../../ajax/ajax_passReset.php:88
+#: ../../../../inc/SP/Mgmt/Users/UserPass.class.php:151
+msgid "Modificar Clave Usuario"
+msgstr "Benutzer-Passwort ändern"
+
+#: ../../../../ajax/ajax_passReset.php:101
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:282
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:934
+msgid "Clave actualizada"
+msgstr "Passwort aktualisiert"
+
+#: ../../../../ajax/ajax_passReset.php:102
+#: ../../../../inc/SP/Auth/Database/Database.class.php:68
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:474
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:231
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:246
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:273
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:284
+#: ../../../../inc/SP/Mgmt/Users/UserMigrate.class.php:106
+#: ../../../../inc/SP/Mgmt/Users/UserPass.class.php:152
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:37
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:23
+msgid "Login"
+msgstr "Anmeldung"
+
+#: ../../../../ajax/ajax_passReset.php:109
+#, fuzzy
+msgid "La clave es incorrecta o no coincide"
+msgstr "Das Passwort is falsch oder nicht gleich"
+
+#: ../../../../ajax/ajax_userPrefsSave.php:90
+#: ../../../../inc/SP/Mgmt/Users/UserPreferencesUtil.class.php:85
msgid "Preferencias actualizadas"
msgstr "Einstellungen aktualisiert"
-#: ../../../../ajax/ajax_viewpass.php:55
-msgid "La clave maestra no coincide"
-msgstr "Master-Passwort stimmt nicht"
+#: ../../../../inc/SP/Account/Account.class.php:126
+msgid "Error al modificar la cuenta"
+msgstr "Fehler beim Ändern des Kontos"
-#: ../../../../ajax/ajax_viewpass.php:59
-#: ../../../../inc/Controller.class.php:166
-msgid "No tiene permisos para acceder a esta cuenta"
-msgstr "Sie haben keine Erlaubnis auf dieses Konto zuzugreifen"
+#: ../../../../inc/SP/Account/Account.class.php:172
+#: ../../../../inc/SP/Account/AccountHistoryUtil.class.php:153
+msgid "Error al restaurar cuenta"
+msgstr "Fehler bei der Wiederherstellung der Rechnung"
-#: ../../../../ajax/ajax_viewpass.php:69 ../../../../inc/Acl.class.php:133
-#: ../../../../inc/themes/classic/account.inc:389
-#: ../../../../inc/themes/classic/profiles.inc:23
-#: ../../../../inc/themes/classic/search.inc:139
-#: ../../../../inc/themes/material-blue/account.inc:433
-#: ../../../../inc/themes/material-blue/profiles.inc:35
-#: ../../../../inc/themes/material-blue/search.inc:149
-msgid "Ver Clave"
-msgstr "Passwort anzeigen"
-
-#: ../../../../ajax/ajax_viewpass.php:80 ../../../../js/strings.js.php:73
-msgid "Clave de Cuenta"
-msgstr "Account Passwort"
-
-#: ../../../../api.php:56
-msgid "Ayuda Parámetros"
-msgstr "Parameterhilfe"
-
-#: ../../../../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:33 ../../../../inc/Backup.class.php:28
-#: ../../../../inc/Base.php:26 ../../../../inc/Cache.class.php:28
-#: ../../../../inc/Category.class.php:29 ../../../../inc/Config.class.php:28
-#: ../../../../inc/ConfigDB.class.php:28
-#: ../../../../inc/ConfigInterface.class.php:28
-#: ../../../../inc/Controller.class.php:31 ../../../../inc/Crypt.class.php:28
-#: ../../../../inc/CryptMasterPass.class.php:28
-#: ../../../../inc/CryptPKI.class.php:28
-#: ../../../../inc/CsvImport.class.php:28
-#: ../../../../inc/CsvImportBase.class.php:28
-#: ../../../../inc/CustomFieldDef.class.php:28
-#: ../../../../inc/CustomFields.class.php:28
-#: ../../../../inc/CustomFieldsBase.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/Language.class.php:28 ../../../../inc/Ldap.class.php:29
-#: ../../../../inc/LdapADS.class.php:28 ../../../../inc/Log.class.php:28
-#: ../../../../inc/Migrate.class.php:28 ../../../../inc/Minify.class.php:30
-#: ../../../../inc/Profile.class.php:29
-#: ../../../../inc/ProfileBase.class.php:28
-#: ../../../../inc/Request.class.php:46 ../../../../inc/Response.class.php:28
-#: ../../../../inc/SPException.class.php:28
-#: ../../../../inc/Session.class.php:28
-#: ../../../../inc/SessionUtil.class.php:28
-#: ../../../../inc/SyspassImport.class.php:28
-#: ../../../../inc/Template.class.php:27 ../../../../inc/Themes.class.php:28
-#: ../../../../inc/Upgrade.class.php:29 ../../../../inc/User.class.php:28
-#: ../../../../inc/UserAccounts.class.php:28
-#: ../../../../inc/UserBase.class.php:28 ../../../../inc/UserLdap.class.php:28
-#: ../../../../inc/UserMigrate.class.php:28
-#: ../../../../inc/UserPass.class.php:28
-#: ../../../../inc/UserPassRecover.class.php:28
-#: ../../../../inc/UserPreferences.class.php:28
-#: ../../../../inc/UserUtil.class.php:28 ../../../../inc/Util.class.php:28
-#: ../../../../inc/XmlExport.class.php:28
-#: ../../../../inc/XmlImport.class.php:28
-#: ../../../../inc/XmlImportBase.class.php:28
-#: ../../../../web/AccountC.class.php:41
-#: ../../../../web/AccountsMgmtC.class.php:33
-#: ../../../../web/ConfigC.class.php:35 ../../../../web/EventlogC.class.php:30
-#: ../../../../web/SearchC.class.php:33
-#: ../../../../web/UsersMgmtC.class.php:40
-#: ../../../../web/UsersPrefsC.class.php:35
-msgid "No es posible acceder directamente a este archivo"
-msgstr "Auf diese Datei darf nicht direkt zugegriffen werden"
-
-#: ../../../../inc/Account.class.php:112 ../../../../inc/Account.class.php:201
-#: ../../../../inc/Account.class.php:653
-msgid "Error al actualizar el historial"
-msgstr "Fehler beim Ändern der Historie"
-
-#: ../../../../inc/Account.class.php:117
-msgid "Actualizar Cuenta"
-msgstr "Konto ändern"
-
-#: ../../../../inc/Account.class.php:120 ../../../../inc/Account.class.php:398
-msgid "Error al actualizar los grupos secundarios"
-msgstr "Fehler beim Ändern der Gruppe"
-
-#: ../../../../inc/Account.class.php:126 ../../../../inc/Account.class.php:406
-msgid "Error al actualizar los usuarios de la cuenta"
-msgstr "Fehler beim Ändern der Benutzer eines Kontos"
-
-#: ../../../../inc/Account.class.php:234
-msgid "Restaurar Cuenta"
-msgstr "Wiederherstellen Konto"
-
-#: ../../../../inc/Account.class.php:341
-#: ../../../../inc/AccountHistory.class.php:348
-#: ../../../../inc/AccountHistory.class.php:508
+#: ../../../../inc/SP/Account/Account.class.php:200
+#: ../../../../inc/SP/Account/AccountHistory.class.php:216
+#: ../../../../inc/SP/Account/AccountHistory.class.php:503
msgid "No se pudieron obtener los datos de la cuenta"
msgstr "Fehler beim Laden der Kontodaten"
-#: ../../../../inc/Account.class.php:415 ../../../../inc/Acl.class.php:129
-#: ../../../../web/AccountC.class.php:150 ../../../../web/MainC.class.php:183
-msgid "Nueva Cuenta"
-msgstr "Neues Konto"
+#: ../../../../inc/SP/Account/Account.class.php:202
+msgid "La cuenta no existe"
+msgstr "Konto existiert nicht"
-#: ../../../../inc/Account.class.php:433
-msgid "ERROR: Error en la operación."
-msgstr "Fehler: Operation fehlgeschlagen"
+#: ../../../../inc/SP/Account/Account.class.php:267
+msgid "Error al crear la cuenta"
+msgstr "Fehler beim Anlegen des Kontos"
-#: ../../../../inc/Account.class.php:438 ../../../../inc/Acl.class.php:134
-#: ../../../../web/AccountC.class.php:358
-#: ../../../../inc/themes/classic/account.inc:376
-#: ../../../../inc/themes/classic/search.inc:167
-#: ../../../../inc/themes/material-blue/account.inc:427
-#: ../../../../inc/themes/material-blue/search.inc:178
-msgid "Eliminar Cuenta"
-msgstr "Konto löschen"
+#: ../../../../inc/SP/Account/Account.class.php:339
+#: ../../../../inc/SP/Account/AccountHistory.class.php:626
+msgid "Error al eliminar la cuenta"
+msgstr "Fehler beim Löschen des Kontos"
-#: ../../../../inc/Account.class.php:451
-msgid "Error al eliminar grupos asociados a la cuenta"
-msgstr "Fehler beim Löschen der Guppen eines Kontos"
+#: ../../../../inc/SP/Account/Account.class.php:403
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:561
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:585
+msgid "Actualizar Clave Maestra"
+msgstr "Master-Passwort ändern"
-#: ../../../../inc/Account.class.php:455
-msgid "Error al eliminar usuarios asociados a la cuenta"
-msgstr "Fehler beim Löschen der Benutzer eines Kontos"
-
-#: ../../../../inc/Account.class.php:459
-msgid "Error al eliminar archivos asociados a la cuenta"
-msgstr "Fehler beim Löschen der Dateien eines Kontos"
-
-#: ../../../../inc/Account.class.php:513
-#: ../../../../inc/AccountHistory.class.php:129
-#: ../../../../inc/XmlImport.class.php:62
+#: ../../../../inc/SP/Account/Account.class.php:404
+#: ../../../../inc/SP/Account/AccountHistory.class.php:263
msgid "Inicio"
msgstr "Start"
-#: ../../../../inc/Account.class.php:518
-#: ../../../../inc/AccountHistory.class.php:135
+#: ../../../../inc/SP/Account/Account.class.php:408
+#: ../../../../inc/SP/Account/AccountHistory.class.php:268
msgid "Error en el módulo de encriptación"
msgstr "Fehler im Verschlüsselungsmodul"
-#: ../../../../inc/Account.class.php:526
-#: ../../../../inc/AccountHistory.class.php:143
+#: ../../../../inc/SP/Account/Account.class.php:417
+#: ../../../../inc/SP/Account/AccountHistory.class.php:277
msgid "Error al obtener las claves de las cuentas"
msgstr "Fehler beim Laden der Konto-Passwörter"
-#: ../../../../inc/Account.class.php:542
-#: ../../../../inc/AccountHistory.class.php:165
+#: ../../../../inc/SP/Account/Account.class.php:434
+#: ../../../../inc/SP/Account/AccountHistory.class.php:305
msgid "Clave de cuenta vacía"
msgstr "Account Passwort leer"
-#: ../../../../inc/Account.class.php:547
-#: ../../../../inc/AccountHistory.class.php:170
+#: ../../../../inc/SP/Account/Account.class.php:439
+#: ../../../../inc/SP/Account/AccountHistory.class.php:310
msgid "IV de encriptación incorrecto"
msgstr "Falsche Verschlüsselung IV"
-#: ../../../../inc/Account.class.php:556
-#: ../../../../inc/AccountHistory.class.php:179
+#: ../../../../inc/SP/Account/Account.class.php:448
+#: ../../../../inc/SP/Account/AccountHistory.class.php:319
msgid "No es posible desencriptar la clave de la cuenta"
msgstr "Kontopasswort kann nicht entschlüsselt werden"
-#: ../../../../inc/Account.class.php:562
+#: ../../../../inc/SP/Account/Account.class.php:457
msgid "Fallo al actualizar la clave de la cuenta"
msgstr "Fehler beim Ändern des Passworts eines Kontos "
-#: ../../../../inc/Account.class.php:576
+#: ../../../../inc/SP/Account/Account.class.php:462
+#: ../../../../inc/SP/Account/AccountHistory.class.php:332
msgid "Cuentas actualizadas"
msgstr "Accounts aktualisiert"
-#: ../../../../inc/Account.class.php:581
-#: ../../../../inc/AccountHistory.class.php:204
-#: ../../../../inc/CustomFields.class.php:285
-#: ../../../../inc/CustomFields.class.php:327
-msgid "Fin"
-msgstr "Ende"
+#: ../../../../inc/SP/Account/Account.class.php:463
+#: ../../../../inc/SP/Account/AccountHistory.class.php:333
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1019
+msgid "Errores"
+msgstr "Fehler"
-#: ../../../../inc/Account.class.php:682
-msgid "Modificar Clave"
-msgstr "Password erneuern"
+#: ../../../../inc/SP/Account/Account.class.php:520
+msgid "Error al actualizar la clave"
+msgstr "Fehler beim Ändern des Passworts"
-#: ../../../../inc/Account.class.php:717
-msgid "No se pudieron obtener los datos de las cuentas"
-msgstr "Es war nicht möglich die Konten zu laden"
+#: ../../../../inc/SP/Account/AccountFavorites.class.php:80
+msgid "Error al añadir favorito"
+msgstr "Fehler beim Hinzufügen des Favoriten"
-#: ../../../../inc/AccountHistory.class.php:128
+#: ../../../../inc/SP/Account/AccountFavorites.class.php:102
+msgid "Error al eliminar favorito"
+msgstr "Fehler beim Löschen des Favoriten"
+
+#: ../../../../inc/SP/Account/AccountHistory.class.php:192
+msgid "Error al actualizar el historial"
+msgstr "Fehler beim Ändern der Historie"
+
+#: ../../../../inc/SP/Account/AccountHistory.class.php:262
msgid "Actualizar Clave Maestra (H)"
msgstr "Master-Passwort (H) ändern"
-#: ../../../../inc/AccountHistory.class.php:160
+#: ../../../../inc/SP/Account/AccountHistory.class.php:300
msgid "La clave maestra del registro no coincide"
msgstr "Master-Passwort stimmt nicht"
-#: ../../../../inc/AccountHistory.class.php:185
+#: ../../../../inc/SP/Account/AccountHistory.class.php:328
msgid "Fallo al actualizar la clave del histórico"
msgstr "Fehler beim Ändern des Master-Passworts"
-#: ../../../../inc/AccountHistory.class.php:199
-#: ../../../../inc/CustomFields.class.php:323
-msgid "Registros actualizados"
-msgstr "Datensätze aktualisiert"
+#: ../../../../inc/SP/Account/AccountTags.class.php:90
+msgid "Error al añadir las etiquetas de la cuenta"
+msgstr "Fehler beim Hinzufügen von Konto-Tags"
-#: ../../../../inc/Acl.class.php:112
-msgid "Denegado acceso a"
-msgstr "Zugriff verweigert auf"
+#: ../../../../inc/SP/Account/AccountTags.class.php:129
+msgid "Error al eliminar las etiquetas de la cuenta"
+msgstr "Fehler beim Entfernen von Tags des Kontos"
-#: ../../../../inc/Acl.class.php:126
-msgid "Buscar Cuentas"
-msgstr "Benutzer suchen"
+#: ../../../../inc/SP/Account/AccountUtil.class.php:132
+msgid "No se pudieron obtener los datos de las cuentas"
+msgstr "Es war nicht möglich die Konten zu laden"
-#: ../../../../inc/Acl.class.php:127
-msgid "Ver Cuenta"
-msgstr "Benutzer ansehen"
+#: ../../../../inc/SP/Account/UserAccounts.class.php:89
+msgid "Error al eliminar usuarios asociados a la cuenta"
+msgstr "Fehler beim Löschen der Benutzer eines Kontos"
-#: ../../../../inc/Acl.class.php:128 ../../../../web/AccountC.class.php:265
-#: ../../../../inc/themes/classic/search.inc:161
-#: ../../../../inc/themes/material-blue/search.inc:172
-msgid "Copiar Cuenta"
-msgstr "Konto kopieren"
+#: ../../../../inc/SP/Account/UserAccounts.class.php:130
+msgid "Error al actualizar los usuarios de la cuenta"
+msgstr "Fehler beim Ändern der Benutzer eines Kontos"
-#: ../../../../inc/Acl.class.php:130 ../../../../web/AccountC.class.php:329
-msgid "Editar Cuenta"
-msgstr "Konto ändern"
-
-#: ../../../../inc/Acl.class.php:131
-msgid "Editar Clave de Cuenta"
-msgstr "Benutzerpasswort ändern"
-
-#: ../../../../inc/Acl.class.php:132
-#: ../../../../inc/themes/classic/profiles.inc:28
-#: ../../../../inc/themes/material-blue/profiles.inc:40
-msgid "Ver Historial"
-msgstr "Verlauf anzeigen"
-
-#: ../../../../inc/Acl.class.php:135
-#: ../../../../inc/themes/classic/account.inc:191
-#: ../../../../inc/themes/classic/profiles.inc:50
-#: ../../../../inc/themes/material-blue/account.inc:234
-#: ../../../../inc/themes/material-blue/config.inc:280
-#: ../../../../inc/themes/material-blue/profiles.inc:60
-msgid "Archivos"
-msgstr "Dateien"
-
-#: ../../../../inc/Acl.class.php:136
-msgid "Peticiones"
-msgstr "Anfragen"
-
-#: ../../../../inc/Acl.class.php:137
-msgid "Gestión Aplicación"
-msgstr "Anwendungsverwaltung"
-
-#: ../../../../inc/Acl.class.php:138
-msgid "Gestión Categorías"
-msgstr "Kategorienverwaltung"
-
-#: ../../../../inc/Acl.class.php:139
-msgid "Gestión Clientes"
-msgstr "Kundenverwaltung"
-
-#: ../../../../inc/Acl.class.php:140
-msgid "Gestión Campos Personalizados"
-msgstr "Verwaltung benutzerdefinierter Felder"
-
-#: ../../../../inc/Acl.class.php:141
-msgid "Gestión Autorizaciones API"
-msgstr "Verwaltung der API Authorisation"
-
-#: ../../../../inc/Acl.class.php:142 ../../../../inc/Acl.class.php:143
-msgid "Gestión Usuarios"
-msgstr "Benutzerverwaltung"
-
-#: ../../../../inc/Acl.class.php:144
-msgid "Gestión Grupos"
-msgstr "Gruppenverwaltung"
-
-#: ../../../../inc/Acl.class.php:145
-msgid "Gestión Perfiles"
-msgstr "Profil Verwaltung"
-
-#: ../../../../inc/Acl.class.php:146 ../../../../inc/ConfigDB.class.php:91
-#: ../../../../inc/ConfigDB.class.php:119 ../../../../web/MainC.class.php:201
-#: ../../../../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 "Allgemeine Einstellungen"
-
-#: ../../../../inc/Acl.class.php:148 ../../../../web/ConfigC.class.php:132
-#: ../../../../inc/themes/classic/profiles.inc:65
-#: ../../../../inc/themes/material-blue/profiles.inc:77
-msgid "Encriptación"
-msgstr "Verschlüsselung"
-
-#: ../../../../inc/Acl.class.php:149 ../../../../web/ConfigC.class.php:177
-#: ../../../../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 "Exportieren"
-
-#: ../../../../inc/Acl.class.php:151
-#: ../../../../inc/themes/classic/profiles.inc:74
-#: ../../../../inc/themes/material-blue/profiles.inc:87
-msgid "Importar"
-msgstr "Importieren"
-
-#: ../../../../inc/Api.class.php:65 ../../../../inc/Api.class.php:88
-#: ../../../../inc/Api.class.php:126
+#: ../../../../inc/SP/Api/ApiBase.class.php:95
+#: ../../../../inc/SP/Api/ApiBase.class.php:187
+#: ../../../../inc/SP/Api/ApiBase.class.php:199
+#: ../../../../inc/SP/Api/ApiBase.class.php:212
+#: ../../../../inc/SP/Api/ApiBase.class.php:244
+#: ../../../../inc/SP/Api/SyspassApi.class.php:74
+#: ../../../../inc/SP/Api/SyspassApi.class.php:143
msgid "Acceso no permitido"
msgstr "Unerlaubter Zugriff"
-#: ../../../../inc/Api.class.php:166
-msgid "Error de codificación"
-msgstr "Verschlüsselungsfehler"
+#: ../../../../inc/SP/Api/ApiRequest.class.php:145
+#: ../../../../inc/SP/Import/XmlImportTrait.class.php:75
+msgid "Método inválido"
+msgstr "Ungültige Methode"
-#: ../../../../inc/ApiRequest.class.php:102
-msgid "Token de autorización"
-msgstr "Autorisierungstoken"
+#: ../../../../inc/SP/Api/ApiRequest.class.php:162
+msgid "Datos inválidos"
+msgstr "Ungültige Daten"
-#: ../../../../inc/ApiRequest.class.php:103
-msgid "Acción a realizar"
-msgstr "Aktion"
+#: ../../../../inc/SP/Api/ApiRequest.class.php:164
+msgid "Formato incorrecto"
+msgstr "Falsches Format"
-#: ../../../../inc/ApiRequest.class.php:104
-msgid "Clave de usuario (opcional)"
-msgstr "Benutzerpasswort (optional)"
+#: ../../../../inc/SP/Api/ApiTokens.class.php:97
+#: ../../../../inc/SP/Api/ApiTokens.class.php:125
+#: ../../../../inc/SP/Api/ApiTokens.class.php:150
+#: ../../../../inc/SP/Api/ApiTokens.class.php:183
+#: ../../../../inc/SP/Api/ApiTokens.class.php:224
+#: ../../../../inc/SP/Api/ApiTokens.class.php:242
+#: ../../../../inc/SP/Api/ApiTokens.class.php:262
+#: ../../../../inc/SP/Api/ApiTokensUtil.class.php:168
+#: ../../../../inc/SP/Controller/LoginController.class.php:182
+#: ../../../../inc/SP/Controller/LoginController.class.php:257
+#: ../../../../inc/SP/Controller/LoginController.class.php:360
+#: ../../../../inc/SP/Controller/LoginController.class.php:384
+#: ../../../../inc/SP/Core/Crypt.class.php:212
+#: ../../../../inc/SP/Core/Crypt.class.php:223
+#: ../../../../inc/SP/Import/XmlFileImport.class.php:106
+#: ../../../../inc/SP/Mgmt/Users/UserPassRecover.class.php:134
+msgid "Error interno"
+msgstr "Interner Fehler"
-#: ../../../../inc/ApiRequest.class.php:105
-msgid "Cadena a buscar"
-msgstr "Text nach dem gesucht wird"
-
-#: ../../../../inc/ApiRequest.class.php:106
-msgid "Numero de cuentas a mostar en la búsqueda"
-msgstr "Anzahl von Suchtreffern pro Seite"
-
-#: ../../../../inc/ApiRequest.class.php:107
-msgid "Item a devolver"
-msgstr "zurück gegebener Artikel"
-
-#: ../../../../inc/ApiTokens.class.php:221
+#: ../../../../inc/SP/Api/ApiTokens.class.php:129
msgid "La autorización ya existe"
msgstr "Die Autorisierung existiert bereits"
-#: ../../../../inc/ApiTokens.class.php:307
-msgid "Actualizar Autorización"
-msgstr "Autorisierung aktualisieren"
+#: ../../../../inc/SP/Api/SyspassApi.class.php:81
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:222
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:223
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:517
+#: ../../../../inc/SP/Core/Acl.class.php:191
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:48
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:71
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:54
+msgid "Ver Clave"
+msgstr "Passwort anzeigen"
-#: ../../../../inc/ApiTokens.class.php:331
-#: ../../../../web/UsersMgmtC.class.php:422
-msgid "Eliminar Autorización"
-msgstr "Autorisierung löschen"
+#: ../../../../inc/SP/Api/SyspassApi.class.php:84
+#: ../../../../inc/SP/Api/SyspassApi.class.php:181
+#: ../../../../inc/SP/Api/SyspassApi.class.php:219
+#: ../../../../inc/SP/Api/SyspassApi.class.php:272
+#: ../../../../inc/SP/Api/SyspassApi.class.php:308
+#: ../../../../inc/SP/Api/SyspassApi.class.php:361
+#: ../../../../inc/SP/Api/SyspassApi.class.php:397
+#: ../../../../inc/SP/Controller/MainController.class.php:574
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApiBase.class.php:197
+msgid "Origen"
+msgstr "Quelle"
-#: ../../../../inc/Auth.class.php:107
-msgid "Usuario no pertenece al grupo"
-msgstr "Der Nutzer gehört nicht zur Gruppe"
+#: ../../../../inc/SP/Api/SyspassApi.class.php:178
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:914
+msgid "Crear Cuenta"
+msgstr "Konto hinzufügen"
-#: ../../../../inc/Auth.class.php:186
-#: ../../../../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
+#: ../../../../inc/SP/Api/SyspassApi.class.php:179
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:915
+#: ../../../../inc/SP/Import/ImportBase.class.php:140
+msgid "Cuenta creada"
+msgstr "Konto hinzugefügt"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:180
+#: ../../../../inc/SP/Api/SyspassApi.class.php:218
+#: ../../../../inc/SP/Api/SyspassApi.class.php:271
+#: ../../../../inc/SP/Api/SyspassApi.class.php:307
+#: ../../../../inc/SP/Api/SyspassApi.class.php:360
+#: ../../../../inc/SP/Api/SyspassApi.class.php:396
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:354
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:56
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:130
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:205
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:282
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:349
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:402
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:473
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:592
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:666
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:912
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:230
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:245
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:272
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:283
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:374
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:382
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:402
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:434
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:442
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:462
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:496
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:504
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:524
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:558
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:566
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:587
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:667
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:674
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:775
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:782
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:800
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:862
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:870
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:877
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:916
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:926
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:935
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:944
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:967
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:971
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1156
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1177
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1181
+#: ../../../../inc/SP/Core/Plugin/PluginDataStore.class.php:77
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:12
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:9
+#: ../../../../inc/themes/material-blue/views/account/account.inc:41
+#: ../../../../inc/themes/material-blue/views/account/request.inc:12
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:43
+#: ../../../../inc/themes/material-blue/views/config/info.inc:30
+#: ../../../../inc/themes/material-blue/views/itemshow/categories.inc:16
+#: ../../../../inc/themes/material-blue/views/itemshow/customers.inc:19
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:19
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:18
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:13
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:17
+#: ../../../../inc/themes/material-blue/views/itemshow/tags.inc:16
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:22
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:12
+msgid "Nombre"
+msgstr "Name"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:209
+msgid "Cuenta no encontrada"
+msgstr "Konto nicht gefunden"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:216
+#: ../../../../inc/SP/Controller/AccountController.class.php:551
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:277
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:278
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:383
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:384
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:454
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:455
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:961
+#: ../../../../inc/SP/Core/Acl.class.php:192
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:39
+msgid "Eliminar Cuenta"
+msgstr "Konto löschen"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:217
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:970
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1180
+msgid "Cuenta eliminada"
+msgstr "Konto gelöscht"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:269
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:556
+msgid "Crear Categoría"
+msgstr "Kategorie hinzufügen"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:270
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:557
+#: ../../../../inc/SP/Import/ImportBase.class.php:161
+msgid "Categoría creada"
+msgstr "Kategorie hinzugefügt"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:299
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:127
+msgid "Categoría no encontrada"
+msgstr "Kategorie nicht gefunden"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:305
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:111
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:112
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:584
+#: ../../../../inc/SP/Core/Acl.class.php:200
+msgid "Eliminar Categoría"
+msgstr "Kategorie löschen"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:306
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:579
+msgid "Categoría eliminada"
+msgstr "Kategorie gelöscht"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:358
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:494
+msgid "Crear Cliente"
+msgstr "Kunden hinzufügen"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:359
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:495
+#: ../../../../inc/SP/Import/ImportBase.class.php:183
+msgid "Cliente creado"
+msgstr "Kunde hinzugefügt"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:388
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:132
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:203
+msgid "Cliente no encontrado"
+msgstr "Kunde nicht gefunden"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:394
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:185
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:186
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:521
+#: ../../../../inc/SP/Core/Acl.class.php:205
+msgid "Eliminar Cliente"
+msgstr "Kunde löschen"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:395
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:516
+msgid "Cliente eliminado"
+msgstr "Kunde gelöscht"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:418
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:709
+msgid "Proceso de backup finalizado"
+msgstr "Sicherung fertig gestellt"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:424
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:704
+#: ../../../../inc/SP/Core/Backup.class.php:75
+msgid "Error al realizar el backup"
+msgstr "Fehler beim Ausführen des Backups"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:425
+#: ../../../../inc/SP/Controller/ChecksController.class.php:113
+#: ../../../../inc/SP/Controller/ChecksController.class.php:142
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:682
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:705
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1026
+#: ../../../../inc/SP/Import/Import.class.php:115
+msgid "Revise el registro de eventos para más detalles"
+msgstr "Mehr Details in den Log Dateien"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:455
+#: ../../../../inc/SP/Api/SyspassApi.class.php:472
+#: ../../../../inc/SP/Api/SyspassApi.class.php:479
+msgid "Id de la cuenta"
+msgstr "Konto ID"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:456
+#: ../../../../inc/SP/Api/SyspassApi.class.php:473
+#: ../../../../inc/SP/Api/SyspassApi.class.php:485
+msgid "Clave del usuario asociado al token"
+msgstr "Token Benutzer Kennwort"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:457
+msgid "Devolver detalles en la respuesta"
+msgstr "Senden Sie Details über die Antwort"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:463
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:15
+msgid "Texto a buscar"
+msgstr "Suchbegriff"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:464
+#: ../../../../inc/SP/Api/SyspassApi.class.php:503
+#: ../../../../inc/SP/Api/SyspassApi.class.php:523
+msgid "Número de resultados a mostrar"
+msgstr "Anzuzeigende Anzahl an Ergebnissen"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:465
+msgid "Id de categoría a filtrar"
+msgstr "Kategorie-ID zum Filtern"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:466
+msgid "Id de cliente a filtrar"
+msgstr "Kunden-ID zum Filtern"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:486
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:18
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:16
+#: ../../../../inc/themes/material-blue/views/account/account.inc:48
+#: ../../../../inc/themes/material-blue/views/account/request.inc:19
+msgid "Nombre de cuenta"
+msgstr "Kontoname"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:487
+#: ../../../../inc/SP/Api/SyspassApi.class.php:516
+msgid "Id de categoría"
+msgstr "Kategorie Id"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:488
+#: ../../../../inc/SP/Api/SyspassApi.class.php:536
+msgid "Id de cliente"
+msgstr "Kunden Id"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:489
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:615
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:64
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:56
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:62
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:73
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:76
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:79
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:87
+#: ../../../../inc/themes/material-blue/views/account/account.inc:123
+#: ../../../../inc/themes/material-blue/views/account/account.inc:130
+#: ../../../../inc/themes/material-blue/views/account/viewpass.inc:31
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:254
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:257
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:61
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:138
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:77
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:84
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:229
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:236
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:102
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:109
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:35
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:41
+#: ../../../../inc/themes/material-blue/views/main/install.inc:43
+#: ../../../../inc/themes/material-blue/views/main/login.inc:27
+#: ../../../../inc/themes/material-blue/views/main/login.inc:88
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:34
+msgid "Clave"
+msgstr "Passwort"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:490
+#: ../../../../inc/themes/material-blue/views/account/account.inc:117
+msgid "Usuario de acceso"
+msgstr "Benutzer für Zugriff"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:491
+#: ../../../../inc/themes/material-blue/views/account/account.inc:105
+msgid "URL o IP de acceso"
+msgstr "Auf URL/IP zugreifen"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:492
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:72
+#: ../../../../inc/themes/material-blue/views/account/account.inc:172
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:135
+msgid "Notas sobre la cuenta"
+msgstr "Bemerkungen zum Konto"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:502
+msgid "Nombre de categoría a buscar"
+msgstr "Zu suchender Kategoriename"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:509
+#: ../../../../inc/themes/material-blue/views/itemshow/categories.inc:23
+msgid "Nombre de la categoría"
+msgstr "Kategoriename"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:510
+#: ../../../../inc/themes/material-blue/views/itemshow/categories.inc:35
+msgid "Descripción de la categoría"
+msgstr "Beschreibung der Kategorie"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:522
+msgid "Nombre de cliente a buscar"
+msgstr "Zu suchender Kundenname"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:529
+#: ../../../../inc/themes/material-blue/views/itemshow/customers.inc:26
+msgid "Nombre del cliente"
+msgstr "Kundenname"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:530
+#: ../../../../inc/themes/material-blue/views/itemshow/customers.inc:39
+msgid "Descripción del cliente"
+msgstr "Beschreibung des Kunden"
+
+#: ../../../../inc/SP/Auth/Auth.class.php:87
+msgid "Método ya inicializado"
+msgstr "Funktion bereits initialisiert"
+
+#: ../../../../inc/SP/Auth/Auth.class.php:89
+msgid "Método no disponible"
+msgstr "Funktion nicht verfügbar"
+
+#: ../../../../inc/SP/Auth/AuthUtil.class.php:63
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:132
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:170
msgid "Cambio de Clave"
msgstr "Passwortänderung"
-#: ../../../../inc/Auth.class.php:188
+#: ../../../../inc/SP/Auth/AuthUtil.class.php:64
msgid "Se ha solicitado el cambio de su clave de usuario."
msgstr "Ein Anfrage zum Ändern ihres Benutzerpassworts wurde begonnen."
-#: ../../../../inc/Auth.class.php:190
+#: ../../../../inc/SP/Auth/AuthUtil.class.php:66
msgid "Para completar el proceso es necesario que acceda a la siguiente URL:"
msgstr "Zum Abschluss dieses Vorgangs, gehen Sie bitte zu der URL: "
-#: ../../../../inc/Auth.class.php:194
+#: ../../../../inc/SP/Auth/AuthUtil.class.php:70
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"
-#: ../../../../inc/Backup.class.php:167
-msgid "Esta operación sólo es posible en entornos Linux"
-msgstr "Diese Funktion is nur in einer Linux-Umgebung verfügbar"
-
-#: ../../../../inc/Backup.class.php:169
-msgid "Error al realizar backup en modo compatibilidad"
-msgstr "Fehler während der Durchführung der Sicherung im Kompatibilitätsmodus"
-
-#: ../../../../inc/Backup.class.php:223
-#: ../../../../inc/XmlExport.class.php:467
-msgid "No es posible crear el directorio de backups"
-msgstr "Verzeichnis für Backups kann nicht angelegt werden"
-
-#: ../../../../inc/Backup.class.php:228
-#: ../../../../inc/XmlExport.class.php:472
-msgid "Compruebe los permisos del directorio de backups"
-msgstr "Bitte überprüfen Sie die Zugriffsrechte des Backup₋Verzeichnisses"
-
-#: ../../../../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:299
-#: ../../../../inc/themes/classic/account.inc:42
-#: ../../../../inc/themes/classic/search.inc:83
-#: ../../../../inc/themes/material-blue/account.inc:51
-#: ../../../../inc/themes/material-blue/search.inc:85
-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:102
-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"
-
-#: ../../../../inc/Config.class.php:148
-msgid "No es posible escribir el archivo de configuración"
-msgstr "Konfigurationsdatei kann nicht geschrieben werden"
-
-#: ../../../../inc/Config.class.php:148
-msgid "Compruebe los permisos del directorio \"config\""
-msgstr "Bitte überprüfen Sie Zugriffsrechte auf das Verzeichnis \"config\""
-
-#: ../../../../inc/ConfigDB.class.php:91
-#: ../../../../inc/ConfigDB.class.php:120
-msgid "Modificar configuración"
-msgstr "Konfiguration ändern"
-
-#: ../../../../inc/ConfigDB.class.php:121
-msgid "Parámetro"
-msgstr "Parameter"
-
-#: ../../../../inc/ConfigDB.class.php:122
-msgid "Valor"
-msgstr "Wert"
-
-#: ../../../../inc/Controller.class.php:165
-msgid "Opción no disponible"
-msgstr "Option nicht verfügbar"
-
-#: ../../../../inc/Controller.class.php:165
-#: ../../../../inc/Controller.class.php:166
-#: ../../../../inc/Controller.class.php:167
-#: ../../../../inc/Controller.class.php:168 ../../../../inc/Init.class.php:282
-msgid "Consulte con el administrador"
-msgstr "Bitte kontaktieren Sie den Administrator"
-
-#: ../../../../inc/Controller.class.php:167
-msgid "No tiene permisos para acceder a esta página"
-msgstr "Sie haben keine Erlaubnis auf diese Seite zuzugreifen"
-
-#: ../../../../inc/Controller.class.php:168
-msgid "No tiene permisos para realizar esta operación"
-msgstr "Sie haben keine Erlaubnis für diese Aktion"
-
-#: ../../../../inc/Crypt.class.php:125 ../../../../inc/Email.class.php:148
-msgid "Aviso"
-msgstr "Warnung"
-
-#: ../../../../inc/Crypt.class.php:125
-msgid ""
-"Se ha regenerado el HASH de clave maestra. No es necesaria ninguna acción."
-msgstr ""
-"Das Master-Password HASH wurde generiert. Es sind keine weiteren Aktionen "
-"nötig. "
-
-#: ../../../../inc/Crypt.class.php:189
-msgid "No se puede usar el módulo de encriptación"
-msgstr "Kryptographie-Modul konnte nicht geladen werden"
-
-#: ../../../../inc/Crypt.class.php:200
-msgid "Error al generar datos cifrados"
-msgstr "Fehler beim Erzeugen der verschlüsselten Daten"
-
-#: ../../../../inc/CryptPKI.class.php:46
-msgid "No es posible generar las claves RSA"
-msgstr "Konnte den RSA-Schlüssel nicht c-generieren."
-
-#: ../../../../inc/CryptPKI.class.php:112
-#: ../../../../inc/CryptPKI.class.php:143
-msgid "El archivo de clave no existe"
-msgstr "Die Schlüsseldatei existiert nicht"
-
-#: ../../../../inc/CsvImportBase.class.php:109
-#, php-format
-msgid "El número de campos es incorrecto (%d)"
-msgstr "Falsche Anzahl an Feldern (%d)"
-
-#: ../../../../inc/CsvImportBase.class.php:110
-#, php-format
-msgid "Compruebe el formato del archivo CSV en línea %s"
-msgstr "Bitte das CSV-Format in Zeile %s überprüfen"
-
-#: ../../../../inc/CsvImportBase.class.php:140
-#: ../../../../inc/CsvImportBase.class.php:145
-#: ../../../../inc/Import.class.php:118 ../../../../inc/Import.class.php:124
-#: ../../../../inc/Migrate.class.php:348
-#: ../../../../inc/XmlImport.class.php:62
-#: ../../../../inc/XmlImport.class.php:63
-#: ../../../../web/ConfigC.class.php:199
-msgid "Importar Cuentas"
-msgstr "Importiere Konten"
-
-#: ../../../../inc/CsvImportBase.class.php:141
-msgid "Error importando cuenta"
-msgstr "Fehler beim Importieren des Kontos"
-
-#: ../../../../inc/CsvImportBase.class.php:142
-#, php-format
-msgid "Error procesando línea %s"
-msgstr "Fehler beim verarbeiten von Zeile %s"
-
-#: ../../../../inc/CsvImportBase.class.php:145
-#, php-format
-msgid "Cuenta importada: %s"
-msgstr "Accout %s importiert"
-
-#: ../../../../inc/CustomFields.class.php:276
-#: ../../../../web/AccountsMgmtC.class.php:301
-#: ../../../../inc/themes/classic/profiles.inc:107
-#: ../../../../inc/themes/material-blue/profiles.inc:124
-msgid "Campos Personalizados"
-msgstr "Nutzerfelder"
-
-#: ../../../../inc/CustomFields.class.php:291
-msgid "Actualizando datos encriptados"
-msgstr "Aktualisiere verschlüsselte Daten"
-
-#: ../../../../inc/CustomFields.class.php:318
-msgid "Registros no actualizados"
-msgstr "Nicht aktualisierte Einträge"
-
-#: ../../../../inc/CustomFieldsBase.class.php:86
-msgid "Texto"
-msgstr "Text"
-
-#: ../../../../inc/CustomFieldsBase.class.php:88
-msgid "Fecha"
-msgstr "Datum"
-
-#: ../../../../inc/CustomFieldsBase.class.php:89
-msgid "Número"
-msgstr "Nummer"
-
-#: ../../../../inc/CustomFieldsBase.class.php:90
-#: ../../../../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/CustomFieldsBase.class.php:91
-msgid "Teléfono"
-msgstr "Telefon"
-
-#: ../../../../inc/CustomFieldsBase.class.php:92
-msgid "Link"
-msgstr "Link"
-
-#: ../../../../inc/CustomFieldsBase.class.php:93
-msgid "Color"
-msgstr "Farbe"
-
-#: ../../../../inc/CustomFieldsBase.class.php:107
-#: ../../../../inc/themes/classic/profiles.inc:98
-#: ../../../../inc/themes/material-blue/profiles.inc:114
-msgid "Categorías"
-msgstr "Kategorien"
-
-#: ../../../../inc/CustomFieldsBase.class.php:108
-#: ../../../../inc/themes/classic/profiles.inc:103
-#: ../../../../inc/themes/material-blue/profiles.inc:119
-msgid "Clientes"
-msgstr "Kunden"
-
-#: ../../../../inc/CustomFieldsBase.class.php:110
-#: ../../../../inc/themes/classic/account.inc:143
-#: ../../../../inc/themes/classic/profiles.inc:89
-#: ../../../../inc/themes/material-blue/account.inc:170
-#: ../../../../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:160
-msgid "Eliminar Cliente"
-msgstr "Kunde löschen"
-
-#: ../../../../inc/DBConnectionFactory.class.php:83
-#: ../../../../inc/DBConnectionFactory.class.php:85
-#: ../../../../inc/DBConnectionFactory.class.php:99
-#: ../../../../inc/Installer.class.php:235
-#: ../../../../inc/Migrate.class.php:114
-msgid "No es posible conectar con la BD"
-msgstr "Verbindung zum Datenbank-Server kann nicht hergestellt werden"
-
-#: ../../../../inc/DBConnectionFactory.class.php:83
-#: ../../../../inc/DBConnectionFactory.class.php:85
-#: ../../../../inc/Installer.class.php:236
-#: ../../../../inc/Migrate.class.php:115
-msgid "Compruebe los datos de conexión"
-msgstr "Bitte überprüfen Sie Ihre Verbindungseinstellungen"
-
-#: ../../../../inc/Email.class.php:59 ../../../../inc/UserUtil.class.php:182
-msgid "N/D"
-msgstr "N/A"
-
-#: ../../../../inc/Email.class.php:60 ../../../../web/UsersMgmtC.class.php:393
-#: ../../../../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/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 "Fehler beim hinzufügen von Nutzern zur Gruppe"
-
-#: ../../../../inc/Groups.class.php:256
-msgid "Error al actualizar los usuarios del grupo"
-msgstr "Fehler beim aktualisieren von Gruppennutzern"
-
-#: ../../../../inc/Groups.class.php:369
-#: ../../../../web/UsersMgmtC.class.php:210
-msgid "Eliminar Grupo"
-msgstr "Gruppe löschen"
-
-#: ../../../../inc/Groups.class.php:372
-msgid "Error al eliminar los usuarios del grupo"
-msgstr "Fehler beim löschen von Gruppennutzern"
-
-#: ../../../../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:91
-msgid "Importación finalizada"
-msgstr "Import beendet"
-
-#: ../../../../inc/Init.class.php:182
-msgid "Error en la verificación de la base de datos"
-msgstr "Fehler beim der Datenbanküberprüfung"
-
-#: ../../../../inc/Init.class.php:278
-msgid "Sesion"
-msgstr "Sitzung"
-
-#: ../../../../inc/Init.class.php:278 ../../../../inc/Init.class.php:282
-msgid "La sesión no puede ser inicializada"
-msgstr "Sitzung konnte nicht initialisiert werden"
-
-#: ../../../../inc/Init.class.php:366
-msgid "El directorio \"/config\" no existe"
-msgstr "\"/config\" Verzeichnis existiert nicht."
-
-#: ../../../../inc/Init.class.php:371
-msgid "No es posible escribir en el directorio \"config\""
-msgstr "In das Verzeichnis \"/config\" kann nicht geschrieben werden"
-
-#: ../../../../inc/Init.class.php:379
-msgid "Los permisos del directorio \"/config\" son incorrectos"
-msgstr "\"/config\"-Verzeichnis hat falsche Zugriffsrechte"
-
-#: ../../../../inc/Init.class.php:379
-msgid "Actual:"
-msgstr "Aktuell:"
-
-#: ../../../../inc/Init.class.php:379
-msgid "Necesario: 750"
-msgstr "Erforderlich: 750"
-
-#: ../../../../inc/Init.class.php:428
-msgid "Aplicación en mantenimiento"
-msgstr "Anwendung im Wartungsmodus"
-
-#: ../../../../inc/Init.class.php:428
-msgid "En breve estará operativa"
-msgstr "Es wird in Kürze gestartet"
-
-#: ../../../../inc/Init.class.php:465
-msgid "Finalizar sesión"
-msgstr "Aus Sitzung ausloggen"
-
-#: ../../../../inc/Init.class.php:467
-msgid "Tiempo inactivo"
-msgstr "Zeit ohne Aktivität"
-
-#: ../../../../inc/Init.class.php:468
-msgid "Tiempo total"
-msgstr "Gesamtzeit"
-
-#: ../../../../inc/Init.class.php:507
-msgid "La aplicación necesita actualizarse"
-msgstr "Die Anwendung muss aktualisiert werden"
-
-#: ../../../../inc/Init.class.php:507
-#, php-format
-msgid "Si es un administrador pulse en el enlace: %s"
-msgstr "Wenn SIe ein Administrator sind, klicken sie auf den Link: %s"
-
-#: ../../../../inc/Init.class.php:507
-#: ../../../../inc/themes/classic/upgrade.inc:20
-#: ../../../../inc/themes/material-blue/upgrade.inc:22
-msgid "Actualizar"
-msgstr "Aktualisierung"
-
-#: ../../../../inc/Init.class.php:538
-msgid "Actualización"
-msgstr "Aktualisierung"
-
-#: ../../../../inc/Init.class.php:539
-msgid "Actualización de versión realizada."
-msgstr "Version aktualisiert"
-
-#: ../../../../inc/Init.class.php:540
-#: ../../../../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"
-
-#: ../../../../inc/Installer.class.php:128
-msgid "Usuario admin para acceso a la aplicación"
-msgstr "Administrator der Anwendung"
-
-#: ../../../../inc/Installer.class.php:132
-msgid "Indicar la clave de admin"
-msgstr "Administrator-Passwort eingeben"
-
-#: ../../../../inc/Installer.class.php:133
-msgid "Clave del usuario admin de la aplicación"
-msgstr "Administrationspasswort der Anwendung"
-
-#: ../../../../inc/Installer.class.php:137
-msgid "Indicar la clave maestra"
-msgstr "Master-Passwort eingeben"
-
-#: ../../../../inc/Installer.class.php:138
-msgid "Clave maestra para encriptar las claves"
-msgstr "Master-Passwords zum Verschlüsseln der Passwörter"
-
-#: ../../../../inc/Installer.class.php:142
-msgid "Clave maestra muy corta"
-msgstr "Master-Passwort zu kurz"
-
-#: ../../../../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"
-
-#: ../../../../inc/Installer.class.php:147
-msgid "Indicar el usuario de la BBDD"
-msgstr "Datenbankbenutzer eingeben"
-
-#: ../../../../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"
-
-#: ../../../../inc/Installer.class.php:152
-msgid "Indicar la clave de la BBDD"
-msgstr "Datenbankpasswort eingeben"
-
-#: ../../../../inc/Installer.class.php:153
-msgid "Clave del usuario administrador de la Base de Datos"
-msgstr "Administrationspasswort der Datenbank"
-
-#: ../../../../inc/Installer.class.php:157
-msgid "Indicar el nombre de la BBDD"
-msgstr "Datenbankname eingeben"
-
-#: ../../../../inc/Installer.class.php:158
-msgid "Nombre para la BBDD de la aplicación pej. syspass"
-msgstr "Datenbankname der Anwendung, z.B. syspass"
-
-#: ../../../../inc/Installer.class.php:162
-msgid "El nombre de la BBDD no puede contener \".\""
-msgstr "Name der Datenbank darf keine \".\" enthalten"
-
-#: ../../../../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"
-
-#: ../../../../inc/Installer.class.php:167
-msgid "Indicar el servidor de la BBDD"
-msgstr "Datenbank-Server eingeben"
-
-#: ../../../../inc/Installer.class.php:168
-msgid "Servidor donde se instalará la Base de Datos"
-msgstr "Server auf dem die Datenbank installiert wird"
-
-#: ../../../../inc/Installer.class.php:267
-msgid "No es posible comprobar el usuario de sysPass"
-msgstr "Überprüfung des sysPass Nutzers nicht möglich"
-
-#: ../../../../inc/Installer.class.php:268
-msgid "Compruebe los permisos del usuario de conexión a la BD"
-msgstr "Bitte Datenbankverbindung überprüfen"
-
-#: ../../../../inc/Installer.class.php:319
-msgid "El usuario de MySQL ya existe"
-msgstr "MySQL Benutzer wird schon benutzt"
-
-#: ../../../../inc/Installer.class.php:320
-msgid "Indique un nuevo usuario o elimine el existente"
-msgstr "Neuen Benutzernamen eingeben oder bestehenden Benutzer löschen"
-
-#: ../../../../inc/Installer.class.php:333
-msgid "La BBDD ya existe"
-msgstr "Datenbank existiert bereits"
-
-#: ../../../../inc/Installer.class.php:334
-msgid "Indique una nueva Base de Datos o elimine la existente"
-msgstr "Neuen Datenbanknamen eingeben oder bestehende Datenbank löschen"
-
-#: ../../../../inc/Installer.class.php:343
-#: ../../../../inc/Installer.class.php:414
-msgid "Error al crear la BBDD"
-msgstr "Fehler beim Anlegen der Datenbank"
-
-#: ../../../../inc/Installer.class.php:344
-#: ../../../../inc/Installer.class.php:355
-msgid "Verifique los permisos del usuario de la Base de Datos"
-msgstr "Bitte überprüfen Sie die Datenbank-Zugriffsberechtigungen"
-
-#: ../../../../inc/Installer.class.php:354
-msgid "Error al establecer permisos de la BBDD"
-msgstr "Fehler beim Setzen der Datenbank-Berechtigungen"
-
-#: ../../../../inc/Installer.class.php:387
-msgid "El archivo de estructura de la BBDD no existe"
-msgstr "Datei mit Datenbank-Schema existiert nicht"
-
-#: ../../../../inc/Installer.class.php:388
-msgid "No es posible crear la BBDD de la aplicación. Descárguela de nuevo."
-msgstr ""
-"Anwendungsdatenbank kann nicht angelegt werden. Bitte erneut herunterladen"
-
-#: ../../../../inc/Installer.class.php:396
-msgid "Error al seleccionar la BBDD"
-msgstr "Fehler beim Auswählen der Datenbank"
-
-#: ../../../../inc/Installer.class.php:397
-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."
-
-#: ../../../../inc/Installer.class.php:415
-msgid "Error al crear la estructura de la Base de Datos."
-msgstr "Fehler beim Anlegen der Datenbankstruktur"
-
-#: ../../../../inc/Installer.class.php:438
-msgid "Error al crear el grupo \"admin\""
-msgstr "Fehler beim Anlegen der \"admin\" Gruppe"
-
-#: ../../../../inc/Installer.class.php:439
-#: ../../../../inc/Installer.class.php:472
-#: ../../../../inc/Installer.class.php:489
-#: ../../../../inc/Installer.class.php:502
-msgid "Informe al desarrollador"
-msgstr "Warnung an Entwickler"
-
-#: ../../../../inc/Installer.class.php:471
-msgid "Error al crear el perfil \"admin\""
-msgstr "Fehler beim Anlegen des \"admin\" Profils"
-
-#: ../../../../inc/Installer.class.php:488
-msgid "Error al crear el usuario \"admin\""
-msgstr "Fehler beim Anlegen des \"admin\" Benutzers"
-
-#: ../../../../inc/Installer.class.php:501
-msgid "Error al actualizar la clave maestra del usuario \"admin\""
-msgstr "Fehler beim Ändern des Master-Passworts des Benutzers \"admin\""
-
-#: ../../../../inc/Ldap.class.php:132 ../../../../inc/Ldap.class.php:136
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:118
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:432
+#: ../../../../inc/SP/Controller/ChecksController.class.php:92
+msgid "Los parámetros de LDAP no están configurados"
+msgstr "LDAP-Parameter sind nicht gesetzt"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:132
+#: ../../../../inc/SP/Controller/ChecksController.class.php:107
+msgid "Conexión a LDAP correcta"
+msgstr "LDAP-Verbindung ist OK"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:133
+#: ../../../../inc/SP/Mgmt/Users/UserLdapSync.class.php:67
+msgid "Objetos encontrados"
+msgstr "Objekte gefunden"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:169
msgid "No es posible conectar con el servidor de LDAP"
msgstr "Verbindung zum LDAP-Server kann nicht hergestellt werden"
-#: ../../../../inc/Ldap.class.php:161 ../../../../inc/Ldap.class.php:166
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:170
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:49
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:19
+#: ../../../../inc/themes/material-blue/views/config/info.inc:58
+#: ../../../../inc/themes/material-blue/views/config/info.inc:61
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:62
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:87
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:27
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:34
+msgid "Servidor"
+msgstr "Server"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:214
msgid "Error al conectar (BIND)"
msgstr "LDAP-Verbindungsfehler (BIND)"
-#: ../../../../inc/Ldap.class.php:189 ../../../../inc/Ldap.class.php:194
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:247
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:259
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:269
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:679
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:691
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:701
msgid "Error al buscar objetos en DN base"
msgstr "Fehler beim Suchen nach Objekten in der Base-DN"
-#: ../../../../inc/Ldap.class.php:217 ../../../../inc/Ldap.class.php:223
-#: ../../../../inc/Ldap.class.php:230 ../../../../inc/Ldap.class.php:235
-#: ../../../../inc/Ldap.class.php:240 ../../../../inc/Ldap.class.php:245
-msgid "Error al buscar RDN de grupo"
-msgstr "Fehler beim Suchen nach Gruppen RDN"
-
-#: ../../../../inc/Ldap.class.php:294 ../../../../inc/Ldap.class.php:300
-#: ../../../../inc/Ldap.class.php:315 ../../../../inc/Ldap.class.php:320
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:533
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:556
msgid "Error al buscar el DN del usuario"
msgstr "Fehler beim Suchen nach Benutzer DN"
-#: ../../../../inc/Ldap.class.php:307 ../../../../inc/Ldap.class.php:312
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:534
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:547
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:557
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:167
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:109
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:119
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:368
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:748
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:835
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:616
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:624
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:720
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:730
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:745
+#: ../../../../inc/SP/Controller/LoginController.class.php:196
+#: ../../../../inc/SP/Controller/LoginController.class.php:251
+#: ../../../../inc/SP/Controller/LoginController.class.php:345
+#: ../../../../inc/SP/Controller/LoginController.class.php:403
+#: ../../../../inc/SP/Controller/LoginController.class.php:426
+#: ../../../../inc/SP/Core/Init.class.php:591
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:77
+#: ../../../../inc/SP/Mgmt/Users/UserLdapSync.class.php:99
+#: ../../../../inc/SP/Mgmt/Users/UserPreferencesUtil.class.php:66
+#: ../../../../res/test.php:64
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:45
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:51
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:54
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:60
+#: ../../../../inc/themes/material-blue/views/account/account.inc:110
+#: ../../../../inc/themes/material-blue/views/account/viewpass.inc:20
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:63
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:47
+#: ../../../../inc/themes/material-blue/views/config/info.inc:46
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:117
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:64
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:71
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:209
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:223
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:31
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:35
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:37
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:12
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:14
+#: ../../../../inc/themes/material-blue/views/main/login.inc:15
+#: ../../../../inc/themes/material-blue/views/main/login.inc:87
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:16
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:90
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:92
+msgid "Usuario"
+msgstr "Benutzer"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:546
msgid "Error al localizar el usuario en LDAP"
msgstr "Fehler beim Suchen des Benutzers in LDAP"
-#: ../../../../inc/Ldap.class.php:389 ../../../../inc/Ldap.class.php:395
-#: ../../../../inc/LdapADS.class.php:103 ../../../../inc/LdapADS.class.php:108
-msgid "Error al buscar el grupo de usuarios"
-msgstr "Fehler beim Suchen nach Benutzergruppe"
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:587
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:600
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:611
+msgid "Error al buscar RDN de grupo"
+msgstr "Fehler beim Suchen nach Gruppen RDN"
-#: ../../../../inc/Ldap.class.php:402
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:588
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:601
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:612
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:134
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:144
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:158
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:168
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:108
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:120
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:476
+#: ../../../../inc/SP/Controller/LoginController.class.php:253
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:236
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:239
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:174
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:201
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:71
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:73
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:47
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:61
+msgid "Grupo"
+msgstr "Gruppe"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:121
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:157
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:93
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:126
msgid "Usuario verificado en grupo"
msgstr "Nutzer in Gruppe verifiziert"
-#: ../../../../inc/LdapADS.class.php:112 ../../../../inc/LdapADS.class.php:117
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:133
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:107
+msgid "Error al buscar el grupo de usuarios"
+msgstr "Fehler beim Suchen nach Benutzergruppe"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:143
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 ""
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:166
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:118
+msgid "Usuario no pertenece al grupo"
+msgstr "Der Nutzer gehört nicht zur Gruppe"
-#: ../../../../inc/Log.class.php:88
-#: ../../../../inc/themes/classic/eventlog.inc:98
-#: ../../../../inc/themes/material-blue/eventlog.inc:99
+#: ../../../../inc/SP/Config/ConfigDB.class.php:107
+#: ../../../../inc/SP/Config/ConfigDB.class.php:147
+#: ../../../../inc/SP/Controller/MainController.class.php:287
+#: ../../../../inc/SP/Core/Acl.class.php:215
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:75
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:216
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:218
+msgid "Configuración"
+msgstr "Konfiguration"
+
+#: ../../../../inc/SP/Config/ConfigDB.class.php:108
+#: ../../../../inc/SP/Config/ConfigDB.class.php:148
+msgid "Modificar configuración"
+msgstr "Konfiguration ändern"
+
+#: ../../../../inc/SP/Config/ConfigDB.class.php:149
+#: ../../../../inc/SP/Core/Upgrade.class.php:258
+#: ../../../../inc/SP/Core/Upgrade.class.php:264
+msgid "Parámetro"
+msgstr "Parameter"
+
+#: ../../../../inc/SP/Config/ConfigDB.class.php:152
+msgid "Valor"
+msgstr "Wert"
+
+#: ../../../../inc/SP/Controller/AccountController.class.php:144
+#: ../../../../inc/SP/Controller/AccountController.class.php:467
+#: ../../../../inc/SP/Controller/AccountController.class.php:499
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:211
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:212
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:45
+msgid "Detalles de Cuenta"
+msgstr "Kontodetails"
+
+#: ../../../../inc/SP/Controller/AccountController.class.php:256
+#: ../../../../inc/SP/Controller/MainController.class.php:257
+#: ../../../../inc/SP/Core/Acl.class.php:187
+msgid "Nueva Cuenta"
+msgstr "Neues Konto"
+
+#: ../../../../inc/SP/Controller/AccountController.class.php:383
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:264
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:265
+#: ../../../../inc/SP/Core/Acl.class.php:186
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:101
+msgid "Copiar Cuenta"
+msgstr "Konto kopieren"
+
+#: ../../../../inc/SP/Controller/AccountController.class.php:411
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:251
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:252
+#: ../../../../inc/SP/Core/Acl.class.php:188
+msgid "Editar Cuenta"
+msgstr "Konto ändern"
+
+#: ../../../../inc/SP/Controller/AccountController.class.php:439
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:116
+msgid "Modificar Clave de Cuenta"
+msgstr "Konto-Passwort ändern"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:237
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:238
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:86
+msgid "Copiar Clave en Portapapeles"
+msgstr "Passwort in die Zwischenablage kopieren"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:287
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:288
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:142
+msgid "Solicitar Modificación"
+msgstr "Änderung initiiert"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:297
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:298
+msgid "Más Acciones"
+msgstr "Weitere Aktionen"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:347
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:281
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:350
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:403
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:834
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1103
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:23
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:29
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:21
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:27
+#: ../../../../inc/themes/material-blue/views/account/account.inc:53
+#: ../../../../inc/themes/material-blue/views/account/account.inc:55
+#: ../../../../inc/themes/material-blue/views/account/request.inc:24
+#: ../../../../inc/themes/material-blue/views/account/request.inc:31
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:21
+msgid "Cliente"
+msgstr "Kunde"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:348
+msgid "Ordenar por Cliente"
+msgstr "Nach Kunde sortieren"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:355
+msgid "Ordenar por Nombre"
+msgstr "Nach Name sortieren"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:361
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:32
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:38
+#: ../../../../inc/themes/material-blue/views/account/account.inc:76
+#: ../../../../inc/themes/material-blue/views/account/account.inc:78
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:57
+msgid "Categoría"
+msgstr "Kategorie"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:362
+msgid "Ordenar por Categoría"
+msgstr "Nach Kategorie sortieren"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:369
+msgid "Ordenar por Usuario"
+msgstr "Nach Benutzername sortieren"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:375
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:34
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:40
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:43
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:49
+#: ../../../../inc/themes/material-blue/views/account/account.inc:99
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:68
+msgid "URL / IP"
+msgstr "URL/IP"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:376
+msgid "Ordenar por URL / IP"
+msgstr "Nach URL/IP sortieren"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:108
+#, php-format
+msgid "Objetos encontrados: %d"
+msgstr "Objekte gefunden: %d"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:127
+msgid "Los parámetros de DokuWiki no están configurados"
+msgstr "DokuWiki Einstellungen sind nicht konfiguriert"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:135
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:113
+#: ../../../../inc/SP/Import/ImportBase.class.php:144
+#: ../../../../inc/SP/Import/ImportBase.class.php:166
+#: ../../../../inc/SP/Import/ImportBase.class.php:188
+#: ../../../../inc/SP/Import/ImportBase.class.php:210
+#: ../../../../inc/SP/Log/Email.class.php:92
+#: ../../../../inc/SP/Log/Email.class.php:93
+#: ../../../../inc/SP/Log/Email.class.php:203
+#: ../../../../inc/SP/Log/Email.class.php:204
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApiBase.class.php:193
+msgid "Error"
+msgstr "Fehler"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:137
+msgid "Conexión correcta"
+msgstr "Verbindung erfolgreich"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:138
+#: ../../../../inc/SP/Core/Init.class.php:429
+#: ../../../../inc/SP/Core/Init.class.php:669
+#: ../../../../inc/SP/Core/Upgrade.class.php:94
+#: ../../../../inc/SP/Core/Upgrade.class.php:278
+#: ../../../../inc/themes/material-blue/views/config/info.inc:40
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:25
+msgid "Versión"
+msgstr "Version"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:141
+msgid "Error de conexión a DokuWiki"
+msgstr "Fehler beim Verbinden mit DokuWiki"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:173
+msgid "Faltan parámetros de syslog remoto"
+msgstr "Fehlende Remote Syslog Parameter"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:182
+msgid "Syslog remoto deshabilitado"
+msgstr "Remote Syslog deaktiviert"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:195
+msgid "Faltan parámetros de Proxy"
+msgstr "Proxy Parameter fehlt"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:204
+msgid "Proxy habiltado"
+msgstr "Proxy aktiviert"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:208
+msgid "Proxy deshabilitado"
+msgstr "Proxy deaktiviert"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:211
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:300
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:364
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:411
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:465
+msgid "Sección"
+msgstr "Sektion"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:211
+#: ../../../../inc/SP/Controller/ConfigController.class.php:151
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:226
+#: ../../../../inc/themes/material-blue/views/main/install.inc:132
+msgid "General"
+msgstr "Allgemein"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:228
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:511
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:581
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:649
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:699
+#: ../../../../inc/SP/Forms/UserForm.class.php:96
+#: ../../../../inc/SP/Forms/UserForm.class.php:108
+#: ../../../../inc/SP/Forms/UserForm.class.php:122
+msgid "Ey, esto es una DEMO!!"
+msgstr "Hey, dies ist eine DEMO!!"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:242
+msgid "Configuración actualizada"
+msgstr "Konfiguration aktualisiert"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:244
+msgid "Error al guardar la configuración"
+msgstr "Fehler beim Spesichern der Konfiguration"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:248
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:424
+msgid "Modificar Configuración"
+msgstr "Konfiguration ändern"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:281
+msgid "El tamaño máximo por archivo es de 16MB"
+msgstr "Die maximale Dateigröße ist 16MB"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:300
+#: ../../../../inc/SP/Controller/ConfigController.class.php:200
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:365
+#: ../../../../inc/SP/Controller/MainController.class.php:580
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:90
+#: ../../../../inc/themes/material-blue/views/account/linkedAccounts.inc:13
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:30
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:32
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:196
+msgid "Cuentas"
+msgstr "Konten"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:322
+msgid "Faltan parámetros de Wiki"
+msgstr "Fehlender Wiki-Parameter"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:330
+msgid "Wiki habiltada"
+msgstr "Wiki aktiviert"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:334
+msgid "Wiki deshabilitada"
+msgstr "Wiki deaktiviert"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:347
+msgid "Faltan parámetros de DokuWiki"
+msgstr "Fehlende DokuWiki Parameter"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:357
+msgid "DokuWiki habiltada"
+msgstr "DokuWiki aktiviert"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:361
+msgid "DokuWiki deshabilitada"
+msgstr "DokuWiki deaktiviert"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:364
+#: ../../../../inc/SP/Controller/ConfigController.class.php:232
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:63
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:10
+msgid "Wiki"
+msgstr "Wiki"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:391
+msgid "Faltan parámetros de LDAP"
+msgstr "Fehlender LDAP-Parameter"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:404
+msgid "LDAP habiltado"
+msgstr "LDAP aktiviert"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:408
+msgid "LDAP deshabilitado"
+msgstr "LDAP deaktiviert"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:411
+#: ../../../../inc/SP/Controller/ConfigController.class.php:265
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:7
+msgid "LDAP"
+msgstr "LDAP"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:440
+msgid "Faltan parámetros de Correo"
+msgstr "Fehlende Mail Parameter"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:456
+msgid "Correo habiltado"
+msgstr "Mail aktiviert"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:462
+msgid "Correo deshabilitado"
+msgstr "Mail deaktiviert"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:465
+#: ../../../../inc/SP/Controller/ConfigController.class.php:296
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:7
+msgid "Correo"
+msgstr "E-Mail"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:487
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:564
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:279
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:507
+#: ../../../../inc/SP/Controller/LoginController.class.php:288
+#: ../../../../inc/SP/Controller/LoginController.class.php:298
+msgid "Clave maestra actualizada"
+msgstr "Master-Passwort aktualisiert"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:488
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:566
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:279
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:507
+#, fuzzy
+msgid "Reinicie la sesión para cambiarla"
+msgstr "Neue Sitzung beginnen"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:492
+msgid "Clave maestra no indicada"
+msgstr "Master-Passwort notwendig"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:495
+msgid "Se ha de confirmar el cambio de clave"
+msgstr "Passwort muss bestätigt werden"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:500
+msgid "Las claves son idénticas"
+msgstr "Passwörter sind identisch"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:503
+msgid "Las claves maestras no coinciden"
+msgstr "Master-Passwort stimmt nicht"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:506
+msgid "La clave maestra actual no coincide"
+msgstr "Aktuelles Master-Passwort stimmt nicht"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:521
+#: ../../../../inc/SP/Import/Import.class.php:89
+msgid "No es posible iniciar una transacción"
+msgstr "Eine Transaktion konnte nicht gestartet werden"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:530
+#, fuzzy
+msgid "Errores al actualizar las claves de las cuentas"
+msgstr "Fehler beim Ändern der Passwörter eines Kontos"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:539
+msgid "Errores al actualizar las claves de las cuentas del histórico"
+msgstr "Fehler beim Aktualisieren des Kontopasswörter in der History"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:546
+msgid "Errores al actualizar datos de campos personalizados"
+msgstr "Fehler beim aktualisieren der Benutzerfelder"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:551
+#: ../../../../inc/SP/Import/Import.class.php:95
+msgid "No es posible finalizar una transacción"
+msgstr "Eine Transaktion konnte nicht abgeschlossen werden"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:569
+msgid "Error al guardar el hash de la clave maestra"
+msgstr "Fehler beim Speichern des Hash für das Master-Passwort"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:588
+msgid "Hash de clave maestra actualizado"
+msgstr "Master-Passwort-Hash aktualisiert"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:592
+msgid "Error al actualizar el hash de la clave maestra"
+msgstr "Fehler beim Aktualisieren des Master-Kennwort-Hash"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:611
+msgid "Generar Clave Temporal"
+msgstr "temporäres Passwort erstellen"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:614
+msgid "Clave Temporal Generada"
+msgstr "temporäres Passwort erstellt"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:619
+#, fuzzy, php-format
+msgid "Clave Maestra %s"
+msgstr "Master Passwort %2"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:620
+msgid ""
+"Se ha generado una nueva clave para el acceso a sysPass y se solicitará en "
+"el siguiente inicio."
+msgstr ""
+"Ein neues sysPass-Master-Passwort wurde generiert, welches bei der nächsten "
+"Anmeldung angefordert wird."
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:622
+#, php-format
+msgid "La nueva clave es: %s"
+msgstr "Neues Master Passwort ist: %s"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:624
+msgid "No olvide acceder lo antes posible para guardar los cambios."
+msgstr ""
+"Bitte vergessen Sie nicht, sich so schnell wie möglich anzumelden, um die "
+"Änderungen zu speichern."
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:635
+msgid "Error al generar clave temporal"
+msgstr "Fehler beim erstellen eines temporären Passwortes"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:676
+#: ../../../../inc/SP/Forms/AccountForm.class.php:134
+#: ../../../../inc/SP/Forms/UserForm.class.php:112
+msgid "Las claves no coinciden"
+msgstr "Die Passwörter stimmen nicht überein"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:681
+msgid "Error al realizar la exportación"
+msgstr "Fehler beim Exportieren"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:686
+msgid "Proceso de exportación finalizado"
+msgstr "Export fertig"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:322
+#: ../../../../inc/SP/Core/Acl.class.php:217
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:233
+msgid "Encriptación"
+msgstr "Verschlüsselung"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:367
+msgid "Último backup"
+msgstr "Letztes Backup"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:367
+msgid "No se encontraron backups"
+msgstr "Keine Backups vorhanden"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:378
+msgid "Última exportación"
+msgstr "letzter Export"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:378
+msgid "No se encontró archivo de exportación"
+msgstr "Keine Exportdatei gefunden"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:380
+#: ../../../../inc/SP/Core/Acl.class.php:218
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:7
+msgid "Copia de Seguridad"
+msgstr "Sicherung"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:402
+#: ../../../../inc/SP/Import/Import.class.php:66
+#: ../../../../inc/SP/Import/ImportBase.class.php:77
+msgid "Importar Cuentas"
+msgstr "Importiere Konten"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:425
+msgid "No instalado"
+msgstr "Nicht installiert"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:427
+#: ../../../../inc/SP/Controller/MainController.class.php:582
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:77
+msgid "Información"
+msgstr "Information"
+
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:275
+msgid "Opción no disponible"
+msgstr "Option nicht verfügbar"
+
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:275
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:276
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:277
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:278
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:280
+#: ../../../../inc/SP/Core/Init.class.php:293
+msgid "Consulte con el administrador"
+msgstr "Bitte kontaktieren Sie den Administrator"
+
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:276
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:505
+msgid "No tiene permisos para acceder a esta cuenta"
+msgstr "Sie haben keine Erlaubnis auf dieses Konto zuzugreifen"
+
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:277
+msgid "No tiene permisos para acceder a esta página"
+msgstr "Sie haben keine Erlaubnis auf diese Seite zuzugreifen"
+
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:278
+msgid "No tiene permisos para realizar esta operación"
+msgstr "Sie haben keine Erlaubnis für diese Aktion"
+
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:280
+msgid "Se ha producido una excepción"
+msgstr "Eine Ausnahme ist aufgetreten"
+
+#: ../../../../inc/SP/Controller/EventlogController.class.php:102
+msgid "Vaciar Eventos"
+msgstr "Ereignisse löschen"
+
+#: ../../../../inc/SP/Controller/EventlogController.class.php:102
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:144
msgid "Vaciar registro de eventos"
msgstr "Ereignisprotokoll leeren"
-#: ../../../../inc/Migrate.class.php:51
-msgid "Faltan parámetros"
-msgstr "Fehlender Parameter"
+#: ../../../../inc/SP/Controller/EventlogController.class.php:104
+msgid "Registro de eventos vaciado"
+msgstr "Ereignisprotokoll gelöscht"
-#: ../../../../inc/Migrate.class.php:148
-msgid "La versión no es compatible"
-msgstr "Inkompatible Version"
+#: ../../../../inc/SP/Controller/EventlogController.class.php:125
+msgid "Buscar Evento"
+msgstr "Suche nach Ereignis"
-#: ../../../../inc/Migrate.class.php:149
-msgid "Actualice a la última versión de phpPMS"
-msgstr "Bitte aktualisieren Sie auf die letzte Version von phpPMS."
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:57
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:131
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:593
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:57
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1104
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:37
+#: ../../../../inc/themes/material-blue/views/itemshow/categories.inc:28
+#: ../../../../inc/themes/material-blue/views/itemshow/customers.inc:32
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:31
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:77
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:83
+msgid "Descripción"
+msgstr "Beschreibung"
-#: ../../../../inc/Migrate.class.php:167
-msgid "Error al obtener la configuración"
-msgstr "Fehler beim Laden der Konfiguration"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:72
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:91
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:161
+msgid "Categorías"
+msgstr "Kategorien"
-#: ../../../../inc/Migrate.class.php:210 ../../../../inc/Migrate.class.php:223
-msgid "Error al vaciar tabla"
-msgstr "Fehler beim Leeren der Tabelle"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:80
+msgid "Buscar Categoría"
+msgstr "Suche nach Kategorie"
-#: ../../../../inc/Migrate.class.php:228
-msgid "Usuario actual no es administrador de la aplicación"
-msgstr "Angemeldeter Benutzer ist nicht Administrator"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:90
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:91
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:188
+#: ../../../../inc/themes/material-blue/views/account/account.inc:89
+msgid "Nueva Categoría"
+msgstr "Neue Kategorie"
-#: ../../../../inc/Migrate.class.php:273
-msgid "No es posible crear el cliente"
-msgstr "Kunde kann nicht angelegt werden"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:101
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:102
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:184
+#: ../../../../inc/SP/Core/Acl.class.php:199
+msgid "Editar Categoría"
+msgstr "Kategorie ändern"
-#: ../../../../inc/Migrate.class.php:274
-msgid "Contacte con el desarrollador"
-msgstr "Bitte kontaktieren Sie den Entwickler"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:146
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:92
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:168
+msgid "Clientes"
+msgstr "Kunden"
-#: ../../../../inc/Migrate.class.php:278
-msgid "Importar Clientes"
-msgstr "Importiere Kunden"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:154
+msgid "Buscar Cliente"
+msgstr "Suche nach Kunde"
-#: ../../../../inc/Migrate.class.php:280 ../../../../inc/Migrate.class.php:350
-#: ../../../../inc/Migrate.class.php:451 ../../../../inc/Migrate.class.php:524
-#: ../../../../inc/Migrate.class.php:632 ../../../../inc/Migrate.class.php:697
-#: ../../../../inc/Migrate.class.php:771 ../../../../inc/Migrate.class.php:861
-#: ../../../../inc/Migrate.class.php:932
-msgid "Registros"
-msgstr "Datensätze"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:164
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:165
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:175
+#: ../../../../inc/themes/material-blue/views/account/account.inc:66
+msgid "Nuevo Cliente"
+msgstr "Neuer Kunde"
-#: ../../../../inc/Migrate.class.php:302
-msgid "Error al obtener los clientes"
-msgstr "Fehler beim Laden des Kunden"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:175
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:176
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:171
+#: ../../../../inc/SP/Core/Acl.class.php:204
+msgid "Editar Cliente"
+msgstr "Kunde ändern"
-#: ../../../../inc/Migrate.class.php:344
-msgid "Error al obtener cuentas"
-msgstr "Fehler beim Laden des Kontos"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:204
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:44
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:46
+msgid "Módulo"
+msgstr "Module"
-#: ../../../../inc/Migrate.class.php:373
-msgid "Cliente no encontrado"
-msgstr "Kunde nicht gefunden"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:222
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:69
+#: ../../../../inc/themes/material-blue/views/account/account.inc:256
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:175
+msgid "Campos Personalizados"
+msgstr "Nutzerfelder"
-#: ../../../../inc/Migrate.class.php:416
-msgid "Error al migrar cuenta"
-msgstr "Fehler beim Importieren des Kontos"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:230
+msgid "Buscar Campo"
+msgstr "Feld suchen"
-#: ../../../../inc/Migrate.class.php:445
-msgid "Error al obtener los grupos de cuentas"
-msgstr "Fehler beim Laden der Gruppen eines Kontos"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:240
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:241
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:205
+msgid "Nuevo Campo"
+msgstr "Neues Feld"
-#: ../../../../inc/Migrate.class.php:449
-msgid "Importar Grupos de Cuentas"
-msgstr "Importiere Kontogruppen"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:251
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:252
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:209
+msgid "Editar Campo"
+msgstr "Feld bearbeiten"
-#: ../../../../inc/Migrate.class.php:471
-msgid "Error al crear grupos de cuentas"
-msgstr "Fehler beim Anlegen der Gruppen eines Kontos"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:261
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:262
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:687
+msgid "Eliminar Campo"
+msgstr "Feld löschen"
-#: ../../../../inc/Migrate.class.php:518
-msgid "Error al obtener el historico de cuentas"
-msgstr "Fehler beim Laden der Konto-Historie"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:302
+#: ../../../../inc/SP/Core/Acl.class.php:193
+#: ../../../../inc/themes/material-blue/views/account/files.inc:5
+#: ../../../../inc/themes/material-blue/views/account/files.inc:15
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:208
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:89
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:203
+msgid "Archivos"
+msgstr "Dateien"
-#: ../../../../inc/Migrate.class.php:522
-msgid "Importar Histórico de Cuentas"
-msgstr "Importiere Konten-Historie"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:310
+msgid "Buscar Archivo"
+msgstr "Suchen nach Datei"
-#: ../../../../inc/Migrate.class.php:591
-msgid "Error al crear historico de cuentas"
-msgstr "Fehler beim Anlegen der Konto-Historie"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:320
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:321
+#: ../../../../inc/themes/material-blue/views/account/files-list.inc:40
+msgid "Ver Archivo"
+msgstr "Datei ansehen"
-#: ../../../../inc/Migrate.class.php:626
-msgid "Error al obtener los archivos de cuentas"
-msgstr "Fehler beim Laden der Konto-Dateien"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:330
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:331
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:830
+#: ../../../../inc/themes/material-blue/views/account/files-list.inc:26
+msgid "Eliminar Archivo"
+msgstr "Datei löschen"
-#: ../../../../inc/Migrate.class.php:630
-msgid "Importar Archivos de Cuentas"
-msgstr "Importiere Konto-Dateien"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:373
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:434
+msgid "Buscar Cuenta"
+msgstr "Konto suchen"
-#: ../../../../inc/Migrate.class.php:662
-msgid "Error al crear archivos de cuentas"
-msgstr "Fehler beim Anlegen der Kontodateien"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:404
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:54
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:65
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:85
+#: ../../../../inc/themes/material-blue/views/account/account.inc:156
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:64
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:71
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:24
+msgid "Fecha"
+msgstr "Datum"
-#: ../../../../inc/Migrate.class.php:691
-msgid "Error al obtener las categorías de cuentas"
-msgstr "Fehler beim Holen der Konto-Kategorien"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:405
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:985
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:58
+msgid "Estado"
+msgstr "Status"
-#: ../../../../inc/Migrate.class.php:695
-msgid "Importar Categorías de Cuentas"
-msgstr "Importiere Kontokategorien"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:416
+#, fuzzy
+msgid "Modificada"
+msgstr "Password erneuern"
-#: ../../../../inc/Migrate.class.php:717
-msgid "Error al crear categorías de cuentas"
-msgstr "Fehler beim Holen der Konto-Kategorien"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:417
+#, fuzzy
+msgid "Eliminada"
+msgstr "Löschen"
-#: ../../../../inc/Migrate.class.php:765
-msgid "Error al obtener los usuarios"
-msgstr "Fehler beim Laden der Benutzer"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:426
+#, fuzzy
+msgid "Cuentas (H)"
+msgstr "Konten"
-#: ../../../../inc/Migrate.class.php:769
-msgid "Importar Usuarios"
-msgstr "Importiere Benutzer"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:444
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:445
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:942
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1154
+msgid "Restaurar Cuenta"
+msgstr "Wiederherstellen Konto"
-#: ../../../../inc/Migrate.class.php:826
-msgid "Error al crear usuarios"
-msgstr "Fehler beim Anlegen der Benutzer"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:475
+#: ../../../../inc/SP/Controller/LoginController.class.php:252
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:55
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:57
+msgid "Perfil"
+msgstr "Profil"
-#: ../../../../inc/Migrate.class.php:855
-msgid "Error al obtener los grupos de usuarios"
-msgstr "Fehler beim Laden der Gruppen eines Benutzers"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:477
+msgid "Propiedades"
+msgstr "Eigenschaften"
-#: ../../../../inc/Migrate.class.php:859
-msgid "Importar Grupos de Usuarios"
-msgstr "Importiere Benutzergruppen"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:498
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:93
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:24
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:44
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:46
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:49
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:140
+msgid "Usuarios"
+msgstr "Benutzer"
-#: ../../../../inc/Migrate.class.php:885
-msgid "Error al crear los grupos de usuarios"
-msgstr "Fehler beim Hinzufügen Gruppen eines Benutzers"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:506
+msgid "Buscar Usuario"
+msgstr "Suche nach Benutzer"
-#: ../../../../inc/Migrate.class.php:930
-msgid "Importar Configuración"
-msgstr "Importiere Konfiguration"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:515
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:516
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:136
+msgid "Nuevo Usuario"
+msgstr "Neuer Benutzer"
-#: ../../../../inc/Profile.class.php:69 ../../../../inc/Profile.class.php:123
-#: ../../../../inc/Profile.class.php:128
-msgid "Migrar Perfiles"
-msgstr "Profile migrieren"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:529
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:530
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1014
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:292
+msgid "Importar usuarios de LDAP"
+msgstr "Benutzer aus LDAP importieren"
-#: ../../../../inc/Profile.class.php:69
-msgid "Error al obtener perfiles"
-msgstr "Fehlerm beim abrufen von Profilen"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:542
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:543
+msgid "Ver Detalles de Usuario"
+msgstr "Benutzerdetails anzeigen"
-#: ../../../../inc/Profile.class.php:126
-msgid "Operación realizada correctamente"
-msgstr "Operation erfolgreich ausgeführt"
-
-#: ../../../../inc/Profile.class.php:128
-msgid "Fallo al realizar la operación"
-msgstr "Fehler beim durchführen der Operation"
-
-#: ../../../../inc/ProfileBase.class.php:164
-msgid "Datos de perfil incorrectos"
-msgstr "falsche Profildaten"
-
-#: ../../../../inc/ProfileBase.class.php:550
-#: ../../../../web/UsersMgmtC.class.php:275
-msgid "Eliminar Perfil"
-msgstr "Profil löschen"
-
-#: ../../../../inc/ProfileBase.class.php:593
-msgid "Modificar Perfil"
-msgstr "Profil ändern"
-
-#: ../../../../inc/SyspassImport.class.php:111
-#: ../../../../inc/SyspassImport.class.php:136
-#: ../../../../inc/SyspassImport.class.php:161
-msgid "Formato de XML inválido"
-msgstr "Falsches XML-Format"
-
-#: ../../../../inc/SyspassImport.class.php:111
-msgid "No hay categorías para importar"
-msgstr "Es existieren keine Kategorien zum importieren"
-
-#: ../../../../inc/SyspassImport.class.php:136
-msgid "No hay clientes para importar"
-msgstr "Es existieren keine Kunden zum importieren"
-
-#: ../../../../inc/SyspassImport.class.php:161
-msgid "No hay cuentas para importar"
-msgstr "Es existieren keine Accounts zum importieren"
-
-#: ../../../../inc/Template.class.php:91
-#, php-format
-msgid "No es posible obtener la plantilla \"%s\" : %s"
-msgstr "Unmöglich die \"%s\" Vorlage zu ermitteln: %s"
-
-#: ../../../../inc/Template.class.php:130
-#, php-format
-msgid "No es posible obtener la variable \"%s\""
-msgstr "Unmöglich die \"%s\" Variable zu ermitteln"
-
-#: ../../../../inc/Template.class.php:173
-#, php-format
-msgid "No es posible destruir la variable \"%s\""
-msgstr "Unmöglich die Variable \"%s\" zu löschen"
-
-#: ../../../../inc/Upgrade.class.php:51
-msgid "Error al aplicar la actualización de la Base de Datos"
-msgstr "Fehler beim Ändern der Datenbank"
-
-#: ../../../../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"
-
-#: ../../../../inc/Upgrade.class.php:52 ../../../../inc/Upgrade.class.php:58
-#: ../../../../inc/themes/classic/login.inc:32
-#: ../../../../inc/themes/material-blue/2fa.inc:24
-#: ../../../../inc/themes/material-blue/login.inc:65
-msgid "Acceder"
-msgstr "Anmeldung"
-
-#: ../../../../inc/Upgrade.class.php:57
-msgid "Error al aplicar la actualización auxiliar"
-msgstr "Ein Fehler beim Update ist aufgetreten"
-
-#: ../../../../inc/Upgrade.class.php:74
-msgid "Actualizar BBDD"
-msgstr "DB aktualisieren"
-
-#: ../../../../inc/Upgrade.class.php:127
-msgid "No es necesario actualizar la Base de Datos."
-msgstr "Keine Datenbankaktualisierung notwendig"
-
-#: ../../../../inc/Upgrade.class.php:135
-msgid "Error al aplicar la actualización de la Base de Datos."
-msgstr "Fehler beim Ändern der Datenbank"
-
-#: ../../../../inc/Upgrade.class.php:144
-msgid "Actualización de la Base de Datos realizada correctamente."
-msgstr "Aktualisierung der Datenbank war erfolgreich."
-
-#: ../../../../inc/Upgrade.class.php:221
-msgid "Actualizar Configuración"
-msgstr "Konfiguration aktualisieren"
-
-#: ../../../../inc/Upgrade.class.php:221
-msgid "Actualización de la Configuración realizada correctamente."
-msgstr "Configuration Aktualisierung erfolgreich durchgeführt."
-
-#: ../../../../inc/UserBase.class.php:388
-#: ../../../../inc/UserBase.class.php:532
-msgid "No se pudo realizar la petición de cambio de clave."
-msgstr "Die Passwortänderung Anfrage konnte nicht ausgeführt werden."
-
-#: ../../../../inc/UserBase.class.php:527
-msgid "Modificar Usuario"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:552
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:553
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:128
+msgid "Editar Usuario"
msgstr "Benutzer ändern"
-#: ../../../../inc/UserBase.class.php:594
-#: ../../../../web/UsersMgmtC.class.php:151
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:562
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:563
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:20
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:46
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:52
+msgid "Cambiar Clave de Usuario"
+msgstr "Benutzerpasswort Ändern"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:573
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:574
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:269
msgid "Eliminar Usuario"
msgstr "Benutzer löschen"
-#: ../../../../inc/UserLdap.class.php:68
-#: ../../../../web/UsersMgmtC.class.php:109
-#: ../../../../inc/themes/classic/users.inc:28
-#: ../../../../inc/themes/material-blue/users.inc:34
-msgid "Usuario de LDAP"
-msgstr "LDAP-Benutzer"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:608
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:94
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:46
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:147
+msgid "Grupos"
+msgstr "Gruppen"
-#: ../../../../inc/UserLdap.class.php:78
-msgid "Activación Cuenta"
-msgstr "Kontoaktivierung"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:616
+msgid "Buscar Grupo"
+msgstr "Suche nach Gruppe"
-#: ../../../../inc/UserLdap.class.php:79
-msgid "Su cuenta está pendiente de activación."
-msgstr "Ihre Kontoaktivierung ist anhängig"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:626
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:627
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:149
+msgid "Nuevo Grupo"
+msgstr "Neue Gruppe"
-#: ../../../../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/SP/Controller/Grids/Items.class.php:637
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:638
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:145
+msgid "Editar Grupo"
+msgstr "Gruppe ändern"
-#: ../../../../inc/UserLdap.class.php:86
-msgid "Nuevo usuario de LDAP"
-msgstr "Neuer LDAP Benutzer"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:647
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:648
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:399
+msgid "Eliminar Grupo"
+msgstr "Gruppe löschen"
-#: ../../../../inc/UserMigrate.class.php:113
-msgid "Migrar Grupos"
-msgstr "Gurppen migrieren"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:680
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:154
+msgid "Perfiles"
+msgstr "Profile"
-#: ../../../../inc/UserMigrate.class.php:113
-msgid "Error al migrar grupo del usuario"
-msgstr "Migrieren der Nutzergruppen ist fehlgeschlagen"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:688
+msgid "Buscar Perfil"
+msgstr "Suche nach Profil"
-#: ../../../../inc/Util.class.php:119
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:698
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:699
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:162
+msgid "Nuevo Perfil"
+msgstr "Neues Profil"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:709
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:710
+msgid "Ver Detalles de Perfil"
+msgstr "Zeige Nutzerdetails"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:719
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:720
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:158
+msgid "Editar Perfil"
+msgstr "Profil ändern"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:729
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:730
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:459
+msgid "Eliminar Perfil"
+msgstr "Profil löschen"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:749
+#: ../../../../inc/SP/Log/Email.class.php:63
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:26
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:28
+msgid "Acción"
+msgstr "Aktion"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:764
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:182
+msgid "Autorizaciones API"
+msgstr "API Berechtigungen"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:772
+msgid "Buscar Token"
+msgstr "Token suchen"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:782
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:783
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:197
+msgid "Nueva Autorización"
+msgstr "Neue Authentifizierung"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:793
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:794
+msgid "Ver token de Autorización"
+msgstr "Zeige Berechtigungstoken"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:803
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:804
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:201
+msgid "Editar Autorización"
+msgstr "Authentifizierung bearbeiten"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:813
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:814
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:639
+msgid "Eliminar Autorización"
+msgstr "Autorisierung löschen"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:833
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:19
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:21
+msgid "Fecha Creación"
+msgstr "Erstellungsdatum"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:834
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:27
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:29
+msgid "Fecha Caducidad"
+msgstr "Ablaufdatum"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:836
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:43
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:45
+msgid "Notificar"
+msgstr "Benachrichtigen"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:837
+#: ../../../../inc/themes/material-blue/views/account/details.inc:18
+#: ../../../../inc/themes/material-blue/views/account/details.inc:20
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:51
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:53
+msgid "Visitas"
+msgstr "Besuche"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:856
+msgid "Enlaces"
+msgstr "Links"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:864
+msgid "Buscar Enlace"
+msgstr "Link suchen"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:874
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:875
+msgid "Ver Enlace"
+msgstr "Link anzeigen"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:883
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:884
+msgid "Renovar Enlace"
+msgstr "Link erneuern"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:893
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:894
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:748
+msgid "Eliminar Enlace"
+msgstr "Link löschen"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:926
+#: ../../../../inc/themes/material-blue/views/account/account.inc:176
+#: ../../../../inc/themes/material-blue/views/account/account.inc:178
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:210
+msgid "Etiquetas"
+msgstr "Tags"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:934
+msgid "Buscar Etiqueta"
+msgstr "Tag suchen"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:944
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:945
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:218
+msgid "Nueva Etiqueta"
+msgstr "Neuer Tag"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:955
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:956
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:222
+msgid "Editar Etiqueta"
+msgstr "Tab bearbeiten"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:965
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:966
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:797
+msgid "Eliminar Etiqueta"
+msgstr "Tag löschen"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:984
+msgid "Plugin"
+msgstr "Plugin"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1001
+msgid "Plugins"
+msgstr "Plugins"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1009
+msgid "Buscar Plugin"
+msgstr "Plugin suchen"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1019
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1020
+msgid "Ver Plugin"
+msgstr "Plugin anzeigen"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1028
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1029
+msgid "Habilitar"
+msgstr "Aktivieren"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1038
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1039
+msgid "Deshabilitar"
+msgstr "Deaktivieren"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1048
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1049
+msgid "Restablecer Datos"
+msgstr "Daten zurücksetzen"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:56
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:51
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:58
+msgid "Componente"
+msgstr "Komponente"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:67
+msgid "Leída"
+msgstr "Lesen"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:76
+#: ../../../../inc/SP/Controller/MainController.class.php:306
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:79
+msgid "Notificaciones"
+msgstr "Benachrichtigungen"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:84
+msgid "Buscar Notificación"
+msgstr "Benachrichtigung suchen"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:95
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:96
+#: ../../../../inc/SP/Controller/NoticeShowController.class.php:94
+msgid "Nueva Notificación"
+msgstr "Neue Benachrichtigung"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:107
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:108
+#: ../../../../inc/SP/Controller/NoticeShowController.class.php:89
+msgid "Ver Notificación"
+msgstr "Benachrichtigung anzeigen"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:116
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:117
+msgid "Marcar Notificación"
+msgstr "Benachrichtigungen überprüfen"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:126
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:127
+#: ../../../../inc/SP/Controller/NoticeShowController.class.php:98
+msgid "Editar Notificación"
+msgstr "Benachrichtigung bearbeiten"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:136
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:137
+msgid "Eliminar Notificación"
+msgstr "Benachrichtigung löschen"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:228
+msgid "Crear Usuario"
+msgstr "Benutzer hinzufügen"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:229
+msgid "Usuario creado"
+msgstr "Benutzer hinzugefügt"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:236
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:251
+msgid "No se pudo realizar la petición de cambio de clave."
+msgstr "Die Passwortänderung Anfrage konnte nicht ausgeführt werden."
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:243
+msgid "Actualizar Usuario"
+msgstr "Benutzer aktualisieren"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:244
+#: ../../../../inc/SP/Mgmt/Users/UserMigrate.class.php:105
+msgid "Usuario actualizado"
+msgstr "Benutzer aktualisiert"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:258
+msgid "Usuarios eliminados"
+msgstr "Bentzer gelöscht"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:264
+msgid "Usuario eliminado"
+msgstr "Benutzer gelöscht"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:281
+msgid "Actualizar Clave Usuario"
+msgstr "Benutzerpasswort aktualisieren"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:372
+msgid "Crear Grupo"
+msgstr "Gruppe hinzufügen"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:373
+msgid "Grupo creado"
+msgstr "Gruppe hinzugefügt"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:380
+msgid "Actualizar Grupo"
+msgstr "Gruppe aktualisieren"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:381
+msgid "Grupo actualizado"
+msgstr "Gruppe aktualisiert"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:388
+msgid "Grupos eliminados"
+msgstr "Gruppen gelöscht"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:394
+msgid "Grupo eliminado"
+msgstr "Gruppe gelöscht"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:432
+msgid "Crear Perfil"
+msgstr "Profile hinzufügen"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:433
+msgid "Perfil creado"
+msgstr "Profil hinzugefügt"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:440
+msgid "Actualizar Perfil"
+msgstr "Profil aktualisieren"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:441
+msgid "Perfil actualizado"
+msgstr "Profil aktualisiert"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:448
+msgid "Perfiles eliminados"
+msgstr "Profile gelöscht"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:454
+msgid "Perfil eliminado"
+msgstr "Profil gelöscht"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:502
+msgid "Actualizar Cliente"
+msgstr "Kunde ändern"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:503
+msgid "Cliente actualizado"
+msgstr "Kunde aktualisiert"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:510
+msgid "Clientes eliminados"
+msgstr "Kunden gelöscht"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:564
+msgid "Actualizar Categoría"
+msgstr "Kategorie aktualisieren"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:565
+msgid "Categoría actualizada"
+msgstr "Kategorie aktualisiert"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:573
+msgid "Categorías eliminadas"
+msgstr "Kategorien gelöscht"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:614
+msgid "Crear Autorización"
+msgstr "Berechtigung hinzufügen"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:615
+msgid "Autorización creada"
+msgstr "Authentifizierung hinzugefügt"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:622
+msgid "Actualizar Autorización"
+msgstr "Autorisierung aktualisieren"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:623
+msgid "Autorización actualizada"
+msgstr "Authentifizierung aktualisiert"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:632
+msgid "Autorizaciones eliminadas"
+msgstr "Berechtigungen gelöscht"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:636
+msgid "Autorización eliminada"
+msgstr "Authentifizierung gelöscht"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:665
+msgid "Crear Campo"
+msgstr "Feld hinzufügen"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:666
+msgid "Campo creado"
+msgstr "Feld hinzugefügt"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:672
+msgid "Actualizar Campo"
+msgstr "Feld aktualisieren"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:673
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:216
+msgid "Campo actualizado"
+msgstr "Feld aktualisiert"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:680
+msgid "Campos eliminados"
+msgstr "Felder gelöscht"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:684
+msgid "Campo eliminado"
+msgstr "Feld gelöscht"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:716
+msgid "Crear Enlace"
+msgstr "Link hinzufügen"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:717
+msgid "Enlace creado"
+msgstr "Link erstellt"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:726
+msgid "Actualizar Enlace"
+msgstr "Link aktualisieren"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:727
+msgid "Enlace actualizado"
+msgstr "Link aktualisiert"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:736
+msgid "Enlaces eliminados"
+msgstr "Links gelöscht"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:742
+msgid "Enlace eliminado"
+msgstr "Link gelöscht"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:773
+msgid "Crear Etiqueta"
+msgstr "Tag hinzufügen"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:774
+#: ../../../../inc/SP/Import/ImportBase.class.php:205
+msgid "Etiqueta creada"
+msgstr "Tag hinzugefügt"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:780
+msgid "Actualizar Etiqueta"
+msgstr "Tag aktualisieren"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:781
+msgid "Etiqueta actualizada"
+msgstr "Tag aktualisiert"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:788
+msgid "Etiquetas eliminadas"
+msgstr "Tags gelöscht"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:794
+msgid "Etiqueta eliminada"
+msgstr "Tag entfernt"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:821
+msgid "Archivos eliminados"
+msgstr "Dateien gelöscht"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:860
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:868
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:875
+msgid "Actualizar Plugin"
+msgstr "Plugin aktualisieren"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:861
+msgid "Plugin habilitado"
+msgstr "Plugin aktiviert"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:869
+msgid "Plugin deshabilitado"
+msgstr "Plugin deaktiviert"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:876
+msgid "Plugin restablecido"
+msgstr "Plugin zurückgesetzt"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:924
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:933
+msgid "Actualizar Cuenta"
+msgstr "Konto ändern"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:925
+msgid "Cuenta actualizada"
+msgstr "Konto aktualisiert"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:943
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1155
+msgid "Cuenta restaurada"
+msgstr "Konto wiederhergestellt"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:964
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1174
+msgid "Cuentas eliminadas"
+msgstr "Konten entfernt"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:995
+msgid "Favorito añadido"
+msgstr "Favorit hinzugefügt"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1000
+msgid "Favorito eliminado"
+msgstr "Favorit gelöscht"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1017
+msgid "Importación de usuarios de LDAP realizada"
+msgstr "LDAP-Benutzerimport abgeschlossen"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1018
+msgid "Usuarios importados"
+msgstr "Importierte Benutzer"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1023
+msgid "Error al importar usuarios de LDAP"
+msgstr "Fehler beim Import von LDAP-Benutzern"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1041
+msgid "Notificación leída"
+msgstr "Benachrichtigung gelesen"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1049
+msgid "Notificación creada"
+msgstr "Benachrichtigung erstellt"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1057
+msgid "Notificación actualizada"
+msgstr "Benachrichtigung aktualisiert"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1063
+msgid "Notificaciones eliminadas"
+msgstr "Benachrichtigungen gelöscht"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1067
+msgid "Notificación eliminada"
+msgstr "Benachrichtigung gelöscht"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1085
+#: ../../../../inc/SP/Forms/NoticeForm.class.php:95
+msgid "Es necesaria una descripción"
+msgstr "Beschreibung ist notwendig"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1100
+msgid "Solicitud de Modificación de Cuenta"
+msgstr "Kontoänderung initiiert"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1101
+msgid "Solicitante"
+msgstr "Anfrager"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1119
+msgid "Solicitud enviada por correo"
+msgstr "Anfrage per E-Mail gesendet"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1121
+msgid "Solicitud no enviada por correo"
+msgstr "Anfrage nicht per E-Mail gesendet"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1130
+msgid "Solicitud"
+msgstr "Anfragen"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1137
+msgid "Solicitud realizada"
+msgstr "Anfrage erledigt"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1171
+#, fuzzy
+msgid "Eliminar Cuenta (H)"
+msgstr "Konto löschen"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:123
+msgid "Ver Usuario"
+msgstr "Benutzer anzeigen"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:140
+msgid "Ver Grupo"
+msgstr "Gruppe anzeigen"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:153
+msgid "Ver Perfil"
+msgstr "Profil anzeigen"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:166
+msgid "Ver Cliente"
+msgstr "Kunde anzeigen"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:179
+msgid "Ver Categoría"
+msgstr "Kategorie anzeigen"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:192
+msgid "Ver Autorización"
+msgstr "Authentifizierung anzeigen"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:213
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:73
+msgid "Ver Enlace Público"
+msgstr "Öffentlichen Link anzeigen"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:226
+#: ../../../../js/strings.js.php:72
+msgid "Clave de Cuenta"
+msgstr "Account Passwort"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:230
+msgid "Detalles de Plugin"
+msgstr "Plugin Details"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:401
+msgid "Token de autorización visualizado"
+msgstr "Berechtigungstoken angesehen"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:402
+msgid "Autorizaciones"
+msgstr "Berechtigungen"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:495
+msgid "La clave maestra no coincide"
+msgstr "Master-Passwort stimmt nicht"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:93
+msgid "Inicio sesión"
+msgstr "Anmelden"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:109
+msgid "Usuario/Clave no introducidos"
+msgstr "Keine Benutzername/Passwort eingegeben"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:132
+#: ../../../../inc/SP/Controller/LoginController.class.php:348
+#: ../../../../inc/SP/Controller/LoginController.class.php:402
+#: ../../../../inc/SP/Controller/LoginController.class.php:424
+msgid "Login incorrecto"
+msgstr "Fehlerhafte Anmeldung"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:180
+msgid "Error al obtener los datos del usuario de la BBDD"
+msgstr "Fehler beim Laden der Benutzerdaten aus der Datenbank"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:195
+#: ../../../../inc/SP/Controller/LoginController.class.php:198
+msgid "Usuario deshabilitado"
+msgstr "Benutzer gespert"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:255
+msgid "Error al obtener la clave maestra del usuario"
+msgstr "Fehler beim Abrufen des Master Pass"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:276
+msgid "Usando clave temporal"
+msgstr "Temporäres Kennwort verwenden"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:282
+#: ../../../../inc/SP/Controller/LoginController.class.php:284
+#: ../../../../inc/SP/Controller/LoginController.class.php:292
+#: ../../../../inc/SP/Controller/LoginController.class.php:294
+msgid "Clave maestra incorrecta"
+msgstr "Ungültiges Master-Passwort"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:305
+msgid "Es necesaria su clave anterior"
+msgstr "Ihr altes Passwort wird benötigt"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:308
+msgid "La clave maestra no ha sido guardada o es incorrecta"
+msgstr "Master-Passwort ist nicht sicher oder stimmt nicht"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:352
+msgid "Cuenta expirada"
+msgstr "Konto abgelaufen"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:356
+msgid "El usuario no tiene grupos asociados"
+msgstr "Der Benutzer hat keine zugewiesene Gruppe"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:370
+msgid "Servidor LDAP"
+msgstr "LDAP Server"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:427
+msgid "Autentificación"
+msgstr "Authentifizierung"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:248
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:72
+msgid "Buscar"
+msgstr "Suchen"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:267
+msgid "Usuarios y Accesos"
+msgstr "Benutzer und Zugriffe"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:277
+msgid "Elementos y Personalización"
+msgstr "Artikel und Anpassungen"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:297
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:7
+msgid "Registro de Eventos"
+msgstr "Ereignisprotokoll"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:357
+#: ../../../../inc/SP/Core/Init.class.php:131
msgid "Versión de PHP requerida >= "
msgstr "Benötigte PHP version muss >= xyz sein"
-#: ../../../../inc/Util.class.php:120
+#: ../../../../inc/SP/Controller/MainController.class.php:358
+#: ../../../../inc/SP/Core/Init.class.php:132
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."
-#: ../../../../inc/Util.class.php:156
-#: ../../../../inc/themes/classic/ldap.inc:212
-#: ../../../../inc/themes/material-blue/ldap.inc:238
+#: ../../../../inc/SP/Controller/MainController.class.php:368
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:265
msgid "Módulo no disponible"
msgstr "Modul verfügbar"
-#: ../../../../inc/Util.class.php:157
+#: ../../../../inc/SP/Controller/MainController.class.php:369
msgid "Sin este módulo la aplicación puede no funcionar correctamente."
msgstr "Ohne dieses Modul wird die Anwendung nicht korrekt funktionieren."
-#: ../../../../inc/XmlExport.class.php:127
-msgid "Exportar XML"
-msgstr "XML Export"
-
-#: ../../../../inc/XmlExport.class.php:412
-msgid "Error al crear el archivo XML"
-msgstr "Fehler beim erstellen der XML Datei"
-
-#: ../../../../inc/XmlImport.class.php:63
-msgid "Formato detectado"
-msgstr "Erkanntest Format"
-
-#: ../../../../inc/XmlImportBase.class.php:80
-msgid "No es posible procesar el archivo XML"
-msgstr "XML-Datei kann nicht verarbeitet werden"
-
-#: ../../../../inc/XmlImportBase.class.php:108
-msgid "Archivo XML no soportado"
-msgstr "XML-Datei wird nicht unterstützt"
-
-#: ../../../../inc/XmlImportBase.class.php:109
-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"
-
-#: ../../../../js/strings.js.php:28
-msgid "Ha ocurrido un error"
-msgstr "Ein Fehler ist aufgetreten"
-
-#: ../../../../js/strings.js.php:29
-#: ../../../../inc/themes/classic/login.inc:52
-#: ../../../../inc/themes/material-blue/login.inc:78
-msgid "Sesión finalizada"
-msgstr "Sitzung beendet"
-
-#: ../../../../js/strings.js.php:30
-msgid "Borrar la cuenta?"
-msgstr "Account löschen?"
-
-#: ../../../../js/strings.js.php:31
-msgid "Borrar el usuario?"
-msgstr "Benutzer löschen?"
-
-#: ../../../../js/strings.js.php:32
-msgid "Guarde la configuración para que sea efectiva"
-msgstr "Bitte speichern Sie die Konfiguration, um wirksam"
-
-#: ../../../../js/strings.js.php:33
-msgid "Clave Generada"
-msgstr "Generiertes Passwort"
-
-#: ../../../../js/strings.js.php:34
-msgid "Nivel alto"
-msgstr "Hohe"
-
-#: ../../../../js/strings.js.php:35
-msgid "Nivel medio"
-msgstr "Mittelstufe"
-
-#: ../../../../js/strings.js.php:36
-msgid "Nivel bajo"
-msgstr "Low-Pegel"
-
-#: ../../../../js/strings.js.php:37
-msgid "Nivel muy alto"
-msgstr "Sehr hohes Niveau"
-
-#: ../../../../js/strings.js.php:38
-msgid "Utilizar al menos 8 caracteres"
-msgstr "Verwenden Sie mindestens 8 Zeichen"
-
-#: ../../../../js/strings.js.php:39
-msgid "Borrar elemento?"
-msgstr "Artikel löschen?"
-
-#: ../../../../js/strings.js.php:40
-msgid "Página no encontrada"
-msgstr "Seite nicht gefunden"
-
-#: ../../../../js/strings.js.php:41
-msgid "Archivo no soportado para visualizar"
-msgstr "Die Datei, nicht unterstützt"
-
-#: ../../../../js/strings.js.php:42
-msgid "Eliminar archivo?"
-msgstr "Datei löschen?"
-
-#: ../../../../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"
-
-#: ../../../../js/strings.js.php:44
-msgid "Demasiados archivos"
-msgstr "Zu viele Dateien"
-
-#: ../../../../js/strings.js.php:45
-msgid "Tamaño de archivo no permitido"
-msgstr "Dateigröße nicht erlaubt"
-
-#: ../../../../js/strings.js.php:47
-msgid "Vaciar el registro de eventos?"
-msgstr "Klar Ereignisprotokoll?"
-
-#: ../../../../js/strings.js.php:48
-msgid "Seleccionar Grupo"
-msgstr "Gruppe auswählen"
-
-#: ../../../../js/strings.js.php:49
-msgid "Seleccionar Usuario"
-msgstr "Benutzer auswählen"
-
-#: ../../../../js/strings.js.php:50
-msgid "Seleccionar Perfil"
-msgstr "Profil auswählen"
-
-#: ../../../../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 "Komplexität"
-
-#: ../../../../js/strings.js.php:57
-msgid "Restablecer"
-msgstr "Reset"
-
-#: ../../../../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 "Einbezogene Nummbern"
-
-#: ../../../../js/strings.js.php:63
-msgid "Incluir Mayúsculas"
-msgstr "Benötigt Großbuchstaben"
-
-#: ../../../../js/strings.js.php:64
-msgid "Incluir Símbolos"
-msgstr "Benötigt Symbole"
-
-#: ../../../../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:136
-#: ../../../../inc/themes/classic/account.inc:167
-#: ../../../../inc/themes/classic/account.inc:458
-#: ../../../../inc/themes/classic/config.inc:70
-#: ../../../../inc/themes/classic/config.inc:86
-#: ../../../../inc/themes/classic/config.inc:102
-#: ../../../../inc/themes/classic/config.inc:118
-#: ../../../../inc/themes/classic/config.inc:134
-#: ../../../../inc/themes/classic/config.inc:150
-#: ../../../../inc/themes/classic/config.inc:166
-#: ../../../../inc/themes/classic/config.inc:182
-#: ../../../../inc/themes/classic/config.inc:255
-#: ../../../../inc/themes/classic/config.inc:274
-#: ../../../../inc/themes/classic/customfields.inc:46
-#: ../../../../inc/themes/classic/install.inc:99
-#: ../../../../inc/themes/classic/ldap.inc:25
-#: ../../../../inc/themes/classic/ldap.inc:195
-#: ../../../../inc/themes/classic/mail.inc:14
-#: ../../../../inc/themes/classic/mail.inc:40
-#: ../../../../inc/themes/classic/mail.inc:88
-#: ../../../../inc/themes/classic/preferences.inc:48
-#: ../../../../inc/themes/classic/preferences.inc:82
-#: ../../../../inc/themes/classic/preferences.inc:99
-#: ../../../../inc/themes/classic/preferences.inc:116
-#: ../../../../inc/themes/classic/security.inc:26
-#: ../../../../inc/themes/classic/wiki.inc:20
-msgid "SI"
-msgstr "Ja"
-
-#: ../../../../js/strings.js.php:68
-#: ../../../../inc/themes/classic/account.inc:136
-#: ../../../../inc/themes/classic/account.inc:167
-#: ../../../../inc/themes/classic/account.inc:456
-#: ../../../../inc/themes/classic/config.inc:70
-#: ../../../../inc/themes/classic/config.inc:86
-#: ../../../../inc/themes/classic/config.inc:102
-#: ../../../../inc/themes/classic/config.inc:118
-#: ../../../../inc/themes/classic/config.inc:134
-#: ../../../../inc/themes/classic/config.inc:150
-#: ../../../../inc/themes/classic/config.inc:166
-#: ../../../../inc/themes/classic/config.inc:182
-#: ../../../../inc/themes/classic/config.inc:255
-#: ../../../../inc/themes/classic/config.inc:274
-#: ../../../../inc/themes/classic/customfields.inc:46
-#: ../../../../inc/themes/classic/encryption.inc:58
-#: ../../../../inc/themes/classic/encryption.inc:77
-#: ../../../../inc/themes/classic/import.inc:67
-#: ../../../../inc/themes/classic/install.inc:99
-#: ../../../../inc/themes/classic/ldap.inc:25
-#: ../../../../inc/themes/classic/ldap.inc:195
-#: ../../../../inc/themes/classic/mail.inc:14
-#: ../../../../inc/themes/classic/mail.inc:40
-#: ../../../../inc/themes/classic/mail.inc:88
-#: ../../../../inc/themes/classic/preferences.inc:48
-#: ../../../../inc/themes/classic/preferences.inc:82
-#: ../../../../inc/themes/classic/preferences.inc:99
-#: ../../../../inc/themes/classic/preferences.inc:116
-#: ../../../../inc/themes/classic/security.inc:26
-#: ../../../../inc/themes/classic/tokens.inc:36
-#: ../../../../inc/themes/classic/wiki.inc:20
-msgid "NO"
-msgstr "Nein"
-
-#: ../../../../js/strings.js.php:69
-msgid "Aceptar"
-msgstr "Annehmen"
-
-#: ../../../../js/strings.js.php:70
-msgid "Cancelar"
-msgstr "Abbrechen"
-
-#: ../../../../js/strings.js.php:71
-msgid "Clave Copiada al Portapapeles"
-msgstr "Passwort in die Zwischenablage kopiert"
-
-#: ../../../../js/strings.js.php:72
-msgid "Error al copiar al portapapeles"
-msgstr "Fehler beim Kopieren in die Zwischenablage"
-
-#: ../../../../web/AccountC.class.php:386
-#: ../../../../web/AccountC.class.php:417
-#: ../../../../inc/themes/classic/search.inc:75
-#: ../../../../inc/themes/classic/search.inc:134
-#: ../../../../inc/themes/material-blue/search.inc:77
-#: ../../../../inc/themes/material-blue/search.inc:144
-msgid "Detalles de Cuenta"
-msgstr "Kontodetails"
-
-#: ../../../../web/AccountC.class.php:474
-#: ../../../../inc/themes/classic/account.inc:403
-#: ../../../../inc/themes/material-blue/account.inc:444
-msgid "Modificar Clave de Cuenta"
-msgstr "Konto-Passwort ändern"
-
-#: ../../../../web/AccountsMgmtC.class.php:80
-#: ../../../../web/AccountsMgmtC.class.php:139
-#: ../../../../web/AccountsMgmtC.class.php:267
-#: ../../../../web/SearchC.class.php:293
-#: ../../../../web/UsersMgmtC.class.php:88
-#: ../../../../web/UsersMgmtC.class.php:188
-#: ../../../../web/UsersMgmtC.class.php:246
-#: ../../../../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:73
-#: ../../../../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:75
-#: ../../../../inc/themes/material-blue/users.inc:8
-msgid "Nombre"
-msgstr "Name"
-
-#: ../../../../web/AccountsMgmtC.class.php:116
-msgid "Gestión de Categorías"
-msgstr "Kategorienverwaltung"
-
-#: ../../../../web/AccountsMgmtC.class.php:173
-msgid "Gestión de Clientes"
-msgstr "Kundenverwaltung"
-
-#: ../../../../web/AccountsMgmtC.class.php:267
-#: ../../../../inc/themes/classic/customfields.inc:27
-#: ../../../../inc/themes/material-blue/customfields.inc:30
-msgid "Módulo"
-msgstr "Module"
-
-#: ../../../../web/AccountsMgmtC.class.php:288
-msgid "Eliminar Campo"
-msgstr "Feld löschen"
-
-#: ../../../../web/ConfigC.class.php:168
-msgid "Último backup"
-msgstr "Letztes Backup"
-
-#: ../../../../web/ConfigC.class.php:168
-msgid "No se encontraron backups"
-msgstr "Es existieren keine Backups"
-
-#: ../../../../web/ConfigC.class.php:175
-msgid "Última exportación"
-msgstr "letzter Export"
-
-#: ../../../../web/ConfigC.class.php:175
-msgid "No se encontró archivo de exportación"
-msgstr "Keine Exportdatei gefunden"
-
-#: ../../../../web/ConfigC.class.php:220
-msgid "Información"
-msgstr "Information"
-
-#: ../../../../web/EventlogC.class.php:95
-msgid "Registro de eventos vaciado"
-msgstr "Protokol gelöscht"
-
-#: ../../../../web/EventlogC.class.php:97
-msgid "Error al vaciar el registro de eventos"
-msgstr "Fehler beim Löschen des Protokols"
-
-#: ../../../../web/MainC.class.php:159
-#: ../../../../web/UsersMgmtC.class.php:101
-msgid "Admin Aplicación"
-msgstr "Anwendungs-Administrator"
-
-#: ../../../../web/MainC.class.php:177
-msgid "Buscar"
-msgstr "Suchen"
-
-#: ../../../../web/MainC.class.php:189
-msgid "Usuarios y Accesos"
-msgstr "Benutzer und Zugriffe"
-
-#: ../../../../web/MainC.class.php:195
-msgid "Elementos y Personalización"
-msgstr "Artikel und Anpassungen"
-
-#: ../../../../web/MainC.class.php:207
-#: ../../../../inc/themes/classic/eventlog.inc:2
-#: ../../../../inc/themes/material-blue/eventlog.inc:2
-msgid "Registro de Eventos"
-msgstr "Protokol"
-
-#: ../../../../web/MainC.class.php:228
-msgid "Nuevo estilo visual basado en Material Design Lite by Google"
-msgstr "Neues Design basierend auf Design von Google"
-
-#: ../../../../web/MainC.class.php:229
-msgid "Usuarios en múltiples grupos"
-msgstr "Nutzer können zu mehreren Gruppen gehören"
-
-#: ../../../../web/MainC.class.php:230
-msgid "Previsualización de imágenes"
-msgstr "Bilder Vorgenerierung"
-
-#: ../../../../web/MainC.class.php:231
-msgid "Mostrar claves como imágenes"
-msgstr "Zeige Passwörter als Bilder"
-
-#: ../../../../web/MainC.class.php:232
-msgid "Campos personalizados"
-msgstr "Benutzerdefinierte Felder"
-
-#: ../../../../web/MainC.class.php:233
-msgid "API de consultas"
-msgstr "API Abfragen"
-
-#: ../../../../web/MainC.class.php:234
-#: ../../../../inc/themes/classic/2fa.inc:9
-#: ../../../../inc/themes/material-blue/2fa.inc:7
-#: ../../../../inc/themes/material-blue/security.inc:11
-msgid "Autentificación en 2 pasos"
-msgstr "Zwei-Faktor Authentifizierung"
-
-#: ../../../../web/MainC.class.php:235
-msgid "Complejidad de generador de claves"
-msgstr "Zufälligkeitsgenerator mit konfigurierbarer Komplexität"
-
-#: ../../../../web/MainC.class.php:236
-msgid "Consultas especiales"
-msgstr "Spezialabfragen"
-
-#: ../../../../web/MainC.class.php:237
-msgid "Exportación a XML"
-msgstr "XML Export"
-
-#: ../../../../web/MainC.class.php:238
-msgid "Clave maestra temporal"
-msgstr "temporäres Master-Passwort"
-
-#: ../../../../web/MainC.class.php:239
-msgid "Importación de cuentas desde sysPass, KeePass, KeePassX y CSV"
-msgstr "Account Import von KeePass, KeePassX oder CSV"
-
-#: ../../../../web/MainC.class.php:240
-msgid "Optimización del código y mayor rapidez de carga"
-msgstr "Code Optimierung und verschnellertes Laden"
-
-#: ../../../../web/MainC.class.php:241
-msgid "Mejoras de seguridad en XSS e inyección SQL"
-msgstr "Verbesserte Sicherheit um XSS und SQL injections zu verhindern"
-
-#: ../../../../web/MainC.class.php:282
+#: ../../../../inc/SP/Controller/MainController.class.php:377
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:283
+#: ../../../../inc/SP/Controller/MainController.class.php:378
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:290
+#: ../../../../inc/SP/Controller/MainController.class.php:384
msgid "No se encuentra el generador de números aleatorios."
msgstr "Zufallszahlengenerator konnte nicht gefunden werden"
-#: ../../../../web/MainC.class.php:291
+#: ../../../../inc/SP/Controller/MainController.class.php:385
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:310
-msgid "Instalación finalizada"
-msgstr "Installation beendet"
-
-#: ../../../../web/MainC.class.php:311
-msgid "Pulse aquí para acceder"
-msgstr ""
-"Klicken Sie hier für den Zugriff"
-
-#: ../../../../web/MainC.class.php:408
+#: ../../../../inc/SP/Controller/MainController.class.php:457
msgid "Descargar nueva versión"
msgstr "Neu Version herunterladen"
-#: ../../../../web/MainC.class.php:419
+#: ../../../../inc/SP/Controller/MainController.class.php:469
msgid "Avisos de sysPass"
msgstr "sysPass Neuigkeiten"
-#: ../../../../web/SearchC.class.php:286
-msgid "Ordenar por Cliente"
-msgstr "Nach Kunde sortieren"
+#: ../../../../inc/SP/Controller/MainController.class.php:572
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:74
+msgid "Enlace visualizado"
+msgstr "Link angesehen"
-#: ../../../../web/SearchC.class.php:292
-msgid "Ordenar por Nombre"
-msgstr "Nach Name sortieren"
+#: ../../../../inc/SP/Controller/MainController.class.php:575
+msgid "Agente"
+msgstr "Agent"
-#: ../../../../web/SearchC.class.php:298
-msgid "Ordenar por Categoría"
-msgstr "Nach Kategorie sortieren"
-
-#: ../../../../web/SearchC.class.php:304
-msgid "Ordenar por Usuario"
-msgstr "Nach Benutzername sortieren"
-
-#: ../../../../web/SearchC.class.php:310
-msgid "Ordenar por URL / IP"
-msgstr "Nach URL/IP sortieren"
-
-#: ../../../../web/SearchC.class.php:311
-#: ../../../../inc/themes/classic/account.inc:61
-#: ../../../../inc/themes/classic/editpass.inc:16
-#: ../../../../inc/themes/classic/request.inc:13
-#: ../../../../inc/themes/classic/search.inc:96
-#: ../../../../inc/themes/material-blue/account.inc:70
-#: ../../../../inc/themes/material-blue/editpass.inc:17
-#: ../../../../inc/themes/material-blue/request.inc:15
-#: ../../../../inc/themes/material-blue/search.inc:98
-msgid "URL / IP"
-msgstr "URL/IP"
-
-#: ../../../../web/UsersMgmtC.class.php:92
-msgid "Propiedades"
-msgstr "Eigenschaften"
-
-#: ../../../../web/UsersMgmtC.class.php:105
-msgid "Admin Cuentas"
-msgstr "Konto-Administrator"
-
-#: ../../../../web/UsersMgmtC.class.php:113
-#: ../../../../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:130
-msgid "Ver Detalles de Usuario"
-msgstr "Benutzerdetails anzeigen"
-
-#: ../../../../web/UsersMgmtC.class.php:144
-msgid "Cambiar Clave de Usuario"
-msgstr "Benutzerpasswort Ändern"
-
-#: ../../../../web/UsersMgmtC.class.php:164
-msgid "Gestión de Usuarios"
-msgstr "Benutzerverwaltung"
-
-#: ../../../../web/UsersMgmtC.class.php:223
-msgid "Gestión de Grupos"
-msgstr "Gruppenverwaltung"
-
-#: ../../../../web/UsersMgmtC.class.php:261
-msgid "Ver Detalles de Perfil"
-msgstr "Zeige Nutzerdetails"
-
-#: ../../../../web/UsersMgmtC.class.php:288
-msgid "Gestión de Perfiles"
-msgstr "Profilverwaltung"
-
-#: ../../../../web/UsersMgmtC.class.php:408
-msgid "Ver token de Autorización"
-msgstr "Zeige Berechtigungstoken"
-
-#: ../../../../web/UsersMgmtC.class.php:435
-msgid "Gestión de Autorizaciones API"
-msgstr "API Berechtigungsmanagement"
-
-#: ../../../../web/UsersMgmtC.class.php:457
-msgid "Token de autorización visualizado"
-msgstr "Berechtigungstoken angesehen"
-
-#: ../../../../web/UsersMgmtC.class.php:458
-msgid "Autorizaciones"
-msgstr "Berechtigungen"
-
-#: ../../../../web/UsersPrefsC.class.php:93
-#: ../../../../inc/themes/classic/mail.inc:63
-#: ../../../../inc/themes/material-blue/mail.inc:86
-msgid "Seguridad"
-msgstr "Sicherheit"
-
-#: ../../../../web/UsersPrefsC.class.php:118
-#: ../../../../inc/themes/classic/sessionbar.inc:9
+#: ../../../../inc/SP/Controller/UserPreferencesController.class.php:90
msgid "Preferencias"
msgstr "Vorlieben"
-#: ../../../../inc/themes/classic/2fa.inc:14
-#: ../../../../inc/themes/material-blue/2fa.inc:12
-msgid "Introducir código"
-msgstr "Code eingeben"
+#: ../../../../inc/SP/Core/Acl.class.php:166
+msgid "Acceso denegado"
+msgstr "Zugang verweigert"
-#: ../../../../inc/themes/classic/2fa.inc:26
-msgid "Verificar"
-msgstr "bestätigen"
+#: ../../../../inc/SP/Core/Acl.class.php:184
+msgid "Buscar Cuentas"
+msgstr "Benutzer suchen"
-#: ../../../../inc/themes/classic/account.inc:14
-#: ../../../../inc/themes/material-blue/account.inc:21
-msgid "Nombre de cuenta"
-msgstr "Kontoname"
+#: ../../../../inc/SP/Core/Acl.class.php:185
+msgid "Ver Cuenta"
+msgstr "Benutzer ansehen"
-#: ../../../../inc/themes/classic/account.inc:35
-msgid "Buscar en desplegable o introducir"
-msgstr "Weitersuchen"
+#: ../../../../inc/SP/Core/Acl.class.php:189
+msgid "Editar Clave de Cuenta"
+msgstr "Benutzerpasswort ändern"
-#: ../../../../inc/themes/classic/account.inc:64
-#: ../../../../inc/themes/material-blue/account.inc:76
-msgid "URL o IP de acceso"
-msgstr "Auf URL/IP zugreifen"
+#: ../../../../inc/SP/Core/Acl.class.php:190
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:61
+msgid "Ver Historial"
+msgstr "Verlauf anzeigen"
-#: ../../../../inc/themes/classic/account.inc:76
-#: ../../../../inc/themes/material-blue/account.inc:90
-msgid "Usuario de acceso"
-msgstr "Benutzer für Zugriff"
+#: ../../../../inc/SP/Core/Acl.class.php:194
+msgid "Peticiones"
+msgstr "Anfragen"
-#: ../../../../inc/themes/classic/account.inc:93
-#: ../../../../inc/themes/classic/editpass.inc:31
-#: ../../../../inc/themes/classic/passreset.inc:35
-#: ../../../../inc/themes/classic/users.inc:83
-#: ../../../../inc/themes/classic/userspass.inc:19
-#: ../../../../inc/themes/classic/userspass.inc:21
-#: ../../../../inc/themes/material-blue/account.inc:109
-#: ../../../../inc/themes/material-blue/editpass.inc:36
-#: ../../../../inc/themes/material-blue/install.inc:67
-#: ../../../../inc/themes/material-blue/passreset.inc:36
-#: ../../../../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/SP/Core/Acl.class.php:195
+msgid "Gestión Aplicación"
+msgstr "Anwendungsverwaltung"
-#: ../../../../inc/themes/classic/account.inc:100
-#: ../../../../inc/themes/classic/search.inc:112
-#: ../../../../inc/themes/classic/users.inc:91
-#: ../../../../inc/themes/material-blue/account.inc:120
-#: ../../../../inc/themes/material-blue/search.inc:118
-#: ../../../../inc/themes/material-blue/users.inc:116
-msgid "Notas"
-msgstr "Bemerkungen"
+#: ../../../../inc/SP/Core/Acl.class.php:196
+msgid "Gestión Categorías"
+msgstr "Kategorienverwaltung"
-#: ../../../../inc/themes/classic/account.inc:102
-#: ../../../../inc/themes/material-blue/account.inc:125
-#: ../../../../inc/themes/material-blue/users.inc:123
-msgid "Notas sobre la cuenta"
-msgstr "Bemerkungen zum Konto"
+#: ../../../../inc/SP/Core/Acl.class.php:197
+msgid "Buscar Categorías"
+msgstr "Kategorien suchen"
-#: ../../../../inc/themes/classic/account.inc:108
-#: ../../../../inc/themes/material-blue/account.inc:134
-#: ../../../../inc/themes/material-blue/search.inc:111
-msgid "Permisos"
-msgstr "Berechtigungen"
+#: ../../../../inc/SP/Core/Acl.class.php:198
+msgid "Añadir Categoría"
+msgstr "Kategorie hinzufügen"
-#: ../../../../inc/themes/classic/account.inc:135
-#: ../../../../inc/themes/classic/account.inc:166
-#: ../../../../inc/themes/material-blue/account.inc:163
-#: ../../../../inc/themes/material-blue/account.inc:195
-msgid "Hablitar edición"
-msgstr "Erlaube Änderungen"
+#: ../../../../inc/SP/Core/Acl.class.php:201
+msgid "Gestión Clientes"
+msgstr "Kundenverwaltung"
-#: ../../../../inc/themes/classic/account.inc:201
-#: ../../../../inc/themes/material-blue/account.inc:245
-msgid "Soltar archivos aquí (max. 5) o click para seleccionar"
-msgstr "Dateien hier fallen lassen (max. 5) oder zum selektieren anklicken"
+#: ../../../../inc/SP/Core/Acl.class.php:202
+msgid "Buscar Clientes"
+msgstr "Kunden suchen"
-#: ../../../../inc/themes/classic/account.inc:201
-#: ../../../../inc/themes/classic/config.inc:212
-#: ../../../../inc/themes/material-blue/account.inc:245
-#: ../../../../inc/themes/material-blue/config.inc:328
-msgid "Tamaño máximo de archivo"
-msgstr "Maximale Dateigröße"
+#: ../../../../inc/SP/Core/Acl.class.php:203
+msgid "Añadir Cliente"
+msgstr "Kunden hinzufügen"
-#: ../../../../inc/themes/classic/account.inc:223
-#: ../../../../inc/themes/material-blue/account.inc:267
-msgid "Historial"
-msgstr "Protokol"
+#: ../../../../inc/SP/Core/Acl.class.php:206
+msgid "Gestión Campos Personalizados"
+msgstr "Verwaltung benutzerdefinierter Felder"
-#: ../../../../inc/themes/classic/account.inc:242
-#: ../../../../inc/themes/material-blue/account.inc:287
-msgid "Seleccionar fecha"
-msgstr "Datum auswählen"
+#: ../../../../inc/SP/Core/Acl.class.php:207
+msgid "Gestión Autorizaciones API"
+msgstr "Verwaltung der API Authorisation"
-#: ../../../../inc/themes/classic/account.inc:251
-#: ../../../../inc/themes/classic/users.inc:164
-#: ../../../../inc/themes/material-blue/account.inc:296
-#: ../../../../inc/themes/material-blue/users.inc:208
-msgid "Última Modificación"
-msgstr "Letzte Änderung"
+#: ../../../../inc/SP/Core/Acl.class.php:208
+msgid "Gestión de Archivos"
+msgstr "Dateiverwaltung"
-#: ../../../../inc/themes/classic/account.inc:253
-#: ../../../../inc/themes/material-blue/account.inc:298
-msgid "por"
-msgstr "durch"
+#: ../../../../inc/SP/Core/Acl.class.php:209
+msgid "Gestión de Cuentas"
+msgstr "Kontenverwaltung"
-#: ../../../../inc/themes/classic/account.inc:296
-#: ../../../../inc/themes/material-blue/account.inc:347
-msgid "Visitas"
-msgstr "Besuche"
+#: ../../../../inc/SP/Core/Acl.class.php:210
+msgid "Gestión de Etiquetas"
+msgstr "Tagverwaltung"
-#: ../../../../inc/themes/classic/account.inc:300
-#: ../../../../inc/themes/material-blue/account.inc:351
-msgid "Fecha Alta"
-msgstr "Datum hinzugefügt"
+#: ../../../../inc/SP/Core/Acl.class.php:211
+#: ../../../../inc/SP/Core/Acl.class.php:212
+msgid "Gestión Usuarios"
+msgstr "Benutzerverwaltung"
-#: ../../../../inc/themes/classic/account.inc:304
-#: ../../../../inc/themes/material-blue/account.inc:355
-msgid "Creador"
-msgstr "Erzeuger"
+#: ../../../../inc/SP/Core/Acl.class.php:213
+msgid "Gestión Grupos"
+msgstr "Gruppenverwaltung"
-#: ../../../../inc/themes/classic/account.inc:308
-#: ../../../../inc/themes/material-blue/account.inc:204
-#: ../../../../inc/themes/material-blue/account.inc:359
-msgid "Grupo Principal"
-msgstr "Hauptgruppe"
+#: ../../../../inc/SP/Core/Acl.class.php:214
+msgid "Gestión Perfiles"
+msgstr "Profil Verwaltung"
-#: ../../../../inc/themes/classic/account.inc:313
-#: ../../../../inc/themes/material-blue/account.inc:364
-msgid "Usuarios Secundarios"
-msgstr "Unter-Benutzer"
+#: ../../../../inc/SP/Core/Acl.class.php:216
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:226
+msgid "Configuración General"
+msgstr "Allgemeine Einstellungen"
-#: ../../../../inc/themes/classic/account.inc:332
-#: ../../../../inc/themes/material-blue/account.inc:383
-msgid "Grupos Secundarios"
-msgstr "Untergruppe"
+#: ../../../../inc/SP/Core/Acl.class.php:219
+msgid "Exportar"
+msgstr "Exportieren"
-#: ../../../../inc/themes/classic/account.inc:352
-#: ../../../../inc/themes/material-blue/account.inc:403
-msgid "Fecha Edición"
-msgstr "Änderungsdatum"
+#: ../../../../inc/SP/Core/Acl.class.php:220
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:247
+msgid "Importar"
+msgstr "Importieren"
-#: ../../../../inc/themes/classic/account.inc:356
-#: ../../../../inc/themes/material-blue/account.inc:407
-msgid "Editor"
-msgstr "Editor"
+#: ../../../../inc/SP/Core/Acl.class.php:221
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:263
+msgid "Log de Eventos"
+msgstr "Ereignisprotokoll"
-#: ../../../../inc/themes/classic/account.inc:383
-#: ../../../../inc/themes/material-blue/account.inc:470
-msgid "Restaurar cuenta desde este punto"
-msgstr "Wiederherstellen Konto von diesem Punkt"
+#: ../../../../inc/SP/Core/Backup.class.php:55
+msgid "Realizar Backup"
+msgstr "Backup erstellen"
-#: ../../../../inc/themes/classic/account.inc:395
-#: ../../../../inc/themes/classic/search.inc:143
-#: ../../../../inc/themes/material-blue/account.inc:437
-#: ../../../../inc/themes/material-blue/search.inc:154
-msgid "Copiar Clave en Portapapeles"
-msgstr "Passwort in die Zwischenablage kopieren"
+#: ../../../../inc/SP/Core/Backup.class.php:84
+msgid "Copia de la aplicación y base de datos realizada correctamente"
+msgstr "Sicherung der Applikation und der Datenbank erfolgreich durchgeführt"
-#: ../../../../inc/themes/classic/account.inc:410
-#: ../../../../inc/themes/material-blue/account.inc:450
-msgid "Ver Actual"
-msgstr "Ansehen"
+#: ../../../../inc/SP/Core/Backup.class.php:102
+#: ../../../../inc/SP/Core/XmlExport.class.php:515
+#, php-format
+msgid "No es posible crear el directorio de backups (\"%s\")"
+msgstr "Backup Verzeichnis (\"%s\") kann nicht erstellt werden"
-#: ../../../../inc/themes/classic/account.inc:415
-#: ../../../../inc/themes/classic/editpass.inc:45
-#: ../../../../inc/themes/classic/mgmttabs.inc:4
-#: ../../../../inc/themes/classic/passreset.inc:46
-#: ../../../../inc/themes/material-blue/passreset.inc:48
-msgid "Volver"
-msgstr "Zurück"
+#: ../../../../inc/SP/Core/Backup.class.php:106
+#: ../../../../inc/SP/Core/XmlExport.class.php:521
+msgid "Compruebe los permisos del directorio de backups"
+msgstr "Bitte überprüfen Sie die Zugriffsrechte des Backup₋Verzeichnisses"
-#: ../../../../inc/themes/classic/account.inc:422
-#: ../../../../inc/themes/classic/search.inc:155
-#: ../../../../inc/themes/material-blue/account.inc:460
-#: ../../../../inc/themes/material-blue/search.inc:166
-msgid "Modificar Cuenta"
-msgstr "Konto ändern"
+#: ../../../../inc/SP/Core/Backup.class.php:249
+msgid "Esta operación sólo es posible en entornos Linux"
+msgstr "Diese Funktion is nur in einer Linux-Umgebung verfügbar"
-#: ../../../../inc/themes/classic/account.inc:427
-#: ../../../../inc/themes/classic/search.inc:176
-#: ../../../../inc/themes/material-blue/account.inc:464
-#: ../../../../inc/themes/material-blue/search.inc:187
-msgid "Solicitar Modificación"
-msgstr "Änderung initiiert"
+#: ../../../../inc/SP/Core/Backup.class.php:251
+msgid "Error al realizar backup en modo compatibilidad"
+msgstr "Fehler während der Durchführung der Sicherung im Kompatibilitätsmodus"
-#: ../../../../inc/themes/classic/account.inc:434
-#: ../../../../inc/themes/classic/categories.inc:62
-#: ../../../../inc/themes/classic/config.inc:294
-#: ../../../../inc/themes/classic/customers.inc:62
-#: ../../../../inc/themes/classic/customfields.inc:63
-#: ../../../../inc/themes/classic/editpass.inc:50
-#: ../../../../inc/themes/classic/encryption.inc:99
-#: ../../../../inc/themes/classic/groups.inc:77
-#: ../../../../inc/themes/classic/ldap.inc:229
-#: ../../../../inc/themes/classic/mail.inc:107
-#: ../../../../inc/themes/classic/preferences.inc:130
-#: ../../../../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:476
-#: ../../../../inc/themes/material-blue/categories.inc:72
-#: ../../../../inc/themes/material-blue/config.inc:444
-#: ../../../../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/preferences.inc:134
-#: ../../../../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/SP/Core/Crypt.class.php:65
+#: ../../../../inc/SP/Core/Crypt.class.php:74
+#: ../../../../inc/SP/Log/Email.class.php:141
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:70
+#: ../../../../js/strings.js.php:85
+msgid "Aviso"
+msgstr "Warnung"
-#: ../../../../inc/themes/classic/account.inc:444
-#: ../../../../inc/themes/material-blue/account.inc:486
-msgid "Seleccionar grupos secundarios"
-msgstr "Untergruppe auswählen"
+#: ../../../../inc/SP/Core/Crypt.class.php:65
+#: ../../../../inc/SP/Core/Crypt.class.php:74
+msgid ""
+"Se ha regenerado el HASH de clave maestra. No es necesaria ninguna acción."
+msgstr ""
+"Das Master-Password HASH wurde generiert. Es sind keine weiteren Aktionen "
+"nötig. "
-#: ../../../../inc/themes/classic/account.inc:448
-#: ../../../../inc/themes/material-blue/account.inc:489
-msgid "Seleccionar usuarios"
-msgstr "Benutzer auswählen"
+#: ../../../../inc/SP/Core/Crypt.class.php:213
+msgid "No se puede usar el módulo de encriptación"
+msgstr "Kryptographie-Modul konnte nicht geladen werden"
-#: ../../../../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/SP/Core/Crypt.class.php:224
+msgid "Error al generar datos cifrados"
+msgstr "Fehler beim Erzeugen der verschlüsselten Daten"
-#: ../../../../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/SP/Core/CryptMasterPass.class.php:93
+#: ../../../../inc/SP/Core/CryptMasterPass.class.php:106
+msgid "Clave temporal caducada"
+msgstr "Temporäres Kennwort abgelaufen"
-#: ../../../../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/SP/Core/CryptPKI.class.php:48
+msgid "No es posible generar las claves RSA"
+msgstr "Konnte den RSA-Schlüssel nicht c-generieren."
-#: ../../../../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:90
-#: ../../../../inc/themes/classic/encryption.inc:94
-#: ../../../../inc/themes/classic/encryption.inc:159
-#: ../../../../inc/themes/classic/encryption.inc:163
-#: ../../../../inc/themes/classic/import.inc:12
-#: ../../../../inc/themes/classic/import.inc:34
-#: ../../../../inc/themes/classic/import.inc:48
-#: ../../../../inc/themes/classic/import.inc:94
-#: ../../../../inc/themes/classic/import.inc:115
-#: ../../../../inc/themes/classic/import.inc:168
-#: ../../../../inc/themes/classic/import.inc:172
-#: ../../../../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:104
-#: ../../../../inc/themes/material-blue/encryption.inc:108
-#: ../../../../inc/themes/material-blue/encryption.inc:178
-#: ../../../../inc/themes/material-blue/encryption.inc:182
-#: ../../../../inc/themes/material-blue/import.inc:97
-#: ../../../../inc/themes/material-blue/import.inc:101
-#: ../../../../inc/themes/material-blue/js-common.inc:11
+#: ../../../../inc/SP/Core/CryptPKI.class.php:116
+#: ../../../../inc/SP/Core/CryptPKI.class.php:118
+#: ../../../../inc/SP/Core/CryptPKI.class.php:151
+#: ../../../../inc/SP/Core/CryptPKI.class.php:153
+msgid "El archivo de clave no existe"
+msgstr "Die Schlüsseldatei existiert nicht"
+
+#: ../../../../inc/SP/Core/Events/EventDispatcherBase.class.php:80
+msgid "Observador no inicializado"
+msgstr "Observer nicht initialisiert"
+
+#: ../../../../inc/SP/Core/Events/EventDispatcherBase.class.php:110
+msgid "Es necesario un objeto"
+msgstr "Ein Objekt wird benötigt"
+
+#: ../../../../inc/SP/Core/Init.class.php:159
+msgid "Error en la verificación de la base de datos"
+msgstr "Fehler beim der Datenbanküberprüfung"
+
+#: ../../../../inc/SP/Core/Init.class.php:289
+msgid "Sesión"
+msgstr "Sitzung"
+
+#: ../../../../inc/SP/Core/Init.class.php:289
+#: ../../../../inc/SP/Core/Init.class.php:293
+msgid "La sesión no puede ser inicializada"
+msgstr "Sitzung konnte nicht initialisiert werden"
+
+#: ../../../../inc/SP/Core/Init.class.php:427
+#: ../../../../inc/SP/Core/Init.class.php:667
+msgid "Actualización"
+msgstr "Aktualisierung"
+
+#: ../../../../inc/SP/Core/Init.class.php:428
+#: ../../../../inc/SP/Core/Init.class.php:668 ../../../../res/upgrade.php:121
+msgid "Actualización de versión realizada."
+msgstr "Version aktualisiert"
+
+#: ../../../../inc/SP/Core/Init.class.php:450
+msgid "El directorio \"/config\" no existe"
+msgstr "\"/config\" Verzeichnis existiert nicht."
+
+#: ../../../../inc/SP/Core/Init.class.php:455
+msgid "No es posible escribir en el directorio \"config\""
+msgstr "In das Verzeichnis \"/config\" kann nicht geschrieben werden"
+
+#: ../../../../inc/SP/Core/Init.class.php:462
+msgid "Los permisos del directorio \"/config\" son incorrectos"
+msgstr "Das Zugriffsrechte des \"/config\"-Verzeichnisses sind falsch"
+
+#: ../../../../inc/SP/Core/Init.class.php:462
+msgid "Actual:"
+msgstr "Aktuell:"
+
+#: ../../../../inc/SP/Core/Init.class.php:462
+msgid "Necesario: 750"
+msgstr "Erforderlich: 750"
+
+#: ../../../../inc/SP/Core/Init.class.php:545
+msgid "Aplicación en mantenimiento"
+msgstr "Anwendung im Wartungsmodus"
+
+#: ../../../../inc/SP/Core/Init.class.php:545
+msgid "En breve estará operativa"
+msgstr "Es wird in Kürze gestartet"
+
+#: ../../../../inc/SP/Core/Init.class.php:590
+msgid "Finalizar sesión"
+msgstr "Aus Sitzung ausloggen"
+
+#: ../../../../inc/SP/Core/Init.class.php:592
+msgid "Tiempo inactivo"
+msgstr "Zeit ohne Aktivität"
+
+#: ../../../../inc/SP/Core/Init.class.php:593
+msgid "Tiempo total"
+msgstr "Gesamtzeit"
+
+#: ../../../../inc/SP/Core/Init.class.php:636
+msgid "La aplicación necesita actualizarse"
+msgstr "Die Anwendung muss aktualisiert werden"
+
+#: ../../../../inc/SP/Core/Init.class.php:636
+#, php-format
+msgid "Si es un administrador pulse en el enlace: %s"
+msgstr "Wenn SIe ein Administrator sind, klicken sie auf den Link: %s"
+
+#: ../../../../inc/SP/Core/Init.class.php:636
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:57
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:48
+msgid "Actualizar"
+msgstr "Aktualisierung"
+
+#: ../../../../inc/SP/Core/Init.class.php:654
+#: ../../../../inc/themes/material-blue/views/main/login.inc:65
+msgid "Acceder"
+msgstr "Anmeldung"
+
+#: ../../../../inc/SP/Core/Installer.class.php:138
+msgid "Indicar nombre de usuario admin"
+msgstr "Benutzername des Administrators eingeben"
+
+#: ../../../../inc/SP/Core/Installer.class.php:139
+msgid "Usuario admin para acceso a la aplicación"
+msgstr "Administrator der Anwendung"
+
+#: ../../../../inc/SP/Core/Installer.class.php:143
+msgid "Indicar la clave de admin"
+msgstr "Administrator-Passwort eingeben"
+
+#: ../../../../inc/SP/Core/Installer.class.php:144
+msgid "Clave del usuario admin de la aplicación"
+msgstr "Administrationspasswort der Anwendung"
+
+#: ../../../../inc/SP/Core/Installer.class.php:148
+msgid "Indicar la clave maestra"
+msgstr "Master-Passwort eingeben"
+
+#: ../../../../inc/SP/Core/Installer.class.php:149
+msgid "Clave maestra para encriptar las claves"
+msgstr "Master-Passwords zum Verschlüsseln der Passwörter"
+
+#: ../../../../inc/SP/Core/Installer.class.php:153
+msgid "Clave maestra muy corta"
+msgstr "Master-Passwort zu kurz"
+
+#: ../../../../inc/SP/Core/Installer.class.php:154
+msgid "La longitud de la clave maestra ha de ser mayor de 11 caracteres"
+msgstr "Master-Password muss mindestens 11 Zeichen lang sein"
+
+#: ../../../../inc/SP/Core/Installer.class.php:158
+msgid "Indicar el usuario de la BBDD"
+msgstr "Datenbankbenutzer eingeben"
+
+#: ../../../../inc/SP/Core/Installer.class.php:159
+msgid "Usuario con permisos de administrador de la Base de Datos"
+msgstr "Ein Benutzer mit administrativen Rechten in der Datenbank"
+
+#: ../../../../inc/SP/Core/Installer.class.php:163
+msgid "Indicar la clave de la BBDD"
+msgstr "Geben Sie das Passwort für die Datenbank ein"
+
+#: ../../../../inc/SP/Core/Installer.class.php:164
+msgid "Clave del usuario administrador de la Base de Datos"
+msgstr "Passwort des Datenbankadministrators"
+
+#: ../../../../inc/SP/Core/Installer.class.php:168
+msgid "Indicar el nombre de la BBDD"
+msgstr "Datenbankname eingeben"
+
+#: ../../../../inc/SP/Core/Installer.class.php:169
+msgid "Nombre para la BBDD de la aplicación pej. syspass"
+msgstr "Datenbankname der Anwendung, z.B. syspass"
+
+#: ../../../../inc/SP/Core/Installer.class.php:173
+msgid "El nombre de la BBDD no puede contener \".\""
+msgstr "Name der Datenbank darf keine \".\" enthalten"
+
+#: ../../../../inc/SP/Core/Installer.class.php:174
+#, fuzzy
+msgid "Elimine los puntos del nombre de la Base de Datos"
+msgstr "Bitte entfernen Sie den Punkt aus dem Datenbanknamen"
+
+#: ../../../../inc/SP/Core/Installer.class.php:178
+msgid "Indicar el servidor de la BBDD"
+msgstr "Datenbank-Server eingeben"
+
+#: ../../../../inc/SP/Core/Installer.class.php:179
+msgid "Servidor donde se instalará la Base de Datos"
+msgstr "Server auf dem die Datenbank installiert wird"
+
+#: ../../../../inc/SP/Core/Installer.class.php:202
+#: ../../../../inc/SP/Storage/MySQLHandler.class.php:133
+#: ../../../../inc/SP/Storage/MySQLHandler.class.php:136
+#: ../../../../inc/SP/Storage/MySQLHandler.class.php:160
+msgid "No es posible conectar con la BD"
+msgstr "Verbindung zum Datenbank-Server kann nicht hergestellt werden"
+
+#: ../../../../inc/SP/Core/Installer.class.php:203
+#: ../../../../inc/SP/Storage/MySQLHandler.class.php:133
+#: ../../../../inc/SP/Storage/MySQLHandler.class.php:137
+msgid "Compruebe los datos de conexión"
+msgstr "Bitte überprüfen Sie Ihre Verbindungseinstellungen"
+
+#: ../../../../inc/SP/Core/Installer.class.php:237
+msgid "No es posible comprobar el usuario de sysPass"
+msgstr "Überprüfung des sysPass Nutzers nicht möglich"
+
+#: ../../../../inc/SP/Core/Installer.class.php:238
+msgid "Compruebe los permisos del usuario de conexión a la BD"
+msgstr ""
+"Bitte die Berechtigungen des Benutzers zur Datenbankverbindung überprüfen"
+
+#: ../../../../inc/SP/Core/Installer.class.php:284
+#, php-format
+msgid "Error al crear el usuario de conexión a MySQL '%s'"
+msgstr "Fehler beim Erstellen des Benutzers '%s' für die MySQL Verbindung"
+
+#: ../../../../inc/SP/Core/Installer.class.php:300
+msgid "La BBDD ya existe"
+msgstr "Datenbank existiert bereits"
+
+#: ../../../../inc/SP/Core/Installer.class.php:301
+msgid "Indique una nueva Base de Datos o elimine la existente"
+msgstr "Neuen Datenbanknamen eingeben oder bestehende Datenbank löschen"
+
+#: ../../../../inc/SP/Core/Installer.class.php:304
+msgid "La BBDD no existe"
+msgstr "Datenbank existiert nicht"
+
+#: ../../../../inc/SP/Core/Installer.class.php:305
+msgid "Es necesario crearla y asignar los permisos necesarios"
+msgstr "Sie müssen es erstellen und die nötigen Rechte zuweisen"
+
+#: ../../../../inc/SP/Core/Installer.class.php:315
+#: ../../../../inc/SP/Core/Installer.class.php:416
+msgid "Error al crear la BBDD"
+msgstr "Fehler beim Anlegen der Datenbank"
+
+#: ../../../../inc/SP/Core/Installer.class.php:316
+#: ../../../../inc/SP/Core/Installer.class.php:336
+msgid "Verifique los permisos del usuario de la Base de Datos"
+msgstr "Bitte überprüfen Sie die Datenbank-Zugriffsberechtigungen"
+
+#: ../../../../inc/SP/Core/Installer.class.php:335
+#, php-format
+msgid "Error al establecer permisos de la BBDD ('%s')"
+msgstr "Fehler beim Konfigurieren der Datenbankberechtigungen ('%s')"
+
+#: ../../../../inc/SP/Core/Installer.class.php:389
+msgid "El archivo de estructura de la BBDD no existe"
+msgstr "Datei mit Datenbank-Schema existiert nicht"
+
+#: ../../../../inc/SP/Core/Installer.class.php:390
+msgid "No es posible crear la BBDD de la aplicación. Descárguela de nuevo."
+msgstr ""
+"Anwendungsdatenbank kann nicht angelegt werden. Bitte erneut herunterladen"
+
+#: ../../../../inc/SP/Core/Installer.class.php:398
+msgid "Error al seleccionar la BBDD"
+msgstr "Fehler beim Auswählen der Datenbank"
+
+#: ../../../../inc/SP/Core/Installer.class.php:399
+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."
+
+#: ../../../../inc/SP/Core/Installer.class.php:417
+msgid "Error al crear la estructura de la Base de Datos."
+msgstr "Fehler beim Anlegen der Datenbankstruktur"
+
+#: ../../../../inc/SP/Core/Installer.class.php:435
+msgid "Error al comprobar la base de datos"
+msgstr "Fehler beim Überprüfen der Datenbank"
+
+#: ../../../../inc/SP/Core/Installer.class.php:436
+msgid "Intente de nuevo la instalación"
+msgstr "Bitte die Installation erneut versuchen"
+
+#: ../../../../inc/SP/Core/Installer.class.php:458
+msgid "Error al crear el grupo \"admin\""
+msgstr "Fehler beim Anlegen der \"admin\" Gruppe"
+
+#: ../../../../inc/SP/Core/Installer.class.php:459
+#: ../../../../inc/SP/Core/Installer.class.php:471
+#: ../../../../inc/SP/Core/Installer.class.php:489
+#: ../../../../inc/SP/Core/Installer.class.php:502
+msgid "Informe al desarrollador"
+msgstr "Warnung an Entwickler"
+
+#: ../../../../inc/SP/Core/Installer.class.php:470
+msgid "Error al crear el perfil \"admin\""
+msgstr "Fehler beim Anlegen des \"admin\" Profils"
+
+#: ../../../../inc/SP/Core/Installer.class.php:488
+msgid "Error al crear el usuario \"admin\""
+msgstr "Fehler beim Anlegen des \"admin\" Benutzers"
+
+#: ../../../../inc/SP/Core/Installer.class.php:501
+msgid "Error al actualizar la clave maestra del usuario \"admin\""
+msgstr "Fehler beim Ändern des Master-Passworts des Benutzers \"admin\""
+
+#: ../../../../inc/SP/Core/Plugin/PluginDataStore.class.php:76
+msgid "Nuevo Plugin"
+msgstr "Neues Plugin"
+
+#: ../../../../inc/SP/Core/Plugin/PluginUtil.class.php:106
+#: ../../../../inc/SP/Core/Plugin/PluginUtil.class.php:108
+#: ../../../../inc/SP/Core/Plugin/PluginUtil.class.php:161
+#, php-format
+msgid "No es posible cargar el plugin \"%s\""
+msgstr "Plugin \"%s\" konnte nicht hochgeladen werden"
+
+#: ../../../../inc/SP/Core/Template.class.php:126
+#: ../../../../inc/SP/Core/Template.class.php:128
+#: ../../../../inc/SP/Html/DataGrid/DataGridBase.class.php:264
+#, php-format
+msgid "No es posible obtener la plantilla \"%s\" : %s"
+msgstr "Unmöglich die \"%s\" Vorlage zu ermitteln: %s"
+
+#: ../../../../inc/SP/Core/Template.class.php:182
+#: ../../../../inc/SP/Core/Template.class.php:184
+#, php-format
+msgid "No es posible obtener la variable \"%s\""
+msgstr "Unmöglich die \"%s\" Variable zu ermitteln"
+
+#: ../../../../inc/SP/Core/Template.class.php:227
+#: ../../../../inc/SP/Core/Template.class.php:229
+#, php-format
+msgid "No es posible destruir la variable \"%s\""
+msgstr "Unmöglich die Variable \"%s\" zu löschen"
+
+#: ../../../../inc/SP/Core/Template.class.php:246
+msgid "La plantilla no contiene archivos"
+msgstr "Vorlage enthält keine Dateien"
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:65
+msgid "Error al aplicar la actualización de la Base de Datos"
+msgstr "Fehler beim Aktualisieren der Datenbank"
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:66
+#: ../../../../inc/SP/Core/Upgrade.class.php:74
+msgid "Compruebe el registro de eventos para más detalles"
+msgstr "Bitte schauen Sie in das Protokoll für weitere Details"
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:73
+msgid "Error al aplicar la actualización auxiliar"
+msgstr "Ein Fehler beim Update ist aufgetreten"
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:93
+msgid "Actualizar BBDD"
+msgstr "DB aktualisieren"
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:99
+msgid "No es necesario actualizar la Base de Datos."
+msgstr "Keine Datenbankaktualisierung notwendig"
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:111
+msgid "Error al aplicar la actualización de la Base de Datos."
+msgstr "Fehler beim Ändern der Datenbank"
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:121
+msgid "Actualización de la Base de Datos realizada correctamente."
+msgstr "Aktualisierung der Datenbank war erfolgreich."
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:245
+msgid "Actualizar Configuración"
+msgstr "Konfiguration aktualisieren"
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:284
+msgid "Error al actualizar la configuración"
+msgstr "Es ist ein Fehler beim Aktualisieren der Konfiguration aufgetreten"
+
+#: ../../../../inc/SP/Core/XmlExport.class.php:130
+msgid "Exportar XML"
+msgstr "XML Export"
+
+#: ../../../../inc/SP/Core/XmlExport.class.php:143
+msgid "Error al realizar la exportación de cuentas"
+msgstr "Fehler beim exportieren der Accounts"
+
+#: ../../../../inc/SP/Core/XmlExport.class.php:152
+msgid "Exportación de cuentas realizada correctamente"
+msgstr "Export erfolgreich abgeschlossen"
+
+#: ../../../../inc/SP/Core/XmlExport.class.php:478
+msgid "Error al crear el archivo XML"
+msgstr "Fehler beim erstellen der XML Datei"
+
+#: ../../../../inc/SP/Forms/AccountForm.class.php:132
+msgid "Es necesaria una clave"
+msgstr "Ein Schlüssel wird benötigt"
+
+#: ../../../../inc/SP/Forms/AccountForm.class.php:144
+msgid "Es necesario un nombre de cuenta"
+msgstr "Kontoname ist notwendig"
+
+#: ../../../../inc/SP/Forms/AccountForm.class.php:146
+#: ../../../../inc/SP/Forms/CustomerForm.class.php:83
+msgid "Es necesario un nombre de cliente"
+msgstr "Kunde ist notwendig"
+
+#: ../../../../inc/SP/Forms/AccountForm.class.php:148
+msgid "Es necesario un usuario"
+msgstr "Benutzername ist notwendig"
+
+#: ../../../../inc/SP/Forms/AccountForm.class.php:150
+msgid "Es necesario una categoría"
+msgstr "Eine Kategorie wird benötigt"
+
+#: ../../../../inc/SP/Forms/ApiTokenForm.class.php:84
+msgid "Usuario no indicado"
+msgstr "Benutzer nicht gesetzt"
+
+#: ../../../../inc/SP/Forms/ApiTokenForm.class.php:86
+msgid "Acción no indicada"
+msgstr "Aktion nicht gesetzt"
+
+#: ../../../../inc/SP/Forms/CategoryForm.class.php:83
+msgid "Es necesario un nombre de categoría"
+msgstr "Kategoriename ist notwendig"
+
+#: ../../../../inc/SP/Forms/CustomFieldDefForm.class.php:87
+msgid "Nombre del campo no indicado"
+msgstr "Feldname nicht gesetzt"
+
+#: ../../../../inc/SP/Forms/CustomFieldDefForm.class.php:89
+msgid "Tipo del campo no indicado"
+msgstr "Feldtyp nicht gesetzt"
+
+#: ../../../../inc/SP/Forms/CustomFieldDefForm.class.php:91
+msgid "Módulo del campo no indicado"
+msgstr "Feldmodul nicht gesetzt"
+
+#: ../../../../inc/SP/Forms/GroupForm.class.php:84
+msgid "Es necesario un nombre de grupo"
+msgstr "Gruppename ist notwendig"
+
+#: ../../../../inc/SP/Forms/NoticeForm.class.php:91
+msgid "Es necesario un componente"
+msgstr "Eine Komponente wird benötigt"
+
+#: ../../../../inc/SP/Forms/NoticeForm.class.php:93
+msgid "Es necesario un tipo"
+msgstr "Ein Typ wird benötigt"
+
+#: ../../../../inc/SP/Forms/NoticeForm.class.php:100
+msgid "Es necesario un destinatario"
+msgstr "Ein Ziel ist erforderlich"
+
+#: ../../../../inc/SP/Forms/ProfileForm.class.php:111
+msgid "Es necesario un nombre de perfil"
+msgstr "Profil ist notwendig"
+
+#: ../../../../inc/SP/Forms/TagForm.class.php:82
+msgid "Es necesario un nombre de etiqueta"
+msgstr "Es wird ein Tagname benötigt"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:86
+msgid "Es necesario un nombre de usuario"
+msgstr "Benutzername ist notwendig"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:88
+msgid "Es necesario un login"
+msgstr "Login ist notwendig"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:90
+msgid "Es necesario un perfil"
+msgstr "Profil ist notwendig"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:92
+msgid "Es necesario un grupo"
+msgstr "Gruppe ist notwendig"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:94
+msgid "Es necesario un email"
+msgstr "E-Mail ist notwendig"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:110
+msgid "La clave no puede estar en blanco"
+msgstr "Passwort darf nicht leer sein"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:127
+msgid "No es posible eliminar, usuario en uso"
+msgstr "Benutzer kann nicht gelöscht werden, wird noch benutzt"
+
+#: ../../../../inc/SP/Http/Request.class.php:51
+msgid "No es posible acceder directamente a este archivo"
+msgstr "Auf diese Datei darf nicht direkt zugegriffen werden"
+
+#: ../../../../inc/SP/Http/XMLRPCResponseParse.class.php:68
+msgid "Respuesta XML-RPC inválida"
+msgstr "Ungültige XML-RPC Antwort"
+
+#: ../../../../inc/SP/Import/CsvImport.class.php:46
+#: ../../../../inc/SP/Import/XmlImport.class.php:99
+#, php-format
+msgid "Formato detectado: %s"
+msgstr "Erkanntes Format: %s"
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:84
+#, php-format
+msgid "El número de campos es incorrecto (%d)"
+msgstr "Falsche Anzahl an Feldern (%d)"
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:85
+#, php-format
+msgid "Compruebe el formato del archivo CSV en línea %s"
+msgstr "Bitte das CSV-Format in Zeile %s überprüfen"
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:111
+msgid "Error importando cuenta"
+msgstr "Fehler beim Importieren des Kontos"
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:112
+msgid "Error procesando línea"
+msgstr "Fehler beim Verarbeiten der Zeile"
+
+#: ../../../../inc/SP/Import/FileImport.class.php:86
+msgid "Archivo no subido correctamente"
+msgstr "Datei erfolgreich hochgeladen"
+
+#: ../../../../inc/SP/Import/FileImport.class.php:87
+msgid "Verifique los permisos del usuario del servidor web"
+msgstr "Bitte überprüfen Sie die Zugriffsberechtigungen des Web-Servers"
+
+#: ../../../../inc/SP/Import/FileImport.class.php:98
+#, fuzzy
+msgid "Compruebe la extensión del archivo"
+msgstr "Bitte überprüfen Sie die Dateiendung"
+
+#: ../../../../inc/SP/Import/FileImport.class.php:114
+#, fuzzy
+msgid "Compruebe la configuración de PHP para subir archivos"
+msgstr "Bitte überprüfen Sie die PHP-Konfiguration zum Hochladen von Dateien"
+
+#: ../../../../inc/SP/Import/FileImport.class.php:158
+#: ../../../../inc/SP/Import/FileImport.class.php:186
+#, fuzzy
+msgid "Compruebe los permisos del directorio temporal"
+msgstr "Bitte überprüfen Sie die Zugriffsrechte des temporären Verzeichnisses"
+
+#: ../../../../inc/SP/Import/Import.class.php:83
+#, fuzzy, php-format
+msgid "Tipo mime no soportado (\"%s\")"
+msgstr "Mime-Type nicht unterstüzt"
+
+#: ../../../../inc/SP/Import/Import.class.php:84
+#, fuzzy
+msgid "Compruebe el formato del archivo"
+msgstr "Bitte überprüfen Sie das Format der Datei"
+
+#: ../../../../inc/SP/Import/Import.class.php:98
+msgid "Cuentas importadas"
+msgstr "Konten importiert"
+
+#: ../../../../inc/SP/Import/Import.class.php:103
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:66
+#: ../../../../js/strings.js.php:79
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:70
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:127
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:287
+#: ../../../../inc/themes/material-blue/views/config/import.inc:101
msgid "Ayuda"
msgstr "Hilfe"
-#: ../../../../inc/themes/classic/backup.inc:50
-#: ../../../../inc/themes/material-blue/backup.inc:52
+#: ../../../../inc/SP/Import/Import.class.php:114
+msgid "Importación finalizada"
+msgstr "Import beendet"
+
+#: ../../../../inc/SP/Import/ImportBase.class.php:121
+msgid "Id de categoría no definido. No es posible importar cuenta."
+msgstr "Kategorie-ID nicht definiert. Konto kann nicht importiert werden."
+
+#: ../../../../inc/SP/Import/ImportBase.class.php:124
+msgid "Id de cliente no definido. No es posible importar cuenta."
+msgstr "Kunden-ID nicht definiert. Kunde kann nicht importiert werden."
+
+#: ../../../../inc/SP/Import/SyspassImport.class.php:73
+msgid "Clave de encriptación no indicada"
+msgstr "Verschlüsselungspasswort nicht definiert."
+
+#: ../../../../inc/SP/Import/SyspassImport.class.php:109
+#: ../../../../inc/SP/Import/SyspassImport.class.php:122
+#, fuzzy
+msgid "Clave de encriptación incorrecta"
+msgstr "Falsche Verschlüsselung IV"
+
+#: ../../../../inc/SP/Import/XmlFileImport.class.php:85
+msgid "Archivo XML no soportado"
+msgstr "XML-Datei wird nicht unterstützt"
+
+#: ../../../../inc/SP/Import/XmlFileImport.class.php:86
+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"
+
+#: ../../../../inc/SP/Import/XmlFileImport.class.php:107
+msgid "No es posible procesar el archivo XML"
+msgstr "XML-Datei kann nicht verarbeitet werden"
+
+#: ../../../../inc/SP/Import/XmlImportTrait.class.php:69
+msgid "Formato de XML inválido"
+msgstr "Falsches XML-Format"
+
+#: ../../../../inc/SP/Import/XmlImportTrait.class.php:70
+#, php-format
+msgid "El nodo \"%s\" no existe"
+msgstr "Der Node %s existiert nicht"
+
+#: ../../../../inc/SP/Log/Email.class.php:62
+msgid "N/D"
+msgstr "N/A"
+
+#: ../../../../inc/SP/Log/Email.class.php:64
+msgid "Realizado por"
+msgstr "Ausgeführt durch"
+
+#: ../../../../inc/SP/Log/Email.class.php:76
+#: ../../../../inc/SP/Log/Email.class.php:191
+msgid "Enviar Email"
+msgstr "E-Mail senden"
+
+#: ../../../../inc/SP/Log/Email.class.php:81
+#: ../../../../inc/SP/Log/Email.class.php:198
+msgid "Correo enviado"
+msgstr "E-Mail gesendet"
+
+#: ../../../../inc/SP/Log/Email.class.php:82
+#: ../../../../inc/SP/Log/Email.class.php:192
+msgid "Destinatario"
+msgstr "Empfänger"
+
+#: ../../../../inc/SP/Log/Email.class.php:85
+msgid "CC"
+msgstr "CC"
+
+#: ../../../../inc/SP/Log/Email.class.php:91
+#: ../../../../inc/SP/Log/Email.class.php:202
+msgid "Error al enviar correo"
+msgstr "Fehler beim Sender der Mail"
+
+#: ../../../../inc/SP/Log/Log.class.php:91
+msgid "Error al vaciar el registro de eventos"
+msgstr "Fehler beim Löschen des Ereignisprotokolls"
+
+#: ../../../../inc/SP/Log/LogUtil.class.php:44
+#, php-format
+msgid "Extensión '%s' no cargada"
+msgstr "Erweiterung %s ist nicht geladen"
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:57
+msgid "Categoría duplicada"
+msgstr "Kategorie doppelt"
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:68
+msgid "Error al crear la categoría"
+msgstr "Fehler beim Anlegen der Kategorie"
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:122
+msgid "Error al eliminar la categoría"
+msgstr "Fehler beim Löschen einer Kategorie"
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:177
+msgid "Nombre de categoría duplicado"
+msgstr "Kategoriename dupliziert"
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:193
+msgid "Error al actualizar la categoría"
+msgstr "Fehler beim Ändern der Kategorie"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:72
+msgid "Error al crear el campo personalizado"
+msgstr "Fehler beim Anlegen eines Nutzerfelds"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:87
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:96
+msgid "Error al eliminar el campo personalizado"
+msgstr "Fehler beim Entfernen eines Nutzerfelds"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:140
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:218
+msgid "Error al actualizar el campo personalizado"
+msgstr "Fehler beim Aktualisieren eines Nutzerfelds"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:174
+msgid "Campo personalizado no encontrado"
+msgstr "Kein Nutzerfeld gefunden"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:227
+msgid "No se encontraron campos personalizados"
+msgstr "Keine Nutzerfelder gefunden"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:62
+msgid "Texto"
+msgstr "Text"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:66
+msgid "Número"
+msgstr "Nummer"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:67
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:60
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:87
+msgid "Email"
+msgstr "E-Mail"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:68
+msgid "Teléfono"
+msgstr "Telefon"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:69
+msgid "Link"
+msgstr "Link"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:70
+msgid "Color"
+msgstr "Farbe"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:71
+msgid "Área de Texto"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:82
+msgid "No hay datos de campos personalizados"
+msgstr "Keine Daten aus benutzerdefinierten Feldern"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:87
+msgid "Actualizando datos encriptados"
+msgstr "Aktualisiere verschlüsselte Daten"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:117
+#, fuzzy
+msgid "Registros no actualizados"
+msgstr "Nicht aktualisierte Einträge"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:118
+msgid "Registros actualizados"
+msgstr "Datensätze aktualisiert"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:191
+msgid "Error al migrar campos personalizados"
+msgstr "Fehler beim Migrieren von Nutzerfeldern"
+
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:58
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:182
+msgid "Cliente duplicado"
+msgstr "Doppelter Kunde"
+
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:72
+msgid "Error al crear el cliente"
+msgstr "Fehler beim Anlegen des Kunden"
+
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:118
+msgid "No es posible eliminar"
+msgstr "Kann nicht gelöscht werden"
+
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:127
+msgid "Error al eliminar el cliente"
+msgstr "Fehler beim Löschen des Kunden"
+
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:198
+msgid "Error al actualizar el cliente"
+msgstr "Fehler beim Ändern des Kunden"
+
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:101
+msgid "Archivo subido"
+msgstr "Datei hochgeladen"
+
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:123
+msgid "Error al eliminar archivo"
+msgstr "Fehler beim Löschen der Datei"
+
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:128
+msgid "Archivo no encontrado"
+msgstr "Datei nicht gefunden"
+
+#: ../../../../inc/SP/Mgmt/Files/FileUtil.class.php:102
+msgid "Error al eliminar archivos asociados a la cuenta"
+msgstr "Fehler beim Löschen der Dateien eines Kontos"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:57
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:193
+msgid "Nombre de grupo duplicado"
+msgstr "Duplizierter Gruppenname"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:67
+msgid "Error al crear el grupo"
+msgstr "Fehler beim Anlegen der Gruppe"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:110
+msgid "Grupo en uso"
+msgstr "Grupper wird verwendet"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:119
+msgid "Error al eliminar el grupo"
+msgstr "Fehler beim Löschen der Gruppe"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:124
+msgid "Grupo no encontrado"
+msgstr "Gruppe nicht gefunden"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:204
+msgid "Error al actualizar el grupo"
+msgstr "Fehler beim Ändern der Gruppe"
+
+#: ../../../../inc/SP/Mgmt/Groups/GroupAccounts.class.php:70
+msgid "Error al eliminar grupos asociados a la cuenta"
+msgstr "Fehler beim Löschen der Guppen eines Kontos"
+
+#: ../../../../inc/SP/Mgmt/Groups/GroupAccounts.class.php:100
+msgid "Error al actualizar los grupos secundarios"
+msgstr "Fehler beim Ändern der Gruppe"
+
+#: ../../../../inc/SP/Mgmt/Groups/GroupUsers.class.php:69
+msgid "Error al asignar los usuarios al grupo"
+msgstr "Fehler beim Festlegen von Benutzern in der Gruppe"
+
+#: ../../../../inc/SP/Mgmt/Groups/GroupUsers.class.php:89
+msgid "Error al eliminar los usuarios del grupo"
+msgstr "Fehler beim löschen von Gruppennutzern"
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:69
+msgid "Error al crear la notificación"
+msgstr "Fehler beim Hinzufügen der Benachrichtigung"
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:94
+msgid "Error al eliminar la notificación"
+msgstr "Fehler beim Löschen der Benachrichtigung"
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:99
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:137
+msgid "Notificación no encontrada"
+msgstr "Benachrichtigung nicht gefunden"
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:132
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:248
+msgid "Error al modificar la notificación"
+msgstr "Fehler beim Löschen der Benachrichtigung"
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:171
+msgid "Error al obtener la notificación"
+msgstr "Fehler beim Abrufen der Benachrichtigung"
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:202
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:288
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:322
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:358
+msgid "Error al obtener las notificaciones"
+msgstr "Fehler beim Abrufen der Benachrichtigungen"
+
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:59
+msgid "Error al crear el plugin"
+msgstr "Fehler beim Hinzufügen des Plugins"
+
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:83
+msgid "Error al eliminar el plugin"
+msgstr "Fehler beim Löschen des Plugins"
+
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:88
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:120
+msgid "Plugin no encontrado"
+msgstr "Plugin nicht gefunden"
+
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:115
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:223
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:247
+msgid "Error al actualizar el plugin"
+msgstr "Fehler beim Aktualisieren des Plugins"
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:56
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:182
+msgid "Nombre de perfil duplicado"
+msgstr "Duplizierter Profilname"
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:68
+msgid "Error al crear perfil"
+msgstr "Fehler beim Erstellen des Profils"
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:105
+msgid "Perfil en uso"
+msgstr "Profil in Verwendung"
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:114
+msgid "Error al eliminar perfil"
+msgstr "Fehler beim Entfernen des Profils"
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:119
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:201
+msgid "Perfil no encontrado"
+msgstr "Profil nicht gefunden"
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:196
+msgid "Error al modificar perfil"
+msgstr "Fehler beim Anpassen des Profils"
+
+#: ../../../../inc/SP/Mgmt/Profiles/ProfileUtil.class.php:55
+msgid "Migrar Perfiles"
+msgstr "Profile migrieren"
+
+#: ../../../../inc/SP/Mgmt/Profiles/ProfileUtil.class.php:85
+msgid "Error al obtener perfiles"
+msgstr "Fehlerm beim abrufen von Profilen"
+
+#: ../../../../inc/SP/Mgmt/Profiles/ProfileUtil.class.php:147
+msgid "Operación realizada correctamente"
+msgstr "Operation erfolgreich ausgeführt"
+
+#: ../../../../inc/SP/Mgmt/Profiles/ProfileUtil.class.php:152
+msgid "Fallo al realizar la operación"
+msgstr "Fehler beim durchführen der Operation"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:104
+msgid "Error al actualizar enlace"
+msgstr "Fehler beim Aktualisieren des Links"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:109
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:185
+msgid "Enlace no encontrado"
+msgstr "Link nicht gefunden"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:122
+msgid "Enlace ya creado"
+msgstr "Link bereits erstellt"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:143
+msgid "Error al crear enlace"
+msgstr "Fehler beim Erstellen des Links"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:180
+msgid "Error al eliminar enlace"
+msgstr "Fehler beim Entfernen des Links"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:214
+msgid "Error al renovar enlace"
+msgstr "Fehler beim Erneuern des Links"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:243
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:342
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:376
+msgid "Error al obtener enlace"
+msgstr "Fehler beim Abrufen des Links"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:294
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLinkSearch.class.php:72
+msgid "ON"
+msgstr "EIN"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:294
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLinkSearch.class.php:72
+msgid "OFF"
+msgstr "AUS"
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:53
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:126
+msgid "Etiqueta duplicada"
+msgstr "Tag doppelt"
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:63
+msgid "Error al crear etiqueta"
+msgstr "Fehler beim Anlegen des Tags"
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:108
+msgid "Error al eliminar etiqueta"
+msgstr "Fehler beim Entfernen des Tags"
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:113
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:142
+msgid "Etiqueta no encontrada"
+msgstr "Tag nicht gefunden"
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:137
+msgid "Error al actualizar etiqueta"
+msgstr "Fehler beim Aktualisieren des Tags"
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:184
+msgid "Error al obtener etiqueta"
+msgstr "Fehler beim Abrufen des Tags"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:53
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:152
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:77
+msgid "Login/email de usuario duplicados"
+msgstr "Benutzer-Login/E-Mail doppelt"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:90
+msgid "Error al crear el usuario"
+msgstr "Fehler beim Anlegen des Benutzers"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:132
+msgid "Error al eliminar el usuario"
+msgstr "Fehler beim Löschen des Benutzers"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:137
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:188
+msgid "Usuario no encontrado"
+msgstr "Benutzer nicht gefunden"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:183
+msgid "Error al actualizar el usuario"
+msgstr "Fehler beim Ändern des Benutzers"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:250
+msgid "Error al obtener los usuarios"
+msgstr "Fehler beim Laden der Benutzer"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:286
+#: ../../../../inc/SP/Mgmt/Users/UserPass.class.php:145
+msgid "Error al modificar la clave"
+msgstr "Fehler beim Ändern des Passworts"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:339
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:386
+msgid "Error al obtener los datos del usuario"
+msgstr "Fehler beim Abrufen der Benutzerdaten"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:108
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:54
+msgid "Usuario de LDAP"
+msgstr "LDAP-Benutzer"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:117
+#, fuzzy
+msgid "Error al guardar los datos de LDAP"
+msgstr "Fehler beim Speichern der LDAP-Benutzerdaten"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:125
+msgid "Activación Cuenta"
+msgstr "Kontoaktivierung"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:126
+msgid "Su cuenta está pendiente de activación."
+msgstr "Ihre Kontoaktivierung ist anhängig"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:127
+msgid "En breve recibirá un email de confirmación."
+msgstr "Sie bekommen in Kürze eine Bestätigungs-Mail"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:134
+msgid "Nuevo usuario de LDAP"
+msgstr "Neuer LDAP Benutzer"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:198
+msgid "Error al actualizar la clave del usuario en la BBDD"
+msgstr "Fehler beim Ändern des Benutzer-Passworts in der BD"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdapSync.class.php:60
+msgid "Sincronización LDAP"
+msgstr "LDAP-Synchronisation"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdapSync.class.php:110
+msgid "No se encontraron objetos para sincronizar"
+msgstr "Es gibt keine zu synchronisierende Objekte"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdapSync.class.php:116
+msgid "Sincronización finalizada"
+msgstr "Synchronisation abgeschlossen"
+
+#: ../../../../inc/SP/Mgmt/Users/UserMigrate.class.php:98
+msgid "Error al migrar cuenta de usuario"
+msgstr "Fehler beim Migrieren des Benutzerkontos"
+
+#: ../../../../inc/SP/Mgmt/Users/UserMigrate.class.php:133
+msgid "Error al obtener grupo de usuarios"
+msgstr "Fehler beim Abrufen der Gruppen des Benutzers"
+
+#: ../../../../inc/SP/Mgmt/Users/UserMigrate.class.php:148
+msgid "Error al migrar grupo del usuario"
+msgstr "Migrieren der Nutzergruppen ist fehlgeschlagen"
+
+#: ../../../../inc/SP/Mgmt/Users/UserPassRecover.class.php:110
+msgid "Error en comprobación de hash"
+msgstr "Fehler beim Überprüfen des Hash-Wertes"
+
+#: ../../../../inc/SP/Mgmt/Users/UserPassRecover.class.php:112
+msgid "Hash inválido o expirado"
+msgstr "Ungültiger oder abgelaufener Hash-Wert"
+
+#: ../../../../inc/SP/Mgmt/Users/UserPassRecover.class.php:158
+msgid "Error al generar el hash de recuperación"
+msgstr "Fehler beim Erstellen des Hash-Wertes zur Wiederherstellung"
+
+#: ../../../../inc/SP/Mgmt/Users/UserPreferences.class.php:79
+msgid "Error al actualizar preferencias"
+msgstr "Fehler beim aktualisieren der Einstellungen"
+
+#: ../../../../inc/SP/Mgmt/Users/UserPreferencesUtil.class.php:59
+msgid "Actualizando preferencias"
+msgstr "Einstellungen aktualisieren"
+
+#: ../../../../inc/SP/Storage/DB.class.php:296
+#: ../../../../inc/SP/Storage/DB.class.php:336
+#: ../../../../js/strings.js.php:26
+msgid "Error en la consulta"
+msgstr "Fehler bei der Abfrage"
+
+#: ../../../../inc/SP/Storage/DB.class.php:342
+msgid "Consulta en blanco"
+msgstr "Leere Anfrage"
+
+#: ../../../../inc/SP/Storage/DB.class.php:354
+msgid "Restricción de integridad"
+msgstr "Integritätsbedingung"
+
+#: ../../../../inc/SP/Storage/XmlHandler.class.php:77
+#, php-format
+msgid "No es posible leer/escribir el archivo: %s"
+msgstr "Datei %s konnte nicht gelesen/geschrieben werden"
+
+#: ../../../../inc/SP/Storage/XmlHandler.class.php:161
+msgid "No hay elementos para guardar"
+msgstr "Keine zu speichernden Elemente"
+
+#: ../../../../inc/SP/Util/Connection.class.php:120
+msgid "Socket no inicializado"
+msgstr "Socket nicht initialisiert"
+
+#: ../../../../inc/SP/Util/Connection.class.php:127
+msgid "Error al enviar datos"
+msgstr "Fehler beim Senden der Daten"
+
+#: ../../../../inc/SP/Util/Json.class.php:63
+msgid "Error de codificación"
+msgstr "Verschlüsselungsfehler"
+
+#: ../../../../inc/SP/Util/Util.class.php:316
+msgid "Respuesta"
+msgstr "Antwort"
+
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApi.class.php:68
+msgid "Fallo de autentificación"
+msgstr "Authentifizierungsfehler"
+
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApiBase.class.php:173
+msgid "Error al realizar la consulta"
+msgstr "Fehler beim Ausführen der Anfrage"
+
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApiBase.class.php:219
+msgid "URL de conexión no establecida"
+msgstr "Verbindungs-URL nicht konfiguriert"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:46
+msgid "Añadir"
+msgstr "Hinzufügen"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:47
+msgid "Ver Detalles"
+msgstr "Details anschauen"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:49
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:68
+msgid "Editar"
+msgstr "Ändern"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:50
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:80
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:82
+msgid "Eliminar"
+msgstr "Löschen"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:51
+msgid "Cambiar Clave"
+msgstr "Passwort ändern"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:52
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:148
+msgid "Admin Aplicación"
+msgstr "Anwendungs-Administrator"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:53
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:155
+msgid "Admin Cuentas"
+msgstr "Konto-Administrator"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:55
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:160
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:163
+msgid "Deshabilitado"
+msgstr "inaktiv"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:56
+msgid "Habilitado"
+msgstr "Aktiviert"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:58
+msgid "Copiar"
+msgstr "Kopieren"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:63
+#: ../../../../inc/themes/material-blue/views/main/error.inc:12
+#: ../../../../inc/themes/material-blue/views/main/error.inc:13
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:56
+msgid "Volver"
+msgstr "Zurück"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:64
+msgid "Restaurar"
+msgstr "Wiederherstellen"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:65
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:109
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:160
+msgid "Guardar"
+msgstr "Speichern"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:67
+msgid "Limpiar"
+msgstr "Löschen"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:68
+msgid "Realizar"
+msgstr "Ausführen"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:69
+msgid "Descargar"
+msgstr "Download"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:71
+msgid "Comprobar"
+msgstr "Überprüfung"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:78
+msgid "Crítico"
+msgstr "Kritisch"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:83
+msgid "Página anterior"
+msgstr "Vorherige Seite"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:84
+msgid "Página siguiente"
+msgstr "Nächste Seite"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:85
+msgid "Primera página"
+msgstr "Erste Seite"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:86
+msgid "Última página"
+msgstr "Letzte Seite"
+
+#: ../../../../js/strings.js.php:27
+msgid "Ha ocurrido un error"
+msgstr "Ein Fehler ist aufgetreten"
+
+#: ../../../../js/strings.js.php:28 ../../../../js/strings.js.php:86
+msgid "Sesión finalizada"
+msgstr "Sitzung beendet"
+
+#: ../../../../js/strings.js.php:29
+msgid "Borrar la cuenta?"
+msgstr "Account löschen?"
+
+#: ../../../../js/strings.js.php:30
+msgid "Borrar el usuario?"
+msgstr "Benutzer löschen?"
+
+#: ../../../../js/strings.js.php:31
+msgid "Guarde la configuración para que sea efectiva"
+msgstr "Bitte speichern Sie die Konfiguration, um wirksam"
+
+#: ../../../../js/strings.js.php:32
+msgid "Clave Generada"
+msgstr "Generiertes Passwort"
+
+#: ../../../../js/strings.js.php:33
+msgid "Nivel alto"
+msgstr "Hohe"
+
+#: ../../../../js/strings.js.php:34
+msgid "Nivel medio"
+msgstr "Mittelstufe"
+
+#: ../../../../js/strings.js.php:35
+msgid "Nivel bajo"
+msgstr "Low-Pegel"
+
+#: ../../../../js/strings.js.php:36
+msgid "Nivel muy alto"
+msgstr "Sehr hohes Niveau"
+
+#: ../../../../js/strings.js.php:37
+msgid "Utilizar al menos 8 caracteres"
+msgstr "Verwenden Sie mindestens 8 Zeichen"
+
+#: ../../../../js/strings.js.php:38
+msgid "Borrar elemento?"
+msgstr "Artikel löschen?"
+
+#: ../../../../js/strings.js.php:39
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:8
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:17
+msgid "Página no encontrada"
+msgstr "Seite nicht gefunden"
+
+#: ../../../../js/strings.js.php:40
+msgid "Archivo no soportado para visualizar"
+msgstr "Die Datei, nicht unterstützt"
+
+#: ../../../../js/strings.js.php:41
+msgid "Eliminar archivo?"
+msgstr "Datei löschen?"
+
+#: ../../../../js/strings.js.php:42
+msgid "Su navegador no soporta subir archivos con HTML5"
+msgstr "Ihr Browser unterstützt keine Hochladen von Dateien in HTML5"
+
+#: ../../../../js/strings.js.php:43
+msgid "Demasiados archivos"
+msgstr "Zu viele Dateien"
+
+#: ../../../../js/strings.js.php:44
+msgid "Tamaño de archivo no permitido"
+msgstr "Dateigröße nicht erlaubt"
+
+#: ../../../../js/strings.js.php:45
+msgid "Extensión no permitida"
+msgstr "Erweiterung nicht erlaubt"
+
+#: ../../../../js/strings.js.php:46
+msgid "Vaciar el registro de eventos?"
+msgstr "Ereignisprotokoll leeren?"
+
+#: ../../../../js/strings.js.php:47
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:75
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:243
+#: ../../../../inc/themes/material-blue/views/config/import.inc:54
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:221
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:77
+msgid "Seleccionar Grupo"
+msgstr "Gruppe auswählen"
+
+#: ../../../../js/strings.js.php:48
+#: ../../../../inc/themes/material-blue/views/config/import.inc:28
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:245
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:17
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:96
+msgid "Seleccionar Usuario"
+msgstr "Benutzer auswählen"
+
+#: ../../../../js/strings.js.php:49
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:61
+msgid "Seleccionar Perfil"
+msgstr "Profil auswählen"
+
+#: ../../../../js/strings.js.php:50
+#: ../../../../inc/themes/material-blue/views/account/account.inc:59
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:49
+msgid "Seleccionar Cliente"
+msgstr "Kunde auswählen"
+
+#: ../../../../js/strings.js.php:51
+#: ../../../../inc/themes/material-blue/views/account/account.inc:82
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:57
+msgid "Seleccionar Categoría"
+msgstr "Kategorie auswählen"
+
+#: ../../../../js/strings.js.php:52
+msgid "Sin resultados"
+msgstr "Kein Ergebnis"
+
+#: ../../../../js/strings.js.php:53
+msgid "Opciones de clave"
+msgstr "Password Optionen"
+
+#: ../../../../js/strings.js.php:54
+msgid "Generar clave aleatoria"
+msgstr "Zufälliges Passwort erzeugen"
+
+#: ../../../../js/strings.js.php:55
+msgid "Complejidad"
+msgstr "Komplexität"
+
+#: ../../../../js/strings.js.php:56
+msgid "Restablecer"
+msgstr "Reset"
+
+#: ../../../../js/strings.js.php:57
+msgid "Nivel de fortaleza de la clave"
+msgstr "Passwortstärke"
+
+#: ../../../../js/strings.js.php:58
+msgid "Mostrar Clave"
+msgstr "Passwort anzeigen"
+
+#: ../../../../js/strings.js.php:59
+#: ../../../../inc/themes/material-blue/views/account/viewpass.inc:19
+msgid "Copiar Usuario"
+msgstr "Benutzername kopieren"
+
+#: ../../../../js/strings.js.php:60
+#: ../../../../inc/themes/material-blue/views/account/viewpass.inc:30
+msgid "Copiar Clave"
+msgstr "Passwort kopieren"
+
+#: ../../../../js/strings.js.php:61
+msgid "Incluir Números"
+msgstr "Einbezogene Nummbern"
+
+#: ../../../../js/strings.js.php:62
+msgid "Incluir Mayúsculas"
+msgstr "Benötigt Großbuchstaben"
+
+#: ../../../../js/strings.js.php:63
+msgid "Incluir Símbolos"
+msgstr "Benötigt Symbole"
+
+#: ../../../../js/strings.js.php:64
+msgid "Longitud"
+msgstr "Länge"
+
+#: ../../../../js/strings.js.php:65
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:32
+msgid "Seleccionar Acción"
+msgstr "Aktion auswählen"
+
+#: ../../../../js/strings.js.php:66
+msgid "SI"
+msgstr "Ja"
+
+#: ../../../../js/strings.js.php:67
+msgid "NO"
+msgstr "Nein"
+
+#: ../../../../js/strings.js.php:68
+msgid "Aceptar"
+msgstr "Annehmen"
+
+#: ../../../../js/strings.js.php:69
+msgid "Cancelar"
+msgstr "Abbrechen"
+
+#: ../../../../js/strings.js.php:70
+msgid "Clave Copiada al Portapapeles"
+msgstr "Passwort in die Zwischenablage kopiert"
+
+#: ../../../../js/strings.js.php:71
+msgid "Error al copiar al portapapeles"
+msgstr "Fehler beim Kopieren in die Zwischenablage"
+
+#: ../../../../js/strings.js.php:73
+msgid "Recibir notificaciones?"
+msgstr "Benachrichtigungen gesendet?"
+
+#: ../../../../js/strings.js.php:74
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:133
+msgid "Marcar Favorito"
+msgstr "Als Favorit markieren"
+
+#: ../../../../js/strings.js.php:75
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:123
+msgid "Eliminar Favorito"
+msgstr "Favorit löschen"
+
+#: ../../../../js/strings.js.php:76
+msgid "Limpiar Selección"
+msgstr "Auswahl aufheben"
+
+#: ../../../../js/strings.js.php:77
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:68
+msgid "Mostrar Favoritos"
+msgstr "Favoriten anzeigen"
+
+#: ../../../../js/strings.js.php:78
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:68
+msgid "Mostrar Todos"
+msgstr "Alle anzeigen"
+
+#: ../../../../js/strings.js.php:80
+msgid "Sin cambios"
+msgstr "Keine Änderungen"
+
+#: ../../../../js/strings.js.php:81
+msgid "Ahora"
+msgstr "Jetzt"
+
+#: ../../../../js/strings.js.php:82
+msgid ""
+"Este proceso importará los usuarios de LDAP detectados. Desea continuar?"
+msgstr ""
+"Der Vorgang wird die ermittelten LDAP-Benutzer importieren. Möchten Sie "
+"fortfahren?"
+
+#: ../../../../js/strings.js.php:83
+msgid "Esta acción restablecerá todos los datos del plugin. Desea continuar?"
+msgstr ""
+"Diese Aktion wird all Plugindaten zurücksetzen. Möchten Sie fortfahren?"
+
+#: ../../../../js/strings.js.php:84
+msgid "Este proceso puede durar algo de tiempo. Desea continuar?"
+msgstr "Dieser Vorgang könnte lange dauern. Möchten Sie fortfahren?"
+
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:67
+#: ../../../../inc/themes/material-blue/views/account/account.inc:135
+#: ../../../../inc/themes/material-blue/views/account/account.inc:142
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:115
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:122
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:47
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:54
+#: ../../../../inc/themes/material-blue/views/main/install.inc:62
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:42
+msgid "Clave (repetir)"
+msgstr "Passwort (Wiederholung)"
+
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:78
+#: ../../../../inc/themes/material-blue/views/account/account.inc:149
+#: ../../../../inc/themes/material-blue/views/account/details.inc:131
+#: ../../../../inc/themes/material-blue/views/account/details.inc:133
+msgid "Fecha Caducidad Clave"
+msgstr "Passwortablaufdatum"
+
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:88
+#: ../../../../inc/themes/material-blue/views/account/account.inc:160
+msgid "Seleccionar Fecha"
+msgstr "Datum auswählen"
+
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:102
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:25
+#: ../../../../inc/themes/material-blue/views/account/request.inc:58
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:297
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:167
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:274
+#: ../../../../inc/themes/material-blue/views/config/general.inc:29
+#: ../../../../inc/themes/material-blue/views/config/import.inc:89
+#: ../../../../inc/themes/material-blue/views/config/info.inc:128
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:283
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:150
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:276
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:137
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:172
+msgid "Atrás"
+msgstr "Zurück"
+
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:65
+#: ../../../../inc/themes/material-blue/views/account/account.inc:165
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:140
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:129
+msgid "Notas"
+msgstr "Bemerkungen"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:9
+msgid "Accesos"
+msgstr "Zugriffe"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:20
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:104
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:117
+msgid "Permisos"
+msgstr "Berechtigungen"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:26
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:50
+msgid "Seleccionar Usuarios"
+msgstr "Benutzer auswählen"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:40
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:62
+msgid "Hablitar edición"
+msgstr "Erlaube Änderungen"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:48
+msgid "Seleccionar Grupos"
+msgstr "Gruppen auswählen"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:72
+#: ../../../../inc/themes/material-blue/views/account/details.inc:52
+#: ../../../../inc/themes/material-blue/views/account/details.inc:54
+msgid "Grupo Principal"
+msgstr "Hauptgruppe"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:87
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:111
+msgid "Cuenta Privada"
+msgstr "Privates Konto"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:92
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:103
+msgid "Privada"
+msgstr "Privat"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:100
+msgid "Cuenta Privada Grupo"
+msgstr "Privates Konto für die Gruppe"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:105
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:110
+msgid "Privada Grupo"
+msgstr "Privat für Gruppe"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:11
+msgid "Histórico"
+msgstr "Vergangenheit"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:182
+msgid "Seleccionar Etiquetas"
+msgstr "Tags auswählen"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:193
+#: ../../../../inc/themes/material-blue/views/account/account.inc:195
+#: ../../../../inc/themes/material-blue/views/account/viewpass.inc:9
+msgid "Cuenta Vinculada"
+msgstr "Verknüpftes Konto"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:203
+msgid "Seleccionar Cuenta"
+msgstr "Konto auswählen"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:210
+#: ../../../../inc/themes/material-blue/views/account/account.inc:212
+msgid "Historial"
+msgstr "Verlauf"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:217
+msgid "Seleccionar fecha"
+msgstr "Datum auswählen"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:229
+#: ../../../../inc/themes/material-blue/views/account/details.inc:35
+#: ../../../../inc/themes/material-blue/views/account/details.inc:37
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:199
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:201
+msgid "Última Modificación"
+msgstr "Letzte Änderung"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:236
+#: ../../../../inc/themes/material-blue/views/account/account.inc:238
+#: ../../../../inc/themes/material-blue/views/account/account.inc:241
+msgid "Enlace Público"
+msgstr "Öffentlicher Link"
+
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:17
+msgid "Ver Actual"
+msgstr "Ansehen"
+
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:54
+msgid "Crear Enlace Público"
+msgstr "Öffentlichen Link erstellen"
+
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:130
+msgid "Modificar Cuenta"
+msgstr "Konto ändern"
+
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:152
+msgid "Restaurar cuenta desde este punto"
+msgstr "Wiederherstellen Konto von diesem Punkt"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:8
+msgid "Detalles"
+msgstr "Details"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:26
+#: ../../../../inc/themes/material-blue/views/account/details.inc:28
+msgid "Fecha Alta"
+msgstr "Datum hinzugefügt"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:44
+#: ../../../../inc/themes/material-blue/views/account/details.inc:46
+msgid "Creador"
+msgstr "Erzeuger"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:61
+#: ../../../../inc/themes/material-blue/views/account/details.inc:63
+msgid "Usuarios Secundarios"
+msgstr "Sekundäre Benutzer"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:83
+#: ../../../../inc/themes/material-blue/views/account/details.inc:85
+msgid "Grupos Secundarios"
+msgstr "Untergruppe"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:106
+#: ../../../../inc/themes/material-blue/views/account/details.inc:108
+msgid "Fecha Edición"
+msgstr "Änderungsdatum"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:114
+#: ../../../../inc/themes/material-blue/views/account/details.inc:116
+msgid "Editor"
+msgstr "Editor"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:123
+#: ../../../../inc/themes/material-blue/views/account/details.inc:125
+msgid "Fecha de Clave"
+msgstr "Passwortdatum"
+
+#: ../../../../inc/themes/material-blue/views/account/files.inc:37
+msgid "Soltar archivos aquí (max. 5) o click para seleccionar"
+msgstr "Dateien hier fallen lassen (max. 5) oder zum selektieren anklicken"
+
+#: ../../../../inc/themes/material-blue/views/account/files.inc:37
+#, php-format
+msgid "Tamaño máximo de archivo: %d MB"
+msgstr "Maximale Dateigröße: %d MB"
+
+#: ../../../../inc/themes/material-blue/views/account/linkedAccounts.inc:3
+msgid "Cuentas Vinculadas"
+msgstr "Verbundene Konten"
+
+#: ../../../../inc/themes/material-blue/views/account/request.inc:4
+msgid "Solicitar Modificación de Cuenta"
+msgstr "Kontoänderung initiiert"
+
+#: ../../../../inc/themes/material-blue/views/account/request.inc:36
+msgid "Petición"
+msgstr "Anfrage"
+
+#: ../../../../inc/themes/material-blue/views/account/request.inc:42
+msgid "Descripción de la petición"
+msgstr "Beschreibung der Anfrage"
+
+#: ../../../../inc/themes/material-blue/views/account/request.inc:65
+msgid "Enviar"
+msgstr "Senden"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/index.inc:11
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:11
+msgid "No se encontraron registros"
+msgstr "Keine Datensätze gefunden"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:24
+msgid "Buscar en Wiki"
+msgstr "Im Wiki suchen"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:71
+msgid "Abrir enlace a"
+msgstr "Öffne Verweis nach"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:95
+msgid "Clave Caducada"
+msgstr "Passwort abgelaufen"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:149
+msgid "Archivos adjuntos"
+msgstr "Anhänge"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:159
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:170
+msgid "Enlace a Wiki"
+msgstr "Verweis zum Wiki"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:162
+msgid "Ver en Wiki"
+msgstr "Siehe Wiki"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:22
+msgid "Parámetros especiales:"
+msgstr "Spezialparameter"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:25
+msgid "Buscar cuentas a las que 'login' tenga acceso"
+msgstr "Suche nach Konten, für die 'login' Rechte besitzt"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:26
+#, fuzzy
+msgid "Devolver las cuentas en las que 'login' es propietario"
+msgstr "Suche nach Konten, für die 'login' Rechte besitzt"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:27
+msgid "Buscar cuentas a las que 'group_name' tenga acceso"
+msgstr "Suche nach Konten, für die 'group_name' Rechte besitzt"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:28
+msgid "Devolver las cuentas con grupo principal 'group_name'"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:29
+msgid "Buscar cuentas con archivos con el nombre 'file_name'"
+msgstr ""
+"Suche nach Konten, welche eine Datei enthalten mit dem Dateinamen 'file_name'"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:30
+msgid "Buscar cuentas con la clave caducada"
+msgstr "Suche Konten mit abgelaufenen Passwort"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:31
+msgid "Devolver las cuentas privadas del usuario actual"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:39
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:43
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:124
+msgid "Búsqueda global"
+msgstr "Globale Suche"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:71
+msgid "Filtrar Favoritos"
+msgstr "Favoriten filtern"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:85
+msgid "Cuentas por página"
+msgstr "Konten pro Seite"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:91
+msgid "Más Filtros"
+msgstr "Mehr Filter"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:96
+msgid "Seleccionar Etiqueta"
+msgstr "Tag auswählen"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:12
+msgid "Búsqueda"
+msgstr "Suchen"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:18
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:47
+msgid "Resultados por página"
+msgstr "Treffer pro Seite"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:23
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:52
+msgid "Número de resultados por página a mostrar, al realizar una búsqueda."
+msgstr "Anzahl der Suchresultate pro Seite."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:34
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:63
+msgid "Número de resultados por página"
+msgstr "Ergebnisse pro Seite"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:44
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:73
+msgid ""
+"Habilita el nombre de la cuenta de la búsqueda, como enlace a los detalles "
+"de la cuenta."
+msgstr "Gibt den Kontonamen als Link zu den Kontodetails aus."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:53
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:82
+msgid "Nombre de cuenta como enlace"
+msgstr "Kontoname als Link"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:63
+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 ""
+"Ermöglicht Nutzern über alle Konten zu suchen, auch wenn sie keine Rechte "
+"haben. Die Kontodetails können sie aber nicht sehen."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:72
+msgid "Búsquedas globales"
+msgstr "Globale Suchen"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:82
+msgid "Generar una imagen con el texto de la clave de la cuenta."
+msgstr "Bild generieren mit dem Text des Kontopassworts."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:86
+msgid "Util para entornos donde copiar la clave supone un riesgo de seguridad."
+msgstr ""
+"Nützlich für Umgebungen, in denen das Kopieren eines Passworts in die "
+"Zwischenablage ein Sicherheitsrisiko darstellt."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:96
+msgid "Imagen para mostrar clave"
+msgstr "Bild zur Anzeige des Passworts"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:106
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:146
+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/material-blue/views/config/accounts.inc:116
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:155
+msgid "Resultados en Tarjetas"
+msgstr "Results as Cards"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:123
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:189
+msgid "Enlaces Públicos"
+msgstr "Öffentliche Links"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:133
+msgid ""
+"Habilita la posibilidad de generar enlaces públicos para ver los detalles de "
+"una cuenta."
+msgstr ""
+"Ermöglicht die Erstellung öffentlicher Links, um die Details eines Kontos "
+"anzuzeigen"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:137
+msgid ""
+"Las cuentas enlazadas serán visibles por cualquiera que disponga del enlace."
+msgstr ""
+"Die verknüpften Konten werden für alle sichtbar sein, die im Besitz des "
+"Links sind"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:141
+msgid ""
+"Para crear enlaces, los usuarios tienen que tener activada la opción en su "
+"perfl."
+msgstr ""
+"Um Links erstellen zu können, muss die Option im Profil der Benutzer "
+"aktiviert sein"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:151
+msgid "Habilitar Enlaces Públicos"
+msgstr "Öffentliche Links aktivieren"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:157
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:166
+msgid "Tiempo de caducidad"
+msgstr "Ablaufzeit"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:172
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:181
+msgid "Número máximo de visitas"
+msgstr "Maximale Besuche"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:191
+msgid "La clave de la cuenta es visualizada como una imagen."
+msgstr "Das Konto-Passwort wird als Bild angezeigt"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:201
+msgid "Usar imagen para clave"
+msgstr "Verwende ein Bild für das Passwort"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:218
+msgid "Habilita la subida/descarga de archivos para las cuentas."
+msgstr "Einschalten von Hoch- und Herunterladen von Kontodateien."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:228
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:203
+msgid "Gestión de archivos"
+msgstr "Dateiverwaltung"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:234
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:252
+msgid "Extensiones de archivos permitidas"
+msgstr "Erlaubte Dateiendungen"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:239
+#, fuzzy
+msgid "Extensiones permitidas para la subida de archivos."
+msgstr "Erlaubte Dateierweiterungen für Dateiupload."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:243
+msgid "Se permite un máximo de 4 caracteres."
+msgstr "Maximal 4 Zeichen erlaubt."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:247
+msgid ""
+"Escribir extensión y pulsar intro para añadir. Es necesario guardar la "
+"configuración."
+msgstr ""
+"Erweiterung schreiben und Enter zum hinzufügen drücken. Speichern nicht "
+"vergessen."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:260
+msgid "Tamaño máximo de archivo"
+msgstr "Maximale Dateigröße"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:265
+msgid "Establece el tamaño máximo para subir archivos."
+msgstr "Maximum der Dateigröße beim Hochladen."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:269
+msgid "El máximo absuluto es de 16MB."
+msgstr "Das absolute Maximum ist 16MB."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:280
+msgid "Tamaño máximo de archivo en bytes"
+msgstr "Maximale Dateigröße"
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:13
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:16
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:98
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:101
+msgid "Resultado"
+msgstr "Ergebnis"
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:24
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:27
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:109
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:112
+msgid "Descargar Actual"
+msgstr "Herunterladen"
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:33
+msgid "Copia BBDD"
+msgstr "DB Sicherung"
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:40
+msgid "Copia sysPass"
+msgstr "sysPass Sicherung"
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:43
+msgid "No hay backups para descargar"
+msgstr "Es sind keine Backups zum Herunterladen vorhanden"
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:71
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."
@@ -3338,8 +4615,7 @@ msgstr ""
"Das Backup erlaubt das Speichern und Herunterladen der sysPass Datenbank, "
"von Anwendungsdateien und der Konfiguration."
-#: ../../../../inc/themes/classic/backup.inc:52
-#: ../../../../inc/themes/material-blue/backup.inc:54
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:73
msgid ""
"Con este método es posible guardar todos los datos de sysPass en otro lugar "
"o utilizarlos para hacer la aplicación portable."
@@ -3348,31 +4624,25 @@ msgstr ""
"zu speichern. Sie kann auch genutzt werden um die Anwendung portable zu "
"machen."
-#: ../../../../inc/themes/classic/backup.inc:60
-#: ../../../../inc/themes/classic/backup.inc:126
-#: ../../../../inc/themes/material-blue/backup.inc:64
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:88
msgid "Exportar Cuentas"
msgstr "Konten exportieren"
-#: ../../../../inc/themes/classic/backup.inc:84
-#: ../../../../inc/themes/material-blue/backup.inc:88
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:122
msgid "No hay archivos XML para descargar"
-msgstr "Da sind keine Dateien zum Herunterladen"
+msgstr "Keine Dateien zum Herunterladen vorhanden"
-#: ../../../../inc/themes/classic/backup.inc:90
-#: ../../../../inc/themes/material-blue/backup.inc:94
-#: ../../../../inc/themes/material-blue/backup.inc:101
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:129
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:137
msgid "Clave de Exportación"
msgstr "Exportpasswort"
-#: ../../../../inc/themes/classic/backup.inc:98
-#: ../../../../inc/themes/material-blue/backup.inc:107
-#: ../../../../inc/themes/material-blue/backup.inc:114
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:143
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:151
msgid "Clave de Exportación (repetir)"
msgstr "Exportpasswort (Wiederholung)"
-#: ../../../../inc/themes/classic/backup.inc:118
-#: ../../../../inc/themes/material-blue/backup.inc:134
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:180
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."
@@ -3380,20 +4650,17 @@ msgstr ""
"Das Exportieren der Konten ermöglicht das Speichern der Konten und ihren "
"Daten in XML Format um sie in einer anderen sysPass Instanz zu importieren."
-#: ../../../../inc/themes/classic/backup.inc:120
-#: ../../../../inc/themes/material-blue/backup.inc:136
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:182
msgid "Los elementos exportados son cuentas, clientes y categorías."
msgstr "Die exportierten Artikel sind Konten, Kunden und Kategorien."
-#: ../../../../inc/themes/classic/backup.inc:122
-#: ../../../../inc/themes/material-blue/backup.inc:138
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:184
msgid ""
"Las claves de las cuentas son exportadas de forma encriptada para mayor "
"seguridad."
msgstr "Die Kontenpasswörter werden verschlüsselt exportiert."
-#: ../../../../inc/themes/classic/backup.inc:124
-#: ../../../../inc/themes/material-blue/backup.inc:140
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:186
msgid ""
"Es posible establecer una clave de exportación para guardar todos los datos "
"encriptados en el archivo XML."
@@ -3401,359 +4668,63 @@ msgstr ""
"Es ist möglich ein Exportpasswort an zu geben um alle Daten in der XML Datei "
"zu verschlüsseln."
-#: ../../../../inc/themes/classic/body-start.inc:4
-#: ../../../../inc/themes/material-blue/body-start.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/classic/preferences.inc:4
-#: ../../../../inc/themes/material-blue/config.inc:4
-#: ../../../../inc/themes/material-blue/preferences.inc:4
-msgid "Sitio"
-msgstr "Site"
-
-#: ../../../../inc/themes/classic/config.inc:11
-#: ../../../../inc/themes/classic/preferences.inc:12
-#: ../../../../inc/themes/material-blue/config.inc:12
-#: ../../../../inc/themes/material-blue/preferences.inc:12
-msgid "Idioma"
-msgstr "Sprache"
-
-#: ../../../../inc/themes/classic/config.inc:15
-#: ../../../../inc/themes/material-blue/config.inc:16
-msgid ""
-"Establece el idioma global de la aplicación. Es posible establecer un idioma "
-"por usuario en las preferencias."
-msgstr ""
-"Setzen Sie die globale Sprache. Der Nutzer kann seine Sprache in den "
-"Nutzereinstellungen wählen."
-
-#: ../../../../inc/themes/classic/config.inc:18
-#: ../../../../inc/themes/material-blue/config.inc:19
-msgid ""
-"Para mejorar/añadir las traducciones, puede colaborar en http:://translate."
-"syspass.org"
-msgstr ""
-"Um die Übersetzung zu verbessern können Sie die den Dienst auf http:://"
-"translate.syspass.org nutzen"
-
-#: ../../../../inc/themes/classic/config.inc:33
-#: ../../../../inc/themes/classic/preferences.inc:24
-#: ../../../../inc/themes/material-blue/config.inc:34
-#: ../../../../inc/themes/material-blue/preferences.inc:23
-msgid "Tema Visual"
-msgstr "Visuelles Thema"
-
-#: ../../../../inc/themes/classic/config.inc:37
-#: ../../../../inc/themes/material-blue/config.inc:38
-msgid ""
-"Establece el tema visual global de la aplicación. Es posible establecer un "
-"tema visual por usuario en las preferencias."
-msgstr ""
-"Definieren des globalen visuellen Themas. Jeder Nutzer kann ein persönliches "
-"visuelles Thema in den Nutzereinstellungen wählen."
-
-#: ../../../../inc/themes/classic/config.inc:52
-#: ../../../../inc/themes/material-blue/config.inc:53
-#: ../../../../inc/themes/material-blue/config.inc:61
-msgid "Timeout de sesión (s)"
-msgstr "Ablauf der Sitzung (s)"
-
-#: ../../../../inc/themes/classic/config.inc:61
-#: ../../../../inc/themes/material-blue/config.inc:85
-msgid "Habilitar log de eventos"
-msgstr "Protokol einschalten"
-
-#: ../../../../inc/themes/classic/config.inc:65
-#: ../../../../inc/themes/material-blue/config.inc:89
-msgid "Guarda las acciones realizadas en la aplicación."
-msgstr "Speichert die Änderungen der Anwendung."
-
-#: ../../../../inc/themes/classic/config.inc:77
-#: ../../../../inc/themes/material-blue/config.inc:103
-msgid "Habilitar depuración"
-msgstr "Debugging einschalten"
-
-#: ../../../../inc/themes/classic/config.inc:81
-#: ../../../../inc/themes/material-blue/config.inc:107
-msgid ""
-"Muestra información relativa a la configuración de la aplicación y "
-"rendimiento."
-msgstr "Zeigt Informationen zu Einstellungen und zur Leistung."
-
-#: ../../../../inc/themes/classic/config.inc:93
-#: ../../../../inc/themes/material-blue/config.inc:121
-msgid "Modo mantenimiento"
-msgstr "Wartungsmodus"
-
-#: ../../../../inc/themes/classic/config.inc:97
-#: ../../../../inc/themes/material-blue/config.inc:125
-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 kann sich niemand anmelden. Dies kann nur in der "
-"Konfigurationsdatei geändert werden."
-
-#: ../../../../inc/themes/classic/config.inc:109
-#: ../../../../inc/themes/material-blue/config.inc:139
-msgid "Comprobar actualizaciones"
-msgstr "Nach Updates schauen"
-
-#: ../../../../inc/themes/classic/config.inc:113
-#: ../../../../inc/themes/material-blue/config.inc:143
-msgid ""
-"Comprobar actualizaciones de la aplicación (sólo para los usuarios "
-"administradores)."
-msgstr "Prüft auf Anwendungsaktualisierungen (nur für Administratoren)."
-
-#: ../../../../inc/themes/classic/config.inc:125
-#: ../../../../inc/themes/material-blue/config.inc:157
-msgid "Comprobar notificaciones"
-msgstr "Prüft auf Meldungen"
-
-#: ../../../../inc/themes/classic/config.inc:129
-#: ../../../../inc/themes/material-blue/config.inc:161
-msgid ""
-"Comprobar si existen notificaciones de seguridad o avisos de sysPass (sólo "
-"para los usuarios administradores)."
-msgstr "Prüft auf sysPass Sicherheitsmeldungen (nur für Administratoren)."
-
-#: ../../../../inc/themes/classic/config.inc:141
-#: ../../../../inc/themes/classic/preferences.inc:38
-#: ../../../../inc/themes/material-blue/config.inc:182
-#: ../../../../inc/themes/material-blue/preferences.inc:36
-msgid "Nombre de cuenta como enlace"
-msgstr "Kontoname als Link"
-
-#: ../../../../inc/themes/classic/config.inc:145
-#: ../../../../inc/themes/classic/preferences.inc:43
-#: ../../../../inc/themes/material-blue/config.inc:186
-#: ../../../../inc/themes/material-blue/preferences.inc:40
-msgid ""
-"Habilita el nombre de la cuenta de la búsqueda, como enlace a los detalles "
-"de la cuenta."
-msgstr "Gibt den Kontonamen als Link zu den Kontodetails aus."
-
-#: ../../../../inc/themes/classic/config.inc:157
-#: ../../../../inc/themes/material-blue/config.inc:286
-msgid "Gestión de archivos"
-msgstr "Dateiverwaltung"
-
-#: ../../../../inc/themes/classic/config.inc:161
-#: ../../../../inc/themes/material-blue/config.inc:290
-msgid "Habilita la subida/descarga de archivos para las cuentas."
-msgstr "Einschalten von Hoch- und Herunterladen von Kontodateien."
-
-#: ../../../../inc/themes/classic/config.inc:173
-#: ../../../../inc/themes/material-blue/config.inc:200
-msgid "Búsquedas globales"
-msgstr "Globale Suchen"
-
-#: ../../../../inc/themes/classic/config.inc:177
-#: ../../../../inc/themes/material-blue/config.inc:204
-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 ""
-"Ermöglicht Nutzern über alle Konten zu suchen, auch wenn sie keine Rechte "
-"haben. Die Kontodetails können sie aber nicht sehen."
-
-#: ../../../../inc/themes/classic/config.inc:189
-#: ../../../../inc/themes/material-blue/config.inc:305
-msgid "Extensiones de archivos permitidas"
-msgstr "Erlaubte Dateiendungen"
-
-#: ../../../../inc/themes/classic/config.inc:193
-#: ../../../../inc/themes/material-blue/config.inc:309
-msgid "Extensiones permitidas para la subida de archivos."
-msgstr "Erlaubte Dateierweiterungen für Dateiupload."
-
-#: ../../../../inc/themes/classic/config.inc:197
-#: ../../../../inc/themes/material-blue/config.inc:313
-msgid "Se permite un máximo de 4 caracteres."
-msgstr "Maximal 4 Zeichen erlaubt."
-
-#: ../../../../inc/themes/classic/config.inc:201
-#: ../../../../inc/themes/material-blue/config.inc:317
-msgid ""
-"Escribir extensión y pulsar intro para añadir. Es necesario guardar la "
-"configuración."
-msgstr ""
-"Erweiterung schreiben und Enter zum hinzufügen drücken. Speichern nicht "
-"vergessen."
-
-#: ../../../../inc/themes/classic/config.inc:216
-#: ../../../../inc/themes/material-blue/config.inc:332
-msgid "Establece el tamaño máximo para subir archivos."
-msgstr "Maximum der Dateigröße beim Hochladen."
-
-#: ../../../../inc/themes/classic/config.inc:220
-#: ../../../../inc/themes/material-blue/config.inc:336
-msgid "El máximo absuluto es de 16MB."
-msgstr "Das absolute Maximum ist 16MB."
-
-#: ../../../../inc/themes/classic/config.inc:231
-#: ../../../../inc/themes/classic/preferences.inc:56
-#: ../../../../inc/themes/material-blue/config.inc:218
-#: ../../../../inc/themes/material-blue/preferences.inc:54
-msgid "Resultados por página"
-msgstr "Treffer pro Seite"
-
-#: ../../../../inc/themes/classic/config.inc:235
-#: ../../../../inc/themes/classic/preferences.inc:61
-#: ../../../../inc/themes/material-blue/config.inc:222
-#: ../../../../inc/themes/material-blue/preferences.inc:58
-msgid "Número de resultados por página a mostrar, al realizar una búsqueda."
-msgstr "Anzahl der Suchresultate pro Seite."
-
-#: ../../../../inc/themes/classic/config.inc:246
-#: ../../../../inc/themes/material-blue/config.inc:260
-msgid "Resultados en Tarjetas"
-msgstr "Results as Cards"
-
-#: ../../../../inc/themes/classic/config.inc:250
-#: ../../../../inc/themes/material-blue/config.inc:264
-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:262
-#: ../../../../inc/themes/material-blue/config.inc:238
-msgid "Imagen para mostrar clave"
-msgstr "Bild zur Anzeige des Passworts"
-
-#: ../../../../inc/themes/classic/config.inc:266
-#: ../../../../inc/themes/material-blue/config.inc:242
-msgid "Generar una imagen con el texto de la clave de la cuenta."
-msgstr "Bild generieren mit dem Text des Kontopassworts."
-
-#: ../../../../inc/themes/classic/config.inc:269
-#: ../../../../inc/themes/material-blue/config.inc:245
-msgid "Util para entornos donde copiar la clave supone un riesgo de seguridad."
-msgstr ""
-"Nützlich für Umgebungen, in denen das Kopieren eines Passworts in die "
-"Zwischenablage ein Sicherheitsrisiko darstellt."
-
-#: ../../../../inc/themes/classic/config.inc:304
-#: ../../../../inc/themes/material-blue/config.inc:454
-msgid "Añadir extensión"
-msgstr "Endung hinzufügen"
-
-#: ../../../../inc/themes/classic/config.inc:305
-#: ../../../../inc/themes/material-blue/config.inc:455
-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 "Hilfetext"
-
-#: ../../../../inc/themes/classic/customfields.inc:44
-#: ../../../../inc/themes/material-blue/customfields.inc:52
-msgid "Obligatorio"
-msgstr "Benötigt"
-
-#: ../../../../inc/themes/classic/encryption.inc:5
-#: ../../../../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:5
-#: ../../../../inc/themes/material-blue/install.inc:52
-#: ../../../../inc/themes/material-blue/install.inc:59
-#: ../../../../inc/themes/material-blue/login.inc:26
-#: ../../../../inc/themes/material-blue/login.inc:49
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:8
+#: ../../../../inc/themes/material-blue/views/config/import.inc:148
+#: ../../../../inc/themes/material-blue/views/config/import.inc:163
+#: ../../../../inc/themes/material-blue/views/main/install.inc:48
+#: ../../../../inc/themes/material-blue/views/main/install.inc:54
+#: ../../../../inc/themes/material-blue/views/main/login.inc:49
+#: ../../../../inc/themes/material-blue/views/main/login.inc:89
msgid "Clave Maestra"
msgstr "Master-Passwort"
-#: ../../../../inc/themes/classic/encryption.inc:13
-#: ../../../../inc/themes/classic/encryption.inc:113
-#: ../../../../inc/themes/material-blue/encryption.inc:13
-#: ../../../../inc/themes/material-blue/encryption.inc:128
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:18
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:21
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:167
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:170
msgid "Último cambio"
msgstr "Letzte Änderung"
-#: ../../../../inc/themes/classic/encryption.inc:22
-#: ../../../../inc/themes/material-blue/encryption.inc:22
-#: ../../../../inc/themes/material-blue/encryption.inc:28
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:29
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:37
msgid "Clave Maestra actual"
msgstr "Aktuelles Master-Passwort"
-#: ../../../../inc/themes/classic/encryption.inc:31
-#: ../../../../inc/themes/material-blue/encryption.inc:34
-#: ../../../../inc/themes/material-blue/encryption.inc:40
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:43
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:51
msgid "Nueva Clave Maestra"
msgstr "Neues Master-Passwort"
-#: ../../../../inc/themes/classic/encryption.inc:40
-#: ../../../../inc/themes/material-blue/encryption.inc:46
-#: ../../../../inc/themes/material-blue/encryption.inc:52
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:57
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:65
msgid "Nueva Clave Maestra (repetir)"
msgstr "Neues Master-Passwort (Wiederholung)"
-#: ../../../../inc/themes/classic/encryption.inc:48
-#: ../../../../inc/themes/material-blue/encryption.inc:58
-msgid "No modificar cuentas"
-msgstr "Konten nicht verändern"
-
-#: ../../../../inc/themes/classic/encryption.inc:53
-#: ../../../../inc/themes/material-blue/encryption.inc:63
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:75
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:64
-#: ../../../../inc/themes/material-blue/encryption.inc:76
-msgid "Confirmar cambio"
-msgstr "Änderung bestätigen"
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:83
+msgid "No modificar cuentas"
+msgstr "Konten nicht verändern"
-#: ../../../../inc/themes/classic/encryption.inc:67
-#: ../../../../inc/themes/classic/encryption.inc:70
-#: ../../../../inc/themes/classic/encryption.inc:73
-#: ../../../../inc/themes/classic/import.inc:64
-#: ../../../../inc/themes/classic/security.inc:43
-msgid "Atención"
-msgstr "Warnung"
-
-#: ../../../../inc/themes/classic/encryption.inc:68
-#: ../../../../inc/themes/material-blue/encryption.inc:80
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:92
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:71
-#: ../../../../inc/themes/material-blue/encryption.inc:83
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:96
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:74
-#: ../../../../inc/themes/material-blue/encryption.inc:86
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:100
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:95
-#: ../../../../inc/themes/material-blue/encryption.inc:109
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:106
+msgid "Confirmar cambio"
+msgstr "Änderung bestätigen"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:128
msgid ""
"La clave maestra es utilizada para encriptar las claves de las cuentas de "
"sysPass para mantenerlas seguras."
@@ -3761,8 +4732,7 @@ msgstr ""
"Das Master Passwort wird benutzt um die sysPass Kontenpasswörter zu "
"verschlüsseln und diese zu sichern."
-#: ../../../../inc/themes/classic/encryption.inc:97
-#: ../../../../inc/themes/material-blue/encryption.inc:111
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:130
msgid ""
"Es recomendable cambiarla cada cierto tiempo y utilizar una clave compleja "
"que incluya números, letras y símbolos."
@@ -3770,35 +4740,46 @@ msgstr ""
"Es ist ratsam, es von Zeit zu Zeit zu ändern und ein komplexes Password mit "
"Zahlen, Buchstaben und Symbolen zu nutzen."
-#: ../../../../inc/themes/classic/encryption.inc:105
-#: ../../../../inc/themes/material-blue/encryption.inc:121
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:140
+msgid "Actualizar hash de clave maestra"
+msgstr "Master-Passwort-Hash aktualisieren"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:156
msgid "Clave Temporal"
msgstr "Temporäres Passwort"
-#: ../../../../inc/themes/classic/encryption.inc:116
-#: ../../../../inc/themes/classic/encryption.inc:127
-#: ../../../../inc/themes/material-blue/encryption.inc:131
-#: ../../../../inc/themes/material-blue/encryption.inc:142
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:172
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:185
msgid "No generada"
msgstr "Nicht generiert"
-#: ../../../../inc/themes/classic/encryption.inc:121
-#: ../../../../inc/themes/material-blue/encryption.inc:136
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:177
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:180
msgid "Válido hasta"
msgstr "Gültig bis"
-#: ../../../../inc/themes/classic/encryption.inc:133
-#: ../../../../inc/themes/material-blue/encryption.inc:148
-#: ../../../../inc/themes/material-blue/encryption.inc:154
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:191
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:194
+msgid "Intentos"
+msgstr "Versuche"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:201
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:210
msgid "Validez (s)"
msgstr "Lebensspanne (s)"
-#: ../../../../inc/themes/classic/encryption.inc:136
-msgid "Validez"
-msgstr "Lebensspanne"
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:222
+msgid ""
+"Envía un correo a todos los usuarios o sólo a los del grupo seleccionado."
+msgstr ""
+"Sendet eine E-Mail an alle Benutzer oder nur an diejenigen, deren Gruppe "
+"ausgewählt ist."
-#: ../../../../inc/themes/classic/encryption.inc:164
-#: ../../../../inc/themes/material-blue/encryption.inc:183
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:230
+msgid "Enviar correo"
+msgstr "E-Mail senden"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:288
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 "
@@ -3808,228 +4789,199 @@ msgstr ""
"welche dieses während der Anmeldung eingeben müssen. So gibt es keinen Grund "
"den Benutzern das wirkliche Master Passwort zu sagen."
-#: ../../../../inc/themes/classic/encryption.inc:166
-#: ../../../../inc/themes/material-blue/encryption.inc:187
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:294
msgid "Generar"
msgstr "Generieren"
-#: ../../../../inc/themes/classic/eventlog.inc:6
-#: ../../../../inc/themes/classic/search.inc:3
-#: ../../../../inc/themes/material-blue/eventlog.inc:6
-#: ../../../../inc/themes/material-blue/search.inc:3
-msgid "No se encontraron registros"
-msgstr "Keine Datensätze gefunden"
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:4
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:61
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:63
+msgid "Eventos"
+msgstr "Events"
-#: ../../../../inc/themes/classic/eventlog.inc:17
-#: ../../../../inc/themes/material-blue/eventlog.inc:17
-msgid "Fecha / Hora"
-msgstr "Datum/Zeit"
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:13
+msgid "Guarda las acciones realizadas en la aplicación."
+msgstr "Speichert die Änderungen der Anwendung."
-#: ../../../../inc/themes/classic/eventlog.inc:20
-#: ../../../../inc/themes/material-blue/eventlog.inc:20
-msgid "Evento"
-msgstr "Ereignis"
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:21
+msgid "Habilitar log de eventos"
+msgstr "Ereignisprotokolls aktivieren"
-#: ../../../../inc/themes/classic/eventlog.inc:26
-#: ../../../../inc/themes/material-blue/eventlog.inc:26
-msgid "IP"
-msgstr "IP"
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:32
+msgid "Habilitar Syslog"
+msgstr "Syslog aktivieren"
-#: ../../../../inc/themes/classic/eventlog.inc:84
-#: ../../../../inc/themes/classic/search.inc:20
-#: ../../../../inc/themes/classic/search.inc:199
-#: ../../../../inc/themes/material-blue/eventlog.inc:84
-#: ../../../../inc/themes/material-blue/search.inc:20
-#: ../../../../inc/themes/material-blue/search.inc:209
-msgid "Primera página"
-msgstr "Erste Seite"
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:43
+msgid "Habilitar Syslog Remoto"
+msgstr "Remote Syslog aktivieren"
-#: ../../../../inc/themes/classic/eventlog.inc:86
-#: ../../../../inc/themes/classic/search.inc:22
-#: ../../../../inc/themes/classic/search.inc:201
-#: ../../../../inc/themes/material-blue/eventlog.inc:86
-#: ../../../../inc/themes/material-blue/search.inc:22
-#: ../../../../inc/themes/material-blue/search.inc:211
-msgid "Página anterior"
-msgstr "Vorherige Seite"
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:57
+msgid "Nombre o dirección IP"
+msgstr "Hostname oder IP-Adresse"
-#: ../../../../inc/themes/classic/eventlog.inc:91
-#: ../../../../inc/themes/classic/search.inc:27
-#: ../../../../inc/themes/classic/search.inc:206
-#: ../../../../inc/themes/material-blue/eventlog.inc:91
-#: ../../../../inc/themes/material-blue/search.inc:27
-#: ../../../../inc/themes/material-blue/search.inc:216
-msgid "Página siguiente"
-msgstr "Nächste Seite"
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:63
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:71
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:33
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:40
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:47
+msgid "Puerto"
+msgstr "Port"
-#: ../../../../inc/themes/classic/eventlog.inc:93
-#: ../../../../inc/themes/classic/search.inc:29
-#: ../../../../inc/themes/classic/search.inc:208
-#: ../../../../inc/themes/material-blue/eventlog.inc:93
-#: ../../../../inc/themes/material-blue/search.inc:29
-#: ../../../../inc/themes/material-blue/search.inc:218
-msgid "Última página"
-msgstr "Letzte Seite"
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:2
+msgid "Proxy"
+msgstr "Proxy"
-#: ../../../../inc/themes/classic/files.inc:22
-#: ../../../../inc/themes/material-blue/files.inc:21
-msgid "Ver Archivo"
-msgstr "Datei ansehen"
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:13
+msgid "Usar Proxy"
+msgstr "Proxy benutzen"
-#: ../../../../inc/themes/classic/footer.inc:6
-#: ../../../../inc/themes/material-blue/footer.inc:29
-msgid "Indica si la conexión utiliza HTTPS."
-msgstr "Zeigt, ob die Verbindung HTTPS nutzt"
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:27
+msgid "Servidor proxy"
+msgstr "Proxyserver"
-#: ../../../../inc/themes/classic/footer.inc:6
-#: ../../../../inc/themes/material-blue/footer.inc:29
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:41
+msgid "Puerto del servidor proxy"
+msgstr "Proxyserver Port"
+
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:55
+msgid "Usuario del servidor proxy"
+msgstr "Proxyserver Benutzer"
+
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:69
+msgid "Clave del servidor proxy"
+msgstr "Proxyserver Passwort"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:4
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:7
+msgid "Sitio"
+msgstr "Site"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:10
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:24
+#: ../../../../inc/themes/material-blue/views/config/info.inc:78
+#: ../../../../inc/themes/material-blue/views/config/info.inc:92
+#: ../../../../inc/themes/material-blue/views/main/install.inc:135
+#: ../../../../inc/themes/material-blue/views/main/install.inc:136
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:19
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:21
+msgid "Idioma"
+msgstr "Sprache"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:15
msgid ""
-"Las claves de formularios enviados se encriptan mediante PKI, el resto de "
-"datos no."
+"Establece el idioma global de la aplicación. Es posible establecer un idioma "
+"por usuario en las preferencias."
msgstr ""
-"Die aus dem Formular gesendeten Passwörter werden verschlüsselt; andere "
-"Daten nicht."
+"Setzen Sie die globale Sprache. Der Nutzer kann seine Sprache in den "
+"Nutzereinstellungen wählen."
-#: ../../../../inc/themes/classic/footer.inc:6
-msgid "Seguro"
-msgstr "Sicher"
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:19
+msgid ""
+"Para mejorar/añadir las traducciones, puede colaborar en https://poeditor."
+"com/join/project/fmlsBuugyv"
+msgstr ""
+"Um die Übersetzungen zu verbessern / hinzufügen, können Sie sich beteiligen\n"
+"https://poeditor.com/join/project/fmlsBuugyv"
-#: ../../../../inc/themes/classic/footer.inc:6
-msgid "Inseguro"
-msgstr "Unsicher"
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:36
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:46
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:32
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:34
+msgid "Tema Visual"
+msgstr "Visuelles Thema"
-#: ../../../../inc/themes/classic/footer.inc:11
-#: ../../../../inc/themes/material-blue/footer.inc:18
-msgid "Ayuda :: FAQ :: Changelog"
-msgstr "Hilfe :: FAQ :: Changelog"
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:41
+msgid ""
+"Establece el tema visual global de la aplicación. Es posible establecer un "
+"tema visual por usuario en las preferencias."
+msgstr ""
+"Definieren des globalen visuellen Themas. Jeder Nutzer kann ein persönliches "
+"visuelles Thema in den Nutzereinstellungen wählen."
-#: ../../../../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/material-blue/views/config/general-site.inc:59
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:67
+msgid "Timeout de sesión (s)"
+msgstr "Ablauf der Sitzung (s)"
-#: ../../../../inc/themes/classic/groups.inc:10
-#: ../../../../inc/themes/material-blue/groups.inc:14
-msgid "Nombre del grupo"
-msgstr "Gruppenname"
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:77
+msgid "Fuerza para que todas las conexiones sean a través de HTTPS."
+msgstr "Erzwingt HTTPS bei allen Verbindungen"
-#: ../../../../inc/themes/classic/groups.inc:18
-#: ../../../../inc/themes/material-blue/groups.inc:26
-msgid "Descripción del grupo"
-msgstr "Beschreibung der Gruppe"
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:86
+msgid "Forzar HTTPS"
+msgstr "HTTPS erzwingen"
-#: ../../../../inc/themes/classic/import.inc:4
-#: ../../../../inc/themes/material-blue/import.inc:119
-msgid "Importar phpPMS"
-msgstr "phpPMS Import"
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:96
+msgid ""
+"Muestra información relativa a la configuración de la aplicación y "
+"rendimiento."
+msgstr "Zeigt Informationen zu Einstellungen und zur Leistung."
-#: ../../../../inc/themes/classic/import.inc:11
-#: ../../../../inc/themes/classic/install.inc:63
-#: ../../../../inc/themes/classic/install.inc:64
-#: ../../../../inc/themes/material-blue/import.inc:126
-#: ../../../../inc/themes/material-blue/import.inc:138
-msgid "Usuario BBDD"
-msgstr "Datenbankbenutzer"
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:104
+msgid "Habilitar depuración"
+msgstr "Debugging einschalten"
-#: ../../../../inc/themes/classic/import.inc:15
-#: ../../../../inc/themes/material-blue/import.inc:130
-msgid "Indicar el usuario de conexión a la base de datos de phpPMS."
-msgstr "phpPMS Datenbankbenutzer eingeben"
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:114
+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 kann sich niemand anmelden. Dies kann nur in der "
+"Konfigurationsdatei geändert werden."
-#: ../../../../inc/themes/classic/import.inc:25
-#: ../../../../inc/themes/classic/install.inc:71
-#: ../../../../inc/themes/classic/install.inc:73
-#: ../../../../inc/themes/material-blue/import.inc:144
-#: ../../../../inc/themes/material-blue/import.inc:150
-msgid "Clave BBDD"
-msgstr "Datenbank-Passwort"
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:122
+msgid "Modo mantenimiento"
+msgstr "Wartungsmodus"
-#: ../../../../inc/themes/classic/import.inc:33
-#: ../../../../inc/themes/classic/install.inc:78
-#: ../../../../inc/themes/classic/install.inc:79
-#: ../../../../inc/themes/material-blue/import.inc:156
-#: ../../../../inc/themes/material-blue/import.inc:168
-msgid "Nombre BBDD"
-msgstr "Datenbankname"
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:132
+msgid ""
+"Comprobar actualizaciones de la aplicación (sólo para los usuarios "
+"administradores)."
+msgstr "Prüft auf Anwendungsaktualisierungen (nur für Administratoren)."
-#: ../../../../inc/themes/classic/import.inc:37
-#: ../../../../inc/themes/material-blue/import.inc:160
-msgid "Indicar el nombre de la base de datos de phpPMS."
-msgstr "phpPMS Datenbankname eingeben"
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:140
+msgid "Comprobar actualizaciones"
+msgstr "Nach Updates schauen"
-#: ../../../../inc/themes/classic/import.inc:47
-#: ../../../../inc/themes/classic/install.inc:87
-#: ../../../../inc/themes/classic/install.inc:88
-#: ../../../../inc/themes/material-blue/import.inc:174
-#: ../../../../inc/themes/material-blue/import.inc:186
-msgid "Servidor BBDD"
-msgstr "Datenbank-Server"
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:150
+msgid ""
+"Comprobar si existen notificaciones de seguridad o avisos de sysPass (sólo "
+"para los usuarios administradores)."
+msgstr "Prüft auf sysPass Sicherheitsmeldungen (nur für Administratoren)."
-#: ../../../../inc/themes/classic/import.inc:51
-#: ../../../../inc/themes/material-blue/import.inc:178
-msgid "Indicar el servidor de la base de datos de phpPMS."
-msgstr "phpPMS Datenbankserver eingeben"
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:158
+msgid "Comprobar notificaciones"
+msgstr "Prüft auf Meldungen"
-#: ../../../../inc/themes/classic/import.inc:61
-#: ../../../../inc/themes/material-blue/import.inc:192
-msgid "Confirmar"
-msgstr "Bestätigen"
-
-#: ../../../../inc/themes/classic/import.inc:65
-#: ../../../../inc/themes/material-blue/import.inc:196
-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:80
-msgid "Iniciar"
-msgstr "Start"
-
-#: ../../../../inc/themes/classic/import.inc:86
-#: ../../../../inc/themes/material-blue/import.inc:4
+#: ../../../../inc/themes/material-blue/views/config/import.inc:8
msgid "Importar CSV/XML"
msgstr "CSV/XML Import"
-#: ../../../../inc/themes/classic/import.inc:93
-#: ../../../../inc/themes/material-blue/import.inc:11
+#: ../../../../inc/themes/material-blue/views/config/import.inc:14
+#: ../../../../inc/themes/material-blue/views/config/import.inc:24
msgid "Usuario por Defecto"
msgstr "Standardnutzer"
-#: ../../../../inc/themes/classic/import.inc:97
-#: ../../../../inc/themes/material-blue/import.inc:15
+#: ../../../../inc/themes/material-blue/views/config/import.inc:19
msgid "Define el usuario por defecto para las cuentas importadas."
msgstr "Definiert den Standardbenutzer für den Kontoimport."
-#: ../../../../inc/themes/classic/import.inc:114
-#: ../../../../inc/themes/classic/ldap.inc:144
-#: ../../../../inc/themes/material-blue/import.inc:33
-#: ../../../../inc/themes/material-blue/ldap.inc:170
+#: ../../../../inc/themes/material-blue/views/config/import.inc:40
+#: ../../../../inc/themes/material-blue/views/config/import.inc:50
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:207
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:217
msgid "Grupo por Defecto"
msgstr "Standard-Gruppe"
-#: ../../../../inc/themes/classic/import.inc:118
-#: ../../../../inc/themes/material-blue/import.inc:37
+#: ../../../../inc/themes/material-blue/views/config/import.inc:45
msgid "Define el grupo por defecto para las cuentas importadas."
msgstr "Definiert die Standardgruppe für den Kontoimport."
-#: ../../../../inc/themes/classic/import.inc:135
-#: ../../../../inc/themes/material-blue/import.inc:55
-#: ../../../../inc/themes/material-blue/import.inc:61
-msgid "Clave de Importación"
-msgstr "Passwort importieren"
-
-#: ../../../../inc/themes/classic/import.inc:143
-#: ../../../../inc/themes/material-blue/import.inc:67
-#: ../../../../inc/themes/material-blue/import.inc:73
-msgid "Delimitador CSV"
-msgstr "CSV Trennzeichen"
-
-#: ../../../../inc/themes/classic/import.inc:157
-#: ../../../../inc/themes/material-blue/import.inc:85
+#: ../../../../inc/themes/material-blue/views/config/import.inc:74
msgid "Soltar archivo aquí o click para seleccionar"
msgstr "Dateien hier fallen lassen oder zum selektieren anklicken"
-#: ../../../../inc/themes/classic/import.inc:173
-#: ../../../../inc/themes/material-blue/import.inc:102
+#: ../../../../inc/themes/material-blue/views/config/import.inc:102
msgid ""
"Permite realizar la importación de Cuentas, Categorías y Clientes desde "
"archivos XML y CSV."
@@ -4037,21 +4989,18 @@ msgstr ""
"Erlaubt Konten, Kategorien und Kunden aus einer XML oder CSV Datei zu "
"importieren."
-#: ../../../../inc/themes/classic/import.inc:175
-#: ../../../../inc/themes/material-blue/import.inc:104
+#: ../../../../inc/themes/material-blue/views/config/import.inc:104
msgid ""
"Los formatos de archivos XML soportados son: sysPass, KeePass y KeePassX"
msgstr "Die unterstützen XML Dateiformate sind: sysPass, KeePass und KeePassX"
-#: ../../../../inc/themes/classic/import.inc:177
-#: ../../../../inc/themes/material-blue/import.inc:106
+#: ../../../../inc/themes/material-blue/views/config/import.inc:106
msgid ""
"Arrastar el archivo a importar a la zona indicada o hacer click sobre la "
"flecha."
msgstr "Datei in die Importzone ziehen oder auf den Pfeil klicken."
-#: ../../../../inc/themes/classic/import.inc:179
-#: ../../../../inc/themes/material-blue/import.inc:108
+#: ../../../../inc/themes/material-blue/views/config/import.inc:108
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."
@@ -4059,18 +5008,19 @@ msgstr ""
"Bei KeePass oder KeePassX Dateien wird der Kundenname \"KeePass\" oder "
"\"KeePassX\" und die Kategorienamen wie die Gruppennamen sein."
-#: ../../../../inc/themes/classic/import.inc:181
-#: ../../../../inc/themes/material-blue/import.inc:110
+#: ../../../../inc/themes/material-blue/views/config/import.inc:110
msgid "La importación de archivos CSV se realiza con el siguiente formato:"
msgstr "Die zu importierende CSV Datei benötigt folgendes Format:"
-#: ../../../../inc/themes/classic/import.inc:183
-#: ../../../../inc/themes/material-blue/import.inc:112
-msgid "nombre_de_cuenta;cliente;categoría;url;usuario;clave;notas"
-msgstr "konto_name;kunde;kategorie;url;benutzer;passwort;bemerkungen"
+#: ../../../../inc/themes/material-blue/views/config/import.inc:112
+msgid ""
+"\"nombre_de_cuenta\";\"cliente\";\"categoría\";\"url\";\"usuario\";\"clave\";"
+"\"notas\""
+msgstr ""
+"Name\", \"Kunde\", \"Kategorie\", \"URL\", \"Benutzer\", \"Passwort\", "
+"\"Notizen\""
-#: ../../../../inc/themes/classic/import.inc:185
-#: ../../../../inc/themes/material-blue/import.inc:114
+#: ../../../../inc/themes/material-blue/views/config/import.inc:114
msgid ""
"En todos los casos, si el cliente o la categoría no están creados, se crean "
"automáticamente."
@@ -4078,952 +5028,203 @@ msgstr ""
"In allen Fällen, sofern der Kunden- oder Kategorienname noch nicht "
"existieren, wird dieser automatisch erstellt."
-#: ../../../../inc/themes/classic/info.inc:4
-#: ../../../../inc/themes/material-blue/info.inc:4
+#: ../../../../inc/themes/material-blue/views/config/import.inc:121
+msgid "XML"
+msgstr "XML"
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:127
+#: ../../../../inc/themes/material-blue/views/config/import.inc:142
+msgid "Clave de Importación"
+msgstr "Passwort importieren"
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:132
+msgid "Sólo es necesaria para archivos XML de sysPass encriptados."
+msgstr ""
+"Es wird nur für sysPass XML-Dateien benötigt, die verschlüsselt wurden."
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:153
+msgid ""
+"Sólo es necesaria para archivos XML de sysPass con clave maestra distinta de "
+"la actual."
+msgstr ""
+"Es wird nur für sysPass XML-Dateien benötigt, die mit einem anderen Master-"
+"Passwort vom aktuellen verschlüsselt wurden."
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:170
+msgid "CSV"
+msgstr "CSV"
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:176
+#: ../../../../inc/themes/material-blue/views/config/import.inc:191
+msgid "Delimitador CSV"
+msgstr "CSV Trennzeichen"
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:181
+msgid "Sólo es necesario para archivos CSV."
+msgstr "Es wird nur für CSV-Dateien benötigt."
+
+#: ../../../../inc/themes/material-blue/views/config/info.inc:5
msgid "Información de la Aplicación"
msgstr "Anwendungsinformationen"
-#: ../../../../inc/themes/classic/info.inc:10
-#: ../../../../inc/themes/material-blue/info.inc:10
+#: ../../../../inc/themes/material-blue/views/config/info.inc:11
+#: ../../../../inc/themes/material-blue/views/config/info.inc:14
msgid "Versión sysPass"
msgstr "sysPass Version"
-#: ../../../../inc/themes/classic/info.inc:18
-#: ../../../../inc/themes/material-blue/info.inc:18
+#: ../../../../inc/themes/material-blue/views/config/info.inc:21
+#: ../../../../inc/themes/material-blue/views/config/info.inc:24
msgid "Base de Datos"
msgstr "Datenbank"
-#: ../../../../inc/themes/classic/info.inc:30
-#: ../../../../inc/themes/material-blue/info.inc:30
+#: ../../../../inc/themes/material-blue/views/config/info.inc:35
+#: ../../../../inc/themes/material-blue/views/config/info.inc:38
msgid "PHP"
msgstr "PHP"
-#: ../../../../inc/themes/classic/info.inc:35
-#: ../../../../inc/themes/material-blue/info.inc:35
+#: ../../../../inc/themes/material-blue/views/config/info.inc:42
msgid "Extensiones"
msgstr "Erweiterungen"
-#: ../../../../inc/themes/classic/info.inc:37
-#: ../../../../inc/themes/material-blue/info.inc:37
+#: ../../../../inc/themes/material-blue/views/config/info.inc:44
msgid "Memoria Usada"
msgstr "Benutzer Speicher"
-#: ../../../../inc/themes/classic/info.inc:44
-#: ../../../../inc/themes/classic/ldap.inc:32
-#: ../../../../inc/themes/classic/mail.inc:21
-#: ../../../../inc/themes/material-blue/config.inc:372
-#: ../../../../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/mail.inc:24
-#: ../../../../inc/themes/material-blue/mail.inc:30
-msgid "Servidor"
-msgstr "Server"
+#: ../../../../inc/themes/material-blue/views/config/info.inc:49
+msgid "OP Cache"
+msgstr ""
-#: ../../../../inc/themes/classic/install.inc:4
-#: ../../../../inc/themes/material-blue/install.inc:4
-msgid "Instalación "
-msgstr "Installation"
+#: ../../../../inc/themes/material-blue/views/config/info.inc:68
+#: ../../../../inc/themes/material-blue/views/config/info.inc:71
+msgid "Copia de Configuración"
+msgstr "Einstellungen sichern"
-#: ../../../../inc/themes/classic/install.inc:25
-#: ../../../../inc/themes/material-blue/install.inc:26
-msgid "Crear cuenta de admin de sysPass"
-msgstr "Administrator-Konto anlegen"
+#: ../../../../inc/themes/material-blue/views/config/info.inc:83
+msgid "Indica si el idioma se encuentra disponible"
+msgstr "Gibt an, ob die Sprache verfügbar ist oder nicht."
-#: ../../../../inc/themes/classic/install.inc:32
-#: ../../../../inc/themes/material-blue/install.inc:38
-msgid "Login del usuario administrador de sysPass"
-msgstr "sysPass Administrator Anmeldung"
+#: ../../../../inc/themes/material-blue/views/config/info.inc:87
+msgid ""
+"Si no está instalado, es necesario instalar las locales en el sistema "
+"operativo. Más información en Wiki."
+msgstr ""
+"Wenn es nicht installiert ist, musst du die richtigen "
+"Betriebssystemgebietsschemas installieren. Weitere Informationen unter Wiki"
-#: ../../../../inc/themes/classic/install.inc:58
-#: ../../../../inc/themes/material-blue/install.inc:72
-msgid "Configurar BBDD"
-msgstr "Datenbank-Konfiguration"
+#: ../../../../inc/themes/material-blue/views/config/info.inc:99
+#: ../../../../inc/themes/material-blue/views/config/info.inc:102
+msgid "Plugins Cargados"
+msgstr "Geladene Plugins"
-#: ../../../../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:106
-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:124
-msgid "Modo Hosting"
-msgstr "Hosting-Modus"
-
-#: ../../../../inc/themes/classic/install.inc:104
-#: ../../../../inc/themes/material-blue/install.inc:131
-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:138
-#: ../../../../inc/themes/material-blue/install.inc:139
-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
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:22
msgid "Habilita de autentificación mediante servidor LDAP."
msgstr "Aktiviert authentifizierung mit einem LDAP Server."
-#: ../../../../inc/themes/classic/ldap.inc:20
-#: ../../../../inc/themes/material-blue/ldap.inc:20
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:26
msgid "Este método utilizará MySQL en caso de fallo."
msgstr "Diese Methode wird MySQL als Reserve benutzen."
-#: ../../../../inc/themes/classic/ldap.inc:36
-#: ../../../../inc/themes/material-blue/ldap.inc:39
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:36
+msgid "Habilitar LDAP"
+msgstr "LDAP verwenden"
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:46
+msgid "Habilita el modo de conexión con LDAP de Active Directory."
+msgstr "Aktiviert den Active Directory LDAP Verbindungsmodus."
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:56
+msgid "Active Directory"
+msgstr "Active Directory"
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:67
msgid "Nombre o dirección IP del servidor de LDAP."
msgstr "Hostname oder IP Adresse des LDAP Servers"
-#: ../../../../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
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:71
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:102
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:153
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:187
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:111
msgid "Ejemplos:"
msgstr "Beispiele:"
-#: ../../../../inc/themes/classic/ldap.inc:57
-#: ../../../../inc/themes/material-blue/ldap.inc:64
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:93
msgid "Usuario de conexión"
msgstr "Benutzer für Bind"
-#: ../../../../inc/themes/classic/ldap.inc:61
-#: ../../../../inc/themes/material-blue/ldap.inc:68
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:98
msgid "Usuario para conectar con el servicio de LDAP."
msgstr "Nutzer für die Verbindung zum LDAP Service."
-#: ../../../../inc/themes/classic/ldap.inc:81
-#: ../../../../inc/themes/material-blue/ldap.inc:92
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:123
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
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:128
+msgid "Clave del usuario de conexión a LDAP."
+msgstr "LDAP Verbindungunspasswort"
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:144
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:168
msgid "Base de búsqueda"
msgstr "Suchpräfix"
-#: ../../../../inc/themes/classic/ldap.inc:96
-#: ../../../../inc/themes/material-blue/ldap.inc:115
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:149
msgid "Base en la que realizar la búsqueda de usuarios de LDAP."
msgstr "LDAP Basis für die LDAP Nutzer-Suche"
-#: ../../../../inc/themes/classic/ldap.inc:120
-#: ../../../../inc/themes/material-blue/ldap.inc:143
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:179
msgid ""
"Grupo de LDAP al que debe de pertenecer el usuario para permitir el acceso."
msgstr "LDAP Gruppe, zu welcher der Benutzer gehören muss, um sich anzumelden."
-#: ../../../../inc/themes/classic/ldap.inc:124
-#: ../../../../inc/themes/material-blue/ldap.inc:147
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:183
msgid "Este grupo debe de estar ubicado en la base de búsquedas de LDAP."
msgstr "Diese Gruppe muss in der LDAP Suchbasis platziert werden."
-#: ../../../../inc/themes/classic/ldap.inc:148
-#: ../../../../inc/themes/material-blue/ldap.inc:174
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:212
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
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:231
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:241
msgid "Perfil por Defecto"
msgstr "Standard-Profil"
-#: ../../../../inc/themes/classic/ldap.inc:169
-#: ../../../../inc/themes/material-blue/ldap.inc:194
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:236
msgid ""
"Define el perfil de usuarios por defecto para los nuevos usuarios de LDAP."
msgstr "Definiert das Standardprofil für neu erstellte LDAP Benutzer."
-#: ../../../../inc/themes/classic/ldap.inc:186
-#: ../../../../inc/themes/material-blue/ldap.inc:210
-msgid "Active Directory"
-msgstr "Active Directory"
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:255
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:258
+msgid "Resultados"
+msgstr "Ergebnisse"
-#: ../../../../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:74
-msgid "¿Olvidó su clave?"
-msgstr "Passwort vergessen?"
-
-#: ../../../../inc/themes/classic/login.inc:63
-#: ../../../../inc/themes/material-blue/login.inc:90
-msgid "Aplicación actualizada correctamente"
-msgstr "Anwendung erfolgreich aktualisiert"
-
-#: ../../../../inc/themes/classic/login.inc:68
-#: ../../../../inc/themes/classic/login.inc:69
-#: ../../../../inc/themes/material-blue/login.inc:95
-#: ../../../../inc/themes/material-blue/login.inc:96
-#: ../../../../inc/themes/material-blue/login.inc:98
-msgid "Nuevas Características"
-msgstr "Neue Eigenschaften"
-
-#: ../../../../inc/themes/classic/mail.inc:11
-#: ../../../../inc/themes/material-blue/mail.inc:11
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:21
msgid "Habilitar notificaciones de correo"
msgstr "E-Mail-Benachrichtigung einschalten"
-#: ../../../../inc/themes/classic/mail.inc:29
-#: ../../../../inc/themes/material-blue/config.inc:386
-#: ../../../../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
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:58
msgid "Habilitar Autentificación"
msgstr "aktivieren Sie Authentifizierung"
-#: ../../../../inc/themes/classic/mail.inc:68
-#: ../../../../inc/themes/material-blue/mail.inc:91
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:90
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:93
+msgid "Seguridad"
+msgstr "Sicherheit"
+
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:96
msgid "Deshabilitada"
msgstr "Inaktiv"
-#: ../../../../inc/themes/classic/mail.inc:77
-#: ../../../../inc/themes/material-blue/mail.inc:100
-#: ../../../../inc/themes/material-blue/mail.inc:107
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:106
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:114
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:70
-#: ../../../../inc/themes/classic/search.inc:150
-#: ../../../../inc/themes/material-blue/search.inc:160
-msgid "Más Acciones"
-msgstr "Weitere Aktionen"
-
-#: ../../../../inc/themes/classic/passreset.inc:13
-#: ../../../../inc/themes/material-blue/passreset.inc:9
-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:23
-msgid "Email del Usuario"
-msgstr "Benutzer-E-Mail"
-
-#: ../../../../inc/themes/classic/passreset.inc:27
-msgid "Nueva Clave"
-msgstr "Neues Passwort"
-
-#: ../../../../inc/themes/classic/passreset.inc:46
-#: ../../../../inc/themes/material-blue/passreset.inc:47
-msgid "Volver a iniciar sesión"
-msgstr "Zurück zur Anmeldung"
-
-#: ../../../../inc/themes/classic/passreset.inc:48
-#: ../../../../inc/themes/material-blue/2fa.inc:25
-#: ../../../../inc/themes/material-blue/passreset.inc:53
-#: ../../../../inc/themes/material-blue/passreset.inc:54
-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:58
-#: ../../../../inc/themes/material-blue/passreset.inc:59
-msgid "Cambiar"
-msgstr "Ändern"
-
-#: ../../../../inc/themes/classic/passreset.inc:52
-msgid "Cambiar Clave"
-msgstr "Passwort ändern"
-
-#: ../../../../inc/themes/classic/preferences.inc:73
-#: ../../../../inc/themes/material-blue/preferences.inc:74
-msgid "Ordenar resultados por visitas"
-msgstr "Sortiere Suchresultate nach Aufrufen"
-
-#: ../../../../inc/themes/classic/preferences.inc:77
-#: ../../../../inc/themes/material-blue/preferences.inc:78
-msgid ""
-"Ordena los resultados de búsqueda por el número de visitas de las cuentas."
-msgstr "Sortiert Kontensuchresultate anhand der Anzahl der Kontenzugriffe."
-
-#: ../../../../inc/themes/classic/preferences.inc:90
-#: ../../../../inc/themes/material-blue/preferences.inc:91
-msgid "Barra de navegación superior"
-msgstr "Navigationsleiste oben"
-
-#: ../../../../inc/themes/classic/preferences.inc:94
-#: ../../../../inc/themes/material-blue/preferences.inc:95
-msgid "Mostrar una barra de navegación superior en las búsquedas."
-msgstr "Zeigt eine Navigationsleiste oberhalb der Suchresultate."
-
-#: ../../../../inc/themes/classic/preferences.inc:107
-#: ../../../../inc/themes/material-blue/preferences.inc:108
-msgid "Mostrar Acciones Ocultas"
-msgstr "Zeige versteckte Aktionen"
-
-#: ../../../../inc/themes/classic/preferences.inc:111
-#: ../../../../inc/themes/material-blue/preferences.inc:112
-msgid ""
-"Mostrar las acciones ocultas para los elementos de la búsqueda de cuentas."
-msgstr "Erlaubt die versteckten Aktionen der Kontensuchseite anzuzeigen."
-
-#: ../../../../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
-#: ../../../../inc/themes/material-blue/profiles.inc:60
-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 "Accountimport"
-
-#: ../../../../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 "Spezifische Feld Verwaltung"
-
-#: ../../../../inc/themes/classic/profiles.inc:112
-#: ../../../../inc/themes/material-blue/profiles.inc:129
-msgid "Gestión de autorizaciones API"
-msgstr "API Berechtigungsmanagement"
-
-#: ../../../../inc/themes/classic/profiles.inc:112
-#: ../../../../inc/themes/material-blue/profiles.inc:129
-msgid "Autorizaciones API"
-msgstr "API Berechtigungen"
-
-#: ../../../../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 ""
-
-#: ../../../../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 "Benutzt von"
-
-#: ../../../../inc/themes/classic/profiles.inc:139
-#: ../../../../inc/themes/material-blue/profiles.inc:155
-msgid "No usado"
-msgstr "Nicht benutzt"
-
-#: ../../../../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:454
-#: ../../../../inc/themes/material-blue/editpass.inc:55
-#: ../../../../inc/themes/material-blue/mgmttabs.inc:13
-#: ../../../../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:10
-#: ../../../../inc/themes/classic/search.inc:189
-#: ../../../../inc/themes/material-blue/search.inc:10
-#: ../../../../inc/themes/material-blue/search.inc:199
-msgid "Filtro ON"
-msgstr "Filter Eingeschaltet"
-
-#: ../../../../inc/themes/classic/search.inc:14
-#: ../../../../inc/themes/classic/search.inc:193
-#: ../../../../inc/themes/material-blue/search.inc:14
-#: ../../../../inc/themes/material-blue/search.inc:203
-msgid "Global ON"
-msgstr "Global eingeschaltet"
-
-#: ../../../../inc/themes/classic/search.inc:63
-#: ../../../../inc/themes/material-blue/search.inc:65
-msgid "Buscar en Wiki"
-msgstr "Im Wiki suchen"
-
-#: ../../../../inc/themes/classic/search.inc:99
-#: ../../../../inc/themes/material-blue/search.inc:101
-msgid "Abrir enlace a"
-msgstr "Öffne Verweis nach"
-
-#: ../../../../inc/themes/classic/search.inc:117
-#: ../../../../inc/themes/material-blue/search.inc:125
-msgid "Archivos adjuntos"
-msgstr "Anhänge"
-
-#: ../../../../inc/themes/classic/search.inc:124
-#: ../../../../inc/themes/material-blue/search.inc:134
-msgid "Enlace a Wiki"
-msgstr "Verweis zum Wiki"
-
-#: ../../../../inc/themes/classic/searchbox.inc:5
-#: ../../../../inc/themes/material-blue/searchbox.inc:5
-msgid "Limpiar"
-msgstr "Löschen"
-
-#: ../../../../inc/themes/classic/searchbox.inc:7
-#: ../../../../inc/themes/material-blue/searchbox.inc:10
-msgid "Texto a buscar"
-msgstr "Suchbegriff"
-
-#: ../../../../inc/themes/classic/searchbox.inc:12
-#: ../../../../inc/themes/material-blue/searchbox.inc:15
-msgid "Parámetros especiales:"
-msgstr "Spezialparameter"
-
-#: ../../../../inc/themes/classic/searchbox.inc:15
-#: ../../../../inc/themes/material-blue/searchbox.inc:18
-msgid "Buscar cuentas a las que 'login' tenga acceso"
-msgstr "Suche nach Konten, für die 'login' Rechte besitzt"
-
-#: ../../../../inc/themes/classic/searchbox.inc:17
-#: ../../../../inc/themes/material-blue/searchbox.inc:19
-msgid "Buscar cuentas a las que 'group_name' tenga acceso"
-msgstr "Suche nach Konten, für die 'group_name' Rechte besitzt"
-
-#: ../../../../inc/themes/classic/searchbox.inc:19
-#: ../../../../inc/themes/material-blue/searchbox.inc:20
-msgid "Buscar cuentas con archivos con el nombre 'file_name'"
-msgstr ""
-"Suche nach Konten, welche eine Datei enthalten mit dem Dateinamen 'file_name'"
-
-#: ../../../../inc/themes/classic/searchbox.inc:24
-#: ../../../../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:50
-#: ../../../../inc/themes/material-blue/searchbox.inc:54
-msgid "CPP"
-msgstr "KPS"
-
-#: ../../../../inc/themes/classic/searchbox.inc:51
-#: ../../../../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 "Aktiviert Zwei-Faktor-Authentifizierung"
-
-#: ../../../../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 "Fehler beim Abrufen des QR-Codes. Bitte erneut versuchen."
-
-#: ../../../../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 ""
-"Einmal aktiviert, kann man sich nur anmelden, wenn man das Gerät besitzt, "
-"dass den Code generiert."
-
-#: ../../../../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: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 "Autorisierung erneuern"
-
-#: ../../../../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 "Aktualisiert"
-
-#: ../../../../inc/themes/classic/update.inc:23
-#: ../../../../inc/themes/material-blue/update.inc:22
-msgid "Error al comprobar actualizaciones"
-msgstr "Fehler bei der Updateprüfung"
-
-#: ../../../../inc/themes/classic/upgrade.inc:8
-#: ../../../../inc/themes/material-blue/upgrade.inc:6
-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:12
-msgid "Código de Seguridad"
-msgstr "Sicherheitscode"
-
-#: ../../../../inc/themes/classic/upgrade.inc:21
-#: ../../../../inc/themes/material-blue/upgrade.inc:23
-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 ""
-"Aktiviert die Option einen Link für Suchresultate zu einem externen Wiki."
-
-#: ../../../../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 "URL, welche das Wiki zur Inhaltssuche nutzt."
-
-#: ../../../../inc/themes/classic/wiki.inc:35
-#: ../../../../inc/themes/material-blue/wiki.inc:38
-msgid "Como parámetro se utiliza el nombre del cliente."
-msgstr "Der Kundenname wird benutzt als Parameter."
-
-#: ../../../../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 "URL, welche das Wiki für den Inhaltszugriff nutzt."
-
-#: ../../../../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 "Der Kontoname wird benutzt als Parameter der Wiki Such Variable."
-
-#: ../../../../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 "Prefix zur Auswahl der Konten die einen Link zum Wiki besitzen."
-
-#: ../../../../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 "Vergangenheit"
-
-#: ../../../../inc/themes/material-blue/account.inc:34
-msgid "> Usar texto y crear nuevo"
-msgstr "> Nutze den Text und erstelle einen neuen"
-
-#: ../../../../inc/themes/material-blue/account.inc:43
-msgid "Seleccionar o escribir para crear uno nuevo"
-msgstr "Auswählen oder schreiben um einen neuen zu kreieren"
-
-#: ../../../../inc/themes/material-blue/account.inc:114
-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:115
-#: ../../../../inc/themes/material-blue/import.inc:215
-msgid "Realizar"
-msgstr "Ausführen"
-
-#: ../../../../inc/themes/material-blue/config.inc:67
-msgid "Forzar HTTPS"
-msgstr "HTTPS erzwingen"
-
-#: ../../../../inc/themes/material-blue/config.inc:71
-msgid "Fuerza para que todas las conexiones sean a través de HTTPS."
-msgstr "Erzwingt HTTPS bei allen Verbindungen"
-
-#: ../../../../inc/themes/material-blue/config.inc:232
-#: ../../../../inc/themes/material-blue/preferences.inc:68
-msgid "Número de resultados por página"
-msgstr "Ergebnisse pro Seite"
-
-#: ../../../../inc/themes/material-blue/config.inc:346
-msgid "Tamaño máximo de archivo en bytes"
-msgstr "Maximale Dateigröße"
-
-#: ../../../../inc/themes/material-blue/config.inc:353
-msgid "Proxy"
-msgstr "Proxy"
-
-#: ../../../../inc/themes/material-blue/config.inc:359
-msgid "Usar Proxy"
-msgstr "Proxy benutzen"
-
-#: ../../../../inc/themes/material-blue/config.inc:380
-msgid "Servidor proxy"
-msgstr "Proxyserver"
-
-#: ../../../../inc/themes/material-blue/config.inc:394
-msgid "Puerto del servidor proxy"
-msgstr "Proxyserver Port"
-
-#: ../../../../inc/themes/material-blue/config.inc:408
-msgid "Usuario del servidor proxy"
-msgstr "Proxyserver Benutzer"
-
-#: ../../../../inc/themes/material-blue/config.inc:422
-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 "Feldhilfe"
-
-#: ../../../../inc/themes/material-blue/footer.inc:11
-msgid "Preferencias de usuario"
-msgstr "Benutzereinstellungen"
-
-#: ../../../../inc/themes/material-blue/install.inc:33
-msgid "Usuario administrador de sysPass"
-msgstr "sysPass Administrator"
-
-#: ../../../../inc/themes/material-blue/install.inc:81
-msgid "Usuario acceso BBDD"
-msgstr "DB Zugriffsbenutzer"
-
-#: ../../../../inc/themes/material-blue/install.inc:86
-msgid "Usuario con permisos de administrador de MySQL"
-msgstr "Benutzer mit MySQL Admin Rechte"
-
-#: ../../../../inc/themes/material-blue/install.inc:94
-msgid "Clave acceso BBDD"
-msgstr "DB Zugriffspasswort"
-
-#: ../../../../inc/themes/material-blue/install.inc:101
-msgid "Nombre BBDD para sysPass"
-msgstr "sysPass Datenbankname"
-
-#: ../../../../inc/themes/material-blue/install.inc:113
-msgid "Servidor BBDD para sysPass"
-msgstr "sysPass Datenbankserver"
-
-#: ../../../../inc/themes/material-blue/install.inc:118
-msgid "Nombre del servidor para instalar la base de datos de sysPass"
-msgstr "Name des Servers zur Installation der sysPass Datenbank"
-
-#: ../../../../inc/themes/material-blue/ldap.inc:96
-msgid "Clave del usuario de conexión a LDAP."
-msgstr "LDAP Verbindungunspasswort"
-
-#: ../../../../inc/themes/material-blue/mail.inc:118
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:124
msgid ""
"Habilita que los usuarios puedan solicitar modificaciones o acceso a las "
"cuentas sin permisos."
@@ -5031,42 +5232,1219 @@ msgstr ""
"Erlaubt, dass Nutzer Änderungen an oder Zugriff auf Konten, zu denen sie "
"keinen Zugriff haben, erbitten können."
-#: ../../../../inc/themes/material-blue/profiles.inc:25
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:133
+msgid "Habilitar peticiones por correo"
+msgstr "Erlaube Anfragen per E-Mail"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:20
+msgid ""
+"Habilita la opción de añadir un enlace a Wiki externa para los resultados de "
+"la búsqueda."
+msgstr ""
+"Aktiviert die Option einen Link für Suchresultate zu einem externen Wiki."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:30
+msgid "Habilitar enlaces Wiki"
+msgstr "Wike-Links einschalten"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:36
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:63
+msgid "URL de búsqueda Wiki"
+msgstr "Wiki Such-URL"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:41
+msgid "URL que utiliza la wiki para realizar una búsqueda de una página."
+msgstr "URL, welche das Wiki zur Inhaltssuche nutzt."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:45
+msgid "Como parámetro se utiliza el nombre del cliente."
+msgstr "Der Kundenname wird benutzt als Parameter."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:49
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:82
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:163
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:190
+msgid "Ejemplo:"
+msgstr "Beispiel:"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:69
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:96
+msgid "URL de página en Wiki"
+msgstr "Wiki URL"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:74
+msgid "URL que utiliza la wiki para acceder a los detalles de una página."
+msgstr "URL, welche das Wiki für den Inhaltszugriff nutzt."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:78
+msgid ""
+"El nombre de la cuenta se utiliza como parámetro de la variable de búsqueda "
+"de la Wiki."
+msgstr "Der Kontoname wird benutzt als Parameter der Wiki Such Variable."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:102
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:116
+msgid "Prefijo para nombre de cuenta"
+msgstr "Präfix eines Kontonamens"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:107
+msgid ""
+"Prefijo para determinar qué cuentas tienen un enlace a una página de la Wiki."
+msgstr "Prefix zur Auswahl der Konten die einen Link zum Wiki besitzen."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:124
+msgid "DokuWiki API"
+msgstr "DokuWiki API"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:134
+msgid ""
+"Habilita la conexión a la API XML-RPC de DokuWiki para los enlaces Wiki."
+msgstr "Aktiviert DokuWiki XML-RPC API für Wiki-Links."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:137
+msgid ""
+"Para que esta característica funcione, es necesario habilitar los enlaces "
+"Wiki para el filtrado de cuentas."
+msgstr ""
+"Um diese Funktion zu erhalten, sollten Sie Wiki-Links für die "
+"Kontenfilterung aktivieren"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:147
+msgid "Habilitar API de DokuWiki"
+msgstr "DokuWiki API aktivieren"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:154
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:175
+msgid "URL API"
+msgstr "API URL"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:159
+msgid "URL de la API de DokuWiki."
+msgstr "DokuWiki API URL"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:181
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:203
+msgid "URL Base"
+msgstr "Basis-URL"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:186
+msgid "URL base de DokuWiki."
+msgstr "DokuWiki-Basis-URL"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:214
+msgid "Usuario para conectar a la API de DokuWiki."
+msgstr "Benutzer zum Verbinden zur DokuWiki API"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:242
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:258
+msgid "Namespace"
+msgstr "Namensraum"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:247
+msgid "Namespace utilizado para buscar las páginas."
+msgstr "Namensraum, der verwendet wird, um Seiten zu durchsuchen."
+
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:22
+msgid "Fecha / Hora"
+msgstr "Datum/Zeit"
+
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:25
+msgid "Nivel"
+msgstr "Ebene"
+
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:28
+msgid "Evento"
+msgstr "Ereignis"
+
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:34
+msgid "IP"
+msgstr "IP"
+
+#: ../../../../inc/themes/material-blue/views/grid/datagrid-nav-full.inc:11
+msgid "Filtro ON"
+msgstr "Filter Eingeschaltet"
+
+#: ../../../../inc/themes/material-blue/views/grid/datatabs-grid.inc:102
+msgid "Eliminar Seleccionados"
+msgstr "Ausgewählte löschen"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:26
+msgid "Nombre del campo"
+msgstr "Feldname"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:57
+msgid "Texto Ayuda"
+msgstr "Hilfetext"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:63
+msgid "Ayuda del campo"
+msgstr "Feldhilfe"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:74
+msgid "Obligatorio"
+msgstr "Benötigt"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:25
+msgid "Nombre del grupo"
+msgstr "Gruppenname"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:38
+msgid "Descripción del grupo"
+msgstr "Beschreibung der Gruppe"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:20
+msgid "Nombre del plugin"
+msgstr "Plugin-Name"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:32
+msgid "Versión del plugin"
+msgstr "Plugin-Version"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:37
+msgid "Versión Compatible"
+msgstr "Kompatible Version"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:44
+msgid "Versión de sysPass compatible"
+msgstr "Kompatible sysPass Version"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:49
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:25
+msgid "Autor"
+msgstr "Autor"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:56
+msgid "Autor del plugin"
+msgstr "Plugin-Autor"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:25
+msgid "Nombre del perfil"
+msgstr "Profilname"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:40
msgid "Crear nueva cuenta"
msgstr "Neuen Account erstellen"
-#: ../../../../inc/themes/material-blue/profiles.inc:25
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:40
msgid "Crear"
msgstr "Erstellen"
-#: ../../../../inc/themes/material-blue/profiles.inc:55
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:47
+msgid "Ver detalles de cuenta"
+msgstr "Kontodetails anzeigen"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:47
+msgid "Ver"
+msgstr "Ansehen"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:54
+msgid "Ver clave de cuenta"
+msgstr "Passwort anzeigen"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:61
+msgid "Ver historial de cuenta"
+msgstr "Konto-Historie anzeigen"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:68
+msgid "Editar cuenta"
+msgstr "Konto ändern"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:75
+msgid "Editar clave de cuenta"
+msgstr "Passwort des Kontos ändern"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:75
+msgid "Editar Clave"
+msgstr "Passwort ändern"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:82
msgid "Eliminar cuenta"
msgstr "Account löschen"
-#: ../../../../inc/themes/material-blue/profiles.inc:55
-msgid "Eliminar"
-msgstr "Löschen"
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:89
+msgid "Ver archivos de cuenta"
+msgstr "Dateien des Kontos anzeigen"
-#: ../../../../inc/themes/material-blue/profiles.inc:77
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:96
+msgid "Publicar enlace a cuenta"
+msgstr "Teile Link mit Konto"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:96
+msgid "Publicar Enlace"
+msgstr "Teile Link"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:103
+msgid "Crear cuenta privada"
+msgstr "Erstelle privates Konto"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:110
+msgid "Crear cuenta privada para grupo"
+msgstr "Erstellen Sie ein privates Konto für die Gruppe"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:117
+msgid "Asignar permisos"
+msgstr "Berechtigungen zuweisen"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:130
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:132
+msgid "Gestión"
+msgstr "Verwaltung"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:140
+msgid "Gestión de usuarios"
+msgstr "Benutzerverwaltung"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:147
+msgid "Gestión de grupos"
+msgstr "Gruppenverwaltung"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:154
+msgid "Gestión de perfiles"
+msgstr "Profilverwaltung"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:161
+msgid "Gestión de categorías"
+msgstr "Kategorienverwaltung"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:168
+msgid "Gestión de clientes"
+msgstr "Kundenverwaltung"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:175
+msgid "Gestión de campos personalizados"
+msgstr "Spezifische Feld Verwaltung"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:182
+msgid "Gestión de autorizaciones API"
+msgstr "API Berechtigungsmanagement"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:189
+msgid "Gestión de enlaces"
+msgstr "Link-Verwaltung"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:196
+msgid "Gestión de cuentas"
+msgstr "Kontenverwaltung"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:210
+msgid "Gestión de etiquetas"
+msgstr "Tag-Verwaltung"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:233
msgid "Opciones de encriptación"
msgstr "Verschlüsselungsoptionen"
-#: ../../../../inc/themes/material-blue/profiles.inc:82
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:240
msgid "Realizar copia de seguridad y exportar"
msgstr "Backup erstellen und exportieren"
-#: ../../../../inc/themes/material-blue/security.inc:4
-msgid "Autentificación"
-msgstr "Authentifizierung"
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:240
+msgid "Backup"
+msgstr "Sicherung"
-#, fuzzy
-#~ msgid "No es posible guardar el archivo \"%s\" Tamaño máximo:"
-#~ msgstr "XML-Datei kann nicht verarbeitet werden"
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:247
+msgid "Realizar importación de cuentas"
+msgstr "Accountimport"
-#, fuzzy
-#~ msgid "Error al actualizar datos encriptados"
-#~ msgstr "Aktualisiere verschlüsselte Daten"
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:253
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:255
+msgid "Otros"
+msgstr "Andere"
-#, fuzzy
-#~ msgid "Gestión de Clientes y Categorías"
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:263
+msgid "Ver log de eventos"
+msgstr "Ereignis Log anschauen"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:270
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:272
+msgid "Usado por"
+msgstr "Benutzt von"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:59
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:61
+msgid "Hash"
+msgstr "Hash"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:67
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:69
+msgid "Uso"
+msgstr "Benutzen"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/tags.inc:23
+msgid "Nombre de la etiqueta"
+msgstr "Tag Name"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:42
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:141
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:105
+msgid "Opciones"
+msgstr "Optionen"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:45
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:49
+msgid "Regenerar Autorización"
+msgstr "Autorisierung erneuern"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:55
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:57
+msgid "Token"
+msgstr "Token"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:31
+msgid "Nombre de usuario completo"
+msgstr "Volständiger Benutzername"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:45
+msgid "Login de inicio de sesión"
+msgstr "Sitzungs-Anmeldung"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:94
+msgid "Dirección de correo"
+msgstr "E-Mail-Adresse"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:145
+msgid "Administrador de la aplicación"
+msgstr "Anwendungs-Administrator"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:152
+msgid "Administrador de cuentas"
+msgstr "Anwendungs-Administrator"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:167
+msgid "Forzar cambio de clave"
+msgstr "Erzwinge Passwortänderung"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:181
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:183
+msgid "Entradas"
+msgstr "Einträge"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:190
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:192
+msgid "Último Acceso"
+msgstr "Letzter Zugriff"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:208
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:210
+msgid "Fecha Clave Maestra"
+msgstr "Datum des Master-Passworts"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:11
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:69
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:72
+msgid "Salir"
+msgstr "Abmelden"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:25
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:56
+msgid "Preferencias de usuario"
+msgstr "Benutzereinstellungen"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:34
+#, php-format
+msgid "Hay %d notificaciones pendientes"
+msgstr "Es gibt %d ungelesene Benachrichtigungen"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:41
+msgid "No hay no hay notificaciones pendientes"
+msgstr "Anstehende Benachrichtigungen sind nicht vorhanden"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:74
+msgid "Indica si la conexión utiliza HTTPS."
+msgstr "Zeigt, ob die Verbindung HTTPS nutzt"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:74
+msgid ""
+"Las claves de formularios enviados se encriptan mediante PKI, el resto de "
+"datos no."
+msgstr ""
+"Die aus dem Formular gesendeten Passwörter werden verschlüsselt; andere "
+"Daten nicht."
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:79
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:82
+msgid "Demo"
+msgstr "Demo"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:90
+msgid "Ayuda :: FAQ :: Changelog"
+msgstr "Hilfe :: FAQ :: Changelog"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:94
+msgid "Un proyecto de cygnux.org"
+msgstr "Ein cygnux.org Projekt"
+
+#: ../../../../inc/themes/material-blue/views/main/body-start.inc:4
+msgid "Javascript es necesario para el correcto funcionamiento"
+msgstr "Javascript muss eingeschaltet sein."
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:9
+#, php-format
+msgid "Instalación %s"
+msgstr "Installation %s"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:19
+msgid "Admin de sysPass"
+msgstr "sysPass Administrator"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:27
+msgid "Usuario administrador de sysPass"
+msgstr "sysPass Administrator"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:35
+msgid "Login del usuario administrador de sysPass"
+msgstr "sysPass Administrator Anmeldung"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:67
+msgid "Configurar BBDD"
+msgstr "Datenbank-Konfiguration"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:77
+msgid "Usuario acceso BBDD"
+msgstr "DB Zugriffsbenutzer"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:85
+msgid "Usuario con permisos de administrador de MySQL"
+msgstr "Benutzer mit MySQL Admin Rechte"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:93
+msgid "Clave acceso BBDD"
+msgstr "DB Zugriffspasswort"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:102
+msgid "Nombre BBDD para sysPass"
+msgstr "sysPass Datenbankname"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:110
+msgid "Nombre de la base de datos para sysPass"
+msgstr "Name der sysPass-Datenbank"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:119
+msgid "Servidor BBDD para sysPass"
+msgstr "sysPass Datenbankserver"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:127
+msgid "Nombre del servidor para instalar la base de datos de sysPass"
+msgstr "Name des Servers zur Installation der sysPass Datenbank"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:145
+msgid "Modo Hosting"
+msgstr "Hosting-Modus"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:152
+msgid "No crea ni verifica los permisos del usuario sobre la BBDD"
+msgstr "Zugangsberechtigungen zur DB werden weder angelegt nocht überprüft"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:166
+#: ../../../../inc/themes/material-blue/views/main/install.inc:168
+msgid "Instalar"
+msgstr "Installieren"
+
+#: ../../../../inc/themes/material-blue/views/main/login.inc:38
+msgid "Clave Anterior"
+msgstr "Vorheriges Passwort"
+
+#: ../../../../inc/themes/material-blue/views/main/login.inc:74
+msgid "¿Olvidó su clave?"
+msgstr "Passwort vergessen?"
+
+#: ../../../../inc/themes/material-blue/views/main/login.inc:81
+msgid "Aplicación actualizada correctamente"
+msgstr "Anwendung erfolgreich aktualisiert"
+
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:7
+msgid "Solicitud de Cambio de Clave"
+msgstr "Passwortänderung initiiert."
+
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:25
+msgid "Email del Usuario"
+msgstr "Benutzer-E-Mail"
+
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:55
+msgid "Volver a iniciar sesión"
+msgstr "Zurück zur Anmeldung"
+
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:61
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:63
+msgid "Solicitar"
+msgstr "Anfrage"
+
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:67
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:69
+msgid "Cambiar"
+msgstr "Ändern"
+
+#: ../../../../inc/themes/material-blue/views/main/update.inc:21
+msgid "Actualizado"
+msgstr "Aktualisiert"
+
+#: ../../../../inc/themes/material-blue/views/main/update.inc:27
+msgid "Error al comprobar actualizaciones"
+msgstr "Fehler bei der Updateprüfung"
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:4
+#, php-format
+msgid "Actualización %s"
+msgstr "Aktualisierung %s"
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:9
+msgid "Actualización de BBDD"
+msgstr "Datenbank-Update"
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:15
+msgid "Código de Seguridad"
+msgstr "Sicherheitscode"
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:23
+msgid ""
+"Este código se encuentra en el archivo de configuración de sysPass con la "
+"etiqueta \"upgradeKey\""
+msgstr ""
+"Dieser Code ist in der sysPass Konfigurationsdatei mit dem Tag-Namen "
+"\"upgradekey\" gesetzt"
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:28
+msgid "He realizado una copia de seguridad completa de sysPass"
+msgstr "Ich habe eine vollständige sysPass Sicherung durchgeführt"
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:40
+msgid "Por favor espere mientras el proceso se ejecuta"
+msgstr "Bitte warten Sie, während der Vorgang andauert"
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:50
+msgid "Iniciar Actualización"
+msgstr "Aktualisierung starten"
+
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:108
+msgid "Notificación global"
+msgstr "Globale Benachrichtigung"
+
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:111
+msgid "Global"
+msgstr "Global"
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:92
+msgid ""
+"Ordena los resultados de búsqueda por el número de visitas de las cuentas."
+msgstr "Sortiert Kontensuchresultate anhand der Anzahl der Kontenzugriffe."
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:100
+msgid "Ordenar resultados por visitas"
+msgstr "Sortiere Suchresultate nach Aufrufen"
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:110
+msgid "Mostrar una barra de navegación superior en las búsquedas."
+msgstr "Zeigt eine Navigationsleiste oberhalb der Suchresultate."
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:118
+msgid "Barra de navegación superior"
+msgstr "Navigationsleiste oben"
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:128
+msgid ""
+"Mostrar las acciones ocultas para los elementos de la búsqueda de cuentas."
+msgstr "Erlaubt die versteckten Aktionen der Kontensuchseite anzuzeigen."
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:137
+msgid "Mostrar Acciones Ocultas"
+msgstr "Zeige versteckte Aktionen"
+
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:2
+msgid "Ver Wiki"
+msgstr "Wiki anzeigen"
+
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:10
+#, php-format
+msgid "Resultados de búsqueda de '%s'"
+msgstr "Suchergebnisse von %s"
+
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:13
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:23
+msgid "Página"
+msgstr "Seite"
+
+#~ msgid "Código correcto"
+#~ msgstr "Code bestätigt"
+
+#~ msgid "Código incorrecto"
+#~ msgstr "Falscher Code"
+
+#~ msgid "Id inválido"
+#~ msgstr "Ungültige ID"
+
+#~ msgid "Login de usuario duplicado"
+#~ msgstr "Dupbliziertes Benutzer-Anmeldung "
+
+#~ msgid "Email de usuario duplicado"
+#~ msgstr "Bereits verwendete Benutzer-E-Mail"
+
+#~ msgid "Grupo en uso por:"
+#~ msgstr "Gruppe in Benutzung durch:"
+
+#~ msgid "Error al crear el perfil"
+#~ msgstr "Fehler beim Anlegen des Profils"
+
+#~ msgid "Error al actualizar el perfil"
+#~ msgstr "Fehler beim Ändern des Profils"
+
+#~ msgid "Perfil en uso por:"
+#~ msgstr "Profil wird benutzt durch: "
+
+#~ msgid "Error al eliminar el perfil"
+#~ msgstr "Fehler beim Löschen eines Profils"
+
+#~ msgid "Usuario o acción no indicado"
+#~ msgstr "Benutzer oder Aktion nicht gesetzt"
+
+#~ msgid "Realizar Exportación"
+#~ msgstr "Export starten"
+
+#~ msgid "Error de conexión a LDAP"
+#~ msgstr "LDAP Verbindungsfehler"
+
+#~ msgid "Servidor Login"
+#~ msgstr "Anmeldeserver"
+
+#~ msgid "Usuario/Clave incorrectos"
+#~ msgstr "Falscher/s Benutzername/Passwort"
+
+#~ msgid "El archivo es mayor de "
+#~ msgstr "Datei ist größer als"
+
+#~ msgid "Confirmar la importación de cuentas"
+#~ msgstr "Import der Konten bestätigen"
+
+#~ msgid "Es necesario un usuario de conexión"
+#~ msgstr "Benutzername der Verbindung ist notwendig"
+
+#~ msgid "Es necesaria una clave de conexión"
+#~ msgstr "Verbindungs-Passwort wird benötigt"
+
+#~ msgid "Es necesario el nombre de la BBDD"
+#~ msgstr "Datenbank ist notwendig"
+
+#~ msgid "Es necesario un nombre de host"
+#~ msgstr "Hostname ist notwendig"
+
+#~ msgid ""
+#~ "No se ha podido realizar la solicitud. Consulte con el administrador."
+#~ msgstr ""
+#~ "Anfrage konnte nicht ausgeführt werden. Bitte Administrator "
+#~ "benachrichtigen."
+
+#~ msgid "Error al enviar la solicitud"
+#~ msgstr "Fehler beim Senden der Anfrage"
+
+#~ msgid "Ayuda Parámetros"
+#~ msgstr "Parameterhilfe"
+
+#~ msgid "ERROR: Error en la operación."
+#~ msgstr "Fehler: Operation fehlgeschlagen"
+
+#~ msgid "Fin"
+#~ msgstr "Ende"
+
+#~ msgid "Denegado acceso a"
+#~ msgstr "Zugriff verweigert auf"
+
+#~ msgid "Token de autorización"
+#~ msgstr "Autorisierungstoken"
+
+#~ msgid "Acción a realizar"
+#~ msgstr "Aktion"
+
+#~ msgid "Clave de usuario (opcional)"
+#~ msgstr "Benutzerpasswort (optional)"
+
+#~ msgid "Cadena a buscar"
+#~ msgstr "Text nach dem gesucht wird"
+
+#~ msgid "Numero de cuentas a mostar en la búsqueda"
+#~ msgstr "Anzahl von Suchtreffern pro Seite"
+
+#~ msgid "Item a devolver"
+#~ msgstr "zurück gegebener Artikel"
+
+#~ msgid "No es posible crear el directorio de backups"
+#~ msgstr "Verzeichnis für Backups kann nicht angelegt werden"
+
+#~ msgid "Categoría en uso por:"
+#~ msgstr "Kategorie wird verwendet von:"
+
+#~ msgid "Modificar Categoría"
+#~ msgstr "Kategorie ändern"
+
+#~ msgid "No es posible escribir el archivo de configuración"
+#~ msgstr "Konfigurationsdatei kann nicht geschrieben werden"
+
+#~ msgid "Compruebe los permisos del directorio \"config\""
+#~ msgstr "Bitte überprüfen Sie Zugriffsrechte auf das Verzeichnis \"config\""
+
+#~ msgid "Error procesando línea %s"
+#~ msgstr "Fehler beim verarbeiten von Zeile %s"
+
+#~ msgid "Cuenta importada: %s"
+#~ msgstr "Accout %s importiert"
+
+#~ msgid "Cliente en uso por:"
+#~ msgstr "Kunde wird verwendet von:"
+
+#~ msgid "Error al añadir los usuarios del grupo"
+#~ msgstr "Fehler beim hinzufügen von Nutzern zur Gruppe"
+
+#~ msgid "Error al actualizar los usuarios del grupo"
+#~ msgstr "Fehler beim aktualisieren von Gruppennutzern"
+
+#~ msgid "Tipo mime no soportado"
+#~ msgstr "Mimetype wird nicht unterstützt"
+
+#~ msgid "Sesion"
+#~ msgstr "Sitzung"
+
+#~ msgid "El usuario de MySQL ya existe"
+#~ msgstr "MySQL Benutzer wird schon benutzt"
+
+#~ msgid "Indique un nuevo usuario o elimine el existente"
+#~ msgstr "Neuen Benutzernamen eingeben oder bestehenden Benutzer löschen"
+
+#~ msgid "Error al establecer permisos de la BBDD"
+#~ msgstr "Fehler beim Setzen der Datenbank-Berechtigungen"
+
+#~ msgid "Faltan parámetros"
+#~ msgstr "Fehlender Parameter"
+
+#~ msgid "La versión no es compatible"
+#~ msgstr "Inkompatible Version"
+
+#~ msgid "Actualice a la última versión de phpPMS"
+#~ msgstr "Bitte aktualisieren Sie auf die letzte Version von phpPMS."
+
+#~ msgid "Error al obtener la configuración"
+#~ msgstr "Fehler beim Laden der Konfiguration"
+
+#~ msgid "Error al vaciar tabla"
+#~ msgstr "Fehler beim Leeren der Tabelle"
+
+#~ msgid "Usuario actual no es administrador de la aplicación"
+#~ msgstr "Angemeldeter Benutzer ist nicht Administrator"
+
+#~ msgid "No es posible crear el cliente"
+#~ msgstr "Kunde kann nicht angelegt werden"
+
+#~ msgid "Contacte con el desarrollador"
+#~ msgstr "Bitte kontaktieren Sie den Entwickler"
+
+#~ msgid "Importar Clientes"
+#~ msgstr "Importiere Kunden"
+
+#~ msgid "Registros"
+#~ msgstr "Datensätze"
+
+#~ msgid "Error al obtener los clientes"
+#~ msgstr "Fehler beim Laden des Kunden"
+
+#~ msgid "Error al obtener cuentas"
+#~ msgstr "Fehler beim Laden des Kontos"
+
+#~ msgid "Error al migrar cuenta"
+#~ msgstr "Fehler beim Importieren des Kontos"
+
+#~ msgid "Error al obtener los grupos de cuentas"
+#~ msgstr "Fehler beim Laden der Gruppen eines Kontos"
+
+#~ msgid "Importar Grupos de Cuentas"
+#~ msgstr "Importiere Kontogruppen"
+
+#~ msgid "Error al crear grupos de cuentas"
+#~ msgstr "Fehler beim Anlegen der Gruppen eines Kontos"
+
+#~ msgid "Error al obtener el historico de cuentas"
+#~ msgstr "Fehler beim Laden der Konto-Historie"
+
+#~ msgid "Importar Histórico de Cuentas"
+#~ msgstr "Importiere Konten-Historie"
+
+#~ msgid "Error al crear historico de cuentas"
+#~ msgstr "Fehler beim Anlegen der Konto-Historie"
+
+#~ msgid "Error al obtener los archivos de cuentas"
+#~ msgstr "Fehler beim Laden der Konto-Dateien"
+
+#~ msgid "Importar Archivos de Cuentas"
+#~ msgstr "Importiere Konto-Dateien"
+
+#~ msgid "Error al crear archivos de cuentas"
+#~ msgstr "Fehler beim Anlegen der Kontodateien"
+
+#~ msgid "Error al obtener las categorías de cuentas"
+#~ msgstr "Fehler beim Holen der Konto-Kategorien"
+
+#~ msgid "Importar Categorías de Cuentas"
+#~ msgstr "Importiere Kontokategorien"
+
+#~ msgid "Error al crear categorías de cuentas"
+#~ msgstr "Fehler beim Holen der Konto-Kategorien"
+
+#~ msgid "Importar Usuarios"
+#~ msgstr "Importiere Benutzer"
+
+#~ msgid "Error al crear usuarios"
+#~ msgstr "Fehler beim Anlegen der Benutzer"
+
+#~ msgid "Error al obtener los grupos de usuarios"
+#~ msgstr "Fehler beim Laden der Gruppen eines Benutzers"
+
+#~ msgid "Importar Grupos de Usuarios"
+#~ msgstr "Importiere Benutzergruppen"
+
+#~ msgid "Error al crear los grupos de usuarios"
+#~ msgstr "Fehler beim Hinzufügen Gruppen eines Benutzers"
+
+#~ msgid "Importar Configuración"
+#~ msgstr "Importiere Konfiguration"
+
+#~ msgid "Datos de perfil incorrectos"
+#~ msgstr "falsche Profildaten"
+
+#~ msgid "Modificar Perfil"
+#~ msgstr "Profil ändern"
+
+#~ msgid "No hay categorías para importar"
+#~ msgstr "Es existieren keine Kategorien zum importieren"
+
+#~ msgid "No hay clientes para importar"
+#~ msgstr "Es existieren keine Kunden zum importieren"
+
+#~ msgid "No hay cuentas para importar"
+#~ msgstr "Es existieren keine Accounts zum importieren"
+
+#~ msgid "Actualización de la Configuración realizada correctamente."
+#~ msgstr "Configuration Aktualisierung erfolgreich durchgeführt."
+
+#~ msgid "Modificar Usuario"
+#~ msgstr "Benutzer ändern"
+
+#~ msgid "Migrar Grupos"
+#~ msgstr "Gurppen migrieren"
+
+#~ msgid "Formato detectado"
+#~ msgstr "Erkanntest Format"
+
+#~ msgid "Gestión de Categorías"
#~ msgstr "Kategorienverwaltung"
+
+#~ msgid "Gestión de Clientes"
+#~ msgstr "Kundenverwaltung"
+
+#~ msgid "Nuevo estilo visual basado en Material Design Lite by Google"
+#~ msgstr "Neues Design basierend auf Design von Google"
+
+#~ msgid "Usuarios en múltiples grupos"
+#~ msgstr "Nutzer können zu mehreren Gruppen gehören"
+
+#~ msgid "Previsualización de imágenes"
+#~ msgstr "Bilder Vorgenerierung"
+
+#~ msgid "Mostrar claves como imágenes"
+#~ msgstr "Zeige Passwörter als Bilder"
+
+#~ msgid "Campos personalizados"
+#~ msgstr "Benutzerdefinierte Felder"
+
+#~ msgid "API de consultas"
+#~ msgstr "API Abfragen"
+
+#~ msgid "Autentificación en 2 pasos"
+#~ msgstr "Zwei-Faktor Authentifizierung"
+
+#~ msgid "Complejidad de generador de claves"
+#~ msgstr "Zufälligkeitsgenerator mit konfigurierbarer Komplexität"
+
+#~ msgid "Consultas especiales"
+#~ msgstr "Spezialabfragen"
+
+#~ msgid "Exportación a XML"
+#~ msgstr "XML Export"
+
+#~ msgid "Clave maestra temporal"
+#~ msgstr "temporäres Master-Passwort"
+
+#~ msgid "Importación de cuentas desde sysPass, KeePass, KeePassX y CSV"
+#~ msgstr "Account Import von KeePass, KeePassX oder CSV"
+
+#~ msgid "Optimización del código y mayor rapidez de carga"
+#~ msgstr "Code Optimierung und verschnellertes Laden"
+
+#~ msgid "Mejoras de seguridad en XSS e inyección SQL"
+#~ msgstr "Verbesserte Sicherheit um XSS und SQL injections zu verhindern"
+
+#~ msgid "Pulse aquí para acceder"
+#~ msgstr ""
+#~ "Klicken Sie hier für den "
+#~ "Zugriff"
+
+#~ msgid "Gestión de Usuarios"
+#~ msgstr "Benutzerverwaltung"
+
+#~ msgid "Gestión de Grupos"
+#~ msgstr "Gruppenverwaltung"
+
+#~ msgid "Gestión de Perfiles"
+#~ msgstr "Profilverwaltung"
+
+#~ msgid "Gestión de Autorizaciones API"
+#~ msgstr "API Berechtigungsmanagement"
+
+#~ msgid "Introducir código"
+#~ msgstr "Code eingeben"
+
+#~ msgid "Verificar"
+#~ msgstr "bestätigen"
+
+#~ msgid "Buscar en desplegable o introducir"
+#~ msgstr "Weitersuchen"
+
+#~ msgid "por"
+#~ msgstr "durch"
+
+#~ msgid "Seleccionar grupos secundarios"
+#~ msgstr "Untergruppe auswählen"
+
+#~ msgid "Seleccionar usuarios"
+#~ msgstr "Benutzer auswählen"
+
+#~ msgid ""
+#~ "Para mejorar/añadir las traducciones, puede colaborar en http:://"
+#~ "translate.syspass.org"
+#~ msgstr ""
+#~ "Um die Übersetzung zu verbessern können Sie die den Dienst auf http:://"
+#~ "translate.syspass.org nutzen"
+
+#~ msgid "Añadir extensión"
+#~ msgstr "Endung hinzufügen"
+
+#~ msgid "Eliminar extensión"
+#~ msgstr "Endung löschen"
+
+#~ msgid "Atención"
+#~ msgstr "Warnung"
+
+#~ msgid "Validez"
+#~ msgstr "Lebensspanne"
+
+#~ msgid "Seguro"
+#~ msgstr "Sicher"
+
+#~ msgid "Inseguro"
+#~ msgstr "Unsicher"
+
+#~ msgid "nombre_de_cuenta;cliente;categoría;url;usuario;clave;notas"
+#~ msgstr "konto_name;kunde;kategorie;url;benutzer;passwort;bemerkungen"
+
+#~ msgid "Importar phpPMS"
+#~ msgstr "phpPMS Import"
+
+#~ msgid "Usuario BBDD"
+#~ msgstr "Datenbankbenutzer"
+
+#~ msgid "Indicar el usuario de conexión a la base de datos de phpPMS."
+#~ msgstr "phpPMS Datenbankbenutzer eingeben"
+
+#~ msgid "Clave BBDD"
+#~ msgstr "Datenbank-Passwort"
+
+#~ msgid "Nombre BBDD"
+#~ msgstr "Datenbankname"
+
+#~ msgid "Indicar el nombre de la base de datos de phpPMS."
+#~ msgstr "phpPMS Datenbankname eingeben"
+
+#~ msgid "Servidor BBDD"
+#~ msgstr "Datenbank-Server"
+
+#~ msgid "Indicar el servidor de la base de datos de phpPMS."
+#~ msgstr "phpPMS Datenbankserver eingeben"
+
+#~ msgid "Confirmar"
+#~ msgstr "Bestätigen"
+
+#~ msgid "Los datos actuales serán borrados (excepto el usuario actual)"
+#~ msgstr "Daten werden gelöscht (mit Ausnahme des aktuellen Benutzers)"
+
+#~ msgid "Iniciar"
+#~ msgstr "Start"
+
+#~ msgid "Instalación "
+#~ msgstr "Installation"
+
+#~ msgid "Crear cuenta de admin de sysPass"
+#~ msgstr "Administrator-Konto anlegen"
+
+#~ msgid "Login de usuario con permisos de administrador de MySQL"
+#~ msgstr "Benutzer-Anmeldung mit administrativen Datenbank-Rechten"
+
+#~ msgid "Nombre del servidor de la base de datos de sysPass"
+#~ msgstr "Server der sysPass-Datenbank eingeben"
+
+#~ msgid "Comprobar conexión con LDAP"
+#~ msgstr "LDAP-Verbindung prüfen"
+
+#~ msgid "Nuevas Características"
+#~ msgstr "Neue Eigenschaften"
+
+#~ msgid "Login del Usuario"
+#~ msgstr "Benutzer-Anmeldung"
+
+#~ msgid "Nueva Clave"
+#~ msgstr "Neues Passwort"
+
+#~ msgid "Solicitar cambio de clave"
+#~ msgstr "Starte Passwortänderung"
+
+#~ msgid "Añadir nueva cuenta"
+#~ msgstr "Konto hinzufügen"
+
+#~ msgid "Borrar cuenta"
+#~ msgstr "Konto löschen"
+
+#~ msgid "Borrar"
+#~ msgstr "Löschen"
+
+#~ msgid "Configuración general"
+#~ msgstr "Allgemeine Konfiguration"
+
+#~ msgid "Cambiar clave maestra"
+#~ msgstr "Master-Passwort ändern"
+
+#~ msgid "Realizar copia de seguridad"
+#~ msgstr "Backup erstellen"
+
+#~ msgid "No usado"
+#~ msgstr "Nicht benutzt"
+
+#~ msgid "Global ON"
+#~ msgstr "Global eingeschaltet"
+
+#~ msgid "CPP"
+#~ msgstr "KPS"
+
+#~ msgid "Autenticación"
+#~ msgstr "Authentifizierung"
+
+#~ msgid "Autenticación en 2 pasos"
+#~ msgstr "Zwei Faktor Authentifizierung"
+
+#~ 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 "Aktiviert Zwei-Faktor-Authentifizierung"
+
+#~ msgid ""
+#~ "Escanee el código QR proporcionado y a continuación introduzca la clave "
+#~ "de 6 dígitos."
+#~ msgstr ""
+#~ "Bereitgestellten QR Code scannen und einen 6-stelligen Code eingeben"
+
+#~ msgid "Activar"
+#~ msgstr "Aktivieren"
+
+#~ msgid "Error al obtener el código QR. Inténtelo de nuevo"
+#~ msgstr "Fehler beim Abrufen des QR-Codes. Bitte erneut versuchen."
+
+#~ msgid "Código"
+#~ msgstr "Code"
+
+#~ msgid ""
+#~ "Una vez activada, sólo es posible acceder si se dispone del dispositivo "
+#~ "generador de códigos asociado."
+#~ msgstr ""
+#~ "Einmal aktiviert, kann man sich nur anmelden, wenn man das Gerät besitzt, "
+#~ "dass den Code generiert."
+
+#~ msgid "Cambiar clave de usuario"
+#~ msgstr "Benutzerpasswort ändern"
+
+#~ msgid "Introducir Código de Seguridad"
+#~ msgstr "Sicherheitscode eingeben"
+
+#~ msgid "Admin. Aplicación"
+#~ msgstr "Anwendungs-Administrator"
+
+#~ msgid "Admin. Cuentas"
+#~ msgstr "Konto-Administrator"
+
+#~ msgid "Añadir filtro"
+#~ msgstr "Filter hinzufügen"
+
+#~ msgid "Eliminar filtro"
+#~ msgstr "Filter löschen"
+
+#~ msgid "> Usar texto y crear nuevo"
+#~ msgstr "> Nutze den Text und erstelle einen neuen"
+
+#~ msgid "Seleccionar o escribir para crear uno nuevo"
+#~ msgstr "Auswählen oder schreiben um einen neuen zu kreieren"
+
+#~ msgid "Clave (Repetir)"
+#~ msgstr "Passwort (wiederholen)"
+
+#~ msgid "Archivo actualizado"
+#~ msgstr "Datei aktualisiert"
+
+#~ msgid "Usuarios importados %d/%d"
+#~ msgstr "Benutzer %d/%d importiert"
+
+#~ msgid "Errores: %d"
+#~ msgstr "Fehler: %d"
+
+#~ msgid "Denegado acceso a %s"
+#~ msgstr "Zugriff verweigert auf %s"
+
+#~ msgid "Eliminar Plugin"
+#~ msgstr "Plugin löschen"
+
+#~ msgid "Modificar Plugin"
+#~ msgstr "Plugin anpassen"
+
+#~ msgid "Nuevo Enlace"
+#~ msgstr "Neuer Link"
+
+#~ msgid "Creando usuario '%s (%s)'"
+#~ msgstr "Erstelle Benutzer '%s (%s)' "
+
+#~ msgid "Buscar cuentas con la etiqueta 'tag_name'"
+#~ msgstr "Suche Konten mit Tag 'tag_name'"
+
+#~ msgid "Tiempo en minutos"
+#~ msgstr "Zeit in Minuten"
+
+#~ msgid "No hay notificaciones pendientes"
+#~ msgstr "Anstehende Benachrichtigungen sind nicht vorhanden"
+
+#~ msgid "Registro en uso"
+#~ msgstr "Datensatz im Gebrauch"
+
+#~ msgid "Sólo para administradores de la aplicación"
+#~ msgstr "Nur für Anwendungsadministratoren"
+
+#~ msgid "Solo Admins"
+#~ msgstr "Nur Administratoren"
+
+#~ msgid "Aviso Caducidad"
+#~ msgstr "Nachricht abbrechen"
+
+#~ msgid "El código 2FA se ha de restablecer en %d días"
+#~ msgstr "Der 2FA-Code muss innerhalb von %d Tagen zurückgesetzt werden"
+
+#~ msgid ""
+#~ "El código 2FA ha caducado. Es necesario restablecerlo desde las "
+#~ "preferencias"
+#~ msgstr ""
+#~ "Der 2FA-Code ist abgelaufen. Sie müssen es auf der Registerkarte "
+#~ "Einstellungen zurücksetzen"
+
+#~ msgid "Días Caducidad"
+#~ msgstr "Verfalltage"
+
+#~ msgid "Días"
+#~ msgstr "Tage"
diff --git a/inc/locales/en_US/LC_MESSAGES/messages.mo b/inc/locales/en_US/LC_MESSAGES/messages.mo
index 2427ab03..8f3d21b4 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 c98e1170..07202c53 100644
--- a/inc/locales/en_US/LC_MESSAGES/messages.po
+++ b/inc/locales/en_US/LC_MESSAGES/messages.po
@@ -8,2067 +8,2861 @@ msgid ""
msgstr ""
"Project-Id-Version: sysPass\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-13 18:31+0100\n"
-"PO-Revision-Date: 2015-12-13 18:31+0100\n"
+"POT-Creation-Date: 2017-02-09 13:18+0100\n"
+"PO-Revision-Date: 2017-02-09 13:19+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"
"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-KeywordsList: _;gettext;gettext_noop\n"
+"X-Poedit-KeywordsList: _;gettext;gettext_noop;__\n"
"X-Poedit-Basepath: .\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Generator: Poedit 1.6.10\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Poedit-SearchPath-0: ../../../..\n"
+"X-Poedit-SearchPathExcluded-0: ../../../../inc/Plugins\n"
-#: ../../../../ajax/ajax_2fa.php:37 ../../../../ajax/ajax_accountSave.php:42
-#: ../../../../ajax/ajax_appMgmtSave.php:43
-#: ../../../../ajax/ajax_backup.php:41 ../../../../ajax/ajax_checkLdap.php:42
-#: ../../../../ajax/ajax_configSave.php:44 ../../../../ajax/ajax_files.php:42
-#: ../../../../ajax/ajax_files.php:57 ../../../../ajax/ajax_getFiles.php:47
-#: ../../../../ajax/ajax_import.php:50 ../../../../ajax/ajax_migrate.php:46
-#: ../../../../ajax/ajax_passReset.php:40 ../../../../ajax/ajax_search.php:42
-#: ../../../../ajax/ajax_sendRequest.php:42
-#: ../../../../ajax/ajax_userPrefsSave.php:43
-msgid "CONSULTA INVÁLIDA"
-msgstr "INVALID QUERY"
-
-#: ../../../../ajax/ajax_2fa.php:48
-msgid "Código correcto"
-msgstr "Verified code"
-
-#: ../../../../ajax/ajax_2fa.php:51 ../../../../ajax/ajax_userPrefsSave.php:99
-msgid "Código incorrecto"
-msgstr "Wrong code"
-
-#: ../../../../ajax/ajax_accountSave.php:36
-#: ../../../../ajax/ajax_appMgmtSave.php:37
-#: ../../../../ajax/ajax_backup.php:35 ../../../../ajax/ajax_checkLdap.php:36
-#: ../../../../ajax/ajax_configSave.php:38 ../../../../ajax/ajax_import.php:36
-#: ../../../../ajax/ajax_migrate.php:36
-#: ../../../../ajax/ajax_sendRequest.php:36
-#: ../../../../ajax/ajax_userPrefsSave.php:37
-#: ../../../../ajax/ajax_viewpass.php:37
-msgid "La sesión no se ha iniciado o ha caducado"
-msgstr "Session not started or timed out"
-
-#: ../../../../ajax/ajax_accountSave.php:78
-#: ../../../../ajax/ajax_accountSave.php:93
-msgid "Es necesario un nombre de cuenta"
-msgstr "An account name needed"
-
-#: ../../../../ajax/ajax_accountSave.php:80
-#: ../../../../ajax/ajax_accountSave.php:91
-#: ../../../../ajax/ajax_appMgmtSave.php:329
-msgid "Es necesario un nombre de cliente"
-msgstr "A customer name needed"
-
-#: ../../../../ajax/ajax_accountSave.php:82
-#: ../../../../ajax/ajax_accountSave.php:95
-msgid "Es necesario un usuario"
-msgstr "An username is needed"
-
-#: ../../../../ajax/ajax_accountSave.php:84
-#: ../../../../ajax/ajax_accountSave.php:106
-msgid "Es necesaria una clave"
-msgstr "A key is needed"
-
-#: ../../../../ajax/ajax_accountSave.php:86
-#: ../../../../ajax/ajax_accountSave.php:97
-msgid "Es necesario una categoría"
-msgstr "A category is needed"
-
-#: ../../../../ajax/ajax_accountSave.php:101
-#: ../../../../ajax/ajax_accountSave.php:110
-msgid "Id inválido"
-msgstr "Invalid Id"
-
-#: ../../../../ajax/ajax_accountSave.php:113
-#: ../../../../ajax/ajax_accountSave.php:263
-#: ../../../../ajax/ajax_appMgmtSave.php:535
-#: ../../../../ajax/ajax_configSave.php:334
-#: ../../../../ajax/ajax_userPrefsSave.php:113 ../../../../api.php:53
-msgid "Acción Inválida"
-msgstr "Invalid Action"
-
-#: ../../../../ajax/ajax_accountSave.php:121
-#: ../../../../ajax/ajax_appMgmtSave.php:112
-#: ../../../../ajax/ajax_appMgmtSave.php:149
-#: ../../../../ajax/ajax_backup.php:68
-msgid "Las claves no coinciden"
-msgstr "The passwords do not match"
-
-#: ../../../../ajax/ajax_accountSave.php:173
-msgid "Cuenta creada"
-msgstr "Account added"
-
-#: ../../../../ajax/ajax_accountSave.php:176
-msgid "Error al crear la cuenta"
-msgstr "Error on account creation"
-
-#: ../../../../ajax/ajax_accountSave.php:211
-msgid "Sin cambios"
-msgstr "No changes"
-
-#: ../../../../ajax/ajax_accountSave.php:223
-msgid "Cuenta actualizada"
-msgstr "Account updated"
-
-#: ../../../../ajax/ajax_accountSave.php:226
-msgid "Error al modificar la cuenta"
-msgstr "Error on updating account"
-
-#: ../../../../ajax/ajax_accountSave.php:233
-msgid "Cuenta eliminada"
-msgstr "Account deleted"
-
-#: ../../../../ajax/ajax_accountSave.php:236
-msgid "Error al eliminar la cuenta"
-msgstr "Error on account deletion"
-
-#: ../../../../ajax/ajax_accountSave.php:246
-#: ../../../../ajax/ajax_appMgmtSave.php:153
-#: ../../../../ajax/ajax_passReset.php:75
-msgid "Clave actualizada"
-msgstr "Password updated"
-
-#: ../../../../ajax/ajax_accountSave.php:249
-msgid "Error al actualizar la clave"
-msgstr "Error on updating password"
-
-#: ../../../../ajax/ajax_accountSave.php:256
-msgid "Cuenta restaurada"
-msgstr "Account restored"
-
-#: ../../../../ajax/ajax_accountSave.php:259
-msgid "Error al restaurar cuenta"
-msgstr "Error on restoring account"
-
-#: ../../../../ajax/ajax_appMgmtData.php:54
-msgid "Ver Usuario"
-msgstr "View User"
-
-#: ../../../../ajax/ajax_appMgmtData.php:61
-#: ../../../../web/UsersMgmtC.class.php:137
-msgid "Editar Usuario"
-msgstr "Edit User"
-
-#: ../../../../ajax/ajax_appMgmtData.php:67
-#: ../../../../inc/UserBase.class.php:383
-#: ../../../../web/UsersMgmtC.class.php:122
-msgid "Nuevo Usuario"
-msgstr "New User"
-
-#: ../../../../ajax/ajax_appMgmtData.php:73
-msgid "Ver Grupo"
-msgstr "View Group"
-
-#: ../../../../ajax/ajax_appMgmtData.php:80
-#: ../../../../web/UsersMgmtC.class.php:203
-msgid "Editar Grupo"
-msgstr "Edit Group"
-
-#: ../../../../ajax/ajax_appMgmtData.php:86
-#: ../../../../inc/Groups.class.php:152 ../../../../inc/Groups.class.php:253
-#: ../../../../web/UsersMgmtC.class.php:195
-msgid "Nuevo Grupo"
-msgstr "New Group"
-
-#: ../../../../ajax/ajax_appMgmtData.php:92
-msgid "Ver Perfil"
-msgstr "View Profile"
-
-#: ../../../../ajax/ajax_appMgmtData.php:99
-#: ../../../../web/UsersMgmtC.class.php:268
-msgid "Editar Perfil"
-msgstr "Edit Profile"
-
-#: ../../../../ajax/ajax_appMgmtData.php:105
-#: ../../../../inc/ProfileBase.class.php:512
-#: ../../../../web/UsersMgmtC.class.php:253
-msgid "Nuevo Perfil"
-msgstr "New Profile"
-
-#: ../../../../ajax/ajax_appMgmtData.php:111
-msgid "Ver Cliente"
-msgstr "View Customer"
-
-#: ../../../../ajax/ajax_appMgmtData.php:118
-#: ../../../../web/AccountsMgmtC.class.php:153
-msgid "Editar Cliente"
-msgstr "Edit Customer"
-
-#: ../../../../ajax/ajax_appMgmtData.php:124
-#: ../../../../inc/Customer.class.php:65
-#: ../../../../web/AccountsMgmtC.class.php:146
-msgid "Nuevo Cliente"
-msgstr "New Customer"
-
-#: ../../../../ajax/ajax_appMgmtData.php:130
-msgid "Ver Categoría"
-msgstr "View Category"
-
-#: ../../../../ajax/ajax_appMgmtData.php:137
-#: ../../../../web/AccountsMgmtC.class.php:95
-msgid "Editar Categoría"
-msgstr "Edit Category"
-
-#: ../../../../ajax/ajax_appMgmtData.php:143
-#: ../../../../inc/Category.class.php:83
-#: ../../../../web/AccountsMgmtC.class.php:87
-#: ../../../../inc/themes/classic/account.inc:53
-#: ../../../../inc/themes/material-blue/account.inc:62
-msgid "Nueva Categoría"
-msgstr "New Category"
-
-#: ../../../../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:400
-msgid "Nueva Autorización"
-msgstr "New Authorization"
-
-#: ../../../../ajax/ajax_appMgmtData.php:162
-#: ../../../../web/UsersMgmtC.class.php:415
-msgid "Editar Autorización"
-msgstr "Edit Authorization"
-
-#: ../../../../ajax/ajax_appMgmtData.php:168
-#: ../../../../web/AccountsMgmtC.class.php:274
-msgid "Nuevo Campo"
-msgstr "New Field"
-
-#: ../../../../ajax/ajax_appMgmtData.php:174
-#: ../../../../web/AccountsMgmtC.class.php:281
-msgid "Editar Campo"
-msgstr "Edit Field"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:86
-msgid "Es necesario un nombre de usuario"
-msgstr "An username is needed"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:88
-msgid "Es necesario un login"
-msgstr "A login is needed"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:90
-msgid "Es necesario un perfil"
-msgstr "A profile is needed"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:92
-msgid "Es necesario un grupo"
-msgstr "A group is needed"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:94
-msgid "Es necesario un email"
-msgstr "An email is needed"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:96
-#: ../../../../ajax/ajax_appMgmtSave.php:145
-#: ../../../../ajax/ajax_appMgmtSave.php:160
-#: ../../../../ajax/ajax_backup.php:54
-#: ../../../../ajax/ajax_configSave.php:307
-#: ../../../../ajax/ajax_import.php:40 ../../../../ajax/ajax_migrate.php:40
-#: ../../../../ajax/ajax_userPrefsSave.php:88
-msgid "Ey, esto es una DEMO!!"
-msgstr "Ey, this is a DEMO!!"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:101
-msgid "Login de usuario duplicado"
-msgstr "Duplicated user login "
-
-#: ../../../../ajax/ajax_appMgmtSave.php:104
-msgid "Email de usuario duplicado"
-msgstr "Duplicated user email"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:110
-#: ../../../../ajax/ajax_appMgmtSave.php:147
-msgid "La clave no puede estar en blanco"
-msgstr "Password cannot be blank"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:123
-msgid "Usuario creado"
-msgstr "User added"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:126
-msgid "Error al crear el usuario"
-msgstr "Error on creating user"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:136
-#: ../../../../inc/UserMigrate.class.php:89
-msgid "Usuario actualizado"
-msgstr "User updated"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:139
-msgid "Error al actualizar el usuario"
-msgstr "Error on user update"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:156
-#: ../../../../ajax/ajax_passReset.php:79
-msgid "Error al modificar la clave"
-msgstr "Error on updating password"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:162
-msgid "No es posible eliminar, usuario en uso"
-msgstr "Unable to delete, user in use"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:166
-msgid "Usuario eliminado"
-msgstr "User deleted"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:169
-msgid "Error al eliminar el usuario"
-msgstr "Error on user deletion"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:184
-msgid "Es necesario un nombre de grupo"
-msgstr "A group name is needed"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:192
-msgid "Nombre de grupo duplicado"
-msgstr "Duplicated group name"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:204
-msgid "Grupo creado"
-msgstr "Group added"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:206
-msgid "Error al crear el grupo"
-msgstr "Error on group creation"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:217
-msgid "Grupo actualizado"
-msgstr "Group updated"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:220
-msgid "Error al actualizar el grupo"
-msgstr "Error on updating group"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:229
-#: ../../../../ajax/ajax_appMgmtSave.php:306
-#: ../../../../inc/CustomFieldsBase.class.php:109
-#: ../../../../inc/themes/classic/account.inc:112
-#: ../../../../inc/themes/classic/groups.inc:24
-#: ../../../../inc/themes/classic/profiles.inc:85
-#: ../../../../inc/themes/material-blue/account.inc:138
-#: ../../../../inc/themes/material-blue/groups.inc:32
-#: ../../../../inc/themes/material-blue/profiles.inc:99
-msgid "Usuarios"
-msgstr "Users"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:233
-#: ../../../../inc/Category.class.php:266
-#: ../../../../inc/CustomFieldsBase.class.php:106
-#: ../../../../inc/Customer.class.php:150
-#: ../../../../inc/themes/classic/profiles.inc:15
-#: ../../../../inc/themes/material-blue/config.inc:176
-#: ../../../../inc/themes/material-blue/profiles.inc:19
-msgid "Cuentas"
-msgstr "Accounts"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:236
-#: ../../../../ajax/ajax_appMgmtSave.php:308
-#: ../../../../inc/Category.class.php:119
-#: ../../../../inc/Customer.class.php:150
-msgid "No es posible eliminar"
-msgstr "Unable to delete"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:236
-msgid "Grupo en uso por:"
-msgstr "Group in use by:"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:241
-msgid "Grupo eliminado"
-msgstr "Group deleted"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:244
-msgid "Error al eliminar el grupo"
-msgstr "Error on group deletion"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:283
-msgid "Es necesario un nombre de perfil"
-msgstr "A profile name is needed"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:285
-msgid "Nombre de perfil duplicado"
-msgstr "Duplicated profile name"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:290
-msgid "Perfil creado"
-msgstr "Profile added"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:293
-msgid "Error al crear el perfil"
-msgstr "Error on creating profile"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:296
-msgid "Perfil actualizado"
-msgstr "Profile updated"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:299
-msgid "Error al actualizar el perfil"
-msgstr "Error on updating profile"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:308
-msgid "Perfil en uso por:"
-msgstr "Profiles in use by:"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:311
-msgid "Perfil eliminado"
-msgstr "Profile deleted"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:314
-msgid "Error al eliminar el perfil"
-msgstr "Error on profile deletion"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:349
-msgid "Cliente creado"
-msgstr "Customer added"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:364
-msgid "Cliente actualizado"
-msgstr "Customer updated"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:374
-msgid "Cliente eliminado"
-msgstr "Customer deleted"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:388
-msgid "Es necesario un nombre de categoría"
-msgstr "A category name needed"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:408
-msgid "Categoría creada"
-msgstr "Category added"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:423
-msgid "Categoría actualizada"
-msgstr "Category updated"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:434
-msgid "Categoría eliminada"
-msgstr "Category deleted"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:450
-msgid "Usuario o acción no indicado"
-msgstr "User or action not set"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:460
-msgid "Autorización creada"
-msgstr "Authorization added"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:468
-msgid "Autorización actualizada"
-msgstr "Authorization updated"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:478
-msgid "Autorización eliminada"
-msgstr "Authorization deleted"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:495
-msgid "Nombre del campo no indicado"
-msgstr "Field name not set"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:497
-msgid "Tipo del campo no indicado"
-msgstr "Field type not set"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:499
-msgid "Módulo del campo no indicado"
-msgstr "Field module not set"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:513
-msgid "Campo creado"
-msgstr "Field added"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:522
-msgid "Campo actualizado"
-msgstr "Field updated"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:532
-msgid "Campo eliminado"
-msgstr "Field deleted"
-
-#: ../../../../ajax/ajax_backup.php:58 ../../../../ajax/ajax_backup.php:63
-#: ../../../../inc/themes/classic/backup.inc:54
-msgid "Realizar Backup"
-msgstr "Make Backup"
-
-#: ../../../../ajax/ajax_backup.php:58 ../../../../ajax/ajax_backup.php:60
-msgid "Error al realizar el backup"
-msgstr "Error performing backup"
-
-#: ../../../../ajax/ajax_backup.php:60 ../../../../ajax/ajax_backup.php:74
-#: ../../../../ajax/ajax_checkLdap.php:58 ../../../../inc/Import.class.php:128
-#: ../../../../inc/Migrate.class.php:92
-msgid "Revise el registro de eventos para más detalles"
-msgstr "Please check the event log for more details"
-
-#: ../../../../ajax/ajax_backup.php:63
-msgid "Copia de la aplicación y base de datos realizada correctamente"
-msgstr "Application and database backup completed successfully"
-
-#: ../../../../ajax/ajax_backup.php:65
-msgid "Proceso de backup finalizado"
-msgstr "Backup process finished"
-
-#: ../../../../ajax/ajax_backup.php:72 ../../../../ajax/ajax_backup.php:77
-msgid "Realizar Exportación"
-msgstr "Run Export"
-
-#: ../../../../ajax/ajax_backup.php:72
-msgid "Error al realizar la exportación de cuentas"
-msgstr "Error while exporting accounts"
-
-#: ../../../../ajax/ajax_backup.php:74
-msgid "Error al realizar la exportación"
-msgstr "Error occurred during export"
-
-#: ../../../../ajax/ajax_backup.php:77
-msgid "Exportación de cuentas realizada correctamente"
-msgstr "Export completed successfully"
-
-#: ../../../../ajax/ajax_backup.php:79
-msgid "Proceso de exportación finalizado"
-msgstr "Export process finished"
-
-#: ../../../../ajax/ajax_checkLdap.php:52 ../../../../inc/Ldap.class.php:264
-msgid "Los parámetros de LDAP no están configurados"
-msgstr "LDAP parameters are not set"
-
-#: ../../../../ajax/ajax_checkLdap.php:58
-msgid "Error de conexión a LDAP"
-msgstr "Error on LDAP connection"
-
-#: ../../../../ajax/ajax_checkLdap.php:60
-msgid "Conexión a LDAP correcta"
-msgstr "LDAP connection OK"
-
-#: ../../../../ajax/ajax_checkLdap.php:60
-msgid "Objetos encontrados"
-msgstr "Objects found"
-
-#: ../../../../ajax/ajax_configSave.php:58
-msgid "Modificar Configuración"
-msgstr "Edit Configuration"
-
-#: ../../../../ajax/ajax_configSave.php:101
-msgid "El tamaño máximo por archivo es de 16MB"
-msgstr "The maximum size per file is 16MB"
-
-#: ../../../../ajax/ajax_configSave.php:109 ../../../../js/strings.js.php:46
-msgid "Extensión no permitida"
-msgstr "Extension not allowed"
-
-#: ../../../../ajax/ajax_configSave.php:128
-msgid "Faltan parámetros de Proxy"
-msgstr "Missing proxy parameters "
-
-#: ../../../../ajax/ajax_configSave.php:136
-msgid "Proxy habiltado"
-msgstr "Proxy enabled"
-
-#: ../../../../ajax/ajax_configSave.php:140
-msgid "Proxy deshabilitado"
-msgstr "Proxy disabled"
-
-#: ../../../../ajax/ajax_configSave.php:143
-#: ../../../../ajax/ajax_configSave.php:167
-#: ../../../../ajax/ajax_configSave.php:201
-#: ../../../../ajax/ajax_configSave.php:240
-msgid "Sección"
-msgstr "Section"
-
-#: ../../../../ajax/ajax_configSave.php:143
-#: ../../../../web/ConfigC.class.php:108
-#: ../../../../inc/themes/classic/profiles.inc:61
-#: ../../../../inc/themes/material-blue/profiles.inc:72
-msgid "General"
-msgstr "General"
-
-#: ../../../../ajax/ajax_configSave.php:153
-msgid "Faltan parámetros de Wiki"
-msgstr "Missing Wiki parameters"
-
-#: ../../../../ajax/ajax_configSave.php:160
-msgid "Wiki habiltada"
-msgstr "Wiki enabled"
-
-#: ../../../../ajax/ajax_configSave.php:164
-msgid "Wiki deshabilitada"
-msgstr "Wiki disabled"
-
-#: ../../../../ajax/ajax_configSave.php:167
-#: ../../../../web/ConfigC.class.php:244
-#: ../../../../inc/themes/classic/wiki.inc:4
-#: ../../../../inc/themes/material-blue/wiki.inc:4
-msgid "Wiki"
-msgstr "Wiki"
-
-#: ../../../../ajax/ajax_configSave.php:182
-msgid "Faltan parámetros de LDAP"
-msgstr "Missing LDAP parameters"
-
-#: ../../../../ajax/ajax_configSave.php:194
-msgid "LDAP habiltado"
-msgstr "LDAP enabled"
-
-#: ../../../../ajax/ajax_configSave.php:198
-msgid "LDAP deshabilitado"
-msgstr "LDAP disabled"
-
-#: ../../../../ajax/ajax_configSave.php:201
-#: ../../../../web/ConfigC.class.php:276
-#: ../../../../inc/themes/classic/ldap.inc:4
-#: ../../../../inc/themes/material-blue/ldap.inc:4
-msgid "LDAP"
-msgstr "LDAP"
-
-#: ../../../../ajax/ajax_configSave.php:216
-msgid "Faltan parámetros de Correo"
-msgstr "Missing Mail parameters"
-
-#: ../../../../ajax/ajax_configSave.php:231
-msgid "Correo habiltado"
-msgstr "Mail enabled"
-
-#: ../../../../ajax/ajax_configSave.php:237
-msgid "Correo deshabilitado"
-msgstr "Mail disabled"
-
-#: ../../../../ajax/ajax_configSave.php:240
-#: ../../../../web/ConfigC.class.php:306
-#: ../../../../inc/themes/classic/mail.inc:4
-#: ../../../../inc/themes/material-blue/mail.inc:4
-msgid "Correo"
-msgstr "Mail"
-
-#: ../../../../ajax/ajax_configSave.php:262
-msgid "Configuración actualizada"
-msgstr "Configuration updated"
-
-#: ../../../../ajax/ajax_configSave.php:271
-#: ../../../../ajax/ajax_configSave.php:317
-#: ../../../../ajax/ajax_viewpass.php:61
-#: ../../../../inc/Controller.class.php:169
-msgid "Clave maestra actualizada"
-msgstr "Master Password updated"
-
-#: ../../../../ajax/ajax_configSave.php:271
-#: ../../../../ajax/ajax_viewpass.php:61
-#: ../../../../inc/Controller.class.php:169
-msgid "Reinicie la sesión para cambiarla"
-msgstr "Restart session to update"
-
-#: ../../../../ajax/ajax_configSave.php:273
-msgid "Clave maestra no indicada"
-msgstr "Master Password needed"
-
-#: ../../../../ajax/ajax_configSave.php:275
-msgid "Se ha de confirmar el cambio de clave"
-msgstr "The password update must be confirmed"
-
-#: ../../../../ajax/ajax_configSave.php:279
-msgid "Las claves son idénticas"
-msgstr "The passwords are the same"
-
-#: ../../../../ajax/ajax_configSave.php:281
-msgid "Las claves maestras no coinciden"
-msgstr "The master passwords do not match"
-
-#: ../../../../ajax/ajax_configSave.php:283
-msgid "La clave maestra actual no coincide"
-msgstr "The current master password does not match"
-
-#: ../../../../ajax/ajax_configSave.php:292
-msgid "Errores al actualizar las claves de las cuentas"
-msgstr "Error on updating accounts' passwords"
-
-#: ../../../../ajax/ajax_configSave.php:298
-msgid "Errores al actualizar las claves de las cuentas del histórico"
-msgstr "Error while updating accounts' passwords in history"
-
-#: ../../../../ajax/ajax_configSave.php:302
-msgid "Errores al actualizar datos de campos personalizados"
-msgstr "Error while updating custom fields data"
-
-#: ../../../../ajax/ajax_configSave.php:315
-#: ../../../../inc/Account.class.php:512
-msgid "Actualizar Clave Maestra"
-msgstr "Update Master Password"
-
-#: ../../../../ajax/ajax_configSave.php:319
-msgid "Error al guardar el hash de la clave maestra"
-msgstr "Error while saving Master Password's hash"
-
-#: ../../../../ajax/ajax_configSave.php:327
-msgid "Generar Clave Temporal"
-msgstr "Generate Temporary Password"
-
-#: ../../../../ajax/ajax_configSave.php:327
-#: ../../../../inc/CustomFieldsBase.class.php:87
-#: ../../../../inc/themes/classic/account.inc:86
-#: ../../../../inc/themes/classic/editpass.inc:25
-#: ../../../../inc/themes/classic/encryption.inc:143
-#: ../../../../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/passreset.inc:34
-#: ../../../../inc/themes/classic/users.inc:75
-#: ../../../../inc/themes/classic/userspass.inc:8
-#: ../../../../inc/themes/classic/userspass.inc:11
-#: ../../../../inc/themes/material-blue/account.inc:99
-#: ../../../../inc/themes/material-blue/account.inc:104
-#: ../../../../inc/themes/material-blue/config.inc:414
-#: ../../../../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/encryption.inc:161
-#: ../../../../inc/themes/material-blue/install.inc:47
-#: ../../../../inc/themes/material-blue/ldap.inc:105
-#: ../../../../inc/themes/material-blue/login.inc:18
-#: ../../../../inc/themes/material-blue/login.inc:41
-#: ../../../../inc/themes/material-blue/mail.inc:73
-#: ../../../../inc/themes/material-blue/mail.inc:80
-#: ../../../../inc/themes/material-blue/passreset.inc:30
-#: ../../../../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:329
-msgid "Clave Temporal Generada"
-msgstr "Temporary Password Generated"
-
-#: ../../../../ajax/ajax_configSave.php:331
-msgid "Error al generar clave temporal"
-msgstr "Error while generating temporary password"
-
-#: ../../../../ajax/ajax_doLogin.php:49
-msgid "Usuario/Clave no introducidos"
-msgstr "User/Pass not entered"
-
-#: ../../../../ajax/ajax_doLogin.php:61
-msgid "Inicio sesión"
-msgstr "Log in"
-
-#: ../../../../ajax/ajax_doLogin.php:66
-msgid "Servidor Login"
-msgstr "Login Server"
-
-#: ../../../../ajax/ajax_doLogin.php:72
-msgid "Error al guardar los datos de LDAP"
-msgstr "Error on saving LDAP user data"
-
-#: ../../../../ajax/ajax_doLogin.php:75 ../../../../ajax/ajax_doLogin.php:83
-#: ../../../../ajax/ajax_doLogin.php:135 ../../../../ajax/ajax_doLogin.php:179
-#: ../../../../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:188
-#: ../../../../inc/Crypt.class.php:199
-#: ../../../../inc/XmlImportBase.class.php:79
-msgid "Error interno"
-msgstr "Internal error"
-
-#: ../../../../ajax/ajax_doLogin.php:80
-msgid "Error al actualizar la clave del usuario en la BBDD"
-msgstr "Error while updating user password in DB"
-
-#: ../../../../ajax/ajax_doLogin.php:88 ../../../../ajax/ajax_doLogin.php:113
-msgid "Login incorrecto"
-msgstr "Incorrect login"
-
-#: ../../../../ajax/ajax_doLogin.php:89 ../../../../ajax/ajax_doLogin.php:96
-#: ../../../../ajax/ajax_doLogin.php:103 ../../../../ajax/ajax_doLogin.php:114
-#: ../../../../ajax/ajax_doLogin.php:124 ../../../../ajax/ajax_doLogin.php:174
-#: ../../../../inc/ApiTokens.class.php:190
-#: ../../../../inc/ApiTokens.class.php:308 ../../../../inc/Auth.class.php:108
-#: ../../../../inc/Init.class.php:466 ../../../../inc/Ldap.class.php:295
-#: ../../../../inc/Ldap.class.php:308 ../../../../inc/Ldap.class.php:316
-#: ../../../../inc/UserBase.class.php:384
-#: ../../../../inc/UserBase.class.php:528 ../../../../res/test.php:64
-#: ../../../../web/SearchC.class.php:305
-#: ../../../../web/UsersMgmtC.class.php:393
-#: ../../../../inc/themes/classic/account.inc:73
-#: ../../../../inc/themes/classic/editpass.inc:21
-#: ../../../../inc/themes/classic/eventlog.inc:23
-#: ../../../../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:89
-#: ../../../../inc/themes/classic/tokens.inc:8
-#: ../../../../inc/themes/material-blue/account.inc:84
-#: ../../../../inc/themes/material-blue/config.inc:400
-#: ../../../../inc/themes/material-blue/editpass.inc:22
-#: ../../../../inc/themes/material-blue/eventlog.inc:23
-#: ../../../../inc/themes/material-blue/info.inc:39
-#: ../../../../inc/themes/material-blue/ldap.inc:86
-#: ../../../../inc/themes/material-blue/login.inc:11
-#: ../../../../inc/themes/material-blue/login.inc:34
-#: ../../../../inc/themes/material-blue/mail.inc:61
-#: ../../../../inc/themes/material-blue/mail.inc:67
-#: ../../../../inc/themes/material-blue/passreset.inc:16
-#: ../../../../inc/themes/material-blue/request.inc:20
-#: ../../../../inc/themes/material-blue/search.inc:91
-#: ../../../../inc/themes/material-blue/tokens.inc:8
-msgid "Usuario"
-msgstr "User"
-
-#: ../../../../ajax/ajax_doLogin.php:92 ../../../../ajax/ajax_doLogin.php:106
-#: ../../../../ajax/ajax_doLogin.php:117
-msgid "Usuario/Clave incorrectos"
-msgstr "Wrong user/pass"
-
-#: ../../../../ajax/ajax_doLogin.php:95 ../../../../ajax/ajax_doLogin.php:99
-msgid "Cuenta expirada"
-msgstr "Account expired"
-
-#: ../../../../ajax/ajax_doLogin.php:102
-msgid "El usuario no tiene grupos asociados"
-msgstr "The user has no associated groups"
-
-#: ../../../../ajax/ajax_doLogin.php:123 ../../../../ajax/ajax_doLogin.php:127
-msgid "Usuario deshabilitado"
-msgstr "User disabled"
-
-#: ../../../../ajax/ajax_doLogin.php:132
-msgid "Error al obtener los datos del usuario de la BBDD"
-msgstr "Error while retrieving user data from DB"
-
-#: ../../../../ajax/ajax_doLogin.php:142
-msgid "La clave maestra no ha sido guardada o es incorrecta"
-msgstr "The Master Password is not saved or is wrong"
-
-#: ../../../../ajax/ajax_doLogin.php:149 ../../../../ajax/ajax_doLogin.php:152
-msgid "Clave maestra incorrecta"
-msgstr "Invalid Master Password"
-
-#: ../../../../ajax/ajax_doLogin.php:175
-#: ../../../../inc/ProfileBase.class.php:512
-#: ../../../../inc/ProfileBase.class.php:550
-#: ../../../../inc/ProfileBase.class.php:593
-#: ../../../../web/UsersMgmtC.class.php:90
-#: ../../../../inc/themes/classic/users.inc:37
-#: ../../../../inc/themes/material-blue/users.inc:43
-msgid "Perfil"
-msgstr "Profile"
-
-#: ../../../../ajax/ajax_doLogin.php:176 ../../../../inc/Groups.class.php:158
-#: ../../../../inc/Groups.class.php:259 ../../../../inc/Groups.class.php:375
-#: ../../../../inc/Ldap.class.php:218 ../../../../inc/Ldap.class.php:231
-#: ../../../../inc/Ldap.class.php:241 ../../../../inc/Ldap.class.php:390
-#: ../../../../web/UsersMgmtC.class.php:91
-#: ../../../../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_files.php:46 ../../../../ajax/ajax_getFiles.php:40
+#: ../../../../ajax/ajax_accGetFiles.php:43
+#: ../../../../ajax/ajax_filesMgmt.php:58
msgid "Gestión de archivos deshabilitada"
msgstr "Files management disabled"
-#: ../../../../ajax/ajax_files.php:60 ../../../../inc/Files.class.php:63
+#: ../../../../ajax/ajax_accGetFiles.php:50
+#: ../../../../ajax/ajax_accSearch.php:44
+#: ../../../../ajax/ajax_filesMgmt.php:54
+#: ../../../../ajax/ajax_filesMgmt.php:70
+#: ../../../../ajax/ajax_passReset.php:49
+#: ../../../../ajax/ajax_userPrefsSave.php:58
+msgid "CONSULTA INVÁLIDA"
+msgstr "INVALID QUERY"
+
+#: ../../../../ajax/ajax_accSearch.php:38
+#: ../../../../ajax/ajax_userPrefsSave.php:51
+#: ../../../../inc/SP/Controller/RequestControllerTrait.class.php:125
+msgid "La sesión no se ha iniciado o ha caducado"
+msgstr "Session not started or timed out"
+
+#: ../../../../ajax/ajax_filesMgmt.php:73
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:93
msgid "Subir Archivo"
msgstr "Upload File"
-#: ../../../../ajax/ajax_files.php:69
+#: ../../../../ajax/ajax_filesMgmt.php:79
msgid "No hay extensiones permitidas"
-msgstr "There are no allowed extensions"
+msgstr "There aren't any allowed extensions"
-#: ../../../../ajax/ajax_files.php:80 ../../../../inc/FileImport.class.php:115
+#: ../../../../ajax/ajax_filesMgmt.php:96
+#: ../../../../inc/SP/Import/FileImport.class.php:97
msgid "Tipo de archivo no soportado"
msgstr "File type not allowed"
-#: ../../../../ajax/ajax_files.php:86
+#: ../../../../ajax/ajax_filesMgmt.php:97
+msgid "Extensión"
+msgstr "Extension"
+
+#: ../../../../ajax/ajax_filesMgmt.php:103
msgid "Archivo inválido"
msgstr "Invalid file"
-#: ../../../../ajax/ajax_files.php:102 ../../../../ajax/ajax_files.php:119
-#: ../../../../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 while reading file"
-
-#: ../../../../ajax/ajax_files.php:109
-msgid "El archivo es mayor de "
-msgstr "The file is bigger than"
-
-#: ../../../../ajax/ajax_files.php:126
-msgid "Archivo guardado"
-msgstr "File saved"
-
-#: ../../../../ajax/ajax_files.php:131
-msgid "No se pudo guardar el archivo"
-msgstr "Error while saving file"
-
-#: ../../../../ajax/ajax_files.php:141 ../../../../ajax/ajax_files.php:200
-msgid "No es un ID de archivo válido"
-msgstr "Invalid file ID"
-
-#: ../../../../ajax/ajax_files.php:149
-msgid "El archivo no existe"
-msgstr "The file does not exist"
-
-#: ../../../../ajax/ajax_files.php:158
-#: ../../../../inc/themes/classic/files.inc:19
-#: ../../../../inc/themes/material-blue/files.inc:19
-msgid "Descargar Archivo"
-msgstr "Download File"
-
-#: ../../../../ajax/ajax_files.php:159 ../../../../ajax/ajax_viewpass.php:70
-#: ../../../../inc/Files.class.php:112
-#: ../../../../inc/themes/classic/eventlog.inc:14
-#: ../../../../inc/themes/material-blue/eventlog.inc:14
-msgid "ID"
-msgstr "ID"
-
-#: ../../../../ajax/ajax_files.php:160 ../../../../inc/Files.class.php:65
-#: ../../../../inc/Files.class.php:113
-#: ../../../../inc/themes/classic/import.inc:152
-#: ../../../../inc/themes/material-blue/import.inc:80
+#: ../../../../ajax/ajax_filesMgmt.php:104
+#: ../../../../ajax/ajax_filesMgmt.php:166
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:835
+#: ../../../../inc/SP/Core/Upgrade.class.php:285
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:95
+#: ../../../../inc/themes/material-blue/views/config/import.inc:66
+#: ../../../../inc/themes/material-blue/views/config/import.inc:69
msgid "Archivo"
msgstr "File"
-#: ../../../../ajax/ajax_files.php:161 ../../../../inc/Files.class.php:66
-#: ../../../../inc/Files.class.php:114
-#: ../../../../web/AccountsMgmtC.class.php:267
-#: ../../../../inc/themes/classic/customfields.inc:16
-#: ../../../../inc/themes/material-blue/customfields.inc:19
-msgid "Tipo"
-msgstr "Type"
+#: ../../../../ajax/ajax_filesMgmt.php:117
+#: ../../../../ajax/ajax_filesMgmt.php:135
+#: ../../../../inc/SP/Import/FileImport.class.php:113
+#: ../../../../inc/SP/Import/FileImport.class.php:157
+#: ../../../../inc/SP/Import/FileImport.class.php:185
+msgid "Error interno al leer el archivo"
+msgstr "Internal error while reading file"
-#: ../../../../ajax/ajax_files.php:162 ../../../../inc/Files.class.php:67
-#: ../../../../inc/Files.class.php:115
+#: ../../../../ajax/ajax_filesMgmt.php:124
+msgid "Tamaño de archivo superado"
+msgstr "File size exceeded"
+
+#: ../../../../ajax/ajax_filesMgmt.php:125
+#: ../../../../ajax/ajax_filesMgmt.php:168
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:284
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:97
msgid "Tamaño"
msgstr "Size"
-#: ../../../../ajax/ajax_files.php:204
-msgid "Archivo eliminado"
-msgstr "File deleted"
+#: ../../../../ajax/ajax_filesMgmt.php:144
+msgid "Archivo guardado"
+msgstr "File saved"
-#: ../../../../ajax/ajax_files.php:209
-msgid "Error al eliminar el archivo"
-msgstr "Error during file deletion"
+#: ../../../../ajax/ajax_filesMgmt.php:146
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:77
+msgid "No se pudo guardar el archivo"
+msgstr "Error while saving file"
-#: ../../../../ajax/ajax_getContent.php:42
-#: ../../../../inc/ApiRequest.class.php:55
-#: ../../../../inc/CustomFieldDef.class.php:45
-#: ../../../../inc/CustomFields.class.php:54
-msgid "Parámetros incorrectos"
-msgstr "Incorrect parameters"
+#: ../../../../ajax/ajax_filesMgmt.php:154
+#: ../../../../ajax/ajax_filesMgmt.php:198
+msgid "No es un ID de archivo válido"
+msgstr "Invalid file ID"
-#: ../../../../ajax/ajax_migrate.php:56
-msgid "Confirmar la importación de cuentas"
-msgstr "Confirm account import"
+#: ../../../../ajax/ajax_filesMgmt.php:160
+msgid "El archivo no existe"
+msgstr "The file does not exist"
-#: ../../../../ajax/ajax_migrate.php:58
-msgid "Es necesario un usuario de conexión"
-msgstr "A connection username is needed"
+#: ../../../../ajax/ajax_filesMgmt.php:163
+#: ../../../../inc/themes/material-blue/views/account/files-list.inc:34
+msgid "Descargar Archivo"
+msgstr "Download File"
-#: ../../../../ajax/ajax_migrate.php:60
-msgid "Es necesaria una clave de conexión"
-msgstr "The connection password is needed"
+#: ../../../../ajax/ajax_filesMgmt.php:164
+#: ../../../../inc/SP/Api/SyspassApi.class.php:82
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:518
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:19
+msgid "ID"
+msgstr "ID"
-#: ../../../../ajax/ajax_migrate.php:62
-msgid "Es necesario el nombre de la BBDD"
-msgstr "A database name is needed"
-
-#: ../../../../ajax/ajax_migrate.php:64
-msgid "Es necesario un nombre de host"
-msgstr "A host name is needed"
-
-#: ../../../../ajax/ajax_passReset.php:50
-#: ../../../../ajax/ajax_passReset.php:53
-msgid "Recuperación de Clave"
-msgstr "Password Recovery"
-
-#: ../../../../ajax/ajax_passReset.php:56
-#: ../../../../ajax/ajax_passReset.php:61
-msgid "Solicitado para"
-msgstr "Requested for"
-
-#: ../../../../ajax/ajax_passReset.php:58
-#: ../../../../ajax/ajax_sendRequest.php:76
-msgid "Solicitud enviada"
-msgstr "Request sent"
-
-#: ../../../../ajax/ajax_passReset.php:58
-msgid "En breve recibirá un correo para completar la solicitud."
-msgstr "You will receive an email to complete the request shortly."
-
-#: ../../../../ajax/ajax_passReset.php:63
-msgid "No se ha podido realizar la solicitud. Consulte con el administrador."
-msgstr "The request cannot be performed. Please contact to the administrator"
-
-#: ../../../../ajax/ajax_passReset.php:73
-#: ../../../../inc/UserBase.class.php:570
-#: ../../../../inc/UserPass.class.php:127
-msgid "Modificar Clave Usuario"
-msgstr "Edit User Password"
-
-#: ../../../../ajax/ajax_passReset.php:73
-#: ../../../../inc/UserBase.class.php:570
-#: ../../../../inc/UserBase.class.php:594
-#: ../../../../inc/UserPass.class.php:127
-#: ../../../../web/UsersMgmtC.class.php:89
-#: ../../../../inc/themes/classic/users.inc:21
-#: ../../../../inc/themes/material-blue/users.inc:24
-msgid "Login"
-msgstr "Login"
-
-#: ../../../../ajax/ajax_passReset.php:81
-msgid "La clave es incorrecta o no coincide"
-msgstr "The password is incorrect or does not match"
-
-#: ../../../../ajax/ajax_sendRequest.php:49
-msgid "Es necesaria una descripción"
-msgstr "A description is needed"
-
-#: ../../../../ajax/ajax_sendRequest.php:62
-msgid "Solicitud de Modificación de Cuenta"
-msgstr "Request for Account Modification"
-
-#: ../../../../ajax/ajax_sendRequest.php:63
-msgid "Solicitante"
-msgstr "Requester"
-
-#: ../../../../ajax/ajax_sendRequest.php:64
-#: ../../../../ajax/ajax_viewpass.php:71 ../../../../inc/Account.class.php:181
-#: ../../../../inc/Account.class.php:236 ../../../../inc/Account.class.php:417
-#: ../../../../inc/Account.class.php:440 ../../../../inc/Account.class.php:684
-#: ../../../../inc/Files.class.php:64
+#: ../../../../ajax/ajax_filesMgmt.php:165
+#: ../../../../inc/SP/Api/SyspassApi.class.php:83
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:280
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:832
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:719
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:729
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:744
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:833
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1102
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:519
+#: ../../../../inc/SP/Controller/MainController.class.php:573
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:94
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:76
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:11
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:13
msgid "Cuenta"
msgstr "Account"
-#: ../../../../ajax/ajax_sendRequest.php:65
-#: ../../../../inc/Account.class.php:180 ../../../../inc/Account.class.php:235
-#: ../../../../inc/Account.class.php:416 ../../../../inc/Account.class.php:439
-#: ../../../../inc/Account.class.php:683 ../../../../inc/Customer.class.php:65
-#: ../../../../inc/Customer.class.php:115
-#: ../../../../inc/Customer.class.php:163
-#: ../../../../web/SearchC.class.php:287
-#: ../../../../inc/themes/classic/account.inc:23
-#: ../../../../inc/themes/classic/editpass.inc:12
-#: ../../../../inc/themes/classic/request.inc:9
-#: ../../../../inc/themes/classic/search.inc:58
-#: ../../../../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:60
-msgid "Cliente"
-msgstr "Customer"
+#: ../../../../ajax/ajax_filesMgmt.php:167
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:206
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:283
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:55
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:718
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:728
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:743
+#: ../../../../inc/SP/Controller/LoginController.class.php:344
+#: ../../../../inc/SP/Controller/LoginController.class.php:369
+#: ../../../../inc/SP/Controller/LoginController.class.php:407
+#: ../../../../inc/SP/Controller/LoginController.class.php:425
+#: ../../../../inc/SP/Controller/LoginController.class.php:431
+#: ../../../../inc/SP/Core/Init.class.php:430
+#: ../../../../inc/SP/Core/Init.class.php:670
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:96
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:75
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:31
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:33
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:39
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:46
+msgid "Tipo"
+msgstr "Type"
-#: ../../../../ajax/ajax_sendRequest.php:66
-#: ../../../../web/AccountsMgmtC.class.php:80
-#: ../../../../web/AccountsMgmtC.class.php:139
-#: ../../../../web/UsersMgmtC.class.php:188
-#: ../../../../inc/themes/classic/categories.inc:16
-#: ../../../../inc/themes/classic/customers.inc:16
-#: ../../../../inc/themes/classic/eventlog.inc:29
-#: ../../../../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:29
-#: ../../../../inc/themes/material-blue/groups.inc:20
-msgid "Descripción"
-msgstr "Description"
+#: ../../../../ajax/ajax_filesMgmt.php:204
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:827
+msgid "Archivo eliminado"
+msgstr "File deleted"
-#: ../../../../ajax/ajax_sendRequest.php:79
-msgid "Error al enviar la solicitud"
-msgstr "Error while sending request"
+#: ../../../../ajax/ajax_filesMgmt.php:206
+msgid "Error al eliminar el archivo"
+msgstr "Error while deleting file"
-#: ../../../../ajax/ajax_userPrefsSave.php:75
-#: ../../../../ajax/ajax_userPrefsSave.php:108
-msgid "Error al actualizar preferencias"
-msgstr "Error while updating preferences"
+#: ../../../../ajax/ajax_filesMgmt.php:209
+#: ../../../../ajax/ajax_userPrefsSave.php:97
+#: ../../../../inc/SP/Api/ApiRequest.class.php:192
+#: ../../../../inc/SP/Controller/RequestControllerTrait.class.php:112
+msgid "Acción Inválida"
+msgstr "Invalid Action"
-#: ../../../../ajax/ajax_userPrefsSave.php:85
-#: ../../../../ajax/ajax_userPrefsSave.php:111
+#: ../../../../ajax/ajax_getContent.php:55
+#: ../../../../inc/SP/Api/ApiBase.class.php:156
+#: ../../../../inc/SP/Api/ApiRequest.class.php:178
+msgid "Parámetros incorrectos"
+msgstr "Incorrect parameters"
+
+#: ../../../../ajax/ajax_install.php:58
+msgid "Instalación finalizada"
+msgstr "Installation finished"
+
+#: ../../../../ajax/ajax_passReset.php:62
+msgid "Recuperación de Clave"
+msgstr "Password Recovery"
+
+#: ../../../../ajax/ajax_passReset.php:63
+msgid "Solicitado para"
+msgstr "Requested for"
+
+#: ../../../../ajax/ajax_passReset.php:70
+msgid "Solicitud enviada"
+msgstr "Request sent"
+
+#: ../../../../ajax/ajax_passReset.php:74
+msgid "En breve recibirá un correo para completar la solicitud."
+msgstr "You will receive an email to complete the request shortly."
+
+#: ../../../../ajax/ajax_passReset.php:78
+msgid "Solicitud no enviada"
+msgstr "Request not sent"
+
+#: ../../../../ajax/ajax_passReset.php:79
+msgid "Compruebe datos de usuario o consulte con el administrador"
+msgstr "Please, check the user data or contact to the administrator"
+
+#: ../../../../ajax/ajax_passReset.php:88
+#: ../../../../inc/SP/Mgmt/Users/UserPass.class.php:151
+msgid "Modificar Clave Usuario"
+msgstr "Edit User Password"
+
+#: ../../../../ajax/ajax_passReset.php:101
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:282
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:934
+msgid "Clave actualizada"
+msgstr "Password updated"
+
+#: ../../../../ajax/ajax_passReset.php:102
+#: ../../../../inc/SP/Auth/Database/Database.class.php:68
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:474
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:231
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:246
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:273
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:284
+#: ../../../../inc/SP/Mgmt/Users/UserMigrate.class.php:106
+#: ../../../../inc/SP/Mgmt/Users/UserPass.class.php:152
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:32
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:23
+msgid "Login"
+msgstr "Login"
+
+#: ../../../../ajax/ajax_passReset.php:109
+msgid "La clave es incorrecta o no coincide"
+msgstr "Wrong password or does not match"
+
+#: ../../../../ajax/ajax_userPrefsSave.php:90
+#: ../../../../inc/SP/Mgmt/Users/UserPreferencesUtil.class.php:85
msgid "Preferencias actualizadas"
msgstr "Preferences updated"
-#: ../../../../ajax/ajax_viewpass.php:55
-msgid "La clave maestra no coincide"
-msgstr "The Master Password does not match"
+#: ../../../../inc/SP/Account/Account.class.php:126
+msgid "Error al modificar la cuenta"
+msgstr "Error while updating account"
-#: ../../../../ajax/ajax_viewpass.php:59
-#: ../../../../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"
+#: ../../../../inc/SP/Account/Account.class.php:172
+#: ../../../../inc/SP/Account/AccountHistoryUtil.class.php:153
+msgid "Error al restaurar cuenta"
+msgstr "Error on restoring account"
-#: ../../../../ajax/ajax_viewpass.php:69 ../../../../inc/Acl.class.php:133
-#: ../../../../inc/themes/classic/account.inc:389
-#: ../../../../inc/themes/classic/profiles.inc:23
-#: ../../../../inc/themes/classic/search.inc:139
-#: ../../../../inc/themes/material-blue/account.inc:433
-#: ../../../../inc/themes/material-blue/profiles.inc:35
-#: ../../../../inc/themes/material-blue/search.inc:149
-msgid "Ver Clave"
-msgstr "View password"
-
-#: ../../../../ajax/ajax_viewpass.php:80 ../../../../js/strings.js.php:73
-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:33 ../../../../inc/Backup.class.php:28
-#: ../../../../inc/Base.php:26 ../../../../inc/Cache.class.php:28
-#: ../../../../inc/Category.class.php:29 ../../../../inc/Config.class.php:28
-#: ../../../../inc/ConfigDB.class.php:28
-#: ../../../../inc/ConfigInterface.class.php:28
-#: ../../../../inc/Controller.class.php:31 ../../../../inc/Crypt.class.php:28
-#: ../../../../inc/CryptMasterPass.class.php:28
-#: ../../../../inc/CryptPKI.class.php:28
-#: ../../../../inc/CsvImport.class.php:28
-#: ../../../../inc/CsvImportBase.class.php:28
-#: ../../../../inc/CustomFieldDef.class.php:28
-#: ../../../../inc/CustomFields.class.php:28
-#: ../../../../inc/CustomFieldsBase.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/Language.class.php:28 ../../../../inc/Ldap.class.php:29
-#: ../../../../inc/LdapADS.class.php:28 ../../../../inc/Log.class.php:28
-#: ../../../../inc/Migrate.class.php:28 ../../../../inc/Minify.class.php:30
-#: ../../../../inc/Profile.class.php:29
-#: ../../../../inc/ProfileBase.class.php:28
-#: ../../../../inc/Request.class.php:46 ../../../../inc/Response.class.php:28
-#: ../../../../inc/SPException.class.php:28
-#: ../../../../inc/Session.class.php:28
-#: ../../../../inc/SessionUtil.class.php:28
-#: ../../../../inc/SyspassImport.class.php:28
-#: ../../../../inc/Template.class.php:27 ../../../../inc/Themes.class.php:28
-#: ../../../../inc/Upgrade.class.php:29 ../../../../inc/User.class.php:28
-#: ../../../../inc/UserAccounts.class.php:28
-#: ../../../../inc/UserBase.class.php:28 ../../../../inc/UserLdap.class.php:28
-#: ../../../../inc/UserMigrate.class.php:28
-#: ../../../../inc/UserPass.class.php:28
-#: ../../../../inc/UserPassRecover.class.php:28
-#: ../../../../inc/UserPreferences.class.php:28
-#: ../../../../inc/UserUtil.class.php:28 ../../../../inc/Util.class.php:28
-#: ../../../../inc/XmlExport.class.php:28
-#: ../../../../inc/XmlImport.class.php:28
-#: ../../../../inc/XmlImportBase.class.php:28
-#: ../../../../web/AccountC.class.php:41
-#: ../../../../web/AccountsMgmtC.class.php:33
-#: ../../../../web/ConfigC.class.php:35 ../../../../web/EventlogC.class.php:30
-#: ../../../../web/SearchC.class.php:33
-#: ../../../../web/UsersMgmtC.class.php:40
-#: ../../../../web/UsersPrefsC.class.php:35
-msgid "No es posible acceder directamente a este archivo"
-msgstr "Unable to access this file"
-
-#: ../../../../inc/Account.class.php:112 ../../../../inc/Account.class.php:201
-#: ../../../../inc/Account.class.php:653
-msgid "Error al actualizar el historial"
-msgstr "Error while updating history"
-
-#: ../../../../inc/Account.class.php:117
-msgid "Actualizar Cuenta"
-msgstr "Update Account"
-
-#: ../../../../inc/Account.class.php:120 ../../../../inc/Account.class.php:398
-msgid "Error al actualizar los grupos secundarios"
-msgstr "Error while updating secondary groups"
-
-#: ../../../../inc/Account.class.php:126 ../../../../inc/Account.class.php:406
-msgid "Error al actualizar los usuarios de la cuenta"
-msgstr "Error while updating account's users"
-
-#: ../../../../inc/Account.class.php:234
-msgid "Restaurar Cuenta"
-msgstr "Account Restore"
-
-#: ../../../../inc/Account.class.php:341
-#: ../../../../inc/AccountHistory.class.php:348
-#: ../../../../inc/AccountHistory.class.php:508
+#: ../../../../inc/SP/Account/Account.class.php:200
+#: ../../../../inc/SP/Account/AccountHistory.class.php:216
+#: ../../../../inc/SP/Account/AccountHistory.class.php:503
msgid "No se pudieron obtener los datos de la cuenta"
msgstr "Error while retrieving account data"
-#: ../../../../inc/Account.class.php:415 ../../../../inc/Acl.class.php:129
-#: ../../../../web/AccountC.class.php:150 ../../../../web/MainC.class.php:183
-msgid "Nueva Cuenta"
-msgstr "New Account"
+#: ../../../../inc/SP/Account/Account.class.php:202
+msgid "La cuenta no existe"
+msgstr "Account doesn't exist"
-#: ../../../../inc/Account.class.php:433
-msgid "ERROR: Error en la operación."
-msgstr "ERROR: Operation failed"
+#: ../../../../inc/SP/Account/Account.class.php:267
+msgid "Error al crear la cuenta"
+msgstr "Error while creating account"
-#: ../../../../inc/Account.class.php:438 ../../../../inc/Acl.class.php:134
-#: ../../../../web/AccountC.class.php:358
-#: ../../../../inc/themes/classic/account.inc:376
-#: ../../../../inc/themes/classic/search.inc:167
-#: ../../../../inc/themes/material-blue/account.inc:427
-#: ../../../../inc/themes/material-blue/search.inc:178
-msgid "Eliminar Cuenta"
-msgstr "Delete Account"
+#: ../../../../inc/SP/Account/Account.class.php:339
+#: ../../../../inc/SP/Account/AccountHistory.class.php:626
+msgid "Error al eliminar la cuenta"
+msgstr "Error while deleting account"
-#: ../../../../inc/Account.class.php:451
-msgid "Error al eliminar grupos asociados a la cuenta"
-msgstr "Error while deleting account's groups"
+#: ../../../../inc/SP/Account/Account.class.php:403
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:561
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:585
+msgid "Actualizar Clave Maestra"
+msgstr "Update Master Password"
-#: ../../../../inc/Account.class.php:455
-msgid "Error al eliminar usuarios asociados a la cuenta"
-msgstr "Error while deleting account's users"
-
-#: ../../../../inc/Account.class.php:459
-msgid "Error al eliminar archivos asociados a la cuenta"
-msgstr "Error while deleting account's files"
-
-#: ../../../../inc/Account.class.php:513
-#: ../../../../inc/AccountHistory.class.php:129
-#: ../../../../inc/XmlImport.class.php:62
+#: ../../../../inc/SP/Account/Account.class.php:404
+#: ../../../../inc/SP/Account/AccountHistory.class.php:263
msgid "Inicio"
msgstr "Start"
-#: ../../../../inc/Account.class.php:518
-#: ../../../../inc/AccountHistory.class.php:135
+#: ../../../../inc/SP/Account/Account.class.php:408
+#: ../../../../inc/SP/Account/AccountHistory.class.php:268
msgid "Error en el módulo de encriptación"
msgstr "Error on encryption module"
-#: ../../../../inc/Account.class.php:526
-#: ../../../../inc/AccountHistory.class.php:143
+#: ../../../../inc/SP/Account/Account.class.php:417
+#: ../../../../inc/SP/Account/AccountHistory.class.php:277
msgid "Error al obtener las claves de las cuentas"
msgstr "Error while retrieving accounts' passwords"
-#: ../../../../inc/Account.class.php:542
-#: ../../../../inc/AccountHistory.class.php:165
+#: ../../../../inc/SP/Account/Account.class.php:434
+#: ../../../../inc/SP/Account/AccountHistory.class.php:305
msgid "Clave de cuenta vacía"
msgstr "Account password empty"
-#: ../../../../inc/Account.class.php:547
-#: ../../../../inc/AccountHistory.class.php:170
+#: ../../../../inc/SP/Account/Account.class.php:439
+#: ../../../../inc/SP/Account/AccountHistory.class.php:310
msgid "IV de encriptación incorrecto"
msgstr "Wrong encryption IV"
-#: ../../../../inc/Account.class.php:556
-#: ../../../../inc/AccountHistory.class.php:179
+#: ../../../../inc/SP/Account/Account.class.php:448
+#: ../../../../inc/SP/Account/AccountHistory.class.php:319
msgid "No es posible desencriptar la clave de la cuenta"
msgstr "Unable to decrypt account password"
-#: ../../../../inc/Account.class.php:562
+#: ../../../../inc/SP/Account/Account.class.php:457
msgid "Fallo al actualizar la clave de la cuenta"
msgstr "Error while updating account's password"
-#: ../../../../inc/Account.class.php:576
+#: ../../../../inc/SP/Account/Account.class.php:462
+#: ../../../../inc/SP/Account/AccountHistory.class.php:332
msgid "Cuentas actualizadas"
msgstr "Accounts updated"
-#: ../../../../inc/Account.class.php:581
-#: ../../../../inc/AccountHistory.class.php:204
-#: ../../../../inc/CustomFields.class.php:285
-#: ../../../../inc/CustomFields.class.php:327
-msgid "Fin"
-msgstr "End"
+#: ../../../../inc/SP/Account/Account.class.php:463
+#: ../../../../inc/SP/Account/AccountHistory.class.php:333
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1019
+msgid "Errores"
+msgstr "Errors"
-#: ../../../../inc/Account.class.php:682
-msgid "Modificar Clave"
-msgstr "Update Password"
+#: ../../../../inc/SP/Account/Account.class.php:520
+msgid "Error al actualizar la clave"
+msgstr "Error while updating password"
-#: ../../../../inc/Account.class.php:717
-msgid "No se pudieron obtener los datos de las cuentas"
-msgstr "Unable to retrieve accounts data"
+#: ../../../../inc/SP/Account/AccountFavorites.class.php:80
+msgid "Error al añadir favorito"
+msgstr "Error while adding favorite"
-#: ../../../../inc/AccountHistory.class.php:128
+#: ../../../../inc/SP/Account/AccountFavorites.class.php:102
+msgid "Error al eliminar favorito"
+msgstr "Error while deleting favorite"
+
+#: ../../../../inc/SP/Account/AccountHistory.class.php:192
+msgid "Error al actualizar el historial"
+msgstr "Error while updating history"
+
+#: ../../../../inc/SP/Account/AccountHistory.class.php:262
msgid "Actualizar Clave Maestra (H)"
msgstr "Update Master Password (H)"
-#: ../../../../inc/AccountHistory.class.php:160
+#: ../../../../inc/SP/Account/AccountHistory.class.php:300
msgid "La clave maestra del registro no coincide"
msgstr "The record's master password does not match"
-#: ../../../../inc/AccountHistory.class.php:185
+#: ../../../../inc/SP/Account/AccountHistory.class.php:328
msgid "Fallo al actualizar la clave del histórico"
msgstr "Error on updating history's master password"
-#: ../../../../inc/AccountHistory.class.php:199
-#: ../../../../inc/CustomFields.class.php:323
-msgid "Registros actualizados"
-msgstr "Records updated"
+#: ../../../../inc/SP/Account/AccountTags.class.php:90
+msgid "Error al añadir las etiquetas de la cuenta"
+msgstr "Error while adding account's tags"
-#: ../../../../inc/Acl.class.php:112
-msgid "Denegado acceso a"
-msgstr "Access denied to"
+#: ../../../../inc/SP/Account/AccountTags.class.php:129
+msgid "Error al eliminar las etiquetas de la cuenta"
+msgstr "Error while removing account's tags"
-#: ../../../../inc/Acl.class.php:126
-msgid "Buscar Cuentas"
-msgstr "Search Accounts"
+#: ../../../../inc/SP/Account/AccountUtil.class.php:132
+msgid "No se pudieron obtener los datos de las cuentas"
+msgstr "Unable to retrieve accounts data"
-#: ../../../../inc/Acl.class.php:127
-msgid "Ver Cuenta"
-msgstr "View Account"
+#: ../../../../inc/SP/Account/UserAccounts.class.php:89
+msgid "Error al eliminar usuarios asociados a la cuenta"
+msgstr "Error while deleting account's users"
-#: ../../../../inc/Acl.class.php:128 ../../../../web/AccountC.class.php:265
-#: ../../../../inc/themes/classic/search.inc:161
-#: ../../../../inc/themes/material-blue/search.inc:172
-msgid "Copiar Cuenta"
-msgstr "Copy Account"
+#: ../../../../inc/SP/Account/UserAccounts.class.php:130
+msgid "Error al actualizar los usuarios de la cuenta"
+msgstr "Error while updating account's users"
-#: ../../../../inc/Acl.class.php:130 ../../../../web/AccountC.class.php:329
-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:191
-#: ../../../../inc/themes/classic/profiles.inc:50
-#: ../../../../inc/themes/material-blue/account.inc:234
-#: ../../../../inc/themes/material-blue/config.inc:280
-#: ../../../../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/ConfigDB.class.php:91
-#: ../../../../inc/ConfigDB.class.php:119 ../../../../web/MainC.class.php:201
-#: ../../../../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:132
-#: ../../../../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:177
-#: ../../../../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
+#: ../../../../inc/SP/Api/ApiBase.class.php:95
+#: ../../../../inc/SP/Api/ApiBase.class.php:187
+#: ../../../../inc/SP/Api/ApiBase.class.php:199
+#: ../../../../inc/SP/Api/ApiBase.class.php:212
+#: ../../../../inc/SP/Api/ApiBase.class.php:244
+#: ../../../../inc/SP/Api/SyspassApi.class.php:74
+#: ../../../../inc/SP/Api/SyspassApi.class.php:143
msgid "Acceso no permitido"
msgstr "Unauthorized access"
-#: ../../../../inc/Api.class.php:166
-msgid "Error de codificación"
-msgstr "Encoding error"
+#: ../../../../inc/SP/Api/ApiRequest.class.php:145
+#: ../../../../inc/SP/Import/XmlImportTrait.class.php:75
+msgid "Método inválido"
+msgstr "Invalid Method"
-#: ../../../../inc/ApiRequest.class.php:102
-msgid "Token de autorización"
-msgstr "Authorization Token"
+#: ../../../../inc/SP/Api/ApiRequest.class.php:162
+msgid "Datos inválidos"
+msgstr "Invalid data"
-#: ../../../../inc/ApiRequest.class.php:103
-msgid "Acción a realizar"
-msgstr "Action"
+#: ../../../../inc/SP/Api/ApiRequest.class.php:164
+msgid "Formato incorrecto"
+msgstr "Wrong format"
-#: ../../../../inc/ApiRequest.class.php:104
-msgid "Clave de usuario (opcional)"
-msgstr "User's password (optional)"
+#: ../../../../inc/SP/Api/ApiTokens.class.php:97
+#: ../../../../inc/SP/Api/ApiTokens.class.php:125
+#: ../../../../inc/SP/Api/ApiTokens.class.php:150
+#: ../../../../inc/SP/Api/ApiTokens.class.php:183
+#: ../../../../inc/SP/Api/ApiTokens.class.php:224
+#: ../../../../inc/SP/Api/ApiTokens.class.php:242
+#: ../../../../inc/SP/Api/ApiTokens.class.php:262
+#: ../../../../inc/SP/Api/ApiTokensUtil.class.php:168
+#: ../../../../inc/SP/Controller/LoginController.class.php:182
+#: ../../../../inc/SP/Controller/LoginController.class.php:257
+#: ../../../../inc/SP/Controller/LoginController.class.php:360
+#: ../../../../inc/SP/Controller/LoginController.class.php:384
+#: ../../../../inc/SP/Core/Crypt.class.php:212
+#: ../../../../inc/SP/Core/Crypt.class.php:223
+#: ../../../../inc/SP/Import/XmlFileImport.class.php:106
+#: ../../../../inc/SP/Mgmt/Users/UserPassRecover.class.php:134
+msgid "Error interno"
+msgstr "Internal error"
-#: ../../../../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
+#: ../../../../inc/SP/Api/ApiTokens.class.php:129
msgid "La autorización ya existe"
msgstr "The authorization already exist"
-#: ../../../../inc/ApiTokens.class.php:307
-msgid "Actualizar Autorización"
-msgstr "Update Authorization"
+#: ../../../../inc/SP/Api/SyspassApi.class.php:81
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:222
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:223
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:517
+#: ../../../../inc/SP/Core/Acl.class.php:191
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:48
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:71
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:54
+msgid "Ver Clave"
+msgstr "View password"
-#: ../../../../inc/ApiTokens.class.php:331
-#: ../../../../web/UsersMgmtC.class.php:422
-msgid "Eliminar Autorización"
-msgstr "Delete Authorization"
+#: ../../../../inc/SP/Api/SyspassApi.class.php:84
+#: ../../../../inc/SP/Api/SyspassApi.class.php:181
+#: ../../../../inc/SP/Api/SyspassApi.class.php:219
+#: ../../../../inc/SP/Api/SyspassApi.class.php:272
+#: ../../../../inc/SP/Api/SyspassApi.class.php:308
+#: ../../../../inc/SP/Api/SyspassApi.class.php:361
+#: ../../../../inc/SP/Api/SyspassApi.class.php:397
+#: ../../../../inc/SP/Controller/MainController.class.php:574
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApiBase.class.php:197
+msgid "Origen"
+msgstr "Source"
-#: ../../../../inc/Auth.class.php:107
-msgid "Usuario no pertenece al grupo"
-msgstr "The user doesn't belong to the group"
+#: ../../../../inc/SP/Api/SyspassApi.class.php:178
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:914
+msgid "Crear Cuenta"
+msgstr "Add Account"
-#: ../../../../inc/Auth.class.php:186
-#: ../../../../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/SP/Api/SyspassApi.class.php:179
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:915
+#: ../../../../inc/SP/Import/ImportBase.class.php:140
+msgid "Cuenta creada"
+msgstr "Account added"
-#: ../../../../inc/Auth.class.php:188
-msgid "Se ha solicitado el cambio de su clave de usuario."
-msgstr "A request for changing your user password has been done."
+#: ../../../../inc/SP/Api/SyspassApi.class.php:180
+#: ../../../../inc/SP/Api/SyspassApi.class.php:218
+#: ../../../../inc/SP/Api/SyspassApi.class.php:271
+#: ../../../../inc/SP/Api/SyspassApi.class.php:307
+#: ../../../../inc/SP/Api/SyspassApi.class.php:360
+#: ../../../../inc/SP/Api/SyspassApi.class.php:396
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:354
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:56
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:130
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:205
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:282
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:349
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:402
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:473
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:592
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:666
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:912
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:230
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:245
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:272
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:283
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:374
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:382
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:402
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:434
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:442
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:462
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:496
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:504
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:524
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:558
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:566
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:587
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:667
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:674
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:775
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:782
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:800
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:862
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:870
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:877
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:916
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:926
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:935
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:944
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:967
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:971
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1156
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1177
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1181
+#: ../../../../inc/SP/Core/Plugin/PluginDataStore.class.php:77
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:12
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:9
+#: ../../../../inc/themes/material-blue/views/account/account.inc:41
+#: ../../../../inc/themes/material-blue/views/account/request.inc:12
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:43
+#: ../../../../inc/themes/material-blue/views/config/info.inc:30
+#: ../../../../inc/themes/material-blue/views/itemshow/categories.inc:16
+#: ../../../../inc/themes/material-blue/views/itemshow/customers.inc:19
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:19
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:18
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:13
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:17
+#: ../../../../inc/themes/material-blue/views/itemshow/tags.inc:16
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:17
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:12
+msgid "Nombre"
+msgstr "Name"
-#: ../../../../inc/Auth.class.php:190
-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/SP/Api/SyspassApi.class.php:209
+msgid "Cuenta no encontrada"
+msgstr "Account not found"
-#: ../../../../inc/Auth.class.php:194
-msgid "Si no ha solicitado esta acción, ignore este mensaje."
-msgstr "If you have not requested this action, please dismiss this message."
+#: ../../../../inc/SP/Api/SyspassApi.class.php:216
+#: ../../../../inc/SP/Controller/AccountController.class.php:551
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:277
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:278
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:383
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:384
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:454
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:455
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:961
+#: ../../../../inc/SP/Core/Acl.class.php:192
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:39
+msgid "Eliminar Cuenta"
+msgstr "Delete Account"
-#: ../../../../inc/Backup.class.php:167
-msgid "Esta operación sólo es posible en entornos Linux"
-msgstr "This operation is only available on Linux environments"
+#: ../../../../inc/SP/Api/SyspassApi.class.php:217
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:970
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1180
+msgid "Cuenta eliminada"
+msgstr "Account deleted"
-#: ../../../../inc/Backup.class.php:169
-msgid "Error al realizar backup en modo compatibilidad"
-msgstr "Error while doing backup in compatibility mode"
+#: ../../../../inc/SP/Api/SyspassApi.class.php:269
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:556
+msgid "Crear Categoría"
+msgstr "Add Category"
-#: ../../../../inc/Backup.class.php:223
-#: ../../../../inc/XmlExport.class.php:467
-msgid "No es posible crear el directorio de backups"
-msgstr "Unable to create backups directory"
+#: ../../../../inc/SP/Api/SyspassApi.class.php:270
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:557
+#: ../../../../inc/SP/Import/ImportBase.class.php:161
+msgid "Categoría creada"
+msgstr "Category added"
-#: ../../../../inc/Backup.class.php:228
-#: ../../../../inc/XmlExport.class.php:472
-msgid "Compruebe los permisos del directorio de backups"
-msgstr "Check backup directory permissions"
+#: ../../../../inc/SP/Api/SyspassApi.class.php:299
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:127
+msgid "Categoría no encontrada"
+msgstr "Category not found"
-#: ../../../../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 while creating category"
-
-#: ../../../../inc/Category.class.php:83
-#: ../../../../inc/Category.class.php:132
-#: ../../../../inc/Category.class.php:182
-#: ../../../../web/SearchC.class.php:299
-#: ../../../../inc/themes/classic/account.inc:42
-#: ../../../../inc/themes/classic/search.inc:83
-#: ../../../../inc/themes/material-blue/account.inc:51
-#: ../../../../inc/themes/material-blue/search.inc:85
-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 while deleting category"
-
-#: ../../../../inc/Category.class.php:132
-#: ../../../../web/AccountsMgmtC.class.php:102
+#: ../../../../inc/SP/Api/SyspassApi.class.php:305
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:111
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:112
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:584
+#: ../../../../inc/SP/Core/Acl.class.php:200
msgid "Eliminar Categoría"
msgstr "Delete Category"
-#: ../../../../inc/Category.class.php:179
-msgid "Error al actualizar la categoría"
-msgstr "Error while updating category"
+#: ../../../../inc/SP/Api/SyspassApi.class.php:306
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:579
+msgid "Categoría eliminada"
+msgstr "Category deleted"
-#: ../../../../inc/Category.class.php:182
-msgid "Modificar Categoría"
-msgstr "Category Edit"
+#: ../../../../inc/SP/Api/SyspassApi.class.php:358
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:494
+msgid "Crear Cliente"
+msgstr "Add Customer"
-#: ../../../../inc/Config.class.php:148
-msgid "No es posible escribir el archivo de configuración"
-msgstr "Unable to write in configuration file"
+#: ../../../../inc/SP/Api/SyspassApi.class.php:359
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:495
+#: ../../../../inc/SP/Import/ImportBase.class.php:183
+msgid "Cliente creado"
+msgstr "Customer added"
-#: ../../../../inc/Config.class.php:148
-msgid "Compruebe los permisos del directorio \"config\""
-msgstr "Please, check the \"config\" directory permissions"
+#: ../../../../inc/SP/Api/SyspassApi.class.php:388
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:132
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:203
+msgid "Cliente no encontrado"
+msgstr "Customer not found"
-#: ../../../../inc/ConfigDB.class.php:91
-#: ../../../../inc/ConfigDB.class.php:120
+#: ../../../../inc/SP/Api/SyspassApi.class.php:394
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:185
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:186
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:521
+#: ../../../../inc/SP/Core/Acl.class.php:205
+msgid "Eliminar Cliente"
+msgstr "Delete Customer"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:395
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:516
+msgid "Cliente eliminado"
+msgstr "Customer deleted"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:418
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:709
+msgid "Proceso de backup finalizado"
+msgstr "Backup process finished"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:424
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:704
+#: ../../../../inc/SP/Core/Backup.class.php:75
+msgid "Error al realizar el backup"
+msgstr "Error while doing backup"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:425
+#: ../../../../inc/SP/Controller/ChecksController.class.php:113
+#: ../../../../inc/SP/Controller/ChecksController.class.php:142
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:682
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:705
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1026
+#: ../../../../inc/SP/Import/Import.class.php:115
+msgid "Revise el registro de eventos para más detalles"
+msgstr "Please check the event log for more details"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:455
+#: ../../../../inc/SP/Api/SyspassApi.class.php:472
+#: ../../../../inc/SP/Api/SyspassApi.class.php:479
+msgid "Id de la cuenta"
+msgstr "Account Id"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:456
+#: ../../../../inc/SP/Api/SyspassApi.class.php:473
+#: ../../../../inc/SP/Api/SyspassApi.class.php:485
+msgid "Clave del usuario asociado al token"
+msgstr "Token user's password"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:457
+msgid "Devolver detalles en la respuesta"
+msgstr "Send details on the response"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:463
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:15
+msgid "Texto a buscar"
+msgstr "Text to search"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:464
+#: ../../../../inc/SP/Api/SyspassApi.class.php:503
+#: ../../../../inc/SP/Api/SyspassApi.class.php:523
+msgid "Número de resultados a mostrar"
+msgstr "Number of results to show"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:465
+msgid "Id de categoría a filtrar"
+msgstr "Category Id to filter on"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:466
+msgid "Id de cliente a filtrar"
+msgstr "Customer Id to filter on"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:486
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:18
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:16
+#: ../../../../inc/themes/material-blue/views/account/account.inc:48
+#: ../../../../inc/themes/material-blue/views/account/request.inc:19
+msgid "Nombre de cuenta"
+msgstr "Account name"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:487
+#: ../../../../inc/SP/Api/SyspassApi.class.php:516
+msgid "Id de categoría"
+msgstr "Category Id"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:488
+#: ../../../../inc/SP/Api/SyspassApi.class.php:536
+msgid "Id de cliente"
+msgstr "Customer Id"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:489
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:615
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:64
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:56
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:62
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:73
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:76
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:79
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:87
+#: ../../../../inc/themes/material-blue/views/account/account.inc:123
+#: ../../../../inc/themes/material-blue/views/account/account.inc:130
+#: ../../../../inc/themes/material-blue/views/account/viewpass.inc:31
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:254
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:257
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:61
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:138
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:77
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:84
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:229
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:236
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:97
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:104
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:35
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:41
+#: ../../../../inc/themes/material-blue/views/main/install.inc:43
+#: ../../../../inc/themes/material-blue/views/main/login.inc:27
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:34
+msgid "Clave"
+msgstr "Password"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:490
+#: ../../../../inc/themes/material-blue/views/account/account.inc:117
+msgid "Usuario de acceso"
+msgstr "Access user"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:491
+#: ../../../../inc/themes/material-blue/views/account/account.inc:105
+msgid "URL o IP de acceso"
+msgstr "Access URL or IP"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:492
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:72
+#: ../../../../inc/themes/material-blue/views/account/account.inc:172
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:131
+msgid "Notas sobre la cuenta"
+msgstr "Notes about the account"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:502
+msgid "Nombre de categoría a buscar"
+msgstr "Category name to search for"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:509
+#: ../../../../inc/themes/material-blue/views/itemshow/categories.inc:23
+msgid "Nombre de la categoría"
+msgstr "Category name"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:510
+#: ../../../../inc/themes/material-blue/views/itemshow/categories.inc:35
+msgid "Descripción de la categoría"
+msgstr "Category description"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:522
+msgid "Nombre de cliente a buscar"
+msgstr "Customer name to search for"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:529
+#: ../../../../inc/themes/material-blue/views/itemshow/customers.inc:26
+msgid "Nombre del cliente"
+msgstr "Customer name"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:530
+#: ../../../../inc/themes/material-blue/views/itemshow/customers.inc:39
+msgid "Descripción del cliente"
+msgstr "Customer description"
+
+#: ../../../../inc/SP/Auth/Auth.class.php:87
+msgid "Método ya inicializado"
+msgstr "Method already initialized"
+
+#: ../../../../inc/SP/Auth/Auth.class.php:89
+msgid "Método no disponible"
+msgstr "Method unavailable"
+
+#: ../../../../inc/SP/Auth/AuthUtil.class.php:63
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:132
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:169
+msgid "Cambio de Clave"
+msgstr "Password Change"
+
+#: ../../../../inc/SP/Auth/AuthUtil.class.php:64
+msgid "Se ha solicitado el cambio de su clave de usuario."
+msgstr "A request for changing your user password has been done."
+
+#: ../../../../inc/SP/Auth/AuthUtil.class.php:66
+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/SP/Auth/AuthUtil.class.php:70
+msgid "Si no ha solicitado esta acción, ignore este mensaje."
+msgstr "If you have not requested this action, please dismiss this message."
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:118
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:432
+#: ../../../../inc/SP/Controller/ChecksController.class.php:92
+msgid "Los parámetros de LDAP no están configurados"
+msgstr "LDAP parameters are not set"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:132
+#: ../../../../inc/SP/Controller/ChecksController.class.php:107
+msgid "Conexión a LDAP correcta"
+msgstr "LDAP connection OK"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:133
+#: ../../../../inc/SP/Mgmt/Users/UserLdapSync.class.php:67
+msgid "Objetos encontrados"
+msgstr "Objects found"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:169
+msgid "No es posible conectar con el servidor de LDAP"
+msgstr "Unable to connect to the LDAP server"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:170
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:49
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:19
+#: ../../../../inc/themes/material-blue/views/config/info.inc:58
+#: ../../../../inc/themes/material-blue/views/config/info.inc:61
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:62
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:87
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:27
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:34
+msgid "Servidor"
+msgstr "Server"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:214
+msgid "Error al conectar (BIND)"
+msgstr "Connection error (BIND)"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:247
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:259
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:269
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:679
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:691
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:701
+msgid "Error al buscar objetos en DN base"
+msgstr "Error while searching objects in base DN"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:533
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:556
+msgid "Error al buscar el DN del usuario"
+msgstr "Error while searching user DN"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:534
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:547
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:557
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:167
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:109
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:119
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:368
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:748
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:835
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:616
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:624
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:720
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:730
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:745
+#: ../../../../inc/SP/Controller/LoginController.class.php:196
+#: ../../../../inc/SP/Controller/LoginController.class.php:251
+#: ../../../../inc/SP/Controller/LoginController.class.php:345
+#: ../../../../inc/SP/Controller/LoginController.class.php:403
+#: ../../../../inc/SP/Controller/LoginController.class.php:426
+#: ../../../../inc/SP/Core/Init.class.php:591
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:77
+#: ../../../../inc/SP/Mgmt/Users/UserLdapSync.class.php:99
+#: ../../../../inc/SP/Mgmt/Users/UserPreferencesUtil.class.php:66
+#: ../../../../res/test.php:64
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:45
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:51
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:54
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:60
+#: ../../../../inc/themes/material-blue/views/account/account.inc:110
+#: ../../../../inc/themes/material-blue/views/account/viewpass.inc:20
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:63
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:47
+#: ../../../../inc/themes/material-blue/views/config/info.inc:46
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:117
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:64
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:71
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:209
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:223
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:31
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:35
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:37
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:12
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:14
+#: ../../../../inc/themes/material-blue/views/main/login.inc:15
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:16
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:90
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:92
+msgid "Usuario"
+msgstr "User"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:546
+msgid "Error al localizar el usuario en LDAP"
+msgstr "Error while searching user on LDAP"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:587
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:600
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:611
+msgid "Error al buscar RDN de grupo"
+msgstr "Error while searching group RDN"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:588
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:601
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:612
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:134
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:144
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:158
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:168
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:108
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:120
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:476
+#: ../../../../inc/SP/Controller/LoginController.class.php:253
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:236
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:239
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:174
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:201
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:66
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:68
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:47
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:61
+msgid "Grupo"
+msgstr "Group"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:121
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:157
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:93
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:126
+msgid "Usuario verificado en grupo"
+msgstr "User in group verified"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:133
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:107
+msgid "Error al buscar el grupo de usuarios"
+msgstr "Error while searching users group"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:143
+msgid "No se encontró el grupo con ese nombre"
+msgstr "No group found with that name"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:166
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:118
+msgid "Usuario no pertenece al grupo"
+msgstr "The user doesn't belong to the group"
+
+#: ../../../../inc/SP/Config/ConfigDB.class.php:107
+#: ../../../../inc/SP/Config/ConfigDB.class.php:147
+#: ../../../../inc/SP/Controller/MainController.class.php:287
+#: ../../../../inc/SP/Core/Acl.class.php:215
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:75
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:216
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:218
+msgid "Configuración"
+msgstr "Configuration"
+
+#: ../../../../inc/SP/Config/ConfigDB.class.php:108
+#: ../../../../inc/SP/Config/ConfigDB.class.php:148
msgid "Modificar configuración"
msgstr "Update Configuration"
-#: ../../../../inc/ConfigDB.class.php:121
+#: ../../../../inc/SP/Config/ConfigDB.class.php:149
+#: ../../../../inc/SP/Core/Upgrade.class.php:258
+#: ../../../../inc/SP/Core/Upgrade.class.php:264
msgid "Parámetro"
msgstr "Parameter"
-#: ../../../../inc/ConfigDB.class.php:122
+#: ../../../../inc/SP/Config/ConfigDB.class.php:152
msgid "Valor"
msgstr "Value"
-#: ../../../../inc/Controller.class.php:165
+#: ../../../../inc/SP/Controller/AccountController.class.php:144
+#: ../../../../inc/SP/Controller/AccountController.class.php:467
+#: ../../../../inc/SP/Controller/AccountController.class.php:499
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:211
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:212
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:45
+msgid "Detalles de Cuenta"
+msgstr "Account Details"
+
+#: ../../../../inc/SP/Controller/AccountController.class.php:256
+#: ../../../../inc/SP/Controller/MainController.class.php:257
+#: ../../../../inc/SP/Core/Acl.class.php:187
+msgid "Nueva Cuenta"
+msgstr "New Account"
+
+#: ../../../../inc/SP/Controller/AccountController.class.php:383
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:264
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:265
+#: ../../../../inc/SP/Core/Acl.class.php:186
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:101
+msgid "Copiar Cuenta"
+msgstr "Copy Account"
+
+#: ../../../../inc/SP/Controller/AccountController.class.php:411
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:251
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:252
+#: ../../../../inc/SP/Core/Acl.class.php:188
+msgid "Editar Cuenta"
+msgstr "Edit Account"
+
+#: ../../../../inc/SP/Controller/AccountController.class.php:439
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:116
+msgid "Modificar Clave de Cuenta"
+msgstr "Edit Account Password"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:237
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:238
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:86
+msgid "Copiar Clave en Portapapeles"
+msgstr "Copy Password to Clipboard"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:287
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:288
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:142
+msgid "Solicitar Modificación"
+msgstr "Request Modification"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:297
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:298
+msgid "Más Acciones"
+msgstr "More Actions"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:347
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:281
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:350
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:403
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:834
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1103
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:23
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:29
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:21
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:27
+#: ../../../../inc/themes/material-blue/views/account/account.inc:53
+#: ../../../../inc/themes/material-blue/views/account/account.inc:55
+#: ../../../../inc/themes/material-blue/views/account/request.inc:24
+#: ../../../../inc/themes/material-blue/views/account/request.inc:31
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:21
+msgid "Cliente"
+msgstr "Customer"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:348
+msgid "Ordenar por Cliente"
+msgstr "Sort by Customer"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:355
+msgid "Ordenar por Nombre"
+msgstr "Sort by Name"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:361
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:32
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:38
+#: ../../../../inc/themes/material-blue/views/account/account.inc:76
+#: ../../../../inc/themes/material-blue/views/account/account.inc:78
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:57
+msgid "Categoría"
+msgstr "Category"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:362
+msgid "Ordenar por Categoría"
+msgstr "Sort by Category"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:369
+msgid "Ordenar por Usuario"
+msgstr "Sort by Username"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:375
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:34
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:40
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:43
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:49
+#: ../../../../inc/themes/material-blue/views/account/account.inc:99
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:68
+msgid "URL / IP"
+msgstr "URL / IP"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:376
+msgid "Ordenar por URL / IP"
+msgstr "Sort by URL / IP"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:108
+#, php-format
+msgid "Objetos encontrados: %d"
+msgstr "Objects found: %d"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:127
+msgid "Los parámetros de DokuWiki no están configurados"
+msgstr "DokuWiki parameters are not set"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:135
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:113
+#: ../../../../inc/SP/Import/ImportBase.class.php:144
+#: ../../../../inc/SP/Import/ImportBase.class.php:166
+#: ../../../../inc/SP/Import/ImportBase.class.php:188
+#: ../../../../inc/SP/Import/ImportBase.class.php:210
+#: ../../../../inc/SP/Log/Email.class.php:92
+#: ../../../../inc/SP/Log/Email.class.php:93
+#: ../../../../inc/SP/Log/Email.class.php:203
+#: ../../../../inc/SP/Log/Email.class.php:204
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApiBase.class.php:193
+msgid "Error"
+msgstr "Error"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:137
+msgid "Conexión correcta"
+msgstr "Connection successful"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:138
+#: ../../../../inc/SP/Core/Init.class.php:429
+#: ../../../../inc/SP/Core/Init.class.php:669
+#: ../../../../inc/SP/Core/Upgrade.class.php:94
+#: ../../../../inc/SP/Core/Upgrade.class.php:278
+#: ../../../../inc/themes/material-blue/views/config/info.inc:40
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:25
+msgid "Versión"
+msgstr "Version"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:141
+msgid "Error de conexión a DokuWiki"
+msgstr "Error while connecting to DokuWiki"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:173
+msgid "Faltan parámetros de syslog remoto"
+msgstr "Missing remote syslog parameters"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:182
+msgid "Syslog remoto deshabilitado"
+msgstr "Remote syslog disabled"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:195
+msgid "Faltan parámetros de Proxy"
+msgstr "Missing proxy parameters "
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:204
+msgid "Proxy habiltado"
+msgstr "Proxy enabled"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:208
+msgid "Proxy deshabilitado"
+msgstr "Proxy disabled"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:211
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:300
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:364
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:411
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:465
+msgid "Sección"
+msgstr "Section"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:211
+#: ../../../../inc/SP/Controller/ConfigController.class.php:151
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:226
+#: ../../../../inc/themes/material-blue/views/main/install.inc:132
+msgid "General"
+msgstr "General"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:228
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:511
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:581
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:649
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:699
+#: ../../../../inc/SP/Forms/UserForm.class.php:96
+#: ../../../../inc/SP/Forms/UserForm.class.php:108
+#: ../../../../inc/SP/Forms/UserForm.class.php:122
+msgid "Ey, esto es una DEMO!!"
+msgstr "Ey, this is a DEMO!!"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:242
+msgid "Configuración actualizada"
+msgstr "Configuration updated"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:244
+msgid "Error al guardar la configuración"
+msgstr "Error while saving configuration"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:248
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:424
+msgid "Modificar Configuración"
+msgstr "Edit Configuration"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:281
+msgid "El tamaño máximo por archivo es de 16MB"
+msgstr "The maximum size per file is 16MB"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:300
+#: ../../../../inc/SP/Controller/ConfigController.class.php:200
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:365
+#: ../../../../inc/SP/Controller/MainController.class.php:580
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:90
+#: ../../../../inc/themes/material-blue/views/account/linkedAccounts.inc:13
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:30
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:32
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:196
+msgid "Cuentas"
+msgstr "Accounts"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:322
+msgid "Faltan parámetros de Wiki"
+msgstr "Missing Wiki parameters"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:330
+msgid "Wiki habiltada"
+msgstr "Wiki enabled"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:334
+msgid "Wiki deshabilitada"
+msgstr "Wiki disabled"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:347
+msgid "Faltan parámetros de DokuWiki"
+msgstr "Missing DokuWiki parameters"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:357
+msgid "DokuWiki habiltada"
+msgstr "DokuWiki enabled"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:361
+msgid "DokuWiki deshabilitada"
+msgstr "DokuWiki disabled"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:364
+#: ../../../../inc/SP/Controller/ConfigController.class.php:232
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:63
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:10
+msgid "Wiki"
+msgstr "Wiki"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:391
+msgid "Faltan parámetros de LDAP"
+msgstr "Missing LDAP parameters"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:404
+msgid "LDAP habiltado"
+msgstr "LDAP enabled"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:408
+msgid "LDAP deshabilitado"
+msgstr "LDAP disabled"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:411
+#: ../../../../inc/SP/Controller/ConfigController.class.php:265
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:7
+msgid "LDAP"
+msgstr "LDAP"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:440
+msgid "Faltan parámetros de Correo"
+msgstr "Missing Mail parameters"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:456
+msgid "Correo habiltado"
+msgstr "Mail enabled"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:462
+msgid "Correo deshabilitado"
+msgstr "Mail disabled"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:465
+#: ../../../../inc/SP/Controller/ConfigController.class.php:296
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:7
+msgid "Correo"
+msgstr "Mail"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:487
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:564
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:279
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:507
+#: ../../../../inc/SP/Controller/LoginController.class.php:288
+#: ../../../../inc/SP/Controller/LoginController.class.php:298
+msgid "Clave maestra actualizada"
+msgstr "Master Password updated"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:488
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:566
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:279
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:507
+msgid "Reinicie la sesión para cambiarla"
+msgstr "Please, restart the session for update it"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:492
+msgid "Clave maestra no indicada"
+msgstr "Master Password needed"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:495
+msgid "Se ha de confirmar el cambio de clave"
+msgstr "The password update must be confirmed"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:500
+msgid "Las claves son idénticas"
+msgstr "The passwords are the same"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:503
+msgid "Las claves maestras no coinciden"
+msgstr "The master passwords do not match"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:506
+msgid "La clave maestra actual no coincide"
+msgstr "The current master password does not match"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:521
+#: ../../../../inc/SP/Import/Import.class.php:89
+msgid "No es posible iniciar una transacción"
+msgstr "Unable to start a transaction"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:530
+msgid "Errores al actualizar las claves de las cuentas"
+msgstr "Error while updating accounts' passwords"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:539
+msgid "Errores al actualizar las claves de las cuentas del histórico"
+msgstr "Error while updating accounts' passwords in history"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:546
+msgid "Errores al actualizar datos de campos personalizados"
+msgstr "Error while updating custom fields data"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:551
+#: ../../../../inc/SP/Import/Import.class.php:95
+msgid "No es posible finalizar una transacción"
+msgstr "Unable to finish a transaction"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:569
+msgid "Error al guardar el hash de la clave maestra"
+msgstr "Error while saving Master Password's hash"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:588
+msgid "Hash de clave maestra actualizado"
+msgstr "Master password hash updated"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:592
+msgid "Error al actualizar el hash de la clave maestra"
+msgstr "Error while updating the master password hash"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:611
+msgid "Generar Clave Temporal"
+msgstr "Generate Temporary Password"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:614
+msgid "Clave Temporal Generada"
+msgstr "Temporary Password Generated"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:619
+#, php-format
+msgid "Clave Maestra %s"
+msgstr "Master Password %s"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:620
+msgid ""
+"Se ha generado una nueva clave para el acceso a sysPass y se solicitará en "
+"el siguiente inicio."
+msgstr ""
+"A new sysPass master password has been generated, so the next time you log "
+"into the application it will be requested."
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:622
+#, php-format
+msgid "La nueva clave es: %s"
+msgstr "The new Master Password is: %s"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:624
+msgid "No olvide acceder lo antes posible para guardar los cambios."
+msgstr ""
+"Please, do not forget to log in as soon as possible to save the changes."
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:635
+msgid "Error al generar clave temporal"
+msgstr "Error while generating temporary password"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:676
+#: ../../../../inc/SP/Forms/AccountForm.class.php:134
+#: ../../../../inc/SP/Forms/UserForm.class.php:112
+msgid "Las claves no coinciden"
+msgstr "The passwords do not match"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:681
+msgid "Error al realizar la exportación"
+msgstr "Error while exporting"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:686
+msgid "Proceso de exportación finalizado"
+msgstr "Export process finished"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:322
+#: ../../../../inc/SP/Core/Acl.class.php:217
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:233
+msgid "Encriptación"
+msgstr "Encryption"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:367
+msgid "Último backup"
+msgstr "Last backup"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:367
+msgid "No se encontraron backups"
+msgstr "There aren't backups available"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:378
+msgid "Última exportación"
+msgstr "Last export"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:378
+msgid "No se encontró archivo de exportación"
+msgstr "No export file found"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:380
+#: ../../../../inc/SP/Core/Acl.class.php:218
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:7
+msgid "Copia de Seguridad"
+msgstr "Backup"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:402
+#: ../../../../inc/SP/Import/Import.class.php:66
+#: ../../../../inc/SP/Import/ImportBase.class.php:77
+msgid "Importar Cuentas"
+msgstr "Import Accounts"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:425
+msgid "No instalado"
+msgstr "Not installed"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:427
+#: ../../../../inc/SP/Controller/MainController.class.php:582
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:77
+msgid "Información"
+msgstr "Information"
+
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:275
msgid "Opción no disponible"
msgstr "Option unavailable"
-#: ../../../../inc/Controller.class.php:165
-#: ../../../../inc/Controller.class.php:166
-#: ../../../../inc/Controller.class.php:167
-#: ../../../../inc/Controller.class.php:168 ../../../../inc/Init.class.php:282
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:275
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:276
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:277
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:278
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:280
+#: ../../../../inc/SP/Core/Init.class.php:293
msgid "Consulte con el administrador"
msgstr "Please contact to the administrator"
-#: ../../../../inc/Controller.class.php:167
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:276
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:505
+msgid "No tiene permisos para acceder a esta cuenta"
+msgstr "You don't have permission to access to this account"
+
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:277
msgid "No tiene permisos para acceder a esta página"
msgstr "You don't have permission to access this page"
-#: ../../../../inc/Controller.class.php:168
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:278
msgid "No tiene permisos para realizar esta operación"
msgstr "You don't have permission to do this operation"
-#: ../../../../inc/Crypt.class.php:125 ../../../../inc/Email.class.php:148
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:280
+msgid "Se ha producido una excepción"
+msgstr "An exception occured"
+
+#: ../../../../inc/SP/Controller/EventlogController.class.php:102
+msgid "Vaciar Eventos"
+msgstr "Clear Events"
+
+#: ../../../../inc/SP/Controller/EventlogController.class.php:102
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:144
+msgid "Vaciar registro de eventos"
+msgstr "Clear event log"
+
+#: ../../../../inc/SP/Controller/EventlogController.class.php:104
+msgid "Registro de eventos vaciado"
+msgstr "Event log cleared"
+
+#: ../../../../inc/SP/Controller/EventlogController.class.php:125
+msgid "Buscar Evento"
+msgstr "Search for Events"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:57
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:131
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:593
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:57
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1104
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:37
+#: ../../../../inc/themes/material-blue/views/itemshow/categories.inc:28
+#: ../../../../inc/themes/material-blue/views/itemshow/customers.inc:32
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:31
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:77
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:83
+msgid "Descripción"
+msgstr "Description"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:72
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:91
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:161
+msgid "Categorías"
+msgstr "Categories"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:80
+msgid "Buscar Categoría"
+msgstr "Search for Category"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:90
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:91
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:188
+#: ../../../../inc/themes/material-blue/views/account/account.inc:89
+msgid "Nueva Categoría"
+msgstr "New Category"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:101
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:102
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:184
+#: ../../../../inc/SP/Core/Acl.class.php:199
+msgid "Editar Categoría"
+msgstr "Edit Category"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:146
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:92
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:168
+msgid "Clientes"
+msgstr "Customers"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:154
+msgid "Buscar Cliente"
+msgstr "Search for Customer"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:164
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:165
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:175
+#: ../../../../inc/themes/material-blue/views/account/account.inc:66
+msgid "Nuevo Cliente"
+msgstr "New Customer"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:175
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:176
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:171
+#: ../../../../inc/SP/Core/Acl.class.php:204
+msgid "Editar Cliente"
+msgstr "Edit Customer"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:204
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:44
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:46
+msgid "Módulo"
+msgstr "Module"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:222
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:69
+#: ../../../../inc/themes/material-blue/views/account/account.inc:256
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:175
+msgid "Campos Personalizados"
+msgstr "Custom Fields"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:230
+msgid "Buscar Campo"
+msgstr "Search for Field"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:240
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:241
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:205
+msgid "Nuevo Campo"
+msgstr "New Field"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:251
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:252
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:209
+msgid "Editar Campo"
+msgstr "Edit Field"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:261
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:262
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:687
+msgid "Eliminar Campo"
+msgstr "Delete Field"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:302
+#: ../../../../inc/SP/Core/Acl.class.php:193
+#: ../../../../inc/themes/material-blue/views/account/files.inc:5
+#: ../../../../inc/themes/material-blue/views/account/files.inc:15
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:208
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:89
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:203
+msgid "Archivos"
+msgstr "Files"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:310
+msgid "Buscar Archivo"
+msgstr "Search for File"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:320
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:321
+#: ../../../../inc/themes/material-blue/views/account/files-list.inc:40
+msgid "Ver Archivo"
+msgstr "View File"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:330
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:331
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:830
+#: ../../../../inc/themes/material-blue/views/account/files-list.inc:26
+msgid "Eliminar Archivo"
+msgstr "Delete File"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:373
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:434
+msgid "Buscar Cuenta"
+msgstr "Search for Account"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:404
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:54
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:65
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:85
+#: ../../../../inc/themes/material-blue/views/account/account.inc:156
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:64
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:71
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:24
+msgid "Fecha"
+msgstr "Date"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:405
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:985
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:58
+msgid "Estado"
+msgstr "Status"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:416
+msgid "Modificada"
+msgstr "Modified"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:417
+msgid "Eliminada"
+msgstr "Removed"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:426
+msgid "Cuentas (H)"
+msgstr "Accounts (H)"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:444
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:445
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:942
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1154
+msgid "Restaurar Cuenta"
+msgstr "Account Restore"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:475
+#: ../../../../inc/SP/Controller/LoginController.class.php:252
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:50
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:52
+msgid "Perfil"
+msgstr "Profile"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:477
+msgid "Propiedades"
+msgstr "Properties"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:498
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:93
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:24
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:44
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:46
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:49
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:140
+msgid "Usuarios"
+msgstr "Users"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:506
+msgid "Buscar Usuario"
+msgstr "Search for User"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:515
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:516
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:136
+msgid "Nuevo Usuario"
+msgstr "New User"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:529
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:530
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1014
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:292
+msgid "Importar usuarios de LDAP"
+msgstr "Import users from LDAP"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:542
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:543
+msgid "Ver Detalles de Usuario"
+msgstr "View User Details"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:552
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:553
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:128
+msgid "Editar Usuario"
+msgstr "Edit User"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:562
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:563
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:20
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:46
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:52
+msgid "Cambiar Clave de Usuario"
+msgstr "Change User's Password"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:573
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:574
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:269
+msgid "Eliminar Usuario"
+msgstr "Delete User"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:608
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:94
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:46
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:147
+msgid "Grupos"
+msgstr "Groups"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:616
+msgid "Buscar Grupo"
+msgstr "Search for Group"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:626
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:627
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:149
+msgid "Nuevo Grupo"
+msgstr "New Group"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:637
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:638
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:145
+msgid "Editar Grupo"
+msgstr "Edit Group"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:647
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:648
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:399
+msgid "Eliminar Grupo"
+msgstr "Delete Group"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:680
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:154
+msgid "Perfiles"
+msgstr "Profiles"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:688
+msgid "Buscar Perfil"
+msgstr "Search for Profile"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:698
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:699
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:162
+msgid "Nuevo Perfil"
+msgstr "New Profile"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:709
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:710
+msgid "Ver Detalles de Perfil"
+msgstr "View Profile Details"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:719
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:720
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:158
+msgid "Editar Perfil"
+msgstr "Edit Profile"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:729
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:730
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:459
+msgid "Eliminar Perfil"
+msgstr "Delete Profile"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:749
+#: ../../../../inc/SP/Log/Email.class.php:63
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:26
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:28
+msgid "Acción"
+msgstr "Action"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:764
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:182
+msgid "Autorizaciones API"
+msgstr "API Authorizations"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:772
+msgid "Buscar Token"
+msgstr "Search for Token"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:782
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:783
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:197
+msgid "Nueva Autorización"
+msgstr "New Authorization"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:793
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:794
+msgid "Ver token de Autorización"
+msgstr "View Authorization token"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:803
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:804
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:201
+msgid "Editar Autorización"
+msgstr "Edit Authorization"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:813
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:814
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:639
+msgid "Eliminar Autorización"
+msgstr "Delete Authorization"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:833
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:19
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:21
+msgid "Fecha Creación"
+msgstr "Creation Date"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:834
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:27
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:29
+msgid "Fecha Caducidad"
+msgstr "Expiry Date "
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:836
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:43
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:45
+msgid "Notificar"
+msgstr "Notify"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:837
+#: ../../../../inc/themes/material-blue/views/account/details.inc:18
+#: ../../../../inc/themes/material-blue/views/account/details.inc:20
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:51
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:53
+msgid "Visitas"
+msgstr "Visits"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:856
+msgid "Enlaces"
+msgstr "Links"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:864
+msgid "Buscar Enlace"
+msgstr "Search for Link"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:874
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:875
+msgid "Ver Enlace"
+msgstr "View Link"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:883
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:884
+msgid "Renovar Enlace"
+msgstr "Renew Link"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:893
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:894
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:748
+msgid "Eliminar Enlace"
+msgstr "Delete Link"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:926
+#: ../../../../inc/themes/material-blue/views/account/account.inc:176
+#: ../../../../inc/themes/material-blue/views/account/account.inc:178
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:210
+msgid "Etiquetas"
+msgstr "Tags"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:934
+msgid "Buscar Etiqueta"
+msgstr "Search for Tag"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:944
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:945
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:218
+msgid "Nueva Etiqueta"
+msgstr "New Tag"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:955
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:956
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:222
+msgid "Editar Etiqueta"
+msgstr "Edit Tag"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:965
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:966
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:797
+msgid "Eliminar Etiqueta"
+msgstr "Delete Tag"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:984
+msgid "Plugin"
+msgstr "Plugin"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1001
+msgid "Plugins"
+msgstr "Plugins"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1009
+msgid "Buscar Plugin"
+msgstr "Search for Plugin"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1019
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1020
+msgid "Ver Plugin"
+msgstr "View Plugin"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1028
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1029
+msgid "Habilitar"
+msgstr "Enable"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1038
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1039
+msgid "Deshabilitar"
+msgstr "Disable"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1048
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1049
+msgid "Restablecer Datos"
+msgstr "Reset Data"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:56
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:51
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:58
+msgid "Componente"
+msgstr "Component"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:67
+msgid "Leída"
+msgstr "Read"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:76
+#: ../../../../inc/SP/Controller/MainController.class.php:306
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:79
+msgid "Notificaciones"
+msgstr "Notifications"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:84
+msgid "Buscar Notificación"
+msgstr "Search for Notification"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:95
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:96
+#: ../../../../inc/SP/Controller/NoticeShowController.class.php:94
+msgid "Nueva Notificación"
+msgstr "New Notification"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:107
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:108
+#: ../../../../inc/SP/Controller/NoticeShowController.class.php:89
+msgid "Ver Notificación"
+msgstr "View Notification"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:116
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:117
+msgid "Marcar Notificación"
+msgstr "Checkout Notification"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:126
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:127
+#: ../../../../inc/SP/Controller/NoticeShowController.class.php:98
+msgid "Editar Notificación"
+msgstr "Edit Notification"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:136
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:137
+msgid "Eliminar Notificación"
+msgstr "Delete Notification"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:228
+msgid "Crear Usuario"
+msgstr "Add User"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:229
+msgid "Usuario creado"
+msgstr "User added"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:236
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:251
+msgid "No se pudo realizar la petición de cambio de clave."
+msgstr "Could not perform the password change request."
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:243
+msgid "Actualizar Usuario"
+msgstr "Update User"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:244
+#: ../../../../inc/SP/Mgmt/Users/UserMigrate.class.php:105
+msgid "Usuario actualizado"
+msgstr "User updated"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:258
+msgid "Usuarios eliminados"
+msgstr "Users deleted"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:264
+msgid "Usuario eliminado"
+msgstr "User deleted"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:281
+msgid "Actualizar Clave Usuario"
+msgstr "Update User's Password"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:372
+msgid "Crear Grupo"
+msgstr "Add Group"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:373
+msgid "Grupo creado"
+msgstr "Group added"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:380
+msgid "Actualizar Grupo"
+msgstr "Update Group"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:381
+msgid "Grupo actualizado"
+msgstr "Group updated"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:388
+msgid "Grupos eliminados"
+msgstr "Groups deleted"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:394
+msgid "Grupo eliminado"
+msgstr "Group deleted"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:432
+msgid "Crear Perfil"
+msgstr "Add Profile"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:433
+msgid "Perfil creado"
+msgstr "Profile added"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:440
+msgid "Actualizar Perfil"
+msgstr "Update Profile"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:441
+msgid "Perfil actualizado"
+msgstr "Profile updated"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:448
+msgid "Perfiles eliminados"
+msgstr "Profiles deleted"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:454
+msgid "Perfil eliminado"
+msgstr "Profile deleted"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:502
+msgid "Actualizar Cliente"
+msgstr "Update Customer"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:503
+msgid "Cliente actualizado"
+msgstr "Customer updated"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:510
+msgid "Clientes eliminados"
+msgstr "Customers deleted"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:564
+msgid "Actualizar Categoría"
+msgstr "Update Category"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:565
+msgid "Categoría actualizada"
+msgstr "Category updated"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:573
+msgid "Categorías eliminadas"
+msgstr "Categories deleted"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:614
+msgid "Crear Autorización"
+msgstr "Add Authorization"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:615
+msgid "Autorización creada"
+msgstr "Authorization added"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:622
+msgid "Actualizar Autorización"
+msgstr "Update Authorization"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:623
+msgid "Autorización actualizada"
+msgstr "Authorization updated"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:632
+msgid "Autorizaciones eliminadas"
+msgstr "Authorizations deleted"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:636
+msgid "Autorización eliminada"
+msgstr "Authorization deleted"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:665
+msgid "Crear Campo"
+msgstr "Add Field"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:666
+msgid "Campo creado"
+msgstr "Field added"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:672
+msgid "Actualizar Campo"
+msgstr "Update Field"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:673
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:216
+msgid "Campo actualizado"
+msgstr "Field updated"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:680
+msgid "Campos eliminados"
+msgstr "Fields deleted"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:684
+msgid "Campo eliminado"
+msgstr "Field deleted"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:716
+msgid "Crear Enlace"
+msgstr "Add Link"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:717
+msgid "Enlace creado"
+msgstr "Link created"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:726
+msgid "Actualizar Enlace"
+msgstr "Update Link"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:727
+msgid "Enlace actualizado"
+msgstr "Link updated"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:736
+msgid "Enlaces eliminados"
+msgstr "Links deleted"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:742
+msgid "Enlace eliminado"
+msgstr "Link deleted"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:773
+msgid "Crear Etiqueta"
+msgstr "Add Tag"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:774
+#: ../../../../inc/SP/Import/ImportBase.class.php:205
+msgid "Etiqueta creada"
+msgstr "Tag added"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:780
+msgid "Actualizar Etiqueta"
+msgstr "Update Tag"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:781
+msgid "Etiqueta actualizada"
+msgstr "Tag updated"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:788
+msgid "Etiquetas eliminadas"
+msgstr "Tags deleted"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:794
+msgid "Etiqueta eliminada"
+msgstr "Tag removed"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:821
+msgid "Archivos eliminados"
+msgstr "Files deleted"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:860
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:868
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:875
+msgid "Actualizar Plugin"
+msgstr "Update Plugin"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:861
+msgid "Plugin habilitado"
+msgstr "Plugin enabled"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:869
+msgid "Plugin deshabilitado"
+msgstr "Plugin disabled"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:876
+msgid "Plugin restablecido"
+msgstr "Plugin reset"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:924
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:933
+msgid "Actualizar Cuenta"
+msgstr "Update Account"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:925
+msgid "Cuenta actualizada"
+msgstr "Account updated"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:943
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1155
+msgid "Cuenta restaurada"
+msgstr "Account restored"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:964
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1174
+msgid "Cuentas eliminadas"
+msgstr "Accounts removed"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:995
+msgid "Favorito añadido"
+msgstr "Favorite added"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1000
+msgid "Favorito eliminado"
+msgstr "Favorite deleted"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1017
+msgid "Importación de usuarios de LDAP realizada"
+msgstr "LDAP users import finished"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1018
+msgid "Usuarios importados"
+msgstr "Imported users"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1023
+msgid "Error al importar usuarios de LDAP"
+msgstr "Error while importing LDAP users"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1041
+msgid "Notificación leída"
+msgstr "Notification read"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1049
+msgid "Notificación creada"
+msgstr "Notification created"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1057
+msgid "Notificación actualizada"
+msgstr "Notification updated"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1063
+msgid "Notificaciones eliminadas"
+msgstr "Notifications deleted"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1067
+msgid "Notificación eliminada"
+msgstr "Notification deleted"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1085
+#: ../../../../inc/SP/Forms/NoticeForm.class.php:95
+msgid "Es necesaria una descripción"
+msgstr "A description is needed"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1100
+msgid "Solicitud de Modificación de Cuenta"
+msgstr "Request for Account Modification"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1101
+msgid "Solicitante"
+msgstr "Requester"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1119
+msgid "Solicitud enviada por correo"
+msgstr "Request sent by email"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1121
+msgid "Solicitud no enviada por correo"
+msgstr "Request not sent by email"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1130
+msgid "Solicitud"
+msgstr "Request"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1137
+msgid "Solicitud realizada"
+msgstr "Request done"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1171
+msgid "Eliminar Cuenta (H)"
+msgstr "Delete Account (H)"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:123
+msgid "Ver Usuario"
+msgstr "View User"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:140
+msgid "Ver Grupo"
+msgstr "View Group"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:153
+msgid "Ver Perfil"
+msgstr "View Profile"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:166
+msgid "Ver Cliente"
+msgstr "View Customer"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:179
+msgid "Ver Categoría"
+msgstr "View Category"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:192
+msgid "Ver Autorización"
+msgstr "View Authorization"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:213
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:73
+msgid "Ver Enlace Público"
+msgstr "View Public Link"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:226
+#: ../../../../js/strings.js.php:72
+msgid "Clave de Cuenta"
+msgstr "Account Password"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:230
+msgid "Detalles de Plugin"
+msgstr "Plugin Details"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:401
+msgid "Token de autorización visualizado"
+msgstr "Authorization token viewed"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:402
+msgid "Autorizaciones"
+msgstr "Authorizations"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:495
+msgid "La clave maestra no coincide"
+msgstr "The Master Password does not match"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:93
+msgid "Inicio sesión"
+msgstr "Log in"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:109
+msgid "Usuario/Clave no introducidos"
+msgstr "User/Pass not entered"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:132
+#: ../../../../inc/SP/Controller/LoginController.class.php:348
+#: ../../../../inc/SP/Controller/LoginController.class.php:402
+#: ../../../../inc/SP/Controller/LoginController.class.php:424
+msgid "Login incorrecto"
+msgstr "Incorrect login"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:180
+msgid "Error al obtener los datos del usuario de la BBDD"
+msgstr "Error while retrieving user data from DB"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:195
+#: ../../../../inc/SP/Controller/LoginController.class.php:198
+msgid "Usuario deshabilitado"
+msgstr "User disabled"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:255
+msgid "Error al obtener la clave maestra del usuario"
+msgstr "Error while retrieving user's Master Pass"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:276
+msgid "Usando clave temporal"
+msgstr "Using temporary password"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:282
+#: ../../../../inc/SP/Controller/LoginController.class.php:284
+#: ../../../../inc/SP/Controller/LoginController.class.php:292
+#: ../../../../inc/SP/Controller/LoginController.class.php:294
+msgid "Clave maestra incorrecta"
+msgstr "Invalid Master Password"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:305
+msgid "Es necesaria su clave anterior"
+msgstr "Your previous password is needed"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:308
+msgid "La clave maestra no ha sido guardada o es incorrecta"
+msgstr "The Master Password is not saved or is wrong"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:352
+msgid "Cuenta expirada"
+msgstr "Account expired"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:356
+msgid "El usuario no tiene grupos asociados"
+msgstr "The user has no associated groups"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:370
+msgid "Servidor LDAP"
+msgstr "LDAP Server"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:427
+msgid "Autentificación"
+msgstr "Authentication"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:248
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:72
+msgid "Buscar"
+msgstr "Search"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:267
+msgid "Usuarios y Accesos"
+msgstr "Users and Accesses"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:277
+msgid "Elementos y Personalización"
+msgstr "Items and Customizations"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:297
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:7
+msgid "Registro de Eventos"
+msgstr "Event Log"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:357
+#: ../../../../inc/SP/Core/Init.class.php:131
+msgid "Versión de PHP requerida >= "
+msgstr "Required PHP version >="
+
+#: ../../../../inc/SP/Controller/MainController.class.php:358
+#: ../../../../inc/SP/Core/Init.class.php:132
+msgid ""
+"Actualice la versión de PHP para que la aplicación funcione correctamente"
+msgstr "Please update the PHP version to run sysPass"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:368
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:265
+msgid "Módulo no disponible"
+msgstr "Module unavailable"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:369
+msgid "Sin este módulo la aplicación puede no funcionar correctamente."
+msgstr "Without this module the application could not run correctly"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:377
+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/SP/Controller/MainController.class.php:378
+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/SP/Controller/MainController.class.php:384
+msgid "No se encuentra el generador de números aleatorios."
+msgstr "Cannot find random number generator."
+
+#: ../../../../inc/SP/Controller/MainController.class.php:385
+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/SP/Controller/MainController.class.php:457
+msgid "Descargar nueva versión"
+msgstr "Download new version"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:469
+msgid "Avisos de sysPass"
+msgstr "sysPass Notices"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:572
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:74
+msgid "Enlace visualizado"
+msgstr "Link viewed"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:575
+msgid "Agente"
+msgstr "Agent"
+
+#: ../../../../inc/SP/Controller/UserPreferencesController.class.php:90
+msgid "Preferencias"
+msgstr "Preferences"
+
+#: ../../../../inc/SP/Core/Acl.class.php:166
+msgid "Acceso denegado"
+msgstr "Access denied"
+
+#: ../../../../inc/SP/Core/Acl.class.php:184
+msgid "Buscar Cuentas"
+msgstr "Search Accounts"
+
+#: ../../../../inc/SP/Core/Acl.class.php:185
+msgid "Ver Cuenta"
+msgstr "View Account"
+
+#: ../../../../inc/SP/Core/Acl.class.php:189
+msgid "Editar Clave de Cuenta"
+msgstr "Edit Account Password"
+
+#: ../../../../inc/SP/Core/Acl.class.php:190
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:61
+msgid "Ver Historial"
+msgstr "View History"
+
+#: ../../../../inc/SP/Core/Acl.class.php:194
+msgid "Peticiones"
+msgstr "Requests"
+
+#: ../../../../inc/SP/Core/Acl.class.php:195
+msgid "Gestión Aplicación"
+msgstr "Application Management"
+
+#: ../../../../inc/SP/Core/Acl.class.php:196
+msgid "Gestión Categorías"
+msgstr "Categories Management"
+
+#: ../../../../inc/SP/Core/Acl.class.php:197
+msgid "Buscar Categorías"
+msgstr "Search for Categories"
+
+#: ../../../../inc/SP/Core/Acl.class.php:198
+msgid "Añadir Categoría"
+msgstr "Add Category"
+
+#: ../../../../inc/SP/Core/Acl.class.php:201
+msgid "Gestión Clientes"
+msgstr "Customers Management"
+
+#: ../../../../inc/SP/Core/Acl.class.php:202
+msgid "Buscar Clientes"
+msgstr "Search for Customers"
+
+#: ../../../../inc/SP/Core/Acl.class.php:203
+msgid "Añadir Cliente"
+msgstr "Add Customer"
+
+#: ../../../../inc/SP/Core/Acl.class.php:206
+msgid "Gestión Campos Personalizados"
+msgstr "Custom Fields Management"
+
+#: ../../../../inc/SP/Core/Acl.class.php:207
+msgid "Gestión Autorizaciones API"
+msgstr "API Authorizations Management"
+
+#: ../../../../inc/SP/Core/Acl.class.php:208
+msgid "Gestión de Archivos"
+msgstr "Files Management"
+
+#: ../../../../inc/SP/Core/Acl.class.php:209
+msgid "Gestión de Cuentas"
+msgstr "Accounts Management"
+
+#: ../../../../inc/SP/Core/Acl.class.php:210
+msgid "Gestión de Etiquetas"
+msgstr "Tags Management"
+
+#: ../../../../inc/SP/Core/Acl.class.php:211
+#: ../../../../inc/SP/Core/Acl.class.php:212
+msgid "Gestión Usuarios"
+msgstr "Users Management"
+
+#: ../../../../inc/SP/Core/Acl.class.php:213
+msgid "Gestión Grupos"
+msgstr "Groups Management"
+
+#: ../../../../inc/SP/Core/Acl.class.php:214
+msgid "Gestión Perfiles"
+msgstr "Profiles Management"
+
+#: ../../../../inc/SP/Core/Acl.class.php:216
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:226
+msgid "Configuración General"
+msgstr "General Configuration"
+
+#: ../../../../inc/SP/Core/Acl.class.php:219
+msgid "Exportar"
+msgstr "Export"
+
+#: ../../../../inc/SP/Core/Acl.class.php:220
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:247
+msgid "Importar"
+msgstr "Import"
+
+#: ../../../../inc/SP/Core/Acl.class.php:221
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:263
+msgid "Log de Eventos"
+msgstr "Event Log"
+
+#: ../../../../inc/SP/Core/Backup.class.php:55
+msgid "Realizar Backup"
+msgstr "Make Backup"
+
+#: ../../../../inc/SP/Core/Backup.class.php:84
+msgid "Copia de la aplicación y base de datos realizada correctamente"
+msgstr "Application and database backup completed successfully"
+
+#: ../../../../inc/SP/Core/Backup.class.php:102
+#: ../../../../inc/SP/Core/XmlExport.class.php:515
+#, php-format
+msgid "No es posible crear el directorio de backups (\"%s\")"
+msgstr "Unable to create the backups directory (\"%s\")"
+
+#: ../../../../inc/SP/Core/Backup.class.php:106
+#: ../../../../inc/SP/Core/XmlExport.class.php:521
+msgid "Compruebe los permisos del directorio de backups"
+msgstr "Check backup directory permissions"
+
+#: ../../../../inc/SP/Core/Backup.class.php:249
+msgid "Esta operación sólo es posible en entornos Linux"
+msgstr "This operation is only available on Linux environments"
+
+#: ../../../../inc/SP/Core/Backup.class.php:251
+msgid "Error al realizar backup en modo compatibilidad"
+msgstr "Error while doing backup in compatibility mode"
+
+#: ../../../../inc/SP/Core/Crypt.class.php:65
+#: ../../../../inc/SP/Core/Crypt.class.php:74
+#: ../../../../inc/SP/Log/Email.class.php:141
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:70
+#: ../../../../js/strings.js.php:85
msgid "Aviso"
msgstr "Warning"
-#: ../../../../inc/Crypt.class.php:125
+#: ../../../../inc/SP/Core/Crypt.class.php:65
+#: ../../../../inc/SP/Core/Crypt.class.php:74
msgid ""
"Se ha regenerado el HASH de clave maestra. No es necesaria ninguna acción."
msgstr ""
"The Master Password HASH has been regenerated. No further action is needed."
-#: ../../../../inc/Crypt.class.php:189
+#: ../../../../inc/SP/Core/Crypt.class.php:213
msgid "No se puede usar el módulo de encriptación"
msgstr "Crypto module cannot be loaded"
-#: ../../../../inc/Crypt.class.php:200
+#: ../../../../inc/SP/Core/Crypt.class.php:224
msgid "Error al generar datos cifrados"
msgstr "Error while creating encryption data"
-#: ../../../../inc/CryptPKI.class.php:46
+#: ../../../../inc/SP/Core/CryptMasterPass.class.php:93
+#: ../../../../inc/SP/Core/CryptMasterPass.class.php:106
+msgid "Clave temporal caducada"
+msgstr "Temporary password expired"
+
+#: ../../../../inc/SP/Core/CryptPKI.class.php:48
msgid "No es posible generar las claves RSA"
msgstr "Unable to generate the RSA keys"
-#: ../../../../inc/CryptPKI.class.php:112
-#: ../../../../inc/CryptPKI.class.php:143
+#: ../../../../inc/SP/Core/CryptPKI.class.php:116
+#: ../../../../inc/SP/Core/CryptPKI.class.php:118
+#: ../../../../inc/SP/Core/CryptPKI.class.php:151
+#: ../../../../inc/SP/Core/CryptPKI.class.php:153
msgid "El archivo de clave no existe"
msgstr "The key file does not exist"
-#: ../../../../inc/CsvImportBase.class.php:109
-#, php-format
-msgid "El número de campos es incorrecto (%d)"
-msgstr "Wrong number of fields (%d)"
+#: ../../../../inc/SP/Core/Events/EventDispatcherBase.class.php:80
+msgid "Observador no inicializado"
+msgstr "Observer not initialized"
-#: ../../../../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/SP/Core/Events/EventDispatcherBase.class.php:110
+msgid "Es necesario un objeto"
+msgstr "An object is needed"
-#: ../../../../inc/CsvImportBase.class.php:140
-#: ../../../../inc/CsvImportBase.class.php:145
-#: ../../../../inc/Import.class.php:118 ../../../../inc/Import.class.php:124
-#: ../../../../inc/Migrate.class.php:348
-#: ../../../../inc/XmlImport.class.php:62
-#: ../../../../inc/XmlImport.class.php:63
-#: ../../../../web/ConfigC.class.php:199
-msgid "Importar Cuentas"
-msgstr "Import Accounts"
-
-#: ../../../../inc/CsvImportBase.class.php:141
-msgid "Error importando cuenta"
-msgstr "Error while importing account"
-
-#: ../../../../inc/CsvImportBase.class.php:142
-#, php-format
-msgid "Error procesando línea %s"
-msgstr "Error while processing line %s"
-
-#: ../../../../inc/CsvImportBase.class.php:145
-#, php-format
-msgid "Cuenta importada: %s"
-msgstr "Account %s imported"
-
-#: ../../../../inc/CustomFields.class.php:276
-#: ../../../../web/AccountsMgmtC.class.php:301
-#: ../../../../inc/themes/classic/profiles.inc:107
-#: ../../../../inc/themes/material-blue/profiles.inc:124
-msgid "Campos Personalizados"
-msgstr "Custom Fields"
-
-#: ../../../../inc/CustomFields.class.php:291
-msgid "Actualizando datos encriptados"
-msgstr "Updating encrypted data"
-
-#: ../../../../inc/CustomFields.class.php:318
-msgid "Registros no actualizados"
-msgstr "No updated records"
-
-#: ../../../../inc/CustomFieldsBase.class.php:86
-msgid "Texto"
-msgstr "Text"
-
-#: ../../../../inc/CustomFieldsBase.class.php:88
-msgid "Fecha"
-msgstr "Date"
-
-#: ../../../../inc/CustomFieldsBase.class.php:89
-msgid "Número"
-msgstr "Number"
-
-#: ../../../../inc/CustomFieldsBase.class.php:90
-#: ../../../../inc/themes/classic/passreset.inc:22
-#: ../../../../inc/themes/classic/users.inc:61
-#: ../../../../inc/themes/material-blue/users.inc:71
-msgid "Email"
-msgstr "Email"
-
-#: ../../../../inc/CustomFieldsBase.class.php:91
-msgid "Teléfono"
-msgstr "Phone"
-
-#: ../../../../inc/CustomFieldsBase.class.php:92
-msgid "Link"
-msgstr "Link"
-
-#: ../../../../inc/CustomFieldsBase.class.php:93
-msgid "Color"
-msgstr "Color"
-
-#: ../../../../inc/CustomFieldsBase.class.php:107
-#: ../../../../inc/themes/classic/profiles.inc:98
-#: ../../../../inc/themes/material-blue/profiles.inc:114
-msgid "Categorías"
-msgstr "Categories"
-
-#: ../../../../inc/CustomFieldsBase.class.php:108
-#: ../../../../inc/themes/classic/profiles.inc:103
-#: ../../../../inc/themes/material-blue/profiles.inc:119
-msgid "Clientes"
-msgstr "Customers"
-
-#: ../../../../inc/CustomFieldsBase.class.php:110
-#: ../../../../inc/themes/classic/account.inc:143
-#: ../../../../inc/themes/classic/profiles.inc:89
-#: ../../../../inc/themes/material-blue/account.inc:170
-#: ../../../../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 "Duplicate customer"
-
-#: ../../../../inc/Customer.class.php:60
-msgid "Error al crear el cliente"
-msgstr "Error while creating customer"
-
-#: ../../../../inc/Customer.class.php:112
-msgid "Error al actualizar el cliente"
-msgstr "Error while 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:160
-msgid "Eliminar Cliente"
-msgstr "Delete Customer"
-
-#: ../../../../inc/DBConnectionFactory.class.php:83
-#: ../../../../inc/DBConnectionFactory.class.php:85
-#: ../../../../inc/DBConnectionFactory.class.php:99
-#: ../../../../inc/Installer.class.php:235
-#: ../../../../inc/Migrate.class.php:114
-msgid "No es posible conectar con la BD"
-msgstr "Unable to connect to the DB"
-
-#: ../../../../inc/DBConnectionFactory.class.php:83
-#: ../../../../inc/DBConnectionFactory.class.php:85
-#: ../../../../inc/Installer.class.php:236
-#: ../../../../inc/Migrate.class.php:115
-msgid "Compruebe los datos de conexión"
-msgstr "Please, check connection parameters"
-
-#: ../../../../inc/Email.class.php:59 ../../../../inc/UserUtil.class.php:182
-msgid "N/D"
-msgstr "N/A"
-
-#: ../../../../inc/Email.class.php:60 ../../../../web/UsersMgmtC.class.php:393
-#: ../../../../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 while sending email"
-
-#: ../../../../inc/Email.class.php:87
-msgid "Destinatario"
-msgstr "Recipient"
-
-#: ../../../../inc/Email.class.php:90
-msgid "CC"
-msgstr "CC"
-
-#: ../../../../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:210
-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:91
-msgid "Importación finalizada"
-msgstr "Import finished"
-
-#: ../../../../inc/Init.class.php:182
+#: ../../../../inc/SP/Core/Init.class.php:159
msgid "Error en la verificación de la base de datos"
msgstr "Error while checking database"
-#: ../../../../inc/Init.class.php:278
-msgid "Sesion"
+#: ../../../../inc/SP/Core/Init.class.php:289
+msgid "Sesión"
msgstr "Session"
-#: ../../../../inc/Init.class.php:278 ../../../../inc/Init.class.php:282
+#: ../../../../inc/SP/Core/Init.class.php:289
+#: ../../../../inc/SP/Core/Init.class.php:293
msgid "La sesión no puede ser inicializada"
msgstr "Session cannot be initialized"
-#: ../../../../inc/Init.class.php:366
+#: ../../../../inc/SP/Core/Init.class.php:427
+#: ../../../../inc/SP/Core/Init.class.php:667
+msgid "Actualización"
+msgstr "Update"
+
+#: ../../../../inc/SP/Core/Init.class.php:428
+#: ../../../../inc/SP/Core/Init.class.php:668 ../../../../res/upgrade.php:121
+msgid "Actualización de versión realizada."
+msgstr "Version updating done."
+
+#: ../../../../inc/SP/Core/Init.class.php:450
msgid "El directorio \"/config\" no existe"
msgstr "The \"/config\" directory does not exist."
-#: ../../../../inc/Init.class.php:371
+#: ../../../../inc/SP/Core/Init.class.php:455
msgid "No es posible escribir en el directorio \"config\""
msgstr "Unable to write into the \"/config\" directory"
-#: ../../../../inc/Init.class.php:379
+#: ../../../../inc/SP/Core/Init.class.php:462
msgid "Los permisos del directorio \"/config\" son incorrectos"
-msgstr "The \"/config\" directory permissions are incorrect"
+msgstr "The \"/config\" directory permissions are wrong"
-#: ../../../../inc/Init.class.php:379
+#: ../../../../inc/SP/Core/Init.class.php:462
msgid "Actual:"
msgstr "Current:"
-#: ../../../../inc/Init.class.php:379
+#: ../../../../inc/SP/Core/Init.class.php:462
msgid "Necesario: 750"
msgstr "Needed: 750"
-#: ../../../../inc/Init.class.php:428
+#: ../../../../inc/SP/Core/Init.class.php:545
msgid "Aplicación en mantenimiento"
msgstr "Application in maintenance"
-#: ../../../../inc/Init.class.php:428
+#: ../../../../inc/SP/Core/Init.class.php:545
msgid "En breve estará operativa"
msgstr "It will be running shortly"
-#: ../../../../inc/Init.class.php:465
+#: ../../../../inc/SP/Core/Init.class.php:590
msgid "Finalizar sesión"
msgstr "Logout session"
-#: ../../../../inc/Init.class.php:467
+#: ../../../../inc/SP/Core/Init.class.php:592
msgid "Tiempo inactivo"
msgstr "Inactive time"
-#: ../../../../inc/Init.class.php:468
+#: ../../../../inc/SP/Core/Init.class.php:593
msgid "Tiempo total"
msgstr "Total time"
-#: ../../../../inc/Init.class.php:507
+#: ../../../../inc/SP/Core/Init.class.php:636
msgid "La aplicación necesita actualizarse"
msgstr "The application needs to be updated"
-#: ../../../../inc/Init.class.php:507
+#: ../../../../inc/SP/Core/Init.class.php:636
#, 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:507
-#: ../../../../inc/themes/classic/upgrade.inc:20
-#: ../../../../inc/themes/material-blue/upgrade.inc:22
+#: ../../../../inc/SP/Core/Init.class.php:636
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:57
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:48
msgid "Actualizar"
msgstr "Update"
-#: ../../../../inc/Init.class.php:538
-msgid "Actualización"
-msgstr "Update"
+#: ../../../../inc/SP/Core/Init.class.php:654
+#: ../../../../inc/themes/material-blue/views/main/login.inc:65
+msgid "Acceder"
+msgstr "Sign in"
-#: ../../../../inc/Init.class.php:539
-msgid "Actualización de versión realizada."
-msgstr "Version updating done."
-
-#: ../../../../inc/Init.class.php:540
-#: ../../../../inc/themes/classic/info.inc:33
-#: ../../../../inc/themes/material-blue/info.inc:33
-msgid "Versión"
-msgstr "Version"
-
-#: ../../../../inc/Installer.class.php:127
+#: ../../../../inc/SP/Core/Installer.class.php:138
msgid "Indicar nombre de usuario admin"
msgstr "Enter the admin username"
-#: ../../../../inc/Installer.class.php:128
+#: ../../../../inc/SP/Core/Installer.class.php:139
msgid "Usuario admin para acceso a la aplicación"
msgstr "Admin user to login to the application"
-#: ../../../../inc/Installer.class.php:132
+#: ../../../../inc/SP/Core/Installer.class.php:143
msgid "Indicar la clave de admin"
msgstr "Enter the admin's password"
-#: ../../../../inc/Installer.class.php:133
+#: ../../../../inc/SP/Core/Installer.class.php:144
msgid "Clave del usuario admin de la aplicación"
msgstr "Application administrator's password"
-#: ../../../../inc/Installer.class.php:137
+#: ../../../../inc/SP/Core/Installer.class.php:148
msgid "Indicar la clave maestra"
msgstr "Enter the Master Password"
-#: ../../../../inc/Installer.class.php:138
+#: ../../../../inc/SP/Core/Installer.class.php:149
msgid "Clave maestra para encriptar las claves"
msgstr "Master Password to encrypt the passwords"
-#: ../../../../inc/Installer.class.php:142
+#: ../../../../inc/SP/Core/Installer.class.php:153
msgid "Clave maestra muy corta"
msgstr "Master Password too short"
-#: ../../../../inc/Installer.class.php:143
+#: ../../../../inc/SP/Core/Installer.class.php:154
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:147
+#: ../../../../inc/SP/Core/Installer.class.php:158
msgid "Indicar el usuario de la BBDD"
msgstr "Enter the database user"
-#: ../../../../inc/Installer.class.php:148
+#: ../../../../inc/SP/Core/Installer.class.php:159
msgid "Usuario con permisos de administrador de la Base de Datos"
msgstr "An user with database administrative rights"
-#: ../../../../inc/Installer.class.php:152
+#: ../../../../inc/SP/Core/Installer.class.php:163
msgid "Indicar la clave de la BBDD"
msgstr "Enter the database password"
-#: ../../../../inc/Installer.class.php:153
+#: ../../../../inc/SP/Core/Installer.class.php:164
msgid "Clave del usuario administrador de la Base de Datos"
msgstr "Database administrator's password"
-#: ../../../../inc/Installer.class.php:157
+#: ../../../../inc/SP/Core/Installer.class.php:168
msgid "Indicar el nombre de la BBDD"
msgstr "Enter the database name"
-#: ../../../../inc/Installer.class.php:158
+#: ../../../../inc/SP/Core/Installer.class.php:169
msgid "Nombre para la BBDD de la aplicación pej. syspass"
msgstr "Application database name. eg. syspass"
-#: ../../../../inc/Installer.class.php:162
+#: ../../../../inc/SP/Core/Installer.class.php:173
msgid "El nombre de la BBDD no puede contener \".\""
msgstr "Database name cannot contain \".\""
-#: ../../../../inc/Installer.class.php:163
+#: ../../../../inc/SP/Core/Installer.class.php:174
msgid "Elimine los puntos del nombre de la Base de Datos"
-msgstr "Please remove dots in database name"
+msgstr "Please, remove dots in database name"
-#: ../../../../inc/Installer.class.php:167
+#: ../../../../inc/SP/Core/Installer.class.php:178
msgid "Indicar el servidor de la BBDD"
msgstr "Enter the database server"
-#: ../../../../inc/Installer.class.php:168
+#: ../../../../inc/SP/Core/Installer.class.php:179
msgid "Servidor donde se instalará la Base de Datos"
msgstr "Server where the database will be installed"
-#: ../../../../inc/Installer.class.php:267
+#: ../../../../inc/SP/Core/Installer.class.php:202
+#: ../../../../inc/SP/Storage/MySQLHandler.class.php:133
+#: ../../../../inc/SP/Storage/MySQLHandler.class.php:136
+#: ../../../../inc/SP/Storage/MySQLHandler.class.php:160
+msgid "No es posible conectar con la BD"
+msgstr "Unable to connect to the DB"
+
+#: ../../../../inc/SP/Core/Installer.class.php:203
+#: ../../../../inc/SP/Storage/MySQLHandler.class.php:133
+#: ../../../../inc/SP/Storage/MySQLHandler.class.php:137
+msgid "Compruebe los datos de conexión"
+msgstr "Please, check connection parameters"
+
+#: ../../../../inc/SP/Core/Installer.class.php:237
msgid "No es posible comprobar el usuario de sysPass"
msgstr "Unable to check the sysPass user"
-#: ../../../../inc/Installer.class.php:268
+#: ../../../../inc/SP/Core/Installer.class.php:238
msgid "Compruebe los permisos del usuario de conexión a la BD"
-msgstr "Please check the DB connection user rights"
+msgstr "Please, check the DB connection user rights"
-#: ../../../../inc/Installer.class.php:319
-msgid "El usuario de MySQL ya existe"
-msgstr "The MySQL user already exists"
+#: ../../../../inc/SP/Core/Installer.class.php:284
+#, php-format
+msgid "Error al crear el usuario de conexión a MySQL '%s'"
+msgstr "Error while creating the MySQL connection user '%s'"
-#: ../../../../inc/Installer.class.php:320
-msgid "Indique un nuevo usuario o elimine el existente"
-msgstr "Enter a new username or delete the existing one"
-
-#: ../../../../inc/Installer.class.php:333
+#: ../../../../inc/SP/Core/Installer.class.php:300
msgid "La BBDD ya existe"
msgstr "The database already exists"
-#: ../../../../inc/Installer.class.php:334
+#: ../../../../inc/SP/Core/Installer.class.php:301
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:343
-#: ../../../../inc/Installer.class.php:414
+#: ../../../../inc/SP/Core/Installer.class.php:304
+msgid "La BBDD no existe"
+msgstr "Database does not exist"
+
+#: ../../../../inc/SP/Core/Installer.class.php:305
+msgid "Es necesario crearla y asignar los permisos necesarios"
+msgstr "You need to create it and assign the needed permissions"
+
+#: ../../../../inc/SP/Core/Installer.class.php:315
+#: ../../../../inc/SP/Core/Installer.class.php:416
msgid "Error al crear la BBDD"
msgstr "Error while creating DB"
-#: ../../../../inc/Installer.class.php:344
-#: ../../../../inc/Installer.class.php:355
+#: ../../../../inc/SP/Core/Installer.class.php:316
+#: ../../../../inc/SP/Core/Installer.class.php:336
msgid "Verifique los permisos del usuario de la Base de Datos"
msgstr "Please check database user permissions"
-#: ../../../../inc/Installer.class.php:354
-msgid "Error al establecer permisos de la BBDD"
-msgstr "Error while setting database permissions"
+#: ../../../../inc/SP/Core/Installer.class.php:335
+#, php-format
+msgid "Error al establecer permisos de la BBDD ('%s')"
+msgstr "Error while setting database permissions ('%s')"
-#: ../../../../inc/Installer.class.php:387
+#: ../../../../inc/SP/Core/Installer.class.php:389
msgid "El archivo de estructura de la BBDD no existe"
msgstr "The database structure file does not exist"
-#: ../../../../inc/Installer.class.php:388
+#: ../../../../inc/SP/Core/Installer.class.php:390
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:396
+#: ../../../../inc/SP/Core/Installer.class.php:398
msgid "Error al seleccionar la BBDD"
msgstr "Error while selecting database."
-#: ../../../../inc/Installer.class.php:397
+#: ../../../../inc/SP/Core/Installer.class.php:399
msgid ""
"No es posible usar la Base de Datos para crear la estructura. Compruebe los "
"permisos y que no exista."
@@ -2076,1491 +2870,1560 @@ msgstr ""
"Unable to use the database to create the structure. Check permissions and it "
"does not exist."
-#: ../../../../inc/Installer.class.php:415
+#: ../../../../inc/SP/Core/Installer.class.php:417
msgid "Error al crear la estructura de la Base de Datos."
msgstr "Error while creating database structure."
-#: ../../../../inc/Installer.class.php:438
+#: ../../../../inc/SP/Core/Installer.class.php:435
+msgid "Error al comprobar la base de datos"
+msgstr "Error while checking the database"
+
+#: ../../../../inc/SP/Core/Installer.class.php:436
+msgid "Intente de nuevo la instalación"
+msgstr "Please, try the installation again"
+
+#: ../../../../inc/SP/Core/Installer.class.php:458
msgid "Error al crear el grupo \"admin\""
msgstr "Error while creating \"admin\" group"
-#: ../../../../inc/Installer.class.php:439
-#: ../../../../inc/Installer.class.php:472
-#: ../../../../inc/Installer.class.php:489
-#: ../../../../inc/Installer.class.php:502
+#: ../../../../inc/SP/Core/Installer.class.php:459
+#: ../../../../inc/SP/Core/Installer.class.php:471
+#: ../../../../inc/SP/Core/Installer.class.php:489
+#: ../../../../inc/SP/Core/Installer.class.php:502
msgid "Informe al desarrollador"
msgstr "Warn to developer"
-#: ../../../../inc/Installer.class.php:471
+#: ../../../../inc/SP/Core/Installer.class.php:470
msgid "Error al crear el perfil \"admin\""
msgstr "Error while creating \"admin\" profile"
-#: ../../../../inc/Installer.class.php:488
+#: ../../../../inc/SP/Core/Installer.class.php:488
msgid "Error al crear el usuario \"admin\""
msgstr "Error while creating \"admin\" user"
-#: ../../../../inc/Installer.class.php:501
+#: ../../../../inc/SP/Core/Installer.class.php:501
msgid "Error al actualizar la clave maestra del usuario \"admin\""
msgstr "Error while updating Master Password for user \"admin\""
-#: ../../../../inc/Ldap.class.php:132 ../../../../inc/Ldap.class.php:136
-msgid "No es posible conectar con el servidor de LDAP"
-msgstr "Unable to connect to the LDAP server"
+#: ../../../../inc/SP/Core/Plugin/PluginDataStore.class.php:76
+msgid "Nuevo Plugin"
+msgstr "New Plugin"
-#: ../../../../inc/Ldap.class.php:161 ../../../../inc/Ldap.class.php:166
-msgid "Error al conectar (BIND)"
-msgstr "Connection error (BIND)"
+#: ../../../../inc/SP/Core/Plugin/PluginUtil.class.php:106
+#: ../../../../inc/SP/Core/Plugin/PluginUtil.class.php:108
+#: ../../../../inc/SP/Core/Plugin/PluginUtil.class.php:161
+#, php-format
+msgid "No es posible cargar el plugin \"%s\""
+msgstr "Unable to load \"%s\" plugin"
-#: ../../../../inc/Ldap.class.php:189 ../../../../inc/Ldap.class.php:194
-msgid "Error al buscar objetos en DN base"
-msgstr "Error while searching objects in base DN"
-
-#: ../../../../inc/Ldap.class.php:217 ../../../../inc/Ldap.class.php:223
-#: ../../../../inc/Ldap.class.php:230 ../../../../inc/Ldap.class.php:235
-#: ../../../../inc/Ldap.class.php:240 ../../../../inc/Ldap.class.php:245
-msgid "Error al buscar RDN de grupo"
-msgstr "Error while searching group RDN"
-
-#: ../../../../inc/Ldap.class.php:294 ../../../../inc/Ldap.class.php:300
-#: ../../../../inc/Ldap.class.php:315 ../../../../inc/Ldap.class.php:320
-msgid "Error al buscar el DN del usuario"
-msgstr "Error while searching user DN"
-
-#: ../../../../inc/Ldap.class.php:307 ../../../../inc/Ldap.class.php:312
-msgid "Error al localizar el usuario en LDAP"
-msgstr "Error while searching user on LDAP"
-
-#: ../../../../inc/Ldap.class.php:389 ../../../../inc/Ldap.class.php:395
-#: ../../../../inc/LdapADS.class.php:103 ../../../../inc/LdapADS.class.php:108
-msgid "Error al buscar el grupo de usuarios"
-msgstr "Error while searching users group"
-
-#: ../../../../inc/Ldap.class.php:402
-msgid "Usuario verificado en grupo"
-msgstr "User in group verified"
-
-#: ../../../../inc/LdapADS.class.php:112 ../../../../inc/LdapADS.class.php:117
-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:88
-#: ../../../../inc/themes/classic/eventlog.inc:98
-#: ../../../../inc/themes/material-blue/eventlog.inc:99
-msgid "Vaciar registro de eventos"
-msgstr "Clear event log"
-
-#: ../../../../inc/Migrate.class.php:51
-msgid "Faltan parámetros"
-msgstr "Missing parameters"
-
-#: ../../../../inc/Migrate.class.php:148
-msgid "La versión no es compatible"
-msgstr "Incompatible version"
-
-#: ../../../../inc/Migrate.class.php:149
-msgid "Actualice a la última versión de phpPMS"
-msgstr "Please update to the last version of phpPMS"
-
-#: ../../../../inc/Migrate.class.php:167
-msgid "Error al obtener la configuración"
-msgstr "Error while retrieving configuration"
-
-#: ../../../../inc/Migrate.class.php:210 ../../../../inc/Migrate.class.php:223
-msgid "Error al vaciar tabla"
-msgstr "Error while cleaning table"
-
-#: ../../../../inc/Migrate.class.php:228
-msgid "Usuario actual no es administrador de la aplicación"
-msgstr "Current user is not an application administrator"
-
-#: ../../../../inc/Migrate.class.php:273
-msgid "No es posible crear el cliente"
-msgstr "Unable to create the customer"
-
-#: ../../../../inc/Migrate.class.php:274
-msgid "Contacte con el desarrollador"
-msgstr "Please contact the developer"
-
-#: ../../../../inc/Migrate.class.php:278
-msgid "Importar Clientes"
-msgstr "Import Customers"
-
-#: ../../../../inc/Migrate.class.php:280 ../../../../inc/Migrate.class.php:350
-#: ../../../../inc/Migrate.class.php:451 ../../../../inc/Migrate.class.php:524
-#: ../../../../inc/Migrate.class.php:632 ../../../../inc/Migrate.class.php:697
-#: ../../../../inc/Migrate.class.php:771 ../../../../inc/Migrate.class.php:861
-#: ../../../../inc/Migrate.class.php:932
-msgid "Registros"
-msgstr "Records"
-
-#: ../../../../inc/Migrate.class.php:302
-msgid "Error al obtener los clientes"
-msgstr "Error while retrieving customer"
-
-#: ../../../../inc/Migrate.class.php:344
-msgid "Error al obtener cuentas"
-msgstr "Error while retrieving accounts"
-
-#: ../../../../inc/Migrate.class.php:373
-msgid "Cliente no encontrado"
-msgstr "Customer not found"
-
-#: ../../../../inc/Migrate.class.php:416
-msgid "Error al migrar cuenta"
-msgstr "Error while importing account"
-
-#: ../../../../inc/Migrate.class.php:445
-msgid "Error al obtener los grupos de cuentas"
-msgstr "Error while retrieving accounts groups"
-
-#: ../../../../inc/Migrate.class.php:449
-msgid "Importar Grupos de Cuentas"
-msgstr "Import Accounts Groups"
-
-#: ../../../../inc/Migrate.class.php:471
-msgid "Error al crear grupos de cuentas"
-msgstr "Error while creating accounts groups"
-
-#: ../../../../inc/Migrate.class.php:518
-msgid "Error al obtener el historico de cuentas"
-msgstr "Error while retrieving accounts history"
-
-#: ../../../../inc/Migrate.class.php:522
-msgid "Importar Histórico de Cuentas"
-msgstr "Import Accounts History"
-
-#: ../../../../inc/Migrate.class.php:591
-msgid "Error al crear historico de cuentas"
-msgstr "Error while creating accounts history"
-
-#: ../../../../inc/Migrate.class.php:626
-msgid "Error al obtener los archivos de cuentas"
-msgstr "Error while retrieving accounts files"
-
-#: ../../../../inc/Migrate.class.php:630
-msgid "Importar Archivos de Cuentas"
-msgstr "Import Accounts Files"
-
-#: ../../../../inc/Migrate.class.php:662
-msgid "Error al crear archivos de cuentas"
-msgstr "Error on creating accounts files"
-
-#: ../../../../inc/Migrate.class.php:691
-msgid "Error al obtener las categorías de cuentas"
-msgstr "Error while retrieving accounts categories"
-
-#: ../../../../inc/Migrate.class.php:695
-msgid "Importar Categorías de Cuentas"
-msgstr "Import Accounts Categories"
-
-#: ../../../../inc/Migrate.class.php:717
-msgid "Error al crear categorías de cuentas"
-msgstr "Error while retrieving accounts categories"
-
-#: ../../../../inc/Migrate.class.php:765
-msgid "Error al obtener los usuarios"
-msgstr "Error while retrieving users"
-
-#: ../../../../inc/Migrate.class.php:769
-msgid "Importar Usuarios"
-msgstr "Import Users"
-
-#: ../../../../inc/Migrate.class.php:826
-msgid "Error al crear usuarios"
-msgstr "Error while creating users"
-
-#: ../../../../inc/Migrate.class.php:855
-msgid "Error al obtener los grupos de usuarios"
-msgstr "Error while retrieving users groups"
-
-#: ../../../../inc/Migrate.class.php:859
-msgid "Importar Grupos de Usuarios"
-msgstr "Import Users Groups"
-
-#: ../../../../inc/Migrate.class.php:885
-msgid "Error al crear los grupos de usuarios"
-msgstr "Error while adding users groups"
-
-#: ../../../../inc/Migrate.class.php:930
-msgid "Importar Configuración"
-msgstr "Import Configuration"
-
-#: ../../../../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 completed successfully"
-
-#: ../../../../inc/Profile.class.php:128
-msgid "Fallo al realizar la operación"
-msgstr "Error while performing operation"
-
-#: ../../../../inc/ProfileBase.class.php:164
-msgid "Datos de perfil incorrectos"
-msgstr "Wrong profile data"
-
-#: ../../../../inc/ProfileBase.class.php:550
-#: ../../../../web/UsersMgmtC.class.php:275
-msgid "Eliminar Perfil"
-msgstr "Delete Profile"
-
-#: ../../../../inc/ProfileBase.class.php:593
-msgid "Modificar Perfil"
-msgstr "Edit Profile"
-
-#: ../../../../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 are no categories to import"
-
-#: ../../../../inc/SyspassImport.class.php:136
-msgid "No hay clientes para importar"
-msgstr "There are no customers to import"
-
-#: ../../../../inc/SyspassImport.class.php:161
-msgid "No hay cuentas para importar"
-msgstr "There are no accounts to import"
-
-#: ../../../../inc/Template.class.php:91
+#: ../../../../inc/SP/Core/Template.class.php:126
+#: ../../../../inc/SP/Core/Template.class.php:128
+#: ../../../../inc/SP/Html/DataGrid/DataGridBase.class.php:264
#, php-format
msgid "No es posible obtener la plantilla \"%s\" : %s"
msgstr "Unable to retrieve the \"%s\" template: %s"
-#: ../../../../inc/Template.class.php:130
+#: ../../../../inc/SP/Core/Template.class.php:182
+#: ../../../../inc/SP/Core/Template.class.php:184
#, php-format
msgid "No es posible obtener la variable \"%s\""
msgstr "Unable to retrieve the \"%s\" variable"
-#: ../../../../inc/Template.class.php:173
+#: ../../../../inc/SP/Core/Template.class.php:227
+#: ../../../../inc/SP/Core/Template.class.php:229
#, php-format
msgid "No es posible destruir la variable \"%s\""
msgstr "Unable to unset the \"%s\" variable"
-#: ../../../../inc/Upgrade.class.php:51
-msgid "Error al aplicar la actualización de la Base de Datos"
-msgstr "Error on updating database"
+#: ../../../../inc/SP/Core/Template.class.php:246
+msgid "La plantilla no contiene archivos"
+msgstr "Template does not contain files"
-#: ../../../../inc/Upgrade.class.php:52 ../../../../inc/Upgrade.class.php:58
+#: ../../../../inc/SP/Core/Upgrade.class.php:65
+msgid "Error al aplicar la actualización de la Base de Datos"
+msgstr "Error while updating database"
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:66
+#: ../../../../inc/SP/Core/Upgrade.class.php:74
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:24
-#: ../../../../inc/themes/material-blue/login.inc:65
-msgid "Acceder"
-msgstr "Sign in"
-
-#: ../../../../inc/Upgrade.class.php:57
+#: ../../../../inc/SP/Core/Upgrade.class.php:73
msgid "Error al aplicar la actualización auxiliar"
msgstr "Error while applying auxiliary update"
-#: ../../../../inc/Upgrade.class.php:74
+#: ../../../../inc/SP/Core/Upgrade.class.php:93
msgid "Actualizar BBDD"
msgstr "Update DB"
-#: ../../../../inc/Upgrade.class.php:127
+#: ../../../../inc/SP/Core/Upgrade.class.php:99
msgid "No es necesario actualizar la Base de Datos."
msgstr "Database update not needed."
-#: ../../../../inc/Upgrade.class.php:135
+#: ../../../../inc/SP/Core/Upgrade.class.php:111
msgid "Error al aplicar la actualización de la Base de Datos."
msgstr "Error while updating database."
-#: ../../../../inc/Upgrade.class.php:144
+#: ../../../../inc/SP/Core/Upgrade.class.php:121
msgid "Actualización de la Base de Datos realizada correctamente."
msgstr "Database updating was completed successfully."
-#: ../../../../inc/Upgrade.class.php:221
+#: ../../../../inc/SP/Core/Upgrade.class.php:245
msgid "Actualizar Configuración"
msgstr "Update Configuration"
-#: ../../../../inc/Upgrade.class.php:221
-msgid "Actualización de la Configuración realizada correctamente."
-msgstr "Configuration updating was completed successfully."
+#: ../../../../inc/SP/Core/Upgrade.class.php:284
+msgid "Error al actualizar la configuración"
+msgstr "Error while updating the configuration"
-#: ../../../../inc/UserBase.class.php:388
-#: ../../../../inc/UserBase.class.php:532
-msgid "No se pudo realizar la petición de cambio de clave."
-msgstr "Could not perform the password change request."
-
-#: ../../../../inc/UserBase.class.php:527
-msgid "Modificar Usuario"
-msgstr "Edit User"
-
-#: ../../../../inc/UserBase.class.php:594
-#: ../../../../web/UsersMgmtC.class.php:151
-msgid "Eliminar Usuario"
-msgstr "Delete User"
-
-#: ../../../../inc/UserLdap.class.php:68
-#: ../../../../web/UsersMgmtC.class.php:109
-#: ../../../../inc/themes/classic/users.inc:28
-#: ../../../../inc/themes/material-blue/users.inc:34
-msgid "Usuario de LDAP"
-msgstr "LDAP 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 shortly."
-
-#: ../../../../inc/UserLdap.class.php:86
-msgid "Nuevo usuario de LDAP"
-msgstr "New LDAP user"
-
-#: ../../../../inc/UserMigrate.class.php:113
-msgid "Migrar Grupos"
-msgstr "Migrate Groups"
-
-#: ../../../../inc/UserMigrate.class.php:113
-msgid "Error al migrar grupo del usuario"
-msgstr "Error while migrating user group"
-
-#: ../../../../inc/Util.class.php:119
-msgid "Versión de PHP requerida >= "
-msgstr "Required PHP version >="
-
-#: ../../../../inc/Util.class.php:120
-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:156
-#: ../../../../inc/themes/classic/ldap.inc:212
-#: ../../../../inc/themes/material-blue/ldap.inc:238
-msgid "Módulo no disponible"
-msgstr "Module unavailable"
-
-#: ../../../../inc/Util.class.php:157
-msgid "Sin este módulo la aplicación puede no funcionar correctamente."
-msgstr "Without this module the application could not run correctly"
-
-#: ../../../../inc/XmlExport.class.php:127
+#: ../../../../inc/SP/Core/XmlExport.class.php:130
msgid "Exportar XML"
msgstr "XML Export"
-#: ../../../../inc/XmlExport.class.php:412
+#: ../../../../inc/SP/Core/XmlExport.class.php:143
+msgid "Error al realizar la exportación de cuentas"
+msgstr "Error while exporting accounts"
+
+#: ../../../../inc/SP/Core/XmlExport.class.php:152
+msgid "Exportación de cuentas realizada correctamente"
+msgstr "Export completed successfully"
+
+#: ../../../../inc/SP/Core/XmlExport.class.php:478
msgid "Error al crear el archivo XML"
msgstr "Error while creating XML file"
-#: ../../../../inc/XmlImport.class.php:63
-msgid "Formato detectado"
-msgstr "Detected format"
-
-#: ../../../../inc/XmlImportBase.class.php:80
-msgid "No es posible procesar el archivo XML"
-msgstr "Unable to process XML file"
-
-#: ../../../../inc/XmlImportBase.class.php:108
-msgid "Archivo XML no soportado"
-msgstr "XML file not supported"
-
-#: ../../../../inc/XmlImportBase.class.php:109
-msgid "No es posible detectar la aplicación que exportó los datos"
-msgstr "Unable to detect the application the data was exported from"
-
-#: ../../../../js/strings.js.php:27
-msgid "Error en la consulta"
-msgstr "Error during query"
-
-#: ../../../../js/strings.js.php:28
-msgid "Ha ocurrido un error"
-msgstr "There was an error"
-
-#: ../../../../js/strings.js.php:29
-#: ../../../../inc/themes/classic/login.inc:52
-#: ../../../../inc/themes/material-blue/login.inc:78
-msgid "Sesión finalizada"
-msgstr "Session finished"
-
-#: ../../../../js/strings.js.php:30
-msgid "Borrar la cuenta?"
-msgstr "Delete account?"
-
-#: ../../../../js/strings.js.php:31
-msgid "Borrar el usuario?"
-msgstr "Delete user?"
-
-#: ../../../../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
-msgid "Tamaño de archivo no permitido"
-msgstr "File size 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"
-
-#: ../../../../js/strings.js.php:49
-msgid "Seleccionar Usuario"
-msgstr "Select User"
-
-#: ../../../../js/strings.js.php:50
-msgid "Seleccionar Perfil"
-msgstr "Select Profile"
-
-#: ../../../../js/strings.js.php:51
-msgid "Seleccionar Cliente"
-msgstr "Select Customer"
-
-#: ../../../../js/strings.js.php:52
-msgid "Seleccionar Categoría"
-msgstr "Select Category"
-
-#: ../../../../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 "Restablecer"
-msgstr "Reset"
-
-#: ../../../../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:136
-#: ../../../../inc/themes/classic/account.inc:167
-#: ../../../../inc/themes/classic/account.inc:458
-#: ../../../../inc/themes/classic/config.inc:70
-#: ../../../../inc/themes/classic/config.inc:86
-#: ../../../../inc/themes/classic/config.inc:102
-#: ../../../../inc/themes/classic/config.inc:118
-#: ../../../../inc/themes/classic/config.inc:134
-#: ../../../../inc/themes/classic/config.inc:150
-#: ../../../../inc/themes/classic/config.inc:166
-#: ../../../../inc/themes/classic/config.inc:182
-#: ../../../../inc/themes/classic/config.inc:255
-#: ../../../../inc/themes/classic/config.inc:274
-#: ../../../../inc/themes/classic/customfields.inc:46
-#: ../../../../inc/themes/classic/install.inc:99
-#: ../../../../inc/themes/classic/ldap.inc:25
-#: ../../../../inc/themes/classic/ldap.inc:195
-#: ../../../../inc/themes/classic/mail.inc:14
-#: ../../../../inc/themes/classic/mail.inc:40
-#: ../../../../inc/themes/classic/mail.inc:88
-#: ../../../../inc/themes/classic/preferences.inc:48
-#: ../../../../inc/themes/classic/preferences.inc:82
-#: ../../../../inc/themes/classic/preferences.inc:99
-#: ../../../../inc/themes/classic/preferences.inc:116
-#: ../../../../inc/themes/classic/security.inc:26
-#: ../../../../inc/themes/classic/wiki.inc:20
-msgid "SI"
-msgstr "YES"
-
-#: ../../../../js/strings.js.php:68
-#: ../../../../inc/themes/classic/account.inc:136
-#: ../../../../inc/themes/classic/account.inc:167
-#: ../../../../inc/themes/classic/account.inc:456
-#: ../../../../inc/themes/classic/config.inc:70
-#: ../../../../inc/themes/classic/config.inc:86
-#: ../../../../inc/themes/classic/config.inc:102
-#: ../../../../inc/themes/classic/config.inc:118
-#: ../../../../inc/themes/classic/config.inc:134
-#: ../../../../inc/themes/classic/config.inc:150
-#: ../../../../inc/themes/classic/config.inc:166
-#: ../../../../inc/themes/classic/config.inc:182
-#: ../../../../inc/themes/classic/config.inc:255
-#: ../../../../inc/themes/classic/config.inc:274
-#: ../../../../inc/themes/classic/customfields.inc:46
-#: ../../../../inc/themes/classic/encryption.inc:58
-#: ../../../../inc/themes/classic/encryption.inc:77
-#: ../../../../inc/themes/classic/import.inc:67
-#: ../../../../inc/themes/classic/install.inc:99
-#: ../../../../inc/themes/classic/ldap.inc:25
-#: ../../../../inc/themes/classic/ldap.inc:195
-#: ../../../../inc/themes/classic/mail.inc:14
-#: ../../../../inc/themes/classic/mail.inc:40
-#: ../../../../inc/themes/classic/mail.inc:88
-#: ../../../../inc/themes/classic/preferences.inc:48
-#: ../../../../inc/themes/classic/preferences.inc:82
-#: ../../../../inc/themes/classic/preferences.inc:99
-#: ../../../../inc/themes/classic/preferences.inc:116
-#: ../../../../inc/themes/classic/security.inc:26
-#: ../../../../inc/themes/classic/tokens.inc:36
-#: ../../../../inc/themes/classic/wiki.inc:20
-msgid "NO"
-msgstr "NO"
-
-#: ../../../../js/strings.js.php:69
-msgid "Aceptar"
-msgstr "Accept"
-
-#: ../../../../js/strings.js.php:70
-msgid "Cancelar"
-msgstr "Cancel"
-
-#: ../../../../js/strings.js.php:71
-msgid "Clave Copiada al Portapapeles"
-msgstr "Password Copied to Clipboard"
-
-#: ../../../../js/strings.js.php:72
-msgid "Error al copiar al portapapeles"
-msgstr "Error while copying to clipboard"
-
-#: ../../../../web/AccountC.class.php:386
-#: ../../../../web/AccountC.class.php:417
-#: ../../../../inc/themes/classic/search.inc:75
-#: ../../../../inc/themes/classic/search.inc:134
-#: ../../../../inc/themes/material-blue/search.inc:77
-#: ../../../../inc/themes/material-blue/search.inc:144
-msgid "Detalles de Cuenta"
-msgstr "Account Details"
-
-#: ../../../../web/AccountC.class.php:474
-#: ../../../../inc/themes/classic/account.inc:403
-#: ../../../../inc/themes/material-blue/account.inc:444
-msgid "Modificar Clave de Cuenta"
-msgstr "Edit Account Password"
-
-#: ../../../../web/AccountsMgmtC.class.php:80
-#: ../../../../web/AccountsMgmtC.class.php:139
-#: ../../../../web/AccountsMgmtC.class.php:267
-#: ../../../../web/SearchC.class.php:293
-#: ../../../../web/UsersMgmtC.class.php:88
-#: ../../../../web/UsersMgmtC.class.php:188
-#: ../../../../web/UsersMgmtC.class.php:246
-#: ../../../../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:73
-#: ../../../../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:75
-#: ../../../../inc/themes/material-blue/users.inc:8
-msgid "Nombre"
-msgstr "Name"
-
-#: ../../../../web/AccountsMgmtC.class.php:116
-msgid "Gestión de Categorías"
-msgstr "Categories Management"
-
-#: ../../../../web/AccountsMgmtC.class.php:173
-msgid "Gestión de Clientes"
-msgstr "Customers Management"
-
-#: ../../../../web/AccountsMgmtC.class.php:267
-#: ../../../../inc/themes/classic/customfields.inc:27
-#: ../../../../inc/themes/material-blue/customfields.inc:30
-msgid "Módulo"
-msgstr "Module"
-
-#: ../../../../web/AccountsMgmtC.class.php:288
-msgid "Eliminar Campo"
-msgstr "Delete Field"
-
-#: ../../../../web/ConfigC.class.php:168
-msgid "Último backup"
-msgstr "Last backup"
-
-#: ../../../../web/ConfigC.class.php:168
-msgid "No se encontraron backups"
-msgstr "There are no backups available"
-
-#: ../../../../web/ConfigC.class.php:175
-msgid "Última exportación"
-msgstr "Last export"
-
-#: ../../../../web/ConfigC.class.php:175
-msgid "No se encontró archivo de exportación"
-msgstr "No export file found"
-
-#: ../../../../web/ConfigC.class.php:220
-msgid "Información"
-msgstr "Information"
-
-#: ../../../../web/EventlogC.class.php:95
-msgid "Registro de eventos vaciado"
-msgstr "Event log cleared"
-
-#: ../../../../web/EventlogC.class.php:97
-msgid "Error al vaciar el registro de eventos"
-msgstr "Error while clearing event log"
-
-#: ../../../../web/MainC.class.php:159
-#: ../../../../web/UsersMgmtC.class.php:101
-msgid "Admin Aplicación"
-msgstr "Application Admin"
-
-#: ../../../../web/MainC.class.php:177
-msgid "Buscar"
-msgstr "Search"
-
-#: ../../../../web/MainC.class.php:189
-msgid "Usuarios y Accesos"
-msgstr "Users and Accesses"
-
-#: ../../../../web/MainC.class.php:195
-msgid "Elementos y Personalización"
-msgstr "Items and Customizations"
-
-#: ../../../../web/MainC.class.php:207
-#: ../../../../inc/themes/classic/eventlog.inc:2
-#: ../../../../inc/themes/material-blue/eventlog.inc:2
-msgid "Registro de Eventos"
-msgstr "Event Log"
-
-#: ../../../../web/MainC.class.php:228
-msgid "Nuevo estilo visual basado en Material Design Lite by Google"
-msgstr "New visual design based on Material Design by Google"
-
-#: ../../../../web/MainC.class.php:229
-msgid "Usuarios en múltiples grupos"
-msgstr "Users can belong to multiple groups"
-
-#: ../../../../web/MainC.class.php:230
-msgid "Previsualización de imágenes"
-msgstr "Images previsualization"
-
-#: ../../../../web/MainC.class.php:231
-msgid "Mostrar claves como imágenes"
-msgstr "Show passwords as images"
-
-#: ../../../../web/MainC.class.php:232
-msgid "Campos personalizados"
-msgstr "Custom Fields"
-
-#: ../../../../web/MainC.class.php:233
-msgid "API de consultas"
-msgstr "API queries"
-
-#: ../../../../web/MainC.class.php:234
-#: ../../../../inc/themes/classic/2fa.inc:9
-#: ../../../../inc/themes/material-blue/2fa.inc:7
-#: ../../../../inc/themes/material-blue/security.inc:11
-msgid "Autentificación en 2 pasos"
-msgstr "Two factor authentication"
-
-#: ../../../../web/MainC.class.php:235
-msgid "Complejidad de generador de claves"
-msgstr "Random number generator with complexity configuration"
-
-#: ../../../../web/MainC.class.php:236
-msgid "Consultas especiales"
-msgstr "Special queries"
-
-#: ../../../../web/MainC.class.php:237
-msgid "Exportación a XML"
-msgstr "XML Export"
-
-#: ../../../../web/MainC.class.php:238
-msgid "Clave maestra temporal"
-msgstr "Temporary Master Password"
-
-#: ../../../../web/MainC.class.php:239
-msgid "Importación de cuentas desde sysPass, KeePass, KeePassX y CSV"
-msgstr "Accounts import from KeePass, KeePassX and CSV"
-
-#: ../../../../web/MainC.class.php:240
-msgid "Optimización del código y mayor rapidez de carga"
-msgstr "Code optimization and faster loading"
-
-#: ../../../../web/MainC.class.php:241
-msgid "Mejoras de seguridad en XSS e inyección SQL"
-msgstr "Improved security to prevent XSS and SQL injection"
-
-#: ../../../../web/MainC.class.php:282
-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)"
-
-#: ../../../../web/MainC.class.php:283
-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"
-
-#: ../../../../web/MainC.class.php:290
-msgid "No se encuentra el generador de números aleatorios."
-msgstr "Cannot find random number generator."
-
-#: ../../../../web/MainC.class.php:291
-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."
-
-#: ../../../../web/MainC.class.php:310
-msgid "Instalación finalizada"
-msgstr "Installation finished"
-
-#: ../../../../web/MainC.class.php:311
-msgid "Pulse aquí para acceder"
-msgstr "Click here to sign in"
-
-#: ../../../../web/MainC.class.php:408
-msgid "Descargar nueva versión"
-msgstr "Download new version"
-
-#: ../../../../web/MainC.class.php:419
-msgid "Avisos de sysPass"
-msgstr "sysPass Notices"
-
-#: ../../../../web/SearchC.class.php:286
-msgid "Ordenar por Cliente"
-msgstr "Sort by Customer"
-
-#: ../../../../web/SearchC.class.php:292
-msgid "Ordenar por Nombre"
-msgstr "Sort by Name"
-
-#: ../../../../web/SearchC.class.php:298
-msgid "Ordenar por Categoría"
-msgstr "Sort by Category"
-
-#: ../../../../web/SearchC.class.php:304
-msgid "Ordenar por Usuario"
-msgstr "Sort by Username"
-
-#: ../../../../web/SearchC.class.php:310
-msgid "Ordenar por URL / IP"
-msgstr "Sort by URL / IP"
-
-#: ../../../../web/SearchC.class.php:311
-#: ../../../../inc/themes/classic/account.inc:61
-#: ../../../../inc/themes/classic/editpass.inc:16
-#: ../../../../inc/themes/classic/request.inc:13
-#: ../../../../inc/themes/classic/search.inc:96
-#: ../../../../inc/themes/material-blue/account.inc:70
-#: ../../../../inc/themes/material-blue/editpass.inc:17
-#: ../../../../inc/themes/material-blue/request.inc:15
-#: ../../../../inc/themes/material-blue/search.inc:98
-msgid "URL / IP"
-msgstr "URL / IP"
-
-#: ../../../../web/UsersMgmtC.class.php:92
-msgid "Propiedades"
-msgstr "Properties"
-
-#: ../../../../web/UsersMgmtC.class.php:105
-msgid "Admin Cuentas"
-msgstr "Account Admin"
-
-#: ../../../../web/UsersMgmtC.class.php:113
-#: ../../../../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:130
-msgid "Ver Detalles de Usuario"
-msgstr "View User Details"
-
-#: ../../../../web/UsersMgmtC.class.php:144
-msgid "Cambiar Clave de Usuario"
-msgstr "Change User's Password"
-
-#: ../../../../web/UsersMgmtC.class.php:164
-msgid "Gestión de Usuarios"
-msgstr "Users Management"
-
-#: ../../../../web/UsersMgmtC.class.php:223
-msgid "Gestión de Grupos"
-msgstr "Groups Management"
-
-#: ../../../../web/UsersMgmtC.class.php:261
-msgid "Ver Detalles de Perfil"
-msgstr "View Profile Details"
-
-#: ../../../../web/UsersMgmtC.class.php:288
-msgid "Gestión de Perfiles"
-msgstr "Profiles Management"
-
-#: ../../../../web/UsersMgmtC.class.php:408
-msgid "Ver token de Autorización"
-msgstr "View Authorization token"
-
-#: ../../../../web/UsersMgmtC.class.php:435
-msgid "Gestión de Autorizaciones API"
-msgstr "API Authorizations Management"
-
-#: ../../../../web/UsersMgmtC.class.php:457
-msgid "Token de autorización visualizado"
-msgstr "Authorization token viewed"
-
-#: ../../../../web/UsersMgmtC.class.php:458
-msgid "Autorizaciones"
-msgstr "Authorizations"
-
-#: ../../../../web/UsersPrefsC.class.php:93
-#: ../../../../inc/themes/classic/mail.inc:63
-#: ../../../../inc/themes/material-blue/mail.inc:86
-msgid "Seguridad"
-msgstr "Security"
-
-#: ../../../../web/UsersPrefsC.class.php:118
-#: ../../../../inc/themes/classic/sessionbar.inc:9
-msgid "Preferencias"
-msgstr "Preferences"
-
-#: ../../../../inc/themes/classic/2fa.inc:14
-#: ../../../../inc/themes/material-blue/2fa.inc:12
-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:64
-#: ../../../../inc/themes/material-blue/account.inc:76
-msgid "URL o IP de acceso"
-msgstr "Access URL or IP"
-
-#: ../../../../inc/themes/classic/account.inc:76
-#: ../../../../inc/themes/material-blue/account.inc:90
-msgid "Usuario de acceso"
-msgstr "Access user"
-
-#: ../../../../inc/themes/classic/account.inc:93
-#: ../../../../inc/themes/classic/editpass.inc:31
-#: ../../../../inc/themes/classic/passreset.inc:35
-#: ../../../../inc/themes/classic/users.inc:83
-#: ../../../../inc/themes/classic/userspass.inc:19
-#: ../../../../inc/themes/classic/userspass.inc:21
-#: ../../../../inc/themes/material-blue/account.inc:109
-#: ../../../../inc/themes/material-blue/editpass.inc:36
-#: ../../../../inc/themes/material-blue/install.inc:67
-#: ../../../../inc/themes/material-blue/passreset.inc:36
-#: ../../../../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:100
-#: ../../../../inc/themes/classic/search.inc:112
-#: ../../../../inc/themes/classic/users.inc:91
-#: ../../../../inc/themes/material-blue/account.inc:120
-#: ../../../../inc/themes/material-blue/search.inc:118
-#: ../../../../inc/themes/material-blue/users.inc:116
-msgid "Notas"
-msgstr "Notes"
-
-#: ../../../../inc/themes/classic/account.inc:102
-#: ../../../../inc/themes/material-blue/account.inc:125
-#: ../../../../inc/themes/material-blue/users.inc:123
-msgid "Notas sobre la cuenta"
-msgstr "Notes about the account"
-
-#: ../../../../inc/themes/classic/account.inc:108
-#: ../../../../inc/themes/material-blue/account.inc:134
-#: ../../../../inc/themes/material-blue/search.inc:111
-msgid "Permisos"
-msgstr "Permissions"
-
-#: ../../../../inc/themes/classic/account.inc:135
-#: ../../../../inc/themes/classic/account.inc:166
-#: ../../../../inc/themes/material-blue/account.inc:163
-#: ../../../../inc/themes/material-blue/account.inc:195
-msgid "Hablitar edición"
-msgstr "Enable Edit"
-
-#: ../../../../inc/themes/classic/account.inc:201
-#: ../../../../inc/themes/material-blue/account.inc:245
-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:212
-#: ../../../../inc/themes/material-blue/account.inc:245
-#: ../../../../inc/themes/material-blue/config.inc:328
-msgid "Tamaño máximo de archivo"
-msgstr "Maximum file size"
-
-#: ../../../../inc/themes/classic/account.inc:223
-#: ../../../../inc/themes/material-blue/account.inc:267
-msgid "Historial"
-msgstr "History"
-
-#: ../../../../inc/themes/classic/account.inc:242
-#: ../../../../inc/themes/material-blue/account.inc:287
-msgid "Seleccionar fecha"
-msgstr "Select date"
-
-#: ../../../../inc/themes/classic/account.inc:251
-#: ../../../../inc/themes/classic/users.inc:164
-#: ../../../../inc/themes/material-blue/account.inc:296
-#: ../../../../inc/themes/material-blue/users.inc:208
-msgid "Última Modificación"
-msgstr "Last Modification"
-
-#: ../../../../inc/themes/classic/account.inc:253
-#: ../../../../inc/themes/material-blue/account.inc:298
-msgid "por"
-msgstr "by"
-
-#: ../../../../inc/themes/classic/account.inc:296
-#: ../../../../inc/themes/material-blue/account.inc:347
-msgid "Visitas"
-msgstr "Visits"
-
-#: ../../../../inc/themes/classic/account.inc:300
-#: ../../../../inc/themes/material-blue/account.inc:351
-msgid "Fecha Alta"
-msgstr "Date Added"
-
-#: ../../../../inc/themes/classic/account.inc:304
-#: ../../../../inc/themes/material-blue/account.inc:355
-msgid "Creador"
-msgstr "Creator"
-
-#: ../../../../inc/themes/classic/account.inc:308
-#: ../../../../inc/themes/material-blue/account.inc:204
-#: ../../../../inc/themes/material-blue/account.inc:359
-msgid "Grupo Principal"
-msgstr "Main Group"
-
-#: ../../../../inc/themes/classic/account.inc:313
-#: ../../../../inc/themes/material-blue/account.inc:364
-msgid "Usuarios Secundarios"
-msgstr "Secondary Users"
-
-#: ../../../../inc/themes/classic/account.inc:332
-#: ../../../../inc/themes/material-blue/account.inc:383
-msgid "Grupos Secundarios"
-msgstr "Secondary Groups"
-
-#: ../../../../inc/themes/classic/account.inc:352
-#: ../../../../inc/themes/material-blue/account.inc:403
-msgid "Fecha Edición"
-msgstr "Date Modified"
-
-#: ../../../../inc/themes/classic/account.inc:356
-#: ../../../../inc/themes/material-blue/account.inc:407
-msgid "Editor"
-msgstr "Editor"
-
-#: ../../../../inc/themes/classic/account.inc:383
-#: ../../../../inc/themes/material-blue/account.inc:470
-msgid "Restaurar cuenta desde este punto"
-msgstr "Restore account from this point"
-
-#: ../../../../inc/themes/classic/account.inc:395
-#: ../../../../inc/themes/classic/search.inc:143
-#: ../../../../inc/themes/material-blue/account.inc:437
-#: ../../../../inc/themes/material-blue/search.inc:154
-msgid "Copiar Clave en Portapapeles"
-msgstr "Copy Password to Clipboard"
-
-#: ../../../../inc/themes/classic/account.inc:410
-#: ../../../../inc/themes/material-blue/account.inc:450
-msgid "Ver Actual"
-msgstr "View Current"
-
-#: ../../../../inc/themes/classic/account.inc:415
-#: ../../../../inc/themes/classic/editpass.inc:45
-#: ../../../../inc/themes/classic/mgmttabs.inc:4
-#: ../../../../inc/themes/classic/passreset.inc:46
-#: ../../../../inc/themes/material-blue/passreset.inc:48
-msgid "Volver"
-msgstr "Back"
-
-#: ../../../../inc/themes/classic/account.inc:422
-#: ../../../../inc/themes/classic/search.inc:155
-#: ../../../../inc/themes/material-blue/account.inc:460
-#: ../../../../inc/themes/material-blue/search.inc:166
-msgid "Modificar Cuenta"
-msgstr "Edit Account"
-
-#: ../../../../inc/themes/classic/account.inc:427
-#: ../../../../inc/themes/classic/search.inc:176
-#: ../../../../inc/themes/material-blue/account.inc:464
-#: ../../../../inc/themes/material-blue/search.inc:187
-msgid "Solicitar Modificación"
-msgstr "Request Modification"
-
-#: ../../../../inc/themes/classic/account.inc:434
-#: ../../../../inc/themes/classic/categories.inc:62
-#: ../../../../inc/themes/classic/config.inc:294
-#: ../../../../inc/themes/classic/customers.inc:62
-#: ../../../../inc/themes/classic/customfields.inc:63
-#: ../../../../inc/themes/classic/editpass.inc:50
-#: ../../../../inc/themes/classic/encryption.inc:99
-#: ../../../../inc/themes/classic/groups.inc:77
-#: ../../../../inc/themes/classic/ldap.inc:229
-#: ../../../../inc/themes/classic/mail.inc:107
-#: ../../../../inc/themes/classic/preferences.inc:130
-#: ../../../../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:476
-#: ../../../../inc/themes/material-blue/categories.inc:72
-#: ../../../../inc/themes/material-blue/config.inc:444
-#: ../../../../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/preferences.inc:134
-#: ../../../../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:444
-#: ../../../../inc/themes/material-blue/account.inc:486
-msgid "Seleccionar grupos secundarios"
-msgstr "Select secondary groups"
-
-#: ../../../../inc/themes/classic/account.inc:448
-#: ../../../../inc/themes/material-blue/account.inc:489
-msgid "Seleccionar usuarios"
-msgstr "Select users"
-
-#: ../../../../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:90
-#: ../../../../inc/themes/classic/encryption.inc:94
-#: ../../../../inc/themes/classic/encryption.inc:159
-#: ../../../../inc/themes/classic/encryption.inc:163
-#: ../../../../inc/themes/classic/import.inc:12
-#: ../../../../inc/themes/classic/import.inc:34
-#: ../../../../inc/themes/classic/import.inc:48
-#: ../../../../inc/themes/classic/import.inc:94
-#: ../../../../inc/themes/classic/import.inc:115
-#: ../../../../inc/themes/classic/import.inc:168
-#: ../../../../inc/themes/classic/import.inc:172
-#: ../../../../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:104
-#: ../../../../inc/themes/material-blue/encryption.inc:108
-#: ../../../../inc/themes/material-blue/encryption.inc:178
-#: ../../../../inc/themes/material-blue/encryption.inc:182
-#: ../../../../inc/themes/material-blue/import.inc:97
-#: ../../../../inc/themes/material-blue/import.inc:101
-#: ../../../../inc/themes/material-blue/js-common.inc:11
+#: ../../../../inc/SP/Forms/AccountForm.class.php:132
+msgid "Es necesaria una clave"
+msgstr "A key is needed"
+
+#: ../../../../inc/SP/Forms/AccountForm.class.php:144
+msgid "Es necesario un nombre de cuenta"
+msgstr "An account name needed"
+
+#: ../../../../inc/SP/Forms/AccountForm.class.php:146
+#: ../../../../inc/SP/Forms/CustomerForm.class.php:83
+msgid "Es necesario un nombre de cliente"
+msgstr "A customer name needed"
+
+#: ../../../../inc/SP/Forms/AccountForm.class.php:148
+msgid "Es necesario un usuario"
+msgstr "An username is needed"
+
+#: ../../../../inc/SP/Forms/AccountForm.class.php:150
+msgid "Es necesario una categoría"
+msgstr "A category is needed"
+
+#: ../../../../inc/SP/Forms/ApiTokenForm.class.php:84
+msgid "Usuario no indicado"
+msgstr "User not set"
+
+#: ../../../../inc/SP/Forms/ApiTokenForm.class.php:86
+msgid "Acción no indicada"
+msgstr "Action not set"
+
+#: ../../../../inc/SP/Forms/CategoryForm.class.php:83
+msgid "Es necesario un nombre de categoría"
+msgstr "A category name needed"
+
+#: ../../../../inc/SP/Forms/CustomFieldDefForm.class.php:87
+msgid "Nombre del campo no indicado"
+msgstr "Field name not set"
+
+#: ../../../../inc/SP/Forms/CustomFieldDefForm.class.php:89
+msgid "Tipo del campo no indicado"
+msgstr "Field type not set"
+
+#: ../../../../inc/SP/Forms/CustomFieldDefForm.class.php:91
+msgid "Módulo del campo no indicado"
+msgstr "Field module not set"
+
+#: ../../../../inc/SP/Forms/GroupForm.class.php:84
+msgid "Es necesario un nombre de grupo"
+msgstr "A group name is needed"
+
+#: ../../../../inc/SP/Forms/NoticeForm.class.php:91
+msgid "Es necesario un componente"
+msgstr "A component is needed"
+
+#: ../../../../inc/SP/Forms/NoticeForm.class.php:93
+msgid "Es necesario un tipo"
+msgstr "A type is needed"
+
+#: ../../../../inc/SP/Forms/NoticeForm.class.php:100
+msgid "Es necesario un destinatario"
+msgstr "A target is needed"
+
+#: ../../../../inc/SP/Forms/ProfileForm.class.php:111
+msgid "Es necesario un nombre de perfil"
+msgstr "A profile name is needed"
+
+#: ../../../../inc/SP/Forms/TagForm.class.php:82
+msgid "Es necesario un nombre de etiqueta"
+msgstr "A tag name is needed"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:86
+msgid "Es necesario un nombre de usuario"
+msgstr "An username is needed"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:88
+msgid "Es necesario un login"
+msgstr "A login is needed"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:90
+msgid "Es necesario un perfil"
+msgstr "A profile is needed"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:92
+msgid "Es necesario un grupo"
+msgstr "A group is needed"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:94
+msgid "Es necesario un email"
+msgstr "An email is needed"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:110
+msgid "La clave no puede estar en blanco"
+msgstr "Password cannot be blank"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:127
+msgid "No es posible eliminar, usuario en uso"
+msgstr "Unable to delete, user in use"
+
+#: ../../../../inc/SP/Http/Request.class.php:51
+msgid "No es posible acceder directamente a este archivo"
+msgstr "Unable to access this file"
+
+#: ../../../../inc/SP/Http/XMLRPCResponseParse.class.php:68
+msgid "Respuesta XML-RPC inválida"
+msgstr "Invalid XML-RPC response"
+
+#: ../../../../inc/SP/Import/CsvImport.class.php:46
+#: ../../../../inc/SP/Import/XmlImport.class.php:99
+#, php-format
+msgid "Formato detectado: %s"
+msgstr "Detected format: %s"
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:84
+#, php-format
+msgid "El número de campos es incorrecto (%d)"
+msgstr "Wrong number of fields (%d)"
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:85
+#, php-format
+msgid "Compruebe el formato del archivo CSV en línea %s"
+msgstr "Please, check CSV format in line %s"
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:111
+msgid "Error importando cuenta"
+msgstr "Error while importing account"
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:112
+msgid "Error procesando línea"
+msgstr "Error while processing line"
+
+#: ../../../../inc/SP/Import/FileImport.class.php:86
+msgid "Archivo no subido correctamente"
+msgstr "File successfully uploaded"
+
+#: ../../../../inc/SP/Import/FileImport.class.php:87
+msgid "Verifique los permisos del usuario del servidor web"
+msgstr "Please check the web server's user permissions"
+
+#: ../../../../inc/SP/Import/FileImport.class.php:98
+msgid "Compruebe la extensión del archivo"
+msgstr "Please, check file extension"
+
+#: ../../../../inc/SP/Import/FileImport.class.php:114
+msgid "Compruebe la configuración de PHP para subir archivos"
+msgstr "Please, check PHP configuration for upload files"
+
+#: ../../../../inc/SP/Import/FileImport.class.php:158
+#: ../../../../inc/SP/Import/FileImport.class.php:186
+msgid "Compruebe los permisos del directorio temporal"
+msgstr "Please, check temporary directory permissions"
+
+#: ../../../../inc/SP/Import/Import.class.php:83
+#, php-format
+msgid "Tipo mime no soportado (\"%s\")"
+msgstr "Mime type not supported (\"%s\")"
+
+#: ../../../../inc/SP/Import/Import.class.php:84
+msgid "Compruebe el formato del archivo"
+msgstr "Please, check the file format"
+
+#: ../../../../inc/SP/Import/Import.class.php:98
+msgid "Cuentas importadas"
+msgstr "Accounts imported"
+
+#: ../../../../inc/SP/Import/Import.class.php:103
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:66
+#: ../../../../js/strings.js.php:79
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:70
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:127
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:287
+#: ../../../../inc/themes/material-blue/views/config/import.inc:101
msgid "Ayuda"
msgstr "Help"
-#: ../../../../inc/themes/classic/backup.inc:50
-#: ../../../../inc/themes/material-blue/backup.inc:52
+#: ../../../../inc/SP/Import/Import.class.php:114
+msgid "Importación finalizada"
+msgstr "Import finished"
+
+#: ../../../../inc/SP/Import/ImportBase.class.php:121
+msgid "Id de categoría no definido. No es posible importar cuenta."
+msgstr "Category Id not set. Unable to import the account."
+
+#: ../../../../inc/SP/Import/ImportBase.class.php:124
+msgid "Id de cliente no definido. No es posible importar cuenta."
+msgstr "Customer Id not set. Unable to import the account."
+
+#: ../../../../inc/SP/Import/SyspassImport.class.php:73
+msgid "Clave de encriptación no indicada"
+msgstr "Encryption password not set"
+
+#: ../../../../inc/SP/Import/SyspassImport.class.php:109
+#: ../../../../inc/SP/Import/SyspassImport.class.php:122
+msgid "Clave de encriptación incorrecta"
+msgstr "Wrong encryption password"
+
+#: ../../../../inc/SP/Import/XmlFileImport.class.php:85
+msgid "Archivo XML no soportado"
+msgstr "XML file not supported"
+
+#: ../../../../inc/SP/Import/XmlFileImport.class.php:86
+msgid "No es posible detectar la aplicación que exportó los datos"
+msgstr "Unable to detect the application the data was exported from"
+
+#: ../../../../inc/SP/Import/XmlFileImport.class.php:107
+msgid "No es posible procesar el archivo XML"
+msgstr "Unable to process XML file"
+
+#: ../../../../inc/SP/Import/XmlImportTrait.class.php:69
+msgid "Formato de XML inválido"
+msgstr "Invalid XML format"
+
+#: ../../../../inc/SP/Import/XmlImportTrait.class.php:70
+#, php-format
+msgid "El nodo \"%s\" no existe"
+msgstr "The \"%s\" node doesn't exist"
+
+# Not available
+#: ../../../../inc/SP/Log/Email.class.php:62
+msgid "N/D"
+msgstr "N/A"
+
+#: ../../../../inc/SP/Log/Email.class.php:64
+msgid "Realizado por"
+msgstr "Performed by"
+
+#: ../../../../inc/SP/Log/Email.class.php:76
+#: ../../../../inc/SP/Log/Email.class.php:191
+msgid "Enviar Email"
+msgstr "Send Email"
+
+#: ../../../../inc/SP/Log/Email.class.php:81
+#: ../../../../inc/SP/Log/Email.class.php:198
+msgid "Correo enviado"
+msgstr "Email sent"
+
+#: ../../../../inc/SP/Log/Email.class.php:82
+#: ../../../../inc/SP/Log/Email.class.php:192
+msgid "Destinatario"
+msgstr "Recipient"
+
+#: ../../../../inc/SP/Log/Email.class.php:85
+msgid "CC"
+msgstr "CC"
+
+#: ../../../../inc/SP/Log/Email.class.php:91
+#: ../../../../inc/SP/Log/Email.class.php:202
+msgid "Error al enviar correo"
+msgstr "Error while sending email"
+
+#: ../../../../inc/SP/Log/Log.class.php:91
+msgid "Error al vaciar el registro de eventos"
+msgstr "Error while clearing event log"
+
+#: ../../../../inc/SP/Log/LogUtil.class.php:44
+#, php-format
+msgid "Extensión '%s' no cargada"
+msgstr "Extension '%s' not loaded"
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:57
+msgid "Categoría duplicada"
+msgstr "Duplicated category"
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:68
+msgid "Error al crear la categoría"
+msgstr "Error while creating category"
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:122
+msgid "Error al eliminar la categoría"
+msgstr "Error while deleting category"
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:177
+msgid "Nombre de categoría duplicado"
+msgstr "Duplicated category name"
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:193
+msgid "Error al actualizar la categoría"
+msgstr "Error while updating category"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:72
+msgid "Error al crear el campo personalizado"
+msgstr "Error while creating custom field"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:87
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:96
+msgid "Error al eliminar el campo personalizado"
+msgstr "Error while removing custom field"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:140
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:218
+msgid "Error al actualizar el campo personalizado"
+msgstr "Error while updating custom field"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:174
+msgid "Campo personalizado no encontrado"
+msgstr "Custom field not found"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:227
+msgid "No se encontraron campos personalizados"
+msgstr "Custom fields not found"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:62
+msgid "Texto"
+msgstr "Text"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:66
+msgid "Número"
+msgstr "Number"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:67
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:60
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:82
+msgid "Email"
+msgstr "Email"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:68
+msgid "Teléfono"
+msgstr "Phone"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:69
+msgid "Link"
+msgstr "Link"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:70
+msgid "Color"
+msgstr "Color"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:71
+msgid "Área de Texto"
+msgstr "Text Area"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:82
+msgid "No hay datos de campos personalizados"
+msgstr "No data from custom fields"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:87
+msgid "Actualizando datos encriptados"
+msgstr "Updating encrypted data"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:117
+msgid "Registros no actualizados"
+msgstr "Records not updated"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:118
+msgid "Registros actualizados"
+msgstr "Records updated"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:191
+msgid "Error al migrar campos personalizados"
+msgstr "Error while migrating custom fields"
+
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:58
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:182
+msgid "Cliente duplicado"
+msgstr "Duplicated customer"
+
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:72
+msgid "Error al crear el cliente"
+msgstr "Error while creating customer"
+
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:118
+msgid "No es posible eliminar"
+msgstr "Unable to delete"
+
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:127
+msgid "Error al eliminar el cliente"
+msgstr "Error while deleting customer"
+
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:198
+msgid "Error al actualizar el cliente"
+msgstr "Error while updating customer"
+
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:101
+msgid "Archivo subido"
+msgstr "File uploaded"
+
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:123
+msgid "Error al eliminar archivo"
+msgstr "Error while deleting file"
+
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:128
+msgid "Archivo no encontrado"
+msgstr "File not found"
+
+#: ../../../../inc/SP/Mgmt/Files/FileUtil.class.php:102
+msgid "Error al eliminar archivos asociados a la cuenta"
+msgstr "Error while deleting account's files"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:57
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:193
+msgid "Nombre de grupo duplicado"
+msgstr "Duplicated group name"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:67
+msgid "Error al crear el grupo"
+msgstr "Error while creating group"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:110
+msgid "Grupo en uso"
+msgstr "Group in use"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:119
+msgid "Error al eliminar el grupo"
+msgstr "Error while deleting group"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:124
+msgid "Grupo no encontrado"
+msgstr "Group not found"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:204
+msgid "Error al actualizar el grupo"
+msgstr "Error while updating group"
+
+#: ../../../../inc/SP/Mgmt/Groups/GroupAccounts.class.php:70
+msgid "Error al eliminar grupos asociados a la cuenta"
+msgstr "Error while deleting account's groups"
+
+#: ../../../../inc/SP/Mgmt/Groups/GroupAccounts.class.php:100
+msgid "Error al actualizar los grupos secundarios"
+msgstr "Error while updating secondary groups"
+
+#: ../../../../inc/SP/Mgmt/Groups/GroupUsers.class.php:69
+msgid "Error al asignar los usuarios al grupo"
+msgstr "Error while setting users in the group"
+
+#: ../../../../inc/SP/Mgmt/Groups/GroupUsers.class.php:89
+msgid "Error al eliminar los usuarios del grupo"
+msgstr "Error while deleting group users"
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:69
+msgid "Error al crear la notificación"
+msgstr "Error while adding notification"
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:94
+msgid "Error al eliminar la notificación"
+msgstr "Error while deleting notification"
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:99
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:137
+msgid "Notificación no encontrada"
+msgstr "Notification not found"
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:132
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:248
+msgid "Error al modificar la notificación"
+msgstr "Error while updating notification"
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:171
+msgid "Error al obtener la notificación"
+msgstr "Error while retrieving notification"
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:202
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:288
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:322
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:358
+msgid "Error al obtener las notificaciones"
+msgstr "Error while retrieving notifications"
+
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:59
+msgid "Error al crear el plugin"
+msgstr "Error while adding plugin"
+
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:83
+msgid "Error al eliminar el plugin"
+msgstr "Error while deleting plugin"
+
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:88
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:120
+msgid "Plugin no encontrado"
+msgstr "Plugin not found"
+
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:115
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:223
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:247
+msgid "Error al actualizar el plugin"
+msgstr "Error while updating plugin"
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:56
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:182
+msgid "Nombre de perfil duplicado"
+msgstr "Duplicated profile name"
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:68
+msgid "Error al crear perfil"
+msgstr "Error while creating profile"
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:105
+msgid "Perfil en uso"
+msgstr "Profile in use"
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:114
+msgid "Error al eliminar perfil"
+msgstr "Error while removing profile"
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:119
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:201
+msgid "Perfil no encontrado"
+msgstr "Profile not found"
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:196
+msgid "Error al modificar perfil"
+msgstr "Error while modifying profile"
+
+#: ../../../../inc/SP/Mgmt/Profiles/ProfileUtil.class.php:55
+msgid "Migrar Perfiles"
+msgstr "Migrate Profiles"
+
+#: ../../../../inc/SP/Mgmt/Profiles/ProfileUtil.class.php:85
+msgid "Error al obtener perfiles"
+msgstr "Error while retrieving profiles"
+
+#: ../../../../inc/SP/Mgmt/Profiles/ProfileUtil.class.php:147
+msgid "Operación realizada correctamente"
+msgstr "Operation completed successfully"
+
+#: ../../../../inc/SP/Mgmt/Profiles/ProfileUtil.class.php:152
+msgid "Fallo al realizar la operación"
+msgstr "Error while performing operation"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:104
+msgid "Error al actualizar enlace"
+msgstr "Error while updating link"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:109
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:185
+msgid "Enlace no encontrado"
+msgstr "Link not found"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:122
+msgid "Enlace ya creado"
+msgstr "Link already created"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:143
+msgid "Error al crear enlace"
+msgstr "Error while creating link"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:180
+msgid "Error al eliminar enlace"
+msgstr "Error while removing link"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:214
+msgid "Error al renovar enlace"
+msgstr "Error while renewing link"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:243
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:342
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:376
+msgid "Error al obtener enlace"
+msgstr "Error while retrieving link"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:294
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLinkSearch.class.php:72
+msgid "ON"
+msgstr "ON"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:294
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLinkSearch.class.php:72
+msgid "OFF"
+msgstr "OFF"
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:53
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:126
+msgid "Etiqueta duplicada"
+msgstr "Duplicated tag"
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:63
+msgid "Error al crear etiqueta"
+msgstr "Error while creating tag"
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:108
+msgid "Error al eliminar etiqueta"
+msgstr "Error while removing tag"
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:113
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:142
+msgid "Etiqueta no encontrada"
+msgstr "Tag not found"
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:137
+msgid "Error al actualizar etiqueta"
+msgstr "Error while updating tag"
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:184
+msgid "Error al obtener etiqueta"
+msgstr "Error while retrieving tag"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:53
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:152
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:77
+msgid "Login/email de usuario duplicados"
+msgstr "Duplicated user login/email"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:90
+msgid "Error al crear el usuario"
+msgstr "Error while creating user"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:132
+msgid "Error al eliminar el usuario"
+msgstr "Error while deleting user"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:137
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:188
+msgid "Usuario no encontrado"
+msgstr "User not found"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:183
+msgid "Error al actualizar el usuario"
+msgstr "Error while updating user"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:250
+msgid "Error al obtener los usuarios"
+msgstr "Error while retrieving users"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:286
+#: ../../../../inc/SP/Mgmt/Users/UserPass.class.php:145
+msgid "Error al modificar la clave"
+msgstr "Error while updating password"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:339
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:386
+msgid "Error al obtener los datos del usuario"
+msgstr "Error while retrieving user's data"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:108
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:54
+msgid "Usuario de LDAP"
+msgstr "LDAP User"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:117
+msgid "Error al guardar los datos de LDAP"
+msgstr "Error while saving LDAP user data"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:125
+msgid "Activación Cuenta"
+msgstr "Account Activation"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:126
+msgid "Su cuenta está pendiente de activación."
+msgstr "Your account activation is pending."
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:127
+msgid "En breve recibirá un email de confirmación."
+msgstr "You will receive a confirmation email shortly."
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:134
+msgid "Nuevo usuario de LDAP"
+msgstr "New LDAP user"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:198
+msgid "Error al actualizar la clave del usuario en la BBDD"
+msgstr "Error while updating user password in DB"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdapSync.class.php:60
+msgid "Sincronización LDAP"
+msgstr "LDAP synchronization"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdapSync.class.php:110
+msgid "No se encontraron objetos para sincronizar"
+msgstr "There are no objects to synchronize"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdapSync.class.php:116
+msgid "Sincronización finalizada"
+msgstr "Synchronization finished"
+
+#: ../../../../inc/SP/Mgmt/Users/UserMigrate.class.php:98
+msgid "Error al migrar cuenta de usuario"
+msgstr "Error while migrating user account"
+
+#: ../../../../inc/SP/Mgmt/Users/UserMigrate.class.php:133
+msgid "Error al obtener grupo de usuarios"
+msgstr "Error while retrieving users group"
+
+#: ../../../../inc/SP/Mgmt/Users/UserMigrate.class.php:148
+msgid "Error al migrar grupo del usuario"
+msgstr "Error while migrating user group"
+
+#: ../../../../inc/SP/Mgmt/Users/UserPassRecover.class.php:110
+msgid "Error en comprobación de hash"
+msgstr "Error while checking checking hash"
+
+#: ../../../../inc/SP/Mgmt/Users/UserPassRecover.class.php:112
+msgid "Hash inválido o expirado"
+msgstr "Invalid hash or expired"
+
+#: ../../../../inc/SP/Mgmt/Users/UserPassRecover.class.php:158
+msgid "Error al generar el hash de recuperación"
+msgstr "Error while generating the recovering hash"
+
+#: ../../../../inc/SP/Mgmt/Users/UserPreferences.class.php:79
+msgid "Error al actualizar preferencias"
+msgstr "Error while updating preferences"
+
+#: ../../../../inc/SP/Mgmt/Users/UserPreferencesUtil.class.php:59
+msgid "Actualizando preferencias"
+msgstr "Updating preferences"
+
+#: ../../../../inc/SP/Storage/DB.class.php:296
+#: ../../../../inc/SP/Storage/DB.class.php:336
+#: ../../../../js/strings.js.php:26
+msgid "Error en la consulta"
+msgstr "Error while querying"
+
+#: ../../../../inc/SP/Storage/DB.class.php:342
+msgid "Consulta en blanco"
+msgstr "Blank query"
+
+#: ../../../../inc/SP/Storage/DB.class.php:354
+msgid "Restricción de integridad"
+msgstr "Integrity constraint"
+
+#: ../../../../inc/SP/Storage/XmlHandler.class.php:77
+#, php-format
+msgid "No es posible leer/escribir el archivo: %s"
+msgstr "Unable to read/write the file: %s"
+
+#: ../../../../inc/SP/Storage/XmlHandler.class.php:161
+msgid "No hay elementos para guardar"
+msgstr "There aren't any items to save"
+
+#: ../../../../inc/SP/Util/Connection.class.php:120
+msgid "Socket no inicializado"
+msgstr "Socket not initialized"
+
+#: ../../../../inc/SP/Util/Connection.class.php:127
+msgid "Error al enviar datos"
+msgstr "Error while sending data"
+
+#: ../../../../inc/SP/Util/Json.class.php:63
+msgid "Error de codificación"
+msgstr "Encoding error"
+
+#: ../../../../inc/SP/Util/Util.class.php:316
+msgid "Respuesta"
+msgstr "Response"
+
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApi.class.php:68
+msgid "Fallo de autentificación"
+msgstr "Authentication error"
+
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApiBase.class.php:173
+msgid "Error al realizar la consulta"
+msgstr "Error while doing query"
+
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApiBase.class.php:219
+msgid "URL de conexión no establecida"
+msgstr "Connection URL not set"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:46
+msgid "Añadir"
+msgstr "Add"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:47
+msgid "Ver Detalles"
+msgstr "View Details"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:49
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:68
+msgid "Editar"
+msgstr "Edit"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:50
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:80
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:82
+msgid "Eliminar"
+msgstr "Delete"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:51
+msgid "Cambiar Clave"
+msgstr "Change password"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:52
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:147
+msgid "Admin Aplicación"
+msgstr "Application Admin"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:53
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:154
+msgid "Admin Cuentas"
+msgstr "Account Admin"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:55
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:159
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:162
+msgid "Deshabilitado"
+msgstr "Disabled"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:56
+msgid "Habilitado"
+msgstr "Enabled"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:58
+msgid "Copiar"
+msgstr "Copy"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:63
+#: ../../../../inc/themes/material-blue/views/main/error.inc:12
+#: ../../../../inc/themes/material-blue/views/main/error.inc:13
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:56
+msgid "Volver"
+msgstr "Back"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:64
+msgid "Restaurar"
+msgstr "Restore"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:65
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:109
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:160
+msgid "Guardar"
+msgstr "Save"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:67
+msgid "Limpiar"
+msgstr "Clear"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:68
+msgid "Realizar"
+msgstr "Perform"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:69
+msgid "Descargar"
+msgstr "Download"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:71
+msgid "Comprobar"
+msgstr "Check"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:78
+msgid "Crítico"
+msgstr "Critical"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:83
+msgid "Página anterior"
+msgstr "Previous page"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:84
+msgid "Página siguiente"
+msgstr "Next page"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:85
+msgid "Primera página"
+msgstr "First page"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:86
+msgid "Última página"
+msgstr "Last page"
+
+#: ../../../../js/strings.js.php:27
+msgid "Ha ocurrido un error"
+msgstr "There was an error"
+
+#: ../../../../js/strings.js.php:28 ../../../../js/strings.js.php:86
+msgid "Sesión finalizada"
+msgstr "Session finished"
+
+#: ../../../../js/strings.js.php:29
+msgid "Borrar la cuenta?"
+msgstr "Delete account?"
+
+#: ../../../../js/strings.js.php:30
+msgid "Borrar el usuario?"
+msgstr "Delete user?"
+
+#: ../../../../js/strings.js.php:31
+msgid "Guarde la configuración para que sea efectiva"
+msgstr "You should save configuration in order to take effect"
+
+#: ../../../../js/strings.js.php:32
+msgid "Clave Generada"
+msgstr "Generated Password"
+
+#: ../../../../js/strings.js.php:33
+msgid "Nivel alto"
+msgstr "High level"
+
+#: ../../../../js/strings.js.php:34
+msgid "Nivel medio"
+msgstr "Average level"
+
+#: ../../../../js/strings.js.php:35
+msgid "Nivel bajo"
+msgstr "Low level"
+
+#: ../../../../js/strings.js.php:36
+msgid "Nivel muy alto"
+msgstr "Very High level"
+
+#: ../../../../js/strings.js.php:37
+msgid "Utilizar al menos 8 caracteres"
+msgstr "You should use at least 8 characters"
+
+#: ../../../../js/strings.js.php:38
+msgid "Borrar elemento?"
+msgstr "Delete item?"
+
+#: ../../../../js/strings.js.php:39
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:8
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:17
+msgid "Página no encontrada"
+msgstr "Page not found"
+
+#: ../../../../js/strings.js.php:40
+msgid "Archivo no soportado para visualizar"
+msgstr "File not supported for preview"
+
+#: ../../../../js/strings.js.php:41
+msgid "Eliminar archivo?"
+msgstr "Delete file?"
+
+#: ../../../../js/strings.js.php:42
+msgid "Su navegador no soporta subir archivos con HTML5"
+msgstr "Your browser does not support HTML5 file uploads"
+
+#: ../../../../js/strings.js.php:43
+msgid "Demasiados archivos"
+msgstr "Too many files"
+
+#: ../../../../js/strings.js.php:44
+msgid "Tamaño de archivo no permitido"
+msgstr "File size not allowed"
+
+#: ../../../../js/strings.js.php:45
+msgid "Extensión no permitida"
+msgstr "Extension not allowed"
+
+#: ../../../../js/strings.js.php:46
+msgid "Vaciar el registro de eventos?"
+msgstr "Clear event log?"
+
+#: ../../../../js/strings.js.php:47
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:75
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:243
+#: ../../../../inc/themes/material-blue/views/config/import.inc:54
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:221
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:72
+msgid "Seleccionar Grupo"
+msgstr "Select Group"
+
+#: ../../../../js/strings.js.php:48
+#: ../../../../inc/themes/material-blue/views/config/import.inc:28
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:245
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:17
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:96
+msgid "Seleccionar Usuario"
+msgstr "Select User"
+
+#: ../../../../js/strings.js.php:49
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:56
+msgid "Seleccionar Perfil"
+msgstr "Select Profile"
+
+#: ../../../../js/strings.js.php:50
+#: ../../../../inc/themes/material-blue/views/account/account.inc:59
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:49
+msgid "Seleccionar Cliente"
+msgstr "Select Customer"
+
+#: ../../../../js/strings.js.php:51
+#: ../../../../inc/themes/material-blue/views/account/account.inc:82
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:57
+msgid "Seleccionar Categoría"
+msgstr "Select Category"
+
+#: ../../../../js/strings.js.php:52
+msgid "Sin resultados"
+msgstr "No results"
+
+#: ../../../../js/strings.js.php:53
+msgid "Opciones de clave"
+msgstr "Password options"
+
+#: ../../../../js/strings.js.php:54
+msgid "Generar clave aleatoria"
+msgstr "Generate random password"
+
+#: ../../../../js/strings.js.php:55
+msgid "Complejidad"
+msgstr "Complexity"
+
+#: ../../../../js/strings.js.php:56
+msgid "Restablecer"
+msgstr "Reset"
+
+#: ../../../../js/strings.js.php:57
+msgid "Nivel de fortaleza de la clave"
+msgstr "Password strength level"
+
+#: ../../../../js/strings.js.php:58
+msgid "Mostrar Clave"
+msgstr "Show Password"
+
+#: ../../../../js/strings.js.php:59
+#: ../../../../inc/themes/material-blue/views/account/viewpass.inc:19
+msgid "Copiar Usuario"
+msgstr "Copy Username"
+
+#: ../../../../js/strings.js.php:60
+#: ../../../../inc/themes/material-blue/views/account/viewpass.inc:30
+msgid "Copiar Clave"
+msgstr "Copy Password"
+
+#: ../../../../js/strings.js.php:61
+msgid "Incluir Números"
+msgstr "Include Numbers"
+
+#: ../../../../js/strings.js.php:62
+msgid "Incluir Mayúsculas"
+msgstr "Include Uppercase"
+
+#: ../../../../js/strings.js.php:63
+msgid "Incluir Símbolos"
+msgstr "Include Symbols"
+
+#: ../../../../js/strings.js.php:64
+msgid "Longitud"
+msgstr "Length"
+
+#: ../../../../js/strings.js.php:65
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:32
+msgid "Seleccionar Acción"
+msgstr "Select Action"
+
+#: ../../../../js/strings.js.php:66
+msgid "SI"
+msgstr "YES"
+
+#: ../../../../js/strings.js.php:67
+msgid "NO"
+msgstr "NO"
+
+#: ../../../../js/strings.js.php:68
+msgid "Aceptar"
+msgstr "Accept"
+
+#: ../../../../js/strings.js.php:69
+msgid "Cancelar"
+msgstr "Cancel"
+
+#: ../../../../js/strings.js.php:70
+msgid "Clave Copiada al Portapapeles"
+msgstr "Password Copied to Clipboard"
+
+#: ../../../../js/strings.js.php:71
+msgid "Error al copiar al portapapeles"
+msgstr "Error while copying to clipboard"
+
+#: ../../../../js/strings.js.php:73
+msgid "Recibir notificaciones?"
+msgstr "Send notifies?"
+
+#: ../../../../js/strings.js.php:74
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:133
+msgid "Marcar Favorito"
+msgstr "Mark as Favorite"
+
+#: ../../../../js/strings.js.php:75
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:123
+msgid "Eliminar Favorito"
+msgstr "Delete Favorite"
+
+#: ../../../../js/strings.js.php:76
+msgid "Limpiar Selección"
+msgstr "Clear Selection"
+
+#: ../../../../js/strings.js.php:77
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:68
+msgid "Mostrar Favoritos"
+msgstr "Show Favorites"
+
+#: ../../../../js/strings.js.php:78
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:68
+msgid "Mostrar Todos"
+msgstr "Show All"
+
+#: ../../../../js/strings.js.php:80
+msgid "Sin cambios"
+msgstr "No changes"
+
+#: ../../../../js/strings.js.php:81
+msgid "Ahora"
+msgstr "Now"
+
+#: ../../../../js/strings.js.php:82
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."
+"Este proceso importará los usuarios de LDAP detectados. Desea continuar?"
msgstr ""
-"The backup allows you to save and download either sysPass database or "
-"application files and its configuration."
+"This process will import the detected LDAP users. Would you like to continue?"
-#: ../../../../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."
+#: ../../../../js/strings.js.php:83
+msgid "Esta acción restablecerá todos los datos del plugin. Desea continuar?"
+msgstr "This action will reset all plugin data. Do you want to continue?"
-#: ../../../../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"
+#: ../../../../js/strings.js.php:84
+msgid "Este proceso puede durar algo de tiempo. Desea continuar?"
+msgstr "This process could long sometime. Do you wish to continue?"
-#: ../../../../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/material-blue/views/account/account-editpass.inc:67
+#: ../../../../inc/themes/material-blue/views/account/account.inc:135
+#: ../../../../inc/themes/material-blue/views/account/account.inc:142
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:110
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:117
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:47
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:54
+#: ../../../../inc/themes/material-blue/views/main/install.inc:62
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:42
+msgid "Clave (repetir)"
+msgstr "Password (repeat)"
-#: ../../../../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/material-blue/views/account/account-editpass.inc:78
+#: ../../../../inc/themes/material-blue/views/account/account.inc:149
+#: ../../../../inc/themes/material-blue/views/account/details.inc:131
+#: ../../../../inc/themes/material-blue/views/account/details.inc:133
+msgid "Fecha Caducidad Clave"
+msgstr "Password Expiry Date"
-#: ../../../../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/material-blue/views/account/account-editpass.inc:88
+#: ../../../../inc/themes/material-blue/views/account/account.inc:160
+msgid "Seleccionar Fecha"
+msgstr "Select date"
-#: ../../../../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 you to save the accounts and their data in XML "
-"format to be imported in another sysPass instance."
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:102
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:25
+#: ../../../../inc/themes/material-blue/views/account/request.inc:58
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:297
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:167
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:274
+#: ../../../../inc/themes/material-blue/views/config/general.inc:29
+#: ../../../../inc/themes/material-blue/views/config/import.inc:89
+#: ../../../../inc/themes/material-blue/views/config/info.inc:128
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:283
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:150
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:276
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:137
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:172
+msgid "Atrás"
+msgstr "Back"
-#: ../../../../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/material-blue/views/account/account-link.inc:65
+#: ../../../../inc/themes/material-blue/views/account/account.inc:165
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:140
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:124
+msgid "Notas"
+msgstr "Notes"
-#: ../../../../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/material-blue/views/account/account-permissions.inc:9
+msgid "Accesos"
+msgstr "Accesses"
-#: ../../../../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 all the encrypted data in "
-"the XML file."
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:20
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:104
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:117
+msgid "Permisos"
+msgstr "Permissions"
-#: ../../../../inc/themes/classic/body-start.inc:4
-#: ../../../../inc/themes/material-blue/body-start.inc:4
-msgid "Javascript es necesario para el correcto funcionamiento"
-msgstr "Javascript is needed in order to run correctly"
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:26
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:50
+msgid "Seleccionar Usuarios"
+msgstr "Select Users"
-#: ../../../../inc/themes/classic/categories.inc:10
-#: ../../../../inc/themes/material-blue/categories.inc:14
-msgid "Nombre de la categoría"
-msgstr "Category name"
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:40
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:62
+msgid "Hablitar edición"
+msgstr "Enable Edit"
-#: ../../../../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/material-blue/views/account/account-permissions.inc:48
+msgid "Seleccionar Grupos"
+msgstr "Select Groups"
-#: ../../../../inc/themes/classic/config.inc:4
-#: ../../../../inc/themes/classic/preferences.inc:4
-#: ../../../../inc/themes/material-blue/config.inc:4
-#: ../../../../inc/themes/material-blue/preferences.inc:4
-msgid "Sitio"
-msgstr "Site"
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:72
+#: ../../../../inc/themes/material-blue/views/account/details.inc:52
+#: ../../../../inc/themes/material-blue/views/account/details.inc:54
+msgid "Grupo Principal"
+msgstr "Main Group"
-#: ../../../../inc/themes/classic/config.inc:11
-#: ../../../../inc/themes/classic/preferences.inc:12
-#: ../../../../inc/themes/material-blue/config.inc:12
-#: ../../../../inc/themes/material-blue/preferences.inc:12
-msgid "Idioma"
-msgstr "Language"
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:87
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:111
+msgid "Cuenta Privada"
+msgstr "Private Account"
-#: ../../../../inc/themes/classic/config.inc:15
-#: ../../../../inc/themes/material-blue/config.inc:16
-msgid ""
-"Establece el idioma global de la aplicación. Es posible establecer un idioma "
-"por usuario en las preferencias."
-msgstr ""
-"Set the global app language. You can set a per user language at the user "
-"preferences."
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:92
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:103
+msgid "Privada"
+msgstr "Private"
-#: ../../../../inc/themes/classic/config.inc:18
-#: ../../../../inc/themes/material-blue/config.inc:19
-msgid ""
-"Para mejorar/añadir las traducciones, puede colaborar en http:://translate."
-"syspass.org"
-msgstr ""
-"To improve/add the translations, you can get involved at http:://translate."
-"syspass.org"
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:100
+msgid "Cuenta Privada Grupo"
+msgstr "Private Account for Group"
-#: ../../../../inc/themes/classic/config.inc:33
-#: ../../../../inc/themes/classic/preferences.inc:24
-#: ../../../../inc/themes/material-blue/config.inc:34
-#: ../../../../inc/themes/material-blue/preferences.inc:23
-msgid "Tema Visual"
-msgstr "Visual Theme"
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:105
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:110
+msgid "Privada Grupo"
+msgstr "Private for Group"
-#: ../../../../inc/themes/classic/config.inc:37
-#: ../../../../inc/themes/material-blue/config.inc:38
-msgid ""
-"Establece el tema visual global de la aplicación. Es posible establecer un "
-"tema visual por usuario en las preferencias."
-msgstr ""
-"Set the global app visual theme. You can set a per user visual theme at the "
-"user preferences."
+#: ../../../../inc/themes/material-blue/views/account/account.inc:11
+msgid "Histórico"
+msgstr "History"
-#: ../../../../inc/themes/classic/config.inc:52
-#: ../../../../inc/themes/material-blue/config.inc:53
-#: ../../../../inc/themes/material-blue/config.inc:61
-msgid "Timeout de sesión (s)"
-msgstr "Session timeout (s)"
+#: ../../../../inc/themes/material-blue/views/account/account.inc:182
+msgid "Seleccionar Etiquetas"
+msgstr "Select Tags"
-#: ../../../../inc/themes/classic/config.inc:61
-#: ../../../../inc/themes/material-blue/config.inc:85
-msgid "Habilitar log de eventos"
-msgstr "Enable event log"
+#: ../../../../inc/themes/material-blue/views/account/account.inc:193
+#: ../../../../inc/themes/material-blue/views/account/account.inc:195
+#: ../../../../inc/themes/material-blue/views/account/viewpass.inc:9
+msgid "Cuenta Vinculada"
+msgstr "Linked Account"
-#: ../../../../inc/themes/classic/config.inc:65
-#: ../../../../inc/themes/material-blue/config.inc:89
-msgid "Guarda las acciones realizadas en la aplicación."
-msgstr "Saves the actions done by the application."
+#: ../../../../inc/themes/material-blue/views/account/account.inc:203
+msgid "Seleccionar Cuenta"
+msgstr "Select Account"
-#: ../../../../inc/themes/classic/config.inc:77
-#: ../../../../inc/themes/material-blue/config.inc:103
-msgid "Habilitar depuración"
-msgstr "Enable debug"
+#: ../../../../inc/themes/material-blue/views/account/account.inc:210
+#: ../../../../inc/themes/material-blue/views/account/account.inc:212
+msgid "Historial"
+msgstr "History"
-#: ../../../../inc/themes/classic/config.inc:81
-#: ../../../../inc/themes/material-blue/config.inc:107
-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/material-blue/views/account/account.inc:217
+msgid "Seleccionar fecha"
+msgstr "Select date"
-#: ../../../../inc/themes/classic/config.inc:93
-#: ../../../../inc/themes/material-blue/config.inc:121
-msgid "Modo mantenimiento"
-msgstr "Maintenance mode"
+#: ../../../../inc/themes/material-blue/views/account/account.inc:229
+#: ../../../../inc/themes/material-blue/views/account/details.inc:35
+#: ../../../../inc/themes/material-blue/views/account/details.inc:37
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:198
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:200
+msgid "Última Modificación"
+msgstr "Last Modification"
-#: ../../../../inc/themes/classic/config.inc:97
-#: ../../../../inc/themes/material-blue/config.inc:125
-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/material-blue/views/account/account.inc:236
+#: ../../../../inc/themes/material-blue/views/account/account.inc:238
+#: ../../../../inc/themes/material-blue/views/account/account.inc:241
+msgid "Enlace Público"
+msgstr "Public Link"
-#: ../../../../inc/themes/classic/config.inc:109
-#: ../../../../inc/themes/material-blue/config.inc:139
-msgid "Comprobar actualizaciones"
-msgstr "Check for updates"
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:17
+msgid "Ver Actual"
+msgstr "View Current"
-#: ../../../../inc/themes/classic/config.inc:113
-#: ../../../../inc/themes/material-blue/config.inc:143
-msgid ""
-"Comprobar actualizaciones de la aplicación (sólo para los usuarios "
-"administradores)."
-msgstr "Check for application updates (only for administrators)."
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:54
+msgid "Crear Enlace Público"
+msgstr "Create Public Link"
-#: ../../../../inc/themes/classic/config.inc:125
-#: ../../../../inc/themes/material-blue/config.inc:157
-msgid "Comprobar notificaciones"
-msgstr "Check for notices"
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:130
+msgid "Modificar Cuenta"
+msgstr "Edit Account"
-#: ../../../../inc/themes/classic/config.inc:129
-#: ../../../../inc/themes/material-blue/config.inc:161
-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/material-blue/views/account/actions.inc:152
+msgid "Restaurar cuenta desde este punto"
+msgstr "Restore account from this point"
-#: ../../../../inc/themes/classic/config.inc:141
-#: ../../../../inc/themes/classic/preferences.inc:38
-#: ../../../../inc/themes/material-blue/config.inc:182
-#: ../../../../inc/themes/material-blue/preferences.inc:36
-msgid "Nombre de cuenta como enlace"
-msgstr "Account name as link"
+#: ../../../../inc/themes/material-blue/views/account/details.inc:8
+msgid "Detalles"
+msgstr "Details"
-#: ../../../../inc/themes/classic/config.inc:145
-#: ../../../../inc/themes/classic/preferences.inc:43
-#: ../../../../inc/themes/material-blue/config.inc:186
-#: ../../../../inc/themes/material-blue/preferences.inc:40
+#: ../../../../inc/themes/material-blue/views/account/details.inc:26
+#: ../../../../inc/themes/material-blue/views/account/details.inc:28
+msgid "Fecha Alta"
+msgstr "Date Added"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:44
+#: ../../../../inc/themes/material-blue/views/account/details.inc:46
+msgid "Creador"
+msgstr "Creator"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:61
+#: ../../../../inc/themes/material-blue/views/account/details.inc:63
+msgid "Usuarios Secundarios"
+msgstr "Secondary Users"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:83
+#: ../../../../inc/themes/material-blue/views/account/details.inc:85
+msgid "Grupos Secundarios"
+msgstr "Secondary Groups"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:106
+#: ../../../../inc/themes/material-blue/views/account/details.inc:108
+msgid "Fecha Edición"
+msgstr "Date Modified"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:114
+#: ../../../../inc/themes/material-blue/views/account/details.inc:116
+msgid "Editor"
+msgstr "Editor"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:123
+#: ../../../../inc/themes/material-blue/views/account/details.inc:125
+msgid "Fecha de Clave"
+msgstr "Password Date"
+
+#: ../../../../inc/themes/material-blue/views/account/files.inc:37
+msgid "Soltar archivos aquí (max. 5) o click para seleccionar"
+msgstr "Drop files here (max. 5) or click to select"
+
+#: ../../../../inc/themes/material-blue/views/account/files.inc:37
+#, php-format
+msgid "Tamaño máximo de archivo: %d MB"
+msgstr "Maximum file size: %d MB"
+
+#: ../../../../inc/themes/material-blue/views/account/linkedAccounts.inc:3
+msgid "Cuentas Vinculadas"
+msgstr "Linked Accounts"
+
+#: ../../../../inc/themes/material-blue/views/account/request.inc:4
+msgid "Solicitar Modificación de Cuenta"
+msgstr "Request Account Modification"
+
+#: ../../../../inc/themes/material-blue/views/account/request.inc:36
+msgid "Petición"
+msgstr "Request"
+
+#: ../../../../inc/themes/material-blue/views/account/request.inc:42
+msgid "Descripción de la petición"
+msgstr "Request Description"
+
+#: ../../../../inc/themes/material-blue/views/account/request.inc:65
+msgid "Enviar"
+msgstr "Send"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/index.inc:11
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:11
+msgid "No se encontraron registros"
+msgstr "No records found"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:24
+msgid "Buscar en Wiki"
+msgstr "Search in Wiki"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:71
+msgid "Abrir enlace a"
+msgstr "Open link to"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:95
+msgid "Clave Caducada"
+msgstr "Password Expired"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:149
+msgid "Archivos adjuntos"
+msgstr "Attachments"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:159
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:170
+msgid "Enlace a Wiki"
+msgstr "Link to Wiki"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:162
+msgid "Ver en Wiki"
+msgstr "View at Wiki"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:22
+msgid "Parámetros especiales:"
+msgstr "Special parameters"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:25
+msgid "Buscar cuentas a las que 'login' tenga acceso"
+msgstr "Search accounts for which 'login' has access rights"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:26
+msgid "Devolver las cuentas en las que 'login' es propietario"
+msgstr "Get the accounts in which the user with login \"login\" is the owner"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:27
+msgid "Buscar cuentas a las que 'group_name' tenga acceso"
+msgstr "Search accounts for which 'group_name' has access rights"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:28
+msgid "Devolver las cuentas con grupo principal 'group_name'"
+msgstr "Get the accounts which have the main group with name \"group_name\""
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:29
+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/material-blue/views/accountsearch/searchbox.inc:30
+msgid "Buscar cuentas con la clave caducada"
+msgstr "Search for accounts with expired password"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:31
+msgid "Devolver las cuentas privadas del usuario actual"
+msgstr "Get the private accounts for the current user"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:39
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:43
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:124
+msgid "Búsqueda global"
+msgstr "Global search"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:71
+msgid "Filtrar Favoritos"
+msgstr "Favorites Filtering"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:85
+msgid "Cuentas por página"
+msgstr "Accounts per page"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:91
+msgid "Más Filtros"
+msgstr "More Filters"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:96
+msgid "Seleccionar Etiqueta"
+msgstr "Select Tag"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:12
+msgid "Búsqueda"
+msgstr "Searching"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:18
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:47
+msgid "Resultados por página"
+msgstr "Results per page"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:23
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:52
+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/material-blue/views/config/accounts.inc:34
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:63
+msgid "Número de resultados por página"
+msgstr "Results per page"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:44
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:73
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:157
-#: ../../../../inc/themes/material-blue/config.inc:286
-msgid "Gestión de archivos"
-msgstr "Files management"
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:53
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:82
+msgid "Nombre de cuenta como enlace"
+msgstr "Account name as link"
-#: ../../../../inc/themes/classic/config.inc:161
-#: ../../../../inc/themes/material-blue/config.inc:290
-msgid "Habilita la subida/descarga de archivos para las cuentas."
-msgstr "Enables the uploads/downloads of account files."
-
-#: ../../../../inc/themes/classic/config.inc:173
-#: ../../../../inc/themes/material-blue/config.inc:200
-msgid "Búsquedas globales"
-msgstr "Global searches"
-
-#: ../../../../inc/themes/classic/config.inc:177
-#: ../../../../inc/themes/material-blue/config.inc:204
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:63
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."
@@ -3568,23 +4431,103 @@ msgstr ""
"Allows the users to do searches that includes all accounts, if they don't "
"have permission they can't view the accounts details."
-#: ../../../../inc/themes/classic/config.inc:189
-#: ../../../../inc/themes/material-blue/config.inc:305
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:72
+msgid "Búsquedas globales"
+msgstr "Global searches"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:82
+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/material-blue/views/config/accounts.inc:86
+msgid "Util para entornos donde copiar la clave supone un riesgo de seguridad."
+msgstr ""
+"Useful for environments where copying a password to clipboard is a security "
+"risk."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:96
+msgid "Imagen para mostrar clave"
+msgstr "Image to show password"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:106
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:146
+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/material-blue/views/config/accounts.inc:116
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:155
+msgid "Resultados en Tarjetas"
+msgstr "Results like Cards"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:123
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:189
+msgid "Enlaces Públicos"
+msgstr "Public Links"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:133
+msgid ""
+"Habilita la posibilidad de generar enlaces públicos para ver los detalles de "
+"una cuenta."
+msgstr ""
+"Enables the ability to create public links to view an account's details"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:137
+msgid ""
+"Las cuentas enlazadas serán visibles por cualquiera que disponga del enlace."
+msgstr "The linked accounts will be visible by anyone that have the link."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:141
+msgid ""
+"Para crear enlaces, los usuarios tienen que tener activada la opción en su "
+"perfl."
+msgstr ""
+"To create links, the users must have activated the option in their profiles."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:151
+msgid "Habilitar Enlaces Públicos"
+msgstr "Enable Public Links"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:157
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:166
+msgid "Tiempo de caducidad"
+msgstr "Expire time"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:172
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:181
+msgid "Número máximo de visitas"
+msgstr "Maximum visits"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:191
+msgid "La clave de la cuenta es visualizada como una imagen."
+msgstr "The account password is shown as image."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:201
+msgid "Usar imagen para clave"
+msgstr "Use an image for password"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:218
+msgid "Habilita la subida/descarga de archivos para las cuentas."
+msgstr "Enables the uploads/downloads of account files."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:228
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:203
+msgid "Gestión de archivos"
+msgstr "Files management"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:234
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:252
msgid "Extensiones de archivos permitidas"
msgstr "Allowed file extensions"
-#: ../../../../inc/themes/classic/config.inc:193
-#: ../../../../inc/themes/material-blue/config.inc:309
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:239
msgid "Extensiones permitidas para la subida de archivos."
-msgstr "Allowed file extensions for file uploading."
+msgstr "Allowed file extensions for uploading."
-#: ../../../../inc/themes/classic/config.inc:197
-#: ../../../../inc/themes/material-blue/config.inc:313
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:243
msgid "Se permite un máximo de 4 caracteres."
msgstr "Max 4 characters allowed."
-#: ../../../../inc/themes/classic/config.inc:201
-#: ../../../../inc/themes/material-blue/config.inc:317
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:247
msgid ""
"Escribir extensión y pulsar intro para añadir. Es necesario guardar la "
"configuración."
@@ -3592,166 +4535,165 @@ msgstr ""
"Write the extension and press enter to add. Remember to save the "
"configuration."
-#: ../../../../inc/themes/classic/config.inc:216
-#: ../../../../inc/themes/material-blue/config.inc:332
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:260
+msgid "Tamaño máximo de archivo"
+msgstr "Maximum file size"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:265
msgid "Establece el tamaño máximo para subir archivos."
msgstr "Set the maximum file size for uploading."
-#: ../../../../inc/themes/classic/config.inc:220
-#: ../../../../inc/themes/material-blue/config.inc:336
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:269
msgid "El máximo absuluto es de 16MB."
msgstr "The absolute maximum is 16MB."
-#: ../../../../inc/themes/classic/config.inc:231
-#: ../../../../inc/themes/classic/preferences.inc:56
-#: ../../../../inc/themes/material-blue/config.inc:218
-#: ../../../../inc/themes/material-blue/preferences.inc:54
-msgid "Resultados por página"
-msgstr "Results per page"
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:280
+msgid "Tamaño máximo de archivo en bytes"
+msgstr "Maximum file size in bytes"
-#: ../../../../inc/themes/classic/config.inc:235
-#: ../../../../inc/themes/classic/preferences.inc:61
-#: ../../../../inc/themes/material-blue/config.inc:222
-#: ../../../../inc/themes/material-blue/preferences.inc:58
-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/material-blue/views/config/backup.inc:13
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:16
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:98
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:101
+msgid "Resultado"
+msgstr "Result"
-#: ../../../../inc/themes/classic/config.inc:246
-#: ../../../../inc/themes/material-blue/config.inc:260
-msgid "Resultados en Tarjetas"
-msgstr "Results like Cards"
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:24
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:27
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:109
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:112
+msgid "Descargar Actual"
+msgstr "Download Current"
-#: ../../../../inc/themes/classic/config.inc:250
-#: ../../../../inc/themes/material-blue/config.inc:264
-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/material-blue/views/config/backup.inc:33
+msgid "Copia BBDD"
+msgstr "DB Backup"
-#: ../../../../inc/themes/classic/config.inc:262
-#: ../../../../inc/themes/material-blue/config.inc:238
-msgid "Imagen para mostrar clave"
-msgstr "Image to show password"
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:40
+msgid "Copia sysPass"
+msgstr "sysPass Backup"
-#: ../../../../inc/themes/classic/config.inc:266
-#: ../../../../inc/themes/material-blue/config.inc:242
-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/material-blue/views/config/backup.inc:43
+msgid "No hay backups para descargar"
+msgstr "There aren't any backups for download"
-#: ../../../../inc/themes/classic/config.inc:269
-#: ../../../../inc/themes/material-blue/config.inc:245
-msgid "Util para entornos donde copiar la clave supone un riesgo de seguridad."
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:71
+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 ""
-"Useful for environments where copying a password to clipboard is a security "
-"risk."
+"The backup allows you to save and download either sysPass database or "
+"application files and its configuration."
-#: ../../../../inc/themes/classic/config.inc:304
-#: ../../../../inc/themes/material-blue/config.inc:454
-msgid "Añadir extensión"
-msgstr "Add extension"
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:73
+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/config.inc:305
-#: ../../../../inc/themes/material-blue/config.inc:455
-msgid "Eliminar extensión"
-msgstr "Delete extension"
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:88
+msgid "Exportar Cuentas"
+msgstr "Export Accounts"
-#: ../../../../inc/themes/classic/customers.inc:10
-#: ../../../../inc/themes/material-blue/customers.inc:14
-msgid "Nombre del cliente"
-msgstr "Customer name"
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:122
+msgid "No hay archivos XML para descargar"
+msgstr "There aren't any XML files for download"
-#: ../../../../inc/themes/classic/customers.inc:18
-#: ../../../../inc/themes/material-blue/customers.inc:26
-msgid "Descripción del cliente"
-msgstr "Customer description"
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:129
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:137
+msgid "Clave de Exportación"
+msgstr "Export Password"
-#: ../../../../inc/themes/classic/customfields.inc:38
-#: ../../../../inc/themes/material-blue/customfields.inc:41
-msgid "Texto Ayuda"
-msgstr "Help Text"
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:143
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:151
+msgid "Clave de Exportación (repetir)"
+msgstr "Export Password (repeat)"
-#: ../../../../inc/themes/classic/customfields.inc:44
-#: ../../../../inc/themes/material-blue/customfields.inc:52
-msgid "Obligatorio"
-msgstr "Required"
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:180
+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 you to save the accounts and their data in XML "
+"format to be imported in another sysPass instance."
-#: ../../../../inc/themes/classic/encryption.inc:5
-#: ../../../../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:5
-#: ../../../../inc/themes/material-blue/install.inc:52
-#: ../../../../inc/themes/material-blue/install.inc:59
-#: ../../../../inc/themes/material-blue/login.inc:26
-#: ../../../../inc/themes/material-blue/login.inc:49
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:182
+msgid "Los elementos exportados son cuentas, clientes y categorías."
+msgstr "The exported items are accounts, customers and categories."
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:184
+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/material-blue/views/config/backup.inc:186
+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 all the encrypted data in "
+"the XML file."
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:8
+#: ../../../../inc/themes/material-blue/views/config/import.inc:148
+#: ../../../../inc/themes/material-blue/views/config/import.inc:163
+#: ../../../../inc/themes/material-blue/views/main/install.inc:48
+#: ../../../../inc/themes/material-blue/views/main/install.inc:54
+#: ../../../../inc/themes/material-blue/views/main/login.inc:49
msgid "Clave Maestra"
msgstr "Master Password"
-#: ../../../../inc/themes/classic/encryption.inc:13
-#: ../../../../inc/themes/classic/encryption.inc:113
-#: ../../../../inc/themes/material-blue/encryption.inc:13
-#: ../../../../inc/themes/material-blue/encryption.inc:128
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:18
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:21
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:167
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:170
msgid "Último cambio"
msgstr "Last Change"
-#: ../../../../inc/themes/classic/encryption.inc:22
-#: ../../../../inc/themes/material-blue/encryption.inc:22
-#: ../../../../inc/themes/material-blue/encryption.inc:28
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:29
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:37
msgid "Clave Maestra actual"
msgstr "Current Master Password"
-#: ../../../../inc/themes/classic/encryption.inc:31
-#: ../../../../inc/themes/material-blue/encryption.inc:34
-#: ../../../../inc/themes/material-blue/encryption.inc:40
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:43
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:51
msgid "Nueva Clave Maestra"
msgstr "New Master Password"
-#: ../../../../inc/themes/classic/encryption.inc:40
-#: ../../../../inc/themes/material-blue/encryption.inc:46
-#: ../../../../inc/themes/material-blue/encryption.inc:52
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:57
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:65
msgid "Nueva Clave Maestra (repetir)"
msgstr "New Master Password (repeat)"
-#: ../../../../inc/themes/classic/encryption.inc:48
-#: ../../../../inc/themes/material-blue/encryption.inc:58
-msgid "No modificar cuentas"
-msgstr "Do not modify accounts"
-
-#: ../../../../inc/themes/classic/encryption.inc:53
-#: ../../../../inc/themes/material-blue/encryption.inc:63
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:75
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:64
-#: ../../../../inc/themes/material-blue/encryption.inc:76
-msgid "Confirmar cambio"
-msgstr "Confirm Change"
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:83
+msgid "No modificar cuentas"
+msgstr "Do not modify accounts"
-#: ../../../../inc/themes/classic/encryption.inc:67
-#: ../../../../inc/themes/classic/encryption.inc:70
-#: ../../../../inc/themes/classic/encryption.inc:73
-#: ../../../../inc/themes/classic/import.inc:64
-#: ../../../../inc/themes/classic/security.inc:43
-msgid "Atención"
-msgstr "Warning"
-
-#: ../../../../inc/themes/classic/encryption.inc:68
-#: ../../../../inc/themes/material-blue/encryption.inc:80
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:92
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:71
-#: ../../../../inc/themes/material-blue/encryption.inc:83
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:96
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:74
-#: ../../../../inc/themes/material-blue/encryption.inc:86
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:100
msgid "Los usuarios deberán de introducir la nueva clave maestra."
msgstr "Users will need to enter the new Master Password."
-#: ../../../../inc/themes/classic/encryption.inc:95
-#: ../../../../inc/themes/material-blue/encryption.inc:109
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:106
+msgid "Confirmar cambio"
+msgstr "Confirm Change"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:128
msgid ""
"La clave maestra es utilizada para encriptar las claves de las cuentas de "
"sysPass para mantenerlas seguras."
@@ -3759,8 +4701,7 @@ msgstr ""
"The Master Password is used to encryt sysPass accounts passwords and keep "
"them safe."
-#: ../../../../inc/themes/classic/encryption.inc:97
-#: ../../../../inc/themes/material-blue/encryption.inc:111
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:130
msgid ""
"Es recomendable cambiarla cada cierto tiempo y utilizar una clave compleja "
"que incluya números, letras y símbolos."
@@ -3768,265 +4709,249 @@ 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:105
-#: ../../../../inc/themes/material-blue/encryption.inc:121
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:140
+msgid "Actualizar hash de clave maestra"
+msgstr "Update master password hash"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:156
msgid "Clave Temporal"
msgstr "Temporary Password"
-#: ../../../../inc/themes/classic/encryption.inc:116
-#: ../../../../inc/themes/classic/encryption.inc:127
-#: ../../../../inc/themes/material-blue/encryption.inc:131
-#: ../../../../inc/themes/material-blue/encryption.inc:142
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:172
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:185
msgid "No generada"
msgstr "Not generated"
-#: ../../../../inc/themes/classic/encryption.inc:121
-#: ../../../../inc/themes/material-blue/encryption.inc:136
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:177
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:180
msgid "Válido hasta"
msgstr "Valid until"
-#: ../../../../inc/themes/classic/encryption.inc:133
-#: ../../../../inc/themes/material-blue/encryption.inc:148
-#: ../../../../inc/themes/material-blue/encryption.inc:154
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:191
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:194
+msgid "Intentos"
+msgstr "Attempts"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:201
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:210
msgid "Validez (s)"
msgstr "Life (s)"
-#: ../../../../inc/themes/classic/encryption.inc:136
-msgid "Validez"
-msgstr "Life"
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:222
+msgid ""
+"Envía un correo a todos los usuarios o sólo a los del grupo seleccionado."
+msgstr "Sends an email to all users or only to those whose group is selected."
-#: ../../../../inc/themes/classic/encryption.inc:164
-#: ../../../../inc/themes/material-blue/encryption.inc:183
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:230
+msgid "Enviar correo"
+msgstr "Send email"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:288
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 it during login. This waythere is no need to tell them the real "
+"to enter it during login. By this way there is no need to tell them the real "
"Master Password."
-#: ../../../../inc/themes/classic/encryption.inc:166
-#: ../../../../inc/themes/material-blue/encryption.inc:187
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:294
msgid "Generar"
msgstr "Generate"
-#: ../../../../inc/themes/classic/eventlog.inc:6
-#: ../../../../inc/themes/classic/search.inc:3
-#: ../../../../inc/themes/material-blue/eventlog.inc:6
-#: ../../../../inc/themes/material-blue/search.inc:3
-msgid "No se encontraron registros"
-msgstr "No records found"
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:4
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:61
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:63
+msgid "Eventos"
+msgstr "Events"
-#: ../../../../inc/themes/classic/eventlog.inc:17
-#: ../../../../inc/themes/material-blue/eventlog.inc:17
-msgid "Fecha / Hora"
-msgstr "Date / Time"
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:13
+msgid "Guarda las acciones realizadas en la aplicación."
+msgstr "Saves the actions done by the application."
-#: ../../../../inc/themes/classic/eventlog.inc:20
-#: ../../../../inc/themes/material-blue/eventlog.inc:20
-msgid "Evento"
-msgstr "Event"
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:21
+msgid "Habilitar log de eventos"
+msgstr "Enable event log"
-#: ../../../../inc/themes/classic/eventlog.inc:26
-#: ../../../../inc/themes/material-blue/eventlog.inc:26
-msgid "IP"
-msgstr "IP"
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:32
+msgid "Habilitar Syslog"
+msgstr "Enable Syslog"
-#: ../../../../inc/themes/classic/eventlog.inc:84
-#: ../../../../inc/themes/classic/search.inc:20
-#: ../../../../inc/themes/classic/search.inc:199
-#: ../../../../inc/themes/material-blue/eventlog.inc:84
-#: ../../../../inc/themes/material-blue/search.inc:20
-#: ../../../../inc/themes/material-blue/search.inc:209
-msgid "Primera página"
-msgstr "First page"
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:43
+msgid "Habilitar Syslog Remoto"
+msgstr "Enable Remote Syslog"
-#: ../../../../inc/themes/classic/eventlog.inc:86
-#: ../../../../inc/themes/classic/search.inc:22
-#: ../../../../inc/themes/classic/search.inc:201
-#: ../../../../inc/themes/material-blue/eventlog.inc:86
-#: ../../../../inc/themes/material-blue/search.inc:22
-#: ../../../../inc/themes/material-blue/search.inc:211
-msgid "Página anterior"
-msgstr "Previous page"
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:57
+msgid "Nombre o dirección IP"
+msgstr "Hostname or IP address"
-#: ../../../../inc/themes/classic/eventlog.inc:91
-#: ../../../../inc/themes/classic/search.inc:27
-#: ../../../../inc/themes/classic/search.inc:206
-#: ../../../../inc/themes/material-blue/eventlog.inc:91
-#: ../../../../inc/themes/material-blue/search.inc:27
-#: ../../../../inc/themes/material-blue/search.inc:216
-msgid "Página siguiente"
-msgstr "Next page"
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:63
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:71
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:33
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:40
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:47
+msgid "Puerto"
+msgstr "Port"
-#: ../../../../inc/themes/classic/eventlog.inc:93
-#: ../../../../inc/themes/classic/search.inc:29
-#: ../../../../inc/themes/classic/search.inc:208
-#: ../../../../inc/themes/material-blue/eventlog.inc:93
-#: ../../../../inc/themes/material-blue/search.inc:29
-#: ../../../../inc/themes/material-blue/search.inc:218
-msgid "Última página"
-msgstr "Last page"
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:2
+msgid "Proxy"
+msgstr "Proxy"
-#: ../../../../inc/themes/classic/files.inc:22
-#: ../../../../inc/themes/material-blue/files.inc:21
-msgid "Ver Archivo"
-msgstr "View File"
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:13
+msgid "Usar Proxy"
+msgstr "Use Proxy"
-#: ../../../../inc/themes/classic/footer.inc:6
-#: ../../../../inc/themes/material-blue/footer.inc:29
-msgid "Indica si la conexión utiliza HTTPS."
-msgstr "It tells if the connection uses HTTPS"
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:27
+msgid "Servidor proxy"
+msgstr "Proxy server"
-#: ../../../../inc/themes/classic/footer.inc:6
-#: ../../../../inc/themes/material-blue/footer.inc:29
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:41
+msgid "Puerto del servidor proxy"
+msgstr "Proxy server port"
+
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:55
+msgid "Usuario del servidor proxy"
+msgstr "Proxy server user"
+
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:69
+msgid "Clave del servidor proxy"
+msgstr "Proxy server password"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:4
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:7
+msgid "Sitio"
+msgstr "Site"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:10
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:24
+#: ../../../../inc/themes/material-blue/views/config/info.inc:78
+#: ../../../../inc/themes/material-blue/views/config/info.inc:92
+#: ../../../../inc/themes/material-blue/views/main/install.inc:135
+#: ../../../../inc/themes/material-blue/views/main/install.inc:136
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:19
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:21
+msgid "Idioma"
+msgstr "Language"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:15
msgid ""
-"Las claves de formularios enviados se encriptan mediante PKI, el resto de "
-"datos no."
+"Establece el idioma global de la aplicación. Es posible establecer un idioma "
+"por usuario en las preferencias."
msgstr ""
-"The passwords sent from the forms are encrypted with PKI, the other data not."
+"Set the global app language. You can set a per user language at the user "
+"preferences."
-#: ../../../../inc/themes/classic/footer.inc:6
-msgid "Seguro"
-msgstr "Secure"
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:19
+msgid ""
+"Para mejorar/añadir las traducciones, puede colaborar en https://poeditor."
+"com/join/project/fmlsBuugyv"
+msgstr ""
+"To improve/add the translations, you can get involved at https://poeditor."
+"com/join/project/fmlsBuugyv"
-#: ../../../../inc/themes/classic/footer.inc:6
-msgid "Inseguro"
-msgstr "Insecure"
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:36
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:46
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:32
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:34
+msgid "Tema Visual"
+msgstr "Visual Theme"
-#: ../../../../inc/themes/classic/footer.inc:11
-#: ../../../../inc/themes/material-blue/footer.inc:18
-msgid "Ayuda :: FAQ :: Changelog"
-msgstr "Help :: FAQ :: Changelog"
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:41
+msgid ""
+"Establece el tema visual global de la aplicación. Es posible establecer un "
+"tema visual por usuario en las preferencias."
+msgstr ""
+"Set the global app visual theme. You can set a per user visual theme at the "
+"user preferences."
-#: ../../../../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/material-blue/views/config/general-site.inc:59
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:67
+msgid "Timeout de sesión (s)"
+msgstr "Session timeout (s)"
-#: ../../../../inc/themes/classic/groups.inc:10
-#: ../../../../inc/themes/material-blue/groups.inc:14
-msgid "Nombre del grupo"
-msgstr "Group name"
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:77
+msgid "Fuerza para que todas las conexiones sean a través de HTTPS."
+msgstr "It forces the use of HTTPS on all the connections"
-#: ../../../../inc/themes/classic/groups.inc:18
-#: ../../../../inc/themes/material-blue/groups.inc:26
-msgid "Descripción del grupo"
-msgstr "Group description"
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:86
+msgid "Forzar HTTPS"
+msgstr "Force HTTPS"
-#: ../../../../inc/themes/classic/import.inc:4
-#: ../../../../inc/themes/material-blue/import.inc:119
-msgid "Importar phpPMS"
-msgstr "phpPMS Import"
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:96
+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/import.inc:11
-#: ../../../../inc/themes/classic/install.inc:63
-#: ../../../../inc/themes/classic/install.inc:64
-#: ../../../../inc/themes/material-blue/import.inc:126
-#: ../../../../inc/themes/material-blue/import.inc:138
-msgid "Usuario BBDD"
-msgstr "DB Username"
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:104
+msgid "Habilitar depuración"
+msgstr "Enable debug"
-#: ../../../../inc/themes/classic/import.inc:15
-#: ../../../../inc/themes/material-blue/import.inc:130
-msgid "Indicar el usuario de conexión a la base de datos de phpPMS."
-msgstr "Provide the phpPMS database connection user."
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:114
+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/import.inc:25
-#: ../../../../inc/themes/classic/install.inc:71
-#: ../../../../inc/themes/classic/install.inc:73
-#: ../../../../inc/themes/material-blue/import.inc:144
-#: ../../../../inc/themes/material-blue/import.inc:150
-msgid "Clave BBDD"
-msgstr "DB Password"
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:122
+msgid "Modo mantenimiento"
+msgstr "Maintenance mode"
-#: ../../../../inc/themes/classic/import.inc:33
-#: ../../../../inc/themes/classic/install.inc:78
-#: ../../../../inc/themes/classic/install.inc:79
-#: ../../../../inc/themes/material-blue/import.inc:156
-#: ../../../../inc/themes/material-blue/import.inc:168
-msgid "Nombre BBDD"
-msgstr "DB Name"
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:132
+msgid ""
+"Comprobar actualizaciones de la aplicación (sólo para los usuarios "
+"administradores)."
+msgstr "Check for application updates (only for administrators)."
-#: ../../../../inc/themes/classic/import.inc:37
-#: ../../../../inc/themes/material-blue/import.inc:160
-msgid "Indicar el nombre de la base de datos de phpPMS."
-msgstr "Provide the phpPMS database name."
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:140
+msgid "Comprobar actualizaciones"
+msgstr "Check for updates"
-#: ../../../../inc/themes/classic/import.inc:47
-#: ../../../../inc/themes/classic/install.inc:87
-#: ../../../../inc/themes/classic/install.inc:88
-#: ../../../../inc/themes/material-blue/import.inc:174
-#: ../../../../inc/themes/material-blue/import.inc:186
-msgid "Servidor BBDD"
-msgstr "DB Server"
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:150
+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/import.inc:51
-#: ../../../../inc/themes/material-blue/import.inc:178
-msgid "Indicar el servidor de la base de datos de phpPMS."
-msgstr "Provide the phpPMS database server."
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:158
+msgid "Comprobar notificaciones"
+msgstr "Check for notices"
-#: ../../../../inc/themes/classic/import.inc:61
-#: ../../../../inc/themes/material-blue/import.inc:192
-msgid "Confirmar"
-msgstr "Confirm"
-
-#: ../../../../inc/themes/classic/import.inc:65
-#: ../../../../inc/themes/material-blue/import.inc:196
-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:80
-msgid "Iniciar"
-msgstr "Start"
-
-#: ../../../../inc/themes/classic/import.inc:86
-#: ../../../../inc/themes/material-blue/import.inc:4
+#: ../../../../inc/themes/material-blue/views/config/import.inc:8
msgid "Importar CSV/XML"
msgstr "CSV/XML Import"
-#: ../../../../inc/themes/classic/import.inc:93
-#: ../../../../inc/themes/material-blue/import.inc:11
+#: ../../../../inc/themes/material-blue/views/config/import.inc:14
+#: ../../../../inc/themes/material-blue/views/config/import.inc:24
msgid "Usuario por Defecto"
msgstr "Default User"
-#: ../../../../inc/themes/classic/import.inc:97
-#: ../../../../inc/themes/material-blue/import.inc:15
+#: ../../../../inc/themes/material-blue/views/config/import.inc:19
msgid "Define el usuario por defecto para las cuentas importadas."
msgstr "Defines the default user for the accounts imported."
-#: ../../../../inc/themes/classic/import.inc:114
-#: ../../../../inc/themes/classic/ldap.inc:144
-#: ../../../../inc/themes/material-blue/import.inc:33
-#: ../../../../inc/themes/material-blue/ldap.inc:170
+#: ../../../../inc/themes/material-blue/views/config/import.inc:40
+#: ../../../../inc/themes/material-blue/views/config/import.inc:50
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:207
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:217
msgid "Grupo por Defecto"
msgstr "Default Group"
-#: ../../../../inc/themes/classic/import.inc:118
-#: ../../../../inc/themes/material-blue/import.inc:37
+#: ../../../../inc/themes/material-blue/views/config/import.inc:45
msgid "Define el grupo por defecto para las cuentas importadas."
msgstr "Defines the default group for the accounts imported."
-#: ../../../../inc/themes/classic/import.inc:135
-#: ../../../../inc/themes/material-blue/import.inc:55
-#: ../../../../inc/themes/material-blue/import.inc:61
-msgid "Clave de Importación"
-msgstr "Import Password"
-
-#: ../../../../inc/themes/classic/import.inc:143
-#: ../../../../inc/themes/material-blue/import.inc:67
-#: ../../../../inc/themes/material-blue/import.inc:73
-msgid "Delimitador CSV"
-msgstr "CSV delimiter"
-
-#: ../../../../inc/themes/classic/import.inc:157
-#: ../../../../inc/themes/material-blue/import.inc:85
+#: ../../../../inc/themes/material-blue/views/config/import.inc:74
msgid "Soltar archivo aquí o click para seleccionar"
msgstr "Drop files here or click to select"
-#: ../../../../inc/themes/classic/import.inc:173
-#: ../../../../inc/themes/material-blue/import.inc:102
+#: ../../../../inc/themes/material-blue/views/config/import.inc:102
msgid ""
"Permite realizar la importación de Cuentas, Categorías y Clientes desde "
"archivos XML y CSV."
@@ -4034,21 +4959,18 @@ msgstr ""
"Allows you to make the Accounts, Categories and Customers import from XML or "
"CSV files."
-#: ../../../../inc/themes/classic/import.inc:175
-#: ../../../../inc/themes/material-blue/import.inc:104
+#: ../../../../inc/themes/material-blue/views/config/import.inc:104
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:177
-#: ../../../../inc/themes/material-blue/import.inc:106
+#: ../../../../inc/themes/material-blue/views/config/import.inc:106
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:179
-#: ../../../../inc/themes/material-blue/import.inc:108
+#: ../../../../inc/themes/material-blue/views/config/import.inc:108
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."
@@ -4056,18 +4978,19 @@ 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:181
-#: ../../../../inc/themes/material-blue/import.inc:110
+#: ../../../../inc/themes/material-blue/views/config/import.inc:110
msgid "La importación de archivos CSV se realiza con el siguiente formato:"
msgstr "The CSV import file requires the following format:"
-#: ../../../../inc/themes/classic/import.inc:183
-#: ../../../../inc/themes/material-blue/import.inc:112
-msgid "nombre_de_cuenta;cliente;categoría;url;usuario;clave;notas"
-msgstr "account_name;customer;category;url;user;password;notes"
+#: ../../../../inc/themes/material-blue/views/config/import.inc:112
+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:185
-#: ../../../../inc/themes/material-blue/import.inc:114
+#: ../../../../inc/themes/material-blue/views/config/import.inc:114
msgid ""
"En todos los casos, si el cliente o la categoría no están creados, se crean "
"automáticamente."
@@ -4075,953 +4998,202 @@ msgstr ""
"In all cases, if the customer or category do not exist the will be created "
"automatically."
-#: ../../../../inc/themes/classic/info.inc:4
-#: ../../../../inc/themes/material-blue/info.inc:4
+#: ../../../../inc/themes/material-blue/views/config/import.inc:121
+msgid "XML"
+msgstr "XML"
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:127
+#: ../../../../inc/themes/material-blue/views/config/import.inc:142
+msgid "Clave de Importación"
+msgstr "Import Password"
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:132
+msgid "Sólo es necesaria para archivos XML de sysPass encriptados."
+msgstr "It's only needed for sysPass XML files that have been encrypted."
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:153
+msgid ""
+"Sólo es necesaria para archivos XML de sysPass con clave maestra distinta de "
+"la actual."
+msgstr ""
+"It's only needed for sysPass XML files that have been encrypted with a "
+"different master password from the current one."
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:170
+msgid "CSV"
+msgstr "CSV"
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:176
+#: ../../../../inc/themes/material-blue/views/config/import.inc:191
+msgid "Delimitador CSV"
+msgstr "CSV delimiter"
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:181
+msgid "Sólo es necesario para archivos CSV."
+msgstr "It's only needed for CSV files."
+
+#: ../../../../inc/themes/material-blue/views/config/info.inc:5
msgid "Información de la Aplicación"
msgstr "Application Information"
-#: ../../../../inc/themes/classic/info.inc:10
-#: ../../../../inc/themes/material-blue/info.inc:10
+#: ../../../../inc/themes/material-blue/views/config/info.inc:11
+#: ../../../../inc/themes/material-blue/views/config/info.inc:14
msgid "Versión sysPass"
msgstr "sysPass version"
-#: ../../../../inc/themes/classic/info.inc:18
-#: ../../../../inc/themes/material-blue/info.inc:18
+#: ../../../../inc/themes/material-blue/views/config/info.inc:21
+#: ../../../../inc/themes/material-blue/views/config/info.inc:24
msgid "Base de Datos"
msgstr "Database"
-#: ../../../../inc/themes/classic/info.inc:30
-#: ../../../../inc/themes/material-blue/info.inc:30
+#: ../../../../inc/themes/material-blue/views/config/info.inc:35
+#: ../../../../inc/themes/material-blue/views/config/info.inc:38
msgid "PHP"
msgstr "PHP"
-#: ../../../../inc/themes/classic/info.inc:35
-#: ../../../../inc/themes/material-blue/info.inc:35
+#: ../../../../inc/themes/material-blue/views/config/info.inc:42
msgid "Extensiones"
msgstr "Extensions"
-#: ../../../../inc/themes/classic/info.inc:37
-#: ../../../../inc/themes/material-blue/info.inc:37
+#: ../../../../inc/themes/material-blue/views/config/info.inc:44
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:372
-#: ../../../../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/mail.inc:24
-#: ../../../../inc/themes/material-blue/mail.inc:30
-msgid "Servidor"
-msgstr "Server"
+#: ../../../../inc/themes/material-blue/views/config/info.inc:49
+msgid "OP Cache"
+msgstr "OP Cache"
-#: ../../../../inc/themes/classic/install.inc:4
-#: ../../../../inc/themes/material-blue/install.inc:4
-msgid "Instalación "
-msgstr "Installation"
+#: ../../../../inc/themes/material-blue/views/config/info.inc:68
+#: ../../../../inc/themes/material-blue/views/config/info.inc:71
+msgid "Copia de Configuración"
+msgstr "Configuration Backup"
-#: ../../../../inc/themes/classic/install.inc:25
-#: ../../../../inc/themes/material-blue/install.inc:26
-msgid "Crear cuenta de admin de sysPass"
-msgstr "Create sysPass admin account"
+#: ../../../../inc/themes/material-blue/views/config/info.inc:83
+msgid "Indica si el idioma se encuentra disponible"
+msgstr "Tells whether the language is available or not."
-#: ../../../../inc/themes/classic/install.inc:32
-#: ../../../../inc/themes/material-blue/install.inc:38
-msgid "Login del usuario administrador de sysPass"
-msgstr "sysPass administrator's login"
+#: ../../../../inc/themes/material-blue/views/config/info.inc:87
+msgid ""
+"Si no está instalado, es necesario instalar las locales en el sistema "
+"operativo. Más información en Wiki."
+msgstr ""
+"If it is not installed, you would need install the right operating system "
+"locales. More info at Wiki."
-#: ../../../../inc/themes/classic/install.inc:58
-#: ../../../../inc/themes/material-blue/install.inc:72
-msgid "Configurar BBDD"
-msgstr "DB Configuration"
+#: ../../../../inc/themes/material-blue/views/config/info.inc:99
+#: ../../../../inc/themes/material-blue/views/config/info.inc:102
+msgid "Plugins Cargados"
+msgstr "Loaded Plugins"
-#: ../../../../inc/themes/classic/install.inc:67
-msgid "Login de usuario con permisos de administrador de MySQL"
-msgstr "User login with database administrative rights"
-
-#: ../../../../inc/themes/classic/install.inc:83
-#: ../../../../inc/themes/material-blue/install.inc:106
-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:124
-msgid "Modo Hosting"
-msgstr "Hosting Mode"
-
-#: ../../../../inc/themes/classic/install.inc:104
-#: ../../../../inc/themes/material-blue/install.inc:131
-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:138
-#: ../../../../inc/themes/material-blue/install.inc:139
-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
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:22
msgid "Habilita de autentificación mediante servidor LDAP."
msgstr "Enables authentication aganist a LDAP server."
-#: ../../../../inc/themes/classic/ldap.inc:20
-#: ../../../../inc/themes/material-blue/ldap.inc:20
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:26
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
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:36
+msgid "Habilitar LDAP"
+msgstr "Enable LDAP"
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:46
+msgid "Habilita el modo de conexión con LDAP de Active Directory."
+msgstr "Enables Active Directory LDAP connection mode."
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:56
+msgid "Active Directory"
+msgstr "Active Directory"
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:67
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
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:71
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:102
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:153
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:187
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:111
msgid "Ejemplos:"
msgstr "Examples:"
-#: ../../../../inc/themes/classic/ldap.inc:57
-#: ../../../../inc/themes/material-blue/ldap.inc:64
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:93
msgid "Usuario de conexión"
msgstr "Bind User"
-#: ../../../../inc/themes/classic/ldap.inc:61
-#: ../../../../inc/themes/material-blue/ldap.inc:68
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:98
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
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:123
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
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:128
+msgid "Clave del usuario de conexión a LDAP."
+msgstr "LDAP connection user password"
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:144
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:168
msgid "Base de búsqueda"
msgstr "Search base"
-#: ../../../../inc/themes/classic/ldap.inc:96
-#: ../../../../inc/themes/material-blue/ldap.inc:115
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:149
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
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:179
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
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:183
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
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:212
msgid ""
"Define el grupo de usuarios por defecto para los nuevos usuarios de LDAP."
-msgstr "Define the default users group for new LDAP users"
+msgstr "Define the default users group for newly LDAP users"
-#: ../../../../inc/themes/classic/ldap.inc:165
-#: ../../../../inc/themes/material-blue/ldap.inc:190
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:231
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:241
msgid "Perfil por Defecto"
msgstr "Default Profile"
-#: ../../../../inc/themes/classic/ldap.inc:169
-#: ../../../../inc/themes/material-blue/ldap.inc:194
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:236
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/material-blue/views/config/ldap.inc:255
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:258
+msgid "Resultados"
+msgstr "Results"
-#: ../../../../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:74
-msgid "¿Olvidó su clave?"
-msgstr "Lost your password?"
-
-#: ../../../../inc/themes/classic/login.inc:63
-#: ../../../../inc/themes/material-blue/login.inc:90
-msgid "Aplicación actualizada correctamente"
-msgstr "Application successfully updated"
-
-#: ../../../../inc/themes/classic/login.inc:68
-#: ../../../../inc/themes/classic/login.inc:69
-#: ../../../../inc/themes/material-blue/login.inc:95
-#: ../../../../inc/themes/material-blue/login.inc:96
-#: ../../../../inc/themes/material-blue/login.inc:98
-msgid "Nuevas Características"
-msgstr "New Features"
-
-#: ../../../../inc/themes/classic/mail.inc:11
-#: ../../../../inc/themes/material-blue/mail.inc:11
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:21
msgid "Habilitar notificaciones de correo"
msgstr "Enable email notifications"
-#: ../../../../inc/themes/classic/mail.inc:29
-#: ../../../../inc/themes/material-blue/config.inc:386
-#: ../../../../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
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:58
msgid "Habilitar Autentificación"
msgstr "Enable Authentication"
-#: ../../../../inc/themes/classic/mail.inc:68
-#: ../../../../inc/themes/material-blue/mail.inc:91
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:90
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:93
+msgid "Seguridad"
+msgstr "Security"
+
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:96
msgid "Deshabilitada"
msgstr "Disabled"
-#: ../../../../inc/themes/classic/mail.inc:77
-#: ../../../../inc/themes/material-blue/mail.inc:100
-#: ../../../../inc/themes/material-blue/mail.inc:107
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:106
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:114
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:70
-#: ../../../../inc/themes/classic/search.inc:150
-#: ../../../../inc/themes/material-blue/search.inc:160
-msgid "Más Acciones"
-msgstr "More Actions"
-
-#: ../../../../inc/themes/classic/passreset.inc:13
-#: ../../../../inc/themes/material-blue/passreset.inc:9
-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:23
-msgid "Email del Usuario"
-msgstr "User's Email"
-
-#: ../../../../inc/themes/classic/passreset.inc:27
-msgid "Nueva Clave"
-msgstr "New Password"
-
-#: ../../../../inc/themes/classic/passreset.inc:46
-#: ../../../../inc/themes/material-blue/passreset.inc:47
-msgid "Volver a iniciar sesión"
-msgstr "Go back to login"
-
-#: ../../../../inc/themes/classic/passreset.inc:48
-#: ../../../../inc/themes/material-blue/2fa.inc:25
-#: ../../../../inc/themes/material-blue/passreset.inc:53
-#: ../../../../inc/themes/material-blue/passreset.inc:54
-msgid "Solicitar"
-msgstr "Request"
-
-#: ../../../../inc/themes/classic/passreset.inc:49
-msgid "Solicitar cambio de clave"
-msgstr "Request password change"
-
-#: ../../../../inc/themes/classic/passreset.inc:51
-#: ../../../../inc/themes/material-blue/passreset.inc:58
-#: ../../../../inc/themes/material-blue/passreset.inc:59
-msgid "Cambiar"
-msgstr "Change"
-
-#: ../../../../inc/themes/classic/passreset.inc:52
-msgid "Cambiar Clave"
-msgstr "Change password"
-
-#: ../../../../inc/themes/classic/preferences.inc:73
-#: ../../../../inc/themes/material-blue/preferences.inc:74
-msgid "Ordenar resultados por visitas"
-msgstr "Sort search results by views"
-
-#: ../../../../inc/themes/classic/preferences.inc:77
-#: ../../../../inc/themes/material-blue/preferences.inc:78
-msgid ""
-"Ordena los resultados de búsqueda por el número de visitas de las cuentas."
-msgstr "Sorts accounts search results by the number of accounts' views"
-
-#: ../../../../inc/themes/classic/preferences.inc:90
-#: ../../../../inc/themes/material-blue/preferences.inc:91
-msgid "Barra de navegación superior"
-msgstr "Navigation bar on top"
-
-#: ../../../../inc/themes/classic/preferences.inc:94
-#: ../../../../inc/themes/material-blue/preferences.inc:95
-msgid "Mostrar una barra de navegación superior en las búsquedas."
-msgstr "Shows a navigation bar on top of the search results."
-
-#: ../../../../inc/themes/classic/preferences.inc:107
-#: ../../../../inc/themes/material-blue/preferences.inc:108
-msgid "Mostrar Acciones Ocultas"
-msgstr "Show Hidden Actions"
-
-#: ../../../../inc/themes/classic/preferences.inc:111
-#: ../../../../inc/themes/material-blue/preferences.inc:112
-msgid ""
-"Mostrar las acciones ocultas para los elementos de la búsqueda de cuentas."
-msgstr "Always show the hidden actions on the accounts search page."
-
-#: ../../../../inc/themes/classic/profiles.inc:11
-#: ../../../../inc/themes/material-blue/profiles.inc:14
-msgid "Nombre del perfil"
-msgstr "Profile name"
-
-#: ../../../../inc/themes/classic/profiles.inc:19
-#: ../../../../inc/themes/material-blue/profiles.inc:30
-msgid "Ver detalles de cuenta"
-msgstr "View account details"
-
-#: ../../../../inc/themes/classic/profiles.inc:19
-#: ../../../../inc/themes/material-blue/profiles.inc:30
-msgid "Ver"
-msgstr "View"
-
-#: ../../../../inc/themes/classic/profiles.inc:23
-#: ../../../../inc/themes/material-blue/profiles.inc:35
-msgid "Ver clave de cuenta"
-msgstr "View account password"
-
-#: ../../../../inc/themes/classic/profiles.inc:28
-#: ../../../../inc/themes/material-blue/profiles.inc:40
-msgid "Ver historial de cuenta"
-msgstr "View account history"
-
-#: ../../../../inc/themes/classic/profiles.inc:32
-#: ../../../../inc/themes/material-blue/profiles.inc:45
-msgid "Editar cuenta"
-msgstr "Edit account"
-
-#: ../../../../inc/themes/classic/profiles.inc:32
-#: ../../../../inc/themes/material-blue/profiles.inc:45
-msgid "Editar"
-msgstr "Edit"
-
-#: ../../../../inc/themes/classic/profiles.inc:37
-#: ../../../../inc/themes/material-blue/profiles.inc:50
-msgid "Editar clave de cuenta"
-msgstr "Edit account password"
-
-#: ../../../../inc/themes/classic/profiles.inc:37
-#: ../../../../inc/themes/material-blue/profiles.inc:50
-msgid "Editar Clave"
-msgstr "Edit Password"
-
-#: ../../../../inc/themes/classic/profiles.inc:41
-msgid "Añadir nueva cuenta"
-msgstr "Add new account"
-
-#: ../../../../inc/themes/classic/profiles.inc:41
-msgid "Añadir"
-msgstr "Add"
-
-#: ../../../../inc/themes/classic/profiles.inc:46
-msgid "Borrar cuenta"
-msgstr "Delete account"
-
-#: ../../../../inc/themes/classic/profiles.inc:46
-msgid "Borrar"
-msgstr "Delete"
-
-#: ../../../../inc/themes/classic/profiles.inc:50
-#: ../../../../inc/themes/material-blue/profiles.inc:60
-msgid "Ver archivos de cuenta"
-msgstr "View account files"
-
-#: ../../../../inc/themes/classic/profiles.inc:61
-#: ../../../../inc/themes/material-blue/profiles.inc:72
-msgid "Configuración general"
-msgstr "General configuration"
-
-#: ../../../../inc/themes/classic/profiles.inc:65
-msgid "Cambiar clave maestra"
-msgstr "Change Master Password"
-
-#: ../../../../inc/themes/classic/profiles.inc:70
-msgid "Realizar copia de seguridad"
-msgstr "Perform backup"
-
-#: ../../../../inc/themes/classic/profiles.inc:70
-#: ../../../../inc/themes/material-blue/profiles.inc:82
-msgid "Backup"
-msgstr "Backup"
-
-#: ../../../../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/themes/classic/profiles.inc:85
-#: ../../../../inc/themes/material-blue/profiles.inc:99
-msgid "Gestión de usuarios"
-msgstr "Users management"
-
-#: ../../../../inc/themes/classic/profiles.inc:89
-#: ../../../../inc/themes/material-blue/profiles.inc:104
-msgid "Gestión de grupos"
-msgstr "Groups management"
-
-#: ../../../../inc/themes/classic/profiles.inc:94
-#: ../../../../inc/themes/material-blue/profiles.inc:109
-msgid "Gestión de perfiles"
-msgstr "Profiles management"
-
-#: ../../../../inc/themes/classic/profiles.inc:94
-#: ../../../../inc/themes/material-blue/profiles.inc:109
-msgid "Perfiles"
-msgstr "Profiles"
-
-#: ../../../../inc/themes/classic/profiles.inc:98
-#: ../../../../inc/themes/material-blue/profiles.inc:114
-msgid "Gestión de categorías"
-msgstr "Categories management"
-
-#: ../../../../inc/themes/classic/profiles.inc:103
-#: ../../../../inc/themes/material-blue/profiles.inc:119
-msgid "Gestión de clientes"
-msgstr "Customers management"
-
-#: ../../../../inc/themes/classic/profiles.inc:107
-#: ../../../../inc/themes/material-blue/profiles.inc:124
-msgid "Gestión de campos personalizados"
-msgstr "Custom fields management"
-
-#: ../../../../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/themes/classic/profiles.inc:124
-#: ../../../../inc/themes/material-blue/profiles.inc:141
-msgid "Ver log de eventos"
-msgstr "View event log"
-
-#: ../../../../inc/themes/classic/profiles.inc:124
-#: ../../../../inc/themes/material-blue/profiles.inc:141
-msgid "Log de Eventos"
-msgstr "Event Log"
-
-#: ../../../../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/themes/classic/request.inc:22
-#: ../../../../inc/themes/material-blue/request.inc:25
-msgid "Petición"
-msgstr "Request"
-
-#: ../../../../inc/themes/classic/request.inc:24
-#: ../../../../inc/themes/material-blue/request.inc:29
-msgid "Descripción de la petición"
-msgstr "Request Description"
-
-#: ../../../../inc/themes/classic/request.inc:33
-#: ../../../../inc/themes/material-blue/account.inc:454
-#: ../../../../inc/themes/material-blue/editpass.inc:55
-#: ../../../../inc/themes/material-blue/mgmttabs.inc:13
-#: ../../../../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/themes/classic/search.inc:10
-#: ../../../../inc/themes/classic/search.inc:189
-#: ../../../../inc/themes/material-blue/search.inc:10
-#: ../../../../inc/themes/material-blue/search.inc:199
-msgid "Filtro ON"
-msgstr "Filter ON"
-
-#: ../../../../inc/themes/classic/search.inc:14
-#: ../../../../inc/themes/classic/search.inc:193
-#: ../../../../inc/themes/material-blue/search.inc:14
-#: ../../../../inc/themes/material-blue/search.inc:203
-msgid "Global ON"
-msgstr "Global ON"
-
-#: ../../../../inc/themes/classic/search.inc:63
-#: ../../../../inc/themes/material-blue/search.inc:65
-msgid "Buscar en Wiki"
-msgstr "Search in Wiki"
-
-#: ../../../../inc/themes/classic/search.inc:99
-#: ../../../../inc/themes/material-blue/search.inc:101
-msgid "Abrir enlace a"
-msgstr "Open link to"
-
-#: ../../../../inc/themes/classic/search.inc:117
-#: ../../../../inc/themes/material-blue/search.inc:125
-msgid "Archivos adjuntos"
-msgstr "Attachments"
-
-#: ../../../../inc/themes/classic/search.inc:124
-#: ../../../../inc/themes/material-blue/search.inc:134
-msgid "Enlace a Wiki"
-msgstr "Link to Wiki"
-
-#: ../../../../inc/themes/classic/searchbox.inc:5
-#: ../../../../inc/themes/material-blue/searchbox.inc:5
-msgid "Limpiar"
-msgstr "Clear"
-
-#: ../../../../inc/themes/classic/searchbox.inc:7
-#: ../../../../inc/themes/material-blue/searchbox.inc:10
-msgid "Texto a buscar"
-msgstr "Text to search"
-
-#: ../../../../inc/themes/classic/searchbox.inc:12
-#: ../../../../inc/themes/material-blue/searchbox.inc:15
-msgid "Parámetros especiales:"
-msgstr "Special parameters"
-
-#: ../../../../inc/themes/classic/searchbox.inc:15
-#: ../../../../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:17
-#: ../../../../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:19
-#: ../../../../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:24
-#: ../../../../inc/themes/material-blue/searchbox.inc:25
-#: ../../../../inc/themes/material-blue/searchbox.inc:28
-msgid "Búsqueda global"
-msgstr "Global search"
-
-#: ../../../../inc/themes/classic/searchbox.inc:50
-#: ../../../../inc/themes/material-blue/searchbox.inc:54
-msgid "CPP"
-msgstr "APP"
-
-#: ../../../../inc/themes/classic/searchbox.inc:51
-#: ../../../../inc/themes/material-blue/searchbox.inc:54
-msgid "Cuentas por página"
-msgstr "Accounts per page"
-
-#: ../../../../inc/themes/classic/security.inc:4
-msgid "Autenticación"
-msgstr "Authentication"
-
-#: ../../../../inc/themes/classic/security.inc:13
-msgid "Autenticación en 2 pasos"
-msgstr "Two factor authentication"
-
-#: ../../../../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 you to enter a token that is "
-"generated by an application like Google Authenticator."
-
-#: ../../../../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 digit code."
-
-#: ../../../../inc/themes/classic/security.inc:29
-#: ../../../../inc/themes/material-blue/security.inc:27
-msgid "Activar"
-msgstr "Activate"
-
-#: ../../../../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/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 ""
-"Once enabled, you can only login 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: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/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:6
-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:12
-msgid "Código de Seguridad"
-msgstr "Security Code"
-
-#: ../../../../inc/themes/classic/upgrade.inc:21
-#: ../../../../inc/themes/material-blue/upgrade.inc:23
-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/themes/classic/users.inc:103
-#: ../../../../inc/themes/material-blue/users.inc:139
-msgid "Admin. Aplicación"
-msgstr "Application Admin"
-
-#: ../../../../inc/themes/classic/users.inc:107
-#: ../../../../inc/themes/material-blue/users.inc:143
-msgid "Administrador de cuentas"
-msgstr "Accounts administrator"
-
-#: ../../../../inc/themes/classic/users.inc:107
-#: ../../../../inc/themes/material-blue/users.inc:146
-msgid "Admin. Cuentas"
-msgstr "Accounts Admin"
-
-#: ../../../../inc/themes/classic/users.inc:117
-#: ../../../../inc/themes/material-blue/users.inc:158
-msgid "Forzar cambio de clave"
-msgstr "Force password change"
-
-#: ../../../../inc/themes/classic/users.inc:154
-#: ../../../../inc/themes/material-blue/users.inc:198
-msgid "Entradas"
-msgstr "Entries"
-
-#: ../../../../inc/themes/classic/users.inc:159
-#: ../../../../inc/themes/material-blue/users.inc:203
-msgid "Último Acceso"
-msgstr "Last Access"
-
-#: ../../../../inc/themes/classic/users.inc:169
-#: ../../../../inc/themes/material-blue/users.inc:213
-msgid "Fecha Clave Maestra"
-msgstr "Master Password Date"
-
-#: ../../../../inc/themes/classic/wiki.inc:11
-#: ../../../../inc/themes/material-blue/wiki.inc:11
-msgid "Habilitar enlaces Wiki"
-msgstr "Enable Wiki links"
-
-#: ../../../../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 ""
-"Enables the option to add a link for search results to an external Wiki."
-
-#: ../../../../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"
-
-#: ../../../../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."
-
-#: ../../../../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."
-
-#: ../../../../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:"
-
-#: ../../../../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"
-
-#: ../../../../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."
-
-#: ../../../../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."
-
-#: ../../../../inc/themes/classic/wiki.inc:81
-#: ../../../../inc/themes/material-blue/wiki.inc:93
-msgid "Prefijo para nombre de cuenta"
-msgstr "Account name prefix"
-
-#: ../../../../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 "Prefix to determine which accounts have a link to the Wiki."
-
-#: ../../../../inc/themes/classic/wiki.inc:121
-#: ../../../../inc/themes/material-blue/wiki.inc:135
-msgid "Añadir filtro"
-msgstr "Add filter"
-
-#: ../../../../inc/themes/classic/wiki.inc:122
-#: ../../../../inc/themes/material-blue/wiki.inc:136
-msgid "Eliminar filtro"
-msgstr "Delete filter"
-
-#: ../../../../inc/themes/material-blue/account.inc:4
-msgid "Histórico"
-msgstr "History"
-
-#: ../../../../inc/themes/material-blue/account.inc:34
-msgid "> Usar texto y crear nuevo"
-msgstr "> Use the text and create a new one"
-
-#: ../../../../inc/themes/material-blue/account.inc:43
-msgid "Seleccionar o escribir para crear uno nuevo"
-msgstr "Select or write to create a new one"
-
-#: ../../../../inc/themes/material-blue/account.inc:114
-msgid "Clave (Repetir)"
-msgstr "Password (Repeat)"
-
-#: ../../../../inc/themes/material-blue/backup.inc:58
-#: ../../../../inc/themes/material-blue/backup.inc:144
-#: ../../../../inc/themes/material-blue/encryption.inc:115
-#: ../../../../inc/themes/material-blue/import.inc:215
-msgid "Realizar"
-msgstr "Perform"
-
-#: ../../../../inc/themes/material-blue/config.inc:67
-msgid "Forzar HTTPS"
-msgstr "Force HTTPS"
-
-#: ../../../../inc/themes/material-blue/config.inc:71
-msgid "Fuerza para que todas las conexiones sean a través de HTTPS."
-msgstr "It forces the use of HTTPS on all the connections"
-
-#: ../../../../inc/themes/material-blue/config.inc:232
-#: ../../../../inc/themes/material-blue/preferences.inc:68
-msgid "Número de resultados por página"
-msgstr "Results per page"
-
-#: ../../../../inc/themes/material-blue/config.inc:346
-msgid "Tamaño máximo de archivo en bytes"
-msgstr "Maximum file size in bytes"
-
-#: ../../../../inc/themes/material-blue/config.inc:353
-msgid "Proxy"
-msgstr "Proxy"
-
-#: ../../../../inc/themes/material-blue/config.inc:359
-msgid "Usar Proxy"
-msgstr "Use Proxy"
-
-#: ../../../../inc/themes/material-blue/config.inc:380
-msgid "Servidor proxy"
-msgstr "Proxy server"
-
-#: ../../../../inc/themes/material-blue/config.inc:394
-msgid "Puerto del servidor proxy"
-msgstr "Proxy server port"
-
-#: ../../../../inc/themes/material-blue/config.inc:408
-msgid "Usuario del servidor proxy"
-msgstr "Proxy server user"
-
-#: ../../../../inc/themes/material-blue/config.inc:422
-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/install.inc:33
-msgid "Usuario administrador de sysPass"
-msgstr "sysPass admin user"
-
-#: ../../../../inc/themes/material-blue/install.inc:81
-msgid "Usuario acceso BBDD"
-msgstr "DB access user"
-
-#: ../../../../inc/themes/material-blue/install.inc:86
-msgid "Usuario con permisos de administrador de MySQL"
-msgstr "An user with MySQL admin rights"
-
-#: ../../../../inc/themes/material-blue/install.inc:94
-msgid "Clave acceso BBDD"
-msgstr "DB access password"
-
-#: ../../../../inc/themes/material-blue/install.inc:101
-msgid "Nombre BBDD para sysPass"
-msgstr "sysPass database name"
-
-#: ../../../../inc/themes/material-blue/install.inc:113
-msgid "Servidor BBDD para sysPass"
-msgstr "sysPass database server"
-
-#: ../../../../inc/themes/material-blue/install.inc:118
-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
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:124
msgid ""
"Habilita que los usuarios puedan solicitar modificaciones o acceso a las "
"cuentas sin permisos."
@@ -5029,43 +5201,634 @@ msgstr ""
"Allows users to request either modifications to existing accounts, or access "
"to accounts in which they have no rights."
-#: ../../../../inc/themes/material-blue/profiles.inc:25
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:133
+msgid "Habilitar peticiones por correo"
+msgstr "Enable requests by email"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:20
+msgid ""
+"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/themes/material-blue/views/config/wiki.inc:30
+msgid "Habilitar enlaces Wiki"
+msgstr "Enable Wiki links"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:36
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:63
+msgid "URL de búsqueda Wiki"
+msgstr "Wiki search URL"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:41
+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."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:45
+msgid "Como parámetro se utiliza el nombre del cliente."
+msgstr "The customer name is used as parameter."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:49
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:82
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:163
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:190
+msgid "Ejemplo:"
+msgstr "Example:"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:69
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:96
+msgid "URL de página en Wiki"
+msgstr "Wiki page URL"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:74
+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."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:78
+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."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:102
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:116
+msgid "Prefijo para nombre de cuenta"
+msgstr "Account name prefix"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:107
+msgid ""
+"Prefijo para determinar qué cuentas tienen un enlace a una página de la Wiki."
+msgstr "Prefix to determine which accounts have a link to the Wiki."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:124
+msgid "DokuWiki API"
+msgstr "DokuWiki API"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:134
+msgid ""
+"Habilita la conexión a la API XML-RPC de DokuWiki para los enlaces Wiki."
+msgstr "Enables DokuWiki XML-RPC API for Wiki links."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:137
+msgid ""
+"Para que esta característica funcione, es necesario habilitar los enlaces "
+"Wiki para el filtrado de cuentas."
+msgstr ""
+"In order to get this feature working, you should enable Wiki links for "
+"accounts filtering"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:147
+msgid "Habilitar API de DokuWiki"
+msgstr "Enable DokuWiki API"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:154
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:175
+msgid "URL API"
+msgstr "API URL"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:159
+msgid "URL de la API de DokuWiki."
+msgstr "DokuWiki API URL"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:181
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:203
+msgid "URL Base"
+msgstr "Base URL"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:186
+msgid "URL base de DokuWiki."
+msgstr "DokuWiki base URL"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:214
+msgid "Usuario para conectar a la API de DokuWiki."
+msgstr "User to connect to the DokuWiki API."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:242
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:258
+msgid "Namespace"
+msgstr "Namespace"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:247
+msgid "Namespace utilizado para buscar las páginas."
+msgstr "Namespace used to search pages."
+
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:22
+msgid "Fecha / Hora"
+msgstr "Date / Time"
+
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:25
+msgid "Nivel"
+msgstr "Level"
+
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:28
+msgid "Evento"
+msgstr "Event"
+
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:34
+msgid "IP"
+msgstr "IP"
+
+#: ../../../../inc/themes/material-blue/views/grid/datagrid-nav-full.inc:11
+msgid "Filtro ON"
+msgstr "Filter ON"
+
+#: ../../../../inc/themes/material-blue/views/grid/datatabs-grid.inc:102
+msgid "Eliminar Seleccionados"
+msgstr "Delete Selected"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:26
+msgid "Nombre del campo"
+msgstr "Field name"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:57
+msgid "Texto Ayuda"
+msgstr "Help Text"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:63
+msgid "Ayuda del campo"
+msgstr "Field help"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:74
+msgid "Obligatorio"
+msgstr "Required"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:25
+msgid "Nombre del grupo"
+msgstr "Group name"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:38
+msgid "Descripción del grupo"
+msgstr "Group description"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:20
+msgid "Nombre del plugin"
+msgstr "Plugin name"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:32
+msgid "Versión del plugin"
+msgstr "Plugin Version"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:37
+msgid "Versión Compatible"
+msgstr "Compatible Version"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:44
+msgid "Versión de sysPass compatible"
+msgstr "sysPass compatible version"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:49
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:25
+msgid "Autor"
+msgstr "Author"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:56
+msgid "Autor del plugin"
+msgstr "Plugin author"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:25
+msgid "Nombre del perfil"
+msgstr "Profile name"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:40
msgid "Crear nueva cuenta"
msgstr "Create a new account"
-#: ../../../../inc/themes/material-blue/profiles.inc:25
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:40
msgid "Crear"
msgstr "Create"
-#: ../../../../inc/themes/material-blue/profiles.inc:55
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:47
+msgid "Ver detalles de cuenta"
+msgstr "View account details"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:47
+msgid "Ver"
+msgstr "View"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:54
+msgid "Ver clave de cuenta"
+msgstr "View account password"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:61
+msgid "Ver historial de cuenta"
+msgstr "View account history"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:68
+msgid "Editar cuenta"
+msgstr "Edit account"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:75
+msgid "Editar clave de cuenta"
+msgstr "Edit account password"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:75
+msgid "Editar Clave"
+msgstr "Edit Password"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:82
msgid "Eliminar cuenta"
msgstr "Delete account"
-#: ../../../../inc/themes/material-blue/profiles.inc:55
-msgid "Eliminar"
-msgstr "Delete"
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:89
+msgid "Ver archivos de cuenta"
+msgstr "View account files"
-#: ../../../../inc/themes/material-blue/profiles.inc:77
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:96
+msgid "Publicar enlace a cuenta"
+msgstr "Share link to account"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:96
+msgid "Publicar Enlace"
+msgstr "Share Link"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:103
+msgid "Crear cuenta privada"
+msgstr "Create private account"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:110
+msgid "Crear cuenta privada para grupo"
+msgstr "Create private account for group"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:117
+msgid "Asignar permisos"
+msgstr "Assign permissions"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:130
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:132
+msgid "Gestión"
+msgstr "Management"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:140
+msgid "Gestión de usuarios"
+msgstr "Users management"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:147
+msgid "Gestión de grupos"
+msgstr "Groups management"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:154
+msgid "Gestión de perfiles"
+msgstr "Profiles management"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:161
+msgid "Gestión de categorías"
+msgstr "Categories management"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:168
+msgid "Gestión de clientes"
+msgstr "Customers management"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:175
+msgid "Gestión de campos personalizados"
+msgstr "Custom fields management"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:182
+msgid "Gestión de autorizaciones API"
+msgstr "API authorizations management"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:189
+msgid "Gestión de enlaces"
+msgstr "Links management"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:196
+msgid "Gestión de cuentas"
+msgstr "Accounts management"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:210
+msgid "Gestión de etiquetas"
+msgstr "Tags management"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:233
msgid "Opciones de encriptación"
msgstr "Encryption options"
-#: ../../../../inc/themes/material-blue/profiles.inc:82
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:240
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"
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:240
+msgid "Backup"
+msgstr "Backup"
-#~ msgid "No es posible guardar el archivo \"%s\" Tamaño máximo:"
-#~ msgstr "Unable to save file \"%s\". Maximum allowed size:"
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:247
+msgid "Realizar importación de cuentas"
+msgstr "Make accounts import"
-#~ msgid ""
-#~ "It's possible to set an export password to encrypt all data saved in the "
-#~ "XML file."
-#~ msgstr ""
-#~ "It's possible to set an export password to save whole data encrypted in "
-#~ "the XML file."
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:253
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:255
+msgid "Otros"
+msgstr "Others"
-#~ msgid "Error al actualizar datos encriptados"
-#~ msgstr "Error while updating encrypted data"
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:263
+msgid "Ver log de eventos"
+msgstr "View event log"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:270
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:272
+msgid "Usado por"
+msgstr "Used by"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:59
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:61
+msgid "Hash"
+msgstr "Hash"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:67
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:69
+msgid "Uso"
+msgstr "Use"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/tags.inc:23
+msgid "Nombre de la etiqueta"
+msgstr "Tag name"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:42
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:140
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:105
+msgid "Opciones"
+msgstr "Options"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:45
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:49
+msgid "Regenerar Autorización"
+msgstr "Refresh Authorization"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:55
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:57
+msgid "Token"
+msgstr "Token"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:26
+msgid "Nombre de usuario completo"
+msgstr "Full username"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:40
+msgid "Login de inicio de sesión"
+msgstr "Session login"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:89
+msgid "Dirección de correo"
+msgstr "Email address"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:144
+msgid "Administrador de la aplicación"
+msgstr "Application administrator"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:151
+msgid "Administrador de cuentas"
+msgstr "Accounts administrator"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:166
+msgid "Forzar cambio de clave"
+msgstr "Force password change"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:180
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:182
+msgid "Entradas"
+msgstr "Entries"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:189
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:191
+msgid "Último Acceso"
+msgstr "Last Access"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:207
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:209
+msgid "Fecha Clave Maestra"
+msgstr "Master Password Date"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:11
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:69
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:72
+msgid "Salir"
+msgstr "Sign Out"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:25
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:56
+msgid "Preferencias de usuario"
+msgstr "User preferences"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:34
+#, php-format
+msgid "Hay %d notificaciones pendientes"
+msgstr "There are %d unread notifications"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:41
+msgid "No hay no hay notificaciones pendientes"
+msgstr "There aren't any pending notifications"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:74
+msgid "Indica si la conexión utiliza HTTPS."
+msgstr "It tells if the connection uses HTTPS"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:74
+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/material-blue/views/main/body-footer.inc:79
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:82
+msgid "Demo"
+msgstr "Demo"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:90
+msgid "Ayuda :: FAQ :: Changelog"
+msgstr "Help :: FAQ :: Changelog"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:94
+msgid "Un proyecto de cygnux.org"
+msgstr "A cygnux.org project"
+
+#: ../../../../inc/themes/material-blue/views/main/body-start.inc:4
+msgid "Javascript es necesario para el correcto funcionamiento"
+msgstr "Javascript is needed in order to run correctly"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:9
+#, php-format
+msgid "Instalación %s"
+msgstr "Installation %s"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:19
+msgid "Admin de sysPass"
+msgstr "sysPass Admin"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:27
+msgid "Usuario administrador de sysPass"
+msgstr "sysPass admin user"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:35
+msgid "Login del usuario administrador de sysPass"
+msgstr "sysPass administrator's login"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:67
+msgid "Configurar BBDD"
+msgstr "DB Configuration"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:77
+msgid "Usuario acceso BBDD"
+msgstr "DB access user"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:85
+msgid "Usuario con permisos de administrador de MySQL"
+msgstr "An user with MySQL admin rights"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:93
+msgid "Clave acceso BBDD"
+msgstr "DB access password"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:102
+msgid "Nombre BBDD para sysPass"
+msgstr "sysPass database name"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:110
+msgid "Nombre de la base de datos para sysPass"
+msgstr "sysPass database name"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:119
+msgid "Servidor BBDD para sysPass"
+msgstr "sysPass database server"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:127
+msgid "Nombre del servidor para instalar la base de datos de sysPass"
+msgstr "Server name to install the sysPass database"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:145
+msgid "Modo Hosting"
+msgstr "Hosting Mode"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:152
+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/material-blue/views/main/install.inc:166
+#: ../../../../inc/themes/material-blue/views/main/install.inc:168
+msgid "Instalar"
+msgstr "Install"
+
+#: ../../../../inc/themes/material-blue/views/main/login.inc:38
+msgid "Clave Anterior"
+msgstr "Previous Password"
+
+#: ../../../../inc/themes/material-blue/views/main/login.inc:74
+msgid "¿Olvidó su clave?"
+msgstr "Lost your password?"
+
+#: ../../../../inc/themes/material-blue/views/main/login.inc:81
+msgid "Aplicación actualizada correctamente"
+msgstr "Application successfully updated"
+
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:7
+msgid "Solicitud de Cambio de Clave"
+msgstr "Request Password Change"
+
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:25
+msgid "Email del Usuario"
+msgstr "User's Email"
+
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:55
+msgid "Volver a iniciar sesión"
+msgstr "Go back to login"
+
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:61
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:63
+msgid "Solicitar"
+msgstr "Request"
+
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:67
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:69
+msgid "Cambiar"
+msgstr "Change"
+
+#: ../../../../inc/themes/material-blue/views/main/update.inc:21
+msgid "Actualizado"
+msgstr "Updated"
+
+#: ../../../../inc/themes/material-blue/views/main/update.inc:27
+msgid "Error al comprobar actualizaciones"
+msgstr "Error while checking for updates"
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:4
+#, php-format
+msgid "Actualización %s"
+msgstr "Update %s"
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:9
+msgid "Actualización de BBDD"
+msgstr "DB Update"
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:15
+msgid "Código de Seguridad"
+msgstr "Security Code"
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:23
+msgid ""
+"Este código se encuentra en el archivo de configuración de sysPass con la "
+"etiqueta \"upgradeKey\""
+msgstr ""
+"This code is set in the sysPass config file with the tag name \"upgradekey\""
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:28
+msgid "He realizado una copia de seguridad completa de sysPass"
+msgstr "I've done a full sysPass backup"
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:40
+msgid "Por favor espere mientras el proceso se ejecuta"
+msgstr "Please, wait while the process is running"
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:50
+msgid "Iniciar Actualización"
+msgstr "Start Update"
+
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:108
+msgid "Notificación global"
+msgstr "Global notification"
+
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:111
+msgid "Global"
+msgstr "Global"
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:92
+msgid ""
+"Ordena los resultados de búsqueda por el número de visitas de las cuentas."
+msgstr "Sorts accounts search results by the number of accounts' views"
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:100
+msgid "Ordenar resultados por visitas"
+msgstr "Sort search results by views"
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:110
+msgid "Mostrar una barra de navegación superior en las búsquedas."
+msgstr "Shows a navigation bar on top of the search results."
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:118
+msgid "Barra de navegación superior"
+msgstr "Navigation bar on top"
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:128
+msgid ""
+"Mostrar las acciones ocultas para los elementos de la búsqueda de cuentas."
+msgstr "Always show the hidden actions on the accounts search page."
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:137
+msgid "Mostrar Acciones Ocultas"
+msgstr "Show Hidden Actions"
+
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:2
+msgid "Ver Wiki"
+msgstr "View Wiki"
+
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:10
+#, php-format
+msgid "Resultados de búsqueda de '%s'"
+msgstr "Search results of '%s'"
+
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:13
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:23
+msgid "Página"
+msgstr "Page"
+
+#~ msgid "Buscar cuentas con la etiqueta 'tag_name'"
+#~ msgstr "Search for accounts with tag 'tag_name'"
diff --git a/inc/locales/fr_FR/LC_MESSAGES/messages.mo b/inc/locales/fr_FR/LC_MESSAGES/messages.mo
index 103f0396..d4f6c664 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 1c9a0297..d8aecd24 100644
--- a/inc/locales/fr_FR/LC_MESSAGES/messages.po
+++ b/inc/locales/fr_FR/LC_MESSAGES/messages.po
@@ -2,2082 +2,2896 @@ msgid ""
msgstr ""
"Project-Id-Version: sysPass\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-13 18:33+0100\n"
-"PO-Revision-Date: 2015-12-13 18:34+0100\n"
+"POT-Creation-Date: 2017-02-13 00:11+0100\n"
+"PO-Revision-Date: 2017-02-13 00:11+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"
"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-KeywordsList: _;gettext;gettext_noop\n"
+"X-Poedit-KeywordsList: _;gettext;gettext_noop;__\n"
"X-Poedit-Basepath: .\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Generator: Poedit 1.6.10\n"
"X-Poedit-SearchPath-0: ../../../..\n"
-#: ../../../../ajax/ajax_2fa.php:37 ../../../../ajax/ajax_accountSave.php:42
-#: ../../../../ajax/ajax_appMgmtSave.php:43
-#: ../../../../ajax/ajax_backup.php:41 ../../../../ajax/ajax_checkLdap.php:42
-#: ../../../../ajax/ajax_configSave.php:44 ../../../../ajax/ajax_files.php:42
-#: ../../../../ajax/ajax_files.php:57 ../../../../ajax/ajax_getFiles.php:47
-#: ../../../../ajax/ajax_import.php:50 ../../../../ajax/ajax_migrate.php:46
-#: ../../../../ajax/ajax_passReset.php:40 ../../../../ajax/ajax_search.php:42
-#: ../../../../ajax/ajax_sendRequest.php:42
-#: ../../../../ajax/ajax_userPrefsSave.php:43
-msgid "CONSULTA INVÁLIDA"
-msgstr "REQUETE INVALIDE"
-
-#: ../../../../ajax/ajax_2fa.php:48
-msgid "Código correcto"
-msgstr "Code vérifié"
-
-#: ../../../../ajax/ajax_2fa.php:51 ../../../../ajax/ajax_userPrefsSave.php:99
-msgid "Código incorrecto"
-msgstr "Code Invalide"
-
-#: ../../../../ajax/ajax_accountSave.php:36
-#: ../../../../ajax/ajax_appMgmtSave.php:37
-#: ../../../../ajax/ajax_backup.php:35 ../../../../ajax/ajax_checkLdap.php:36
-#: ../../../../ajax/ajax_configSave.php:38 ../../../../ajax/ajax_import.php:36
-#: ../../../../ajax/ajax_migrate.php:36
-#: ../../../../ajax/ajax_sendRequest.php:36
-#: ../../../../ajax/ajax_userPrefsSave.php:37
-#: ../../../../ajax/ajax_viewpass.php:37
-msgid "La sesión no se ha iniciado o ha caducado"
-msgstr "Session non démarrée ou expirée"
-
-#: ../../../../ajax/ajax_accountSave.php:78
-#: ../../../../ajax/ajax_accountSave.php:93
-msgid "Es necesario un nombre de cuenta"
-msgstr "Nom de compte requis"
-
-#: ../../../../ajax/ajax_accountSave.php:80
-#: ../../../../ajax/ajax_accountSave.php:91
-#: ../../../../ajax/ajax_appMgmtSave.php:329
-msgid "Es necesario un nombre de cliente"
-msgstr "Nom de client requis"
-
-#: ../../../../ajax/ajax_accountSave.php:82
-#: ../../../../ajax/ajax_accountSave.php:95
-msgid "Es necesario un usuario"
-msgstr "Nom d'utilisateur requis"
-
-#: ../../../../ajax/ajax_accountSave.php:84
-#: ../../../../ajax/ajax_accountSave.php:106
-msgid "Es necesaria una clave"
-msgstr "Une clé est requise"
-
-#: ../../../../ajax/ajax_accountSave.php:86
-#: ../../../../ajax/ajax_accountSave.php:97
-msgid "Es necesario una categoría"
-msgstr "Une catégorie est requise"
-
-#: ../../../../ajax/ajax_accountSave.php:101
-#: ../../../../ajax/ajax_accountSave.php:110
-msgid "Id inválido"
-msgstr "Id Invalide"
-
-#: ../../../../ajax/ajax_accountSave.php:113
-#: ../../../../ajax/ajax_accountSave.php:263
-#: ../../../../ajax/ajax_appMgmtSave.php:535
-#: ../../../../ajax/ajax_configSave.php:334
-#: ../../../../ajax/ajax_userPrefsSave.php:113 ../../../../api.php:53
-msgid "Acción Inválida"
-msgstr "Action Invalide"
-
-#: ../../../../ajax/ajax_accountSave.php:121
-#: ../../../../ajax/ajax_appMgmtSave.php:112
-#: ../../../../ajax/ajax_appMgmtSave.php:149
-#: ../../../../ajax/ajax_backup.php:68
-msgid "Las claves no coinciden"
-msgstr "Les mots de passe ne correspondent pas"
-
-#: ../../../../ajax/ajax_accountSave.php:173
-msgid "Cuenta creada"
-msgstr "Compte ajouté"
-
-#: ../../../../ajax/ajax_accountSave.php:176
-msgid "Error al crear la cuenta"
-msgstr "Erreur pendant la création de compte"
-
-#: ../../../../ajax/ajax_accountSave.php:211
-msgid "Sin cambios"
-msgstr "Aucun changement"
-
-#: ../../../../ajax/ajax_accountSave.php:223
-msgid "Cuenta actualizada"
-msgstr "Compte actualisé"
-
-#: ../../../../ajax/ajax_accountSave.php:226
-msgid "Error al modificar la cuenta"
-msgstr "Erreur pendant la modification du compte"
-
-#: ../../../../ajax/ajax_accountSave.php:233
-msgid "Cuenta eliminada"
-msgstr "Compte supprimé"
-
-#: ../../../../ajax/ajax_accountSave.php:236
-msgid "Error al eliminar la cuenta"
-msgstr "Erreur pendant la suppression du compte"
-
-#: ../../../../ajax/ajax_accountSave.php:246
-#: ../../../../ajax/ajax_appMgmtSave.php:153
-#: ../../../../ajax/ajax_passReset.php:75
-msgid "Clave actualizada"
-msgstr "Mot de passe actualisé"
-
-#: ../../../../ajax/ajax_accountSave.php:249
-msgid "Error al actualizar la clave"
-msgstr "Erreur pendant l'actualisation du mot de passe"
-
-#: ../../../../ajax/ajax_accountSave.php:256
-msgid "Cuenta restaurada"
-msgstr "Compte restauré"
-
-#: ../../../../ajax/ajax_accountSave.php:259
-msgid "Error al restaurar cuenta"
-msgstr "Erreur pendant la restauration du compte"
-
-#: ../../../../ajax/ajax_appMgmtData.php:54
-msgid "Ver Usuario"
-msgstr "Détails Utilisateur"
-
-#: ../../../../ajax/ajax_appMgmtData.php:61
-#: ../../../../web/UsersMgmtC.class.php:137
-msgid "Editar Usuario"
-msgstr "Editer Utilisateur"
-
-#: ../../../../ajax/ajax_appMgmtData.php:67
-#: ../../../../inc/UserBase.class.php:383
-#: ../../../../web/UsersMgmtC.class.php:122
-msgid "Nuevo Usuario"
-msgstr "Nouvel Utilisateur"
-
-#: ../../../../ajax/ajax_appMgmtData.php:73
-msgid "Ver Grupo"
-msgstr "Détails Groupe"
-
-#: ../../../../ajax/ajax_appMgmtData.php:80
-#: ../../../../web/UsersMgmtC.class.php:203
-msgid "Editar Grupo"
-msgstr "Editer Groupe"
-
-#: ../../../../ajax/ajax_appMgmtData.php:86
-#: ../../../../inc/Groups.class.php:152 ../../../../inc/Groups.class.php:253
-#: ../../../../web/UsersMgmtC.class.php:195
-msgid "Nuevo Grupo"
-msgstr "Nouveau Groupe"
-
-#: ../../../../ajax/ajax_appMgmtData.php:92
-msgid "Ver Perfil"
-msgstr "Détails Profil"
-
-#: ../../../../ajax/ajax_appMgmtData.php:99
-#: ../../../../web/UsersMgmtC.class.php:268
-msgid "Editar Perfil"
-msgstr "Editer Profil"
-
-#: ../../../../ajax/ajax_appMgmtData.php:105
-#: ../../../../inc/ProfileBase.class.php:512
-#: ../../../../web/UsersMgmtC.class.php:253
-msgid "Nuevo Perfil"
-msgstr "Nouveau Profil"
-
-#: ../../../../ajax/ajax_appMgmtData.php:111
-msgid "Ver Cliente"
-msgstr "Détails Client"
-
-#: ../../../../ajax/ajax_appMgmtData.php:118
-#: ../../../../web/AccountsMgmtC.class.php:153
-msgid "Editar Cliente"
-msgstr "Editer Client"
-
-#: ../../../../ajax/ajax_appMgmtData.php:124
-#: ../../../../inc/Customer.class.php:65
-#: ../../../../web/AccountsMgmtC.class.php:146
-msgid "Nuevo Cliente"
-msgstr "Nouveau Client"
-
-#: ../../../../ajax/ajax_appMgmtData.php:130
-msgid "Ver Categoría"
-msgstr "Détails Catégorie"
-
-#: ../../../../ajax/ajax_appMgmtData.php:137
-#: ../../../../web/AccountsMgmtC.class.php:95
-msgid "Editar Categoría"
-msgstr "Editer Catégorie"
-
-#: ../../../../ajax/ajax_appMgmtData.php:143
-#: ../../../../inc/Category.class.php:83
-#: ../../../../web/AccountsMgmtC.class.php:87
-#: ../../../../inc/themes/classic/account.inc:53
-#: ../../../../inc/themes/material-blue/account.inc:62
-msgid "Nueva Categoría"
-msgstr "Nouvelle Catégorie"
-
-#: ../../../../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:400
-msgid "Nueva Autorización"
-msgstr "Nouvelle autorisation"
-
-#: ../../../../ajax/ajax_appMgmtData.php:162
-#: ../../../../web/UsersMgmtC.class.php:415
-msgid "Editar Autorización"
-msgstr "Editer l'autorisation"
-
-#: ../../../../ajax/ajax_appMgmtData.php:168
-#: ../../../../web/AccountsMgmtC.class.php:274
-msgid "Nuevo Campo"
-msgstr "Nouveau Champ"
-
-#: ../../../../ajax/ajax_appMgmtData.php:174
-#: ../../../../web/AccountsMgmtC.class.php:281
-msgid "Editar Campo"
-msgstr "Editer Champ"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:86
-msgid "Es necesario un nombre de usuario"
-msgstr "Nom d'utilisateur requis"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:88
-msgid "Es necesario un login"
-msgstr "Login requis"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:90
-msgid "Es necesario un perfil"
-msgstr "Profil requis"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:92
-msgid "Es necesario un grupo"
-msgstr "Groupe requis"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:94
-msgid "Es necesario un email"
-msgstr "Courriel requis"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:96
-#: ../../../../ajax/ajax_appMgmtSave.php:145
-#: ../../../../ajax/ajax_appMgmtSave.php:160
-#: ../../../../ajax/ajax_backup.php:54
-#: ../../../../ajax/ajax_configSave.php:307
-#: ../../../../ajax/ajax_import.php:40 ../../../../ajax/ajax_migrate.php:40
-#: ../../../../ajax/ajax_userPrefsSave.php:88
-msgid "Ey, esto es una DEMO!!"
-msgstr "Hey, ceci est une DEMO"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:101
-msgid "Login de usuario duplicado"
-msgstr "Login utilisateur dupliqué"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:104
-msgid "Email de usuario duplicado"
-msgstr "Courriel de l'utilisateur dupliqué"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:110
-#: ../../../../ajax/ajax_appMgmtSave.php:147
-msgid "La clave no puede estar en blanco"
-msgstr "Le mot de passe ne peut pas être blanc"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:123
-msgid "Usuario creado"
-msgstr "Utilisateur ajouté"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:126
-msgid "Error al crear el usuario"
-msgstr "Erreur pendant la création d'utilisateur"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:136
-#: ../../../../inc/UserMigrate.class.php:89
-msgid "Usuario actualizado"
-msgstr "Utilisateur actualisé"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:139
-msgid "Error al actualizar el usuario"
-msgstr "Erreur pendant l'actualisation de l'utilisateur"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:156
-#: ../../../../ajax/ajax_passReset.php:79
-msgid "Error al modificar la clave"
-msgstr "Erreur pendant la modification du mot de passe"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:162
-msgid "No es posible eliminar, usuario en uso"
-msgstr "Impossible à supprimer, utilisateur actif"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:166
-msgid "Usuario eliminado"
-msgstr "Utilisateur supprimé"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:169
-msgid "Error al eliminar el usuario"
-msgstr "Erreur pendant la suppression de l'utilisateur"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:184
-msgid "Es necesario un nombre de grupo"
-msgstr "Nom de groupe requis"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:192
-msgid "Nombre de grupo duplicado"
-msgstr "Nom de groupe dupliqué"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:204
-msgid "Grupo creado"
-msgstr "Groupe ajouté"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:206
-msgid "Error al crear el grupo"
-msgstr "Erreur pendant la création de groupe"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:217
-msgid "Grupo actualizado"
-msgstr "Gropue actualisé"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:220
-msgid "Error al actualizar el grupo"
-msgstr "Erreur pendant l'actualisation du groupe"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:229
-#: ../../../../ajax/ajax_appMgmtSave.php:306
-#: ../../../../inc/CustomFieldsBase.class.php:109
-#: ../../../../inc/themes/classic/account.inc:112
-#: ../../../../inc/themes/classic/groups.inc:24
-#: ../../../../inc/themes/classic/profiles.inc:85
-#: ../../../../inc/themes/material-blue/account.inc:138
-#: ../../../../inc/themes/material-blue/groups.inc:32
-#: ../../../../inc/themes/material-blue/profiles.inc:99
-msgid "Usuarios"
-msgstr "Utilisateurs"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:233
-#: ../../../../inc/Category.class.php:266
-#: ../../../../inc/CustomFieldsBase.class.php:106
-#: ../../../../inc/Customer.class.php:150
-#: ../../../../inc/themes/classic/profiles.inc:15
-#: ../../../../inc/themes/material-blue/config.inc:176
-#: ../../../../inc/themes/material-blue/profiles.inc:19
-msgid "Cuentas"
-msgstr "Comptes"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:236
-#: ../../../../ajax/ajax_appMgmtSave.php:308
-#: ../../../../inc/Category.class.php:119
-#: ../../../../inc/Customer.class.php:150
-msgid "No es posible eliminar"
-msgstr "Impossible de supprimer"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:236
-msgid "Grupo en uso por:"
-msgstr "Groupe utilisé par:"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:241
-msgid "Grupo eliminado"
-msgstr "Groupe supprimé"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:244
-msgid "Error al eliminar el grupo"
-msgstr "Erreur pendant la supression du groupe"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:283
-msgid "Es necesario un nombre de perfil"
-msgstr "Nom de profil requis"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:285
-msgid "Nombre de perfil duplicado"
-msgstr "Nom de profil dupliqué"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:290
-msgid "Perfil creado"
-msgstr "Profil ajouté"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:293
-msgid "Error al crear el perfil"
-msgstr "Erreur pendant la création de profil"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:296
-msgid "Perfil actualizado"
-msgstr "Profil actualisé"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:299
-msgid "Error al actualizar el perfil"
-msgstr "Erreur pendant l'actualisation du profil"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:308
-msgid "Perfil en uso por:"
-msgstr "Profil utilisé par:"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:311
-msgid "Perfil eliminado"
-msgstr "Profil supprimé"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:314
-msgid "Error al eliminar el perfil"
-msgstr "Erreur pendant la suppression du profil"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:349
-msgid "Cliente creado"
-msgstr "Client ajouté"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:364
-msgid "Cliente actualizado"
-msgstr "Client actualisé"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:374
-msgid "Cliente eliminado"
-msgstr "Client supprimé"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:388
-msgid "Es necesario un nombre de categoría"
-msgstr "Nom de catégorie requis"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:408
-msgid "Categoría creada"
-msgstr "Catégorie ajoutée"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:423
-msgid "Categoría actualizada"
-msgstr "Catégorie actualisée"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:434
-msgid "Categoría eliminada"
-msgstr "Catégorie supprimé"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:450
-msgid "Usuario o acción no indicado"
-msgstr "Utilisateur ou action non défini"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:460
-msgid "Autorización creada"
-msgstr "Autorisation ajoutée"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:468
-msgid "Autorización actualizada"
-msgstr "Autorisation mise à jour"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:478
-msgid "Autorización eliminada"
-msgstr "Autorisation supprimée"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:495
-msgid "Nombre del campo no indicado"
-msgstr "Nom de champ indéfini"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:497
-msgid "Tipo del campo no indicado"
-msgstr "Type de champ indéfini"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:499
-msgid "Módulo del campo no indicado"
-msgstr "Module de champ indéfini"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:513
-msgid "Campo creado"
-msgstr "Champ ajouté"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:522
-msgid "Campo actualizado"
-msgstr "Champ mis à jour"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:532
-msgid "Campo eliminado"
-msgstr "Champ supprimé"
-
-#: ../../../../ajax/ajax_backup.php:58 ../../../../ajax/ajax_backup.php:63
-#: ../../../../inc/themes/classic/backup.inc:54
-msgid "Realizar Backup"
-msgstr "Effectuer une sauvegarde"
-
-#: ../../../../ajax/ajax_backup.php:58 ../../../../ajax/ajax_backup.php:60
-msgid "Error al realizar el backup"
-msgstr "Erreur pendant la sauvegarde"
-
-#: ../../../../ajax/ajax_backup.php:60 ../../../../ajax/ajax_backup.php:74
-#: ../../../../ajax/ajax_checkLdap.php:58 ../../../../inc/Import.class.php:128
-#: ../../../../inc/Migrate.class.php:92
-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:63
-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"
-
-#: ../../../../ajax/ajax_backup.php:65
-msgid "Proceso de backup finalizado"
-msgstr "Processus de sauvegarde terminé"
-
-#: ../../../../ajax/ajax_backup.php:72 ../../../../ajax/ajax_backup.php:77
-msgid "Realizar Exportación"
-msgstr "Exporter"
-
-#: ../../../../ajax/ajax_backup.php:72
-msgid "Error al realizar la exportación de cuentas"
-msgstr "Erreur pendant l'exportation de comptes"
-
-#: ../../../../ajax/ajax_backup.php:74
-msgid "Error al realizar la exportación"
-msgstr "Problème durant l'export"
-
-#: ../../../../ajax/ajax_backup.php:77
-msgid "Exportación de cuentas realizada correctamente"
-msgstr "Export réalisé avec succès"
-
-#: ../../../../ajax/ajax_backup.php:79
-msgid "Proceso de exportación finalizado"
-msgstr "Processus d'export terminé"
-
-#: ../../../../ajax/ajax_checkLdap.php:52 ../../../../inc/Ldap.class.php:264
-msgid "Los parámetros de LDAP no están configurados"
-msgstr "Les paramètres LDAP ne sont pas définis"
-
-#: ../../../../ajax/ajax_checkLdap.php:58
-msgid "Error de conexión a LDAP"
-msgstr "Erreur de connexion LDAP"
-
-#: ../../../../ajax/ajax_checkLdap.php:60
-msgid "Conexión a LDAP correcta"
-msgstr "Connexion LDAP OK"
-
-#: ../../../../ajax/ajax_checkLdap.php:60
-msgid "Objetos encontrados"
-msgstr "Objets trouvés"
-
-#: ../../../../ajax/ajax_configSave.php:58
-msgid "Modificar Configuración"
-msgstr "Modifier Configuration"
-
-#: ../../../../ajax/ajax_configSave.php:101
-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:109 ../../../../js/strings.js.php:46
-msgid "Extensión no permitida"
-msgstr "Extension non autorisée"
-
-#: ../../../../ajax/ajax_configSave.php:128
-msgid "Faltan parámetros de Proxy"
-msgstr "Paramètres Proxy manquant"
-
-#: ../../../../ajax/ajax_configSave.php:136
-msgid "Proxy habiltado"
-msgstr "Proxy activé"
-
-#: ../../../../ajax/ajax_configSave.php:140
-msgid "Proxy deshabilitado"
-msgstr "Proxy désactivé"
-
-#: ../../../../ajax/ajax_configSave.php:143
-#: ../../../../ajax/ajax_configSave.php:167
-#: ../../../../ajax/ajax_configSave.php:201
-#: ../../../../ajax/ajax_configSave.php:240
-msgid "Sección"
-msgstr "Section"
-
-#: ../../../../ajax/ajax_configSave.php:143
-#: ../../../../web/ConfigC.class.php:108
-#: ../../../../inc/themes/classic/profiles.inc:61
-#: ../../../../inc/themes/material-blue/profiles.inc:72
-msgid "General"
-msgstr "Générale"
-
-#: ../../../../ajax/ajax_configSave.php:153
-msgid "Faltan parámetros de Wiki"
-msgstr "Paramètres Wiki manquants"
-
-#: ../../../../ajax/ajax_configSave.php:160
-msgid "Wiki habiltada"
-msgstr "Wiki activé"
-
-#: ../../../../ajax/ajax_configSave.php:164
-msgid "Wiki deshabilitada"
-msgstr "Wiki désactivé"
-
-#: ../../../../ajax/ajax_configSave.php:167
-#: ../../../../web/ConfigC.class.php:244
-#: ../../../../inc/themes/classic/wiki.inc:4
-#: ../../../../inc/themes/material-blue/wiki.inc:4
-msgid "Wiki"
-msgstr "Wiki"
-
-#: ../../../../ajax/ajax_configSave.php:182
-msgid "Faltan parámetros de LDAP"
-msgstr "Paramètres LDAP manquants"
-
-#: ../../../../ajax/ajax_configSave.php:194
-msgid "LDAP habiltado"
-msgstr "LDAP activé"
-
-#: ../../../../ajax/ajax_configSave.php:198
-msgid "LDAP deshabilitado"
-msgstr "LDAP désactivé"
-
-#: ../../../../ajax/ajax_configSave.php:201
-#: ../../../../web/ConfigC.class.php:276
-#: ../../../../inc/themes/classic/ldap.inc:4
-#: ../../../../inc/themes/material-blue/ldap.inc:4
-msgid "LDAP"
-msgstr "LDAP"
-
-#: ../../../../ajax/ajax_configSave.php:216
-msgid "Faltan parámetros de Correo"
-msgstr "Paramètres de courriel manquants"
-
-#: ../../../../ajax/ajax_configSave.php:231
-msgid "Correo habiltado"
-msgstr "Courriel activé"
-
-#: ../../../../ajax/ajax_configSave.php:237
-msgid "Correo deshabilitado"
-msgstr "Courriel désactivé"
-
-#: ../../../../ajax/ajax_configSave.php:240
-#: ../../../../web/ConfigC.class.php:306
-#: ../../../../inc/themes/classic/mail.inc:4
-#: ../../../../inc/themes/material-blue/mail.inc:4
-msgid "Correo"
-msgstr "Courriel"
-
-#: ../../../../ajax/ajax_configSave.php:262
-msgid "Configuración actualizada"
-msgstr "Configuration actualisée"
-
-#: ../../../../ajax/ajax_configSave.php:271
-#: ../../../../ajax/ajax_configSave.php:317
-#: ../../../../ajax/ajax_viewpass.php:61
-#: ../../../../inc/Controller.class.php:169
-msgid "Clave maestra actualizada"
-msgstr "Mot de passe maître actualisé"
-
-#: ../../../../ajax/ajax_configSave.php:271
-#: ../../../../ajax/ajax_viewpass.php:61
-#: ../../../../inc/Controller.class.php:169
-msgid "Reinicie la sesión para cambiarla"
-msgstr "Redémarrez la session pour mettre à jour"
-
-#: ../../../../ajax/ajax_configSave.php:273
-msgid "Clave maestra no indicada"
-msgstr "Mot de passe maître requis"
-
-#: ../../../../ajax/ajax_configSave.php:275
-msgid "Se ha de confirmar el cambio de clave"
-msgstr "Le changement de mot de passe doit être confirmé"
-
-#: ../../../../ajax/ajax_configSave.php:279
-msgid "Las claves son idénticas"
-msgstr "Les mots de passe sont identiques"
-
-#: ../../../../ajax/ajax_configSave.php:281
-msgid "Las claves maestras no coinciden"
-msgstr "Les mots de passe maîtres ne correspondent pas"
-
-#: ../../../../ajax/ajax_configSave.php:283
-msgid "La clave maestra actual no coincide"
-msgstr "Le mot de passe maître actuel ne correspond pas"
-
-#: ../../../../ajax/ajax_configSave.php:292
-msgid "Errores al actualizar las claves de las cuentas"
-msgstr "Erreur pendant la modification des mots de passe des comptes"
-
-#: ../../../../ajax/ajax_configSave.php:298
-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:302
-msgid "Errores al actualizar datos de campos personalizados"
-msgstr "Erreur pendant la mise à jour de champs personnalisés"
-
-#: ../../../../ajax/ajax_configSave.php:315
-#: ../../../../inc/Account.class.php:512
-msgid "Actualizar Clave Maestra"
-msgstr "Mettre à jour le Mot de passe Maître"
-
-#: ../../../../ajax/ajax_configSave.php:319
-msgid "Error al guardar el hash de la clave maestra"
-msgstr "Erreur pendant la sauvegarde du hash du mot de passe maître"
-
-#: ../../../../ajax/ajax_configSave.php:327
-msgid "Generar Clave Temporal"
-msgstr "Générer un mot de passe temporaire"
-
-#: ../../../../ajax/ajax_configSave.php:327
-#: ../../../../inc/CustomFieldsBase.class.php:87
-#: ../../../../inc/themes/classic/account.inc:86
-#: ../../../../inc/themes/classic/editpass.inc:25
-#: ../../../../inc/themes/classic/encryption.inc:143
-#: ../../../../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/passreset.inc:34
-#: ../../../../inc/themes/classic/users.inc:75
-#: ../../../../inc/themes/classic/userspass.inc:8
-#: ../../../../inc/themes/classic/userspass.inc:11
-#: ../../../../inc/themes/material-blue/account.inc:99
-#: ../../../../inc/themes/material-blue/account.inc:104
-#: ../../../../inc/themes/material-blue/config.inc:414
-#: ../../../../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/encryption.inc:161
-#: ../../../../inc/themes/material-blue/install.inc:47
-#: ../../../../inc/themes/material-blue/ldap.inc:105
-#: ../../../../inc/themes/material-blue/login.inc:18
-#: ../../../../inc/themes/material-blue/login.inc:41
-#: ../../../../inc/themes/material-blue/mail.inc:73
-#: ../../../../inc/themes/material-blue/mail.inc:80
-#: ../../../../inc/themes/material-blue/passreset.inc:30
-#: ../../../../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"
-
-#: ../../../../ajax/ajax_configSave.php:329
-msgid "Clave Temporal Generada"
-msgstr "Mot de passe temporel generé"
-
-#: ../../../../ajax/ajax_configSave.php:331
-msgid "Error al generar clave temporal"
-msgstr "Erreur pendant la génération du mot de passe temporaire"
-
-#: ../../../../ajax/ajax_doLogin.php:49
-msgid "Usuario/Clave no introducidos"
-msgstr "Utilisateur/Mot de passe non saisi"
-
-#: ../../../../ajax/ajax_doLogin.php:61
-msgid "Inicio sesión"
-msgstr "Se connecter"
-
-#: ../../../../ajax/ajax_doLogin.php:66
-msgid "Servidor Login"
-msgstr "Connexion au serveur"
-
-#: ../../../../ajax/ajax_doLogin.php:72
-msgid "Error al guardar los datos de LDAP"
-msgstr "Erreur pendant la sauvegarde des données utilisateur LDAP"
-
-#: ../../../../ajax/ajax_doLogin.php:75 ../../../../ajax/ajax_doLogin.php:83
-#: ../../../../ajax/ajax_doLogin.php:135 ../../../../ajax/ajax_doLogin.php:179
-#: ../../../../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:188
-#: ../../../../inc/Crypt.class.php:199
-#: ../../../../inc/XmlImportBase.class.php:79
-msgid "Error interno"
-msgstr "Erreur Interne"
-
-#: ../../../../ajax/ajax_doLogin.php:80
-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"
-
-#: ../../../../ajax/ajax_doLogin.php:88 ../../../../ajax/ajax_doLogin.php:113
-msgid "Login incorrecto"
-msgstr "Login incorrecte"
-
-#: ../../../../ajax/ajax_doLogin.php:89 ../../../../ajax/ajax_doLogin.php:96
-#: ../../../../ajax/ajax_doLogin.php:103 ../../../../ajax/ajax_doLogin.php:114
-#: ../../../../ajax/ajax_doLogin.php:124 ../../../../ajax/ajax_doLogin.php:174
-#: ../../../../inc/ApiTokens.class.php:190
-#: ../../../../inc/ApiTokens.class.php:308 ../../../../inc/Auth.class.php:108
-#: ../../../../inc/Init.class.php:466 ../../../../inc/Ldap.class.php:295
-#: ../../../../inc/Ldap.class.php:308 ../../../../inc/Ldap.class.php:316
-#: ../../../../inc/UserBase.class.php:384
-#: ../../../../inc/UserBase.class.php:528 ../../../../res/test.php:64
-#: ../../../../web/SearchC.class.php:305
-#: ../../../../web/UsersMgmtC.class.php:393
-#: ../../../../inc/themes/classic/account.inc:73
-#: ../../../../inc/themes/classic/editpass.inc:21
-#: ../../../../inc/themes/classic/eventlog.inc:23
-#: ../../../../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:89
-#: ../../../../inc/themes/classic/tokens.inc:8
-#: ../../../../inc/themes/material-blue/account.inc:84
-#: ../../../../inc/themes/material-blue/config.inc:400
-#: ../../../../inc/themes/material-blue/editpass.inc:22
-#: ../../../../inc/themes/material-blue/eventlog.inc:23
-#: ../../../../inc/themes/material-blue/info.inc:39
-#: ../../../../inc/themes/material-blue/ldap.inc:86
-#: ../../../../inc/themes/material-blue/login.inc:11
-#: ../../../../inc/themes/material-blue/login.inc:34
-#: ../../../../inc/themes/material-blue/mail.inc:61
-#: ../../../../inc/themes/material-blue/mail.inc:67
-#: ../../../../inc/themes/material-blue/passreset.inc:16
-#: ../../../../inc/themes/material-blue/request.inc:20
-#: ../../../../inc/themes/material-blue/search.inc:91
-#: ../../../../inc/themes/material-blue/tokens.inc:8
-msgid "Usuario"
-msgstr "Utilisateur"
-
-#: ../../../../ajax/ajax_doLogin.php:92 ../../../../ajax/ajax_doLogin.php:106
-#: ../../../../ajax/ajax_doLogin.php:117
-msgid "Usuario/Clave incorrectos"
-msgstr "Utilisateur/Mot de passe incorrecte"
-
-#: ../../../../ajax/ajax_doLogin.php:95 ../../../../ajax/ajax_doLogin.php:99
-msgid "Cuenta expirada"
-msgstr "Compte expiré"
-
-#: ../../../../ajax/ajax_doLogin.php:102
-msgid "El usuario no tiene grupos asociados"
-msgstr "L'utilisateur n'a pas de groupe associé"
-
-#: ../../../../ajax/ajax_doLogin.php:123 ../../../../ajax/ajax_doLogin.php:127
-msgid "Usuario deshabilitado"
-msgstr "Utilisateur désactivé"
-
-#: ../../../../ajax/ajax_doLogin.php:132
-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"
-
-#: ../../../../ajax/ajax_doLogin.php:142
-msgid "La clave maestra no ha sido guardada o es incorrecta"
-msgstr "Mot de passe maître non sauvegardé ou incorrecte"
-
-#: ../../../../ajax/ajax_doLogin.php:149 ../../../../ajax/ajax_doLogin.php:152
-msgid "Clave maestra incorrecta"
-msgstr "Mot de passe maître invalide"
-
-#: ../../../../ajax/ajax_doLogin.php:175
-#: ../../../../inc/ProfileBase.class.php:512
-#: ../../../../inc/ProfileBase.class.php:550
-#: ../../../../inc/ProfileBase.class.php:593
-#: ../../../../web/UsersMgmtC.class.php:90
-#: ../../../../inc/themes/classic/users.inc:37
-#: ../../../../inc/themes/material-blue/users.inc:43
-msgid "Perfil"
-msgstr "Profil"
-
-#: ../../../../ajax/ajax_doLogin.php:176 ../../../../inc/Groups.class.php:158
-#: ../../../../inc/Groups.class.php:259 ../../../../inc/Groups.class.php:375
-#: ../../../../inc/Ldap.class.php:218 ../../../../inc/Ldap.class.php:231
-#: ../../../../inc/Ldap.class.php:241 ../../../../inc/Ldap.class.php:390
-#: ../../../../web/UsersMgmtC.class.php:91
-#: ../../../../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"
-
-#: ../../../../ajax/ajax_files.php:46 ../../../../ajax/ajax_getFiles.php:40
+#: ../../../../ajax/ajax_accGetFiles.php:43
+#: ../../../../ajax/ajax_filesMgmt.php:58
msgid "Gestión de archivos deshabilitada"
msgstr "Gestion des fichiers désactivé"
-#: ../../../../ajax/ajax_files.php:60 ../../../../inc/Files.class.php:63
+#: ../../../../ajax/ajax_accGetFiles.php:50
+#: ../../../../ajax/ajax_accSearch.php:44
+#: ../../../../ajax/ajax_filesMgmt.php:54
+#: ../../../../ajax/ajax_filesMgmt.php:70
+#: ../../../../ajax/ajax_passReset.php:49
+#: ../../../../ajax/ajax_userPrefsSave.php:58
+msgid "CONSULTA INVÁLIDA"
+msgstr "REQUETE INVALIDE"
+
+#: ../../../../ajax/ajax_accSearch.php:38
+#: ../../../../ajax/ajax_userPrefsSave.php:51
+#: ../../../../inc/SP/Controller/RequestControllerTrait.class.php:125
+msgid "La sesión no se ha iniciado o ha caducado"
+msgstr "Session non démarrée ou expirée"
+
+#: ../../../../ajax/ajax_filesMgmt.php:73
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:93
msgid "Subir Archivo"
msgstr "Charger Fichier"
-#: ../../../../ajax/ajax_files.php:69
+#: ../../../../ajax/ajax_filesMgmt.php:79
+#, fuzzy
msgid "No hay extensiones permitidas"
msgstr "Il n'y a pas d'extension permise"
-#: ../../../../ajax/ajax_files.php:80 ../../../../inc/FileImport.class.php:115
+#: ../../../../ajax/ajax_filesMgmt.php:96
+#: ../../../../inc/SP/Import/FileImport.class.php:97
msgid "Tipo de archivo no soportado"
msgstr "Types de fichiers non supportés"
-#: ../../../../ajax/ajax_files.php:86
+#: ../../../../ajax/ajax_filesMgmt.php:97
+msgid "Extensión"
+msgstr "Extension"
+
+#: ../../../../ajax/ajax_filesMgmt.php:103
msgid "Archivo inválido"
msgstr "Fichier invalide"
-#: ../../../../ajax/ajax_files.php:102 ../../../../ajax/ajax_files.php:119
-#: ../../../../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:109
-msgid "El archivo es mayor de "
-msgstr "Fichier plus gros que"
-
-#: ../../../../ajax/ajax_files.php:126
-msgid "Archivo guardado"
-msgstr "Fichier sauvegardé"
-
-#: ../../../../ajax/ajax_files.php:131
-msgid "No se pudo guardar el archivo"
-msgstr "Erreur pendant la sauvegarde de fichier"
-
-#: ../../../../ajax/ajax_files.php:141 ../../../../ajax/ajax_files.php:200
-msgid "No es un ID de archivo válido"
-msgstr "ID de fichier invalide"
-
-#: ../../../../ajax/ajax_files.php:149
-msgid "El archivo no existe"
-msgstr "Fichier inexistant"
-
-#: ../../../../ajax/ajax_files.php:158
-#: ../../../../inc/themes/classic/files.inc:19
-#: ../../../../inc/themes/material-blue/files.inc:19
-msgid "Descargar Archivo"
-msgstr "Télécharger Fichier"
-
-#: ../../../../ajax/ajax_files.php:159 ../../../../ajax/ajax_viewpass.php:70
-#: ../../../../inc/Files.class.php:112
-#: ../../../../inc/themes/classic/eventlog.inc:14
-#: ../../../../inc/themes/material-blue/eventlog.inc:14
-msgid "ID"
-msgstr "ID"
-
-#: ../../../../ajax/ajax_files.php:160 ../../../../inc/Files.class.php:65
-#: ../../../../inc/Files.class.php:113
-#: ../../../../inc/themes/classic/import.inc:152
-#: ../../../../inc/themes/material-blue/import.inc:80
+#: ../../../../ajax/ajax_filesMgmt.php:104
+#: ../../../../ajax/ajax_filesMgmt.php:166
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:835
+#: ../../../../inc/SP/Core/Upgrade.class.php:285
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:95
+#: ../../../../inc/themes/material-blue/views/config/import.inc:66
+#: ../../../../inc/themes/material-blue/views/config/import.inc:69
msgid "Archivo"
msgstr "Fichier"
-#: ../../../../ajax/ajax_files.php:161 ../../../../inc/Files.class.php:66
-#: ../../../../inc/Files.class.php:114
-#: ../../../../web/AccountsMgmtC.class.php:267
-#: ../../../../inc/themes/classic/customfields.inc:16
-#: ../../../../inc/themes/material-blue/customfields.inc:19
-msgid "Tipo"
-msgstr "Type"
+#: ../../../../ajax/ajax_filesMgmt.php:117
+#: ../../../../ajax/ajax_filesMgmt.php:135
+#: ../../../../inc/SP/Import/FileImport.class.php:113
+#: ../../../../inc/SP/Import/FileImport.class.php:157
+#: ../../../../inc/SP/Import/FileImport.class.php:185
+msgid "Error interno al leer el archivo"
+msgstr "Erreur interne à la lecture du fichier"
-#: ../../../../ajax/ajax_files.php:162 ../../../../inc/Files.class.php:67
-#: ../../../../inc/Files.class.php:115
+#: ../../../../ajax/ajax_filesMgmt.php:124
+msgid "Tamaño de archivo superado"
+msgstr "Taille de fichier dépassé"
+
+#: ../../../../ajax/ajax_filesMgmt.php:125
+#: ../../../../ajax/ajax_filesMgmt.php:168
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:284
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:97
msgid "Tamaño"
msgstr "Taille"
-#: ../../../../ajax/ajax_files.php:204
-msgid "Archivo eliminado"
-msgstr "Fichier supprimé"
+#: ../../../../ajax/ajax_filesMgmt.php:144
+msgid "Archivo guardado"
+msgstr "Fichier sauvegardé"
-#: ../../../../ajax/ajax_files.php:209
-msgid "Error al eliminar el archivo"
-msgstr "Erreur pendant la supression du fichier"
+#: ../../../../ajax/ajax_filesMgmt.php:146
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:77
+msgid "No se pudo guardar el archivo"
+msgstr "Erreur pendant la sauvegarde de fichier"
-#: ../../../../ajax/ajax_getContent.php:42
-#: ../../../../inc/ApiRequest.class.php:55
-#: ../../../../inc/CustomFieldDef.class.php:45
-#: ../../../../inc/CustomFields.class.php:54
-msgid "Parámetros incorrectos"
-msgstr "Paramètres Incorrects"
+#: ../../../../ajax/ajax_filesMgmt.php:154
+#: ../../../../ajax/ajax_filesMgmt.php:198
+msgid "No es un ID de archivo válido"
+msgstr "ID de fichier invalide"
-#: ../../../../ajax/ajax_migrate.php:56
-msgid "Confirmar la importación de cuentas"
-msgstr "Confirmer l'importation des comptes"
+#: ../../../../ajax/ajax_filesMgmt.php:160
+msgid "El archivo no existe"
+msgstr "Fichier inexistant"
-#: ../../../../ajax/ajax_migrate.php:58
-msgid "Es necesario un usuario de conexión"
-msgstr "Nom d'utilisateur de connexion requis"
+#: ../../../../ajax/ajax_filesMgmt.php:163
+#: ../../../../inc/themes/material-blue/views/account/files-list.inc:34
+msgid "Descargar Archivo"
+msgstr "Télécharger Fichier"
-#: ../../../../ajax/ajax_migrate.php:60
-msgid "Es necesaria una clave de conexión"
-msgstr "Mot de passe de connexion requis"
+#: ../../../../ajax/ajax_filesMgmt.php:164
+#: ../../../../inc/SP/Api/SyspassApi.class.php:82
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:518
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:19
+msgid "ID"
+msgstr "ID"
-#: ../../../../ajax/ajax_migrate.php:62
-msgid "Es necesario el nombre de la BBDD"
-msgstr "Nom de base de données requis"
-
-#: ../../../../ajax/ajax_migrate.php:64
-msgid "Es necesario un nombre de host"
-msgstr "Nom d'hôte requis"
-
-#: ../../../../ajax/ajax_passReset.php:50
-#: ../../../../ajax/ajax_passReset.php:53
-msgid "Recuperación de Clave"
-msgstr "Recupération de Mot de passe"
-
-#: ../../../../ajax/ajax_passReset.php:56
-#: ../../../../ajax/ajax_passReset.php:61
-msgid "Solicitado para"
-msgstr "Requis pour"
-
-#: ../../../../ajax/ajax_passReset.php:58
-#: ../../../../ajax/ajax_sendRequest.php:76
-msgid "Solicitud enviada"
-msgstr "Requête envoyée"
-
-#: ../../../../ajax/ajax_passReset.php:58
-msgid "En breve recibirá un correo para completar la solicitud."
-msgstr "Vous recevrez un courriel de confirmation sous peu."
-
-#: ../../../../ajax/ajax_passReset.php:63
-msgid "No se ha podido realizar la solicitud. Consulte con el administrador."
-msgstr "La requête ne peut aboutir. Veuillez contacter l'administrateur"
-
-#: ../../../../ajax/ajax_passReset.php:73
-#: ../../../../inc/UserBase.class.php:570
-#: ../../../../inc/UserPass.class.php:127
-msgid "Modificar Clave Usuario"
-msgstr "Modifier Mot de passe Utilisateur"
-
-#: ../../../../ajax/ajax_passReset.php:73
-#: ../../../../inc/UserBase.class.php:570
-#: ../../../../inc/UserBase.class.php:594
-#: ../../../../inc/UserPass.class.php:127
-#: ../../../../web/UsersMgmtC.class.php:89
-#: ../../../../inc/themes/classic/users.inc:21
-#: ../../../../inc/themes/material-blue/users.inc:24
-msgid "Login"
-msgstr "Login"
-
-#: ../../../../ajax/ajax_passReset.php:81
-msgid "La clave es incorrecta o no coincide"
-msgstr "Le mot de passe est incorrect ou ne correspond pas"
-
-#: ../../../../ajax/ajax_sendRequest.php:49
-msgid "Es necesaria una descripción"
-msgstr "Description requise"
-
-#: ../../../../ajax/ajax_sendRequest.php:62
-msgid "Solicitud de Modificación de Cuenta"
-msgstr "Demande de modification de Compte"
-
-#: ../../../../ajax/ajax_sendRequest.php:63
-msgid "Solicitante"
-msgstr "Demandeur"
-
-#: ../../../../ajax/ajax_sendRequest.php:64
-#: ../../../../ajax/ajax_viewpass.php:71 ../../../../inc/Account.class.php:181
-#: ../../../../inc/Account.class.php:236 ../../../../inc/Account.class.php:417
-#: ../../../../inc/Account.class.php:440 ../../../../inc/Account.class.php:684
-#: ../../../../inc/Files.class.php:64
+#: ../../../../ajax/ajax_filesMgmt.php:165
+#: ../../../../inc/SP/Api/SyspassApi.class.php:83
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:280
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:832
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:719
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:729
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:744
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:833
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1102
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:519
+#: ../../../../inc/SP/Controller/MainController.class.php:573
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:94
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:76
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:11
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:13
msgid "Cuenta"
msgstr "Compte"
-#: ../../../../ajax/ajax_sendRequest.php:65
-#: ../../../../inc/Account.class.php:180 ../../../../inc/Account.class.php:235
-#: ../../../../inc/Account.class.php:416 ../../../../inc/Account.class.php:439
-#: ../../../../inc/Account.class.php:683 ../../../../inc/Customer.class.php:65
-#: ../../../../inc/Customer.class.php:115
-#: ../../../../inc/Customer.class.php:163
-#: ../../../../web/SearchC.class.php:287
-#: ../../../../inc/themes/classic/account.inc:23
-#: ../../../../inc/themes/classic/editpass.inc:12
-#: ../../../../inc/themes/classic/request.inc:9
-#: ../../../../inc/themes/classic/search.inc:58
-#: ../../../../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:60
-msgid "Cliente"
-msgstr "Client"
+#: ../../../../ajax/ajax_filesMgmt.php:167
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:206
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:283
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:55
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:718
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:728
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:743
+#: ../../../../inc/SP/Controller/LoginController.class.php:344
+#: ../../../../inc/SP/Controller/LoginController.class.php:369
+#: ../../../../inc/SP/Controller/LoginController.class.php:407
+#: ../../../../inc/SP/Controller/LoginController.class.php:425
+#: ../../../../inc/SP/Controller/LoginController.class.php:431
+#: ../../../../inc/SP/Core/Init.class.php:430
+#: ../../../../inc/SP/Core/Init.class.php:670
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:96
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:75
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:31
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:33
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:39
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:46
+msgid "Tipo"
+msgstr "Type"
-#: ../../../../ajax/ajax_sendRequest.php:66
-#: ../../../../web/AccountsMgmtC.class.php:80
-#: ../../../../web/AccountsMgmtC.class.php:139
-#: ../../../../web/UsersMgmtC.class.php:188
-#: ../../../../inc/themes/classic/categories.inc:16
-#: ../../../../inc/themes/classic/customers.inc:16
-#: ../../../../inc/themes/classic/eventlog.inc:29
-#: ../../../../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:29
-#: ../../../../inc/themes/material-blue/groups.inc:20
-msgid "Descripción"
-msgstr "Description"
+#: ../../../../ajax/ajax_filesMgmt.php:204
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:827
+msgid "Archivo eliminado"
+msgstr "Fichier supprimé"
-#: ../../../../ajax/ajax_sendRequest.php:79
-msgid "Error al enviar la solicitud"
-msgstr "Erreur à l'envoie de la demande"
+#: ../../../../ajax/ajax_filesMgmt.php:206
+#, fuzzy
+msgid "Error al eliminar el archivo"
+msgstr "Erreur pendant la supression du fichier"
-#: ../../../../ajax/ajax_userPrefsSave.php:75
-#: ../../../../ajax/ajax_userPrefsSave.php:108
-msgid "Error al actualizar preferencias"
-msgstr "Erreur pendant l'actualisation des préférences"
+#: ../../../../ajax/ajax_filesMgmt.php:209
+#: ../../../../ajax/ajax_userPrefsSave.php:97
+#: ../../../../inc/SP/Api/ApiRequest.class.php:192
+#: ../../../../inc/SP/Controller/RequestControllerTrait.class.php:112
+msgid "Acción Inválida"
+msgstr "Action Invalide"
-#: ../../../../ajax/ajax_userPrefsSave.php:85
-#: ../../../../ajax/ajax_userPrefsSave.php:111
+#: ../../../../ajax/ajax_getContent.php:55
+#: ../../../../inc/SP/Api/ApiBase.class.php:156
+#: ../../../../inc/SP/Api/ApiRequest.class.php:178
+msgid "Parámetros incorrectos"
+msgstr "Paramètres Incorrects"
+
+#: ../../../../ajax/ajax_install.php:58
+msgid "Instalación finalizada"
+msgstr "Installation terminée"
+
+#: ../../../../ajax/ajax_passReset.php:62
+msgid "Recuperación de Clave"
+msgstr "Recupération de Mot de passe"
+
+#: ../../../../ajax/ajax_passReset.php:63
+msgid "Solicitado para"
+msgstr "Requis pour"
+
+#: ../../../../ajax/ajax_passReset.php:70
+msgid "Solicitud enviada"
+msgstr "Requête envoyée"
+
+#: ../../../../ajax/ajax_passReset.php:74
+msgid "En breve recibirá un correo para completar la solicitud."
+msgstr "Vous recevrez un courriel de confirmation sous peu."
+
+#: ../../../../ajax/ajax_passReset.php:78
+msgid "Solicitud no enviada"
+msgstr "Demande non envoyée"
+
+#: ../../../../ajax/ajax_passReset.php:79
+msgid "Compruebe datos de usuario o consulte con el administrador"
+msgstr ""
+"Veuillez vérifier les données de l'utilisateur ou contacter l'administrateur"
+
+#: ../../../../ajax/ajax_passReset.php:88
+#: ../../../../inc/SP/Mgmt/Users/UserPass.class.php:151
+msgid "Modificar Clave Usuario"
+msgstr "Modifier Mot de passe Utilisateur"
+
+#: ../../../../ajax/ajax_passReset.php:101
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:282
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:934
+msgid "Clave actualizada"
+msgstr "Mot de passe actualisé"
+
+#: ../../../../ajax/ajax_passReset.php:102
+#: ../../../../inc/SP/Auth/Database/Database.class.php:68
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:474
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:231
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:246
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:273
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:284
+#: ../../../../inc/SP/Mgmt/Users/UserMigrate.class.php:106
+#: ../../../../inc/SP/Mgmt/Users/UserPass.class.php:152
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:37
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:23
+msgid "Login"
+msgstr "Login"
+
+#: ../../../../ajax/ajax_passReset.php:109
+#, fuzzy
+msgid "La clave es incorrecta o no coincide"
+msgstr "Le mot de passe est incorrect ou ne correspond pas"
+
+#: ../../../../ajax/ajax_userPrefsSave.php:90
+#: ../../../../inc/SP/Mgmt/Users/UserPreferencesUtil.class.php:85
msgid "Preferencias actualizadas"
msgstr "Préférences mises à jour"
-#: ../../../../ajax/ajax_viewpass.php:55
-msgid "La clave maestra no coincide"
-msgstr "Le mot de passe maître ne correspond pas"
+#: ../../../../inc/SP/Account/Account.class.php:126
+#, fuzzy
+msgid "Error al modificar la cuenta"
+msgstr "Erreur pendant la modification du compte"
-#: ../../../../ajax/ajax_viewpass.php:59
-#: ../../../../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"
+#: ../../../../inc/SP/Account/Account.class.php:172
+#: ../../../../inc/SP/Account/AccountHistoryUtil.class.php:153
+msgid "Error al restaurar cuenta"
+msgstr "Erreur pendant la restauration du compte"
-#: ../../../../ajax/ajax_viewpass.php:69 ../../../../inc/Acl.class.php:133
-#: ../../../../inc/themes/classic/account.inc:389
-#: ../../../../inc/themes/classic/profiles.inc:23
-#: ../../../../inc/themes/classic/search.inc:139
-#: ../../../../inc/themes/material-blue/account.inc:433
-#: ../../../../inc/themes/material-blue/profiles.inc:35
-#: ../../../../inc/themes/material-blue/search.inc:149
-msgid "Ver Clave"
-msgstr "Voir Mot de passe"
-
-#: ../../../../ajax/ajax_viewpass.php:80 ../../../../js/strings.js.php:73
-msgid "Clave de Cuenta"
-msgstr "Mot de passe du compte"
-
-#: ../../../../api.php:56
-msgid "Ayuda Parámetros"
-msgstr "Aide paramètres"
-
-#: ../../../../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:33 ../../../../inc/Backup.class.php:28
-#: ../../../../inc/Base.php:26 ../../../../inc/Cache.class.php:28
-#: ../../../../inc/Category.class.php:29 ../../../../inc/Config.class.php:28
-#: ../../../../inc/ConfigDB.class.php:28
-#: ../../../../inc/ConfigInterface.class.php:28
-#: ../../../../inc/Controller.class.php:31 ../../../../inc/Crypt.class.php:28
-#: ../../../../inc/CryptMasterPass.class.php:28
-#: ../../../../inc/CryptPKI.class.php:28
-#: ../../../../inc/CsvImport.class.php:28
-#: ../../../../inc/CsvImportBase.class.php:28
-#: ../../../../inc/CustomFieldDef.class.php:28
-#: ../../../../inc/CustomFields.class.php:28
-#: ../../../../inc/CustomFieldsBase.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/Language.class.php:28 ../../../../inc/Ldap.class.php:29
-#: ../../../../inc/LdapADS.class.php:28 ../../../../inc/Log.class.php:28
-#: ../../../../inc/Migrate.class.php:28 ../../../../inc/Minify.class.php:30
-#: ../../../../inc/Profile.class.php:29
-#: ../../../../inc/ProfileBase.class.php:28
-#: ../../../../inc/Request.class.php:46 ../../../../inc/Response.class.php:28
-#: ../../../../inc/SPException.class.php:28
-#: ../../../../inc/Session.class.php:28
-#: ../../../../inc/SessionUtil.class.php:28
-#: ../../../../inc/SyspassImport.class.php:28
-#: ../../../../inc/Template.class.php:27 ../../../../inc/Themes.class.php:28
-#: ../../../../inc/Upgrade.class.php:29 ../../../../inc/User.class.php:28
-#: ../../../../inc/UserAccounts.class.php:28
-#: ../../../../inc/UserBase.class.php:28 ../../../../inc/UserLdap.class.php:28
-#: ../../../../inc/UserMigrate.class.php:28
-#: ../../../../inc/UserPass.class.php:28
-#: ../../../../inc/UserPassRecover.class.php:28
-#: ../../../../inc/UserPreferences.class.php:28
-#: ../../../../inc/UserUtil.class.php:28 ../../../../inc/Util.class.php:28
-#: ../../../../inc/XmlExport.class.php:28
-#: ../../../../inc/XmlImport.class.php:28
-#: ../../../../inc/XmlImportBase.class.php:28
-#: ../../../../web/AccountC.class.php:41
-#: ../../../../web/AccountsMgmtC.class.php:33
-#: ../../../../web/ConfigC.class.php:35 ../../../../web/EventlogC.class.php:30
-#: ../../../../web/SearchC.class.php:33
-#: ../../../../web/UsersMgmtC.class.php:40
-#: ../../../../web/UsersPrefsC.class.php:35
-msgid "No es posible acceder directamente a este archivo"
-msgstr "Impossible d'accéder directement à ce fichier"
-
-#: ../../../../inc/Account.class.php:112 ../../../../inc/Account.class.php:201
-#: ../../../../inc/Account.class.php:653
-msgid "Error al actualizar el historial"
-msgstr "Erreur pendant l'actualisation de l'historique"
-
-#: ../../../../inc/Account.class.php:117
-msgid "Actualizar Cuenta"
-msgstr "Actualiser Compte"
-
-#: ../../../../inc/Account.class.php:120 ../../../../inc/Account.class.php:398
-msgid "Error al actualizar los grupos secundarios"
-msgstr "Erreur pendant l'actualisation des groupes secondaires"
-
-#: ../../../../inc/Account.class.php:126 ../../../../inc/Account.class.php:406
-msgid "Error al actualizar los usuarios de la cuenta"
-msgstr "Erreur pendant la modification des comptes utilisateurs"
-
-#: ../../../../inc/Account.class.php:234
-msgid "Restaurar Cuenta"
-msgstr "Restaurer Compte"
-
-#: ../../../../inc/Account.class.php:341
-#: ../../../../inc/AccountHistory.class.php:348
-#: ../../../../inc/AccountHistory.class.php:508
+#: ../../../../inc/SP/Account/Account.class.php:200
+#: ../../../../inc/SP/Account/AccountHistory.class.php:216
+#: ../../../../inc/SP/Account/AccountHistory.class.php:503
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:415 ../../../../inc/Acl.class.php:129
-#: ../../../../web/AccountC.class.php:150 ../../../../web/MainC.class.php:183
-msgid "Nueva Cuenta"
-msgstr "Nouveau Compte"
+#: ../../../../inc/SP/Account/Account.class.php:202
+msgid "La cuenta no existe"
+msgstr "Le compte n'existe pas"
-#: ../../../../inc/Account.class.php:433
-msgid "ERROR: Error en la operación."
-msgstr "ERREUR: Echec de l'opération"
+#: ../../../../inc/SP/Account/Account.class.php:267
+#, fuzzy
+msgid "Error al crear la cuenta"
+msgstr "Erreur pendant la création de compte"
-#: ../../../../inc/Account.class.php:438 ../../../../inc/Acl.class.php:134
-#: ../../../../web/AccountC.class.php:358
-#: ../../../../inc/themes/classic/account.inc:376
-#: ../../../../inc/themes/classic/search.inc:167
-#: ../../../../inc/themes/material-blue/account.inc:427
-#: ../../../../inc/themes/material-blue/search.inc:178
-msgid "Eliminar Cuenta"
-msgstr "Supprimer Compte"
+#: ../../../../inc/SP/Account/Account.class.php:339
+#: ../../../../inc/SP/Account/AccountHistory.class.php:626
+#, fuzzy
+msgid "Error al eliminar la cuenta"
+msgstr "Erreur pendant la suppression du compte"
-#: ../../../../inc/Account.class.php:451
-msgid "Error al eliminar grupos asociados a la cuenta"
-msgstr "Erreur pendant la suppression du groupe du compte"
+#: ../../../../inc/SP/Account/Account.class.php:403
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:561
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:585
+msgid "Actualizar Clave Maestra"
+msgstr "Mettre à jour le Mot de passe Maître"
-#: ../../../../inc/Account.class.php:455
-msgid "Error al eliminar usuarios asociados a la cuenta"
-msgstr "Erreur pendant la suppression des utilisateurs du compte"
-
-#: ../../../../inc/Account.class.php:459
-msgid "Error al eliminar archivos asociados a la cuenta"
-msgstr "Erreur pendant la supression des fichiers du compte"
-
-#: ../../../../inc/Account.class.php:513
-#: ../../../../inc/AccountHistory.class.php:129
-#: ../../../../inc/XmlImport.class.php:62
+#: ../../../../inc/SP/Account/Account.class.php:404
+#: ../../../../inc/SP/Account/AccountHistory.class.php:263
msgid "Inicio"
msgstr "Début"
-#: ../../../../inc/Account.class.php:518
-#: ../../../../inc/AccountHistory.class.php:135
+#: ../../../../inc/SP/Account/Account.class.php:408
+#: ../../../../inc/SP/Account/AccountHistory.class.php:268
msgid "Error en el módulo de encriptación"
msgstr "Erreur dans le module d'encryption"
-#: ../../../../inc/Account.class.php:526
-#: ../../../../inc/AccountHistory.class.php:143
+#: ../../../../inc/SP/Account/Account.class.php:417
+#: ../../../../inc/SP/Account/AccountHistory.class.php:277
msgid "Error al obtener las claves de las cuentas"
msgstr "Erreur pendant la récupération des mot de passe des comptes"
-#: ../../../../inc/Account.class.php:542
-#: ../../../../inc/AccountHistory.class.php:165
+#: ../../../../inc/SP/Account/Account.class.php:434
+#: ../../../../inc/SP/Account/AccountHistory.class.php:305
msgid "Clave de cuenta vacía"
msgstr "Le mot du passe du compte est vide"
-#: ../../../../inc/Account.class.php:547
-#: ../../../../inc/AccountHistory.class.php:170
+#: ../../../../inc/SP/Account/Account.class.php:439
+#: ../../../../inc/SP/Account/AccountHistory.class.php:310
msgid "IV de encriptación incorrecto"
msgstr "IV d'encryption incorrect"
-#: ../../../../inc/Account.class.php:556
-#: ../../../../inc/AccountHistory.class.php:179
+#: ../../../../inc/SP/Account/Account.class.php:448
+#: ../../../../inc/SP/Account/AccountHistory.class.php:319
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:562
+#: ../../../../inc/SP/Account/Account.class.php:457
msgid "Fallo al actualizar la clave de la cuenta"
msgstr "Erreur à la mise à jour des mots de passe des comptes"
-#: ../../../../inc/Account.class.php:576
+#: ../../../../inc/SP/Account/Account.class.php:462
+#: ../../../../inc/SP/Account/AccountHistory.class.php:332
msgid "Cuentas actualizadas"
msgstr "Comptes à jour"
-#: ../../../../inc/Account.class.php:581
-#: ../../../../inc/AccountHistory.class.php:204
-#: ../../../../inc/CustomFields.class.php:285
-#: ../../../../inc/CustomFields.class.php:327
-msgid "Fin"
-msgstr "Fin"
+#: ../../../../inc/SP/Account/Account.class.php:463
+#: ../../../../inc/SP/Account/AccountHistory.class.php:333
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1019
+msgid "Errores"
+msgstr "Erreurs"
-#: ../../../../inc/Account.class.php:682
-msgid "Modificar Clave"
-msgstr "Modifier Mot de passe"
+#: ../../../../inc/SP/Account/Account.class.php:520
+#, fuzzy
+msgid "Error al actualizar la clave"
+msgstr "Erreur pendant l'actualisation du mot de passe"
-#: ../../../../inc/Account.class.php:717
-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/SP/Account/AccountFavorites.class.php:80
+msgid "Error al añadir favorito"
+msgstr "Erreur lors de l'ajout du favori"
-#: ../../../../inc/AccountHistory.class.php:128
+#: ../../../../inc/SP/Account/AccountFavorites.class.php:102
+msgid "Error al eliminar favorito"
+msgstr "Erreur lors de la suppression du favori"
+
+#: ../../../../inc/SP/Account/AccountHistory.class.php:192
+msgid "Error al actualizar el historial"
+msgstr "Erreur pendant l'actualisation de l'historique"
+
+#: ../../../../inc/SP/Account/AccountHistory.class.php:262
msgid "Actualizar Clave Maestra (H)"
msgstr "Mettre à jour le Mot de Passe Maître (H)"
-#: ../../../../inc/AccountHistory.class.php:160
+#: ../../../../inc/SP/Account/AccountHistory.class.php:300
msgid "La clave maestra del registro no coincide"
msgstr "Le mot de passe maître de l'enregistrement ne correspond pas"
-#: ../../../../inc/AccountHistory.class.php:185
+#: ../../../../inc/SP/Account/AccountHistory.class.php:328
msgid "Fallo al actualizar la clave del histórico"
msgstr "Erreur pendant la mise à jour du mot de passe maître de l'historique"
-#: ../../../../inc/AccountHistory.class.php:199
-#: ../../../../inc/CustomFields.class.php:323
-msgid "Registros actualizados"
-msgstr "Enregistrements à jour"
+#: ../../../../inc/SP/Account/AccountTags.class.php:90
+msgid "Error al añadir las etiquetas de la cuenta"
+msgstr ""
-#: ../../../../inc/Acl.class.php:112
-msgid "Denegado acceso a"
-msgstr "Accès refusé pour"
+#: ../../../../inc/SP/Account/AccountTags.class.php:129
+msgid "Error al eliminar las etiquetas de la cuenta"
+msgstr "Erreur lors de la suppression des tags du compte"
-#: ../../../../inc/Acl.class.php:126
-msgid "Buscar Cuentas"
-msgstr "Rechercher des comptes"
+#: ../../../../inc/SP/Account/AccountUtil.class.php:132
+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/Acl.class.php:127
-msgid "Ver Cuenta"
-msgstr "Voir un compte"
+#: ../../../../inc/SP/Account/UserAccounts.class.php:89
+msgid "Error al eliminar usuarios asociados a la cuenta"
+msgstr "Erreur pendant la suppression des utilisateurs du compte"
-#: ../../../../inc/Acl.class.php:128 ../../../../web/AccountC.class.php:265
-#: ../../../../inc/themes/classic/search.inc:161
-#: ../../../../inc/themes/material-blue/search.inc:172
-msgid "Copiar Cuenta"
-msgstr "Copier Compte"
+#: ../../../../inc/SP/Account/UserAccounts.class.php:130
+msgid "Error al actualizar los usuarios de la cuenta"
+msgstr "Erreur pendant la modification des comptes utilisateurs"
-#: ../../../../inc/Acl.class.php:130 ../../../../web/AccountC.class.php:329
-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:191
-#: ../../../../inc/themes/classic/profiles.inc:50
-#: ../../../../inc/themes/material-blue/account.inc:234
-#: ../../../../inc/themes/material-blue/config.inc:280
-#: ../../../../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 "Gestion des autorisations des APIs"
-
-#: ../../../../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/ConfigDB.class.php:91
-#: ../../../../inc/ConfigDB.class.php:119 ../../../../web/MainC.class.php:201
-#: ../../../../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:132
-#: ../../../../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:177
-#: ../../../../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
+#: ../../../../inc/SP/Api/ApiBase.class.php:95
+#: ../../../../inc/SP/Api/ApiBase.class.php:187
+#: ../../../../inc/SP/Api/ApiBase.class.php:199
+#: ../../../../inc/SP/Api/ApiBase.class.php:212
+#: ../../../../inc/SP/Api/ApiBase.class.php:244
+#: ../../../../inc/SP/Api/SyspassApi.class.php:74
+#: ../../../../inc/SP/Api/SyspassApi.class.php:143
msgid "Acceso no permitido"
msgstr "Accès non autorisé"
-#: ../../../../inc/Api.class.php:166
-msgid "Error de codificación"
-msgstr "Erreur d'encodage"
+#: ../../../../inc/SP/Api/ApiRequest.class.php:145
+#: ../../../../inc/SP/Import/XmlImportTrait.class.php:75
+msgid "Método inválido"
+msgstr "Méthode invalide"
-#: ../../../../inc/ApiRequest.class.php:102
-msgid "Token de autorización"
-msgstr "Token d'autorisation"
+#: ../../../../inc/SP/Api/ApiRequest.class.php:162
+msgid "Datos inválidos"
+msgstr "Donnée invalide"
-#: ../../../../inc/ApiRequest.class.php:103
-msgid "Acción a realizar"
-msgstr "Action"
+#: ../../../../inc/SP/Api/ApiRequest.class.php:164
+msgid "Formato incorrecto"
+msgstr "Mauvais format"
-#: ../../../../inc/ApiRequest.class.php:104
-msgid "Clave de usuario (opcional)"
-msgstr "Mot de passe de l'utilisateur (facultatif)"
+#: ../../../../inc/SP/Api/ApiTokens.class.php:97
+#: ../../../../inc/SP/Api/ApiTokens.class.php:125
+#: ../../../../inc/SP/Api/ApiTokens.class.php:150
+#: ../../../../inc/SP/Api/ApiTokens.class.php:183
+#: ../../../../inc/SP/Api/ApiTokens.class.php:224
+#: ../../../../inc/SP/Api/ApiTokens.class.php:242
+#: ../../../../inc/SP/Api/ApiTokens.class.php:262
+#: ../../../../inc/SP/Api/ApiTokensUtil.class.php:168
+#: ../../../../inc/SP/Controller/LoginController.class.php:182
+#: ../../../../inc/SP/Controller/LoginController.class.php:257
+#: ../../../../inc/SP/Controller/LoginController.class.php:360
+#: ../../../../inc/SP/Controller/LoginController.class.php:384
+#: ../../../../inc/SP/Core/Crypt.class.php:212
+#: ../../../../inc/SP/Core/Crypt.class.php:223
+#: ../../../../inc/SP/Import/XmlFileImport.class.php:106
+#: ../../../../inc/SP/Mgmt/Users/UserPassRecover.class.php:134
+msgid "Error interno"
+msgstr "Erreur Interne"
-#: ../../../../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 "Item à retourner"
-
-#: ../../../../inc/ApiTokens.class.php:221
+#: ../../../../inc/SP/Api/ApiTokens.class.php:129
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/SP/Api/SyspassApi.class.php:81
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:222
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:223
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:517
+#: ../../../../inc/SP/Core/Acl.class.php:191
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:48
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:71
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:54
+msgid "Ver Clave"
+msgstr "Voir Mot de passe"
-#: ../../../../inc/ApiTokens.class.php:331
-#: ../../../../web/UsersMgmtC.class.php:422
-msgid "Eliminar Autorización"
-msgstr "Supprimer l'autorisation"
+#: ../../../../inc/SP/Api/SyspassApi.class.php:84
+#: ../../../../inc/SP/Api/SyspassApi.class.php:181
+#: ../../../../inc/SP/Api/SyspassApi.class.php:219
+#: ../../../../inc/SP/Api/SyspassApi.class.php:272
+#: ../../../../inc/SP/Api/SyspassApi.class.php:308
+#: ../../../../inc/SP/Api/SyspassApi.class.php:361
+#: ../../../../inc/SP/Api/SyspassApi.class.php:397
+#: ../../../../inc/SP/Controller/MainController.class.php:574
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApiBase.class.php:197
+msgid "Origen"
+msgstr ""
-#: ../../../../inc/Auth.class.php:107
-msgid "Usuario no pertenece al grupo"
-msgstr "L'utilisateur ne fait pas partie du groupe"
+#: ../../../../inc/SP/Api/SyspassApi.class.php:178
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:914
+msgid "Crear Cuenta"
+msgstr ""
-#: ../../../../inc/Auth.class.php:186
-#: ../../../../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
+#: ../../../../inc/SP/Api/SyspassApi.class.php:179
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:915
+#: ../../../../inc/SP/Import/ImportBase.class.php:140
+msgid "Cuenta creada"
+msgstr "Compte ajouté"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:180
+#: ../../../../inc/SP/Api/SyspassApi.class.php:218
+#: ../../../../inc/SP/Api/SyspassApi.class.php:271
+#: ../../../../inc/SP/Api/SyspassApi.class.php:307
+#: ../../../../inc/SP/Api/SyspassApi.class.php:360
+#: ../../../../inc/SP/Api/SyspassApi.class.php:396
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:354
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:56
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:130
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:205
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:282
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:349
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:402
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:473
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:592
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:666
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:912
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:230
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:245
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:272
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:283
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:374
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:382
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:402
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:434
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:442
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:462
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:496
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:504
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:524
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:558
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:566
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:587
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:667
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:674
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:775
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:782
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:800
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:862
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:870
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:877
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:916
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:926
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:935
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:944
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:967
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:971
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1156
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1177
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1181
+#: ../../../../inc/SP/Core/Plugin/PluginDataStore.class.php:77
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:12
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:9
+#: ../../../../inc/themes/material-blue/views/account/account.inc:41
+#: ../../../../inc/themes/material-blue/views/account/request.inc:12
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:43
+#: ../../../../inc/themes/material-blue/views/config/info.inc:30
+#: ../../../../inc/themes/material-blue/views/itemshow/categories.inc:16
+#: ../../../../inc/themes/material-blue/views/itemshow/customers.inc:19
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:19
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:18
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:13
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:17
+#: ../../../../inc/themes/material-blue/views/itemshow/tags.inc:16
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:22
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:12
+msgid "Nombre"
+msgstr "Nom"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:209
+msgid "Cuenta no encontrada"
+msgstr ""
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:216
+#: ../../../../inc/SP/Controller/AccountController.class.php:551
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:277
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:278
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:383
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:384
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:454
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:455
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:961
+#: ../../../../inc/SP/Core/Acl.class.php:192
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:39
+msgid "Eliminar Cuenta"
+msgstr "Supprimer Compte"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:217
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:970
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1180
+msgid "Cuenta eliminada"
+msgstr "Compte supprimé"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:269
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:556
+msgid "Crear Categoría"
+msgstr ""
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:270
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:557
+#: ../../../../inc/SP/Import/ImportBase.class.php:161
+msgid "Categoría creada"
+msgstr "Catégorie ajoutée"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:299
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:127
+msgid "Categoría no encontrada"
+msgstr ""
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:305
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:111
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:112
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:584
+#: ../../../../inc/SP/Core/Acl.class.php:200
+msgid "Eliminar Categoría"
+msgstr "Supprimer Catégorie"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:306
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:579
+msgid "Categoría eliminada"
+msgstr "Catégorie supprimé"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:358
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:494
+msgid "Crear Cliente"
+msgstr ""
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:359
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:495
+#: ../../../../inc/SP/Import/ImportBase.class.php:183
+msgid "Cliente creado"
+msgstr "Client ajouté"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:388
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:132
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:203
+msgid "Cliente no encontrado"
+msgstr "Client introuvable"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:394
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:185
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:186
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:521
+#: ../../../../inc/SP/Core/Acl.class.php:205
+msgid "Eliminar Cliente"
+msgstr "Supprimer Client"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:395
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:516
+msgid "Cliente eliminado"
+msgstr "Client supprimé"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:418
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:709
+msgid "Proceso de backup finalizado"
+msgstr "Processus de sauvegarde terminé"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:424
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:704
+#: ../../../../inc/SP/Core/Backup.class.php:75
+#, fuzzy
+msgid "Error al realizar el backup"
+msgstr "Erreur pendant la sauvegarde"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:425
+#: ../../../../inc/SP/Controller/ChecksController.class.php:113
+#: ../../../../inc/SP/Controller/ChecksController.class.php:142
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:682
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:705
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1026
+#: ../../../../inc/SP/Import/Import.class.php:115
+msgid "Revise el registro de eventos para más detalles"
+msgstr "Veuillez consulter le journal des évènements pour plus de détail"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:455
+#: ../../../../inc/SP/Api/SyspassApi.class.php:472
+#: ../../../../inc/SP/Api/SyspassApi.class.php:479
+msgid "Id de la cuenta"
+msgstr "ID du compte"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:456
+#: ../../../../inc/SP/Api/SyspassApi.class.php:473
+#: ../../../../inc/SP/Api/SyspassApi.class.php:485
+msgid "Clave del usuario asociado al token"
+msgstr "Jeton associé au mot de passe de l'utilisateur"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:457
+msgid "Devolver detalles en la respuesta"
+msgstr ""
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:463
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:15
+msgid "Texto a buscar"
+msgstr "Text à chercher"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:464
+#: ../../../../inc/SP/Api/SyspassApi.class.php:503
+#: ../../../../inc/SP/Api/SyspassApi.class.php:523
+msgid "Número de resultados a mostrar"
+msgstr "Nombre de résultats à afficher"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:465
+msgid "Id de categoría a filtrar"
+msgstr "ID de la Catégorie à filtrer"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:466
+msgid "Id de cliente a filtrar"
+msgstr "ID du client à filtrer"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:486
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:18
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:16
+#: ../../../../inc/themes/material-blue/views/account/account.inc:48
+#: ../../../../inc/themes/material-blue/views/account/request.inc:19
+msgid "Nombre de cuenta"
+msgstr "Nom de compte"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:487
+#: ../../../../inc/SP/Api/SyspassApi.class.php:516
+msgid "Id de categoría"
+msgstr "ID de la Catégorie"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:488
+#: ../../../../inc/SP/Api/SyspassApi.class.php:536
+msgid "Id de cliente"
+msgstr "ID du Client"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:489
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:615
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:64
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:56
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:62
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:73
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:76
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:79
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:87
+#: ../../../../inc/themes/material-blue/views/account/account.inc:123
+#: ../../../../inc/themes/material-blue/views/account/account.inc:130
+#: ../../../../inc/themes/material-blue/views/account/viewpass.inc:31
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:254
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:257
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:61
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:138
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:77
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:84
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:229
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:236
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:102
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:109
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:35
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:41
+#: ../../../../inc/themes/material-blue/views/main/install.inc:43
+#: ../../../../inc/themes/material-blue/views/main/login.inc:27
+#: ../../../../inc/themes/material-blue/views/main/login.inc:88
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:34
+msgid "Clave"
+msgstr "Mot de passe"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:490
+#: ../../../../inc/themes/material-blue/views/account/account.inc:117
+msgid "Usuario de acceso"
+msgstr "Utilisateur d'accès"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:491
+#: ../../../../inc/themes/material-blue/views/account/account.inc:105
+msgid "URL o IP de acceso"
+msgstr "URL ou IP d'accès"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:492
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:72
+#: ../../../../inc/themes/material-blue/views/account/account.inc:172
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:135
+msgid "Notas sobre la cuenta"
+msgstr "Notes sur le compte"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:502
+msgid "Nombre de categoría a buscar"
+msgstr "Nom de la catégorie à rechercher"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:509
+#: ../../../../inc/themes/material-blue/views/itemshow/categories.inc:23
+msgid "Nombre de la categoría"
+msgstr "Nom de la catégorie"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:510
+#: ../../../../inc/themes/material-blue/views/itemshow/categories.inc:35
+msgid "Descripción de la categoría"
+msgstr "Description de la catégorie"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:522
+msgid "Nombre de cliente a buscar"
+msgstr "Nom du client à rechercher"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:529
+#: ../../../../inc/themes/material-blue/views/itemshow/customers.inc:26
+msgid "Nombre del cliente"
+msgstr "Nom du client"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:530
+#: ../../../../inc/themes/material-blue/views/itemshow/customers.inc:39
+msgid "Descripción del cliente"
+msgstr "Description du client"
+
+#: ../../../../inc/SP/Auth/Auth.class.php:87
+msgid "Método ya inicializado"
+msgstr "Méthode déjà initialisée"
+
+#: ../../../../inc/SP/Auth/Auth.class.php:89
+msgid "Método no disponible"
+msgstr "Méthode non disponible"
+
+#: ../../../../inc/SP/Auth/AuthUtil.class.php:63
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:132
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:170
msgid "Cambio de Clave"
msgstr "Changement de Mot de passe"
-#: ../../../../inc/Auth.class.php:188
+#: ../../../../inc/SP/Auth/AuthUtil.class.php:64
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"
-#: ../../../../inc/Auth.class.php:190
+#: ../../../../inc/SP/Auth/AuthUtil.class.php:66
msgid "Para completar el proceso es necesario que acceda a la siguiente URL:"
msgstr "Afin de terminer le traitement, veuillez aller sur cet URL:"
-#: ../../../../inc/Auth.class.php:194
+#: ../../../../inc/SP/Auth/AuthUtil.class.php:70
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."
-#: ../../../../inc/Backup.class.php:167
-msgid "Esta operación sólo es posible en entornos Linux"
-msgstr "Cette opération est uniquement possible en environnement Linux"
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:118
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:432
+#: ../../../../inc/SP/Controller/ChecksController.class.php:92
+msgid "Los parámetros de LDAP no están configurados"
+msgstr "Les paramètres LDAP ne sont pas définis"
-#: ../../../../inc/Backup.class.php:169
-msgid "Error al realizar backup en modo compatibilidad"
-msgstr "Erreur pendant la sauvegarde en mode compatibilité"
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:132
+#: ../../../../inc/SP/Controller/ChecksController.class.php:107
+msgid "Conexión a LDAP correcta"
+msgstr "Connexion LDAP OK"
-#: ../../../../inc/Backup.class.php:223
-#: ../../../../inc/XmlExport.class.php:467
-msgid "No es posible crear el directorio de backups"
-msgstr "Impossible de créer le dossier de sauvegarde"
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:133
+#: ../../../../inc/SP/Mgmt/Users/UserLdapSync.class.php:67
+msgid "Objetos encontrados"
+msgstr "Objets trouvés"
-#: ../../../../inc/Backup.class.php:228
-#: ../../../../inc/XmlExport.class.php:472
-msgid "Compruebe los permisos del directorio de backups"
-msgstr "Vérifiez les permissions du dossier de sauvegarde"
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:169
+msgid "No es posible conectar con el servidor de LDAP"
+msgstr "Impossible de se connecter au server LDAP"
-#: ../../../../inc/Category.class.php:69
-#: ../../../../inc/Category.class.php:165
-msgid "Nombre de categoría duplicado"
-msgstr "Nom de catégorie dupliqué"
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:170
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:49
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:19
+#: ../../../../inc/themes/material-blue/views/config/info.inc:58
+#: ../../../../inc/themes/material-blue/views/config/info.inc:61
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:62
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:87
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:27
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:34
+msgid "Servidor"
+msgstr "Serveur"
-#: ../../../../inc/Category.class.php:78
-msgid "Error al crear la categoría"
-msgstr "Erreur pendant la création de la catégorie"
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:214
+msgid "Error al conectar (BIND)"
+msgstr "Erreur de connexion (BIND)"
-#: ../../../../inc/Category.class.php:83
-#: ../../../../inc/Category.class.php:132
-#: ../../../../inc/Category.class.php:182
-#: ../../../../web/SearchC.class.php:299
-#: ../../../../inc/themes/classic/account.inc:42
-#: ../../../../inc/themes/classic/search.inc:83
-#: ../../../../inc/themes/material-blue/account.inc:51
-#: ../../../../inc/themes/material-blue/search.inc:85
-msgid "Categoría"
-msgstr "Catégorie"
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:247
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:259
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:269
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:679
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:691
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:701
+msgid "Error al buscar objetos en DN base"
+msgstr "Erreur pendant la recherche d'objets dans la base DN"
-#: ../../../../inc/Category.class.php:119
-msgid "Categoría en uso por:"
-msgstr "Catégorie utilisée par:"
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:533
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:556
+msgid "Error al buscar el DN del usuario"
+msgstr "Erreur pendant la recherche du DN de l'utilisateur"
-#: ../../../../inc/Category.class.php:129
-msgid "Error al eliminar la categoría"
-msgstr "Erreur pendant la suppression de la catégorie"
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:534
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:547
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:557
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:167
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:109
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:119
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:368
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:748
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:835
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:616
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:624
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:720
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:730
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:745
+#: ../../../../inc/SP/Controller/LoginController.class.php:196
+#: ../../../../inc/SP/Controller/LoginController.class.php:251
+#: ../../../../inc/SP/Controller/LoginController.class.php:345
+#: ../../../../inc/SP/Controller/LoginController.class.php:403
+#: ../../../../inc/SP/Controller/LoginController.class.php:426
+#: ../../../../inc/SP/Core/Init.class.php:591
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:77
+#: ../../../../inc/SP/Mgmt/Users/UserLdapSync.class.php:99
+#: ../../../../inc/SP/Mgmt/Users/UserPreferencesUtil.class.php:66
+#: ../../../../res/test.php:64
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:45
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:51
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:54
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:60
+#: ../../../../inc/themes/material-blue/views/account/account.inc:110
+#: ../../../../inc/themes/material-blue/views/account/viewpass.inc:20
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:63
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:47
+#: ../../../../inc/themes/material-blue/views/config/info.inc:46
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:117
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:64
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:71
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:209
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:223
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:31
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:35
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:37
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:12
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:14
+#: ../../../../inc/themes/material-blue/views/main/login.inc:15
+#: ../../../../inc/themes/material-blue/views/main/login.inc:87
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:16
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:90
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:92
+msgid "Usuario"
+msgstr "Utilisateur"
-#: ../../../../inc/Category.class.php:132
-#: ../../../../web/AccountsMgmtC.class.php:102
-msgid "Eliminar Categoría"
-msgstr "Supprimer Catégorie"
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:546
+msgid "Error al localizar el usuario en LDAP"
+msgstr "Erreur pendant la recherche de l'utilisateur dans l'annuaire LDAP"
-#: ../../../../inc/Category.class.php:179
-msgid "Error al actualizar la categoría"
-msgstr "Erreur pendant l'actualisation de la categorie"
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:587
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:600
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:611
+msgid "Error al buscar RDN de grupo"
+msgstr "Erreur pendant la recherche RDN du groupe"
-#: ../../../../inc/Category.class.php:182
-msgid "Modificar Categoría"
-msgstr "Modifier Catégorie"
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:588
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:601
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:612
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:134
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:144
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:158
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:168
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:108
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:120
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:476
+#: ../../../../inc/SP/Controller/LoginController.class.php:253
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:236
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:239
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:174
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:201
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:71
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:73
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:47
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:61
+msgid "Grupo"
+msgstr "Groupe"
-#: ../../../../inc/Config.class.php:148
-msgid "No es posible escribir el archivo de configuración"
-msgstr "Impossible d'écrire dans le fichier de configuration"
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:121
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:157
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:93
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:126
+msgid "Usuario verificado en grupo"
+msgstr "Utilisateur vérifié dans le groupe"
-#: ../../../../inc/Config.class.php:148
-msgid "Compruebe los permisos del directorio \"config\""
-msgstr "Vérifiez les permissions du dossier \"config\""
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:133
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:107
+msgid "Error al buscar el grupo de usuarios"
+msgstr "Erreur pendant la recherche de groupe d'utilisateurs"
-#: ../../../../inc/ConfigDB.class.php:91
-#: ../../../../inc/ConfigDB.class.php:120
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:143
+msgid "No se encontró el grupo con ese nombre"
+msgstr "Nom de groupe introuvable avec ce nom"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:166
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:118
+msgid "Usuario no pertenece al grupo"
+msgstr "L'utilisateur ne fait pas partie du groupe"
+
+#: ../../../../inc/SP/Config/ConfigDB.class.php:107
+#: ../../../../inc/SP/Config/ConfigDB.class.php:147
+#: ../../../../inc/SP/Controller/MainController.class.php:287
+#: ../../../../inc/SP/Core/Acl.class.php:215
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:75
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:216
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:218
+msgid "Configuración"
+msgstr "Configuration"
+
+#: ../../../../inc/SP/Config/ConfigDB.class.php:108
+#: ../../../../inc/SP/Config/ConfigDB.class.php:148
msgid "Modificar configuración"
msgstr "Modifier configuration"
-#: ../../../../inc/ConfigDB.class.php:121
+#: ../../../../inc/SP/Config/ConfigDB.class.php:149
+#: ../../../../inc/SP/Core/Upgrade.class.php:258
+#: ../../../../inc/SP/Core/Upgrade.class.php:264
msgid "Parámetro"
msgstr "Paramètre"
-#: ../../../../inc/ConfigDB.class.php:122
+#: ../../../../inc/SP/Config/ConfigDB.class.php:152
msgid "Valor"
msgstr "Valeur"
-#: ../../../../inc/Controller.class.php:165
+#: ../../../../inc/SP/Controller/AccountController.class.php:144
+#: ../../../../inc/SP/Controller/AccountController.class.php:467
+#: ../../../../inc/SP/Controller/AccountController.class.php:499
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:211
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:212
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:45
+msgid "Detalles de Cuenta"
+msgstr "Détails du Compte"
+
+#: ../../../../inc/SP/Controller/AccountController.class.php:256
+#: ../../../../inc/SP/Controller/MainController.class.php:257
+#: ../../../../inc/SP/Core/Acl.class.php:187
+msgid "Nueva Cuenta"
+msgstr "Nouveau Compte"
+
+#: ../../../../inc/SP/Controller/AccountController.class.php:383
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:264
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:265
+#: ../../../../inc/SP/Core/Acl.class.php:186
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:101
+msgid "Copiar Cuenta"
+msgstr "Copier Compte"
+
+#: ../../../../inc/SP/Controller/AccountController.class.php:411
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:251
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:252
+#: ../../../../inc/SP/Core/Acl.class.php:188
+msgid "Editar Cuenta"
+msgstr "Editer Compte"
+
+#: ../../../../inc/SP/Controller/AccountController.class.php:439
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:116
+msgid "Modificar Clave de Cuenta"
+msgstr "Modifier Mot de passe de Compte"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:237
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:238
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:86
+msgid "Copiar Clave en Portapapeles"
+msgstr "Copier le mot de passe dans le presse papier"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:287
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:288
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:142
+msgid "Solicitar Modificación"
+msgstr "Demande Modification"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:297
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:298
+msgid "Más Acciones"
+msgstr "Plus d'Actions"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:347
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:281
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:350
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:403
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:834
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1103
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:23
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:29
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:21
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:27
+#: ../../../../inc/themes/material-blue/views/account/account.inc:53
+#: ../../../../inc/themes/material-blue/views/account/account.inc:55
+#: ../../../../inc/themes/material-blue/views/account/request.inc:24
+#: ../../../../inc/themes/material-blue/views/account/request.inc:31
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:21
+msgid "Cliente"
+msgstr "Client"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:348
+msgid "Ordenar por Cliente"
+msgstr "Trié par Client"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:355
+msgid "Ordenar por Nombre"
+msgstr "Trié par Nom"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:361
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:32
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:38
+#: ../../../../inc/themes/material-blue/views/account/account.inc:76
+#: ../../../../inc/themes/material-blue/views/account/account.inc:78
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:57
+msgid "Categoría"
+msgstr "Catégorie"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:362
+msgid "Ordenar por Categoría"
+msgstr "Trié par Catégorie"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:369
+msgid "Ordenar por Usuario"
+msgstr "Trié par Nom d'utilisateur"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:375
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:34
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:40
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:43
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:49
+#: ../../../../inc/themes/material-blue/views/account/account.inc:99
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:68
+msgid "URL / IP"
+msgstr "URL / IP"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:376
+msgid "Ordenar por URL / IP"
+msgstr "Trié par URL / IP"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:108
+#, php-format
+msgid "Objetos encontrados: %d"
+msgstr "Objet trouvé : %d"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:127
+msgid "Los parámetros de DokuWiki no están configurados"
+msgstr "Les paramètres de Dokuwiki ne sont pas définis"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:135
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:113
+#: ../../../../inc/SP/Import/ImportBase.class.php:144
+#: ../../../../inc/SP/Import/ImportBase.class.php:166
+#: ../../../../inc/SP/Import/ImportBase.class.php:188
+#: ../../../../inc/SP/Import/ImportBase.class.php:210
+#: ../../../../inc/SP/Log/Email.class.php:92
+#: ../../../../inc/SP/Log/Email.class.php:93
+#: ../../../../inc/SP/Log/Email.class.php:203
+#: ../../../../inc/SP/Log/Email.class.php:204
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApiBase.class.php:193
+msgid "Error"
+msgstr "Erreur"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:137
+msgid "Conexión correcta"
+msgstr "Connexion réussie"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:138
+#: ../../../../inc/SP/Core/Init.class.php:429
+#: ../../../../inc/SP/Core/Init.class.php:669
+#: ../../../../inc/SP/Core/Upgrade.class.php:94
+#: ../../../../inc/SP/Core/Upgrade.class.php:278
+#: ../../../../inc/themes/material-blue/views/config/info.inc:40
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:25
+msgid "Versión"
+msgstr "Version"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:141
+msgid "Error de conexión a DokuWiki"
+msgstr "Erreur lors de la connexion à Dokuwiki"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:173
+msgid "Faltan parámetros de syslog remoto"
+msgstr "Paramètres syslog distants manquants"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:182
+msgid "Syslog remoto deshabilitado"
+msgstr "Syslog distant désactivé"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:195
+msgid "Faltan parámetros de Proxy"
+msgstr "Paramètres Proxy manquant"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:204
+msgid "Proxy habiltado"
+msgstr "Proxy activé"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:208
+msgid "Proxy deshabilitado"
+msgstr "Proxy désactivé"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:211
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:300
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:364
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:411
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:465
+msgid "Sección"
+msgstr "Section"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:211
+#: ../../../../inc/SP/Controller/ConfigController.class.php:151
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:226
+#: ../../../../inc/themes/material-blue/views/main/install.inc:132
+msgid "General"
+msgstr "Générale"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:228
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:511
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:581
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:649
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:699
+#: ../../../../inc/SP/Forms/UserForm.class.php:96
+#: ../../../../inc/SP/Forms/UserForm.class.php:108
+#: ../../../../inc/SP/Forms/UserForm.class.php:122
+msgid "Ey, esto es una DEMO!!"
+msgstr "Hey, ceci est une DEMO"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:242
+msgid "Configuración actualizada"
+msgstr "Configuration actualisée"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:244
+msgid "Error al guardar la configuración"
+msgstr "Erreur lors de la sauvegarde de la configuration"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:248
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:424
+msgid "Modificar Configuración"
+msgstr "Modifier Configuration"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:281
+msgid "El tamaño máximo por archivo es de 16MB"
+msgstr "La taille maximale par fichier est de 16 MB"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:300
+#: ../../../../inc/SP/Controller/ConfigController.class.php:200
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:365
+#: ../../../../inc/SP/Controller/MainController.class.php:580
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:90
+#: ../../../../inc/themes/material-blue/views/account/linkedAccounts.inc:13
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:30
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:32
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:196
+msgid "Cuentas"
+msgstr "Comptes"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:322
+msgid "Faltan parámetros de Wiki"
+msgstr "Paramètres Wiki manquants"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:330
+msgid "Wiki habiltada"
+msgstr "Wiki activé"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:334
+msgid "Wiki deshabilitada"
+msgstr "Wiki désactivé"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:347
+msgid "Faltan parámetros de DokuWiki"
+msgstr "Paramêtres Dokuwiki manquants"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:357
+msgid "DokuWiki habiltada"
+msgstr "Dokuwiki activé"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:361
+msgid "DokuWiki deshabilitada"
+msgstr "Dokuwiki désactivé"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:364
+#: ../../../../inc/SP/Controller/ConfigController.class.php:232
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:63
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:10
+msgid "Wiki"
+msgstr "Wiki"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:391
+msgid "Faltan parámetros de LDAP"
+msgstr "Paramètres LDAP manquants"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:404
+msgid "LDAP habiltado"
+msgstr "LDAP activé"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:408
+msgid "LDAP deshabilitado"
+msgstr "LDAP désactivé"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:411
+#: ../../../../inc/SP/Controller/ConfigController.class.php:265
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:7
+msgid "LDAP"
+msgstr "LDAP"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:440
+msgid "Faltan parámetros de Correo"
+msgstr "Paramètres de courriel manquants"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:456
+msgid "Correo habiltado"
+msgstr "Courriel activé"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:462
+msgid "Correo deshabilitado"
+msgstr "Courriel désactivé"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:465
+#: ../../../../inc/SP/Controller/ConfigController.class.php:296
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:7
+msgid "Correo"
+msgstr "Courriel"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:487
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:564
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:279
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:507
+#: ../../../../inc/SP/Controller/LoginController.class.php:288
+#: ../../../../inc/SP/Controller/LoginController.class.php:298
+msgid "Clave maestra actualizada"
+msgstr "Mot de passe maître actualisé"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:488
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:566
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:279
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:507
+#, fuzzy
+msgid "Reinicie la sesión para cambiarla"
+msgstr "Redémarrez la session pour mettre à jour"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:492
+msgid "Clave maestra no indicada"
+msgstr "Mot de passe maître requis"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:495
+msgid "Se ha de confirmar el cambio de clave"
+msgstr "Le changement de mot de passe doit être confirmé"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:500
+msgid "Las claves son idénticas"
+msgstr "Les mots de passe sont identiques"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:503
+msgid "Las claves maestras no coinciden"
+msgstr "Les mots de passe maîtres ne correspondent pas"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:506
+msgid "La clave maestra actual no coincide"
+msgstr "Le mot de passe maître actuel ne correspond pas"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:521
+#: ../../../../inc/SP/Import/Import.class.php:89
+msgid "No es posible iniciar una transacción"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:530
+#, fuzzy
+msgid "Errores al actualizar las claves de las cuentas"
+msgstr "Erreur pendant la modification des mots de passe des comptes"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:539
+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"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:546
+msgid "Errores al actualizar datos de campos personalizados"
+msgstr "Erreur pendant la mise à jour de champs personnalisés"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:551
+#: ../../../../inc/SP/Import/Import.class.php:95
+msgid "No es posible finalizar una transacción"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:569
+msgid "Error al guardar el hash de la clave maestra"
+msgstr "Erreur pendant la sauvegarde du hash du mot de passe maître"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:588
+msgid "Hash de clave maestra actualizado"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:592
+msgid "Error al actualizar el hash de la clave maestra"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:611
+msgid "Generar Clave Temporal"
+msgstr "Générer un mot de passe temporaire"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:614
+msgid "Clave Temporal Generada"
+msgstr "Mot de passe temporel generé"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:619
+#, php-format
+msgid "Clave Maestra %s"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:620
+msgid ""
+"Se ha generado una nueva clave para el acceso a sysPass y se solicitará en "
+"el siguiente inicio."
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:622
+#, php-format
+msgid "La nueva clave es: %s"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:624
+msgid "No olvide acceder lo antes posible para guardar los cambios."
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:635
+msgid "Error al generar clave temporal"
+msgstr "Erreur pendant la génération du mot de passe temporaire"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:676
+#: ../../../../inc/SP/Forms/AccountForm.class.php:134
+#: ../../../../inc/SP/Forms/UserForm.class.php:112
+msgid "Las claves no coinciden"
+msgstr "Les mots de passe ne correspondent pas"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:681
+#, fuzzy
+msgid "Error al realizar la exportación"
+msgstr "Problème durant l'export"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:686
+msgid "Proceso de exportación finalizado"
+msgstr "Processus d'export terminé"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:322
+#: ../../../../inc/SP/Core/Acl.class.php:217
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:233
+msgid "Encriptación"
+msgstr "Chiffrement"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:367
+msgid "Último backup"
+msgstr "Dernière sauvegarde"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:367
+#, fuzzy
+msgid "No se encontraron backups"
+msgstr "Il n'y a pas de sauvegarde disponible"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:378
+msgid "Última exportación"
+msgstr "Dernier export"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:378
+msgid "No se encontró archivo de exportación"
+msgstr "Aucun fichier d'export trouvé"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:380
+#: ../../../../inc/SP/Core/Acl.class.php:218
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:7
+msgid "Copia de Seguridad"
+msgstr "Sauvegarde de sécurité"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:402
+#: ../../../../inc/SP/Import/Import.class.php:66
+#: ../../../../inc/SP/Import/ImportBase.class.php:77
+msgid "Importar Cuentas"
+msgstr "Importer Comptes"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:425
+msgid "No instalado"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:427
+#: ../../../../inc/SP/Controller/MainController.class.php:582
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:77
+msgid "Información"
+msgstr "Information"
+
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:275
msgid "Opción no disponible"
msgstr "Option indisponible"
-#: ../../../../inc/Controller.class.php:165
-#: ../../../../inc/Controller.class.php:166
-#: ../../../../inc/Controller.class.php:167
-#: ../../../../inc/Controller.class.php:168 ../../../../inc/Init.class.php:282
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:275
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:276
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:277
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:278
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:280
+#: ../../../../inc/SP/Core/Init.class.php:293
msgid "Consulte con el administrador"
msgstr "Veuillez contacter votre administrateur"
-#: ../../../../inc/Controller.class.php:167
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:276
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:505
+msgid "No tiene permisos para acceder a esta cuenta"
+msgstr "Vous n'avez pas les permissions pour accéder à ce compte"
+
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:277
msgid "No tiene permisos para acceder a esta página"
msgstr "Vous n'avez pas les permissions pour accéder à cette page"
-#: ../../../../inc/Controller.class.php:168
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:278
msgid "No tiene permisos para realizar esta operación"
msgstr "Vous n'avez pas les permissions pour effectuer cette opération"
-#: ../../../../inc/Crypt.class.php:125 ../../../../inc/Email.class.php:148
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:280
+msgid "Se ha producido una excepción"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/EventlogController.class.php:102
+msgid "Vaciar Eventos"
+msgstr "Nettoyer les évènements"
+
+#: ../../../../inc/SP/Controller/EventlogController.class.php:102
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:144
+msgid "Vaciar registro de eventos"
+msgstr "Nettoyer le journal d'évènements"
+
+#: ../../../../inc/SP/Controller/EventlogController.class.php:104
+msgid "Registro de eventos vaciado"
+msgstr "Journal d'évènements nettoyé"
+
+#: ../../../../inc/SP/Controller/EventlogController.class.php:125
+msgid "Buscar Evento"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:57
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:131
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:593
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:57
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1104
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:37
+#: ../../../../inc/themes/material-blue/views/itemshow/categories.inc:28
+#: ../../../../inc/themes/material-blue/views/itemshow/customers.inc:32
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:31
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:77
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:83
+msgid "Descripción"
+msgstr "Description"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:72
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:91
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:161
+msgid "Categorías"
+msgstr "Catégories"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:80
+msgid "Buscar Categoría"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:90
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:91
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:188
+#: ../../../../inc/themes/material-blue/views/account/account.inc:89
+msgid "Nueva Categoría"
+msgstr "Nouvelle Catégorie"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:101
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:102
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:184
+#: ../../../../inc/SP/Core/Acl.class.php:199
+msgid "Editar Categoría"
+msgstr "Editer Catégorie"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:146
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:92
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:168
+msgid "Clientes"
+msgstr "Clients"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:154
+msgid "Buscar Cliente"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:164
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:165
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:175
+#: ../../../../inc/themes/material-blue/views/account/account.inc:66
+msgid "Nuevo Cliente"
+msgstr "Nouveau Client"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:175
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:176
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:171
+#: ../../../../inc/SP/Core/Acl.class.php:204
+msgid "Editar Cliente"
+msgstr "Editer Client"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:204
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:44
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:46
+msgid "Módulo"
+msgstr "Module"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:222
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:69
+#: ../../../../inc/themes/material-blue/views/account/account.inc:256
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:175
+msgid "Campos Personalizados"
+msgstr "Champs personnalisés"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:230
+msgid "Buscar Campo"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:240
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:241
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:205
+msgid "Nuevo Campo"
+msgstr "Nouveau Champ"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:251
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:252
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:209
+msgid "Editar Campo"
+msgstr "Editer Champ"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:261
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:262
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:687
+msgid "Eliminar Campo"
+msgstr "Supprimer champ"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:302
+#: ../../../../inc/SP/Core/Acl.class.php:193
+#: ../../../../inc/themes/material-blue/views/account/files.inc:5
+#: ../../../../inc/themes/material-blue/views/account/files.inc:15
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:208
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:89
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:203
+msgid "Archivos"
+msgstr "Fichiers"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:310
+msgid "Buscar Archivo"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:320
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:321
+#: ../../../../inc/themes/material-blue/views/account/files-list.inc:40
+msgid "Ver Archivo"
+msgstr "Voir Fichier"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:330
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:331
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:830
+#: ../../../../inc/themes/material-blue/views/account/files-list.inc:26
+msgid "Eliminar Archivo"
+msgstr "Supprimer Fichier"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:373
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:434
+msgid "Buscar Cuenta"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:404
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:54
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:65
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:85
+#: ../../../../inc/themes/material-blue/views/account/account.inc:156
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:64
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:71
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:24
+msgid "Fecha"
+msgstr "Date"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:405
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:985
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:58
+msgid "Estado"
+msgstr "Status"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:416
+#, fuzzy
+msgid "Modificada"
+msgstr "Modifier Mot de passe"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:417
+#, fuzzy
+msgid "Eliminada"
+msgstr "Supprimer"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:426
+#, fuzzy
+msgid "Cuentas (H)"
+msgstr "Comptes"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:444
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:445
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:942
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1154
+msgid "Restaurar Cuenta"
+msgstr "Restaurer Compte"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:475
+#: ../../../../inc/SP/Controller/LoginController.class.php:252
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:55
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:57
+msgid "Perfil"
+msgstr "Profil"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:477
+msgid "Propiedades"
+msgstr "Propriétés"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:498
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:93
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:24
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:44
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:46
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:49
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:140
+msgid "Usuarios"
+msgstr "Utilisateurs"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:506
+msgid "Buscar Usuario"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:515
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:516
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:136
+msgid "Nuevo Usuario"
+msgstr "Nouvel Utilisateur"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:529
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:530
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1014
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:292
+msgid "Importar usuarios de LDAP"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:542
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:543
+msgid "Ver Detalles de Usuario"
+msgstr "Voir détails du compte"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:552
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:553
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:128
+msgid "Editar Usuario"
+msgstr "Editer Utilisateur"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:562
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:563
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:20
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:46
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:52
+msgid "Cambiar Clave de Usuario"
+msgstr "Changer mot de passe utilisateur"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:573
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:574
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:269
+msgid "Eliminar Usuario"
+msgstr "Supprimer Utilisateur"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:608
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:94
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:46
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:147
+msgid "Grupos"
+msgstr "Groupes"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:616
+msgid "Buscar Grupo"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:626
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:627
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:149
+msgid "Nuevo Grupo"
+msgstr "Nouveau Groupe"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:637
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:638
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:145
+msgid "Editar Grupo"
+msgstr "Editer Groupe"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:647
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:648
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:399
+msgid "Eliminar Grupo"
+msgstr "Supprimer Groupe"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:680
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:154
+msgid "Perfiles"
+msgstr "Profils"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:688
+msgid "Buscar Perfil"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:698
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:699
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:162
+msgid "Nuevo Perfil"
+msgstr "Nouveau Profil"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:709
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:710
+msgid "Ver Detalles de Perfil"
+msgstr "Voir les détails du profil"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:719
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:720
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:158
+msgid "Editar Perfil"
+msgstr "Editer Profil"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:729
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:730
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:459
+msgid "Eliminar Perfil"
+msgstr "Supprimer Profil"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:749
+#: ../../../../inc/SP/Log/Email.class.php:63
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:26
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:28
+msgid "Acción"
+msgstr "Action"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:764
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:182
+msgid "Autorizaciones API"
+msgstr "Autorisations des APIs"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:772
+msgid "Buscar Token"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:782
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:783
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:197
+msgid "Nueva Autorización"
+msgstr "Nouvelle autorisation"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:793
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:794
+msgid "Ver token de Autorización"
+msgstr "Voir le token d'autorisation"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:803
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:804
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:201
+msgid "Editar Autorización"
+msgstr "Editer l'autorisation"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:813
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:814
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:639
+msgid "Eliminar Autorización"
+msgstr "Supprimer l'autorisation"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:833
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:19
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:21
+msgid "Fecha Creación"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:834
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:27
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:29
+msgid "Fecha Caducidad"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:836
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:43
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:45
+msgid "Notificar"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:837
+#: ../../../../inc/themes/material-blue/views/account/details.inc:18
+#: ../../../../inc/themes/material-blue/views/account/details.inc:20
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:51
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:53
+msgid "Visitas"
+msgstr "Visites"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:856
+msgid "Enlaces"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:864
+msgid "Buscar Enlace"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:874
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:875
+msgid "Ver Enlace"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:883
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:884
+msgid "Renovar Enlace"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:893
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:894
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:748
+msgid "Eliminar Enlace"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:926
+#: ../../../../inc/themes/material-blue/views/account/account.inc:176
+#: ../../../../inc/themes/material-blue/views/account/account.inc:178
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:210
+msgid "Etiquetas"
+msgstr "Tags"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:934
+msgid "Buscar Etiqueta"
+msgstr "Recherche un Tag"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:944
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:945
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:218
+msgid "Nueva Etiqueta"
+msgstr "Nouveau Tag"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:955
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:956
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:222
+msgid "Editar Etiqueta"
+msgstr "Modifier le tag"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:965
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:966
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:797
+msgid "Eliminar Etiqueta"
+msgstr "Supprimer le tag"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:984
+msgid "Plugin"
+msgstr "Plugin"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1001
+msgid "Plugins"
+msgstr "Plugins"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1009
+msgid "Buscar Plugin"
+msgstr "Recherche un plugin"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1019
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1020
+msgid "Ver Plugin"
+msgstr "Afficher le plugin"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1028
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1029
+msgid "Habilitar"
+msgstr "Activer"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1038
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1039
+msgid "Deshabilitar"
+msgstr "Désactiver"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1048
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1049
+msgid "Restablecer Datos"
+msgstr "Réinitialiser les données"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:56
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:51
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:58
+msgid "Componente"
+msgstr "Composant"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:67
+msgid "Leída"
+msgstr "Lire"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:76
+#: ../../../../inc/SP/Controller/MainController.class.php:306
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:79
+msgid "Notificaciones"
+msgstr "Notifications"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:84
+msgid "Buscar Notificación"
+msgstr "Rechercher une notification"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:95
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:96
+#: ../../../../inc/SP/Controller/NoticeShowController.class.php:94
+msgid "Nueva Notificación"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:107
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:108
+#: ../../../../inc/SP/Controller/NoticeShowController.class.php:89
+msgid "Ver Notificación"
+msgstr "Afficher une notification"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:116
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:117
+msgid "Marcar Notificación"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:126
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:127
+#: ../../../../inc/SP/Controller/NoticeShowController.class.php:98
+msgid "Editar Notificación"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:136
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:137
+msgid "Eliminar Notificación"
+msgstr "Supprimer la notification"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:228
+msgid "Crear Usuario"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:229
+msgid "Usuario creado"
+msgstr "Utilisateur ajouté"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:236
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:251
+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."
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:243
+msgid "Actualizar Usuario"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:244
+#: ../../../../inc/SP/Mgmt/Users/UserMigrate.class.php:105
+msgid "Usuario actualizado"
+msgstr "Utilisateur actualisé"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:258
+msgid "Usuarios eliminados"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:264
+msgid "Usuario eliminado"
+msgstr "Utilisateur supprimé"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:281
+msgid "Actualizar Clave Usuario"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:372
+msgid "Crear Grupo"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:373
+msgid "Grupo creado"
+msgstr "Groupe ajouté"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:380
+msgid "Actualizar Grupo"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:381
+msgid "Grupo actualizado"
+msgstr "Gropue actualisé"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:388
+msgid "Grupos eliminados"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:394
+msgid "Grupo eliminado"
+msgstr "Groupe supprimé"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:432
+msgid "Crear Perfil"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:433
+msgid "Perfil creado"
+msgstr "Profil ajouté"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:440
+msgid "Actualizar Perfil"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:441
+msgid "Perfil actualizado"
+msgstr "Profil actualisé"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:448
+msgid "Perfiles eliminados"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:454
+msgid "Perfil eliminado"
+msgstr "Profil supprimé"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:502
+msgid "Actualizar Cliente"
+msgstr "Mettre à jour Clients"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:503
+msgid "Cliente actualizado"
+msgstr "Client actualisé"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:510
+msgid "Clientes eliminados"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:564
+msgid "Actualizar Categoría"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:565
+msgid "Categoría actualizada"
+msgstr "Catégorie actualisée"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:573
+msgid "Categorías eliminadas"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:614
+msgid "Crear Autorización"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:615
+msgid "Autorización creada"
+msgstr "Autorisation ajoutée"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:622
+msgid "Actualizar Autorización"
+msgstr "Mise à jour de l'autorisation"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:623
+msgid "Autorización actualizada"
+msgstr "Autorisation mise à jour"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:632
+msgid "Autorizaciones eliminadas"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:636
+msgid "Autorización eliminada"
+msgstr "Autorisation supprimée"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:665
+msgid "Crear Campo"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:666
+msgid "Campo creado"
+msgstr "Champ ajouté"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:672
+msgid "Actualizar Campo"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:673
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:216
+msgid "Campo actualizado"
+msgstr "Champ mis à jour"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:680
+msgid "Campos eliminados"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:684
+msgid "Campo eliminado"
+msgstr "Champ supprimé"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:716
+msgid "Crear Enlace"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:717
+msgid "Enlace creado"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:726
+msgid "Actualizar Enlace"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:727
+msgid "Enlace actualizado"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:736
+msgid "Enlaces eliminados"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:742
+msgid "Enlace eliminado"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:773
+msgid "Crear Etiqueta"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:774
+#: ../../../../inc/SP/Import/ImportBase.class.php:205
+msgid "Etiqueta creada"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:780
+msgid "Actualizar Etiqueta"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:781
+msgid "Etiqueta actualizada"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:788
+msgid "Etiquetas eliminadas"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:794
+msgid "Etiqueta eliminada"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:821
+msgid "Archivos eliminados"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:860
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:868
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:875
+msgid "Actualizar Plugin"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:861
+msgid "Plugin habilitado"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:869
+msgid "Plugin deshabilitado"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:876
+msgid "Plugin restablecido"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:924
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:933
+msgid "Actualizar Cuenta"
+msgstr "Actualiser Compte"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:925
+msgid "Cuenta actualizada"
+msgstr "Compte actualisé"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:943
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1155
+msgid "Cuenta restaurada"
+msgstr "Compte restauré"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:964
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1174
+msgid "Cuentas eliminadas"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:995
+msgid "Favorito añadido"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1000
+msgid "Favorito eliminado"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1017
+msgid "Importación de usuarios de LDAP realizada"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1018
+msgid "Usuarios importados"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1023
+msgid "Error al importar usuarios de LDAP"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1041
+msgid "Notificación leída"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1049
+msgid "Notificación creada"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1057
+msgid "Notificación actualizada"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1063
+msgid "Notificaciones eliminadas"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1067
+msgid "Notificación eliminada"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1085
+#: ../../../../inc/SP/Forms/NoticeForm.class.php:95
+msgid "Es necesaria una descripción"
+msgstr "Description requise"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1100
+msgid "Solicitud de Modificación de Cuenta"
+msgstr "Demande de modification de Compte"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1101
+msgid "Solicitante"
+msgstr "Demandeur"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1119
+msgid "Solicitud enviada por correo"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1121
+msgid "Solicitud no enviada por correo"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1130
+msgid "Solicitud"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1137
+msgid "Solicitud realizada"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1171
+#, fuzzy
+msgid "Eliminar Cuenta (H)"
+msgstr "Supprimer Compte"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:123
+msgid "Ver Usuario"
+msgstr "Détails Utilisateur"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:140
+msgid "Ver Grupo"
+msgstr "Détails Groupe"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:153
+msgid "Ver Perfil"
+msgstr "Détails Profil"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:166
+msgid "Ver Cliente"
+msgstr "Détails Client"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:179
+msgid "Ver Categoría"
+msgstr "Détails Catégorie"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:192
+msgid "Ver Autorización"
+msgstr "Voir les autorisations"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:213
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:73
+msgid "Ver Enlace Público"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:226
+#: ../../../../js/strings.js.php:72
+msgid "Clave de Cuenta"
+msgstr "Mot de passe du compte"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:230
+msgid "Detalles de Plugin"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:401
+msgid "Token de autorización visualizado"
+msgstr "Token d'autorisation vu"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:402
+msgid "Autorizaciones"
+msgstr "Autorisations"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:495
+msgid "La clave maestra no coincide"
+msgstr "Le mot de passe maître ne correspond pas"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:93
+msgid "Inicio sesión"
+msgstr "Se connecter"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:109
+msgid "Usuario/Clave no introducidos"
+msgstr "Utilisateur/Mot de passe non saisi"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:132
+#: ../../../../inc/SP/Controller/LoginController.class.php:348
+#: ../../../../inc/SP/Controller/LoginController.class.php:402
+#: ../../../../inc/SP/Controller/LoginController.class.php:424
+msgid "Login incorrecto"
+msgstr "Login incorrecte"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:180
+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"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:195
+#: ../../../../inc/SP/Controller/LoginController.class.php:198
+msgid "Usuario deshabilitado"
+msgstr "Utilisateur désactivé"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:255
+msgid "Error al obtener la clave maestra del usuario"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:276
+msgid "Usando clave temporal"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:282
+#: ../../../../inc/SP/Controller/LoginController.class.php:284
+#: ../../../../inc/SP/Controller/LoginController.class.php:292
+#: ../../../../inc/SP/Controller/LoginController.class.php:294
+msgid "Clave maestra incorrecta"
+msgstr "Mot de passe maître invalide"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:305
+msgid "Es necesaria su clave anterior"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:308
+msgid "La clave maestra no ha sido guardada o es incorrecta"
+msgstr "Mot de passe maître non sauvegardé ou incorrecte"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:352
+msgid "Cuenta expirada"
+msgstr "Compte expiré"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:356
+msgid "El usuario no tiene grupos asociados"
+msgstr "L'utilisateur n'a pas de groupe associé"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:370
+msgid "Servidor LDAP"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:427
+msgid "Autentificación"
+msgstr "Authentification"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:248
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:72
+msgid "Buscar"
+msgstr "Chercher"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:267
+msgid "Usuarios y Accesos"
+msgstr "Utilisateurs et Accès"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:277
+msgid "Elementos y Personalización"
+msgstr "Eléments et personnalisation"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:297
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:7
+msgid "Registro de Eventos"
+msgstr "Journal d'évènements"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:357
+#: ../../../../inc/SP/Core/Init.class.php:131
+msgid "Versión de PHP requerida >= "
+msgstr "Version PHP requise >="
+
+#: ../../../../inc/SP/Controller/MainController.class.php:358
+#: ../../../../inc/SP/Core/Init.class.php:132
+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"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:368
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:265
+msgid "Módulo no disponible"
+msgstr "Module indisponible"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:369
+msgid "Sin este módulo la aplicación puede no funcionar correctamente."
+msgstr "Sans ce module, l'application ne peut pas fonctionner correctement."
+
+#: ../../../../inc/SP/Controller/MainController.class.php:377
+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)"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:378
+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"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:384
+msgid "No se encuentra el generador de números aleatorios."
+msgstr "Impossible de trouver le générateur de nombres aléatoires."
+
+#: ../../../../inc/SP/Controller/MainController.class.php:385
+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"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:457
+msgid "Descargar nueva versión"
+msgstr "Télécharger nouvelle version"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:469
+msgid "Avisos de sysPass"
+msgstr "Notifications de sysPass"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:572
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:74
+msgid "Enlace visualizado"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/MainController.class.php:575
+msgid "Agente"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/UserPreferencesController.class.php:90
+msgid "Preferencias"
+msgstr "Préférences"
+
+#: ../../../../inc/SP/Core/Acl.class.php:166
+msgid "Acceso denegado"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Acl.class.php:184
+msgid "Buscar Cuentas"
+msgstr "Rechercher des comptes"
+
+#: ../../../../inc/SP/Core/Acl.class.php:185
+msgid "Ver Cuenta"
+msgstr "Voir un compte"
+
+#: ../../../../inc/SP/Core/Acl.class.php:189
+msgid "Editar Clave de Cuenta"
+msgstr "Editer le mot de passe du compte"
+
+#: ../../../../inc/SP/Core/Acl.class.php:190
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:61
+msgid "Ver Historial"
+msgstr "Voir Historique"
+
+#: ../../../../inc/SP/Core/Acl.class.php:194
+msgid "Peticiones"
+msgstr "Requêtes"
+
+#: ../../../../inc/SP/Core/Acl.class.php:195
+msgid "Gestión Aplicación"
+msgstr "Gérer les applications"
+
+#: ../../../../inc/SP/Core/Acl.class.php:196
+msgid "Gestión Categorías"
+msgstr "Gérer les catégories"
+
+#: ../../../../inc/SP/Core/Acl.class.php:197
+msgid "Buscar Categorías"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Acl.class.php:198
+msgid "Añadir Categoría"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Acl.class.php:201
+msgid "Gestión Clientes"
+msgstr "Gérer les clients"
+
+#: ../../../../inc/SP/Core/Acl.class.php:202
+msgid "Buscar Clientes"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Acl.class.php:203
+msgid "Añadir Cliente"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Acl.class.php:206
+msgid "Gestión Campos Personalizados"
+msgstr "Gestion des champs personnalisés"
+
+#: ../../../../inc/SP/Core/Acl.class.php:207
+msgid "Gestión Autorizaciones API"
+msgstr "Gestion des autorisations des APIs"
+
+#: ../../../../inc/SP/Core/Acl.class.php:208
+msgid "Gestión de Archivos"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Acl.class.php:209
+msgid "Gestión de Cuentas"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Acl.class.php:210
+msgid "Gestión de Etiquetas"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Acl.class.php:211
+#: ../../../../inc/SP/Core/Acl.class.php:212
+msgid "Gestión Usuarios"
+msgstr "Gérer les utilisateurs"
+
+#: ../../../../inc/SP/Core/Acl.class.php:213
+msgid "Gestión Grupos"
+msgstr "Gérer les groupes"
+
+#: ../../../../inc/SP/Core/Acl.class.php:214
+msgid "Gestión Perfiles"
+msgstr "Gérer les profiles"
+
+#: ../../../../inc/SP/Core/Acl.class.php:216
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:226
+msgid "Configuración General"
+msgstr "Configuration générale"
+
+#: ../../../../inc/SP/Core/Acl.class.php:219
+msgid "Exportar"
+msgstr "Exporter"
+
+#: ../../../../inc/SP/Core/Acl.class.php:220
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:247
+msgid "Importar"
+msgstr "Importer"
+
+#: ../../../../inc/SP/Core/Acl.class.php:221
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:263
+msgid "Log de Eventos"
+msgstr "Journal d'évènements"
+
+#: ../../../../inc/SP/Core/Backup.class.php:55
+msgid "Realizar Backup"
+msgstr "Effectuer une sauvegarde"
+
+#: ../../../../inc/SP/Core/Backup.class.php:84
+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"
+
+#: ../../../../inc/SP/Core/Backup.class.php:102
+#: ../../../../inc/SP/Core/XmlExport.class.php:515
+#, php-format
+msgid "No es posible crear el directorio de backups (\"%s\")"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Backup.class.php:106
+#: ../../../../inc/SP/Core/XmlExport.class.php:521
+msgid "Compruebe los permisos del directorio de backups"
+msgstr "Vérifiez les permissions du dossier de sauvegarde"
+
+#: ../../../../inc/SP/Core/Backup.class.php:249
+msgid "Esta operación sólo es posible en entornos Linux"
+msgstr "Cette opération est uniquement possible en environnement Linux"
+
+#: ../../../../inc/SP/Core/Backup.class.php:251
+msgid "Error al realizar backup en modo compatibilidad"
+msgstr "Erreur pendant la sauvegarde en mode compatibilité"
+
+#: ../../../../inc/SP/Core/Crypt.class.php:65
+#: ../../../../inc/SP/Core/Crypt.class.php:74
+#: ../../../../inc/SP/Log/Email.class.php:141
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:70
+#: ../../../../js/strings.js.php:85
msgid "Aviso"
msgstr "Avertissement"
-#: ../../../../inc/Crypt.class.php:125
+#: ../../../../inc/SP/Core/Crypt.class.php:65
+#: ../../../../inc/SP/Core/Crypt.class.php:74
msgid ""
"Se ha regenerado el HASH de clave maestra. No es necesaria ninguna acción."
msgstr ""
"Le hash du mot de passe maître a été regénéré. Aucune autre action n'est "
"nécessaire"
-#: ../../../../inc/Crypt.class.php:189
+#: ../../../../inc/SP/Core/Crypt.class.php:213
msgid "No se puede usar el módulo de encriptación"
msgstr "Le module d'encryption ne peut pas être chargé"
-#: ../../../../inc/Crypt.class.php:200
+#: ../../../../inc/SP/Core/Crypt.class.php:224
msgid "Error al generar datos cifrados"
msgstr "Erreur pendant la création des données d'encryption"
-#: ../../../../inc/CryptPKI.class.php:46
+#: ../../../../inc/SP/Core/CryptMasterPass.class.php:93
+#: ../../../../inc/SP/Core/CryptMasterPass.class.php:106
+msgid "Clave temporal caducada"
+msgstr ""
+
+#: ../../../../inc/SP/Core/CryptPKI.class.php:48
msgid "No es posible generar las claves RSA"
msgstr "Impossible de générer les clés RSA"
-#: ../../../../inc/CryptPKI.class.php:112
-#: ../../../../inc/CryptPKI.class.php:143
+#: ../../../../inc/SP/Core/CryptPKI.class.php:116
+#: ../../../../inc/SP/Core/CryptPKI.class.php:118
+#: ../../../../inc/SP/Core/CryptPKI.class.php:151
+#: ../../../../inc/SP/Core/CryptPKI.class.php:153
msgid "El archivo de clave no existe"
msgstr "Le fichier de clé n'existe pas"
-#: ../../../../inc/CsvImportBase.class.php:109
-#, php-format
-msgid "El número de campos es incorrecto (%d)"
-msgstr "Mauvais numéro de champs (%d)"
+#: ../../../../inc/SP/Core/Events/EventDispatcherBase.class.php:80
+msgid "Observador no inicializado"
+msgstr ""
-#: ../../../../inc/CsvImportBase.class.php:110
-#, php-format
-msgid "Compruebe el formato del archivo CSV en línea %s"
-msgstr "Veuillez, s'il vous plait, vérifier le format CSV à la ligne %s"
+#: ../../../../inc/SP/Core/Events/EventDispatcherBase.class.php:110
+msgid "Es necesario un objeto"
+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:348
-#: ../../../../inc/XmlImport.class.php:62
-#: ../../../../inc/XmlImport.class.php:63
-#: ../../../../web/ConfigC.class.php:199
-msgid "Importar Cuentas"
-msgstr "Importer Comptes"
-
-#: ../../../../inc/CsvImportBase.class.php:141
-msgid "Error importando cuenta"
-msgstr "Erreur pendant l'importation des comptes"
-
-#: ../../../../inc/CsvImportBase.class.php:142
-#, php-format
-msgid "Error procesando línea %s"
-msgstr "Erreur de traitement ligne %s"
-
-#: ../../../../inc/CsvImportBase.class.php:145
-#, php-format
-msgid "Cuenta importada: %s"
-msgstr "Compte %s importé"
-
-#: ../../../../inc/CustomFields.class.php:276
-#: ../../../../web/AccountsMgmtC.class.php:301
-#: ../../../../inc/themes/classic/profiles.inc:107
-#: ../../../../inc/themes/material-blue/profiles.inc:124
-msgid "Campos Personalizados"
-msgstr "Champs personnalisés"
-
-#: ../../../../inc/CustomFields.class.php:291
-msgid "Actualizando datos encriptados"
-msgstr "Actualisation des données cryptés"
-
-#: ../../../../inc/CustomFields.class.php:318
-msgid "Registros no actualizados"
-msgstr "Enregistrements non actualisés"
-
-#: ../../../../inc/CustomFieldsBase.class.php:86
-msgid "Texto"
-msgstr "Texte"
-
-#: ../../../../inc/CustomFieldsBase.class.php:88
-msgid "Fecha"
-msgstr "Date"
-
-#: ../../../../inc/CustomFieldsBase.class.php:89
-msgid "Número"
-msgstr "Numéro"
-
-#: ../../../../inc/CustomFieldsBase.class.php:90
-#: ../../../../inc/themes/classic/passreset.inc:22
-#: ../../../../inc/themes/classic/users.inc:61
-#: ../../../../inc/themes/material-blue/users.inc:71
-msgid "Email"
-msgstr "Courriel"
-
-#: ../../../../inc/CustomFieldsBase.class.php:91
-msgid "Teléfono"
-msgstr "Téléphone"
-
-#: ../../../../inc/CustomFieldsBase.class.php:92
-msgid "Link"
-msgstr "Lien"
-
-#: ../../../../inc/CustomFieldsBase.class.php:93
-msgid "Color"
-msgstr "Couleur"
-
-#: ../../../../inc/CustomFieldsBase.class.php:107
-#: ../../../../inc/themes/classic/profiles.inc:98
-#: ../../../../inc/themes/material-blue/profiles.inc:114
-msgid "Categorías"
-msgstr "Catégories"
-
-#: ../../../../inc/CustomFieldsBase.class.php:108
-#: ../../../../inc/themes/classic/profiles.inc:103
-#: ../../../../inc/themes/material-blue/profiles.inc:119
-msgid "Clientes"
-msgstr "Clients"
-
-#: ../../../../inc/CustomFieldsBase.class.php:110
-#: ../../../../inc/themes/classic/account.inc:143
-#: ../../../../inc/themes/classic/profiles.inc:89
-#: ../../../../inc/themes/material-blue/account.inc:170
-#: ../../../../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:160
-msgid "Eliminar Cliente"
-msgstr "Supprimer Client"
-
-#: ../../../../inc/DBConnectionFactory.class.php:83
-#: ../../../../inc/DBConnectionFactory.class.php:85
-#: ../../../../inc/DBConnectionFactory.class.php:99
-#: ../../../../inc/Installer.class.php:235
-#: ../../../../inc/Migrate.class.php:114
-msgid "No es posible conectar con la BD"
-msgstr "Impossible de se connecter à la base de données"
-
-#: ../../../../inc/DBConnectionFactory.class.php:83
-#: ../../../../inc/DBConnectionFactory.class.php:85
-#: ../../../../inc/Installer.class.php:236
-#: ../../../../inc/Migrate.class.php:115
-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:182
-msgid "N/D"
-msgstr "N/A"
-
-#: ../../../../inc/Email.class.php:60 ../../../../web/UsersMgmtC.class.php:393
-#: ../../../../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/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:210
-msgid "Eliminar Grupo"
-msgstr "Supprimer Groupe"
-
-#: ../../../../inc/Groups.class.php:372
-msgid "Error al eliminar los usuarios del grupo"
-msgstr "Erreur pendant la supression des utilisateurs du groupe"
-
-#: ../../../../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:91
-msgid "Importación finalizada"
-msgstr "Importation terminée"
-
-#: ../../../../inc/Init.class.php:182
+#: ../../../../inc/SP/Core/Init.class.php:159
msgid "Error en la verificación de la base de datos"
msgstr "Erreur pendant la vérification de la base de données"
-#: ../../../../inc/Init.class.php:278
-msgid "Sesion"
-msgstr "Session"
+#: ../../../../inc/SP/Core/Init.class.php:289
+msgid "Sesión"
+msgstr ""
-#: ../../../../inc/Init.class.php:278 ../../../../inc/Init.class.php:282
+#: ../../../../inc/SP/Core/Init.class.php:289
+#: ../../../../inc/SP/Core/Init.class.php:293
msgid "La sesión no puede ser inicializada"
msgstr "La session ne peut pas être initialisée"
-#: ../../../../inc/Init.class.php:366
+#: ../../../../inc/SP/Core/Init.class.php:427
+#: ../../../../inc/SP/Core/Init.class.php:667
+msgid "Actualización"
+msgstr "Actualisation"
+
+#: ../../../../inc/SP/Core/Init.class.php:428
+#: ../../../../inc/SP/Core/Init.class.php:668 ../../../../res/upgrade.php:121
+msgid "Actualización de versión realizada."
+msgstr "Mise à jour de version effectuée."
+
+#: ../../../../inc/SP/Core/Init.class.php:450
msgid "El directorio \"/config\" no existe"
msgstr "Le dossier \"/config\" n'existe pas"
-#: ../../../../inc/Init.class.php:371
+#: ../../../../inc/SP/Core/Init.class.php:455
msgid "No es posible escribir en el directorio \"config\""
msgstr "Impossible d'écrire dans le dossier \"/config\""
-#: ../../../../inc/Init.class.php:379
+#: ../../../../inc/SP/Core/Init.class.php:462
+#, fuzzy
msgid "Los permisos del directorio \"/config\" son incorrectos"
msgstr "Les permissions du dossier \"/config\" sont incorrectes"
-#: ../../../../inc/Init.class.php:379
+#: ../../../../inc/SP/Core/Init.class.php:462
msgid "Actual:"
msgstr "Actuel"
-#: ../../../../inc/Init.class.php:379
+#: ../../../../inc/SP/Core/Init.class.php:462
msgid "Necesario: 750"
msgstr "Nécessaire: 750"
-#: ../../../../inc/Init.class.php:428
+#: ../../../../inc/SP/Core/Init.class.php:545
msgid "Aplicación en mantenimiento"
msgstr "Application en maintenance"
-#: ../../../../inc/Init.class.php:428
+#: ../../../../inc/SP/Core/Init.class.php:545
msgid "En breve estará operativa"
msgstr "Sera opérationnel sous peu"
-#: ../../../../inc/Init.class.php:465
+#: ../../../../inc/SP/Core/Init.class.php:590
msgid "Finalizar sesión"
msgstr "Deconnexion"
-#: ../../../../inc/Init.class.php:467
+#: ../../../../inc/SP/Core/Init.class.php:592
msgid "Tiempo inactivo"
msgstr "Temps d'inactivité"
-#: ../../../../inc/Init.class.php:468
+#: ../../../../inc/SP/Core/Init.class.php:593
msgid "Tiempo total"
msgstr "Temps total"
-#: ../../../../inc/Init.class.php:507
+#: ../../../../inc/SP/Core/Init.class.php:636
msgid "La aplicación necesita actualizarse"
msgstr "L'application a besoin d'être mis à jour"
-#: ../../../../inc/Init.class.php:507
+#: ../../../../inc/SP/Core/Init.class.php:636
#, 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:507
-#: ../../../../inc/themes/classic/upgrade.inc:20
-#: ../../../../inc/themes/material-blue/upgrade.inc:22
+#: ../../../../inc/SP/Core/Init.class.php:636
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:57
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:48
msgid "Actualizar"
msgstr "Mis à jour"
-#: ../../../../inc/Init.class.php:538
-msgid "Actualización"
-msgstr "Actualisation"
+#: ../../../../inc/SP/Core/Init.class.php:654
+#: ../../../../inc/themes/material-blue/views/main/login.inc:65
+msgid "Acceder"
+msgstr "Se connecter"
-#: ../../../../inc/Init.class.php:539
-msgid "Actualización de versión realizada."
-msgstr "Mise à jour de version effectuée."
-
-#: ../../../../inc/Init.class.php:540
-#: ../../../../inc/themes/classic/info.inc:33
-#: ../../../../inc/themes/material-blue/info.inc:33
-msgid "Versión"
-msgstr "Version"
-
-#: ../../../../inc/Installer.class.php:127
+#: ../../../../inc/SP/Core/Installer.class.php:138
msgid "Indicar nombre de usuario admin"
msgstr "Saisir le nom de l'utilisateur admin"
-#: ../../../../inc/Installer.class.php:128
+#: ../../../../inc/SP/Core/Installer.class.php:139
msgid "Usuario admin para acceso a la aplicación"
msgstr "Utilisateur admin pour se connecter à l'application"
-#: ../../../../inc/Installer.class.php:132
+#: ../../../../inc/SP/Core/Installer.class.php:143
msgid "Indicar la clave de admin"
msgstr "Saisir le mot de passe admin"
-#: ../../../../inc/Installer.class.php:133
+#: ../../../../inc/SP/Core/Installer.class.php:144
msgid "Clave del usuario admin de la aplicación"
msgstr "Mot de passe administrateur de l'application"
-#: ../../../../inc/Installer.class.php:137
+#: ../../../../inc/SP/Core/Installer.class.php:148
msgid "Indicar la clave maestra"
msgstr "Saisir le mot de passe maître"
-#: ../../../../inc/Installer.class.php:138
+#: ../../../../inc/SP/Core/Installer.class.php:149
msgid "Clave maestra para encriptar las claves"
msgstr "Mot de passe maître pour crypter les mots de passe"
-#: ../../../../inc/Installer.class.php:142
+#: ../../../../inc/SP/Core/Installer.class.php:153
msgid "Clave maestra muy corta"
msgstr "Mot de passe maître trop court"
-#: ../../../../inc/Installer.class.php:143
+#: ../../../../inc/SP/Core/Installer.class.php:154
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"
-#: ../../../../inc/Installer.class.php:147
+#: ../../../../inc/SP/Core/Installer.class.php:158
msgid "Indicar el usuario de la BBDD"
msgstr "Saisir l'utilisateur de la base de données"
-#: ../../../../inc/Installer.class.php:148
+#: ../../../../inc/SP/Core/Installer.class.php:159
msgid "Usuario con permisos de administrador de la Base de Datos"
msgstr "Un utilisateur avec des droits d'administration sur la BDD"
-#: ../../../../inc/Installer.class.php:152
+#: ../../../../inc/SP/Core/Installer.class.php:163
msgid "Indicar la clave de la BBDD"
-msgstr "Saisir le mot de passe de base de données"
+msgstr ""
-#: ../../../../inc/Installer.class.php:153
+#: ../../../../inc/SP/Core/Installer.class.php:164
msgid "Clave del usuario administrador de la Base de Datos"
-msgstr "Mot de passe administrateur de la base de données"
+msgstr ""
-#: ../../../../inc/Installer.class.php:157
+#: ../../../../inc/SP/Core/Installer.class.php:168
msgid "Indicar el nombre de la BBDD"
msgstr "Saisir le nom de la base de données"
-#: ../../../../inc/Installer.class.php:158
+#: ../../../../inc/SP/Core/Installer.class.php:169
msgid "Nombre para la BBDD de la aplicación pej. syspass"
msgstr "Nom pour la BD de l'application. eg. syspass"
-#: ../../../../inc/Installer.class.php:162
+#: ../../../../inc/SP/Core/Installer.class.php:173
msgid "El nombre de la BBDD no puede contener \".\""
msgstr "Le nom de la base de données ne peut pas contenir \".\""
-#: ../../../../inc/Installer.class.php:163
+#: ../../../../inc/SP/Core/Installer.class.php:174
+#, fuzzy
msgid "Elimine los puntos del nombre de la Base de Datos"
msgstr "Veuillez supprimer les points du nom de la base de données"
-#: ../../../../inc/Installer.class.php:167
+#: ../../../../inc/SP/Core/Installer.class.php:178
msgid "Indicar el servidor de la BBDD"
msgstr "Saisir le serveur de base de données"
-#: ../../../../inc/Installer.class.php:168
+#: ../../../../inc/SP/Core/Installer.class.php:179
msgid "Servidor donde se instalará la Base de Datos"
msgstr "Serveur où la base de données sera installée"
-#: ../../../../inc/Installer.class.php:267
+#: ../../../../inc/SP/Core/Installer.class.php:202
+#: ../../../../inc/SP/Storage/MySQLHandler.class.php:133
+#: ../../../../inc/SP/Storage/MySQLHandler.class.php:136
+#: ../../../../inc/SP/Storage/MySQLHandler.class.php:160
+msgid "No es posible conectar con la BD"
+msgstr "Impossible de se connecter à la base de données"
+
+#: ../../../../inc/SP/Core/Installer.class.php:203
+#: ../../../../inc/SP/Storage/MySQLHandler.class.php:133
+#: ../../../../inc/SP/Storage/MySQLHandler.class.php:137
+msgid "Compruebe los datos de conexión"
+msgstr "Veillez vérifier les parmètres de connexion"
+
+#: ../../../../inc/SP/Core/Installer.class.php:237
#, fuzzy
msgid "No es posible comprobar el usuario de sysPass"
msgstr "Impossible à supprimer, utilisateur en activité"
-#: ../../../../inc/Installer.class.php:268
+#: ../../../../inc/SP/Core/Installer.class.php:238
#, fuzzy
msgid "Compruebe los permisos del usuario de conexión a la BD"
msgstr ""
"Vérifiez les permissions de l'utilisateur de connexion à la base de données"
-#: ../../../../inc/Installer.class.php:319
-msgid "El usuario de MySQL ya existe"
-msgstr "L'utilisateur MySQL existe déjà"
+#: ../../../../inc/SP/Core/Installer.class.php:284
+#, php-format
+msgid "Error al crear el usuario de conexión a MySQL '%s'"
+msgstr ""
-#: ../../../../inc/Installer.class.php:320
-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:333
+#: ../../../../inc/SP/Core/Installer.class.php:300
msgid "La BBDD ya existe"
msgstr "La base de données existe déjà"
-#: ../../../../inc/Installer.class.php:334
+#: ../../../../inc/SP/Core/Installer.class.php:301
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à"
-#: ../../../../inc/Installer.class.php:343
-#: ../../../../inc/Installer.class.php:414
+#: ../../../../inc/SP/Core/Installer.class.php:304
+msgid "La BBDD no existe"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Installer.class.php:305
+msgid "Es necesario crearla y asignar los permisos necesarios"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Installer.class.php:315
+#: ../../../../inc/SP/Core/Installer.class.php:416
msgid "Error al crear la BBDD"
msgstr "Erreur pendant la création de la BDD"
-#: ../../../../inc/Installer.class.php:344
-#: ../../../../inc/Installer.class.php:355
+#: ../../../../inc/SP/Core/Installer.class.php:316
+#: ../../../../inc/SP/Core/Installer.class.php:336
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"
-#: ../../../../inc/Installer.class.php:354
-msgid "Error al establecer permisos de la BBDD"
-msgstr "Erreur pendant l'affectation des permissions de la base de données"
+#: ../../../../inc/SP/Core/Installer.class.php:335
+#, php-format
+msgid "Error al establecer permisos de la BBDD ('%s')"
+msgstr ""
-#: ../../../../inc/Installer.class.php:387
+#: ../../../../inc/SP/Core/Installer.class.php:389
msgid "El archivo de estructura de la BBDD no existe"
msgstr "Fichier de structure de base de données inexistant"
-#: ../../../../inc/Installer.class.php:388
+#: ../../../../inc/SP/Core/Installer.class.php:390
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."
-#: ../../../../inc/Installer.class.php:396
+#: ../../../../inc/SP/Core/Installer.class.php:398
msgid "Error al seleccionar la BBDD"
msgstr "Erreur pendant la sélection de la BDD"
-#: ../../../../inc/Installer.class.php:397
+#: ../../../../inc/SP/Core/Installer.class.php:399
msgid ""
"No es posible usar la Base de Datos para crear la estructura. Compruebe los "
"permisos y que no exista."
@@ -2085,1509 +2899,1585 @@ msgstr ""
"Impossible d'utiliser la base de données pour créer la structure. Vérifiez "
"les permissions et l'inexistantce de la structure."
-#: ../../../../inc/Installer.class.php:415
+#: ../../../../inc/SP/Core/Installer.class.php:417
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."
-#: ../../../../inc/Installer.class.php:438
+#: ../../../../inc/SP/Core/Installer.class.php:435
+msgid "Error al comprobar la base de datos"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Installer.class.php:436
+msgid "Intente de nuevo la instalación"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Installer.class.php:458
msgid "Error al crear el grupo \"admin\""
msgstr "Erreur pendant la création du groupe \"admin\""
-#: ../../../../inc/Installer.class.php:439
-#: ../../../../inc/Installer.class.php:472
-#: ../../../../inc/Installer.class.php:489
-#: ../../../../inc/Installer.class.php:502
+#: ../../../../inc/SP/Core/Installer.class.php:459
+#: ../../../../inc/SP/Core/Installer.class.php:471
+#: ../../../../inc/SP/Core/Installer.class.php:489
+#: ../../../../inc/SP/Core/Installer.class.php:502
msgid "Informe al desarrollador"
msgstr "Avertissez le développeur"
-#: ../../../../inc/Installer.class.php:471
+#: ../../../../inc/SP/Core/Installer.class.php:470
msgid "Error al crear el perfil \"admin\""
msgstr "Erreur pendant la création du profil \"admin\""
-#: ../../../../inc/Installer.class.php:488
+#: ../../../../inc/SP/Core/Installer.class.php:488
msgid "Error al crear el usuario \"admin\""
msgstr "Erreur pendant la création de l'utilisateur \"admin\""
-#: ../../../../inc/Installer.class.php:501
+#: ../../../../inc/SP/Core/Installer.class.php:501
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\""
-#: ../../../../inc/Ldap.class.php:132 ../../../../inc/Ldap.class.php:136
-msgid "No es posible conectar con el servidor de LDAP"
-msgstr "Impossible de se connecter au server LDAP"
+#: ../../../../inc/SP/Core/Plugin/PluginDataStore.class.php:76
+msgid "Nuevo Plugin"
+msgstr ""
-#: ../../../../inc/Ldap.class.php:161 ../../../../inc/Ldap.class.php:166
-msgid "Error al conectar (BIND)"
-msgstr "Erreur de connexion (BIND)"
+#: ../../../../inc/SP/Core/Plugin/PluginUtil.class.php:106
+#: ../../../../inc/SP/Core/Plugin/PluginUtil.class.php:108
+#: ../../../../inc/SP/Core/Plugin/PluginUtil.class.php:161
+#, php-format
+msgid "No es posible cargar el plugin \"%s\""
+msgstr ""
-#: ../../../../inc/Ldap.class.php:189 ../../../../inc/Ldap.class.php:194
-msgid "Error al buscar objetos en DN base"
-msgstr "Erreur pendant la recherche d'objets dans la base DN"
-
-#: ../../../../inc/Ldap.class.php:217 ../../../../inc/Ldap.class.php:223
-#: ../../../../inc/Ldap.class.php:230 ../../../../inc/Ldap.class.php:235
-#: ../../../../inc/Ldap.class.php:240 ../../../../inc/Ldap.class.php:245
-msgid "Error al buscar RDN de grupo"
-msgstr "Erreur pendant la recherche RDN du groupe"
-
-#: ../../../../inc/Ldap.class.php:294 ../../../../inc/Ldap.class.php:300
-#: ../../../../inc/Ldap.class.php:315 ../../../../inc/Ldap.class.php:320
-msgid "Error al buscar el DN del usuario"
-msgstr "Erreur pendant la recherche du DN de l'utilisateur"
-
-#: ../../../../inc/Ldap.class.php:307 ../../../../inc/Ldap.class.php:312
-msgid "Error al localizar el usuario en LDAP"
-msgstr "Erreur pendant la recherche de l'utilisateur dans l'annuaire LDAP"
-
-#: ../../../../inc/Ldap.class.php:389 ../../../../inc/Ldap.class.php:395
-#: ../../../../inc/LdapADS.class.php:103 ../../../../inc/LdapADS.class.php:108
-msgid "Error al buscar el grupo de usuarios"
-msgstr "Erreur pendant la recherche de groupe d'utilisateurs"
-
-#: ../../../../inc/Ldap.class.php:402
-msgid "Usuario verificado en grupo"
-msgstr "Utilisateur vérifié dans le groupe"
-
-#: ../../../../inc/LdapADS.class.php:112 ../../../../inc/LdapADS.class.php:117
-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"
-
-#: ../../../../inc/Log.class.php:88
-#: ../../../../inc/themes/classic/eventlog.inc:98
-#: ../../../../inc/themes/material-blue/eventlog.inc:99
-msgid "Vaciar registro de eventos"
-msgstr "Nettoyer le journal d'évènements"
-
-#: ../../../../inc/Migrate.class.php:51
-msgid "Faltan parámetros"
-msgstr "Paramètres manquants"
-
-#: ../../../../inc/Migrate.class.php:148
-msgid "La versión no es compatible"
-msgstr "Version incompatible"
-
-#: ../../../../inc/Migrate.class.php:149
-msgid "Actualice a la última versión de phpPMS"
-msgstr "Mettez à niveau la dernière version de phpPMS"
-
-#: ../../../../inc/Migrate.class.php:167
-msgid "Error al obtener la configuración"
-msgstr "Erreur pendant la récupération de la configuration"
-
-#: ../../../../inc/Migrate.class.php:210 ../../../../inc/Migrate.class.php:223
-msgid "Error al vaciar tabla"
-msgstr "Erreur pendant le nettoyage de la table"
-
-#: ../../../../inc/Migrate.class.php:228
-msgid "Usuario actual no es administrador de la aplicación"
-msgstr "L'utilisateur actuel n'est administrateur de l'application"
-
-#: ../../../../inc/Migrate.class.php:273
-msgid "No es posible crear el cliente"
-msgstr "Impossible de créer le client"
-
-#: ../../../../inc/Migrate.class.php:274
-msgid "Contacte con el desarrollador"
-msgstr "Veuillez contacter le développeur"
-
-#: ../../../../inc/Migrate.class.php:278
-msgid "Importar Clientes"
-msgstr "Importer Clients"
-
-#: ../../../../inc/Migrate.class.php:280 ../../../../inc/Migrate.class.php:350
-#: ../../../../inc/Migrate.class.php:451 ../../../../inc/Migrate.class.php:524
-#: ../../../../inc/Migrate.class.php:632 ../../../../inc/Migrate.class.php:697
-#: ../../../../inc/Migrate.class.php:771 ../../../../inc/Migrate.class.php:861
-#: ../../../../inc/Migrate.class.php:932
-msgid "Registros"
-msgstr "Enregistrements"
-
-#: ../../../../inc/Migrate.class.php:302
-msgid "Error al obtener los clientes"
-msgstr "Erreur pendant la récupération des clients"
-
-#: ../../../../inc/Migrate.class.php:344
-msgid "Error al obtener cuentas"
-msgstr "Erreur pendant la récupération des comptes"
-
-#: ../../../../inc/Migrate.class.php:373
-msgid "Cliente no encontrado"
-msgstr "Client introuvable"
-
-#: ../../../../inc/Migrate.class.php:416
-msgid "Error al migrar cuenta"
-msgstr "Erreur pendant l'importation des comptes"
-
-#: ../../../../inc/Migrate.class.php:445
-msgid "Error al obtener los grupos de cuentas"
-msgstr "Erreur pendant la récupération des groupes de comptes"
-
-#: ../../../../inc/Migrate.class.php:449
-msgid "Importar Grupos de Cuentas"
-msgstr "Importer Groupes de Comptes"
-
-#: ../../../../inc/Migrate.class.php:471
-msgid "Error al crear grupos de cuentas"
-msgstr "Erreur pendant la création des groupes de comptes"
-
-#: ../../../../inc/Migrate.class.php:518
-msgid "Error al obtener el historico de cuentas"
-msgstr "Erreur pendant la récupération de l'historique des comptes"
-
-#: ../../../../inc/Migrate.class.php:522
-msgid "Importar Histórico de Cuentas"
-msgstr "Importer Historique des Comptes"
-
-#: ../../../../inc/Migrate.class.php:591
-msgid "Error al crear historico de cuentas"
-msgstr "Erreur pendant la création de l'historique des comptes"
-
-#: ../../../../inc/Migrate.class.php:626
-msgid "Error al obtener los archivos de cuentas"
-msgstr "Erreur pendant la récupération des fichiers des comptes"
-
-#: ../../../../inc/Migrate.class.php:630
-msgid "Importar Archivos de Cuentas"
-msgstr "Importer Fichiers de Comptes"
-
-#: ../../../../inc/Migrate.class.php:662
-msgid "Error al crear archivos de cuentas"
-msgstr "Erreur pendant la création des fichiers de comptes"
-
-#: ../../../../inc/Migrate.class.php:691
-msgid "Error al obtener las categorías de cuentas"
-msgstr "Erreur pendant la récupération des catégorie de comtpes"
-
-#: ../../../../inc/Migrate.class.php:695
-msgid "Importar Categorías de Cuentas"
-msgstr "Importer Catégories de Comptes"
-
-#: ../../../../inc/Migrate.class.php:717
-msgid "Error al crear categorías de cuentas"
-msgstr "Erreur pendant la récupération des catégories de comptes"
-
-#: ../../../../inc/Migrate.class.php:765
-msgid "Error al obtener los usuarios"
-msgstr "Erreur pendant la récupération des utilisateurs"
-
-#: ../../../../inc/Migrate.class.php:769
-msgid "Importar Usuarios"
-msgstr "Importer Utilisateurs"
-
-#: ../../../../inc/Migrate.class.php:826
-msgid "Error al crear usuarios"
-msgstr "Erreur pendant la création des utilisateurs"
-
-#: ../../../../inc/Migrate.class.php:855
-msgid "Error al obtener los grupos de usuarios"
-msgstr "Erreur pendant la récupération des groupes d'utilisateurs"
-
-#: ../../../../inc/Migrate.class.php:859
-msgid "Importar Grupos de Usuarios"
-msgstr "Importer Groupes d'Utilisateurs"
-
-#: ../../../../inc/Migrate.class.php:885
-msgid "Error al crear los grupos de usuarios"
-msgstr "Erreur pendant l'ajout des groupes d'utilisateurs"
-
-#: ../../../../inc/Migrate.class.php:930
-msgid "Importar Configuración"
-msgstr "Importer Configuration"
-
-#: ../../../../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 "Erreur pendant l'obtention des profils"
-
-#: ../../../../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 "Données de profil incorrectes"
-
-#: ../../../../inc/ProfileBase.class.php:550
-#: ../../../../web/UsersMgmtC.class.php:275
-msgid "Eliminar Perfil"
-msgstr "Supprimer Profil"
-
-#: ../../../../inc/ProfileBase.class.php:593
-msgid "Modificar Perfil"
-msgstr "Modifier Profil"
-
-#: ../../../../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"
-
-#: ../../../../inc/SyspassImport.class.php:111
-msgid "No hay categorías para importar"
-msgstr "Il n'y a pas de catégorie à importer"
-
-#: ../../../../inc/SyspassImport.class.php:136
-msgid "No hay clientes para importar"
-msgstr "Il n'y a pas de clients à importer"
-
-#: ../../../../inc/SyspassImport.class.php:161
-msgid "No hay cuentas para importar"
-msgstr "Il n'y a pas de comptes à importer"
-
-#: ../../../../inc/Template.class.php:91
+#: ../../../../inc/SP/Core/Template.class.php:126
+#: ../../../../inc/SP/Core/Template.class.php:128
+#: ../../../../inc/SP/Html/DataGrid/DataGridBase.class.php:264
#, php-format
msgid "No es posible obtener la plantilla \"%s\" : %s"
msgstr "Impossible d'obtenir le modèle \"%s\" : %s"
-#: ../../../../inc/Template.class.php:130
+#: ../../../../inc/SP/Core/Template.class.php:182
+#: ../../../../inc/SP/Core/Template.class.php:184
#, php-format
msgid "No es posible obtener la variable \"%s\""
msgstr "Impossible d'obtenir la variable \"%s\""
-#: ../../../../inc/Template.class.php:173
+#: ../../../../inc/SP/Core/Template.class.php:227
+#: ../../../../inc/SP/Core/Template.class.php:229
#, php-format
msgid "No es posible destruir la variable \"%s\""
msgstr "Impossible de détruire la variable \"%s\""
-#: ../../../../inc/Upgrade.class.php:51
+#: ../../../../inc/SP/Core/Template.class.php:246
+msgid "La plantilla no contiene archivos"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:65
+#, fuzzy
msgid "Error al aplicar la actualización de la Base de Datos"
msgstr "Erreur pendant la mise à jour de la base de données."
-#: ../../../../inc/Upgrade.class.php:52 ../../../../inc/Upgrade.class.php:58
+#: ../../../../inc/SP/Core/Upgrade.class.php:66
+#: ../../../../inc/SP/Core/Upgrade.class.php:74
msgid "Compruebe el registro de eventos para más detalles"
msgstr "Veuillez consulter le journal des évènements pour plus de détail"
-#: ../../../../inc/Upgrade.class.php:52 ../../../../inc/Upgrade.class.php:58
-#: ../../../../inc/themes/classic/login.inc:32
-#: ../../../../inc/themes/material-blue/2fa.inc:24
-#: ../../../../inc/themes/material-blue/login.inc:65
-msgid "Acceder"
-msgstr "Se connecter"
-
-#: ../../../../inc/Upgrade.class.php:57
+#: ../../../../inc/SP/Core/Upgrade.class.php:73
msgid "Error al aplicar la actualización auxiliar"
msgstr "Erreur lors de l'application d'une mise à jour auxiliaire"
-#: ../../../../inc/Upgrade.class.php:74
+#: ../../../../inc/SP/Core/Upgrade.class.php:93
msgid "Actualizar BBDD"
msgstr "Mis à jour BDD"
-#: ../../../../inc/Upgrade.class.php:127
+#: ../../../../inc/SP/Core/Upgrade.class.php:99
msgid "No es necesario actualizar la Base de Datos."
msgstr "La mise à jour de la base de données n'est pas nécessaire."
-#: ../../../../inc/Upgrade.class.php:135
+#: ../../../../inc/SP/Core/Upgrade.class.php:111
msgid "Error al aplicar la actualización de la Base de Datos."
msgstr "Erreur pendant la mise à jour de la base de données."
-#: ../../../../inc/Upgrade.class.php:144
+#: ../../../../inc/SP/Core/Upgrade.class.php:121
msgid "Actualización de la Base de Datos realizada correctamente."
msgstr "Mise à jour de la base de données effectuée."
-#: ../../../../inc/Upgrade.class.php:221
+#: ../../../../inc/SP/Core/Upgrade.class.php:245
msgid "Actualizar Configuración"
msgstr "Mettre à jour la Configuration"
-#: ../../../../inc/Upgrade.class.php:221
-msgid "Actualización de la Configuración realizada correctamente."
-msgstr "Mise à jour de la configuration effectuée correctement."
-
-#: ../../../../inc/UserBase.class.php:388
-#: ../../../../inc/UserBase.class.php:532
-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."
-
-#: ../../../../inc/UserBase.class.php:527
-msgid "Modificar Usuario"
-msgstr "Modifier Utilisateur"
-
-#: ../../../../inc/UserBase.class.php:594
-#: ../../../../web/UsersMgmtC.class.php:151
-msgid "Eliminar Usuario"
-msgstr "Supprimer Utilisateur"
-
-#: ../../../../inc/UserLdap.class.php:68
-#: ../../../../web/UsersMgmtC.class.php:109
-#: ../../../../inc/themes/classic/users.inc:28
-#: ../../../../inc/themes/material-blue/users.inc:34
-msgid "Usuario de LDAP"
-msgstr "Utilisateur LDAP"
-
-#: ../../../../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/UserMigrate.class.php:113
-msgid "Migrar Grupos"
-msgstr "Migrer les groupes"
-
-#: ../../../../inc/UserMigrate.class.php:113
-msgid "Error al migrar grupo del usuario"
-msgstr "Erreur pendant la migration du groupe de l'utilisateur"
-
-#: ../../../../inc/Util.class.php:119
-msgid "Versión de PHP requerida >= "
-msgstr "Version PHP requise >="
-
-#: ../../../../inc/Util.class.php:120
-msgid ""
-"Actualice la versión de PHP para que la aplicación funcione correctamente"
+#: ../../../../inc/SP/Core/Upgrade.class.php:284
+msgid "Error al actualizar la configuración"
msgstr ""
-"Mettez à niveau votre version de PHP afin que l'application fonctionne "
-"correctement"
-#: ../../../../inc/Util.class.php:156
-#: ../../../../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:157
-msgid "Sin este módulo la aplicación puede no funcionar correctamente."
-msgstr "Sans ce module, l'application ne peut pas fonctionner correctement."
-
-#: ../../../../inc/XmlExport.class.php:127
+#: ../../../../inc/SP/Core/XmlExport.class.php:130
msgid "Exportar XML"
msgstr "Exporter XML"
-#: ../../../../inc/XmlExport.class.php:412
+#: ../../../../inc/SP/Core/XmlExport.class.php:143
+msgid "Error al realizar la exportación de cuentas"
+msgstr "Erreur pendant l'exportation de comptes"
+
+#: ../../../../inc/SP/Core/XmlExport.class.php:152
+msgid "Exportación de cuentas realizada correctamente"
+msgstr "Export réalisé avec succès"
+
+#: ../../../../inc/SP/Core/XmlExport.class.php:478
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 "Format détecté"
+#: ../../../../inc/SP/Forms/AccountForm.class.php:132
+msgid "Es necesaria una clave"
+msgstr "Une clé est requise"
-#: ../../../../inc/XmlImportBase.class.php:80
-msgid "No es posible procesar el archivo XML"
-msgstr "Impossible de traiter le fichier XML"
+#: ../../../../inc/SP/Forms/AccountForm.class.php:144
+msgid "Es necesario un nombre de cuenta"
+msgstr "Nom de compte requis"
-#: ../../../../inc/XmlImportBase.class.php:108
+#: ../../../../inc/SP/Forms/AccountForm.class.php:146
+#: ../../../../inc/SP/Forms/CustomerForm.class.php:83
+msgid "Es necesario un nombre de cliente"
+msgstr "Nom de client requis"
+
+#: ../../../../inc/SP/Forms/AccountForm.class.php:148
+msgid "Es necesario un usuario"
+msgstr "Nom d'utilisateur requis"
+
+#: ../../../../inc/SP/Forms/AccountForm.class.php:150
+msgid "Es necesario una categoría"
+msgstr "Une catégorie est requise"
+
+#: ../../../../inc/SP/Forms/ApiTokenForm.class.php:84
+msgid "Usuario no indicado"
+msgstr ""
+
+#: ../../../../inc/SP/Forms/ApiTokenForm.class.php:86
+msgid "Acción no indicada"
+msgstr ""
+
+#: ../../../../inc/SP/Forms/CategoryForm.class.php:83
+msgid "Es necesario un nombre de categoría"
+msgstr "Nom de catégorie requis"
+
+#: ../../../../inc/SP/Forms/CustomFieldDefForm.class.php:87
+msgid "Nombre del campo no indicado"
+msgstr "Nom de champ indéfini"
+
+#: ../../../../inc/SP/Forms/CustomFieldDefForm.class.php:89
+msgid "Tipo del campo no indicado"
+msgstr "Type de champ indéfini"
+
+#: ../../../../inc/SP/Forms/CustomFieldDefForm.class.php:91
+msgid "Módulo del campo no indicado"
+msgstr "Module de champ indéfini"
+
+#: ../../../../inc/SP/Forms/GroupForm.class.php:84
+msgid "Es necesario un nombre de grupo"
+msgstr "Nom de groupe requis"
+
+#: ../../../../inc/SP/Forms/NoticeForm.class.php:91
+msgid "Es necesario un componente"
+msgstr ""
+
+#: ../../../../inc/SP/Forms/NoticeForm.class.php:93
+msgid "Es necesario un tipo"
+msgstr ""
+
+#: ../../../../inc/SP/Forms/NoticeForm.class.php:100
+msgid "Es necesario un destinatario"
+msgstr ""
+
+#: ../../../../inc/SP/Forms/ProfileForm.class.php:111
+msgid "Es necesario un nombre de perfil"
+msgstr "Nom de profil requis"
+
+#: ../../../../inc/SP/Forms/TagForm.class.php:82
+msgid "Es necesario un nombre de etiqueta"
+msgstr ""
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:86
+msgid "Es necesario un nombre de usuario"
+msgstr "Nom d'utilisateur requis"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:88
+msgid "Es necesario un login"
+msgstr "Login requis"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:90
+msgid "Es necesario un perfil"
+msgstr "Profil requis"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:92
+msgid "Es necesario un grupo"
+msgstr "Groupe requis"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:94
+msgid "Es necesario un email"
+msgstr "Courriel requis"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:110
+msgid "La clave no puede estar en blanco"
+msgstr "Le mot de passe ne peut pas être blanc"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:127
+msgid "No es posible eliminar, usuario en uso"
+msgstr "Impossible à supprimer, utilisateur actif"
+
+#: ../../../../inc/SP/Http/Request.class.php:51
+msgid "No es posible acceder directamente a este archivo"
+msgstr "Impossible d'accéder directement à ce fichier"
+
+#: ../../../../inc/SP/Http/XMLRPCResponseParse.class.php:68
+msgid "Respuesta XML-RPC inválida"
+msgstr ""
+
+#: ../../../../inc/SP/Import/CsvImport.class.php:46
+#: ../../../../inc/SP/Import/XmlImport.class.php:99
+#, php-format
+msgid "Formato detectado: %s"
+msgstr ""
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:84
+#, php-format
+msgid "El número de campos es incorrecto (%d)"
+msgstr "Mauvais numéro de champs (%d)"
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:85
+#, php-format
+msgid "Compruebe el formato del archivo CSV en línea %s"
+msgstr "Veuillez, s'il vous plait, vérifier le format CSV à la ligne %s"
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:111
+msgid "Error importando cuenta"
+msgstr "Erreur pendant l'importation des comptes"
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:112
+msgid "Error procesando línea"
+msgstr ""
+
+#: ../../../../inc/SP/Import/FileImport.class.php:86
+msgid "Archivo no subido correctamente"
+msgstr "Fichier transféré avec succès"
+
+#: ../../../../inc/SP/Import/FileImport.class.php:87
+msgid "Verifique los permisos del usuario del servidor web"
+msgstr "Veuillez vérifier les permissions de l'utilisateur du serveur web"
+
+#: ../../../../inc/SP/Import/FileImport.class.php:98
+#, fuzzy
+msgid "Compruebe la extensión del archivo"
+msgstr "Veuillez vérifier l'extension de fichier"
+
+#: ../../../../inc/SP/Import/FileImport.class.php:114
+#, fuzzy
+msgid "Compruebe la configuración de PHP para subir archivos"
+msgstr "Veuillez vérifier la configuration PHP pour le transfert de fichier"
+
+#: ../../../../inc/SP/Import/FileImport.class.php:158
+#: ../../../../inc/SP/Import/FileImport.class.php:186
+#, fuzzy
+msgid "Compruebe los permisos del directorio temporal"
+msgstr "Vérifiez les permissions du dossier temporaire"
+
+#: ../../../../inc/SP/Import/Import.class.php:83
+#, php-format
+msgid "Tipo mime no soportado (\"%s\")"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Import.class.php:84
+#, fuzzy
+msgid "Compruebe el formato del archivo"
+msgstr "Veuillez vérifiez le format de fichier"
+
+#: ../../../../inc/SP/Import/Import.class.php:98
+msgid "Cuentas importadas"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Import.class.php:103
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:66
+#: ../../../../js/strings.js.php:79
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:70
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:127
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:287
+#: ../../../../inc/themes/material-blue/views/config/import.inc:101
+msgid "Ayuda"
+msgstr "Aide"
+
+#: ../../../../inc/SP/Import/Import.class.php:114
+msgid "Importación finalizada"
+msgstr "Importation terminée"
+
+#: ../../../../inc/SP/Import/ImportBase.class.php:121
+msgid "Id de categoría no definido. No es posible importar cuenta."
+msgstr ""
+
+#: ../../../../inc/SP/Import/ImportBase.class.php:124
+msgid "Id de cliente no definido. No es posible importar cuenta."
+msgstr ""
+
+#: ../../../../inc/SP/Import/SyspassImport.class.php:73
+msgid "Clave de encriptación no indicada"
+msgstr ""
+
+#: ../../../../inc/SP/Import/SyspassImport.class.php:109
+#: ../../../../inc/SP/Import/SyspassImport.class.php:122
+#, fuzzy
+msgid "Clave de encriptación incorrecta"
+msgstr "IV d'encryption incorrect"
+
+#: ../../../../inc/SP/Import/XmlFileImport.class.php:85
msgid "Archivo XML no soportado"
msgstr "Fichier XML non supportés"
-#: ../../../../inc/XmlImportBase.class.php:109
+#: ../../../../inc/SP/Import/XmlFileImport.class.php:86
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
+#: ../../../../inc/SP/Import/XmlFileImport.class.php:107
+msgid "No es posible procesar el archivo XML"
+msgstr "Impossible de traiter le fichier XML"
+
+#: ../../../../inc/SP/Import/XmlImportTrait.class.php:69
+msgid "Formato de XML inválido"
+msgstr "Format XML invalide"
+
+#: ../../../../inc/SP/Import/XmlImportTrait.class.php:70
+#, php-format
+msgid "El nodo \"%s\" no existe"
+msgstr ""
+
+#: ../../../../inc/SP/Log/Email.class.php:62
+msgid "N/D"
+msgstr "N/A"
+
+#: ../../../../inc/SP/Log/Email.class.php:64
+msgid "Realizado por"
+msgstr "Réalisé par"
+
+#: ../../../../inc/SP/Log/Email.class.php:76
+#: ../../../../inc/SP/Log/Email.class.php:191
+msgid "Enviar Email"
+msgstr "Envoyer Courriel"
+
+#: ../../../../inc/SP/Log/Email.class.php:81
+#: ../../../../inc/SP/Log/Email.class.php:198
+msgid "Correo enviado"
+msgstr "Courriel envoyé"
+
+#: ../../../../inc/SP/Log/Email.class.php:82
+#: ../../../../inc/SP/Log/Email.class.php:192
+msgid "Destinatario"
+msgstr "Destinataire"
+
+#: ../../../../inc/SP/Log/Email.class.php:85
+msgid "CC"
+msgstr "CC"
+
+#: ../../../../inc/SP/Log/Email.class.php:91
+#: ../../../../inc/SP/Log/Email.class.php:202
+msgid "Error al enviar correo"
+msgstr "Erreur pendant l'envoi du courriel"
+
+#: ../../../../inc/SP/Log/Log.class.php:91
+msgid "Error al vaciar el registro de eventos"
+msgstr "Erreur pendant le nettoyage du journal d'évènements"
+
+#: ../../../../inc/SP/Log/LogUtil.class.php:44
+#, php-format
+msgid "Extensión '%s' no cargada"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:57
+msgid "Categoría duplicada"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:68
+msgid "Error al crear la categoría"
+msgstr "Erreur pendant la création de la catégorie"
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:122
+msgid "Error al eliminar la categoría"
+msgstr "Erreur pendant la suppression de la catégorie"
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:177
+msgid "Nombre de categoría duplicado"
+msgstr "Nom de catégorie dupliqué"
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:193
+msgid "Error al actualizar la categoría"
+msgstr "Erreur pendant l'actualisation de la categorie"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:72
+msgid "Error al crear el campo personalizado"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:87
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:96
+msgid "Error al eliminar el campo personalizado"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:140
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:218
+msgid "Error al actualizar el campo personalizado"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:174
+msgid "Campo personalizado no encontrado"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:227
+msgid "No se encontraron campos personalizados"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:62
+msgid "Texto"
+msgstr "Texte"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:66
+msgid "Número"
+msgstr "Numéro"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:67
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:60
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:87
+msgid "Email"
+msgstr "Courriel"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:68
+msgid "Teléfono"
+msgstr "Téléphone"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:69
+msgid "Link"
+msgstr "Lien"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:70
+msgid "Color"
+msgstr "Couleur"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:71
+msgid "Área de Texto"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:82
+msgid "No hay datos de campos personalizados"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:87
+msgid "Actualizando datos encriptados"
+msgstr "Actualisation des données cryptés"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:117
+#, fuzzy
+msgid "Registros no actualizados"
+msgstr "Enregistrements non actualisés"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:118
+msgid "Registros actualizados"
+msgstr "Enregistrements à jour"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:191
+msgid "Error al migrar campos personalizados"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:58
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:182
+#, fuzzy
+msgid "Cliente duplicado"
+msgstr "Client dupliqué"
+
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:72
+msgid "Error al crear el cliente"
+msgstr "Erreur pendant la création du client"
+
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:118
+msgid "No es posible eliminar"
+msgstr "Impossible de supprimer"
+
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:127
+#, fuzzy
+msgid "Error al eliminar el cliente"
+msgstr "Erreur pendant la suppression du client"
+
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:198
+msgid "Error al actualizar el cliente"
+msgstr "Erreur pendant l'actualisation du client"
+
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:101
+msgid "Archivo subido"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:123
+msgid "Error al eliminar archivo"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:128
+msgid "Archivo no encontrado"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Files/FileUtil.class.php:102
+msgid "Error al eliminar archivos asociados a la cuenta"
+msgstr "Erreur pendant la supression des fichiers du compte"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:57
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:193
+msgid "Nombre de grupo duplicado"
+msgstr "Nom de groupe dupliqué"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:67
+#, fuzzy
+msgid "Error al crear el grupo"
+msgstr "Erreur pendant la création de groupe"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:110
+msgid "Grupo en uso"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:119
+#, fuzzy
+msgid "Error al eliminar el grupo"
+msgstr "Erreur pendant la supression du groupe"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:124
+msgid "Grupo no encontrado"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:204
+#, fuzzy
+msgid "Error al actualizar el grupo"
+msgstr "Erreur pendant l'actualisation du groupe"
+
+#: ../../../../inc/SP/Mgmt/Groups/GroupAccounts.class.php:70
+msgid "Error al eliminar grupos asociados a la cuenta"
+msgstr "Erreur pendant la suppression du groupe du compte"
+
+#: ../../../../inc/SP/Mgmt/Groups/GroupAccounts.class.php:100
+msgid "Error al actualizar los grupos secundarios"
+msgstr "Erreur pendant l'actualisation des groupes secondaires"
+
+#: ../../../../inc/SP/Mgmt/Groups/GroupUsers.class.php:69
+msgid "Error al asignar los usuarios al grupo"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Groups/GroupUsers.class.php:89
+msgid "Error al eliminar los usuarios del grupo"
+msgstr "Erreur pendant la supression des utilisateurs du groupe"
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:69
+msgid "Error al crear la notificación"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:94
+msgid "Error al eliminar la notificación"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:99
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:137
+msgid "Notificación no encontrada"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:132
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:248
+msgid "Error al modificar la notificación"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:171
+msgid "Error al obtener la notificación"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:202
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:288
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:322
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:358
+msgid "Error al obtener las notificaciones"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:59
+msgid "Error al crear el plugin"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:83
+msgid "Error al eliminar el plugin"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:88
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:120
+msgid "Plugin no encontrado"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:115
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:223
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:247
+msgid "Error al actualizar el plugin"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:56
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:182
+msgid "Nombre de perfil duplicado"
+msgstr "Nom de profil dupliqué"
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:68
+msgid "Error al crear perfil"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:105
+msgid "Perfil en uso"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:114
+msgid "Error al eliminar perfil"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:119
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:201
+msgid "Perfil no encontrado"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:196
+msgid "Error al modificar perfil"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Profiles/ProfileUtil.class.php:55
+msgid "Migrar Perfiles"
+msgstr "Migrer des profiles"
+
+#: ../../../../inc/SP/Mgmt/Profiles/ProfileUtil.class.php:85
+msgid "Error al obtener perfiles"
+msgstr "Erreur pendant l'obtention des profils"
+
+#: ../../../../inc/SP/Mgmt/Profiles/ProfileUtil.class.php:147
+msgid "Operación realizada correctamente"
+msgstr "Opération faite avec succès"
+
+#: ../../../../inc/SP/Mgmt/Profiles/ProfileUtil.class.php:152
+msgid "Fallo al realizar la operación"
+msgstr "Erreur pendant l'opération"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:104
+msgid "Error al actualizar enlace"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:109
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:185
+msgid "Enlace no encontrado"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:122
+msgid "Enlace ya creado"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:143
+msgid "Error al crear enlace"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:180
+msgid "Error al eliminar enlace"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:214
+msgid "Error al renovar enlace"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:243
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:342
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:376
+msgid "Error al obtener enlace"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:294
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLinkSearch.class.php:72
+msgid "ON"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:294
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLinkSearch.class.php:72
+msgid "OFF"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:53
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:126
+msgid "Etiqueta duplicada"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:63
+msgid "Error al crear etiqueta"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:108
+msgid "Error al eliminar etiqueta"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:113
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:142
+msgid "Etiqueta no encontrada"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:137
+msgid "Error al actualizar etiqueta"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:184
+msgid "Error al obtener etiqueta"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:53
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:152
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:77
+msgid "Login/email de usuario duplicados"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:90
+#, fuzzy
+msgid "Error al crear el usuario"
+msgstr "Erreur pendant la création d'utilisateur"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:132
+#, fuzzy
+msgid "Error al eliminar el usuario"
+msgstr "Erreur pendant la suppression de l'utilisateur"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:137
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:188
+msgid "Usuario no encontrado"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:183
+#, fuzzy
+msgid "Error al actualizar el usuario"
+msgstr "Erreur pendant l'actualisation de l'utilisateur"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:250
+msgid "Error al obtener los usuarios"
+msgstr "Erreur pendant la récupération des utilisateurs"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:286
+#: ../../../../inc/SP/Mgmt/Users/UserPass.class.php:145
+#, fuzzy
+msgid "Error al modificar la clave"
+msgstr "Erreur pendant la modification du mot de passe"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:339
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:386
+msgid "Error al obtener los datos del usuario"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:108
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:54
+msgid "Usuario de LDAP"
+msgstr "Utilisateur LDAP"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:117
+#, fuzzy
+msgid "Error al guardar los datos de LDAP"
+msgstr "Erreur pendant la sauvegarde des données utilisateur LDAP"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:125
+msgid "Activación Cuenta"
+msgstr "Activation Compte"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:126
+msgid "Su cuenta está pendiente de activación."
+msgstr "Votre compte est en attente d'activation."
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:127
+msgid "En breve recibirá un email de confirmación."
+msgstr "Vous recevrez un courriel de confirmation sous peu."
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:134
+msgid "Nuevo usuario de LDAP"
+msgstr "Nouvel utilisateur LDAP"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:198
+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"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdapSync.class.php:60
+msgid "Sincronización LDAP"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdapSync.class.php:110
+msgid "No se encontraron objetos para sincronizar"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdapSync.class.php:116
+msgid "Sincronización finalizada"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Users/UserMigrate.class.php:98
+msgid "Error al migrar cuenta de usuario"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Users/UserMigrate.class.php:133
+msgid "Error al obtener grupo de usuarios"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Users/UserMigrate.class.php:148
+msgid "Error al migrar grupo del usuario"
+msgstr "Erreur pendant la migration du groupe de l'utilisateur"
+
+#: ../../../../inc/SP/Mgmt/Users/UserPassRecover.class.php:110
+msgid "Error en comprobación de hash"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Users/UserPassRecover.class.php:112
+msgid "Hash inválido o expirado"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Users/UserPassRecover.class.php:158
+msgid "Error al generar el hash de recuperación"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Users/UserPreferences.class.php:79
+msgid "Error al actualizar preferencias"
+msgstr "Erreur pendant l'actualisation des préférences"
+
+#: ../../../../inc/SP/Mgmt/Users/UserPreferencesUtil.class.php:59
+msgid "Actualizando preferencias"
+msgstr ""
+
+#: ../../../../inc/SP/Storage/DB.class.php:296
+#: ../../../../inc/SP/Storage/DB.class.php:336
+#: ../../../../js/strings.js.php:26
+#, fuzzy
msgid "Error en la consulta"
msgstr "Erreur pendant la requête"
-#: ../../../../js/strings.js.php:28
+#: ../../../../inc/SP/Storage/DB.class.php:342
+msgid "Consulta en blanco"
+msgstr ""
+
+#: ../../../../inc/SP/Storage/DB.class.php:354
+msgid "Restricción de integridad"
+msgstr ""
+
+#: ../../../../inc/SP/Storage/XmlHandler.class.php:77
+#, php-format
+msgid "No es posible leer/escribir el archivo: %s"
+msgstr ""
+
+#: ../../../../inc/SP/Storage/XmlHandler.class.php:161
+msgid "No hay elementos para guardar"
+msgstr ""
+
+#: ../../../../inc/SP/Util/Connection.class.php:120
+msgid "Socket no inicializado"
+msgstr ""
+
+#: ../../../../inc/SP/Util/Connection.class.php:127
+msgid "Error al enviar datos"
+msgstr ""
+
+#: ../../../../inc/SP/Util/Json.class.php:63
+msgid "Error de codificación"
+msgstr "Erreur d'encodage"
+
+#: ../../../../inc/SP/Util/Util.class.php:316
+msgid "Respuesta"
+msgstr ""
+
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApi.class.php:68
+msgid "Fallo de autentificación"
+msgstr ""
+
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApiBase.class.php:173
+msgid "Error al realizar la consulta"
+msgstr ""
+
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApiBase.class.php:219
+msgid "URL de conexión no establecida"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:46
+msgid "Añadir"
+msgstr "Ajouter"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:47
+msgid "Ver Detalles"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:49
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:68
+msgid "Editar"
+msgstr "Editer"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:50
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:80
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:82
+msgid "Eliminar"
+msgstr "Supprimer"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:51
+msgid "Cambiar Clave"
+msgstr "Changer Mot de passe"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:52
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:148
+msgid "Admin Aplicación"
+msgstr "Admin Application"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:53
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:155
+msgid "Admin Cuentas"
+msgstr "Admin Comptes"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:55
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:160
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:163
+msgid "Deshabilitado"
+msgstr "Désactivé"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:56
+msgid "Habilitado"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:58
+msgid "Copiar"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:63
+#: ../../../../inc/themes/material-blue/views/main/error.inc:12
+#: ../../../../inc/themes/material-blue/views/main/error.inc:13
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:56
+msgid "Volver"
+msgstr "Retour"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:64
+msgid "Restaurar"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:65
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:109
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:160
+msgid "Guardar"
+msgstr "Sauver"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:67
+msgid "Limpiar"
+msgstr "Nettoyer"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:68
+msgid "Realizar"
+msgstr "Effectuer"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:69
+msgid "Descargar"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:71
+msgid "Comprobar"
+msgstr "Vérifier"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:78
+msgid "Crítico"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:83
+msgid "Página anterior"
+msgstr "Page précédante"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:84
+msgid "Página siguiente"
+msgstr "Page suivante"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:85
+msgid "Primera página"
+msgstr "Première page"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:86
+msgid "Última página"
+msgstr "Dernière page"
+
+#: ../../../../js/strings.js.php:27
msgid "Ha ocurrido un error"
msgstr "Il y a une erreur"
-#: ../../../../js/strings.js.php:29
-#: ../../../../inc/themes/classic/login.inc:52
-#: ../../../../inc/themes/material-blue/login.inc:78
+#: ../../../../js/strings.js.php:28 ../../../../js/strings.js.php:86
msgid "Sesión finalizada"
msgstr "Session terminée"
-#: ../../../../js/strings.js.php:30
+#: ../../../../js/strings.js.php:29
msgid "Borrar la cuenta?"
msgstr "Supprimer compte?"
-#: ../../../../js/strings.js.php:31
+#: ../../../../js/strings.js.php:30
msgid "Borrar el usuario?"
msgstr "Supprimer l'utilisateur?"
-#: ../../../../js/strings.js.php:32
+#: ../../../../js/strings.js.php:31
msgid "Guarde la configuración para que sea efectiva"
msgstr ""
"Vous devez sauvegarder la configuration pour qu'elle soit prise en compte"
-#: ../../../../js/strings.js.php:33
+#: ../../../../js/strings.js.php:32
msgid "Clave Generada"
msgstr "Mot de passe généré"
-#: ../../../../js/strings.js.php:34
+#: ../../../../js/strings.js.php:33
msgid "Nivel alto"
msgstr "Niveau haut"
-#: ../../../../js/strings.js.php:35
+#: ../../../../js/strings.js.php:34
msgid "Nivel medio"
msgstr "Niveau moyen"
-#: ../../../../js/strings.js.php:36
+#: ../../../../js/strings.js.php:35
msgid "Nivel bajo"
msgstr "Niveau bas"
-#: ../../../../js/strings.js.php:37
+#: ../../../../js/strings.js.php:36
msgid "Nivel muy alto"
msgstr "Niveau très haut"
-#: ../../../../js/strings.js.php:38
+#: ../../../../js/strings.js.php:37
msgid "Utilizar al menos 8 caracteres"
msgstr "Vous devriez utiliser au moins 8 caractères"
-#: ../../../../js/strings.js.php:39
+#: ../../../../js/strings.js.php:38
msgid "Borrar elemento?"
msgstr "Supprimer élément?"
-#: ../../../../js/strings.js.php:40
+#: ../../../../js/strings.js.php:39
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:8
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:17
msgid "Página no encontrada"
msgstr "Page introuvable"
-#: ../../../../js/strings.js.php:41
+#: ../../../../js/strings.js.php:40
msgid "Archivo no soportado para visualizar"
msgstr "Fichier non supporté pour la pré-visualisation"
-#: ../../../../js/strings.js.php:42
+#: ../../../../js/strings.js.php:41
msgid "Eliminar archivo?"
msgstr "Supprimer fichier?"
-#: ../../../../js/strings.js.php:43
+#: ../../../../js/strings.js.php:42
msgid "Su navegador no soporta subir archivos con HTML5"
msgstr "Votre navigateur ne supporte pas le transfert de fichier HTML5"
-#: ../../../../js/strings.js.php:44
+#: ../../../../js/strings.js.php:43
msgid "Demasiados archivos"
msgstr "Trop de fichiers"
-#: ../../../../js/strings.js.php:45
+#: ../../../../js/strings.js.php:44
msgid "Tamaño de archivo no permitido"
msgstr "Taille de fichiers non supportés"
-#: ../../../../js/strings.js.php:47
+#: ../../../../js/strings.js.php:45
+msgid "Extensión no permitida"
+msgstr "Extension non autorisée"
+
+#: ../../../../js/strings.js.php:46
msgid "Vaciar el registro de eventos?"
msgstr "Nettoyer le journal d'évènements"
-#: ../../../../js/strings.js.php:48
+#: ../../../../js/strings.js.php:47
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:75
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:243
+#: ../../../../inc/themes/material-blue/views/config/import.inc:54
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:221
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:77
msgid "Seleccionar Grupo"
msgstr "Sélectionner Groupe"
-#: ../../../../js/strings.js.php:49
+#: ../../../../js/strings.js.php:48
+#: ../../../../inc/themes/material-blue/views/config/import.inc:28
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:245
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:17
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:96
msgid "Seleccionar Usuario"
msgstr "Sélectionner l'utilisateur"
-#: ../../../../js/strings.js.php:50
+#: ../../../../js/strings.js.php:49
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:61
msgid "Seleccionar Perfil"
msgstr "Sélectionner Profil"
-#: ../../../../js/strings.js.php:51
+#: ../../../../js/strings.js.php:50
+#: ../../../../inc/themes/material-blue/views/account/account.inc:59
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:49
msgid "Seleccionar Cliente"
msgstr "Sélectionner Client"
-#: ../../../../js/strings.js.php:52
+#: ../../../../js/strings.js.php:51
+#: ../../../../inc/themes/material-blue/views/account/account.inc:82
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:57
msgid "Seleccionar Categoría"
msgstr "Sélectionner Catégorie"
-#: ../../../../js/strings.js.php:53
+#: ../../../../js/strings.js.php:52
msgid "Sin resultados"
msgstr "Aucun résultat"
-#: ../../../../js/strings.js.php:54
+#: ../../../../js/strings.js.php:53
msgid "Opciones de clave"
msgstr "Options de mot de passe"
-#: ../../../../js/strings.js.php:55
+#: ../../../../js/strings.js.php:54
msgid "Generar clave aleatoria"
msgstr "Générer un mot de passe aléatoire"
-#: ../../../../js/strings.js.php:56
+#: ../../../../js/strings.js.php:55
msgid "Complejidad"
msgstr "Compléxité"
-#: ../../../../js/strings.js.php:57
+#: ../../../../js/strings.js.php:56
msgid "Restablecer"
msgstr "Rétablir"
-#: ../../../../js/strings.js.php:58
-#: ../../../../inc/themes/classic/editpass.inc:33
+#: ../../../../js/strings.js.php:57
msgid "Nivel de fortaleza de la clave"
msgstr "Niveau de sécurité du mot de passe"
-#: ../../../../js/strings.js.php:59
+#: ../../../../js/strings.js.php:58
msgid "Mostrar Clave"
msgstr "Afficher Mot de passe"
-#: ../../../../js/strings.js.php:60
+#: ../../../../js/strings.js.php:59
+#: ../../../../inc/themes/material-blue/views/account/viewpass.inc:19
msgid "Copiar Usuario"
msgstr "Copier le nom d'utilisateur"
-#: ../../../../js/strings.js.php:61
+#: ../../../../js/strings.js.php:60
+#: ../../../../inc/themes/material-blue/views/account/viewpass.inc:30
msgid "Copiar Clave"
msgstr "Copier le mot de passe"
-#: ../../../../js/strings.js.php:62
+#: ../../../../js/strings.js.php:61
msgid "Incluir Números"
msgstr "Inclure des nombres"
-#: ../../../../js/strings.js.php:63
+#: ../../../../js/strings.js.php:62
msgid "Incluir Mayúsculas"
msgstr "Inclure des lettres majuscules"
-#: ../../../../js/strings.js.php:64
+#: ../../../../js/strings.js.php:63
msgid "Incluir Símbolos"
msgstr "Inclure des symboles"
-#: ../../../../js/strings.js.php:65
+#: ../../../../js/strings.js.php:64
msgid "Longitud"
msgstr "Longueur "
-#: ../../../../js/strings.js.php:66
+#: ../../../../js/strings.js.php:65
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:32
msgid "Seleccionar Acción"
msgstr "Choisir une action"
-#: ../../../../js/strings.js.php:67
-#: ../../../../inc/themes/classic/account.inc:136
-#: ../../../../inc/themes/classic/account.inc:167
-#: ../../../../inc/themes/classic/account.inc:458
-#: ../../../../inc/themes/classic/config.inc:70
-#: ../../../../inc/themes/classic/config.inc:86
-#: ../../../../inc/themes/classic/config.inc:102
-#: ../../../../inc/themes/classic/config.inc:118
-#: ../../../../inc/themes/classic/config.inc:134
-#: ../../../../inc/themes/classic/config.inc:150
-#: ../../../../inc/themes/classic/config.inc:166
-#: ../../../../inc/themes/classic/config.inc:182
-#: ../../../../inc/themes/classic/config.inc:255
-#: ../../../../inc/themes/classic/config.inc:274
-#: ../../../../inc/themes/classic/customfields.inc:46
-#: ../../../../inc/themes/classic/install.inc:99
-#: ../../../../inc/themes/classic/ldap.inc:25
-#: ../../../../inc/themes/classic/ldap.inc:195
-#: ../../../../inc/themes/classic/mail.inc:14
-#: ../../../../inc/themes/classic/mail.inc:40
-#: ../../../../inc/themes/classic/mail.inc:88
-#: ../../../../inc/themes/classic/preferences.inc:48
-#: ../../../../inc/themes/classic/preferences.inc:82
-#: ../../../../inc/themes/classic/preferences.inc:99
-#: ../../../../inc/themes/classic/preferences.inc:116
-#: ../../../../inc/themes/classic/security.inc:26
-#: ../../../../inc/themes/classic/wiki.inc:20
+#: ../../../../js/strings.js.php:66
msgid "SI"
msgstr "OUI"
-#: ../../../../js/strings.js.php:68
-#: ../../../../inc/themes/classic/account.inc:136
-#: ../../../../inc/themes/classic/account.inc:167
-#: ../../../../inc/themes/classic/account.inc:456
-#: ../../../../inc/themes/classic/config.inc:70
-#: ../../../../inc/themes/classic/config.inc:86
-#: ../../../../inc/themes/classic/config.inc:102
-#: ../../../../inc/themes/classic/config.inc:118
-#: ../../../../inc/themes/classic/config.inc:134
-#: ../../../../inc/themes/classic/config.inc:150
-#: ../../../../inc/themes/classic/config.inc:166
-#: ../../../../inc/themes/classic/config.inc:182
-#: ../../../../inc/themes/classic/config.inc:255
-#: ../../../../inc/themes/classic/config.inc:274
-#: ../../../../inc/themes/classic/customfields.inc:46
-#: ../../../../inc/themes/classic/encryption.inc:58
-#: ../../../../inc/themes/classic/encryption.inc:77
-#: ../../../../inc/themes/classic/import.inc:67
-#: ../../../../inc/themes/classic/install.inc:99
-#: ../../../../inc/themes/classic/ldap.inc:25
-#: ../../../../inc/themes/classic/ldap.inc:195
-#: ../../../../inc/themes/classic/mail.inc:14
-#: ../../../../inc/themes/classic/mail.inc:40
-#: ../../../../inc/themes/classic/mail.inc:88
-#: ../../../../inc/themes/classic/preferences.inc:48
-#: ../../../../inc/themes/classic/preferences.inc:82
-#: ../../../../inc/themes/classic/preferences.inc:99
-#: ../../../../inc/themes/classic/preferences.inc:116
-#: ../../../../inc/themes/classic/security.inc:26
-#: ../../../../inc/themes/classic/tokens.inc:36
-#: ../../../../inc/themes/classic/wiki.inc:20
+#: ../../../../js/strings.js.php:67
msgid "NO"
msgstr "NON"
-#: ../../../../js/strings.js.php:69
+#: ../../../../js/strings.js.php:68
msgid "Aceptar"
msgstr "Accepter"
-#: ../../../../js/strings.js.php:70
+#: ../../../../js/strings.js.php:69
msgid "Cancelar"
msgstr "Annuler"
-#: ../../../../js/strings.js.php:71
+#: ../../../../js/strings.js.php:70
msgid "Clave Copiada al Portapapeles"
msgstr "Mot de passe copié dans le presse papier"
-#: ../../../../js/strings.js.php:72
+#: ../../../../js/strings.js.php:71
msgid "Error al copiar al portapapeles"
msgstr "Erreur lors de la copie dans le presse papier"
-#: ../../../../web/AccountC.class.php:386
-#: ../../../../web/AccountC.class.php:417
-#: ../../../../inc/themes/classic/search.inc:75
-#: ../../../../inc/themes/classic/search.inc:134
-#: ../../../../inc/themes/material-blue/search.inc:77
-#: ../../../../inc/themes/material-blue/search.inc:144
-msgid "Detalles de Cuenta"
-msgstr "Détails du Compte"
-
-#: ../../../../web/AccountC.class.php:474
-#: ../../../../inc/themes/classic/account.inc:403
-#: ../../../../inc/themes/material-blue/account.inc:444
-msgid "Modificar Clave de Cuenta"
-msgstr "Modifier Mot de passe de Compte"
-
-#: ../../../../web/AccountsMgmtC.class.php:80
-#: ../../../../web/AccountsMgmtC.class.php:139
-#: ../../../../web/AccountsMgmtC.class.php:267
-#: ../../../../web/SearchC.class.php:293
-#: ../../../../web/UsersMgmtC.class.php:88
-#: ../../../../web/UsersMgmtC.class.php:188
-#: ../../../../web/UsersMgmtC.class.php:246
-#: ../../../../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:73
-#: ../../../../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:75
-#: ../../../../inc/themes/material-blue/users.inc:8
-msgid "Nombre"
-msgstr "Nom"
-
-#: ../../../../web/AccountsMgmtC.class.php:116
-msgid "Gestión de Categorías"
-msgstr "Gestion des catégories"
-
-#: ../../../../web/AccountsMgmtC.class.php:173
-msgid "Gestión de Clientes"
-msgstr "Gestion des Clients"
-
-#: ../../../../web/AccountsMgmtC.class.php:267
-#: ../../../../inc/themes/classic/customfields.inc:27
-#: ../../../../inc/themes/material-blue/customfields.inc:30
-msgid "Módulo"
-msgstr "Module"
-
-#: ../../../../web/AccountsMgmtC.class.php:288
-msgid "Eliminar Campo"
-msgstr "Supprimer champ"
-
-#: ../../../../web/ConfigC.class.php:168
-msgid "Último backup"
-msgstr "Dernière sauvegarde"
-
-#: ../../../../web/ConfigC.class.php:168
-msgid "No se encontraron backups"
-msgstr "Il n'y a pas de sauvegarde disponible"
-
-#: ../../../../web/ConfigC.class.php:175
-msgid "Última exportación"
-msgstr "Dernier export"
-
-#: ../../../../web/ConfigC.class.php:175
-msgid "No se encontró archivo de exportación"
-msgstr "Aucun fichier d'export trouvé"
-
-#: ../../../../web/ConfigC.class.php:220
-msgid "Información"
-msgstr "Information"
-
-#: ../../../../web/EventlogC.class.php:95
-msgid "Registro de eventos vaciado"
-msgstr "Journal d'évènements nettoyé"
-
-#: ../../../../web/EventlogC.class.php:97
-msgid "Error al vaciar el registro de eventos"
-msgstr "Erreur pendant le nettoyage du journal d'évènements"
-
-#: ../../../../web/MainC.class.php:159
-#: ../../../../web/UsersMgmtC.class.php:101
-msgid "Admin Aplicación"
-msgstr "Admin Application"
-
-#: ../../../../web/MainC.class.php:177
-msgid "Buscar"
-msgstr "Chercher"
-
-#: ../../../../web/MainC.class.php:189
-msgid "Usuarios y Accesos"
-msgstr "Utilisateurs et Accès"
-
-#: ../../../../web/MainC.class.php:195
-msgid "Elementos y Personalización"
-msgstr "Eléments et personnalisation"
-
-#: ../../../../web/MainC.class.php:207
-#: ../../../../inc/themes/classic/eventlog.inc:2
-#: ../../../../inc/themes/material-blue/eventlog.inc:2
-msgid "Registro de Eventos"
-msgstr "Journal d'évènements"
-
-#: ../../../../web/MainC.class.php:228
-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:229
-msgid "Usuarios en múltiples grupos"
-msgstr "Les utilisateurs peuvent appartenir à plusieurs groupes"
-
-#: ../../../../web/MainC.class.php:230
-msgid "Previsualización de imágenes"
-msgstr "Prévisualisation d'images"
-
-#: ../../../../web/MainC.class.php:231
-msgid "Mostrar claves como imágenes"
-msgstr "Montrer les mots de passe comme images"
-
-#: ../../../../web/MainC.class.php:232
-msgid "Campos personalizados"
-msgstr "Champs personnalisés"
-
-#: ../../../../web/MainC.class.php:233
-msgid "API de consultas"
-msgstr "API de consultation"
-
-#: ../../../../web/MainC.class.php:234
-#: ../../../../inc/themes/classic/2fa.inc:9
-#: ../../../../inc/themes/material-blue/2fa.inc:7
-#: ../../../../inc/themes/material-blue/security.inc:11
-msgid "Autentificación en 2 pasos"
-msgstr "Authentification à deux facteurs"
-
-#: ../../../../web/MainC.class.php:235
-msgid "Complejidad de generador de claves"
-msgstr "Générateur de nombres aléatoires avec configuration de complexité"
-
-#: ../../../../web/MainC.class.php:236
-msgid "Consultas especiales"
-msgstr "Requêtes spécifiques"
-
-#: ../../../../web/MainC.class.php:237
-msgid "Exportación a XML"
-msgstr "Export XML"
-
-#: ../../../../web/MainC.class.php:238
-msgid "Clave maestra temporal"
-msgstr "Mot de passe maître temporaire"
-
-#: ../../../../web/MainC.class.php:239
-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:240
-msgid "Optimización del código y mayor rapidez de carga"
-msgstr "Un code optimisé et un chargement plus rapide"
-
-#: ../../../../web/MainC.class.php:241
-msgid "Mejoras de seguridad en XSS e inyección SQL"
-msgstr "Améliration de la sécurité afin de prévenir les injections XSS et SQL"
-
-#: ../../../../web/MainC.class.php:282
-msgid "La version de PHP es vulnerable al ataque NULL Byte (CVE-2006-7243)"
+#: ../../../../js/strings.js.php:73
+msgid "Recibir notificaciones?"
msgstr ""
-"Cette version de PHP est vulnerable aux attaques NULL Byte (CVE-2006-7243)"
-#: ../../../../web/MainC.class.php:283
-msgid "Actualice la versión de PHP para usar sysPass de forma segura"
+#: ../../../../js/strings.js.php:74
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:133
+msgid "Marcar Favorito"
msgstr ""
-"Mettez à jour votre version de PHP afin d'utiliser sysPass de manière "
-"sécurisée"
-#: ../../../../web/MainC.class.php:290
-msgid "No se encuentra el generador de números aleatorios."
-msgstr "Impossible de trouver le générateur de nombres aléatoires."
+#: ../../../../js/strings.js.php:75
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:123
+msgid "Eliminar Favorito"
+msgstr ""
-#: ../../../../web/MainC.class.php:291
+#: ../../../../js/strings.js.php:76
+msgid "Limpiar Selección"
+msgstr ""
+
+#: ../../../../js/strings.js.php:77
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:68
+msgid "Mostrar Favoritos"
+msgstr ""
+
+#: ../../../../js/strings.js.php:78
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:68
+msgid "Mostrar Todos"
+msgstr ""
+
+#: ../../../../js/strings.js.php:80
+msgid "Sin cambios"
+msgstr "Aucun changement"
+
+#: ../../../../js/strings.js.php:81
+msgid "Ahora"
+msgstr ""
+
+#: ../../../../js/strings.js.php:82
msgid ""
-"Sin esta función un atacante puede utilizar su cuenta al resetear la clave"
+"Este proceso importará los usuarios de LDAP detectados. Desea continuar?"
msgstr ""
-"Sans cette fonction, un attaquant pourrait prendre votre compte sur un "
-"changement de mot de passe"
-#: ../../../../web/MainC.class.php:310
-msgid "Instalación finalizada"
-msgstr "Installation terminée"
-
-#: ../../../../web/MainC.class.php:311
-msgid "Pulse aquí para acceder"
+#: ../../../../js/strings.js.php:83
+msgid "Esta acción restablecerá todos los datos del plugin. Desea continuar?"
msgstr ""
-"Pressez ici pour vous connecter"
-#: ../../../../web/MainC.class.php:408
-msgid "Descargar nueva versión"
-msgstr "Télécharger nouvelle version"
+#: ../../../../js/strings.js.php:84
+msgid "Este proceso puede durar algo de tiempo. Desea continuar?"
+msgstr ""
-#: ../../../../web/MainC.class.php:419
-msgid "Avisos de sysPass"
-msgstr "Notifications de sysPass"
-
-#: ../../../../web/SearchC.class.php:286
-msgid "Ordenar por Cliente"
-msgstr "Trié par Client"
-
-#: ../../../../web/SearchC.class.php:292
-msgid "Ordenar por Nombre"
-msgstr "Trié par Nom"
-
-#: ../../../../web/SearchC.class.php:298
-msgid "Ordenar por Categoría"
-msgstr "Trié par Catégorie"
-
-#: ../../../../web/SearchC.class.php:304
-msgid "Ordenar por Usuario"
-msgstr "Trié par Nom d'utilisateur"
-
-#: ../../../../web/SearchC.class.php:310
-msgid "Ordenar por URL / IP"
-msgstr "Trié par URL / IP"
-
-#: ../../../../web/SearchC.class.php:311
-#: ../../../../inc/themes/classic/account.inc:61
-#: ../../../../inc/themes/classic/editpass.inc:16
-#: ../../../../inc/themes/classic/request.inc:13
-#: ../../../../inc/themes/classic/search.inc:96
-#: ../../../../inc/themes/material-blue/account.inc:70
-#: ../../../../inc/themes/material-blue/editpass.inc:17
-#: ../../../../inc/themes/material-blue/request.inc:15
-#: ../../../../inc/themes/material-blue/search.inc:98
-msgid "URL / IP"
-msgstr "URL / IP"
-
-#: ../../../../web/UsersMgmtC.class.php:92
-msgid "Propiedades"
-msgstr "Propriétés"
-
-#: ../../../../web/UsersMgmtC.class.php:105
-msgid "Admin Cuentas"
-msgstr "Admin Comptes"
-
-#: ../../../../web/UsersMgmtC.class.php:113
-#: ../../../../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:130
-msgid "Ver Detalles de Usuario"
-msgstr "Voir détails du compte"
-
-#: ../../../../web/UsersMgmtC.class.php:144
-msgid "Cambiar Clave de Usuario"
-msgstr "Changer mot de passe utilisateur"
-
-#: ../../../../web/UsersMgmtC.class.php:164
-msgid "Gestión de Usuarios"
-msgstr "Gestion des Utilisateurs"
-
-#: ../../../../web/UsersMgmtC.class.php:223
-msgid "Gestión de Grupos"
-msgstr "Gestion des Groupes"
-
-#: ../../../../web/UsersMgmtC.class.php:261
-msgid "Ver Detalles de Perfil"
-msgstr "Voir les détails du profil"
-
-#: ../../../../web/UsersMgmtC.class.php:288
-msgid "Gestión de Perfiles"
-msgstr "Gestion des Profils"
-
-#: ../../../../web/UsersMgmtC.class.php:408
-msgid "Ver token de Autorización"
-msgstr "Voir le token d'autorisation"
-
-#: ../../../../web/UsersMgmtC.class.php:435
-msgid "Gestión de Autorizaciones API"
-msgstr "API de gestion des autorisations"
-
-#: ../../../../web/UsersMgmtC.class.php:457
-msgid "Token de autorización visualizado"
-msgstr "Token d'autorisation vu"
-
-#: ../../../../web/UsersMgmtC.class.php:458
-msgid "Autorizaciones"
-msgstr "Autorisations"
-
-#: ../../../../web/UsersPrefsC.class.php:93
-#: ../../../../inc/themes/classic/mail.inc:63
-#: ../../../../inc/themes/material-blue/mail.inc:86
-msgid "Seguridad"
-msgstr "Sécurité"
-
-#: ../../../../web/UsersPrefsC.class.php:118
-#: ../../../../inc/themes/classic/sessionbar.inc:9
-msgid "Preferencias"
-msgstr "Préférences"
-
-#: ../../../../inc/themes/classic/2fa.inc:14
-#: ../../../../inc/themes/material-blue/2fa.inc:12
-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:64
-#: ../../../../inc/themes/material-blue/account.inc:76
-msgid "URL o IP de acceso"
-msgstr "URL ou IP d'accès"
-
-#: ../../../../inc/themes/classic/account.inc:76
-#: ../../../../inc/themes/material-blue/account.inc:90
-msgid "Usuario de acceso"
-msgstr "Utilisateur d'accès"
-
-#: ../../../../inc/themes/classic/account.inc:93
-#: ../../../../inc/themes/classic/editpass.inc:31
-#: ../../../../inc/themes/classic/passreset.inc:35
-#: ../../../../inc/themes/classic/users.inc:83
-#: ../../../../inc/themes/classic/userspass.inc:19
-#: ../../../../inc/themes/classic/userspass.inc:21
-#: ../../../../inc/themes/material-blue/account.inc:109
-#: ../../../../inc/themes/material-blue/editpass.inc:36
-#: ../../../../inc/themes/material-blue/install.inc:67
-#: ../../../../inc/themes/material-blue/passreset.inc:36
-#: ../../../../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
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:67
+#: ../../../../inc/themes/material-blue/views/account/account.inc:135
+#: ../../../../inc/themes/material-blue/views/account/account.inc:142
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:115
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:122
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:47
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:54
+#: ../../../../inc/themes/material-blue/views/main/install.inc:62
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:42
msgid "Clave (repetir)"
msgstr "Mot de passe (répéter)"
-#: ../../../../inc/themes/classic/account.inc:100
-#: ../../../../inc/themes/classic/search.inc:112
-#: ../../../../inc/themes/classic/users.inc:91
-#: ../../../../inc/themes/material-blue/account.inc:120
-#: ../../../../inc/themes/material-blue/search.inc:118
-#: ../../../../inc/themes/material-blue/users.inc:116
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:78
+#: ../../../../inc/themes/material-blue/views/account/account.inc:149
+#: ../../../../inc/themes/material-blue/views/account/details.inc:131
+#: ../../../../inc/themes/material-blue/views/account/details.inc:133
+msgid "Fecha Caducidad Clave"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:88
+#: ../../../../inc/themes/material-blue/views/account/account.inc:160
+msgid "Seleccionar Fecha"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:102
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:25
+#: ../../../../inc/themes/material-blue/views/account/request.inc:58
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:297
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:167
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:274
+#: ../../../../inc/themes/material-blue/views/config/general.inc:29
+#: ../../../../inc/themes/material-blue/views/config/import.inc:89
+#: ../../../../inc/themes/material-blue/views/config/info.inc:128
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:283
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:150
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:276
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:137
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:172
+msgid "Atrás"
+msgstr "Retour"
+
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:65
+#: ../../../../inc/themes/material-blue/views/account/account.inc:165
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:140
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:129
msgid "Notas"
msgstr "Notes"
-#: ../../../../inc/themes/classic/account.inc:102
-#: ../../../../inc/themes/material-blue/account.inc:125
-#: ../../../../inc/themes/material-blue/users.inc:123
-msgid "Notas sobre la cuenta"
-msgstr "Notes sur le compte"
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:9
+msgid "Accesos"
+msgstr ""
-#: ../../../../inc/themes/classic/account.inc:108
-#: ../../../../inc/themes/material-blue/account.inc:134
-#: ../../../../inc/themes/material-blue/search.inc:111
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:20
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:104
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:117
msgid "Permisos"
msgstr "Permissions"
-#: ../../../../inc/themes/classic/account.inc:135
-#: ../../../../inc/themes/classic/account.inc:166
-#: ../../../../inc/themes/material-blue/account.inc:163
-#: ../../../../inc/themes/material-blue/account.inc:195
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:26
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:50
+msgid "Seleccionar Usuarios"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:40
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:62
msgid "Hablitar edición"
msgstr "Activer l'Edition"
-#: ../../../../inc/themes/classic/account.inc:201
-#: ../../../../inc/themes/material-blue/account.inc:245
-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/material-blue/views/account/account-permissions.inc:48
+msgid "Seleccionar Grupos"
+msgstr ""
-#: ../../../../inc/themes/classic/account.inc:201
-#: ../../../../inc/themes/classic/config.inc:212
-#: ../../../../inc/themes/material-blue/account.inc:245
-#: ../../../../inc/themes/material-blue/config.inc:328
-msgid "Tamaño máximo de archivo"
-msgstr "Taille maximale de fichier"
-
-#: ../../../../inc/themes/classic/account.inc:223
-#: ../../../../inc/themes/material-blue/account.inc:267
-msgid "Historial"
-msgstr "Historique"
-
-#: ../../../../inc/themes/classic/account.inc:242
-#: ../../../../inc/themes/material-blue/account.inc:287
-msgid "Seleccionar fecha"
-msgstr "Sélectionner date"
-
-#: ../../../../inc/themes/classic/account.inc:251
-#: ../../../../inc/themes/classic/users.inc:164
-#: ../../../../inc/themes/material-blue/account.inc:296
-#: ../../../../inc/themes/material-blue/users.inc:208
-msgid "Última Modificación"
-msgstr "Dernière modification"
-
-#: ../../../../inc/themes/classic/account.inc:253
-#: ../../../../inc/themes/material-blue/account.inc:298
-msgid "por"
-msgstr "par"
-
-#: ../../../../inc/themes/classic/account.inc:296
-#: ../../../../inc/themes/material-blue/account.inc:347
-msgid "Visitas"
-msgstr "Visites"
-
-#: ../../../../inc/themes/classic/account.inc:300
-#: ../../../../inc/themes/material-blue/account.inc:351
-msgid "Fecha Alta"
-msgstr "Date Ajoutée"
-
-#: ../../../../inc/themes/classic/account.inc:304
-#: ../../../../inc/themes/material-blue/account.inc:355
-msgid "Creador"
-msgstr "Créateur"
-
-#: ../../../../inc/themes/classic/account.inc:308
-#: ../../../../inc/themes/material-blue/account.inc:204
-#: ../../../../inc/themes/material-blue/account.inc:359
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:72
+#: ../../../../inc/themes/material-blue/views/account/details.inc:52
+#: ../../../../inc/themes/material-blue/views/account/details.inc:54
msgid "Grupo Principal"
msgstr "Groupe Principal"
-#: ../../../../inc/themes/classic/account.inc:313
-#: ../../../../inc/themes/material-blue/account.inc:364
-msgid "Usuarios Secundarios"
-msgstr "Utilisateur Secondaires"
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:87
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:111
+msgid "Cuenta Privada"
+msgstr ""
-#: ../../../../inc/themes/classic/account.inc:332
-#: ../../../../inc/themes/material-blue/account.inc:383
-msgid "Grupos Secundarios"
-msgstr "Groupes Secondaires"
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:92
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:103
+msgid "Privada"
+msgstr ""
-#: ../../../../inc/themes/classic/account.inc:352
-#: ../../../../inc/themes/material-blue/account.inc:403
-msgid "Fecha Edición"
-msgstr "Date Modifiée"
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:100
+msgid "Cuenta Privada Grupo"
+msgstr ""
-#: ../../../../inc/themes/classic/account.inc:356
-#: ../../../../inc/themes/material-blue/account.inc:407
-msgid "Editor"
-msgstr "Editeur"
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:105
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:110
+msgid "Privada Grupo"
+msgstr ""
-#: ../../../../inc/themes/classic/account.inc:383
-#: ../../../../inc/themes/material-blue/account.inc:470
-msgid "Restaurar cuenta desde este punto"
-msgstr "Restaurer les comptes à partir de ce point"
+#: ../../../../inc/themes/material-blue/views/account/account.inc:11
+msgid "Histórico"
+msgstr "Historique"
-#: ../../../../inc/themes/classic/account.inc:395
-#: ../../../../inc/themes/classic/search.inc:143
-#: ../../../../inc/themes/material-blue/account.inc:437
-#: ../../../../inc/themes/material-blue/search.inc:154
-msgid "Copiar Clave en Portapapeles"
-msgstr "Copier le mot de passe dans le presse papier"
+#: ../../../../inc/themes/material-blue/views/account/account.inc:182
+msgid "Seleccionar Etiquetas"
+msgstr ""
-#: ../../../../inc/themes/classic/account.inc:410
-#: ../../../../inc/themes/material-blue/account.inc:450
+#: ../../../../inc/themes/material-blue/views/account/account.inc:193
+#: ../../../../inc/themes/material-blue/views/account/account.inc:195
+#: ../../../../inc/themes/material-blue/views/account/viewpass.inc:9
+msgid "Cuenta Vinculada"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:203
+msgid "Seleccionar Cuenta"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:210
+#: ../../../../inc/themes/material-blue/views/account/account.inc:212
+msgid "Historial"
+msgstr "Historique"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:217
+msgid "Seleccionar fecha"
+msgstr "Sélectionner date"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:229
+#: ../../../../inc/themes/material-blue/views/account/details.inc:35
+#: ../../../../inc/themes/material-blue/views/account/details.inc:37
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:199
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:201
+msgid "Última Modificación"
+msgstr "Dernière modification"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:236
+#: ../../../../inc/themes/material-blue/views/account/account.inc:238
+#: ../../../../inc/themes/material-blue/views/account/account.inc:241
+msgid "Enlace Público"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:17
msgid "Ver Actual"
msgstr "Voir Actuel"
-#: ../../../../inc/themes/classic/account.inc:415
-#: ../../../../inc/themes/classic/editpass.inc:45
-#: ../../../../inc/themes/classic/mgmttabs.inc:4
-#: ../../../../inc/themes/classic/passreset.inc:46
-#: ../../../../inc/themes/material-blue/passreset.inc:48
-msgid "Volver"
-msgstr "Retour"
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:54
+msgid "Crear Enlace Público"
+msgstr ""
-#: ../../../../inc/themes/classic/account.inc:422
-#: ../../../../inc/themes/classic/search.inc:155
-#: ../../../../inc/themes/material-blue/account.inc:460
-#: ../../../../inc/themes/material-blue/search.inc:166
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:130
msgid "Modificar Cuenta"
msgstr "Modifier Compte"
-#: ../../../../inc/themes/classic/account.inc:427
-#: ../../../../inc/themes/classic/search.inc:176
-#: ../../../../inc/themes/material-blue/account.inc:464
-#: ../../../../inc/themes/material-blue/search.inc:187
-msgid "Solicitar Modificación"
-msgstr "Demande Modification"
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:152
+msgid "Restaurar cuenta desde este punto"
+msgstr "Restaurer les comptes à partir de ce point"
-#: ../../../../inc/themes/classic/account.inc:434
-#: ../../../../inc/themes/classic/categories.inc:62
-#: ../../../../inc/themes/classic/config.inc:294
-#: ../../../../inc/themes/classic/customers.inc:62
-#: ../../../../inc/themes/classic/customfields.inc:63
-#: ../../../../inc/themes/classic/editpass.inc:50
-#: ../../../../inc/themes/classic/encryption.inc:99
-#: ../../../../inc/themes/classic/groups.inc:77
-#: ../../../../inc/themes/classic/ldap.inc:229
-#: ../../../../inc/themes/classic/mail.inc:107
-#: ../../../../inc/themes/classic/preferences.inc:130
-#: ../../../../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:476
-#: ../../../../inc/themes/material-blue/categories.inc:72
-#: ../../../../inc/themes/material-blue/config.inc:444
-#: ../../../../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/preferences.inc:134
-#: ../../../../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:444
-#: ../../../../inc/themes/material-blue/account.inc:486
-msgid "Seleccionar grupos secundarios"
-msgstr "Sélectionner les groupes secondaires"
-
-#: ../../../../inc/themes/classic/account.inc:448
-#: ../../../../inc/themes/material-blue/account.inc:489
-msgid "Seleccionar usuarios"
-msgstr "Sélectionner utilisateurs"
-
-#: ../../../../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:90
-#: ../../../../inc/themes/classic/encryption.inc:94
-#: ../../../../inc/themes/classic/encryption.inc:159
-#: ../../../../inc/themes/classic/encryption.inc:163
-#: ../../../../inc/themes/classic/import.inc:12
-#: ../../../../inc/themes/classic/import.inc:34
-#: ../../../../inc/themes/classic/import.inc:48
-#: ../../../../inc/themes/classic/import.inc:94
-#: ../../../../inc/themes/classic/import.inc:115
-#: ../../../../inc/themes/classic/import.inc:168
-#: ../../../../inc/themes/classic/import.inc:172
-#: ../../../../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:104
-#: ../../../../inc/themes/material-blue/encryption.inc:108
-#: ../../../../inc/themes/material-blue/encryption.inc:178
-#: ../../../../inc/themes/material-blue/encryption.inc:182
-#: ../../../../inc/themes/material-blue/import.inc:97
-#: ../../../../inc/themes/material-blue/import.inc:101
-#: ../../../../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."
+#: ../../../../inc/themes/material-blue/views/account/details.inc:8
+msgid "Detalles"
msgstr ""
-"La copie de sécurité permet de sauvegarder et télécharger indépendamment la "
-"base de données sysPass et les fichiers de l'application ainsi que la "
-"configuration"
-#: ../../../../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."
+#: ../../../../inc/themes/material-blue/views/account/details.inc:26
+#: ../../../../inc/themes/material-blue/views/account/details.inc:28
+msgid "Fecha Alta"
+msgstr "Date Ajoutée"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:44
+#: ../../../../inc/themes/material-blue/views/account/details.inc:46
+msgid "Creador"
+msgstr "Créateur"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:61
+#: ../../../../inc/themes/material-blue/views/account/details.inc:63
+msgid "Usuarios Secundarios"
+msgstr "Utilisateur Secondaires"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:83
+#: ../../../../inc/themes/material-blue/views/account/details.inc:85
+msgid "Grupos Secundarios"
+msgstr "Groupes Secondaires"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:106
+#: ../../../../inc/themes/material-blue/views/account/details.inc:108
+msgid "Fecha Edición"
+msgstr "Date Modifiée"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:114
+#: ../../../../inc/themes/material-blue/views/account/details.inc:116
+msgid "Editor"
+msgstr "Editeur"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:123
+#: ../../../../inc/themes/material-blue/views/account/details.inc:125
+msgid "Fecha de Clave"
msgstr ""
-"Avec cette méthode, il est possible de sauvegarder toutes les données de "
-"sysPass sur un autre emplacement ou de l'utiliser pour en faire une "
-"application portable"
-#: ../../../../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/material-blue/views/account/files.inc:37
+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/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."
+#: ../../../../inc/themes/material-blue/views/account/files.inc:37
+#, php-format
+msgid "Tamaño máximo de archivo: %d MB"
msgstr ""
-"L'exportation des comptes permet de sauvegarder ces derniers ainsi que leurs "
-"données au format XML afin de les importer dans une autre instance sysPass"
-#: ../../../../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."
+#: ../../../../inc/themes/material-blue/views/account/linkedAccounts.inc:3
+msgid "Cuentas Vinculadas"
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."
+#: ../../../../inc/themes/material-blue/views/account/request.inc:4
+msgid "Solicitar Modificación de Cuenta"
+msgstr "Demander modification de Compte"
+
+#: ../../../../inc/themes/material-blue/views/account/request.inc:36
+msgid "Petición"
+msgstr "Demande"
+
+#: ../../../../inc/themes/material-blue/views/account/request.inc:42
+msgid "Descripción de la petición"
+msgstr "Description de la demande"
+
+#: ../../../../inc/themes/material-blue/views/account/request.inc:65
+msgid "Enviar"
+msgstr "Envoyer"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/index.inc:11
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:11
+msgid "No se encontraron registros"
+msgstr "Aucun enregistrement trouvé"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:24
+msgid "Buscar en Wiki"
+msgstr "Chercher dans Wiki"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:71
+msgid "Abrir enlace a"
+msgstr "Ouvrir le lien vers"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:95
+msgid "Clave Caducada"
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-start.inc:4
-#: ../../../../inc/themes/material-blue/body-start.inc:4
-msgid "Javascript es necesario para el correcto funcionamiento"
-msgstr "Javascript est requis pour fonctionner correctement"
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:149
+msgid "Archivos adjuntos"
+msgstr "Fichiers joints"
-#: ../../../../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/material-blue/views/accountsearch/rows.inc:159
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:170
+msgid "Enlace a Wiki"
+msgstr "Lien vers Wiki"
-#: ../../../../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/classic/preferences.inc:4
-#: ../../../../inc/themes/material-blue/config.inc:4
-#: ../../../../inc/themes/material-blue/preferences.inc:4
-msgid "Sitio"
-msgstr "Site"
-
-#: ../../../../inc/themes/classic/config.inc:11
-#: ../../../../inc/themes/classic/preferences.inc:12
-#: ../../../../inc/themes/material-blue/config.inc:12
-#: ../../../../inc/themes/material-blue/preferences.inc:12
-msgid "Idioma"
-msgstr "Langage"
-
-#: ../../../../inc/themes/classic/config.inc:15
-#: ../../../../inc/themes/material-blue/config.inc:16
-msgid ""
-"Establece el idioma global de la aplicación. Es posible establecer un idioma "
-"por usuario en las preferencias."
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:162
+msgid "Ver en Wiki"
msgstr ""
-"Défini la langue globale de l'application. Vous pouvez également définir la "
-"langue dans les préférences utilisateurs."
-#: ../../../../inc/themes/classic/config.inc:18
-#: ../../../../inc/themes/material-blue/config.inc:19
-msgid ""
-"Para mejorar/añadir las traducciones, puede colaborar en http:://translate."
-"syspass.org"
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:22
+msgid "Parámetros especiales:"
+msgstr "Paramètres spéciaux"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:25
+msgid "Buscar cuentas a las que 'login' tenga acceso"
+msgstr "Rechercher les comptes pour lesquels le 'login' a les droits d'accès"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:26
+#, fuzzy
+msgid "Devolver las cuentas en las que 'login' es propietario"
+msgstr "Rechercher les comptes pour lesquels le 'login' a les droits d'accès"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:27
+msgid "Buscar cuentas a las que 'group_name' tenga acceso"
msgstr ""
-"Afin d'améliorer/ajouter les traductions, vous pouvez vous investir sur "
-"http://translate.syspass.org"
+"Rechercher les comptes pour lesquels le 'group_name' a les droits d'accès"
-#: ../../../../inc/themes/classic/config.inc:33
-#: ../../../../inc/themes/classic/preferences.inc:24
-#: ../../../../inc/themes/material-blue/config.inc:34
-#: ../../../../inc/themes/material-blue/preferences.inc:23
-msgid "Tema Visual"
-msgstr "Thème Visuel"
-
-#: ../../../../inc/themes/classic/config.inc:37
-#: ../../../../inc/themes/material-blue/config.inc:38
-msgid ""
-"Establece el tema visual global de la aplicación. Es posible establecer un "
-"tema visual por usuario en las preferencias."
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:28
+msgid "Devolver las cuentas con grupo principal 'group_name'"
msgstr ""
-"Défini le thème visuel global de l'application. Vous pouvez définir le thème "
-"par utilisateur dans les préférences utilisateur."
-#: ../../../../inc/themes/classic/config.inc:52
-#: ../../../../inc/themes/material-blue/config.inc:53
-#: ../../../../inc/themes/material-blue/config.inc:61
-msgid "Timeout de sesión (s)"
-msgstr "Timeout de session (s)"
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:29
+msgid "Buscar cuentas con archivos con el nombre 'file_name'"
+msgstr "Rechercher les comptes qui contiennet un archive du nom 'file_name'"
-#: ../../../../inc/themes/classic/config.inc:61
-#: ../../../../inc/themes/material-blue/config.inc:85
-msgid "Habilitar log de eventos"
-msgstr "Active le journal des évènements"
-
-#: ../../../../inc/themes/classic/config.inc:65
-#: ../../../../inc/themes/material-blue/config.inc:89
-msgid "Guarda las acciones realizadas en la aplicación."
-msgstr "Sauvegarde les actions effectuées par l'application."
-
-#: ../../../../inc/themes/classic/config.inc:77
-#: ../../../../inc/themes/material-blue/config.inc:103
-msgid "Habilitar depuración"
-msgstr "Activer le mode debug"
-
-#: ../../../../inc/themes/classic/config.inc:81
-#: ../../../../inc/themes/material-blue/config.inc:107
-msgid ""
-"Muestra información relativa a la configuración de la aplicación y "
-"rendimiento."
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:30
+msgid "Buscar cuentas con la clave caducada"
msgstr ""
-"Afficher des informations sur la configuration de l'application et sur la "
-"performance."
-#: ../../../../inc/themes/classic/config.inc:93
-#: ../../../../inc/themes/material-blue/config.inc:121
-msgid "Modo mantenimiento"
-msgstr "Mode maintenance"
-
-#: ../../../../inc/themes/classic/config.inc:97
-#: ../../../../inc/themes/material-blue/config.inc:125
-msgid ""
-"En este modo no se puede acceder a la aplicación. Para deshabilitarlo es "
-"necesario modificar el archivo de configuración."
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:31
+msgid "Devolver las cuentas privadas del usuario actual"
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:109
-#: ../../../../inc/themes/material-blue/config.inc:139
-msgid "Comprobar actualizaciones"
-msgstr "Vérifier les mises à jour"
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:39
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:43
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:124
+msgid "Búsqueda global"
+msgstr "Recherche globale"
-#: ../../../../inc/themes/classic/config.inc:113
-#: ../../../../inc/themes/material-blue/config.inc:143
-msgid ""
-"Comprobar actualizaciones de la aplicación (sólo para los usuarios "
-"administradores)."
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:71
+msgid "Filtrar Favoritos"
msgstr ""
-"Vérifier les mises à jour d'application (uniquement pour les "
-"administrateurs)."
-#: ../../../../inc/themes/classic/config.inc:125
-#: ../../../../inc/themes/material-blue/config.inc:157
-msgid "Comprobar notificaciones"
-msgstr "Vérifier les notifications"
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:85
+msgid "Cuentas por página"
+msgstr "Comptes par page"
-#: ../../../../inc/themes/classic/config.inc:129
-#: ../../../../inc/themes/material-blue/config.inc:161
-msgid ""
-"Comprobar si existen notificaciones de seguridad o avisos de sysPass (sólo "
-"para los usuarios administradores)."
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:91
+msgid "Más Filtros"
msgstr ""
-"Vérifier s'il existe des notifications ou alertes de sécurité syspass "
-"(uniquement pour les administrateurs)."
-#: ../../../../inc/themes/classic/config.inc:141
-#: ../../../../inc/themes/classic/preferences.inc:38
-#: ../../../../inc/themes/material-blue/config.inc:182
-#: ../../../../inc/themes/material-blue/preferences.inc:36
-msgid "Nombre de cuenta como enlace"
-msgstr "Nom de compte comme lien"
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:96
+msgid "Seleccionar Etiqueta"
+msgstr ""
-#: ../../../../inc/themes/classic/config.inc:145
-#: ../../../../inc/themes/classic/preferences.inc:43
-#: ../../../../inc/themes/material-blue/config.inc:186
-#: ../../../../inc/themes/material-blue/preferences.inc:40
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:12
+msgid "Búsqueda"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:18
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:47
+msgid "Resultados por página"
+msgstr "Resultats par page"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:23
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:52
+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/material-blue/views/config/accounts.inc:34
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:63
+msgid "Número de resultados por página"
+msgstr "Résultats par page"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:44
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:73
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 vers les détails du compte"
-#: ../../../../inc/themes/classic/config.inc:157
-#: ../../../../inc/themes/material-blue/config.inc:286
-msgid "Gestión de archivos"
-msgstr "Gestion des fichiers"
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:53
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:82
+msgid "Nombre de cuenta como enlace"
+msgstr "Nom de compte comme lien"
-#: ../../../../inc/themes/classic/config.inc:161
-#: ../../../../inc/themes/material-blue/config.inc:290
-msgid "Habilita la subida/descarga de archivos para las cuentas."
-msgstr "Active le chargement/téléchargement des fichiers de comptes"
-
-#: ../../../../inc/themes/classic/config.inc:173
-#: ../../../../inc/themes/material-blue/config.inc:200
-msgid "Búsquedas globales"
-msgstr "Recherches globales"
-
-#: ../../../../inc/themes/classic/config.inc:177
-#: ../../../../inc/themes/material-blue/config.inc:204
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:63
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."
@@ -3596,23 +4486,102 @@ msgstr ""
"comptes, S'ils n'ont pas la permission ils ne peuvent pas voir les détails "
"des comptes."
-#: ../../../../inc/themes/classic/config.inc:189
-#: ../../../../inc/themes/material-blue/config.inc:305
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:72
+msgid "Búsquedas globales"
+msgstr "Recherches globales"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:82
+msgid "Generar una imagen con el texto de la clave de la cuenta."
+msgstr "Génère une image avec le texte du mot de passe du compte."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:86
+msgid "Util para entornos donde copiar la clave supone un riesgo de seguridad."
+msgstr ""
+"Utile pour les environnements où copier le mot de passe dans le presse "
+"papier est un risque pour la sécurité."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:96
+msgid "Imagen para mostrar clave"
+msgstr "Image pour visualiser le mot de passe"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:106
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:146
+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/material-blue/views/config/accounts.inc:116
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:155
+msgid "Resultados en Tarjetas"
+msgstr "Résultats format cartes"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:123
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:189
+msgid "Enlaces Públicos"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:133
+msgid ""
+"Habilita la posibilidad de generar enlaces públicos para ver los detalles de "
+"una cuenta."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:137
+msgid ""
+"Las cuentas enlazadas serán visibles por cualquiera que disponga del enlace."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:141
+msgid ""
+"Para crear enlaces, los usuarios tienen que tener activada la opción en su "
+"perfl."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:151
+msgid "Habilitar Enlaces Públicos"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:157
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:166
+msgid "Tiempo de caducidad"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:172
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:181
+msgid "Número máximo de visitas"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:191
+msgid "La clave de la cuenta es visualizada como una imagen."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:201
+msgid "Usar imagen para clave"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:218
+msgid "Habilita la subida/descarga de archivos para las cuentas."
+msgstr "Active le chargement/téléchargement des fichiers de comptes"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:228
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:203
+msgid "Gestión de archivos"
+msgstr "Gestion des fichiers"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:234
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:252
msgid "Extensiones de archivos permitidas"
msgstr "Extensions de fichiers permises"
-#: ../../../../inc/themes/classic/config.inc:193
-#: ../../../../inc/themes/material-blue/config.inc:309
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:239
+#, fuzzy
msgid "Extensiones permitidas para la subida de archivos."
msgstr "Extensions de fichiers autorisées au chargement."
-#: ../../../../inc/themes/classic/config.inc:197
-#: ../../../../inc/themes/material-blue/config.inc:313
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:243
msgid "Se permite un máximo de 4 caracteres."
msgstr "4 caractères maximum autorisés."
-#: ../../../../inc/themes/classic/config.inc:201
-#: ../../../../inc/themes/material-blue/config.inc:317
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:247
msgid ""
"Escribir extensión y pulsar intro para añadir. Es necesario guardar la "
"configuración."
@@ -3620,166 +4589,171 @@ msgstr ""
"Ecrire l'extension et appuyez sur Entrée pour ajouter. Vous devez "
"sauvegarder la configuration."
-#: ../../../../inc/themes/classic/config.inc:216
-#: ../../../../inc/themes/material-blue/config.inc:332
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:260
+msgid "Tamaño máximo de archivo"
+msgstr "Taille maximale de fichier"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:265
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:220
-#: ../../../../inc/themes/material-blue/config.inc:336
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:269
msgid "El máximo absuluto es de 16MB."
msgstr "Le grand maximum est 16MB "
-#: ../../../../inc/themes/classic/config.inc:231
-#: ../../../../inc/themes/classic/preferences.inc:56
-#: ../../../../inc/themes/material-blue/config.inc:218
-#: ../../../../inc/themes/material-blue/preferences.inc:54
-msgid "Resultados por página"
-msgstr "Resultats par page"
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:280
+msgid "Tamaño máximo de archivo en bytes"
+msgstr "Taille maximum du fichier en \"bytes\""
-#: ../../../../inc/themes/classic/config.inc:235
-#: ../../../../inc/themes/classic/preferences.inc:61
-#: ../../../../inc/themes/material-blue/config.inc:222
-#: ../../../../inc/themes/material-blue/preferences.inc:58
-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/material-blue/views/config/backup.inc:13
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:16
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:98
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:101
+msgid "Resultado"
+msgstr "Resultat"
-#: ../../../../inc/themes/classic/config.inc:246
-#: ../../../../inc/themes/material-blue/config.inc:260
-msgid "Resultados en Tarjetas"
-msgstr "Résultats format cartes"
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:24
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:27
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:109
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:112
+msgid "Descargar Actual"
+msgstr "Télécharger l'élément actuel"
-#: ../../../../inc/themes/classic/config.inc:250
-#: ../../../../inc/themes/material-blue/config.inc:264
-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:262
-#: ../../../../inc/themes/material-blue/config.inc:238
-msgid "Imagen para mostrar clave"
-msgstr "Image pour visualiser le mot de passe"
-
-#: ../../../../inc/themes/classic/config.inc:266
-#: ../../../../inc/themes/material-blue/config.inc:242
-msgid "Generar una imagen con el texto de la clave de la cuenta."
-msgstr "Génère une image avec le texte du mot de passe du compte."
-
-#: ../../../../inc/themes/classic/config.inc:269
-#: ../../../../inc/themes/material-blue/config.inc:245
-msgid "Util para entornos donde copiar la clave supone un riesgo de seguridad."
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:33
+msgid "Copia BBDD"
msgstr ""
-"Utile pour les environnements où copier le mot de passe dans le presse "
-"papier est un risque pour la sécurité."
-#: ../../../../inc/themes/classic/config.inc:304
-#: ../../../../inc/themes/material-blue/config.inc:454
-msgid "Añadir extensión"
-msgstr "Ajouter extension"
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:40
+msgid "Copia sysPass"
+msgstr ""
-#: ../../../../inc/themes/classic/config.inc:305
-#: ../../../../inc/themes/material-blue/config.inc:455
-msgid "Eliminar extensión"
-msgstr "Supprimer extension"
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:43
+#, fuzzy
+msgid "No hay backups para descargar"
+msgstr "Il n'y a pas de sauvegarde à télécharger"
-#: ../../../../inc/themes/classic/customers.inc:10
-#: ../../../../inc/themes/material-blue/customers.inc:14
-msgid "Nombre del cliente"
-msgstr "Nom du client"
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:71
+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 ""
+"La copie de sécurité permet de sauvegarder et télécharger indépendamment la "
+"base de données sysPass et les fichiers de l'application ainsi que la "
+"configuration"
-#: ../../../../inc/themes/classic/customers.inc:18
-#: ../../../../inc/themes/material-blue/customers.inc:26
-msgid "Descripción del cliente"
-msgstr "Description du client"
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:73
+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 ""
+"Avec cette méthode, il est possible de sauvegarder toutes les données de "
+"sysPass sur un autre emplacement ou de l'utiliser pour en faire une "
+"application portable"
-#: ../../../../inc/themes/classic/customfields.inc:38
-#: ../../../../inc/themes/material-blue/customfields.inc:41
-msgid "Texto Ayuda"
-msgstr "Notice d'aide"
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:88
+msgid "Exportar Cuentas"
+msgstr "Exporter les comptes"
-#: ../../../../inc/themes/classic/customfields.inc:44
-#: ../../../../inc/themes/material-blue/customfields.inc:52
-msgid "Obligatorio"
-msgstr "Requis"
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:122
+#, fuzzy
+msgid "No hay archivos XML para descargar"
+msgstr "Il n'y a aucun fichier à télécharger"
-#: ../../../../inc/themes/classic/encryption.inc:5
-#: ../../../../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:5
-#: ../../../../inc/themes/material-blue/install.inc:52
-#: ../../../../inc/themes/material-blue/install.inc:59
-#: ../../../../inc/themes/material-blue/login.inc:26
-#: ../../../../inc/themes/material-blue/login.inc:49
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:129
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:137
+msgid "Clave de Exportación"
+msgstr "Exporter le mot de passe"
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:143
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:151
+msgid "Clave de Exportación (repetir)"
+msgstr "Exporter le mot de passe (confirmer)"
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:180
+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 ""
+"L'exportation des comptes permet de sauvegarder ces derniers ainsi que leurs "
+"données au format XML afin de les importer dans une autre instance sysPass"
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:182
+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/material-blue/views/config/backup.inc:184
+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/material-blue/views/config/backup.inc:186
+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/material-blue/views/config/encryption.inc:8
+#: ../../../../inc/themes/material-blue/views/config/import.inc:148
+#: ../../../../inc/themes/material-blue/views/config/import.inc:163
+#: ../../../../inc/themes/material-blue/views/main/install.inc:48
+#: ../../../../inc/themes/material-blue/views/main/install.inc:54
+#: ../../../../inc/themes/material-blue/views/main/login.inc:49
+#: ../../../../inc/themes/material-blue/views/main/login.inc:89
msgid "Clave Maestra"
msgstr "Mot de passe Maître"
-#: ../../../../inc/themes/classic/encryption.inc:13
-#: ../../../../inc/themes/classic/encryption.inc:113
-#: ../../../../inc/themes/material-blue/encryption.inc:13
-#: ../../../../inc/themes/material-blue/encryption.inc:128
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:18
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:21
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:167
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:170
msgid "Último cambio"
msgstr "Dernier changement"
-#: ../../../../inc/themes/classic/encryption.inc:22
-#: ../../../../inc/themes/material-blue/encryption.inc:22
-#: ../../../../inc/themes/material-blue/encryption.inc:28
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:29
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:37
msgid "Clave Maestra actual"
msgstr "Mot de passe Maître actuel"
-#: ../../../../inc/themes/classic/encryption.inc:31
-#: ../../../../inc/themes/material-blue/encryption.inc:34
-#: ../../../../inc/themes/material-blue/encryption.inc:40
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:43
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:51
msgid "Nueva Clave Maestra"
msgstr "Nouveau Mot de passe Maître"
-#: ../../../../inc/themes/classic/encryption.inc:40
-#: ../../../../inc/themes/material-blue/encryption.inc:46
-#: ../../../../inc/themes/material-blue/encryption.inc:52
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:57
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:65
msgid "Nueva Clave Maestra (repetir)"
msgstr "Nouveau Mot de passe Maître (répéter)"
-#: ../../../../inc/themes/classic/encryption.inc:48
-#: ../../../../inc/themes/material-blue/encryption.inc:58
-msgid "No modificar cuentas"
-msgstr "Ne pas modifier les comptes"
-
-#: ../../../../inc/themes/classic/encryption.inc:53
-#: ../../../../inc/themes/material-blue/encryption.inc:63
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:75
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:64
-#: ../../../../inc/themes/material-blue/encryption.inc:76
-msgid "Confirmar cambio"
-msgstr "Confirmer changement"
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:83
+msgid "No modificar cuentas"
+msgstr "Ne pas modifier les comptes"
-#: ../../../../inc/themes/classic/encryption.inc:67
-#: ../../../../inc/themes/classic/encryption.inc:70
-#: ../../../../inc/themes/classic/encryption.inc:73
-#: ../../../../inc/themes/classic/import.inc:64
-#: ../../../../inc/themes/classic/security.inc:43
-msgid "Atención"
-msgstr "Attention"
-
-#: ../../../../inc/themes/classic/encryption.inc:68
-#: ../../../../inc/themes/material-blue/encryption.inc:80
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:92
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:71
-#: ../../../../inc/themes/material-blue/encryption.inc:83
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:96
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:74
-#: ../../../../inc/themes/material-blue/encryption.inc:86
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:100
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:95
-#: ../../../../inc/themes/material-blue/encryption.inc:109
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:106
+msgid "Confirmar cambio"
+msgstr "Confirmer changement"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:128
msgid ""
"La clave maestra es utilizada para encriptar las claves de las cuentas de "
"sysPass para mantenerlas seguras."
@@ -3787,8 +4761,7 @@ 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:97
-#: ../../../../inc/themes/material-blue/encryption.inc:111
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:130
msgid ""
"Es recomendable cambiarla cada cierto tiempo y utilizar una clave compleja "
"que incluya números, letras y símbolos."
@@ -3798,35 +4771,44 @@ msgstr ""
"même conseillé de changer les mots de passe de temps en temps ou "
"périodiquement."
-#: ../../../../inc/themes/classic/encryption.inc:105
-#: ../../../../inc/themes/material-blue/encryption.inc:121
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:140
+msgid "Actualizar hash de clave maestra"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:156
msgid "Clave Temporal"
msgstr "Mot de passe temporaire"
-#: ../../../../inc/themes/classic/encryption.inc:116
-#: ../../../../inc/themes/classic/encryption.inc:127
-#: ../../../../inc/themes/material-blue/encryption.inc:131
-#: ../../../../inc/themes/material-blue/encryption.inc:142
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:172
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:185
msgid "No generada"
msgstr "Pas généré"
-#: ../../../../inc/themes/classic/encryption.inc:121
-#: ../../../../inc/themes/material-blue/encryption.inc:136
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:177
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:180
msgid "Válido hasta"
msgstr "Vailde jusqu'à"
-#: ../../../../inc/themes/classic/encryption.inc:133
-#: ../../../../inc/themes/material-blue/encryption.inc:148
-#: ../../../../inc/themes/material-blue/encryption.inc:154
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:191
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:194
+msgid "Intentos"
+msgstr "Tentatives"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:201
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:210
msgid "Validez (s)"
msgstr "Validité (s)"
-#: ../../../../inc/themes/classic/encryption.inc:136
-msgid "Validez"
-msgstr "Validité"
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:222
+msgid ""
+"Envía un correo a todos los usuarios o sólo a los del grupo seleccionado."
+msgstr ""
-#: ../../../../inc/themes/classic/encryption.inc:164
-#: ../../../../inc/themes/material-blue/encryption.inc:183
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:230
+msgid "Enviar correo"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:288
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 "
@@ -3837,228 +4819,203 @@ msgstr ""
"il n'est nul besoin de leur demander de saisir le véritable mot de passe "
"maître."
-#: ../../../../inc/themes/classic/encryption.inc:166
-#: ../../../../inc/themes/material-blue/encryption.inc:187
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:294
msgid "Generar"
msgstr "Générer"
-#: ../../../../inc/themes/classic/eventlog.inc:6
-#: ../../../../inc/themes/classic/search.inc:3
-#: ../../../../inc/themes/material-blue/eventlog.inc:6
-#: ../../../../inc/themes/material-blue/search.inc:3
-msgid "No se encontraron registros"
-msgstr "Aucun enregistrement trouvé"
-
-#: ../../../../inc/themes/classic/eventlog.inc:17
-#: ../../../../inc/themes/material-blue/eventlog.inc:17
-msgid "Fecha / Hora"
-msgstr "Date / Heure"
-
-#: ../../../../inc/themes/classic/eventlog.inc:20
-#: ../../../../inc/themes/material-blue/eventlog.inc:20
-msgid "Evento"
-msgstr "Evènement"
-
-#: ../../../../inc/themes/classic/eventlog.inc:26
-#: ../../../../inc/themes/material-blue/eventlog.inc:26
-msgid "IP"
-msgstr "IP"
-
-#: ../../../../inc/themes/classic/eventlog.inc:84
-#: ../../../../inc/themes/classic/search.inc:20
-#: ../../../../inc/themes/classic/search.inc:199
-#: ../../../../inc/themes/material-blue/eventlog.inc:84
-#: ../../../../inc/themes/material-blue/search.inc:20
-#: ../../../../inc/themes/material-blue/search.inc:209
-msgid "Primera página"
-msgstr "Première page"
-
-#: ../../../../inc/themes/classic/eventlog.inc:86
-#: ../../../../inc/themes/classic/search.inc:22
-#: ../../../../inc/themes/classic/search.inc:201
-#: ../../../../inc/themes/material-blue/eventlog.inc:86
-#: ../../../../inc/themes/material-blue/search.inc:22
-#: ../../../../inc/themes/material-blue/search.inc:211
-msgid "Página anterior"
-msgstr "Page précédante"
-
-#: ../../../../inc/themes/classic/eventlog.inc:91
-#: ../../../../inc/themes/classic/search.inc:27
-#: ../../../../inc/themes/classic/search.inc:206
-#: ../../../../inc/themes/material-blue/eventlog.inc:91
-#: ../../../../inc/themes/material-blue/search.inc:27
-#: ../../../../inc/themes/material-blue/search.inc:216
-msgid "Página siguiente"
-msgstr "Page suivante"
-
-#: ../../../../inc/themes/classic/eventlog.inc:93
-#: ../../../../inc/themes/classic/search.inc:29
-#: ../../../../inc/themes/classic/search.inc:208
-#: ../../../../inc/themes/material-blue/eventlog.inc:93
-#: ../../../../inc/themes/material-blue/search.inc:29
-#: ../../../../inc/themes/material-blue/search.inc:218
-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:29
-msgid "Indica si la conexión utiliza HTTPS."
-msgstr "Indique si la connexion utilise le protocol HTTPS."
-
-#: ../../../../inc/themes/classic/footer.inc:6
-#: ../../../../inc/themes/material-blue/footer.inc:29
-msgid ""
-"Las claves de formularios enviados se encriptan mediante PKI, el resto de "
-"datos no."
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:4
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:61
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:63
+msgid "Eventos"
msgstr ""
-"Les mots de passe envoyés à partir du formulaire sont cryptés avec PKI, les "
-"autres données ne le sont pas."
-#: ../../../../inc/themes/classic/footer.inc:6
-msgid "Seguro"
-msgstr "Sécurisé"
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:13
+msgid "Guarda las acciones realizadas en la aplicación."
+msgstr "Sauvegarde les actions effectuées par l'application."
-#: ../../../../inc/themes/classic/footer.inc:6
-msgid "Inseguro"
-msgstr "Insécurisé"
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:21
+msgid "Habilitar log de eventos"
+msgstr "Active le journal des évènements"
-#: ../../../../inc/themes/classic/footer.inc:11
-#: ../../../../inc/themes/material-blue/footer.inc:18
-msgid "Ayuda :: FAQ :: Changelog"
-msgstr "Aide :: FAQ :: Changelog"
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:32
+msgid "Habilitar Syslog"
+msgstr ""
-#: ../../../../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/material-blue/views/config/general-events.inc:43
+msgid "Habilitar Syslog Remoto"
+msgstr ""
-#: ../../../../inc/themes/classic/groups.inc:10
-#: ../../../../inc/themes/material-blue/groups.inc:14
-msgid "Nombre del grupo"
-msgstr "Nom du groupe"
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:57
+msgid "Nombre o dirección IP"
+msgstr ""
-#: ../../../../inc/themes/classic/groups.inc:18
-#: ../../../../inc/themes/material-blue/groups.inc:26
-msgid "Descripción del grupo"
-msgstr "Description du groupe"
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:63
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:71
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:33
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:40
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:47
+msgid "Puerto"
+msgstr "Port"
-#: ../../../../inc/themes/classic/import.inc:4
-#: ../../../../inc/themes/material-blue/import.inc:119
-msgid "Importar phpPMS"
-msgstr "Importer phpPMS"
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:2
+msgid "Proxy"
+msgstr "Proxy"
-#: ../../../../inc/themes/classic/import.inc:11
-#: ../../../../inc/themes/classic/install.inc:63
-#: ../../../../inc/themes/classic/install.inc:64
-#: ../../../../inc/themes/material-blue/import.inc:126
-#: ../../../../inc/themes/material-blue/import.inc:138
-msgid "Usuario BBDD"
-msgstr "Utilisateur BDD"
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:13
+msgid "Usar Proxy"
+msgstr "Utiliser un serveur Proxy"
-#: ../../../../inc/themes/classic/import.inc:15
-#: ../../../../inc/themes/material-blue/import.inc:130
-msgid "Indicar el usuario de conexión a la base de datos de phpPMS."
-msgstr "Indique l'utilisateur de connexion à la base de données phpPMS."
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:27
+msgid "Servidor proxy"
+msgstr "Serveur proxy"
-#: ../../../../inc/themes/classic/import.inc:25
-#: ../../../../inc/themes/classic/install.inc:71
-#: ../../../../inc/themes/classic/install.inc:73
-#: ../../../../inc/themes/material-blue/import.inc:144
-#: ../../../../inc/themes/material-blue/import.inc:150
-msgid "Clave BBDD"
-msgstr "Mot de passe BDD"
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:41
+msgid "Puerto del servidor proxy"
+msgstr "Port du serveur proxy"
-#: ../../../../inc/themes/classic/import.inc:33
-#: ../../../../inc/themes/classic/install.inc:78
-#: ../../../../inc/themes/classic/install.inc:79
-#: ../../../../inc/themes/material-blue/import.inc:156
-#: ../../../../inc/themes/material-blue/import.inc:168
-msgid "Nombre BBDD"
-msgstr "Nom BDD"
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:55
+msgid "Usuario del servidor proxy"
+msgstr "Utilisateur du serveur proxy"
-#: ../../../../inc/themes/classic/import.inc:37
-#: ../../../../inc/themes/material-blue/import.inc:160
-msgid "Indicar el nombre de la base de datos de phpPMS."
-msgstr "Indiwue le nom de la base de données de phpPMS."
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:69
+msgid "Clave del servidor proxy"
+msgstr "MDP utilisateur du serveur proxy"
-#: ../../../../inc/themes/classic/import.inc:47
-#: ../../../../inc/themes/classic/install.inc:87
-#: ../../../../inc/themes/classic/install.inc:88
-#: ../../../../inc/themes/material-blue/import.inc:174
-#: ../../../../inc/themes/material-blue/import.inc:186
-msgid "Servidor BBDD"
-msgstr "Serveur BDD"
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:4
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:7
+msgid "Sitio"
+msgstr "Site"
-#: ../../../../inc/themes/classic/import.inc:51
-#: ../../../../inc/themes/material-blue/import.inc:178
-msgid "Indicar el servidor de la base de datos de phpPMS."
-msgstr "Indique le serveur de la base de données phpPMS."
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:10
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:24
+#: ../../../../inc/themes/material-blue/views/config/info.inc:78
+#: ../../../../inc/themes/material-blue/views/config/info.inc:92
+#: ../../../../inc/themes/material-blue/views/main/install.inc:135
+#: ../../../../inc/themes/material-blue/views/main/install.inc:136
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:19
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:21
+msgid "Idioma"
+msgstr "Langage"
-#: ../../../../inc/themes/classic/import.inc:61
-#: ../../../../inc/themes/material-blue/import.inc:192
-msgid "Confirmar"
-msgstr "Confirmer"
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:15
+msgid ""
+"Establece el idioma global de la aplicación. Es posible establecer un idioma "
+"por usuario en las preferencias."
+msgstr ""
+"Défini la langue globale de l'application. Vous pouvez également définir la "
+"langue dans les préférences utilisateurs."
-#: ../../../../inc/themes/classic/import.inc:65
-#: ../../../../inc/themes/material-blue/import.inc:196
-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/material-blue/views/config/general-site.inc:19
+msgid ""
+"Para mejorar/añadir las traducciones, puede colaborar en https://poeditor."
+"com/join/project/fmlsBuugyv"
+msgstr ""
-#: ../../../../inc/themes/classic/import.inc:80
-msgid "Iniciar"
-msgstr "Démarrer"
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:36
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:46
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:32
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:34
+msgid "Tema Visual"
+msgstr "Thème Visuel"
-#: ../../../../inc/themes/classic/import.inc:86
-#: ../../../../inc/themes/material-blue/import.inc:4
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:41
+msgid ""
+"Establece el tema visual global de la aplicación. Es posible establecer un "
+"tema visual por usuario en las preferencias."
+msgstr ""
+"Défini le thème visuel global de l'application. Vous pouvez définir le thème "
+"par utilisateur dans les préférences utilisateur."
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:59
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:67
+msgid "Timeout de sesión (s)"
+msgstr "Timeout de session (s)"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:77
+msgid "Fuerza para que todas las conexiones sean a través de HTTPS."
+msgstr "Force l'utilisation du protocol HTTPS pour toutes les connexions."
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:86
+msgid "Forzar HTTPS"
+msgstr "Forcer HTTPS"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:96
+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/material-blue/views/config/general-site.inc:104
+msgid "Habilitar depuración"
+msgstr "Activer le mode debug"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:114
+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/material-blue/views/config/general-site.inc:122
+msgid "Modo mantenimiento"
+msgstr "Mode maintenance"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:132
+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/material-blue/views/config/general-site.inc:140
+msgid "Comprobar actualizaciones"
+msgstr "Vérifier les mises à jour"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:150
+msgid ""
+"Comprobar si existen notificaciones de seguridad o avisos de sysPass (sólo "
+"para los usuarios administradores)."
+msgstr ""
+"Vérifier s'il existe des notifications ou alertes de sécurité syspass "
+"(uniquement pour les administrateurs)."
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:158
+msgid "Comprobar notificaciones"
+msgstr "Vérifier les notifications"
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:8
msgid "Importar CSV/XML"
msgstr "Importer CSV/XML"
-#: ../../../../inc/themes/classic/import.inc:93
-#: ../../../../inc/themes/material-blue/import.inc:11
+#: ../../../../inc/themes/material-blue/views/config/import.inc:14
+#: ../../../../inc/themes/material-blue/views/config/import.inc:24
msgid "Usuario por Defecto"
msgstr "Utilisateur par défault"
-#: ../../../../inc/themes/classic/import.inc:97
-#: ../../../../inc/themes/material-blue/import.inc:15
+#: ../../../../inc/themes/material-blue/views/config/import.inc:19
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:114
-#: ../../../../inc/themes/classic/ldap.inc:144
-#: ../../../../inc/themes/material-blue/import.inc:33
-#: ../../../../inc/themes/material-blue/ldap.inc:170
+#: ../../../../inc/themes/material-blue/views/config/import.inc:40
+#: ../../../../inc/themes/material-blue/views/config/import.inc:50
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:207
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:217
msgid "Grupo por Defecto"
msgstr "Groupe par défaut"
-#: ../../../../inc/themes/classic/import.inc:118
-#: ../../../../inc/themes/material-blue/import.inc:37
+#: ../../../../inc/themes/material-blue/views/config/import.inc:45
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:135
-#: ../../../../inc/themes/material-blue/import.inc:55
-#: ../../../../inc/themes/material-blue/import.inc:61
-msgid "Clave de Importación"
-msgstr "Importer un mot de passe"
-
-#: ../../../../inc/themes/classic/import.inc:143
-#: ../../../../inc/themes/material-blue/import.inc:67
-#: ../../../../inc/themes/material-blue/import.inc:73
-msgid "Delimitador CSV"
-msgstr "Délimiteur CSV"
-
-#: ../../../../inc/themes/classic/import.inc:157
-#: ../../../../inc/themes/material-blue/import.inc:85
+#: ../../../../inc/themes/material-blue/views/config/import.inc:74
msgid "Soltar archivo aquí o click para seleccionar"
msgstr "Supprimer les fichier ici ou cliquez pour sélectionner"
-#: ../../../../inc/themes/classic/import.inc:173
-#: ../../../../inc/themes/material-blue/import.inc:102
+#: ../../../../inc/themes/material-blue/views/config/import.inc:102
msgid ""
"Permite realizar la importación de Cuentas, Categorías y Clientes desde "
"archivos XML y CSV."
@@ -4066,24 +5023,21 @@ msgstr ""
"Permet de réaliser l'importation des comptes, catégories et clients depuis "
"un fichier archive XML ou CSV."
-#: ../../../../inc/themes/classic/import.inc:175
-#: ../../../../inc/themes/material-blue/import.inc:104
+#: ../../../../inc/themes/material-blue/views/config/import.inc:104
msgid ""
"Los formatos de archivos XML soportados son: sysPass, KeePass y KeePassX"
msgstr ""
"Les formats de fichiers archives XML supportés sont: sysPass, KeePass et "
"KeePassX"
-#: ../../../../inc/themes/classic/import.inc:177
-#: ../../../../inc/themes/material-blue/import.inc:106
+#: ../../../../inc/themes/material-blue/views/config/import.inc:106
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:179
-#: ../../../../inc/themes/material-blue/import.inc:108
+#: ../../../../inc/themes/material-blue/views/config/import.inc:108
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."
@@ -4091,18 +5045,17 @@ msgstr ""
"Pour les archives KeePass ou KeePassX, le nom du client sera celui de "
"KeePass ou de KeePassX et la catégorie sera celle du nom des groupes."
-#: ../../../../inc/themes/classic/import.inc:181
-#: ../../../../inc/themes/material-blue/import.inc:110
+#: ../../../../inc/themes/material-blue/views/config/import.inc:110
msgid "La importación de archivos CSV se realiza con el siguiente formato:"
msgstr "L'importation des archives CSV nécessite les formats suivants:"
-#: ../../../../inc/themes/classic/import.inc:183
-#: ../../../../inc/themes/material-blue/import.inc:112
-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/material-blue/views/config/import.inc:112
+msgid ""
+"\"nombre_de_cuenta\";\"cliente\";\"categoría\";\"url\";\"usuario\";\"clave\";"
+"\"notas\""
+msgstr ""
-#: ../../../../inc/themes/classic/import.inc:185
-#: ../../../../inc/themes/material-blue/import.inc:114
+#: ../../../../inc/themes/material-blue/views/config/import.inc:114
msgid ""
"En todos los casos, si el cliente o la categoría no están creados, se crean "
"automáticamente."
@@ -4110,963 +5063,203 @@ 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
+#: ../../../../inc/themes/material-blue/views/config/import.inc:121
+msgid "XML"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:127
+#: ../../../../inc/themes/material-blue/views/config/import.inc:142
+msgid "Clave de Importación"
+msgstr "Importer un mot de passe"
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:132
+msgid "Sólo es necesaria para archivos XML de sysPass encriptados."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:153
+msgid ""
+"Sólo es necesaria para archivos XML de sysPass con clave maestra distinta de "
+"la actual."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:170
+msgid "CSV"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:176
+#: ../../../../inc/themes/material-blue/views/config/import.inc:191
+msgid "Delimitador CSV"
+msgstr "Délimiteur CSV"
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:181
+msgid "Sólo es necesario para archivos CSV."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/info.inc:5
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
+#: ../../../../inc/themes/material-blue/views/config/info.inc:11
+#: ../../../../inc/themes/material-blue/views/config/info.inc:14
msgid "Versión sysPass"
msgstr "Version de sysPass"
-#: ../../../../inc/themes/classic/info.inc:18
-#: ../../../../inc/themes/material-blue/info.inc:18
+#: ../../../../inc/themes/material-blue/views/config/info.inc:21
+#: ../../../../inc/themes/material-blue/views/config/info.inc:24
msgid "Base de Datos"
msgstr "Base de données"
-#: ../../../../inc/themes/classic/info.inc:30
-#: ../../../../inc/themes/material-blue/info.inc:30
+#: ../../../../inc/themes/material-blue/views/config/info.inc:35
+#: ../../../../inc/themes/material-blue/views/config/info.inc:38
msgid "PHP"
msgstr "PHP"
-#: ../../../../inc/themes/classic/info.inc:35
-#: ../../../../inc/themes/material-blue/info.inc:35
+#: ../../../../inc/themes/material-blue/views/config/info.inc:42
msgid "Extensiones"
msgstr "Extensions"
-#: ../../../../inc/themes/classic/info.inc:37
-#: ../../../../inc/themes/material-blue/info.inc:37
+#: ../../../../inc/themes/material-blue/views/config/info.inc:44
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:372
-#: ../../../../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/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:26
-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:38
-msgid "Login del usuario administrador de sysPass"
-msgstr "Login administrateur de sysPass"
-
-#: ../../../../inc/themes/classic/install.inc:58
-#: ../../../../inc/themes/material-blue/install.inc:72
-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:106
-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:124
-msgid "Modo Hosting"
-msgstr "Mode Hébergé"
-
-#: ../../../../inc/themes/classic/install.inc:104
-#: ../../../../inc/themes/material-blue/install.inc:131
-msgid "No crea ni verifica los permisos del usuario sobre la BBDD"
+#: ../../../../inc/themes/material-blue/views/config/info.inc:49
+msgid "OP Cache"
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:138
-#: ../../../../inc/themes/material-blue/install.inc:139
-msgid "Instalar"
-msgstr "Installer"
+#: ../../../../inc/themes/material-blue/views/config/info.inc:68
+#: ../../../../inc/themes/material-blue/views/config/info.inc:71
+msgid "Copia de Configuración"
+msgstr ""
-#: ../../../../inc/themes/classic/ldap.inc:12
-#: ../../../../inc/themes/material-blue/ldap.inc:12
-msgid "Habilitar LDAP"
-msgstr "Activer l'annuaire LDAP"
+#: ../../../../inc/themes/material-blue/views/config/info.inc:83
+msgid "Indica si el idioma se encuentra disponible"
+msgstr ""
-#: ../../../../inc/themes/classic/ldap.inc:16
-#: ../../../../inc/themes/material-blue/ldap.inc:16
+#: ../../../../inc/themes/material-blue/views/config/info.inc:87
+msgid ""
+"Si no está instalado, es necesario instalar las locales en el sistema "
+"operativo. Más información en Wiki."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/info.inc:99
+#: ../../../../inc/themes/material-blue/views/config/info.inc:102
+msgid "Plugins Cargados"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:22
msgid "Habilita de autentificación mediante servidor LDAP."
msgstr "Active l'authentification couplé à un serveur LDAP."
-#: ../../../../inc/themes/classic/ldap.inc:20
-#: ../../../../inc/themes/material-blue/ldap.inc:20
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:26
msgid "Este método utilizará MySQL en caso de fallo."
msgstr "Cette méthode utilisera MySQL en cas de défaillance."
-#: ../../../../inc/themes/classic/ldap.inc:36
-#: ../../../../inc/themes/material-blue/ldap.inc:39
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:36
+msgid "Habilitar LDAP"
+msgstr "Activer l'annuaire LDAP"
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:46
+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/material-blue/views/config/ldap.inc:56
+msgid "Active Directory"
+msgstr "Active Directory"
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:67
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
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:71
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:102
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:153
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:187
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:111
msgid "Ejemplos:"
msgstr "Exemples:"
-#: ../../../../inc/themes/classic/ldap.inc:57
-#: ../../../../inc/themes/material-blue/ldap.inc:64
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:93
msgid "Usuario de conexión"
msgstr "Utilisateur de connexion"
-#: ../../../../inc/themes/classic/ldap.inc:61
-#: ../../../../inc/themes/material-blue/ldap.inc:68
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:98
msgid "Usuario para conectar con el servicio de LDAP."
msgstr "Utilisateur de connexion au service LDAP."
-#: ../../../../inc/themes/classic/ldap.inc:81
-#: ../../../../inc/themes/material-blue/ldap.inc:92
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:123
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
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:128
+msgid "Clave del usuario de conexión a LDAP."
+msgstr "Mot de passe de l'utilisateur de connexion à l'annuaire LDAP."
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:144
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:168
msgid "Base de búsqueda"
msgstr "Base de recherche"
-#: ../../../../inc/themes/classic/ldap.inc:96
-#: ../../../../inc/themes/material-blue/ldap.inc:115
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:149
msgid "Base en la que realizar la búsqueda de usuarios de LDAP."
msgstr "Base dans laquelle se fera la recherche des utilisateurs LDAP."
-#: ../../../../inc/themes/classic/ldap.inc:120
-#: ../../../../inc/themes/material-blue/ldap.inc:143
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:179
msgid ""
"Grupo de LDAP al que debe de pertenecer el usuario para permitir el acceso."
msgstr ""
"Groupe LDAP auquel l'utilisateur doit appartenir afin d'autoriser son login."
-#: ../../../../inc/themes/classic/ldap.inc:124
-#: ../../../../inc/themes/material-blue/ldap.inc:147
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:183
msgid "Este grupo debe de estar ubicado en la base de búsquedas de LDAP."
msgstr "Ce groupe a besoin d'être placé dans la base de recherche LDAP."
-#: ../../../../inc/themes/classic/ldap.inc:148
-#: ../../../../inc/themes/material-blue/ldap.inc:174
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:212
+#, fuzzy
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
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:231
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:241
msgid "Perfil por Defecto"
msgstr "Profil par défaut"
-#: ../../../../inc/themes/classic/ldap.inc:169
-#: ../../../../inc/themes/material-blue/ldap.inc:194
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:236
msgid ""
"Define el perfil de usuarios por defecto para los nuevos usuarios de LDAP."
msgstr ""
"Defini le groupe des utilisateurs par défaut pour les nouveaux utilisateurs "
"LDAP."
-#: ../../../../inc/themes/classic/ldap.inc:186
-#: ../../../../inc/themes/material-blue/ldap.inc:210
-msgid "Active Directory"
-msgstr "Active Directory"
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:255
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:258
+msgid "Resultados"
+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 "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:74
-msgid "¿Olvidó su clave?"
-msgstr "Mot de passe oublié?"
-
-#: ../../../../inc/themes/classic/login.inc:63
-#: ../../../../inc/themes/material-blue/login.inc:90
-msgid "Aplicación actualizada correctamente"
-msgstr "Application mis à jour avec succès"
-
-#: ../../../../inc/themes/classic/login.inc:68
-#: ../../../../inc/themes/classic/login.inc:69
-#: ../../../../inc/themes/material-blue/login.inc:95
-#: ../../../../inc/themes/material-blue/login.inc:96
-#: ../../../../inc/themes/material-blue/login.inc:98
-msgid "Nuevas Características"
-msgstr "Nouvelles Fonctionnalités "
-
-#: ../../../../inc/themes/classic/mail.inc:11
-#: ../../../../inc/themes/material-blue/mail.inc:11
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:21
msgid "Habilitar notificaciones de correo"
msgstr "Activer les notifications par courriel"
-#: ../../../../inc/themes/classic/mail.inc:29
-#: ../../../../inc/themes/material-blue/config.inc:386
-#: ../../../../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
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:58
msgid "Habilitar Autentificación"
msgstr "Activer l'authentification"
-#: ../../../../inc/themes/classic/mail.inc:68
-#: ../../../../inc/themes/material-blue/mail.inc:91
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:90
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:93
+msgid "Seguridad"
+msgstr "Sécurité"
+
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:96
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
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:106
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:114
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:70
-#: ../../../../inc/themes/classic/search.inc:150
-#: ../../../../inc/themes/material-blue/search.inc:160
-msgid "Más Acciones"
-msgstr "Plus d'Actions"
-
-#: ../../../../inc/themes/classic/passreset.inc:13
-#: ../../../../inc/themes/material-blue/passreset.inc:9
-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:23
-msgid "Email del Usuario"
-msgstr "Courriel de l'utilisateur"
-
-#: ../../../../inc/themes/classic/passreset.inc:27
-msgid "Nueva Clave"
-msgstr "Nouveau Mot de passe"
-
-#: ../../../../inc/themes/classic/passreset.inc:46
-#: ../../../../inc/themes/material-blue/passreset.inc:47
-msgid "Volver a iniciar sesión"
-msgstr "Retour au login"
-
-#: ../../../../inc/themes/classic/passreset.inc:48
-#: ../../../../inc/themes/material-blue/2fa.inc:25
-#: ../../../../inc/themes/material-blue/passreset.inc:53
-#: ../../../../inc/themes/material-blue/passreset.inc:54
-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:58
-#: ../../../../inc/themes/material-blue/passreset.inc:59
-msgid "Cambiar"
-msgstr "Changer"
-
-#: ../../../../inc/themes/classic/passreset.inc:52
-msgid "Cambiar Clave"
-msgstr "Changer Mot de passe"
-
-#: ../../../../inc/themes/classic/preferences.inc:73
-#: ../../../../inc/themes/material-blue/preferences.inc:74
-msgid "Ordenar resultados por visitas"
-msgstr "Trier les résultats par visites"
-
-#: ../../../../inc/themes/classic/preferences.inc:77
-#: ../../../../inc/themes/material-blue/preferences.inc:78
-msgid ""
-"Ordena los resultados de búsqueda por el número de visitas de las cuentas."
-msgstr "Trie les résultats de recherche sur le nombre de visite des comptes."
-
-#: ../../../../inc/themes/classic/preferences.inc:90
-#: ../../../../inc/themes/material-blue/preferences.inc:91
-msgid "Barra de navegación superior"
-msgstr "Barre de navigation en haut"
-
-#: ../../../../inc/themes/classic/preferences.inc:94
-#: ../../../../inc/themes/material-blue/preferences.inc:95
-msgid "Mostrar una barra de navegación superior en las búsquedas."
-msgstr "Montrer une barre de navigation en haut lors des recherches."
-
-#: ../../../../inc/themes/classic/preferences.inc:107
-#: ../../../../inc/themes/material-blue/preferences.inc:108
-msgid "Mostrar Acciones Ocultas"
-msgstr "Montrer les actions cachées"
-
-#: ../../../../inc/themes/classic/preferences.inc:111
-#: ../../../../inc/themes/material-blue/preferences.inc:112
-msgid ""
-"Mostrar las acciones ocultas para los elementos de la búsqueda de cuentas."
-msgstr ""
-"Montrer les actions cachées pour les éléments de la recherche des comptes."
-
-#: ../../../../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
-#: ../../../../inc/themes/material-blue/profiles.inc:60
-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 "Effectuer l'importation des comptes"
-
-#: ../../../../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 "Gestion des autorisations des APIs"
-
-#: ../../../../inc/themes/classic/profiles.inc:112
-#: ../../../../inc/themes/material-blue/profiles.inc:129
-msgid "Autorizaciones API"
-msgstr "Autorisations des APIs"
-
-#: ../../../../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:454
-#: ../../../../inc/themes/material-blue/editpass.inc:55
-#: ../../../../inc/themes/material-blue/mgmttabs.inc:13
-#: ../../../../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:10
-#: ../../../../inc/themes/classic/search.inc:189
-#: ../../../../inc/themes/material-blue/search.inc:10
-#: ../../../../inc/themes/material-blue/search.inc:199
-msgid "Filtro ON"
-msgstr "Filtre ON"
-
-#: ../../../../inc/themes/classic/search.inc:14
-#: ../../../../inc/themes/classic/search.inc:193
-#: ../../../../inc/themes/material-blue/search.inc:14
-#: ../../../../inc/themes/material-blue/search.inc:203
-msgid "Global ON"
-msgstr "Global ON"
-
-#: ../../../../inc/themes/classic/search.inc:63
-#: ../../../../inc/themes/material-blue/search.inc:65
-msgid "Buscar en Wiki"
-msgstr "Chercher dans Wiki"
-
-#: ../../../../inc/themes/classic/search.inc:99
-#: ../../../../inc/themes/material-blue/search.inc:101
-msgid "Abrir enlace a"
-msgstr "Ouvrir le lien vers"
-
-#: ../../../../inc/themes/classic/search.inc:117
-#: ../../../../inc/themes/material-blue/search.inc:125
-msgid "Archivos adjuntos"
-msgstr "Fichiers joints"
-
-#: ../../../../inc/themes/classic/search.inc:124
-#: ../../../../inc/themes/material-blue/search.inc:134
-msgid "Enlace a Wiki"
-msgstr "Lien vers Wiki"
-
-#: ../../../../inc/themes/classic/searchbox.inc:5
-#: ../../../../inc/themes/material-blue/searchbox.inc:5
-msgid "Limpiar"
-msgstr "Nettoyer"
-
-#: ../../../../inc/themes/classic/searchbox.inc:7
-#: ../../../../inc/themes/material-blue/searchbox.inc:10
-msgid "Texto a buscar"
-msgstr "Text à chercher"
-
-#: ../../../../inc/themes/classic/searchbox.inc:12
-#: ../../../../inc/themes/material-blue/searchbox.inc:15
-msgid "Parámetros especiales:"
-msgstr "Paramètres spéciaux"
-
-#: ../../../../inc/themes/classic/searchbox.inc:15
-#: ../../../../inc/themes/material-blue/searchbox.inc:18
-msgid "Buscar cuentas a las que 'login' tenga acceso"
-msgstr "Rechercher les comptes pour lesquels le 'login' a les droits d'accès"
-
-#: ../../../../inc/themes/classic/searchbox.inc:17
-#: ../../../../inc/themes/material-blue/searchbox.inc:19
-msgid "Buscar cuentas a las que 'group_name' tenga acceso"
-msgstr ""
-"Rechercher les comptes pour lesquels le 'group_name' a les droits d'accès"
-
-#: ../../../../inc/themes/classic/searchbox.inc:19
-#: ../../../../inc/themes/material-blue/searchbox.inc:20
-msgid "Buscar cuentas con archivos con el nombre 'file_name'"
-msgstr "Rechercher les comptes qui contiennet un archive du nom 'file_name'"
-
-#: ../../../../inc/themes/classic/searchbox.inc:24
-#: ../../../../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:50
-#: ../../../../inc/themes/material-blue/searchbox.inc:54
-msgid "CPP"
-msgstr "APP"
-
-#: ../../../../inc/themes/classic/searchbox.inc:51
-#: ../../../../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 ""
-"Active l'authentification à 2 facteurs nécessitant la saisie d'un token qui "
-"a été généré par une application tiers comme Google Authenticator."
-
-#: ../../../../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 "Scannez le code QR fournis puis saisissez le code à 6 chiffres."
-
-#: ../../../../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 ""
-"Une fois activé, vous ne pouvez vous connecter que si vous avez l'équipement "
-"permettant de générer le code associé."
-
-#: ../../../../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: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 "Token"
-
-#: ../../../../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:6
-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:12
-msgid "Código de Seguridad"
-msgstr "code de sécurité"
-
-#: ../../../../inc/themes/classic/upgrade.inc:21
-#: ../../../../inc/themes/material-blue/upgrade.inc:23
-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 "URL qu'utilise Wiki pour accéder aux détails d'une page."
-
-#: ../../../../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 ""
-"Le nom du compte est utilisé comme paramètre lors de la recherche Wiki."
-
-#: ../../../../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 "Préfix déterminant quels comptes ont un lien vers une page Wiki."
-
-#: ../../../../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:34
-msgid "> Usar texto y crear nuevo"
-msgstr "> Utiliser le texte et créer un nouveau"
-
-#: ../../../../inc/themes/material-blue/account.inc:43
-msgid "Seleccionar o escribir para crear uno nuevo"
-msgstr "Sélectionner ou écrire pour en créer un nouveau"
-
-#: ../../../../inc/themes/material-blue/account.inc:114
-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:115
-#: ../../../../inc/themes/material-blue/import.inc:215
-msgid "Realizar"
-msgstr "Effectuer"
-
-#: ../../../../inc/themes/material-blue/config.inc:67
-msgid "Forzar HTTPS"
-msgstr "Forcer HTTPS"
-
-#: ../../../../inc/themes/material-blue/config.inc:71
-msgid "Fuerza para que todas las conexiones sean a través de HTTPS."
-msgstr "Force l'utilisation du protocol HTTPS pour toutes les connexions."
-
-#: ../../../../inc/themes/material-blue/config.inc:232
-#: ../../../../inc/themes/material-blue/preferences.inc:68
-msgid "Número de resultados por página"
-msgstr "Résultats par page"
-
-#: ../../../../inc/themes/material-blue/config.inc:346
-msgid "Tamaño máximo de archivo en bytes"
-msgstr "Taille maximum du fichier en \"bytes\""
-
-#: ../../../../inc/themes/material-blue/config.inc:353
-msgid "Proxy"
-msgstr "Proxy"
-
-#: ../../../../inc/themes/material-blue/config.inc:359
-msgid "Usar Proxy"
-msgstr "Utiliser un serveur Proxy"
-
-#: ../../../../inc/themes/material-blue/config.inc:380
-msgid "Servidor proxy"
-msgstr "Serveur proxy"
-
-#: ../../../../inc/themes/material-blue/config.inc:394
-msgid "Puerto del servidor proxy"
-msgstr "Port du serveur proxy"
-
-#: ../../../../inc/themes/material-blue/config.inc:408
-msgid "Usuario del servidor proxy"
-msgstr "Utilisateur du serveur proxy"
-
-#: ../../../../inc/themes/material-blue/config.inc:422
-msgid "Clave del servidor proxy"
-msgstr "MDP utilisateur du serveur proxy"
-
-#: ../../../../inc/themes/material-blue/customfields.inc:14
-msgid "Nombre del campo"
-msgstr "Nom du champ"
-
-#: ../../../../inc/themes/material-blue/customfields.inc:47
-msgid "Ayuda del campo"
-msgstr "Aide du champ"
-
-#: ../../../../inc/themes/material-blue/footer.inc:11
-msgid "Preferencias de usuario"
-msgstr "Préférences de l'utilisateur"
-
-#: ../../../../inc/themes/material-blue/install.inc:33
-msgid "Usuario administrador de sysPass"
-msgstr "Utilisateur \"administrateur\" de Syspass"
-
-#: ../../../../inc/themes/material-blue/install.inc:81
-msgid "Usuario acceso BBDD"
-msgstr "Utilisateur pour accéder à la base de données"
-
-#: ../../../../inc/themes/material-blue/install.inc:86
-msgid "Usuario con permisos de administrador de MySQL"
-msgstr "Utilisateur avec les droits administrateur MySQL"
-
-#: ../../../../inc/themes/material-blue/install.inc:94
-msgid "Clave acceso BBDD"
-msgstr "Mot de passe pour accéder à la base de données"
-
-#: ../../../../inc/themes/material-blue/install.inc:101
-msgid "Nombre BBDD para sysPass"
-msgstr "Nom de la base de données sysPass"
-
-#: ../../../../inc/themes/material-blue/install.inc:113
-msgid "Servidor BBDD para sysPass"
-msgstr "Adresse du serveur de base de données sysPass"
-
-#: ../../../../inc/themes/material-blue/install.inc:118
-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 "Mot de passe de l'utilisateur de connexion à l'annuaire LDAP."
-
-#: ../../../../inc/themes/material-blue/mail.inc:118
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:124
msgid ""
"Habilita que los usuarios puedan solicitar modificaciones o acceso a las "
"cuentas sin permisos."
@@ -5074,36 +5267,1160 @@ msgstr ""
"Autorise les utilisateurs à effectuer des modifications ou accéder à des "
"comptes sans permission."
-#: ../../../../inc/themes/material-blue/profiles.inc:25
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:133
+msgid "Habilitar peticiones por correo"
+msgstr "Activer les demandes par courriel"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:20
+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/material-blue/views/config/wiki.inc:30
+msgid "Habilitar enlaces Wiki"
+msgstr "Activer les liens Wiki"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:36
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:63
+msgid "URL de búsqueda Wiki"
+msgstr "URL de recherche Wiki"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:41
+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/material-blue/views/config/wiki.inc:45
+msgid "Como parámetro se utiliza el nombre del cliente."
+msgstr "Le nom du client est utilisée comme paramètre."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:49
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:82
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:163
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:190
+msgid "Ejemplo:"
+msgstr "Exemple:"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:69
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:96
+msgid "URL de página en Wiki"
+msgstr "URL de page Wiki"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:74
+msgid "URL que utiliza la wiki para acceder a los detalles de una página."
+msgstr "URL qu'utilise Wiki pour accéder aux détails d'une page."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:78
+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 lors de la recherche Wiki."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:102
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:116
+msgid "Prefijo para nombre de cuenta"
+msgstr "Préfix de nom de compte"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:107
+msgid ""
+"Prefijo para determinar qué cuentas tienen un enlace a una página de la Wiki."
+msgstr "Préfix déterminant quels comptes ont un lien vers une page Wiki."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:124
+msgid "DokuWiki API"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:134
+msgid ""
+"Habilita la conexión a la API XML-RPC de DokuWiki para los enlaces Wiki."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:137
+msgid ""
+"Para que esta característica funcione, es necesario habilitar los enlaces "
+"Wiki para el filtrado de cuentas."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:147
+msgid "Habilitar API de DokuWiki"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:154
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:175
+msgid "URL API"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:159
+msgid "URL de la API de DokuWiki."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:181
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:203
+msgid "URL Base"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:186
+msgid "URL base de DokuWiki."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:214
+msgid "Usuario para conectar a la API de DokuWiki."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:242
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:258
+msgid "Namespace"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:247
+msgid "Namespace utilizado para buscar las páginas."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:22
+msgid "Fecha / Hora"
+msgstr "Date / Heure"
+
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:25
+msgid "Nivel"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:28
+msgid "Evento"
+msgstr "Evènement"
+
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:34
+msgid "IP"
+msgstr "IP"
+
+#: ../../../../inc/themes/material-blue/views/grid/datagrid-nav-full.inc:11
+msgid "Filtro ON"
+msgstr "Filtre ON"
+
+#: ../../../../inc/themes/material-blue/views/grid/datatabs-grid.inc:102
+msgid "Eliminar Seleccionados"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:26
+msgid "Nombre del campo"
+msgstr "Nom du champ"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:57
+msgid "Texto Ayuda"
+msgstr "Notice d'aide"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:63
+msgid "Ayuda del campo"
+msgstr "Aide du champ"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:74
+msgid "Obligatorio"
+msgstr "Requis"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:25
+msgid "Nombre del grupo"
+msgstr "Nom du groupe"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:38
+msgid "Descripción del grupo"
+msgstr "Description du groupe"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:20
+msgid "Nombre del plugin"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:32
+msgid "Versión del plugin"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:37
+msgid "Versión Compatible"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:44
+msgid "Versión de sysPass compatible"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:49
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:25
+msgid "Autor"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:56
+msgid "Autor del plugin"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:25
+msgid "Nombre del perfil"
+msgstr "Nom du profil"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:40
msgid "Crear nueva cuenta"
msgstr "Créer un nouveau compte"
-#: ../../../../inc/themes/material-blue/profiles.inc:25
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:40
msgid "Crear"
msgstr "Créer"
-#: ../../../../inc/themes/material-blue/profiles.inc:55
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:47
+msgid "Ver detalles de cuenta"
+msgstr "Voir détails de compte"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:47
+msgid "Ver"
+msgstr "Voir"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:54
+msgid "Ver clave de cuenta"
+msgstr "Voir mot de passe de compte"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:61
+msgid "Ver historial de cuenta"
+msgstr "Voir historique de compte"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:68
+msgid "Editar cuenta"
+msgstr "Editer compte"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:75
+msgid "Editar clave de cuenta"
+msgstr "Editer mot de passe du compte"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:75
+msgid "Editar Clave"
+msgstr "Editer Mot de passe"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:82
msgid "Eliminar cuenta"
msgstr "Supprimer un compte"
-#: ../../../../inc/themes/material-blue/profiles.inc:55
-msgid "Eliminar"
-msgstr "Supprimer"
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:89
+msgid "Ver archivos de cuenta"
+msgstr "Voir fichiers de compte"
-#: ../../../../inc/themes/material-blue/profiles.inc:77
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:96
+msgid "Publicar enlace a cuenta"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:96
+msgid "Publicar Enlace"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:103
+msgid "Crear cuenta privada"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:110
+msgid "Crear cuenta privada para grupo"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:117
+msgid "Asignar permisos"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:130
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:132
+msgid "Gestión"
+msgstr "Gestion"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:140
+msgid "Gestión de usuarios"
+msgstr "Gestion des utilisateurs"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:147
+msgid "Gestión de grupos"
+msgstr "Gestion des groupes"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:154
+msgid "Gestión de perfiles"
+msgstr "Gestion des profils"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:161
+msgid "Gestión de categorías"
+msgstr "Gestion des catégories"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:168
+msgid "Gestión de clientes"
+msgstr "Gestion des clients"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:175
+msgid "Gestión de campos personalizados"
+msgstr "Gestion des champs personnalisés"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:182
+msgid "Gestión de autorizaciones API"
+msgstr "Gestion des autorisations des APIs"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:189
+msgid "Gestión de enlaces"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:196
+msgid "Gestión de cuentas"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:210
+msgid "Gestión de etiquetas"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:233
msgid "Opciones de encriptación"
msgstr "Options de chiffrement"
-#: ../../../../inc/themes/material-blue/profiles.inc:82
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:240
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"
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:240
+msgid "Backup"
+msgstr "Sauvegarde"
-#~ msgid "No es posible guardar el archivo \"%s\" Tamaño máximo:"
-#~ msgstr "Impossible de conserver l'archive \"%s\" Taille maximum:"
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:247
+msgid "Realizar importación de cuentas"
+msgstr "Effectuer l'importation des comptes"
-#~ msgid "Var archivos de cuenta"
-#~ msgstr "Voir les fichiers du compte"
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:253
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:255
+msgid "Otros"
+msgstr "Autres"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:263
+msgid "Ver log de eventos"
+msgstr "Voir journal d'évènements"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:270
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:272
+msgid "Usado por"
+msgstr "Utilisé par"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:59
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:61
+msgid "Hash"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:67
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:69
+msgid "Uso"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/itemshow/tags.inc:23
+msgid "Nombre de la etiqueta"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:42
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:141
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:105
+msgid "Opciones"
+msgstr "Options"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:45
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:49
+msgid "Regenerar Autorización"
+msgstr "Actualiser l'autorisation"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:55
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:57
+msgid "Token"
+msgstr "Token"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:31
+msgid "Nombre de usuario completo"
+msgstr "Nom complet d'utilisateur"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:45
+msgid "Login de inicio de sesión"
+msgstr "Login de début de session"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:94
+msgid "Dirección de correo"
+msgstr "Adresse courriel"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:145
+msgid "Administrador de la aplicación"
+msgstr "Administrateur de l'application"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:152
+msgid "Administrador de cuentas"
+msgstr "Administrateur des comptes"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:167
+msgid "Forzar cambio de clave"
+msgstr "Forcer le changement de Mot de passe"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:181
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:183
+msgid "Entradas"
+msgstr "Entrées"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:190
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:192
+msgid "Último Acceso"
+msgstr "Dernier Accès"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:208
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:210
+msgid "Fecha Clave Maestra"
+msgstr "Date du Mot de passe Maître"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:11
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:69
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:72
+msgid "Salir"
+msgstr "Se déconnecter"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:25
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:56
+msgid "Preferencias de usuario"
+msgstr "Préférences de l'utilisateur"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:34
+#, php-format
+msgid "Hay %d notificaciones pendientes"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:41
+msgid "No hay no hay notificaciones pendientes"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:74
+msgid "Indica si la conexión utiliza HTTPS."
+msgstr "Indique si la connexion utilise le protocol HTTPS."
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:74
+msgid ""
+"Las claves de formularios enviados se encriptan mediante PKI, el resto de "
+"datos no."
+msgstr ""
+"Les mots de passe envoyés à partir du formulaire sont cryptés avec PKI, les "
+"autres données ne le sont pas."
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:79
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:82
+msgid "Demo"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:90
+msgid "Ayuda :: FAQ :: Changelog"
+msgstr "Aide :: FAQ :: Changelog"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:94
+msgid "Un proyecto de cygnux.org"
+msgstr "Un projet cygnux.org"
+
+#: ../../../../inc/themes/material-blue/views/main/body-start.inc:4
+msgid "Javascript es necesario para el correcto funcionamiento"
+msgstr "Javascript est requis pour fonctionner correctement"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:9
+#, php-format
+msgid "Instalación %s"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:19
+msgid "Admin de sysPass"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:27
+msgid "Usuario administrador de sysPass"
+msgstr "Utilisateur \"administrateur\" de Syspass"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:35
+msgid "Login del usuario administrador de sysPass"
+msgstr "Login administrateur de sysPass"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:67
+msgid "Configurar BBDD"
+msgstr "Configuration BDD"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:77
+msgid "Usuario acceso BBDD"
+msgstr "Utilisateur pour accéder à la base de données"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:85
+msgid "Usuario con permisos de administrador de MySQL"
+msgstr "Utilisateur avec les droits administrateur MySQL"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:93
+msgid "Clave acceso BBDD"
+msgstr "Mot de passe pour accéder à la base de données"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:102
+msgid "Nombre BBDD para sysPass"
+msgstr "Nom de la base de données sysPass"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:110
+msgid "Nombre de la base de datos para sysPass"
+msgstr "Nom de la base de données sysPass"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:119
+msgid "Servidor BBDD para sysPass"
+msgstr "Adresse du serveur de base de données sysPass"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:127
+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/views/main/install.inc:145
+msgid "Modo Hosting"
+msgstr "Mode Hébergé"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:152
+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/material-blue/views/main/install.inc:166
+#: ../../../../inc/themes/material-blue/views/main/install.inc:168
+msgid "Instalar"
+msgstr "Installer"
+
+#: ../../../../inc/themes/material-blue/views/main/login.inc:38
+msgid "Clave Anterior"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/main/login.inc:74
+msgid "¿Olvidó su clave?"
+msgstr "Mot de passe oublié?"
+
+#: ../../../../inc/themes/material-blue/views/main/login.inc:81
+msgid "Aplicación actualizada correctamente"
+msgstr "Application mis à jour avec succès"
+
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:7
+msgid "Solicitud de Cambio de Clave"
+msgstr "Demande de changement de Mot de passe"
+
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:25
+msgid "Email del Usuario"
+msgstr "Courriel de l'utilisateur"
+
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:55
+msgid "Volver a iniciar sesión"
+msgstr "Retour au login"
+
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:61
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:63
+msgid "Solicitar"
+msgstr "Demander"
+
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:67
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:69
+msgid "Cambiar"
+msgstr "Changer"
+
+#: ../../../../inc/themes/material-blue/views/main/update.inc:21
+msgid "Actualizado"
+msgstr "Mis à jour"
+
+#: ../../../../inc/themes/material-blue/views/main/update.inc:27
+msgid "Error al comprobar actualizaciones"
+msgstr "Erreur pendant la recherche de mises à jour"
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:4
+#, php-format
+msgid "Actualización %s"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:9
+msgid "Actualización de BBDD"
+msgstr "Actualisation de la BDD"
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:15
+msgid "Código de Seguridad"
+msgstr "code de sécurité"
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:23
+msgid ""
+"Este código se encuentra en el archivo de configuración de sysPass con la "
+"etiqueta \"upgradeKey\""
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:28
+msgid "He realizado una copia de seguridad completa de sysPass"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:40
+msgid "Por favor espere mientras el proceso se ejecuta"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:50
+msgid "Iniciar Actualización"
+msgstr "Démarrer la mise à jour"
+
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:108
+msgid "Notificación global"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:111
+msgid "Global"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:92
+msgid ""
+"Ordena los resultados de búsqueda por el número de visitas de las cuentas."
+msgstr "Trie les résultats de recherche sur le nombre de visite des comptes."
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:100
+msgid "Ordenar resultados por visitas"
+msgstr "Trier les résultats par visites"
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:110
+msgid "Mostrar una barra de navegación superior en las búsquedas."
+msgstr "Montrer une barre de navigation en haut lors des recherches."
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:118
+msgid "Barra de navegación superior"
+msgstr "Barre de navigation en haut"
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:128
+msgid ""
+"Mostrar las acciones ocultas para los elementos de la búsqueda de cuentas."
+msgstr ""
+"Montrer les actions cachées pour les éléments de la recherche des comptes."
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:137
+msgid "Mostrar Acciones Ocultas"
+msgstr "Montrer les actions cachées"
+
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:2
+msgid "Ver Wiki"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:10
+#, php-format
+msgid "Resultados de búsqueda de '%s'"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:13
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:23
+msgid "Página"
+msgstr ""
+
+#~ msgid "Código correcto"
+#~ msgstr "Code vérifié"
+
+#~ msgid "Código incorrecto"
+#~ msgstr "Code Invalide"
+
+#~ msgid "Id inválido"
+#~ msgstr "Id Invalide"
+
+#~ msgid "Login de usuario duplicado"
+#~ msgstr "Login utilisateur dupliqué"
+
+#~ msgid "Email de usuario duplicado"
+#~ msgstr "Courriel de l'utilisateur dupliqué"
+
+#~ msgid "Grupo en uso por:"
+#~ msgstr "Groupe utilisé par:"
+
+#~ msgid "Error al crear el perfil"
+#~ msgstr "Erreur pendant la création de profil"
+
+#~ msgid "Error al actualizar el perfil"
+#~ msgstr "Erreur pendant l'actualisation du profil"
+
+#~ msgid "Perfil en uso por:"
+#~ msgstr "Profil utilisé par:"
+
+#~ msgid "Error al eliminar el perfil"
+#~ msgstr "Erreur pendant la suppression du profil"
+
+#~ msgid "Usuario o acción no indicado"
+#~ msgstr "Utilisateur ou action non défini"
+
+#~ msgid "Realizar Exportación"
+#~ msgstr "Exporter"
+
+#~ msgid "Error de conexión a LDAP"
+#~ msgstr "Erreur de connexion LDAP"
+
+#~ msgid "Servidor Login"
+#~ msgstr "Connexion au serveur"
+
+#~ msgid "Usuario/Clave incorrectos"
+#~ msgstr "Utilisateur/Mot de passe incorrecte"
+
+#~ msgid "El archivo es mayor de "
+#~ msgstr "Fichier plus gros que"
+
+#~ msgid "Confirmar la importación de cuentas"
+#~ msgstr "Confirmer l'importation des comptes"
+
+#~ msgid "Es necesario un usuario de conexión"
+#~ msgstr "Nom d'utilisateur de connexion requis"
+
+#~ msgid "Es necesaria una clave de conexión"
+#~ msgstr "Mot de passe de connexion requis"
+
+#~ msgid "Es necesario el nombre de la BBDD"
+#~ msgstr "Nom de base de données requis"
+
+#~ msgid "Es necesario un nombre de host"
+#~ msgstr "Nom d'hôte requis"
+
+#~ msgid ""
+#~ "No se ha podido realizar la solicitud. Consulte con el administrador."
+#~ msgstr "La requête ne peut aboutir. Veuillez contacter l'administrateur"
+
+#~ msgid "Error al enviar la solicitud"
+#~ msgstr "Erreur à l'envoie de la demande"
+
+#~ msgid "Ayuda Parámetros"
+#~ msgstr "Aide paramètres"
+
+#~ msgid "ERROR: Error en la operación."
+#~ msgstr "ERREUR: Echec de l'opération"
+
+#~ msgid "Fin"
+#~ msgstr "Fin"
+
+#~ msgid "Denegado acceso a"
+#~ msgstr "Accès refusé pour"
+
+#~ msgid "Token de autorización"
+#~ msgstr "Token d'autorisation"
+
+#~ msgid "Acción a realizar"
+#~ msgstr "Action"
+
+#~ msgid "Clave de usuario (opcional)"
+#~ msgstr "Mot de passe de l'utilisateur (facultatif)"
+
+#~ msgid "Cadena a buscar"
+#~ msgstr "Eléments à rechercher"
+
+#~ msgid "Numero de cuentas a mostar en la búsqueda"
+#~ msgstr "Nombre de résultats par page à afficher durant une recherche"
+
+#~ msgid "Item a devolver"
+#~ msgstr "Item à retourner"
+
+#~ msgid "No es posible crear el directorio de backups"
+#~ msgstr "Impossible de créer le dossier de sauvegarde"
+
+#~ msgid "Categoría en uso por:"
+#~ msgstr "Catégorie utilisée par:"
+
+#~ msgid "Modificar Categoría"
+#~ msgstr "Modifier Catégorie"
+
+#~ msgid "No es posible escribir el archivo de configuración"
+#~ msgstr "Impossible d'écrire dans le fichier de configuration"
+
+#~ msgid "Compruebe los permisos del directorio \"config\""
+#~ msgstr "Vérifiez les permissions du dossier \"config\""
+
+#~ msgid "Error procesando línea %s"
+#~ msgstr "Erreur de traitement ligne %s"
+
+#~ msgid "Cuenta importada: %s"
+#~ msgstr "Compte %s importé"
+
+#~ msgid "Cliente en uso por:"
+#~ msgstr "Client utilisé par:"
+
+#~ msgid "Error al añadir los usuarios del grupo"
+#~ msgstr "Erreur pendant l'ajout d'utilisateurs à un groupe"
+
+#~ msgid "Error al actualizar los usuarios del grupo"
+#~ msgstr "Erreur pendant la mise à jour de"
+
+#~ msgid "Tipo mime no soportado"
+#~ msgstr "Types mime non supporté"
+
+#~ msgid "Sesion"
+#~ msgstr "Session"
+
+#~ msgid "El usuario de MySQL ya existe"
+#~ msgstr "L'utilisateur MySQL existe déjà"
+
+#~ msgid "Indique un nuevo usuario o elimine el existente"
+#~ msgstr "Saisissez un nouvel utilisateur ou supprimez celui qui existe déjà"
+
+#~ msgid "Error al establecer permisos de la BBDD"
+#~ msgstr "Erreur pendant l'affectation des permissions de la base de données"
+
+#~ msgid "Faltan parámetros"
+#~ msgstr "Paramètres manquants"
+
+#~ msgid "La versión no es compatible"
+#~ msgstr "Version incompatible"
+
+#~ msgid "Actualice a la última versión de phpPMS"
+#~ msgstr "Mettez à niveau la dernière version de phpPMS"
+
+#~ msgid "Error al obtener la configuración"
+#~ msgstr "Erreur pendant la récupération de la configuration"
+
+#~ msgid "Error al vaciar tabla"
+#~ msgstr "Erreur pendant le nettoyage de la table"
+
+#~ msgid "Usuario actual no es administrador de la aplicación"
+#~ msgstr "L'utilisateur actuel n'est administrateur de l'application"
+
+#~ msgid "No es posible crear el cliente"
+#~ msgstr "Impossible de créer le client"
+
+#~ msgid "Contacte con el desarrollador"
+#~ msgstr "Veuillez contacter le développeur"
+
+#~ msgid "Importar Clientes"
+#~ msgstr "Importer Clients"
+
+#~ msgid "Registros"
+#~ msgstr "Enregistrements"
+
+#~ msgid "Error al obtener los clientes"
+#~ msgstr "Erreur pendant la récupération des clients"
+
+#~ msgid "Error al obtener cuentas"
+#~ msgstr "Erreur pendant la récupération des comptes"
+
+#~ msgid "Error al migrar cuenta"
+#~ msgstr "Erreur pendant l'importation des comptes"
+
+#~ msgid "Error al obtener los grupos de cuentas"
+#~ msgstr "Erreur pendant la récupération des groupes de comptes"
+
+#~ msgid "Importar Grupos de Cuentas"
+#~ msgstr "Importer Groupes de Comptes"
+
+#~ msgid "Error al crear grupos de cuentas"
+#~ msgstr "Erreur pendant la création des groupes de comptes"
+
+#~ msgid "Error al obtener el historico de cuentas"
+#~ msgstr "Erreur pendant la récupération de l'historique des comptes"
+
+#~ msgid "Importar Histórico de Cuentas"
+#~ msgstr "Importer Historique des Comptes"
+
+#~ msgid "Error al crear historico de cuentas"
+#~ msgstr "Erreur pendant la création de l'historique des comptes"
+
+#~ msgid "Error al obtener los archivos de cuentas"
+#~ msgstr "Erreur pendant la récupération des fichiers des comptes"
+
+#~ msgid "Importar Archivos de Cuentas"
+#~ msgstr "Importer Fichiers de Comptes"
+
+#~ msgid "Error al crear archivos de cuentas"
+#~ msgstr "Erreur pendant la création des fichiers de comptes"
+
+#~ msgid "Error al obtener las categorías de cuentas"
+#~ msgstr "Erreur pendant la récupération des catégorie de comtpes"
+
+#~ msgid "Importar Categorías de Cuentas"
+#~ msgstr "Importer Catégories de Comptes"
+
+#~ msgid "Error al crear categorías de cuentas"
+#~ msgstr "Erreur pendant la récupération des catégories de comptes"
+
+#~ msgid "Importar Usuarios"
+#~ msgstr "Importer Utilisateurs"
+
+#~ msgid "Error al crear usuarios"
+#~ msgstr "Erreur pendant la création des utilisateurs"
+
+#~ msgid "Error al obtener los grupos de usuarios"
+#~ msgstr "Erreur pendant la récupération des groupes d'utilisateurs"
+
+#~ msgid "Importar Grupos de Usuarios"
+#~ msgstr "Importer Groupes d'Utilisateurs"
+
+#~ msgid "Error al crear los grupos de usuarios"
+#~ msgstr "Erreur pendant l'ajout des groupes d'utilisateurs"
+
+#~ msgid "Importar Configuración"
+#~ msgstr "Importer Configuration"
+
+#~ msgid "Datos de perfil incorrectos"
+#~ msgstr "Données de profil incorrectes"
+
+#~ msgid "Modificar Perfil"
+#~ msgstr "Modifier Profil"
+
+#~ msgid "No hay categorías para importar"
+#~ msgstr "Il n'y a pas de catégorie à importer"
+
+#~ msgid "No hay clientes para importar"
+#~ msgstr "Il n'y a pas de clients à importer"
+
+#~ msgid "No hay cuentas para importar"
+#~ msgstr "Il n'y a pas de comptes à importer"
+
+#~ msgid "Actualización de la Configuración realizada correctamente."
+#~ msgstr "Mise à jour de la configuration effectuée correctement."
+
+#~ msgid "Modificar Usuario"
+#~ msgstr "Modifier Utilisateur"
+
+#~ msgid "Migrar Grupos"
+#~ msgstr "Migrer les groupes"
+
+#~ msgid "Formato detectado"
+#~ msgstr "Format détecté"
+
+#~ msgid "Gestión de Categorías"
+#~ msgstr "Gestion des catégories"
+
+#~ msgid "Gestión de Clientes"
+#~ msgstr "Gestion des Clients"
+
+#~ msgid "Nuevo estilo visual basado en Material Design Lite by Google"
+#~ msgstr "Nouveau design visuel basé sur le \"Material Design par Google\""
+
+#~ msgid "Usuarios en múltiples grupos"
+#~ msgstr "Les utilisateurs peuvent appartenir à plusieurs groupes"
+
+#~ msgid "Previsualización de imágenes"
+#~ msgstr "Prévisualisation d'images"
+
+#~ msgid "Mostrar claves como imágenes"
+#~ msgstr "Montrer les mots de passe comme images"
+
+#~ msgid "Campos personalizados"
+#~ msgstr "Champs personnalisés"
+
+#~ msgid "API de consultas"
+#~ msgstr "API de consultation"
+
+#~ msgid "Autentificación en 2 pasos"
+#~ msgstr "Authentification à deux facteurs"
+
+#~ msgid "Complejidad de generador de claves"
+#~ msgstr "Générateur de nombres aléatoires avec configuration de complexité"
+
+#~ msgid "Consultas especiales"
+#~ msgstr "Requêtes spécifiques"
+
+#~ msgid "Exportación a XML"
+#~ msgstr "Export XML"
+
+#~ msgid "Clave maestra temporal"
+#~ msgstr "Mot de passe maître temporaire"
+
+#~ msgid "Importación de cuentas desde sysPass, KeePass, KeePassX y CSV"
+#~ msgstr "Comptes importés depuis Keepass, KeepassX et fichiers CSV"
+
+#~ msgid "Optimización del código y mayor rapidez de carga"
+#~ msgstr "Un code optimisé et un chargement plus rapide"
+
+#~ msgid "Mejoras de seguridad en XSS e inyección SQL"
+#~ msgstr ""
+#~ "Améliration de la sécurité afin de prévenir les injections XSS et SQL"
+
+#~ msgid "Pulse aquí para acceder"
+#~ msgstr ""
+#~ "Pressez ici pour vous "
+#~ "connecter"
+
+#~ msgid "Gestión de Usuarios"
+#~ msgstr "Gestion des Utilisateurs"
+
+#~ msgid "Gestión de Grupos"
+#~ msgstr "Gestion des Groupes"
+
+#~ msgid "Gestión de Perfiles"
+#~ msgstr "Gestion des Profils"
+
+#~ msgid "Gestión de Autorizaciones API"
+#~ msgstr "API de gestion des autorisations"
+
+#~ msgid "Introducir código"
+#~ msgstr "Entrer un code"
+
+#~ msgid "Verificar"
+#~ msgstr "Vérifier"
+
+#~ msgid "Buscar en desplegable o introducir"
+#~ msgstr "Chercher dans la liste déroulante ou entrer"
+
+#~ msgid "por"
+#~ msgstr "par"
+
+#~ msgid "Seleccionar grupos secundarios"
+#~ msgstr "Sélectionner les groupes secondaires"
+
+#~ msgid "Seleccionar usuarios"
+#~ msgstr "Sélectionner utilisateurs"
+
+#~ msgid ""
+#~ "Para mejorar/añadir las traducciones, puede colaborar en http:://"
+#~ "translate.syspass.org"
+#~ msgstr ""
+#~ "Afin d'améliorer/ajouter les traductions, vous pouvez vous investir sur "
+#~ "http://translate.syspass.org"
+
+#~ msgid "Añadir extensión"
+#~ msgstr "Ajouter extension"
+
+#~ msgid "Eliminar extensión"
+#~ msgstr "Supprimer extension"
+
+#~ msgid "Atención"
+#~ msgstr "Attention"
+
+#~ msgid "Validez"
+#~ msgstr "Validité"
+
+#~ msgid "Seguro"
+#~ msgstr "Sécurisé"
+
+#~ msgid "Inseguro"
+#~ msgstr "Insécurisé"
+
+#~ msgid "nombre_de_cuenta;cliente;categoría;url;usuario;clave;notas"
+#~ msgstr "nom_de_compte;client;categorie;url;utilisateur;mot_de_passe;notes"
+
+#~ msgid "Importar phpPMS"
+#~ msgstr "Importer phpPMS"
+
+#~ msgid "Usuario BBDD"
+#~ msgstr "Utilisateur BDD"
+
+#~ msgid "Indicar el usuario de conexión a la base de datos de phpPMS."
+#~ msgstr "Indique l'utilisateur de connexion à la base de données phpPMS."
+
+#~ msgid "Clave BBDD"
+#~ msgstr "Mot de passe BDD"
+
+#~ msgid "Nombre BBDD"
+#~ msgstr "Nom BDD"
+
+#~ msgid "Indicar el nombre de la base de datos de phpPMS."
+#~ msgstr "Indiwue le nom de la base de données de phpPMS."
+
+#~ msgid "Servidor BBDD"
+#~ msgstr "Serveur BDD"
+
+#~ msgid "Indicar el servidor de la base de datos de phpPMS."
+#~ msgstr "Indique le serveur de la base de données phpPMS."
+
+#~ msgid "Confirmar"
+#~ msgstr "Confirmer"
+
+#~ msgid "Los datos actuales serán borrados (excepto el usuario actual)"
+#~ msgstr "Les données actuelles seront supprimées(sauf l'utilisateur actuel)"
+
+#~ msgid "Iniciar"
+#~ msgstr "Démarrer"
+
+#~ msgid "Instalación "
+#~ msgstr "Installation"
+
+#~ msgid "Crear cuenta de admin de sysPass"
+#~ msgstr "Créer le compte admin sysPass"
+
+#~ msgid "Login de usuario con permisos de administrador de MySQL"
+#~ msgstr "Un utilisateur avec des droits d'administration sur la BDD"
+
+#~ msgid "Nombre del servidor de la base de datos de sysPass"
+#~ msgstr "Nom du serveur de base de données sysPass"
+
+#~ msgid "Comprobar conexión con LDAP"
+#~ msgstr "Vérifier les connexions LDAP"
+
+#~ msgid "Nuevas Características"
+#~ msgstr "Nouvelles Fonctionnalités "
+
+#~ msgid "Login del Usuario"
+#~ msgstr "Login de l'utilisateur"
+
+#~ msgid "Nueva Clave"
+#~ msgstr "Nouveau Mot de passe"
+
+#~ msgid "Solicitar cambio de clave"
+#~ msgstr "Demander le changement de mot de passe"
+
+#~ msgid "Añadir nueva cuenta"
+#~ msgstr "Ajouter nouveau compte"
+
+#~ msgid "Borrar cuenta"
+#~ msgstr "Supprimer compte"
+
+#~ msgid "Borrar"
+#~ msgstr "Supprimer"
+
+#~ msgid "Configuración general"
+#~ msgstr "Configuration générale"
+
+#~ msgid "Cambiar clave maestra"
+#~ msgstr "Changer mot de passe maître"
+
+#~ msgid "Realizar copia de seguridad"
+#~ msgstr "Effectuer une sauvegarde"
+
+#~ msgid "No usado"
+#~ msgstr "Pas utilisé"
+
+#~ msgid "Global ON"
+#~ msgstr "Global ON"
+
+#~ msgid "CPP"
+#~ msgstr "APP"
+
+#~ msgid "Autenticación"
+#~ msgstr "Authentification"
+
+#~ msgid "Autenticación en 2 pasos"
+#~ msgstr "Authentification à deux facteurs"
+
+#~ 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 ""
+#~ "Active l'authentification à 2 facteurs nécessitant la saisie d'un token "
+#~ "qui a été généré par une application tiers comme Google Authenticator."
+
+#~ msgid ""
+#~ "Escanee el código QR proporcionado y a continuación introduzca la clave "
+#~ "de 6 dígitos."
+#~ msgstr "Scannez le code QR fournis puis saisissez le code à 6 chiffres."
+
+#~ msgid "Activar"
+#~ msgstr "Activer"
+
+#~ 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"
+
+#~ msgid "Código"
+#~ msgstr "Code"
+
+#~ msgid ""
+#~ "Una vez activada, sólo es posible acceder si se dispone del dispositivo "
+#~ "generador de códigos asociado."
+#~ msgstr ""
+#~ "Une fois activé, vous ne pouvez vous connecter que si vous avez "
+#~ "l'équipement permettant de générer le code associé."
+
+#~ msgid "Cambiar clave de usuario"
+#~ msgstr "Changer mot de passe utilisateur"
+
+#~ msgid "Introducir Código de Seguridad"
+#~ msgstr "Saisir le code de sécurité"
+
+#~ msgid "Admin. Aplicación"
+#~ msgstr "Admin. Application"
+
+#~ msgid "Admin. Cuentas"
+#~ msgstr "Admin. Comptes"
+
+#~ msgid "Añadir filtro"
+#~ msgstr "Ajouter filtre"
+
+#~ msgid "Eliminar filtro"
+#~ msgstr "Supprimer filtre"
+
+#~ msgid "> Usar texto y crear nuevo"
+#~ msgstr "> Utiliser le texte et créer un nouveau"
+
+#~ msgid "Seleccionar o escribir para crear uno nuevo"
+#~ msgstr "Sélectionner ou écrire pour en créer un nouveau"
+
+#~ msgid "Clave (Repetir)"
+#~ msgstr "Mot de passe (à confirmer)"
diff --git a/inc/locales/hu_HU/LC_MESSAGES/messages.mo b/inc/locales/hu_HU/LC_MESSAGES/messages.mo
index 4282ae03..60bf81fd 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 1e3b3753..c85bb2da 100644
--- a/inc/locales/hu_HU/LC_MESSAGES/messages.po
+++ b/inc/locales/hu_HU/LC_MESSAGES/messages.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: sysPass\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-10-25 23:36+0100\n"
-"PO-Revision-Date: 2015-10-25 23:36+0100\n"
+"POT-Creation-Date: 2016-01-10 19:27+0100\n"
+"PO-Revision-Date: 2016-01-10 19:27+0100\n"
"Last-Translator: nuxsmin \n"
"Language-Team: \n"
"Language: hu_HU\n"
@@ -23,105 +23,136 @@ msgstr ""
"X-Poedit-SearchPath-0: ../../../..\n"
# "INVALID QUERY"
-#: ../../../../ajax/ajax_2fa.php:37 ../../../../ajax/ajax_accountSave.php:42
-#: ../../../../ajax/ajax_appMgmtSave.php:43
-#: ../../../../ajax/ajax_backup.php:41 ../../../../ajax/ajax_checkLdap.php:42
-#: ../../../../ajax/ajax_configSave.php:44 ../../../../ajax/ajax_files.php:42
-#: ../../../../ajax/ajax_getFiles.php:47 ../../../../ajax/ajax_import.php:50
-#: ../../../../ajax/ajax_migrate.php:46 ../../../../ajax/ajax_passReset.php:40
-#: ../../../../ajax/ajax_search.php:42
-#: ../../../../ajax/ajax_sendRequest.php:42
-#: ../../../../ajax/ajax_userPrefsSave.php:43
+#: ../../../../ajax/ajax_2fa.php:41 ../../../../ajax/ajax_accFavorites.php:42
+#: ../../../../ajax/ajax_accountSave.php:51
+#: ../../../../ajax/ajax_appMgmtSave.php:56
+#: ../../../../ajax/ajax_appMgmtSearch.php:48
+#: ../../../../ajax/ajax_backup.php:47
+#: ../../../../ajax/ajax_checkConnection.php:45
+#: ../../../../ajax/ajax_configSave.php:58 ../../../../ajax/ajax_files.php:52
+#: ../../../../ajax/ajax_files.php:67 ../../../../ajax/ajax_getFiles.php:51
+#: ../../../../ajax/ajax_import.php:54 ../../../../ajax/ajax_migrate.php:50
+#: ../../../../ajax/ajax_passReset.php:46 ../../../../ajax/ajax_search.php:46
+#: ../../../../ajax/ajax_sendRequest.php:52
+#: ../../../../ajax/ajax_userPrefsSave.php:52
msgid "CONSULTA INVÁLIDA"
msgstr "Érvénytelen lekérdezés"
# "Incorrect login"
-#: ../../../../ajax/ajax_2fa.php:48
+#: ../../../../ajax/ajax_2fa.php:57
#, fuzzy
msgid "Código correcto"
msgstr "Hibás felhasználónév vagy jelszó"
# "Incorrect login"
-#: ../../../../ajax/ajax_2fa.php:51 ../../../../ajax/ajax_userPrefsSave.php:99
+#: ../../../../ajax/ajax_2fa.php:60
+#: ../../../../ajax/ajax_userPrefsSave.php:109
#, fuzzy
msgid "Código incorrecto"
msgstr "Hibás felhasználónév vagy jelszó"
+# "Invalid Action"
+#: ../../../../ajax/ajax_accFavorites.php:50
+#: ../../../../ajax/ajax_accountSave.php:122
+#: ../../../../ajax/ajax_accountSave.php:260
+#: ../../../../ajax/ajax_appMgmtSave.php:606
+#: ../../../../ajax/ajax_appMgmtSearch.php:101
+#: ../../../../ajax/ajax_configSave.php:429
+#: ../../../../ajax/ajax_files.php:208
+#: ../../../../ajax/ajax_userPrefsSave.php:123
+msgid "Acción Inválida"
+msgstr "Érvénytelen Akció"
+
+#: ../../../../ajax/ajax_accFavorites.php:55
+msgid "Favorito añadido"
+msgstr ""
+
+# "Error on creating users"
+#: ../../../../ajax/ajax_accFavorites.php:58
+#, fuzzy
+msgid "Error al añadir favorito"
+msgstr "Hiba a profil létrehozása közben"
+
+# "User deleted"
+#: ../../../../ajax/ajax_accFavorites.php:61
+#, fuzzy
+msgid "Favorito eliminado"
+msgstr "Felhasználó törölve"
+
+# "Error on user deletion"
+#: ../../../../ajax/ajax_accFavorites.php:64
+#, fuzzy
+msgid "Error al eliminar favorito"
+msgstr "Hiba a felhasználó törlése közben"
+
# "Session not started or timeout"
-#: ../../../../ajax/ajax_accountSave.php:36
-#: ../../../../ajax/ajax_appMgmtSave.php:37
-#: ../../../../ajax/ajax_backup.php:35 ../../../../ajax/ajax_checkLdap.php:36
-#: ../../../../ajax/ajax_configSave.php:38 ../../../../ajax/ajax_import.php:36
-#: ../../../../ajax/ajax_migrate.php:36
-#: ../../../../ajax/ajax_sendRequest.php:36
-#: ../../../../ajax/ajax_userPrefsSave.php:37
-#: ../../../../ajax/ajax_viewpass.php:37
+#: ../../../../ajax/ajax_accountSave.php:45
+#: ../../../../ajax/ajax_appMgmtSave.php:50
+#: ../../../../ajax/ajax_appMgmtSearch.php:42
+#: ../../../../ajax/ajax_backup.php:41
+#: ../../../../ajax/ajax_checkConnection.php:39
+#: ../../../../ajax/ajax_configSave.php:52 ../../../../ajax/ajax_import.php:40
+#: ../../../../ajax/ajax_migrate.php:40
+#: ../../../../ajax/ajax_sendRequest.php:46
+#: ../../../../ajax/ajax_userPrefsSave.php:46
+#: ../../../../ajax/ajax_viewpass.php:44 ../../../../ajax/ajax_wiki.php:37
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:78
-#: ../../../../ajax/ajax_accountSave.php:93
+#: ../../../../ajax/ajax_accountSave.php:87
+#: ../../../../ajax/ajax_accountSave.php:102
msgid "Es necesario un nombre de cuenta"
msgstr "Fiók név szükséges"
# "Customer name needed"
-#: ../../../../ajax/ajax_accountSave.php:80
-#: ../../../../ajax/ajax_accountSave.php:91
-#: ../../../../ajax/ajax_appMgmtSave.php:329
+#: ../../../../ajax/ajax_accountSave.php:89
+#: ../../../../ajax/ajax_accountSave.php:100
+#: ../../../../ajax/ajax_appMgmtSave.php:343
msgid "Es necesario un nombre de cliente"
msgstr "Ügyfél név szükséges"
# "Username needed"
-#: ../../../../ajax/ajax_accountSave.php:82
-#: ../../../../ajax/ajax_accountSave.php:95
+#: ../../../../ajax/ajax_accountSave.php:91
+#: ../../../../ajax/ajax_accountSave.php:104
msgid "Es necesario un usuario"
msgstr "Felhasználónév szükséges"
# "Password needed"
-#: ../../../../ajax/ajax_accountSave.php:84
-#: ../../../../ajax/ajax_accountSave.php:106
+#: ../../../../ajax/ajax_accountSave.php:93
+#: ../../../../ajax/ajax_accountSave.php:115
#, fuzzy
msgid "Es necesaria una clave"
msgstr "Jelszó szükséges"
# "Category name needed"
-#: ../../../../ajax/ajax_accountSave.php:86
-#: ../../../../ajax/ajax_accountSave.php:97
+#: ../../../../ajax/ajax_accountSave.php:95
+#: ../../../../ajax/ajax_accountSave.php:106
#, fuzzy
msgid "Es necesario una categoría"
msgstr "Jelszó szükséges"
# "Invalid Id"
-#: ../../../../ajax/ajax_accountSave.php:101
#: ../../../../ajax/ajax_accountSave.php:110
+#: ../../../../ajax/ajax_accountSave.php:119
msgid "Id inválido"
msgstr "Érvénytelen Id"
-# "Invalid Action"
-#: ../../../../ajax/ajax_accountSave.php:113
-#: ../../../../ajax/ajax_accountSave.php:263
-#: ../../../../ajax/ajax_appMgmtSave.php:535
-#: ../../../../ajax/ajax_configSave.php:334
-#: ../../../../ajax/ajax_userPrefsSave.php:113 ../../../../api.php:53
-msgid "Acción Inválida"
-msgstr "Érvénytelen Akció"
-
# "Passwords mismatch"
-#: ../../../../ajax/ajax_accountSave.php:121
-#: ../../../../ajax/ajax_appMgmtSave.php:112
-#: ../../../../ajax/ajax_appMgmtSave.php:149
-#: ../../../../ajax/ajax_backup.php:68
+#: ../../../../ajax/ajax_accountSave.php:130
+#: ../../../../ajax/ajax_appMgmtSave.php:124
+#: ../../../../ajax/ajax_appMgmtSave.php:161
+#: ../../../../ajax/ajax_backup.php:70
msgid "Las claves no coinciden"
msgstr "A jelszó nem egyezik"
# "Account added"
-#: ../../../../ajax/ajax_accountSave.php:173
+#: ../../../../ajax/ajax_accountSave.php:184
msgid "Cuenta creada"
msgstr "Fiók hozzáadva"
# "Error on account creation"
-#: ../../../../ajax/ajax_accountSave.php:176
+#: ../../../../ajax/ajax_accountSave.php:187
msgid "Error al crear la cuenta"
msgstr "Hiba a fiók létrehozása közben"
@@ -131,777 +162,889 @@ msgid "Sin cambios"
msgstr "Nincsenek változások"
# "Account updated"
-#: ../../../../ajax/ajax_accountSave.php:223
+#: ../../../../ajax/ajax_accountSave.php:220
msgid "Cuenta actualizada"
msgstr "Fiók frissítve"
# "Error on updating account"
-#: ../../../../ajax/ajax_accountSave.php:226
+#: ../../../../ajax/ajax_accountSave.php:223
msgid "Error al modificar la cuenta"
msgstr "Hiba a fiók frissítése közben"
# "Account deleted"
-#: ../../../../ajax/ajax_accountSave.php:233
+#: ../../../../ajax/ajax_accountSave.php:232
+#: ../../../../ajax/ajax_appMgmtSave.php:601
msgid "Cuenta eliminada"
msgstr "Fiók törölve"
# "Error on account deletion"
-#: ../../../../ajax/ajax_accountSave.php:236
+#: ../../../../ajax/ajax_accountSave.php:235
+#: ../../../../ajax/ajax_appMgmtSave.php:604
msgid "Error al eliminar la cuenta"
msgstr "Hiba a fiók törlése közben"
# "Password updated"
-#: ../../../../ajax/ajax_accountSave.php:246
-#: ../../../../ajax/ajax_appMgmtSave.php:153
-#: ../../../../ajax/ajax_passReset.php:75
+#: ../../../../ajax/ajax_accountSave.php:243
+#: ../../../../ajax/ajax_appMgmtSave.php:165
+#: ../../../../ajax/ajax_passReset.php:85
+#: ../../../../ajax/ajax_passReset.php:89
msgid "Clave actualizada"
msgstr "Jelszó frissítve"
# "Error on updating password"
-#: ../../../../ajax/ajax_accountSave.php:249
+#: ../../../../ajax/ajax_accountSave.php:246
msgid "Error al actualizar la clave"
msgstr "Hiba a jelszó frissítése közben"
# "Account restored"
-#: ../../../../ajax/ajax_accountSave.php:256
+#: ../../../../ajax/ajax_accountSave.php:253
msgid "Cuenta restaurada"
msgstr "Fiók restaurált"
# "Error on restoring account"
-#: ../../../../ajax/ajax_accountSave.php:259
+#: ../../../../ajax/ajax_accountSave.php:256
msgid "Error al restaurar cuenta"
msgstr "Hiba történt helyreállítása számla"
# "User"
-#: ../../../../ajax/ajax_appMgmtData.php:54
+#: ../../../../ajax/ajax_appMgmtData.php:60
#, fuzzy
msgid "Ver Usuario"
msgstr "Felhasználó részletek"
# "Edit User"
-#: ../../../../ajax/ajax_appMgmtData.php:61
-#: ../../../../web/UsersMgmtC.class.php:137
+#: ../../../../ajax/ajax_appMgmtData.php:67
+#: ../../../../inc/SP/Controller/Grids.class.php:469
+#: ../../../../inc/SP/Controller/Grids.class.php:470
msgid "Editar Usuario"
msgstr "Felhasználó módosítás"
# "New User"
-#: ../../../../ajax/ajax_appMgmtData.php:67
-#: ../../../../inc/UserBase.class.php:383
-#: ../../../../web/UsersMgmtC.class.php:122
+#: ../../../../ajax/ajax_appMgmtData.php:73
+#: ../../../../inc/SP/Controller/Grids.class.php:446
+#: ../../../../inc/SP/Controller/Grids.class.php:447
+#: ../../../../inc/SP/Mgmt/User/UserBase.class.php:393
msgid "Nuevo Usuario"
msgstr "Új felhasználó"
# "Group"
-#: ../../../../ajax/ajax_appMgmtData.php:73
+#: ../../../../ajax/ajax_appMgmtData.php:79
#, fuzzy
msgid "Ver Grupo"
msgstr "Nézet"
# "Edit Group"
-#: ../../../../ajax/ajax_appMgmtData.php:80
-#: ../../../../web/UsersMgmtC.class.php:203
+#: ../../../../ajax/ajax_appMgmtData.php:86
+#: ../../../../inc/SP/Controller/Grids.class.php:565
+#: ../../../../inc/SP/Controller/Grids.class.php:566
msgid "Editar Grupo"
msgstr "Csoport módosítás"
# "New Group"
-#: ../../../../ajax/ajax_appMgmtData.php:86
-#: ../../../../inc/Groups.class.php:152 ../../../../inc/Groups.class.php:253
-#: ../../../../web/UsersMgmtC.class.php:195
+#: ../../../../ajax/ajax_appMgmtData.php:92
+#: ../../../../inc/SP/Controller/Grids.class.php:553
+#: ../../../../inc/SP/Controller/Grids.class.php:554
+#: ../../../../inc/SP/Mgmt/User/Groups.class.php:165
+#: ../../../../inc/SP/Mgmt/User/Groups.class.php:273
msgid "Nuevo Grupo"
msgstr "Új csoport"
# "Profile"
-#: ../../../../ajax/ajax_appMgmtData.php:92
+#: ../../../../ajax/ajax_appMgmtData.php:98
#, fuzzy
msgid "Ver Perfil"
msgstr "Nézet"
# "Edit Profile"
-#: ../../../../ajax/ajax_appMgmtData.php:99
-#: ../../../../web/UsersMgmtC.class.php:268
+#: ../../../../ajax/ajax_appMgmtData.php:105
+#: ../../../../inc/SP/Controller/Grids.class.php:649
+#: ../../../../inc/SP/Controller/Grids.class.php:650
msgid "Editar Perfil"
msgstr "Profil módosítás"
# "New Profile"
-#: ../../../../ajax/ajax_appMgmtData.php:105
-#: ../../../../inc/ProfileBase.class.php:512
-#: ../../../../web/UsersMgmtC.class.php:253
+#: ../../../../ajax/ajax_appMgmtData.php:111
+#: ../../../../inc/SP/Controller/Grids.class.php:626
+#: ../../../../inc/SP/Controller/Grids.class.php:627
+#: ../../../../inc/SP/Mgmt/User/ProfileBase.class.php:518
msgid "Nuevo Perfil"
msgstr "Új profil"
# "Customer"
-#: ../../../../ajax/ajax_appMgmtData.php:111
+#: ../../../../ajax/ajax_appMgmtData.php:117
#, fuzzy
msgid "Ver Cliente"
msgstr "Nézet"
# "Edit Customer"
-#: ../../../../ajax/ajax_appMgmtData.php:118
-#: ../../../../web/AccountsMgmtC.class.php:153
+#: ../../../../ajax/ajax_appMgmtData.php:124
+#: ../../../../inc/SP/Controller/Grids.class.php:198
+#: ../../../../inc/SP/Controller/Grids.class.php:199
msgid "Editar Cliente"
msgstr "Ügyfél módosítás"
# "New Customer"
-#: ../../../../ajax/ajax_appMgmtData.php:124
-#: ../../../../inc/Customer.class.php:65
-#: ../../../../web/AccountsMgmtC.class.php:146
+#: ../../../../ajax/ajax_appMgmtData.php:130
+#: ../../../../inc/SP/Controller/Grids.class.php:186
+#: ../../../../inc/SP/Controller/Grids.class.php:187
+#: ../../../../inc/SP/Mgmt/Customer.class.php:342
msgid "Nuevo Cliente"
msgstr "Új ügyfél"
# "Category"
-#: ../../../../ajax/ajax_appMgmtData.php:130
+#: ../../../../ajax/ajax_appMgmtData.php:136
#, fuzzy
msgid "Ver Categoría"
msgstr "Nézet"
# "Edit Category"
-#: ../../../../ajax/ajax_appMgmtData.php:137
-#: ../../../../web/AccountsMgmtC.class.php:95
+#: ../../../../ajax/ajax_appMgmtData.php:143
+#: ../../../../inc/SP/Controller/Grids.class.php:104
+#: ../../../../inc/SP/Controller/Grids.class.php:105
msgid "Editar Categoría"
msgstr "Kategória módosítás"
# "New Category"
-#: ../../../../ajax/ajax_appMgmtData.php:143
-#: ../../../../inc/Category.class.php:83
-#: ../../../../web/AccountsMgmtC.class.php:87
-#: ../../../../inc/themes/classic/account.inc:53
-#: ../../../../inc/themes/material-blue/account.inc:62
+#: ../../../../ajax/ajax_appMgmtData.php:149
+#: ../../../../inc/SP/Controller/Grids.class.php:92
+#: ../../../../inc/SP/Controller/Grids.class.php:93
+#: ../../../../inc/SP/Mgmt/Category.class.php:348
+#: ../../../../inc/themes/classic/account.inc:59
+#: ../../../../inc/themes/material-blue/account.inc:75
msgid "Nueva Categoría"
msgstr "Új Kategória"
# "Update"
-#: ../../../../ajax/ajax_appMgmtData.php:149
+#: ../../../../ajax/ajax_appMgmtData.php:155
#, fuzzy
msgid "Ver Autorización"
msgstr "Nézet"
# "Update"
-#: ../../../../ajax/ajax_appMgmtData.php:156
-#: ../../../../inc/ApiTokens.class.php:189
-#: ../../../../web/UsersMgmtC.class.php:400
+#: ../../../../ajax/ajax_appMgmtData.php:162
+#: ../../../../inc/SP/Api/ApiTokens.class.php:110
+#: ../../../../inc/SP/Controller/Grids.class.php:709
+#: ../../../../inc/SP/Controller/Grids.class.php:710
#, fuzzy
msgid "Nueva Autorización"
msgstr "Új Kategória"
# Start Update
-#: ../../../../ajax/ajax_appMgmtData.php:162
-#: ../../../../web/UsersMgmtC.class.php:415
+#: ../../../../ajax/ajax_appMgmtData.php:168
+#: ../../../../inc/SP/Controller/Grids.class.php:732
+#: ../../../../inc/SP/Controller/Grids.class.php:733
#, fuzzy
msgid "Editar Autorización"
msgstr "Módosítás"
# "New Group"
-#: ../../../../ajax/ajax_appMgmtData.php:168
-#: ../../../../web/AccountsMgmtC.class.php:274
+#: ../../../../ajax/ajax_appMgmtData.php:174
+#: ../../../../inc/SP/Controller/Grids.class.php:259
+#: ../../../../inc/SP/Controller/Grids.class.php:260
#, fuzzy
msgid "Nuevo Campo"
msgstr "Új felhasználó"
# "Edit Password"
-#: ../../../../ajax/ajax_appMgmtData.php:174
-#: ../../../../web/AccountsMgmtC.class.php:281
+#: ../../../../ajax/ajax_appMgmtData.php:180
+#: ../../../../inc/SP/Controller/Grids.class.php:271
+#: ../../../../inc/SP/Controller/Grids.class.php:272
#, fuzzy
msgid "Editar Campo"
msgstr "Módosítás"
+#: ../../../../ajax/ajax_appMgmtData.php:186
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:196
+msgid "Ver Enlace Público"
+msgstr ""
+
# "Username required"
-#: ../../../../ajax/ajax_appMgmtSave.php:86
+#: ../../../../ajax/ajax_appMgmtSave.php:98
msgid "Es necesario un nombre de usuario"
msgstr "Felhasználónév szükséges"
# "Login required"
-#: ../../../../ajax/ajax_appMgmtSave.php:88
+#: ../../../../ajax/ajax_appMgmtSave.php:100
msgid "Es necesario un login"
msgstr "Bejelentkezés szükséges"
# "Profile required"
-#: ../../../../ajax/ajax_appMgmtSave.php:90
+#: ../../../../ajax/ajax_appMgmtSave.php:102
msgid "Es necesario un perfil"
msgstr "Profil szükséges"
# "Group required"
-#: ../../../../ajax/ajax_appMgmtSave.php:92
+#: ../../../../ajax/ajax_appMgmtSave.php:104
msgid "Es necesario un grupo"
msgstr "Csoport szükséges"
# "Email required"
-#: ../../../../ajax/ajax_appMgmtSave.php:94
+#: ../../../../ajax/ajax_appMgmtSave.php:106
msgid "Es necesario un email"
msgstr "Email szükséges"
# "Ey, this is a DEMO!!"
-#: ../../../../ajax/ajax_appMgmtSave.php:96
-#: ../../../../ajax/ajax_appMgmtSave.php:145
-#: ../../../../ajax/ajax_appMgmtSave.php:160
-#: ../../../../ajax/ajax_backup.php:54
-#: ../../../../ajax/ajax_configSave.php:307
-#: ../../../../ajax/ajax_import.php:40 ../../../../ajax/ajax_migrate.php:40
-#: ../../../../ajax/ajax_userPrefsSave.php:88
+#: ../../../../ajax/ajax_appMgmtSave.php:108
+#: ../../../../ajax/ajax_appMgmtSave.php:157
+#: ../../../../ajax/ajax_appMgmtSave.php:172
+#: ../../../../ajax/ajax_backup.php:60
+#: ../../../../ajax/ajax_configSave.php:379
+#: ../../../../ajax/ajax_import.php:44 ../../../../ajax/ajax_migrate.php:44
+#: ../../../../ajax/ajax_userPrefsSave.php:98
msgid "Ey, esto es una DEMO!!"
msgstr "Aj, ez egy próbaverzió"
# "Duplicated user login "
-#: ../../../../ajax/ajax_appMgmtSave.php:101
+#: ../../../../ajax/ajax_appMgmtSave.php:113
msgid "Login de usuario duplicado"
msgstr "Dupla felhasználó bejelentkezés"
# "Duplicated user email"
-#: ../../../../ajax/ajax_appMgmtSave.php:104
+#: ../../../../ajax/ajax_appMgmtSave.php:116
msgid "Email de usuario duplicado"
msgstr "Kettõzött felhasználó Email"
# "Password cannot be blank"
-#: ../../../../ajax/ajax_appMgmtSave.php:110
-#: ../../../../ajax/ajax_appMgmtSave.php:147
+#: ../../../../ajax/ajax_appMgmtSave.php:122
+#: ../../../../ajax/ajax_appMgmtSave.php:159
msgid "La clave no puede estar en blanco"
msgstr "A jelszó nem lehet üres"
# "User added"
-#: ../../../../ajax/ajax_appMgmtSave.php:123
+#: ../../../../ajax/ajax_appMgmtSave.php:135
msgid "Usuario creado"
msgstr "Felhasználó hozzáadva"
# "Error on creating user"
-#: ../../../../ajax/ajax_appMgmtSave.php:126
+#: ../../../../ajax/ajax_appMgmtSave.php:138
msgid "Error al crear el usuario"
msgstr "Hiba a felhasználó létrehozása közben"
# "User updated"
-#: ../../../../ajax/ajax_appMgmtSave.php:136
-#: ../../../../inc/UserMigrate.class.php:89
+#: ../../../../ajax/ajax_appMgmtSave.php:148
+#: ../../../../inc/SP/Mgmt/User/UserMigrate.class.php:98
msgid "Usuario actualizado"
msgstr "Felhasználó frissítve"
# "Error on user update"
-#: ../../../../ajax/ajax_appMgmtSave.php:139
+#: ../../../../ajax/ajax_appMgmtSave.php:151
msgid "Error al actualizar el usuario"
msgstr "Hiba a felhasználó frissítése közben"
# "Error on updating password"
-#: ../../../../ajax/ajax_appMgmtSave.php:156
-#: ../../../../ajax/ajax_passReset.php:79
+#: ../../../../ajax/ajax_appMgmtSave.php:168
+#: ../../../../ajax/ajax_passReset.php:93
+#: ../../../../ajax/ajax_passReset.php:96
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:162
+#: ../../../../ajax/ajax_appMgmtSave.php:174
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:166
+#: ../../../../ajax/ajax_appMgmtSave.php:178
msgid "Usuario eliminado"
msgstr "Felhasználó törölve"
# "Error on user deletion"
-#: ../../../../ajax/ajax_appMgmtSave.php:169
+#: ../../../../ajax/ajax_appMgmtSave.php:181
msgid "Error al eliminar el usuario"
msgstr "Hiba a felhasználó törlése közben"
# "Group name required"
-#: ../../../../ajax/ajax_appMgmtSave.php:184
+#: ../../../../ajax/ajax_appMgmtSave.php:196
msgid "Es necesario un nombre de grupo"
msgstr "Csoport név szükséges"
# "Duplicated group name"
-#: ../../../../ajax/ajax_appMgmtSave.php:192
+#: ../../../../ajax/ajax_appMgmtSave.php:204
msgid "Nombre de grupo duplicado"
msgstr "Kettõzött csoport név"
# "Group added"
-#: ../../../../ajax/ajax_appMgmtSave.php:204
+#: ../../../../ajax/ajax_appMgmtSave.php:216
msgid "Grupo creado"
msgstr "Csoport hozzáadva"
# "Error on group creation"
-#: ../../../../ajax/ajax_appMgmtSave.php:206
+#: ../../../../ajax/ajax_appMgmtSave.php:218
msgid "Error al crear el grupo"
msgstr "Hiba a csoport létrehozása közben"
# "Group updated"
-#: ../../../../ajax/ajax_appMgmtSave.php:217
+#: ../../../../ajax/ajax_appMgmtSave.php:229
msgid "Grupo actualizado"
msgstr "Csoport frissítve"
# "Error on updating group"
-#: ../../../../ajax/ajax_appMgmtSave.php:220
+#: ../../../../ajax/ajax_appMgmtSave.php:232
msgid "Error al actualizar el grupo"
msgstr "Hiba a csoport frissítése közben"
# "Users"
-#: ../../../../ajax/ajax_appMgmtSave.php:229
-#: ../../../../ajax/ajax_appMgmtSave.php:306
-#: ../../../../inc/CustomFieldsBase.class.php:109
-#: ../../../../inc/themes/classic/account.inc:112
+#: ../../../../ajax/ajax_appMgmtSave.php:241
+#: ../../../../ajax/ajax_appMgmtSave.php:320
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:111
+#: ../../../../inc/themes/classic/account.inc:121
#: ../../../../inc/themes/classic/groups.inc:24
#: ../../../../inc/themes/classic/profiles.inc:85
-#: ../../../../inc/themes/material-blue/account.inc:138
-#: ../../../../inc/themes/material-blue/groups.inc:32
-#: ../../../../inc/themes/material-blue/profiles.inc:99
+#: ../../../../inc/themes/material-blue/account.inc:157
+#: ../../../../inc/themes/material-blue/groups.inc:35
+#: ../../../../inc/themes/material-blue/profiles.inc:106
msgid "Usuarios"
msgstr "Felhasználók"
# "Accounts"
-#: ../../../../ajax/ajax_appMgmtSave.php:233
-#: ../../../../inc/Category.class.php:266
-#: ../../../../inc/CustomFieldsBase.class.php:106
-#: ../../../../inc/Customer.class.php:150
+#: ../../../../ajax/ajax_appMgmtSave.php:245
+#: ../../../../inc/SP/Mgmt/Category.class.php:93
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:108
+#: ../../../../inc/SP/Mgmt/Customer.class.php:163
#: ../../../../inc/themes/classic/profiles.inc:15
-#: ../../../../inc/themes/material-blue/config.inc:176
-#: ../../../../inc/themes/material-blue/profiles.inc:19
+#: ../../../../inc/themes/material-blue/config-accounts.inc:4
+#: ../../../../inc/themes/material-blue/profiles.inc:21
msgid "Cuentas"
msgstr "Fiókok"
# "Unable to delete"
-#: ../../../../ajax/ajax_appMgmtSave.php:236
-#: ../../../../ajax/ajax_appMgmtSave.php:308
-#: ../../../../inc/Category.class.php:119
-#: ../../../../inc/Customer.class.php:150
+#: ../../../../ajax/ajax_appMgmtSave.php:248
+#: ../../../../ajax/ajax_appMgmtSave.php:322
+#: ../../../../inc/SP/Mgmt/Category.class.php:58
+#: ../../../../inc/SP/Mgmt/Customer.class.php:163
msgid "No es posible eliminar"
msgstr "Nem lehet törölni"
# "Group in use by:"
-#: ../../../../ajax/ajax_appMgmtSave.php:236
+#: ../../../../ajax/ajax_appMgmtSave.php:248
msgid "Grupo en uso por:"
msgstr "Csoportot használja a:"
# "Group deleted"
-#: ../../../../ajax/ajax_appMgmtSave.php:241
+#: ../../../../ajax/ajax_appMgmtSave.php:253
msgid "Grupo eliminado"
msgstr "Csoport törölve"
# "Error on group deletion"
-#: ../../../../ajax/ajax_appMgmtSave.php:244
+#: ../../../../ajax/ajax_appMgmtSave.php:256
msgid "Error al eliminar el grupo"
msgstr "Hiba a csoport törlése közben"
# "Profile name needed"
-#: ../../../../ajax/ajax_appMgmtSave.php:283
+#: ../../../../ajax/ajax_appMgmtSave.php:297
msgid "Es necesario un nombre de perfil"
msgstr "Profil név szükséges"
# "Duplicated profile name"
-#: ../../../../ajax/ajax_appMgmtSave.php:285
+#: ../../../../ajax/ajax_appMgmtSave.php:299
msgid "Nombre de perfil duplicado"
msgstr "Kettözõtt profil név"
# "Profile added"
-#: ../../../../ajax/ajax_appMgmtSave.php:290
+#: ../../../../ajax/ajax_appMgmtSave.php:304
msgid "Perfil creado"
msgstr "Profil hozzáadva"
# "Error on creating profile"
-#: ../../../../ajax/ajax_appMgmtSave.php:293
+#: ../../../../ajax/ajax_appMgmtSave.php:307
msgid "Error al crear el perfil"
msgstr "Hiba a profil létrehozása közben"
# "Profile updated"
-#: ../../../../ajax/ajax_appMgmtSave.php:296
+#: ../../../../ajax/ajax_appMgmtSave.php:310
msgid "Perfil actualizado"
msgstr "Profil frissítve"
# "Error on updating profile"
-#: ../../../../ajax/ajax_appMgmtSave.php:299
+#: ../../../../ajax/ajax_appMgmtSave.php:313
msgid "Error al actualizar el perfil"
msgstr "Hiba a profil frissítése közben"
# "Profiles in use by:"
-#: ../../../../ajax/ajax_appMgmtSave.php:308
+#: ../../../../ajax/ajax_appMgmtSave.php:322
msgid "Perfil en uso por:"
msgstr "A profilt használja:"
# "Profile deleted"
-#: ../../../../ajax/ajax_appMgmtSave.php:311
+#: ../../../../ajax/ajax_appMgmtSave.php:325
msgid "Perfil eliminado"
msgstr "Profil törölve"
# "Error on profile deletion"
-#: ../../../../ajax/ajax_appMgmtSave.php:314
+#: ../../../../ajax/ajax_appMgmtSave.php:328
msgid "Error al eliminar el perfil"
msgstr "Hiba a profil törlése közben"
# "Customer added"
-#: ../../../../ajax/ajax_appMgmtSave.php:349
+#: ../../../../ajax/ajax_appMgmtSave.php:363
msgid "Cliente creado"
msgstr "Ügyfél hozzáadva"
# "Customer updated"
-#: ../../../../ajax/ajax_appMgmtSave.php:364
+#: ../../../../ajax/ajax_appMgmtSave.php:378
msgid "Cliente actualizado"
msgstr "Ügyfél frissítve"
# "Customer deleted"
-#: ../../../../ajax/ajax_appMgmtSave.php:374
+#: ../../../../ajax/ajax_appMgmtSave.php:388
msgid "Cliente eliminado"
msgstr "Ügyfél törölve"
# "Category name needed"
-#: ../../../../ajax/ajax_appMgmtSave.php:388
+#: ../../../../ajax/ajax_appMgmtSave.php:402
msgid "Es necesario un nombre de categoría"
msgstr "Kategória név szükséges"
# "Category added"
-#: ../../../../ajax/ajax_appMgmtSave.php:408
+#: ../../../../ajax/ajax_appMgmtSave.php:422
msgid "Categoría creada"
msgstr "Kategória hozzáadva"
# "Category updated"
-#: ../../../../ajax/ajax_appMgmtSave.php:423
+#: ../../../../ajax/ajax_appMgmtSave.php:437
msgid "Categoría actualizada"
msgstr "Kategória frissítve"
# "Category deleted"
-#: ../../../../ajax/ajax_appMgmtSave.php:434
+#: ../../../../ajax/ajax_appMgmtSave.php:448
msgid "Categoría eliminada"
msgstr "Kategória törölve"
# "User/Pass not entered"
-#: ../../../../ajax/ajax_appMgmtSave.php:450
+#: ../../../../ajax/ajax_appMgmtSave.php:464
#, fuzzy
msgid "Usuario o acción no indicado"
msgstr "Felhasználó/jelszó nem lett kitöltve"
# "Account Activation"
-#: ../../../../ajax/ajax_appMgmtSave.php:460
+#: ../../../../ajax/ajax_appMgmtSave.php:474
#, fuzzy
msgid "Autorización creada"
msgstr "Fiók hozzáadva"
# "Configuration updated"
-#: ../../../../ajax/ajax_appMgmtSave.php:468
+#: ../../../../ajax/ajax_appMgmtSave.php:482
#, fuzzy
msgid "Autorización actualizada"
msgstr "Fiók frissítve"
# "Account deleted"
-#: ../../../../ajax/ajax_appMgmtSave.php:478
+#: ../../../../ajax/ajax_appMgmtSave.php:492
#, fuzzy
msgid "Autorización eliminada"
msgstr "Fiók törölve"
# "Duplicated group name"
-#: ../../../../ajax/ajax_appMgmtSave.php:495
+#: ../../../../ajax/ajax_appMgmtSave.php:509
#, fuzzy
msgid "Nombre del campo no indicado"
msgstr "Ügyfél név"
# "File type not allowed"
-#: ../../../../ajax/ajax_appMgmtSave.php:497
+#: ../../../../ajax/ajax_appMgmtSave.php:511
#, fuzzy
msgid "Tipo del campo no indicado"
msgstr "Fájltípus nem engedélyezett"
-#: ../../../../ajax/ajax_appMgmtSave.php:499
+#: ../../../../ajax/ajax_appMgmtSave.php:513
msgid "Módulo del campo no indicado"
msgstr ""
# "Group added"
-#: ../../../../ajax/ajax_appMgmtSave.php:513
+#: ../../../../ajax/ajax_appMgmtSave.php:527
#, fuzzy
msgid "Campo creado"
msgstr "Felhasználó hozzáadva"
# "Group updated"
-#: ../../../../ajax/ajax_appMgmtSave.php:522
+#: ../../../../ajax/ajax_appMgmtSave.php:536
#, fuzzy
msgid "Campo actualizado"
msgstr "Frissítve"
# "Group deleted"
-#: ../../../../ajax/ajax_appMgmtSave.php:532
+#: ../../../../ajax/ajax_appMgmtSave.php:546
#, fuzzy
msgid "Campo eliminado"
msgstr "Felhasználó törölve"
-# "Make Backup"
-#: ../../../../ajax/ajax_backup.php:58 ../../../../ajax/ajax_backup.php:63
-#: ../../../../inc/themes/classic/backup.inc:54
-msgid "Realizar Backup"
-msgstr "Archívum készítés"
+# "Customer added"
+#: ../../../../ajax/ajax_appMgmtSave.php:564
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:153
+#, fuzzy
+msgid "Enlace creado"
+msgstr "Ügyfél hozzáadva"
+
+# "Customer deleted"
+#: ../../../../ajax/ajax_appMgmtSave.php:573
+#: ../../../../inc/SP/Mgmt/PublicLinkBase.class.php:276
+#, fuzzy
+msgid "Enlace eliminado"
+msgstr "Ügyfél törölve"
+
+# "Password updated"
+#: ../../../../ajax/ajax_appMgmtSave.php:582
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:231
+#, fuzzy
+msgid "Enlace actualizado"
+msgstr "Jelszó frissítve"
+
+# "Invalid file ID"
+#: ../../../../ajax/ajax_appMgmtSave.php:587
+#: ../../../../ajax/ajax_files.php:149 ../../../../ajax/ajax_files.php:201
+msgid "No es un ID de archivo válido"
+msgstr "Helytelen fájl ID"
+
+# "File deleted"
+#: ../../../../ajax/ajax_appMgmtSave.php:589
+#: ../../../../ajax/ajax_files.php:203
+#: ../../../../inc/SP/Mgmt/Files.class.php:138
+msgid "Archivo eliminado"
+msgstr "Fájl törölve"
+
+# "Error on file deletion"
+#: ../../../../ajax/ajax_appMgmtSave.php:592
+#: ../../../../ajax/ajax_files.php:206
+#: ../../../../inc/SP/Mgmt/Files.class.php:145
+msgid "Error al eliminar el archivo"
+msgstr "Hiba a fájlok törlése közben"
# "Error while doing backup"
-#: ../../../../ajax/ajax_backup.php:58 ../../../../ajax/ajax_backup.php:60
+#: ../../../../ajax/ajax_backup.php:64
+#: ../../../../inc/SP/Core/Backup.class.php:71
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:60 ../../../../ajax/ajax_backup.php:74
-#: ../../../../ajax/ajax_checkLdap.php:58 ../../../../inc/Import.class.php:128
-#: ../../../../inc/Migrate.class.php:92
+#: ../../../../ajax/ajax_backup.php:64 ../../../../ajax/ajax_backup.php:74
+#: ../../../../ajax/ajax_checkConnection.php:63
+#: ../../../../ajax/ajax_checkConnection.php:89
+#: ../../../../inc/SP/Import/Import.class.php:140
+#: ../../../../inc/SP/Import/Migrate.class.php:101
+#: ../../../../inc/SP/Mgmt/PublicLinkBase.class.php:272
+#: ../../../../inc/SP/Mgmt/PublicLinkBase.class.php:304
msgid "Revise el registro de eventos para más detalles"
msgstr "Részletes leírást az esemény naplóban olvashat"
-# Application and database backup successfully done
-#: ../../../../ajax/ajax_backup.php:63
-#, 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:65
+#: ../../../../ajax/ajax_backup.php:67
msgid "Proceso de backup finalizado"
msgstr "Archiválás kész"
-# "Enable debug"
-#: ../../../../ajax/ajax_backup.php:72 ../../../../ajax/ajax_backup.php:77
-#, fuzzy
-msgid "Realizar Exportación"
-msgstr "Archívum készítés"
-
-# "Error on creating accounts files"
-#: ../../../../ajax/ajax_backup.php:72
-#, 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:74
#, fuzzy
msgid "Error al realizar la exportación"
msgstr "Hiba Archiválás közben"
-# "Application successfully updated"
-#: ../../../../ajax/ajax_backup.php:77
-#, fuzzy
-msgid "Exportación de cuentas realizada correctamente"
-msgstr "A beállítások elmentve"
-
# "Backup process finished"
-#: ../../../../ajax/ajax_backup.php:79
+#: ../../../../ajax/ajax_backup.php:77
#, fuzzy
msgid "Proceso de exportación finalizado"
msgstr "Archiválás kész"
# "LDAP parameters are not set"
-#: ../../../../ajax/ajax_checkLdap.php:52 ../../../../inc/Ldap.class.php:259
+#: ../../../../ajax/ajax_checkConnection.php:57
+#: ../../../../inc/SP/Auth/Ldap.class.php:287
msgid "Los parámetros de LDAP no están configurados"
msgstr "LDAP paraméterek nem lettek elmentve"
# "LDAP connection error"
-#: ../../../../ajax/ajax_checkLdap.php:58
+#: ../../../../ajax/ajax_checkConnection.php:63
msgid "Error de conexión a LDAP"
msgstr "LDAP kapcsolódási hiba"
# "LDAP connection OK"
-#: ../../../../ajax/ajax_checkLdap.php:60
+#: ../../../../ajax/ajax_checkConnection.php:65
msgid "Conexión a LDAP correcta"
msgstr "LDAP kapcsolat"
# "Objects found"
-#: ../../../../ajax/ajax_checkLdap.php:60
+#: ../../../../ajax/ajax_checkConnection.php:65
msgid "Objetos encontrados"
msgstr "Objektum találatok"
+# "LDAP parameters are not set"
+#: ../../../../ajax/ajax_checkConnection.php:73
+#, fuzzy
+msgid "Los parámetros de DokuWiki no están configurados"
+msgstr "LDAP paraméterek nem lettek elmentve"
+
+#: ../../../../ajax/ajax_checkConnection.php:80
+msgid "Error"
+msgstr ""
+
+# "LDAP connection OK"
+#: ../../../../ajax/ajax_checkConnection.php:83
+#, fuzzy
+msgid "Conexión correcta"
+msgstr "LDAP kapcsolat"
+
+# "Version"
+#: ../../../../ajax/ajax_checkConnection.php:84
+#: ../../../../inc/SP/Core/Init.class.php:536
+#: ../../../../inc/themes/classic/info.inc:33
+#: ../../../../inc/themes/material-blue/info.inc:33
+msgid "Versión"
+msgstr "Verzió"
+
+# "LDAP connection error"
+#: ../../../../ajax/ajax_checkConnection.php:89
+#, fuzzy
+msgid "Error de conexión a DokuWiki"
+msgstr "LDAP kapcsolódási hiba"
+
# "Edit Configuration"
-#: ../../../../ajax/ajax_configSave.php:58
+#: ../../../../ajax/ajax_configSave.php:72
msgid "Modificar Configuración"
msgstr "Konfiguráció szerkesztése"
+# "Missing Mail parameters"
+#: ../../../../ajax/ajax_configSave.php:105
+#, fuzzy
+msgid "Faltan parámetros de syslog remoto"
+msgstr "Hiányzó mail paraméter"
+
+# "User disabled"
+#: ../../../../ajax/ajax_configSave.php:113
+#, fuzzy
+msgid "Syslog remoto deshabilitado"
+msgstr "Felhasználó letiltva"
+
# "Maximum file upload size in 16MB"
-#: ../../../../ajax/ajax_configSave.php:101
+#: ../../../../ajax/ajax_configSave.php:135
#, fuzzy
msgid "El tamaño máximo por archivo es de 16MB"
msgstr "Maximálisan feltölthetõ fájl mérete 16MB"
# "Extension not allowed"
-#: ../../../../ajax/ajax_configSave.php:109 ../../../../js/strings.js.php:46
+#: ../../../../ajax/ajax_configSave.php:142 ../../../../js/strings.js.php:46
msgid "Extensión no permitida"
msgstr "A kiterjesztés nem engedélyezett"
# "Missing Mail parameters"
-#: ../../../../ajax/ajax_configSave.php:128
+#: ../../../../ajax/ajax_configSave.php:172
#, fuzzy
msgid "Faltan parámetros de Proxy"
msgstr "Hiányzó Wiki paraméter"
# "User disabled"
-#: ../../../../ajax/ajax_configSave.php:136
+#: ../../../../ajax/ajax_configSave.php:180
#, fuzzy
msgid "Proxy habiltado"
msgstr "Felhasználó letiltva"
# "User disabled"
-#: ../../../../ajax/ajax_configSave.php:140
+#: ../../../../ajax/ajax_configSave.php:184
#, fuzzy
msgid "Proxy deshabilitado"
msgstr "Felhasználó letiltva"
# "Action"
-#: ../../../../ajax/ajax_configSave.php:143
-#: ../../../../ajax/ajax_configSave.php:167
-#: ../../../../ajax/ajax_configSave.php:201
-#: ../../../../ajax/ajax_configSave.php:240
+#: ../../../../ajax/ajax_configSave.php:187
+#: ../../../../ajax/ajax_configSave.php:237
+#: ../../../../ajax/ajax_configSave.php:271
+#: ../../../../ajax/ajax_configSave.php:310
#, fuzzy
msgid "Sección"
msgstr "Akció"
# "General"
-#: ../../../../ajax/ajax_configSave.php:143
-#: ../../../../web/ConfigC.class.php:108
+#: ../../../../ajax/ajax_configSave.php:187
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:125
#: ../../../../inc/themes/classic/profiles.inc:61
-#: ../../../../inc/themes/material-blue/profiles.inc:72
+#: ../../../../inc/themes/material-blue/profiles.inc:79
msgid "General"
msgstr "Általános"
# "Missing Wiki parameters"
-#: ../../../../ajax/ajax_configSave.php:153
+#: ../../../../ajax/ajax_configSave.php:197
msgid "Faltan parámetros de Wiki"
msgstr "Hiányzó Wiki paraméter"
# "Disabled"
-#: ../../../../ajax/ajax_configSave.php:160
+#: ../../../../ajax/ajax_configSave.php:204
#, fuzzy
msgid "Wiki habiltada"
msgstr "Inaktív"
# "Disabled"
-#: ../../../../ajax/ajax_configSave.php:164
+#: ../../../../ajax/ajax_configSave.php:208
#, fuzzy
msgid "Wiki deshabilitada"
msgstr "Inaktív"
+# "Missing Wiki parameters"
+#: ../../../../ajax/ajax_configSave.php:221
+#, fuzzy
+msgid "Faltan parámetros de DokuWiki"
+msgstr "Hiányzó Wiki paraméter"
+
+# "Disabled"
+#: ../../../../ajax/ajax_configSave.php:230
+#, fuzzy
+msgid "DokuWiki habiltada"
+msgstr "Inaktív"
+
+# "Disabled"
+#: ../../../../ajax/ajax_configSave.php:234
+#, fuzzy
+msgid "DokuWiki deshabilitada"
+msgstr "Inaktív"
+
# "Wiki"
-#: ../../../../ajax/ajax_configSave.php:167
-#: ../../../../web/ConfigC.class.php:244
+#: ../../../../ajax/ajax_configSave.php:237
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:270
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:88
#: ../../../../inc/themes/classic/wiki.inc:4
-#: ../../../../inc/themes/material-blue/wiki.inc:4
+#: ../../../../inc/themes/material-blue/wiki.inc:9
msgid "Wiki"
msgstr "Wiki"
# "Missing LDAP parameters"
-#: ../../../../ajax/ajax_configSave.php:182
+#: ../../../../ajax/ajax_configSave.php:252
msgid "Faltan parámetros de LDAP"
msgstr "Hiányzó LDAP paraméter"
# "Disabled"
-#: ../../../../ajax/ajax_configSave.php:194
+#: ../../../../ajax/ajax_configSave.php:264
#, fuzzy
msgid "LDAP habiltado"
msgstr "Inaktív"
# "Disabled"
-#: ../../../../ajax/ajax_configSave.php:198
+#: ../../../../ajax/ajax_configSave.php:268
#, fuzzy
msgid "LDAP deshabilitado"
msgstr "Inaktív"
# "LDAP"
-#: ../../../../ajax/ajax_configSave.php:201
-#: ../../../../web/ConfigC.class.php:276
+#: ../../../../ajax/ajax_configSave.php:271
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:302
#: ../../../../inc/themes/classic/ldap.inc:4
-#: ../../../../inc/themes/material-blue/ldap.inc:4
+#: ../../../../inc/themes/material-blue/ldap.inc:6
msgid "LDAP"
msgstr "LDAP"
# "Missing Mail parameters"
-#: ../../../../ajax/ajax_configSave.php:216
+#: ../../../../ajax/ajax_configSave.php:286
msgid "Faltan parámetros de Correo"
msgstr "Hiányzó mail paraméter"
# "Email sent"
-#: ../../../../ajax/ajax_configSave.php:231
+#: ../../../../ajax/ajax_configSave.php:301
#, fuzzy
msgid "Correo habiltado"
msgstr "Email elküldve"
# "User disabled"
-#: ../../../../ajax/ajax_configSave.php:237
+#: ../../../../ajax/ajax_configSave.php:307
#, fuzzy
msgid "Correo deshabilitado"
msgstr "Felhasználó letiltva"
# "Mail"
-#: ../../../../ajax/ajax_configSave.php:240
-#: ../../../../web/ConfigC.class.php:306
+#: ../../../../ajax/ajax_configSave.php:310
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:332
#: ../../../../inc/themes/classic/mail.inc:4
-#: ../../../../inc/themes/material-blue/mail.inc:4
+#: ../../../../inc/themes/material-blue/mail.inc:6
msgid "Correo"
msgstr "Mail"
+# "Error on retrieving configuration"
+#: ../../../../ajax/ajax_configSave.php:316
+#, fuzzy
+msgid "Error al guardar la configuración"
+msgstr "Hiba a konfiguráció betöltése közben"
+
# "Configuration updated"
-#: ../../../../ajax/ajax_configSave.php:262
+#: ../../../../ajax/ajax_configSave.php:334
msgid "Configuración actualizada"
msgstr "Beállítások frissítve"
# "Master Password updated"
-#: ../../../../ajax/ajax_configSave.php:271
-#: ../../../../ajax/ajax_configSave.php:317
-#: ../../../../ajax/ajax_viewpass.php:61
-#: ../../../../inc/Controller.class.php:169
+#: ../../../../ajax/ajax_configSave.php:343
+#: ../../../../ajax/ajax_configSave.php:389
+#: ../../../../ajax/ajax_configSave.php:394
+#: ../../../../ajax/ajax_viewpass.php:69
+#: ../../../../inc/SP/Controller/Controller.class.php:195
msgid "Clave maestra actualizada"
msgstr "A mester jelszó frissítve"
# "Restart session to update"
-#: ../../../../ajax/ajax_configSave.php:271
-#: ../../../../ajax/ajax_viewpass.php:61
-#: ../../../../inc/Controller.class.php:169
+#: ../../../../ajax/ajax_configSave.php:343
+#: ../../../../ajax/ajax_viewpass.php:69
+#: ../../../../inc/SP/Controller/Controller.class.php:195
msgid "Reinicie la sesión para cambiarla"
msgstr "Indítsa újra a munkamenetot a frissítéshez"
# "Master Password needed"
-#: ../../../../ajax/ajax_configSave.php:273
+#: ../../../../ajax/ajax_configSave.php:345
msgid "Clave maestra no indicada"
msgstr "Mester jelszó szükséges"
# "Password update must be confirmed"
-#: ../../../../ajax/ajax_configSave.php:275
+#: ../../../../ajax/ajax_configSave.php:347
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:279
+#: ../../../../ajax/ajax_configSave.php:351
msgid "Las claves son idénticas"
msgstr "A jelszó megegyezik"
# "Master passwords mismatch"
-#: ../../../../ajax/ajax_configSave.php:281
+#: ../../../../ajax/ajax_configSave.php:353
msgid "Las claves maestras no coinciden"
msgstr "A mester jelszó nem egyezik"
# "Current master password mismatch"
-#: ../../../../ajax/ajax_configSave.php:283
+#: ../../../../ajax/ajax_configSave.php:355
msgid "La clave maestra actual no coincide"
msgstr "A jelenlegi mester jelszó nem egyezik"
# "Error on updating accounts' passwords"
-#: ../../../../ajax/ajax_configSave.php:292
+#: ../../../../ajax/ajax_configSave.php:364
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:298
+#: ../../../../ajax/ajax_configSave.php:370
#, fuzzy
msgid "Errores al actualizar las claves de las cuentas del histórico"
msgstr "Hiba a fiókok jelszavainak frissítése közben"
# "Error on updating accounts' passwords"
-#: ../../../../ajax/ajax_configSave.php:302
+#: ../../../../ajax/ajax_configSave.php:374
#, fuzzy
msgid "Errores al actualizar datos de campos personalizados"
msgstr "Hiba a fiókok jelszavainak frissítése közben"
# "Update Master Password"
-#: ../../../../ajax/ajax_configSave.php:315
-#: ../../../../inc/Account.class.php:512
+#: ../../../../ajax/ajax_configSave.php:386
+#: ../../../../inc/SP/Account/Account.class.php:499
msgid "Actualizar Clave Maestra"
msgstr "Frissítse a mester jelszót"
# "Error on saving master password's hash"
-#: ../../../../ajax/ajax_configSave.php:319
+#: ../../../../ajax/ajax_configSave.php:397
+#: ../../../../ajax/ajax_configSave.php:402
msgid "Error al guardar el hash de la clave maestra"
msgstr "Hiba a mester jelszó hash-ének elmentése közben"
-# "Generate random password"
-#: ../../../../ajax/ajax_configSave.php:327
+# "Generated Password"
+#: ../../../../ajax/ajax_configSave.php:412
+#: ../../../../ajax/ajax_configSave.php:418
#, fuzzy
-msgid "Generar Clave Temporal"
-msgstr "Generate Temporary Password"
+msgid "Clave Temporal Generada"
+msgstr "Generált Jelszó"
# "Password"
-#: ../../../../ajax/ajax_configSave.php:327
-#: ../../../../inc/CustomFieldsBase.class.php:87
-#: ../../../../inc/themes/classic/account.inc:86
-#: ../../../../inc/themes/classic/editpass.inc:25
+#: ../../../../ajax/ajax_configSave.php:413
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:89
+#: ../../../../inc/themes/classic/account-editpass.inc:25
+#: ../../../../inc/themes/classic/account.inc:93
+#: ../../../../inc/themes/classic/config-proxy.inc:45
#: ../../../../inc/themes/classic/encryption.inc:143
#: ../../../../inc/themes/classic/install.inc:38
#: ../../../../inc/themes/classic/install.inc:39
@@ -913,101 +1056,116 @@ msgstr "Generate Temporary Password"
#: ../../../../inc/themes/classic/users.inc:75
#: ../../../../inc/themes/classic/userspass.inc:8
#: ../../../../inc/themes/classic/userspass.inc:11
-#: ../../../../inc/themes/material-blue/account.inc:99
-#: ../../../../inc/themes/material-blue/account.inc:104
-#: ../../../../inc/themes/material-blue/config.inc:395
-#: ../../../../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/encryption.inc:161
+#: ../../../../inc/themes/classic/wiki.inc:188
+#: ../../../../inc/themes/material-blue/account-editpass.inc:28
+#: ../../../../inc/themes/material-blue/account-editpass.inc:33
+#: ../../../../inc/themes/material-blue/account-editpass.inc:43
+#: ../../../../inc/themes/material-blue/account-link.inc:47
+#: ../../../../inc/themes/material-blue/account.inc:113
+#: ../../../../inc/themes/material-blue/account.inc:119
+#: ../../../../inc/themes/material-blue/config-proxy.inc:63
+#: ../../../../inc/themes/material-blue/encryption.inc:163
#: ../../../../inc/themes/material-blue/install.inc:47
-#: ../../../../inc/themes/material-blue/ldap.inc:105
+#: ../../../../inc/themes/material-blue/ldap.inc:107
#: ../../../../inc/themes/material-blue/login.inc:18
#: ../../../../inc/themes/material-blue/login.inc:41
-#: ../../../../inc/themes/material-blue/mail.inc:73
-#: ../../../../inc/themes/material-blue/mail.inc:80
+#: ../../../../inc/themes/material-blue/mail.inc:75
+#: ../../../../inc/themes/material-blue/mail.inc:82
#: ../../../../inc/themes/material-blue/passreset.inc:30
-#: ../../../../inc/themes/material-blue/users.inc:89
-#: ../../../../inc/themes/material-blue/users.inc:96
+#: ../../../../inc/themes/material-blue/users.inc:90
+#: ../../../../inc/themes/material-blue/users.inc:97
#: ../../../../inc/themes/material-blue/userspass.inc:8
#: ../../../../inc/themes/material-blue/userspass.inc:13
+#: ../../../../inc/themes/material-blue/wiki.inc:216
+#: ../../../../inc/themes/material-blue/wiki.inc:223
msgid "Clave"
msgstr "Jelszó"
-# "Generated Password"
-#: ../../../../ajax/ajax_configSave.php:329
-#, fuzzy
-msgid "Clave Temporal Generada"
-msgstr "Generált Jelszó"
-
# "Generate random password"
-#: ../../../../ajax/ajax_configSave.php:331
+#: ../../../../ajax/ajax_configSave.php:421
+#: ../../../../ajax/ajax_configSave.php:426
#, fuzzy
msgid "Error al generar clave temporal"
msgstr "Generate Temporary Password"
# "User/Pass not entered"
-#: ../../../../ajax/ajax_doLogin.php:49
+#: ../../../../ajax/ajax_doLogin.php:61
msgid "Usuario/Clave no introducidos"
msgstr "Felhasználó/jelszó nem lett kitöltve"
# "Session start (LDAP)"
-#: ../../../../ajax/ajax_doLogin.php:61
+#: ../../../../ajax/ajax_doLogin.php:73
#, fuzzy
msgid "Inicio sesión"
msgstr "munkamenet elindult (LDAP)"
# "Server"
-#: ../../../../ajax/ajax_doLogin.php:66
+#: ../../../../ajax/ajax_doLogin.php:78
#, fuzzy
msgid "Servidor Login"
msgstr "Belépés"
# "Error on saving LDAP user data"
-#: ../../../../ajax/ajax_doLogin.php:72
+#: ../../../../ajax/ajax_doLogin.php:85
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:75 ../../../../ajax/ajax_doLogin.php:83
-#: ../../../../ajax/ajax_doLogin.php:135 ../../../../ajax/ajax_doLogin.php:179
-#: ../../../../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:185
-#: ../../../../inc/Crypt.class.php:196
-#: ../../../../inc/XmlImportBase.class.php:79
+#: ../../../../ajax/ajax_doLogin.php:88 ../../../../ajax/ajax_doLogin.php:97
+#: ../../../../ajax/ajax_doLogin.php:160 ../../../../ajax/ajax_doLogin.php:209
+#: ../../../../inc/SP/Api/ApiTokens.class.php:107
+#: ../../../../inc/SP/Api/ApiTokens.class.php:140
+#: ../../../../inc/SP/Api/ApiTokens.class.php:168
+#: ../../../../inc/SP/Api/ApiTokens.class.php:189
+#: ../../../../inc/SP/Api/ApiTokens.class.php:233
+#: ../../../../inc/SP/Api/ApiTokens.class.php:259
+#: ../../../../inc/SP/Api/ApiTokensUtil.class.php:180
+#: ../../../../inc/SP/Core/Crypt.class.php:195
+#: ../../../../inc/SP/Core/Crypt.class.php:206
+#: ../../../../inc/SP/Import/XmlImportBase.class.php:81
+#: ../../../../inc/SP/Mgmt/PublicLinkBase.class.php:272
+#: ../../../../inc/SP/Mgmt/PublicLinkBase.class.php:304
msgid "Error interno"
msgstr "Belsõ hiba"
# "Error on updating user password in BD"
-#: ../../../../ajax/ajax_doLogin.php:80
+#: ../../../../ajax/ajax_doLogin.php:94
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:88 ../../../../ajax/ajax_doLogin.php:113
+#: ../../../../ajax/ajax_doLogin.php:102 ../../../../ajax/ajax_doLogin.php:127
+#: ../../../../ajax/ajax_doLogin.php:137
msgid "Login incorrecto"
msgstr "Hibás felhasználónév vagy jelszó"
# "User"
-#: ../../../../ajax/ajax_doLogin.php:89 ../../../../ajax/ajax_doLogin.php:96
-#: ../../../../ajax/ajax_doLogin.php:103 ../../../../ajax/ajax_doLogin.php:114
-#: ../../../../ajax/ajax_doLogin.php:124 ../../../../ajax/ajax_doLogin.php:174
-#: ../../../../inc/ApiTokens.class.php:190
-#: ../../../../inc/ApiTokens.class.php:308 ../../../../inc/Auth.class.php:108
-#: ../../../../inc/Init.class.php:466 ../../../../inc/Ldap.class.php:290
-#: ../../../../inc/Ldap.class.php:303 ../../../../inc/Ldap.class.php:311
-#: ../../../../inc/UserBase.class.php:384
-#: ../../../../inc/UserBase.class.php:528 ../../../../res/test.php:64
-#: ../../../../web/SearchC.class.php:305
-#: ../../../../web/UsersMgmtC.class.php:393
-#: ../../../../inc/themes/classic/account.inc:73
-#: ../../../../inc/themes/classic/editpass.inc:21
-#: ../../../../inc/themes/classic/eventlog.inc:23
+#: ../../../../ajax/ajax_doLogin.php:103 ../../../../ajax/ajax_doLogin.php:110
+#: ../../../../ajax/ajax_doLogin.php:117 ../../../../ajax/ajax_doLogin.php:128
+#: ../../../../ajax/ajax_doLogin.php:138 ../../../../ajax/ajax_doLogin.php:148
+#: ../../../../ajax/ajax_doLogin.php:200
+#: ../../../../inc/SP/Api/ApiTokens.class.php:111
+#: ../../../../inc/SP/Api/ApiTokens.class.php:237
+#: ../../../../inc/SP/Auth/Auth.class.php:122
+#: ../../../../inc/SP/Auth/Ldap.class.php:318
+#: ../../../../inc/SP/Auth/Ldap.class.php:332
+#: ../../../../inc/SP/Auth/Ldap.class.php:341
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:520
+#: ../../../../inc/SP/Controller/Grids.class.php:752
+#: ../../../../inc/SP/Controller/Grids.class.php:827
+#: ../../../../inc/SP/Core/Init.class.php:463
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:156
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:200
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:234
+#: ../../../../inc/SP/Mgmt/User/UserBase.class.php:394
+#: ../../../../inc/SP/Mgmt/User/UserBase.class.php:544
+#: ../../../../res/test.php:64
+#: ../../../../inc/themes/classic/account-editpass.inc:21
+#: ../../../../inc/themes/classic/account-request.inc:17
+#: ../../../../inc/themes/classic/account.inc:80
+#: ../../../../inc/themes/classic/config-proxy.inc:36
+#: ../../../../inc/themes/classic/datasearch-rows.inc:45
+#: ../../../../inc/themes/classic/eventlog.inc:26
#: ../../../../inc/themes/classic/info.inc:39
#: ../../../../inc/themes/classic/install.inc:27
#: ../../../../inc/themes/classic/install.inc:28
@@ -1015,1554 +1173,2085 @@ msgstr "Hibás felhasználónév vagy jelszó"
#: ../../../../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:89
+#: ../../../../inc/themes/classic/search.inc:62
#: ../../../../inc/themes/classic/tokens.inc:8
-#: ../../../../inc/themes/material-blue/account.inc:84
-#: ../../../../inc/themes/material-blue/config.inc:381
-#: ../../../../inc/themes/material-blue/editpass.inc:22
-#: ../../../../inc/themes/material-blue/eventlog.inc:23
+#: ../../../../inc/themes/classic/wiki.inc:172
+#: ../../../../inc/themes/material-blue/account-editpass.inc:24
+#: ../../../../inc/themes/material-blue/account-link.inc:36
+#: ../../../../inc/themes/material-blue/account.inc:98
+#: ../../../../inc/themes/material-blue/config-proxy.inc:49
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:45
+#: ../../../../inc/themes/material-blue/eventlog.inc:28
#: ../../../../inc/themes/material-blue/info.inc:39
-#: ../../../../inc/themes/material-blue/ldap.inc:86
+#: ../../../../inc/themes/material-blue/ldap.inc:88
#: ../../../../inc/themes/material-blue/login.inc:11
#: ../../../../inc/themes/material-blue/login.inc:34
-#: ../../../../inc/themes/material-blue/mail.inc:61
-#: ../../../../inc/themes/material-blue/mail.inc:67
+#: ../../../../inc/themes/material-blue/mail.inc:63
+#: ../../../../inc/themes/material-blue/mail.inc:69
#: ../../../../inc/themes/material-blue/passreset.inc:16
-#: ../../../../inc/themes/material-blue/request.inc:20
-#: ../../../../inc/themes/material-blue/search.inc:91
+#: ../../../../inc/themes/material-blue/publiclinks.inc:18
+#: ../../../../inc/themes/material-blue/request.inc:22
#: ../../../../inc/themes/material-blue/tokens.inc:8
+#: ../../../../inc/themes/material-blue/wiki.inc:197
+#: ../../../../inc/themes/material-blue/wiki.inc:210
msgid "Usuario"
msgstr "Felhasználó"
# "Wrong user/pass"
-#: ../../../../ajax/ajax_doLogin.php:92 ../../../../ajax/ajax_doLogin.php:106
-#: ../../../../ajax/ajax_doLogin.php:117
+#: ../../../../ajax/ajax_doLogin.php:106 ../../../../ajax/ajax_doLogin.php:120
+#: ../../../../ajax/ajax_doLogin.php:131 ../../../../ajax/ajax_doLogin.php:142
msgid "Usuario/Clave incorrectos"
msgstr "Hibás felhasználó/jelszó"
# Account Expired
-#: ../../../../ajax/ajax_doLogin.php:95 ../../../../ajax/ajax_doLogin.php:99
+#: ../../../../ajax/ajax_doLogin.php:109 ../../../../ajax/ajax_doLogin.php:113
#, fuzzy
msgid "Cuenta expirada"
msgstr "Fiók"
# "The user have no associated groups"
-#: ../../../../ajax/ajax_doLogin.php:102
+#: ../../../../ajax/ajax_doLogin.php:116
msgid "El usuario no tiene grupos asociados"
msgstr "a felhasználó nincs csoporthoz társítva"
+# "Enable Authentication"
+#: ../../../../ajax/ajax_doLogin.php:139
+#: ../../../../inc/themes/material-blue/preferences-security.inc:6
+#, fuzzy
+msgid "Autentificación"
+msgstr "Engedélyezése Hitelesítés"
+
# "User disabled"
-#: ../../../../ajax/ajax_doLogin.php:123 ../../../../ajax/ajax_doLogin.php:127
+#: ../../../../ajax/ajax_doLogin.php:147 ../../../../ajax/ajax_doLogin.php:151
msgid "Usuario deshabilitado"
msgstr "Felhasználó letiltva"
# "Error on retrieving user data from DB"
-#: ../../../../ajax/ajax_doLogin.php:132
+#: ../../../../ajax/ajax_doLogin.php:157
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:142
+#: ../../../../ajax/ajax_doLogin.php:167
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:149 ../../../../ajax/ajax_doLogin.php:152
+#: ../../../../ajax/ajax_doLogin.php:175 ../../../../ajax/ajax_doLogin.php:178
msgid "Clave maestra incorrecta"
msgstr "Érvénytelen mester jelszó"
# "Profile"
-#: ../../../../ajax/ajax_doLogin.php:175
-#: ../../../../inc/ProfileBase.class.php:512
-#: ../../../../inc/ProfileBase.class.php:550
-#: ../../../../inc/ProfileBase.class.php:593
-#: ../../../../web/UsersMgmtC.class.php:90
+#: ../../../../ajax/ajax_doLogin.php:201
+#: ../../../../inc/SP/Controller/Grids.class.php:503
+#: ../../../../inc/SP/Mgmt/User/ProfileBase.class.php:519
+#: ../../../../inc/SP/Mgmt/User/ProfileBase.class.php:563
+#: ../../../../inc/SP/Mgmt/User/ProfileBase.class.php:612
#: ../../../../inc/themes/classic/users.inc:37
-#: ../../../../inc/themes/material-blue/users.inc:43
+#: ../../../../inc/themes/material-blue/users.inc:44
msgid "Perfil"
msgstr "Profil"
# "Group"
-#: ../../../../ajax/ajax_doLogin.php:176 ../../../../inc/Groups.class.php:158
-#: ../../../../inc/Groups.class.php:259 ../../../../inc/Groups.class.php:375
-#: ../../../../inc/Ldap.class.php:213 ../../../../inc/Ldap.class.php:226
-#: ../../../../inc/Ldap.class.php:236 ../../../../inc/Ldap.class.php:385
-#: ../../../../web/UsersMgmtC.class.php:91
+#: ../../../../ajax/ajax_doLogin.php:202
+#: ../../../../inc/SP/Auth/Ldap.class.php:225
+#: ../../../../inc/SP/Auth/Ldap.class.php:239
+#: ../../../../inc/SP/Auth/Ldap.class.php:250
+#: ../../../../inc/SP/Auth/Ldap.class.php:416
+#: ../../../../inc/SP/Controller/Grids.class.php:504
+#: ../../../../inc/SP/Mgmt/User/Groups.class.php:171
+#: ../../../../inc/SP/Mgmt/User/Groups.class.php:279
+#: ../../../../inc/SP/Mgmt/User/Groups.class.php:403
#: ../../../../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
+#: ../../../../inc/themes/material-blue/ldap.inc:141
+#: ../../../../inc/themes/material-blue/ldap.inc:166
+#: ../../../../inc/themes/material-blue/users.inc:58
msgid "Grupo"
msgstr "Csoport"
+# "Error on updating master password for user \"admin\""
+#: ../../../../ajax/ajax_doLogin.php:206
+#, fuzzy
+msgid "Error al obtener la clave maestra del usuario"
+msgstr "Hiba a mester jelszó frissítése közben"
+
# "Files management disabled"
-#: ../../../../ajax/ajax_files.php:46 ../../../../ajax/ajax_getFiles.php:40
+#: ../../../../ajax/ajax_files.php:56 ../../../../ajax/ajax_getFiles.php:44
msgid "Gestión de archivos deshabilitada"
msgstr "Fálj menedzsment inaktív"
# "Upload File"
-#: ../../../../ajax/ajax_files.php:60 ../../../../inc/Files.class.php:63
+#: ../../../../ajax/ajax_files.php:70
+#: ../../../../inc/SP/Mgmt/Files.class.php:71
msgid "Subir Archivo"
msgstr "Fájl feltöltés"
# "There are no allowed extensions"
-#: ../../../../ajax/ajax_files.php:69
+#: ../../../../ajax/ajax_files.php:79
msgid "No hay extensiones permitidas"
msgstr "Tiltott kiterjesztések"
# "File type not allowed"
-#: ../../../../ajax/ajax_files.php:80 ../../../../inc/FileImport.class.php:115
+#: ../../../../ajax/ajax_files.php:90
+#: ../../../../inc/SP/Import/FileImport.class.php:118
msgid "Tipo de archivo no soportado"
msgstr "Fájltípus nem engedélyezett"
+#: ../../../../ajax/ajax_files.php:91
+#, fuzzy
+msgid "Extensión"
+msgstr "Tiltott kiterjesztések"
+
# "Invalid file"
-#: ../../../../ajax/ajax_files.php:86
+#: ../../../../ajax/ajax_files.php:97
msgid "Archivo inválido"
msgstr "Érvénytelen fájl"
+# "File"
+#: ../../../../ajax/ajax_files.php:98 ../../../../ajax/ajax_files.php:167
+#: ../../../../inc/SP/Mgmt/Files.class.php:73
+#: ../../../../inc/SP/Mgmt/Files.class.php:133
+#: ../../../../inc/themes/classic/import.inc:70
+#: ../../../../inc/themes/material-blue/import.inc:82
+msgid "Archivo"
+msgstr "Fájl"
+
# "Internal error while reading file"
-#: ../../../../ajax/ajax_files.php:102 ../../../../ajax/ajax_files.php:119
-#: ../../../../inc/FileImport.class.php:131
-#: ../../../../inc/FileImport.class.php:149
-#: ../../../../inc/FileImport.class.php:167
+#: ../../../../ajax/ajax_files.php:114 ../../../../ajax/ajax_files.php:132
+#: ../../../../inc/SP/Import/FileImport.class.php:134
+#: ../../../../inc/SP/Import/FileImport.class.php:152
+#: ../../../../inc/SP/Import/FileImport.class.php:170
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:109
-msgid "El archivo es mayor de "
-msgstr "A fájl nagyobb, mint"
+# "File type not allowed"
+#: ../../../../ajax/ajax_files.php:121
+#, fuzzy
+msgid "Tamaño de archivo superado"
+msgstr "Fájltípus nem engedélyezett"
+
+# "Size"
+#: ../../../../ajax/ajax_files.php:122 ../../../../ajax/ajax_files.php:169
+#: ../../../../inc/SP/Controller/Grids.class.php:356
+#: ../../../../inc/SP/Mgmt/Files.class.php:75
+#: ../../../../inc/SP/Mgmt/Files.class.php:135
+msgid "Tamaño"
+msgstr "Méret"
# "File saved"
-#: ../../../../ajax/ajax_files.php:126
+#: ../../../../ajax/ajax_files.php:139
msgid "Archivo guardado"
msgstr "Fájl elmentve"
# "Error on file save"
-#: ../../../../ajax/ajax_files.php:131
+#: ../../../../ajax/ajax_files.php:141
+#: ../../../../inc/SP/Mgmt/Files.class.php:85
msgid "No se pudo guardar el archivo"
msgstr "Hiba a fájl mentése közben"
-# "Invalid file ID"
-#: ../../../../ajax/ajax_files.php:141 ../../../../ajax/ajax_files.php:200
-msgid "No es un ID de archivo válido"
-msgstr "Helytelen fájl ID"
-
# "File doesn't exist"
-#: ../../../../ajax/ajax_files.php:149
+#: ../../../../ajax/ajax_files.php:155
msgid "El archivo no existe"
msgstr "A fájl nem létezik"
# "Download File"
-#: ../../../../ajax/ajax_files.php:158
-#: ../../../../inc/themes/classic/files.inc:19
-#: ../../../../inc/themes/material-blue/files.inc:19
+#: ../../../../ajax/ajax_files.php:164
+#: ../../../../inc/themes/material-blue/files.inc:21
msgid "Descargar Archivo"
msgstr "Fájl letöltés"
# "ID"
-#: ../../../../ajax/ajax_files.php:159 ../../../../ajax/ajax_viewpass.php:70
-#: ../../../../inc/Files.class.php:112
+#: ../../../../ajax/ajax_files.php:165 ../../../../ajax/ajax_viewpass.php:78
+#: ../../../../inc/SP/Api/ApiTokens.class.php:263
+#: ../../../../inc/SP/Mgmt/Files.class.php:131
+#: ../../../../inc/SP/Mgmt/PublicLinkBase.class.php:277
#: ../../../../inc/themes/classic/eventlog.inc:14
-#: ../../../../inc/themes/material-blue/eventlog.inc:14
+#: ../../../../inc/themes/material-blue/eventlog.inc:16
msgid "ID"
msgstr "ID"
-# "File"
-#: ../../../../ajax/ajax_files.php:160 ../../../../inc/Files.class.php:65
-#: ../../../../inc/Files.class.php:113
-#: ../../../../inc/themes/classic/import.inc:152
-#: ../../../../inc/themes/material-blue/import.inc:80
-msgid "Archivo"
-msgstr "Fájl"
+# "Account"
+#: ../../../../ajax/ajax_files.php:166
+#: ../../../../ajax/ajax_sendRequest.php:74
+#: ../../../../ajax/ajax_viewpass.php:79
+#: ../../../../inc/SP/Account/Account.class.php:136
+#: ../../../../inc/SP/Account/Account.class.php:194
+#: ../../../../inc/SP/Account/Account.class.php:395
+#: ../../../../inc/SP/Account/Account.class.php:418
+#: ../../../../inc/SP/Account/Account.class.php:680
+#: ../../../../inc/SP/Controller/Grids.class.php:352
+#: ../../../../inc/SP/Controller/Grids.class.php:824
+#: ../../../../inc/SP/Mgmt/Files.class.php:72
+#: ../../../../inc/SP/Mgmt/Files.class.php:132
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:155
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:199
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:233
+#: ../../../../inc/themes/material-blue/publiclinks.inc:6
+msgid "Cuenta"
+msgstr "Fiók"
# "Type"
-#: ../../../../ajax/ajax_files.php:161 ../../../../inc/Files.class.php:66
-#: ../../../../inc/Files.class.php:114
-#: ../../../../web/AccountsMgmtC.class.php:267
+#: ../../../../ajax/ajax_files.php:168
+#: ../../../../inc/SP/Controller/Grids.class.php:293
+#: ../../../../inc/SP/Controller/Grids.class.php:355
+#: ../../../../inc/SP/Mgmt/Files.class.php:74
+#: ../../../../inc/SP/Mgmt/Files.class.php:134
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:154
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:198
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:232
#: ../../../../inc/themes/classic/customfields.inc:16
#: ../../../../inc/themes/material-blue/customfields.inc:19
msgid "Tipo"
msgstr "Típus"
-# "Size"
-#: ../../../../ajax/ajax_files.php:162 ../../../../inc/Files.class.php:67
-#: ../../../../inc/Files.class.php:115
-msgid "Tamaño"
-msgstr "Méret"
-
-# "File deleted"
-#: ../../../../ajax/ajax_files.php:204
-msgid "Archivo eliminado"
-msgstr "Fájl törölve"
-
-# "Error on file deletion"
-#: ../../../../ajax/ajax_files.php:209
-msgid "Error al eliminar el archivo"
-msgstr "Hiba a fájlok törlése közben"
-
# "Incorrect parameters"
-#: ../../../../ajax/ajax_getContent.php:42
-#: ../../../../inc/ApiRequest.class.php:55
-#: ../../../../inc/CustomFieldDef.class.php:45
-#: ../../../../inc/CustomFields.class.php:54
+#: ../../../../ajax/ajax_getContent.php:51
+#: ../../../../inc/SP/Api/ApiRequest.class.php:126
+#: ../../../../inc/SP/Api/SyspassApi.class.php:63
+#: ../../../../inc/SP/Api/SyspassApi.class.php:91
+#: ../../../../inc/SP/Api/SyspassApi.class.php:116
+#: ../../../../inc/SP/Mgmt/CustomFieldDef.class.php:49
+#: ../../../../inc/SP/Mgmt/CustomFields.class.php:61
msgid "Parámetros incorrectos"
msgstr "Helytelen paraméter"
# "Confirm account import"
-#: ../../../../ajax/ajax_migrate.php:56
+#: ../../../../ajax/ajax_migrate.php:60
msgid "Confirmar la importación de cuentas"
msgstr "Fiók importálás megerõsítése"
# "Connection username needed"
-#: ../../../../ajax/ajax_migrate.php:58
+#: ../../../../ajax/ajax_migrate.php:62
msgid "Es necesario un usuario de conexión"
msgstr "Kapcsolati felhasználónév szükséges"
# "Connection password needed"
-#: ../../../../ajax/ajax_migrate.php:60
+#: ../../../../ajax/ajax_migrate.php:64
msgid "Es necesaria una clave de conexión"
msgstr "Kapcsolati jelszó szükséges"
# "Database name needed"
-#: ../../../../ajax/ajax_migrate.php:62
+#: ../../../../ajax/ajax_migrate.php:66
msgid "Es necesario el nombre de la BBDD"
msgstr "Adatbázis név szükséges"
# "Host name needed"
-#: ../../../../ajax/ajax_migrate.php:64
+#: ../../../../ajax/ajax_migrate.php:68
msgid "Es necesario un nombre de host"
msgstr "Host név szükséges"
# "Password Recovery"
-#: ../../../../ajax/ajax_passReset.php:50
-#: ../../../../ajax/ajax_passReset.php:53
+#: ../../../../ajax/ajax_passReset.php:56
+#: ../../../../ajax/ajax_passReset.php:59
msgid "Recuperación de Clave"
msgstr "Jelszó visszaállítás"
# "Requested for"
-#: ../../../../ajax/ajax_passReset.php:56
#: ../../../../ajax/ajax_passReset.php:61
msgid "Solicitado para"
msgstr "Kért, hogy"
# "Request sent"
-#: ../../../../ajax/ajax_passReset.php:58
-#: ../../../../ajax/ajax_sendRequest.php:76
+#: ../../../../ajax/ajax_passReset.php:64
+#: ../../../../ajax/ajax_passReset.php:67
+#: ../../../../ajax/ajax_sendRequest.php:86
msgid "Solicitud enviada"
msgstr "Kérést elküldve"
# "You will receive an email to complete the request in short."
-#: ../../../../ajax/ajax_passReset.php:58
+#: ../../../../ajax/ajax_passReset.php:67
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"
+# "Request sent"
+#: ../../../../ajax/ajax_passReset.php:70
+#, fuzzy
+msgid "Solicitud no enviada"
+msgstr "Kérést elküldve"
+
# "The request can't be done. Please contact with the administrator"
-#: ../../../../ajax/ajax_passReset.php:63
+#: ../../../../ajax/ajax_passReset.php:75
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/UserBase.class.php:570
-#: ../../../../inc/UserPass.class.php:127
+#: ../../../../ajax/ajax_passReset.php:79
+#: ../../../../inc/SP/Mgmt/User/UserBase.class.php:588
+#: ../../../../inc/SP/Mgmt/User/UserPass.class.php:140
msgid "Modificar Clave Usuario"
msgstr "Felhasználó jelszavának szerkesztése"
# "Login"
-#: ../../../../ajax/ajax_passReset.php:73
-#: ../../../../inc/UserBase.class.php:570
-#: ../../../../inc/UserBase.class.php:594
-#: ../../../../inc/UserPass.class.php:127
-#: ../../../../web/UsersMgmtC.class.php:89
+#: ../../../../ajax/ajax_passReset.php:86
+#: ../../../../inc/SP/Controller/Grids.class.php:502
+#: ../../../../inc/SP/Mgmt/User/UserBase.class.php:589
+#: ../../../../inc/SP/Mgmt/User/UserBase.class.php:619
+#: ../../../../inc/SP/Mgmt/User/UserMigrate.class.php:99
+#: ../../../../inc/SP/Mgmt/User/UserPass.class.php:141
#: ../../../../inc/themes/classic/users.inc:21
-#: ../../../../inc/themes/material-blue/users.inc:24
+#: ../../../../inc/themes/material-blue/users.inc:25
msgid "Login"
msgstr "Belépés"
# "The password is incorrect or not the same"
-#: ../../../../ajax/ajax_passReset.php:81
+#: ../../../../ajax/ajax_passReset.php:98
msgid "La clave es incorrecta o no coincide"
msgstr "A jelszó helytelen, vagy nem egyezik"
# "Description is needed"
-#: ../../../../ajax/ajax_sendRequest.php:49
+#: ../../../../ajax/ajax_sendRequest.php:59
msgid "Es necesaria una descripción"
msgstr "Leírás szükséges"
# "Request for Account Modification"
-#: ../../../../ajax/ajax_sendRequest.php:62
+#: ../../../../ajax/ajax_sendRequest.php:72
msgid "Solicitud de Modificación de Cuenta"
msgstr "Kérés fiók módosításához"
# "Requester"
-#: ../../../../ajax/ajax_sendRequest.php:63
+#: ../../../../ajax/ajax_sendRequest.php:73
msgid "Solicitante"
msgstr "Kérõ"
-# "Account"
-#: ../../../../ajax/ajax_sendRequest.php:64
-#: ../../../../ajax/ajax_viewpass.php:71 ../../../../inc/Account.class.php:181
-#: ../../../../inc/Account.class.php:236 ../../../../inc/Account.class.php:417
-#: ../../../../inc/Account.class.php:440 ../../../../inc/Account.class.php:684
-#: ../../../../inc/Files.class.php:64
-msgid "Cuenta"
-msgstr "Fiók"
-
# "Customer"
-#: ../../../../ajax/ajax_sendRequest.php:65
-#: ../../../../inc/Account.class.php:180 ../../../../inc/Account.class.php:235
-#: ../../../../inc/Account.class.php:416 ../../../../inc/Account.class.php:439
-#: ../../../../inc/Account.class.php:683 ../../../../inc/Customer.class.php:65
-#: ../../../../inc/Customer.class.php:115
-#: ../../../../inc/Customer.class.php:163
-#: ../../../../web/SearchC.class.php:287
-#: ../../../../inc/themes/classic/account.inc:23
-#: ../../../../inc/themes/classic/editpass.inc:12
-#: ../../../../inc/themes/classic/request.inc:9
-#: ../../../../inc/themes/classic/search.inc:58
-#: ../../../../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:60
+#: ../../../../ajax/ajax_sendRequest.php:75
+#: ../../../../inc/SP/Account/Account.class.php:135
+#: ../../../../inc/SP/Account/Account.class.php:193
+#: ../../../../inc/SP/Account/Account.class.php:394
+#: ../../../../inc/SP/Account/Account.class.php:417
+#: ../../../../inc/SP/Account/Account.class.php:679
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:499
+#: ../../../../inc/SP/Controller/Grids.class.php:353
+#: ../../../../inc/SP/Controller/Grids.class.php:408
+#: ../../../../inc/SP/Mgmt/Customer.class.php:81
+#: ../../../../inc/SP/Mgmt/Customer.class.php:179
+#: ../../../../inc/SP/Mgmt/Customer.class.php:343
+#: ../../../../inc/themes/classic/account-editpass.inc:12
+#: ../../../../inc/themes/classic/account-request.inc:9
+#: ../../../../inc/themes/classic/account.inc:29
+#: ../../../../inc/themes/classic/datasearch-rows.inc:14
+#: ../../../../inc/themes/classic/search.inc:31
+#: ../../../../inc/themes/material-blue/account-editpass.inc:15
+#: ../../../../inc/themes/material-blue/account-link.inc:18
+#: ../../../../inc/themes/material-blue/account.inc:41
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:14
+#: ../../../../inc/themes/material-blue/request.inc:12
msgid "Cliente"
msgstr "Ügyfél"
# "Description"
-#: ../../../../ajax/ajax_sendRequest.php:66
-#: ../../../../web/AccountsMgmtC.class.php:80
-#: ../../../../web/AccountsMgmtC.class.php:139
-#: ../../../../web/UsersMgmtC.class.php:188
+#: ../../../../ajax/ajax_sendRequest.php:76
+#: ../../../../inc/SP/Controller/Grids.class.php:125
+#: ../../../../inc/SP/Controller/Grids.class.php:219
+#: ../../../../inc/SP/Controller/Grids.class.php:586
#: ../../../../inc/themes/classic/categories.inc:16
-#: ../../../../inc/themes/classic/customers.inc:16
-#: ../../../../inc/themes/classic/eventlog.inc:29
+#: ../../../../inc/themes/classic/customers.inc:17
+#: ../../../../inc/themes/classic/eventlog.inc:32
#: ../../../../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:29
-#: ../../../../inc/themes/material-blue/groups.inc:20
+#: ../../../../inc/themes/material-blue/categories.inc:21
+#: ../../../../inc/themes/material-blue/customers.inc:22
+#: ../../../../inc/themes/material-blue/eventlog.inc:34
+#: ../../../../inc/themes/material-blue/groups.inc:23
msgid "Descripción"
msgstr "Leírás"
# "Error on sending request"
-#: ../../../../ajax/ajax_sendRequest.php:79
+#: ../../../../ajax/ajax_sendRequest.php:89
msgid "Error al enviar la solicitud"
msgstr "Hiba a kérés küldése közben"
# "Error on updating profile"
-#: ../../../../ajax/ajax_userPrefsSave.php:75
-#: ../../../../ajax/ajax_userPrefsSave.php:108
+#: ../../../../ajax/ajax_userPrefsSave.php:84
+#: ../../../../ajax/ajax_userPrefsSave.php:118
#, fuzzy
msgid "Error al actualizar preferencias"
msgstr "Hiba a jelszó frissítése közben"
# "Accounts updated:"
-#: ../../../../ajax/ajax_userPrefsSave.php:85
-#: ../../../../ajax/ajax_userPrefsSave.php:111
+#: ../../../../ajax/ajax_userPrefsSave.php:95
+#: ../../../../ajax/ajax_userPrefsSave.php:121
#, fuzzy
msgid "Preferencias actualizadas"
msgstr "Fiókok frissítve"
# "Master password mismatch"
-#: ../../../../ajax/ajax_viewpass.php:55
+#: ../../../../ajax/ajax_viewpass.php:62
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:59
-#: ../../../../inc/Controller.class.php:166
+#: ../../../../ajax/ajax_viewpass.php:67
+#: ../../../../inc/SP/Controller/Controller.class.php:192
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:69 ../../../../inc/Acl.class.php:133
-#: ../../../../inc/themes/classic/account.inc:382
+#: ../../../../ajax/ajax_viewpass.php:77
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:360
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:361
+#: ../../../../inc/SP/Core/Acl.class.php:141
+#: ../../../../inc/themes/classic/inc/Icons.class.php:49
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:47
+#: ../../../../inc/themes/classic/account-actions.inc:22
#: ../../../../inc/themes/classic/profiles.inc:23
-#: ../../../../inc/themes/classic/search.inc:139
-#: ../../../../inc/themes/material-blue/account.inc:425
-#: ../../../../inc/themes/material-blue/profiles.inc:35
-#: ../../../../inc/themes/material-blue/search.inc:149
+#: ../../../../inc/themes/classic/search.inc:114
+#: ../../../../inc/themes/material-blue/account-actions.inc:28
+#: ../../../../inc/themes/material-blue/profiles.inc:37
msgid "Ver Clave"
msgstr "Jelszó"
# "View account password"
-#: ../../../../ajax/ajax_viewpass.php:80 ../../../../js/strings.js.php:73
+#: ../../../../ajax/ajax_viewpass.php:88 ../../../../js/strings.js.php:73
#, 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: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:33 ../../../../inc/Backup.class.php:28
-#: ../../../../inc/Base.php:26 ../../../../inc/Cache.class.php:28
-#: ../../../../inc/Category.class.php:29 ../../../../inc/Config.class.php:28
-#: ../../../../inc/ConfigDB.class.php:28
-#: ../../../../inc/ConfigInterface.class.php:28
-#: ../../../../inc/Controller.class.php:31 ../../../../inc/Crypt.class.php:28
-#: ../../../../inc/CryptMasterPass.class.php:28
-#: ../../../../inc/CryptPKI.class.php:28
-#: ../../../../inc/CsvImport.class.php:28
-#: ../../../../inc/CsvImportBase.class.php:28
-#: ../../../../inc/CustomFieldDef.class.php:28
-#: ../../../../inc/CustomFields.class.php:28
-#: ../../../../inc/CustomFieldsBase.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/Language.class.php:28 ../../../../inc/Ldap.class.php:29
-#: ../../../../inc/LdapADS.class.php:28 ../../../../inc/Log.class.php:28
-#: ../../../../inc/Migrate.class.php:28 ../../../../inc/Minify.class.php:30
-#: ../../../../inc/Profile.class.php:29
-#: ../../../../inc/ProfileBase.class.php:28
-#: ../../../../inc/Request.class.php:110 ../../../../inc/Response.class.php:28
-#: ../../../../inc/SPException.class.php:28
-#: ../../../../inc/Session.class.php:28
-#: ../../../../inc/SessionUtil.class.php:28
-#: ../../../../inc/SyspassImport.class.php:28
-#: ../../../../inc/Template.class.php:27 ../../../../inc/Themes.class.php:28
-#: ../../../../inc/Upgrade.class.php:29 ../../../../inc/User.class.php:28
-#: ../../../../inc/UserAccounts.class.php:28
-#: ../../../../inc/UserBase.class.php:28 ../../../../inc/UserLdap.class.php:28
-#: ../../../../inc/UserMigrate.class.php:28
-#: ../../../../inc/UserPass.class.php:28
-#: ../../../../inc/UserPassRecover.class.php:28
-#: ../../../../inc/UserPreferences.class.php:28
-#: ../../../../inc/UserUtil.class.php:28 ../../../../inc/Util.class.php:28
-#: ../../../../inc/XmlExport.class.php:28
-#: ../../../../inc/XmlImport.class.php:28
-#: ../../../../inc/XmlImportBase.class.php:28
-#: ../../../../web/AccountC.class.php:41
-#: ../../../../web/AccountsMgmtC.class.php:33
-#: ../../../../web/ConfigC.class.php:35 ../../../../web/EventlogC.class.php:30
-#: ../../../../web/SearchC.class.php:33
-#: ../../../../web/UsersMgmtC.class.php:40
-#: ../../../../web/UsersPrefsC.class.php:35
+#: ../../../../inc/Base.php:28 ../../../../inc/SP/Account/Account.class.php:40
+#: ../../../../inc/SP/Account/AccountBase.class.php:30
+#: ../../../../inc/SP/Account/AccountHistory.class.php:37
+#: ../../../../inc/SP/Account/AccountInterface.class.php:28
+#: ../../../../inc/SP/Account/AccountSearch.class.php:36
+#: ../../../../inc/SP/Account/AccountUtil.class.php:32
+#: ../../../../inc/SP/Account/UserAccounts.class.php:31
+#: ../../../../inc/SP/Api/ApiBase.class.php:28
+#: ../../../../inc/SP/Api/ApiRequest.class.php:32
+#: ../../../../inc/SP/Api/ApiTokens.class.php:28
+#: ../../../../inc/SP/Api/ApiTokensUtil.class.php:34
+#: ../../../../inc/SP/Api/SyspassApi.class.php:34
+#: ../../../../inc/SP/Auth/Auth.class.php:43
+#: ../../../../inc/SP/Auth/Auth2FA.class.php:34
+#: ../../../../inc/SP/Auth/Ldap.class.php:32
+#: ../../../../inc/SP/Auth/LdapADS.class.php:31
+#: ../../../../inc/SP/Config/Cache.class.php:28
+#: ../../../../inc/SP/Config/Config.class.php:31
+#: ../../../../inc/SP/Config/ConfigDB.class.php:33
+#: ../../../../inc/SP/Config/ConfigInterface.class.php:28
+#: ../../../../inc/SP/Controller/AccItemMgmt.class.php:28
+#: ../../../../inc/SP/Controller/AccItemsMgmt.class.php:28
+#: ../../../../inc/SP/Controller/AccItemsMgmtSearch.class.php:28
+#: ../../../../inc/SP/Controller/Account.class.php:28
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:28
+#: ../../../../inc/SP/Controller/AccountsSearchData.class.php:28
+#: ../../../../inc/SP/Controller/AppItemMgmt.class.php:28
+#: ../../../../inc/SP/Controller/AppItemsMgmt.class.php:28
+#: ../../../../inc/SP/Controller/AppItemsMgmtSearch.class.php:28
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:28
+#: ../../../../inc/SP/Controller/Controller.class.php:28
+#: ../../../../inc/SP/Controller/Eventlog.class.php:28
+#: ../../../../inc/SP/Controller/GridItemsSearch.class.php:11
+#: ../../../../inc/SP/Controller/GridTabController.class.php:28
+#: ../../../../inc/SP/Controller/Grids.class.php:28
+#: ../../../../inc/SP/Controller/Main.class.php:28
+#: ../../../../inc/SP/Controller/UsersPrefs.class.php:28
+#: ../../../../inc/SP/Controller/Wiki.class.php:28
+#: ../../../../inc/SP/Core/Acl.class.php:33
+#: ../../../../inc/SP/Core/Backup.class.php:37
+#: ../../../../inc/SP/Core/Crypt.class.php:35
+#: ../../../../inc/SP/Core/CryptMasterPass.class.php:31
+#: ../../../../inc/SP/Core/CryptPKI.class.php:28
+#: ../../../../inc/SP/Core/Init.class.php:40
+#: ../../../../inc/SP/Core/Installer.class.php:38
+#: ../../../../inc/SP/Core/Language.class.php:31
+#: ../../../../inc/SP/Core/SPException.class.php:30
+#: ../../../../inc/SP/Core/Session.class.php:33
+#: ../../../../inc/SP/Core/SessionUtil.class.php:32
+#: ../../../../inc/SP/Core/Template.class.php:28
+#: ../../../../inc/SP/Core/ThemeIconsBase.class.php:31
+#: ../../../../inc/SP/Core/ThemeIconsInterface.class.php:28
+#: ../../../../inc/SP/Core/Themes.class.php:32
+#: ../../../../inc/SP/Core/Upgrade.class.php:37
+#: ../../../../inc/SP/Core/XmlExport.class.php:36
+#: ../../../../inc/SP/Html/Assets/FontIcon.class.php:28
+#: ../../../../inc/SP/Html/Assets/IconBase.class.php:28
+#: ../../../../inc/SP/Html/Assets/IconInterface.class.php:28
+#: ../../../../inc/SP/Html/Assets/ImageIcon.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGrid.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGridAction.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGridActionBase.class.php:30
+#: ../../../../inc/SP/Html/DataGrid/DataGridActionInterface.class.php:30
+#: ../../../../inc/SP/Html/DataGrid/DataGridActionSearch.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGridActionType.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGridBase.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGridData.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGridDataBase.class.php:30
+#: ../../../../inc/SP/Html/DataGrid/DataGridDataInterface.class.php:30
+#: ../../../../inc/SP/Html/DataGrid/DataGridHeader.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGridHeaderBase.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGridHeaderInterface.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGridHeaderSort.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGridInterface.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGridPager.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGridPagerBase.class.php:30
+#: ../../../../inc/SP/Html/DataGrid/DataGridPagerInterface.class.php:30
+#: ../../../../inc/SP/Html/DataGrid/DataGridSort.class.php:30
+#: ../../../../inc/SP/Html/DataGrid/DataGridSortInterface.class.php:30
+#: ../../../../inc/SP/Html/DataGrid/DataGridTab.class.php:28
+#: ../../../../inc/SP/Html/Html.class.php:28
+#: ../../../../inc/SP/Html/Minify.class.php:33
+#: ../../../../inc/SP/Http/Request.class.php:50
+#: ../../../../inc/SP/Http/Response.class.php:28
+#: ../../../../inc/SP/Import/CsvImport.class.php:30
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:34
+#: ../../../../inc/SP/Import/FileImport.class.php:31
+#: ../../../../inc/SP/Import/Import.class.php:33
+#: ../../../../inc/SP/Import/ImportBase.class.php:34
+#: ../../../../inc/SP/Import/KeepassImport.class.php:30
+#: ../../../../inc/SP/Import/KeepassXImport.class.php:31
+#: ../../../../inc/SP/Import/Migrate.class.php:37
+#: ../../../../inc/SP/Import/SyspassImport.class.php:31
+#: ../../../../inc/SP/Import/XmlImport.class.php:31
+#: ../../../../inc/SP/Import/XmlImportBase.class.php:30
+#: ../../../../inc/SP/Log/Log.class.php:35
+#: ../../../../inc/SP/Mgmt/Category.class.php:36
+#: ../../../../inc/SP/Mgmt/CustomFieldDef.class.php:32
+#: ../../../../inc/SP/Mgmt/CustomFields.class.php:35
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:28
+#: ../../../../inc/SP/Mgmt/Customer.class.php:37
+#: ../../../../inc/SP/Mgmt/Files.class.php:36
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:40
+#: ../../../../inc/SP/Mgmt/PublicLinkBase.class.php:38
+#: ../../../../inc/SP/Mgmt/PublicLinkUtil.class.php:34
+#: ../../../../inc/SP/Mgmt/User/Groups.class.php:35
+#: ../../../../inc/SP/Mgmt/User/Profile.class.php:34
+#: ../../../../inc/SP/Mgmt/User/ProfileBase.class.php:37
+#: ../../../../inc/SP/Mgmt/User/ProfileUtil.class.php:34
+#: ../../../../inc/SP/Mgmt/User/User.class.php:34
+#: ../../../../inc/SP/Mgmt/User/UserBase.class.php:36
+#: ../../../../inc/SP/Mgmt/User/UserLdap.class.php:34
+#: ../../../../inc/SP/Mgmt/User/UserMigrate.class.php:33
+#: ../../../../inc/SP/Mgmt/User/UserPass.class.php:37
+#: ../../../../inc/SP/Mgmt/User/UserPassRecover.class.php:31
+#: ../../../../inc/SP/Mgmt/User/UserPreferences.class.php:33
+#: ../../../../inc/SP/Mgmt/User/UserUtil.class.php:32
+#: ../../../../inc/SP/Storage/DB.class.php:33
+#: ../../../../inc/SP/Storage/DBConnectionFactory.class.php:33
+#: ../../../../inc/SP/Util/ImageUtil.class.php:30
+#: ../../../../inc/SP/Util/Util.class.php:35
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApi.class.php:34
+#: ../../../../inc/themes/classic/inc/Icons.class.php:28
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:28
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:112 ../../../../inc/Account.class.php:201
-#: ../../../../inc/Account.class.php:653
+#: ../../../../inc/SP/Account/Account.class.php:63
+#: ../../../../inc/SP/Account/Account.class.php:157
+#: ../../../../inc/SP/Account/Account.class.php:647
msgid "Error al actualizar el historial"
msgstr "Hiba az elõzmények frissítése közben"
# "Update Customer"
-#: ../../../../inc/Account.class.php:117
+#: ../../../../inc/SP/Account/Account.class.php:68
msgid "Actualizar Cuenta"
msgstr "Frissítés Számla"
# "Error on updating secondary groups"
-#: ../../../../inc/Account.class.php:120 ../../../../inc/Account.class.php:398
+#: ../../../../inc/SP/Account/Account.class.php:71
+#: ../../../../inc/SP/Account/Account.class.php:376
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:126 ../../../../inc/Account.class.php:406
+#: ../../../../inc/SP/Account/Account.class.php:77
+#: ../../../../inc/SP/Account/Account.class.php:384
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:234
+#: ../../../../inc/SP/Account/Account.class.php:192
msgid "Restaurar Cuenta"
msgstr "Restore Számla"
# "Error on retrieving accounts' passwords"
-#: ../../../../inc/Account.class.php:341
-#: ../../../../inc/AccountHistory.class.php:348
-#: ../../../../inc/AccountHistory.class.php:508
+#: ../../../../inc/SP/Account/Account.class.php:304
+#: ../../../../inc/SP/Account/AccountHistory.class.php:371
+#: ../../../../inc/SP/Account/AccountHistory.class.php:539
#, 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:415 ../../../../inc/Acl.class.php:129
-#: ../../../../web/AccountC.class.php:150 ../../../../web/MainC.class.php:183
+#: ../../../../inc/SP/Account/Account.class.php:393
+#: ../../../../inc/SP/Controller/Account.class.php:125
+#: ../../../../inc/SP/Controller/Main.class.php:194
+#: ../../../../inc/SP/Core/Acl.class.php:137
msgid "Nueva Cuenta"
msgstr "Új fiók"
# "ERROR: Operation failed"
-#: ../../../../inc/Account.class.php:433
+#: ../../../../inc/SP/Account/Account.class.php:411
msgid "ERROR: Error en la operación."
msgstr "HIBA: A mûvelet meghiusult"
# "Delete Account"
-#: ../../../../inc/Account.class.php:438 ../../../../inc/Acl.class.php:134
-#: ../../../../web/AccountC.class.php:358
-#: ../../../../inc/themes/classic/account.inc:369
-#: ../../../../inc/themes/classic/search.inc:167
-#: ../../../../inc/themes/material-blue/account.inc:419
-#: ../../../../inc/themes/material-blue/search.inc:178
+#: ../../../../inc/SP/Account/Account.class.php:416
+#: ../../../../inc/SP/Controller/Account.class.php:386
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:428
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:429
+#: ../../../../inc/SP/Controller/Grids.class.php:398
+#: ../../../../inc/SP/Controller/Grids.class.php:399
+#: ../../../../inc/SP/Core/Acl.class.php:142
+#: ../../../../inc/themes/classic/account-actions.inc:8
+#: ../../../../inc/themes/classic/search.inc:144
+#: ../../../../inc/themes/material-blue/account-actions.inc:10
msgid "Eliminar Cuenta"
msgstr "Fiók törlése"
# "Error on deleting account's groups"
-#: ../../../../inc/Account.class.php:451
+#: ../../../../inc/SP/Account/Account.class.php:432
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:455
+#: ../../../../inc/SP/Account/Account.class.php:437
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:459
+#: ../../../../inc/SP/Account/Account.class.php:442
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:513
-#: ../../../../inc/AccountHistory.class.php:129
-#: ../../../../inc/XmlImport.class.php:62
+#: ../../../../inc/SP/Account/Account.class.php:500
+#: ../../../../inc/SP/Account/AccountHistory.class.php:140
+#: ../../../../inc/SP/Import/XmlImport.class.php:65
msgid "Inicio"
msgstr "Start"
# "Error on encryption module"
-#: ../../../../inc/Account.class.php:518
-#: ../../../../inc/AccountHistory.class.php:135
+#: ../../../../inc/SP/Account/Account.class.php:506
+#: ../../../../inc/SP/Account/AccountHistory.class.php:147
msgid "Error en el módulo de encriptación"
msgstr "Titkosító modul hiba"
# "Error on retrieving accounts' passwords"
-#: ../../../../inc/Account.class.php:526
-#: ../../../../inc/AccountHistory.class.php:143
+#: ../../../../inc/SP/Account/Account.class.php:515
+#: ../../../../inc/SP/Account/AccountHistory.class.php:156
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:542
-#: ../../../../inc/AccountHistory.class.php:165
+#: ../../../../inc/SP/Account/Account.class.php:531
+#: ../../../../inc/SP/Account/AccountHistory.class.php:177
#, fuzzy
msgid "Clave de cuenta vacía"
msgstr "Fiók jelszavának szerkesztése"
-#: ../../../../inc/Account.class.php:547
-#: ../../../../inc/AccountHistory.class.php:170
+#: ../../../../inc/SP/Account/Account.class.php:536
+#: ../../../../inc/SP/Account/AccountHistory.class.php:182
#, 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:556
-#: ../../../../inc/AccountHistory.class.php:179
+#: ../../../../inc/SP/Account/Account.class.php:545
+#: ../../../../inc/SP/Account/AccountHistory.class.php:191
#, 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:562
+#: ../../../../inc/SP/Account/Account.class.php:551
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:576
+#: ../../../../inc/SP/Account/Account.class.php:565
#, fuzzy
msgid "Cuentas actualizadas"
msgstr "Fiókok frissítve"
# "End"
-#: ../../../../inc/Account.class.php:581
-#: ../../../../inc/AccountHistory.class.php:204
-#: ../../../../inc/CustomFields.class.php:285
-#: ../../../../inc/CustomFields.class.php:327
+#: ../../../../inc/SP/Account/Account.class.php:570
+#: ../../../../inc/SP/Account/AccountHistory.class.php:216
+#: ../../../../inc/SP/Mgmt/CustomFields.class.php:325
+#: ../../../../inc/SP/Mgmt/CustomFields.class.php:369
msgid "Fin"
msgstr "Vége"
# "Update Password"
-#: ../../../../inc/Account.class.php:682
+#: ../../../../inc/SP/Account/Account.class.php:678
msgid "Modificar Clave"
msgstr "Jelszó frissítés"
-# "Error on retrieving accounts' passwords"
-#: ../../../../inc/Account.class.php:717
-#, 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/AccountHistory.class.php:128
+#: ../../../../inc/SP/Account/AccountHistory.class.php:139
msgid "Actualizar Clave Maestra (H)"
msgstr "Frissítse a mester jelszót (H)"
# "Record's Master password mismatch"
-#: ../../../../inc/AccountHistory.class.php:160
+#: ../../../../inc/SP/Account/AccountHistory.class.php:172
msgid "La clave maestra del registro no coincide"
msgstr "A rekord mester jelszava nem egyezik"
# "Error on updating history's master password"
-#: ../../../../inc/AccountHistory.class.php:185
+#: ../../../../inc/SP/Account/AccountHistory.class.php:197
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/AccountHistory.class.php:199
-#: ../../../../inc/CustomFields.class.php:323
+#: ../../../../inc/SP/Account/AccountHistory.class.php:211
+#: ../../../../inc/SP/Mgmt/CustomFields.class.php:365
#, fuzzy
msgid "Registros actualizados"
msgstr "Rekordok frissítve"
-# "Access denied to"
-#: ../../../../inc/Acl.class.php:112
-msgid "Denegado acceso a"
-msgstr "Belépés megtagadva"
-
-# "New Account"
-#: ../../../../inc/Acl.class.php:126
+# "Error on retrieving accounts' passwords"
+#: ../../../../inc/SP/Account/AccountUtil.class.php:133
#, 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:265
-#: ../../../../inc/themes/classic/search.inc:161
-#: ../../../../inc/themes/material-blue/search.inc:172
-msgid "Copiar Cuenta"
-msgstr "Fiók másolása"
-
-# "Edit Account"
-#: ../../../../inc/Acl.class.php:130 ../../../../web/AccountC.class.php:329
-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:191
-#: ../../../../inc/themes/classic/profiles.inc:50
-#: ../../../../inc/themes/material-blue/account.inc:234
-#: ../../../../inc/themes/material-blue/config.inc:261
-#: ../../../../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/ConfigDB.class.php:91
-#: ../../../../inc/ConfigDB.class.php:119 ../../../../web/MainC.class.php:201
-#: ../../../../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:132
-#: ../../../../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:177
-#: ../../../../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"
+msgid "No se pudieron obtener los datos de las cuentas"
+msgstr "Hiba a fiókok jelszavainak betöltése közben"
# "Extension not allowed"
-#: ../../../../inc/Api.class.php:65 ../../../../inc/Api.class.php:88
-#: ../../../../inc/Api.class.php:126
+#: ../../../../inc/SP/Api/ApiBase.class.php:81
+#: ../../../../inc/SP/Api/ApiBase.class.php:105
+#: ../../../../inc/SP/Api/ApiBase.class.php:133
#, fuzzy
msgid "Acceso no permitido"
msgstr "Belépés megtagadva"
# "Request Modification"
-#: ../../../../inc/Api.class.php:166
+#: ../../../../inc/SP/Api/ApiBase.class.php:173
#, fuzzy
msgid "Error de codificación"
msgstr "LDAP kapcsolódási hiba"
-#: ../../../../inc/ApiRequest.class.php:102
+# "Invalid Id"
+#: ../../../../inc/SP/Api/ApiRequest.class.php:96
+#, fuzzy
+msgid "Método inválido"
+msgstr "Érvénytelen Id"
+
+# "Invalid Id"
+#: ../../../../inc/SP/Api/ApiRequest.class.php:112
+#, fuzzy
+msgid "Datos inválidos"
+msgstr "Érvénytelen Id"
+
+# "Invalid Action"
+#: ../../../../inc/SP/Api/ApiRequest.class.php:140
+#, fuzzy
+msgid "Acción inválida"
+msgstr "Érvénytelen Akció"
+
+#: ../../../../inc/SP/Api/ApiRequest.class.php:152
#, fuzzy
msgid "Token de autorización"
msgstr "Kérés fiók módosításához"
# "Invalid Action"
-#: ../../../../inc/ApiRequest.class.php:103
+#: ../../../../inc/SP/Api/ApiRequest.class.php:153
#, fuzzy
msgid "Acción a realizar"
msgstr "Akció"
# "LDAP bind user password"
-#: ../../../../inc/ApiRequest.class.php:104
+#: ../../../../inc/SP/Api/ApiRequest.class.php:154
#, fuzzy
msgid "Clave de usuario (opcional)"
msgstr "Változás felhasználói jelszó"
# "Text to search"
-#: ../../../../inc/ApiRequest.class.php:105
+#: ../../../../inc/SP/Api/ApiRequest.class.php:155
#, fuzzy
msgid "Cadena a buscar"
msgstr "Keresés"
# "Number of results that are shown per page when searching"
-#: ../../../../inc/ApiRequest.class.php:106
+#: ../../../../inc/SP/Api/ApiRequest.class.php:156
#, 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
+#: ../../../../inc/SP/Api/ApiRequest.class.php:157
msgid "Item a devolver"
msgstr ""
# "Database already exist"
-#: ../../../../inc/ApiTokens.class.php:221
+#: ../../../../inc/SP/Api/ApiTokens.class.php:144
#, fuzzy
msgid "La autorización ya existe"
msgstr "Az adatbázis már létezik"
# "Update Configuration"
-#: ../../../../inc/ApiTokens.class.php:307
+#: ../../../../inc/SP/Api/ApiTokens.class.php:236
#, fuzzy
msgid "Actualizar Autorización"
msgstr "Frissítés Számla"
# "Delete File"
-#: ../../../../inc/ApiTokens.class.php:331
-#: ../../../../web/UsersMgmtC.class.php:422
+#: ../../../../inc/SP/Api/ApiTokens.class.php:262
+#: ../../../../inc/SP/Controller/Grids.class.php:743
+#: ../../../../inc/SP/Controller/Grids.class.php:744
#, fuzzy
msgid "Eliminar Autorización"
msgstr "Profil törlése"
# "The user have no associated groups"
-#: ../../../../inc/Auth.class.php:107
+#: ../../../../inc/SP/Auth/Auth.class.php:121
#, fuzzy
msgid "Usuario no pertenece al grupo"
msgstr "a felhasználó nincs csoporthoz társítva"
# "Password Change"
-#: ../../../../inc/Auth.class.php:186
+#: ../../../../inc/SP/Auth/Auth.class.php:202
#: ../../../../inc/themes/classic/users.inc:117
#: ../../../../inc/themes/classic/userspass.inc:2
-#: ../../../../inc/themes/material-blue/users.inc:161
+#: ../../../../inc/themes/material-blue/users.inc:162
#: ../../../../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:188
+#: ../../../../inc/SP/Auth/Auth.class.php:204
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:190
+#: ../../../../inc/SP/Auth/Auth.class.php:206
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:194
+#: ../../../../inc/SP/Auth/Auth.class.php:210
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:167
-msgid "Esta operación sólo es posible en entornos Linux"
-msgstr "Ez a mûvelet csak Linux környezetben érhetõ el"
+# "Unable to connect to LDAP server"
+#: ../../../../inc/SP/Auth/Ldap.class.php:136
+#: ../../../../inc/SP/Auth/Ldap.class.php:140
+msgid "No es posible conectar con el servidor de LDAP"
+msgstr "Csatlakozás az LDAP szerverhez meghiúsult"
-# Error while doing backup in compatibility mode
-#: ../../../../inc/Backup.class.php:169
+# "Connection error (BIND)"
+#: ../../../../inc/SP/Auth/Ldap.class.php:166
+#: ../../../../inc/SP/Auth/Ldap.class.php:171
+msgid "Error al conectar (BIND)"
+msgstr "Kapcsolat hiba (BIND)"
+
+# "Error on searching objects in base DN"
+#: ../../../../inc/SP/Auth/Ldap.class.php:195
+#: ../../../../inc/SP/Auth/Ldap.class.php:200
+msgid "Error al buscar objetos en DN base"
+msgstr "Hiba a keresés közben"
+
+# "Error on searching group RDN"
+#: ../../../../inc/SP/Auth/Ldap.class.php:224
+#: ../../../../inc/SP/Auth/Ldap.class.php:230
+#: ../../../../inc/SP/Auth/Ldap.class.php:238
+#: ../../../../inc/SP/Auth/Ldap.class.php:243
+#: ../../../../inc/SP/Auth/Ldap.class.php:249
+#: ../../../../inc/SP/Auth/Ldap.class.php:254
+msgid "Error al buscar RDN de grupo"
+msgstr "Hiba az RDN csoport keresése közben"
+
+# "Error on searching user DN"
+#: ../../../../inc/SP/Auth/Ldap.class.php:317
+#: ../../../../inc/SP/Auth/Ldap.class.php:323
+#: ../../../../inc/SP/Auth/Ldap.class.php:340
+#: ../../../../inc/SP/Auth/Ldap.class.php:345
+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/SP/Auth/Ldap.class.php:331
+#: ../../../../inc/SP/Auth/Ldap.class.php:336
+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/SP/Auth/Ldap.class.php:415
+#: ../../../../inc/SP/Auth/Ldap.class.php:421
+#: ../../../../inc/SP/Auth/LdapADS.class.php:107
+#: ../../../../inc/SP/Auth/LdapADS.class.php:112
+msgid "Error al buscar el grupo de usuarios"
+msgstr "Hiba a keresése közben"
+
+# "User deleted"
+#: ../../../../inc/SP/Auth/Ldap.class.php:428
#, fuzzy
-msgid "Error al realizar backup en modo compatibilidad"
-msgstr "Error while doing backup in compatibility mode"
+msgid "Usuario verificado en grupo"
+msgstr "Csoportot használja a:"
-# "Unable to create backup directory"
-#: ../../../../inc/Backup.class.php:223
-#: ../../../../inc/XmlExport.class.php:467
-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:228
-#: ../../../../inc/XmlExport.class.php:472
-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:299
-#: ../../../../inc/themes/classic/account.inc:42
-#: ../../../../inc/themes/classic/search.inc:83
-#: ../../../../inc/themes/material-blue/account.inc:51
-#: ../../../../inc/themes/material-blue/search.inc:85
-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:102
-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:182
-msgid "Modificar Categoría"
-msgstr "Kategória szerkesztés"
+# "No group found with that name"
+#: ../../../../inc/SP/Auth/LdapADS.class.php:117
+#: ../../../../inc/SP/Auth/LdapADS.class.php:122
+msgid "No se encontró el grupo con ese nombre"
+msgstr "Nincs ilyen nevû csoport"
# "Unable to write on configuration file"
-#: ../../../../inc/Config.class.php:148
+#: ../../../../inc/SP/Config/Config.class.php:151
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:148
+#: ../../../../inc/SP/Config/Config.class.php:151
msgid "Compruebe los permisos del directorio \"config\""
msgstr "Kérem, ellenõrizze a 'config' mappa jogosultságait"
+# "Configuration"
+#: ../../../../inc/SP/Config/ConfigDB.class.php:102
+#: ../../../../inc/SP/Config/ConfigDB.class.php:136
+#: ../../../../inc/SP/Controller/Main.class.php:212
+#: ../../../../inc/SP/Core/Acl.class.php:154
+#: ../../../../inc/themes/classic/profiles.inc:57
+#: ../../../../inc/themes/material-blue/profiles.inc:73
+msgid "Configuración"
+msgstr "LDAP kapcsolat rendben"
+
# "Update Configuration"
-#: ../../../../inc/ConfigDB.class.php:91
-#: ../../../../inc/ConfigDB.class.php:120
+#: ../../../../inc/SP/Config/ConfigDB.class.php:103
+#: ../../../../inc/SP/Config/ConfigDB.class.php:137
msgid "Modificar configuración"
msgstr "Konfiguráció frissítése"
# "Parameter"
-#: ../../../../inc/ConfigDB.class.php:121
+#: ../../../../inc/SP/Config/ConfigDB.class.php:138
msgid "Parámetro"
msgstr "Paraméter"
# "Value"
-#: ../../../../inc/ConfigDB.class.php:122
+#: ../../../../inc/SP/Config/ConfigDB.class.php:139
msgid "Valor"
msgstr "Érték"
+# "Configuration updated"
+#: ../../../../inc/SP/Controller/AccItemMgmt.class.php:166
+#, fuzzy
+msgid "Token de autorización visualizado"
+msgstr "Beállítások frissítve"
+
+#: ../../../../inc/SP/Controller/AccItemMgmt.class.php:167
+msgid "Autorizaciones"
+msgstr ""
+
+# "Copy Account"
+#: ../../../../inc/SP/Controller/Account.class.php:279
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:410
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:411
+#: ../../../../inc/SP/Core/Acl.class.php:136
+#: ../../../../inc/themes/classic/search.inc:138
+msgid "Copiar Cuenta"
+msgstr "Fiók másolása"
+
+# "Edit Account"
+#: ../../../../inc/SP/Controller/Account.class.php:358
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:392
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:393
+#: ../../../../inc/SP/Core/Acl.class.php:138
+msgid "Editar Cuenta"
+msgstr "Fiók módosítás"
+
+# "Account Details"
+#: ../../../../inc/SP/Controller/Account.class.php:413
+#: ../../../../inc/SP/Controller/Account.class.php:445
+#: ../../../../inc/SP/Controller/Account.class.php:538
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:348
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:349
+#: ../../../../inc/themes/classic/datasearch-rows.inc:31
+#: ../../../../inc/themes/classic/search.inc:48
+#: ../../../../inc/themes/classic/search.inc:109
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:31
+msgid "Detalles de Cuenta"
+msgstr "Fiók adatok"
+
+# "Edit Account Password"
+#: ../../../../inc/SP/Controller/Account.class.php:501
+#: ../../../../inc/themes/classic/account-actions.inc:37
+#: ../../../../inc/themes/material-blue/account-actions.inc:46
+msgid "Modificar Clave de Cuenta"
+msgstr "Fiók jelszavának szerkesztése"
+
+# Copy Password to Clipboard
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:375
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:376
+#: ../../../../inc/themes/classic/account-actions.inc:28
+#: ../../../../inc/themes/classic/search.inc:118
+#: ../../../../inc/themes/material-blue/account-actions.inc:35
+#, fuzzy
+msgid "Copiar Clave en Portapapeles"
+msgstr "A jelszó nem lehet üres"
+
+# "Request Modification"
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:439
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:440
+#: ../../../../inc/themes/classic/account-actions.inc:61
+#: ../../../../inc/themes/classic/search.inc:153
+#: ../../../../inc/themes/material-blue/account-actions.inc:78
+msgid "Solicitar Modificación"
+msgstr "Kérés módosítás"
+
+# "More Actions"
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:450
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:451
+#: ../../../../inc/themes/classic/search.inc:127
+msgid "Más Acciones"
+msgstr "Több akció"
+
+# "Sort by Customer"
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:500
+msgid "Ordenar por Cliente"
+msgstr "Rendezés Ügyfél szerint"
+
+# "Name"
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:506
+#: ../../../../inc/SP/Controller/Grids.class.php:124
+#: ../../../../inc/SP/Controller/Grids.class.php:218
+#: ../../../../inc/SP/Controller/Grids.class.php:292
+#: ../../../../inc/SP/Controller/Grids.class.php:354
+#: ../../../../inc/SP/Controller/Grids.class.php:407
+#: ../../../../inc/SP/Controller/Grids.class.php:501
+#: ../../../../inc/SP/Controller/Grids.class.php:585
+#: ../../../../inc/SP/Controller/Grids.class.php:669
+#: ../../../../inc/themes/classic/account-editpass.inc:8
+#: ../../../../inc/themes/classic/account-request.inc:6
+#: ../../../../inc/themes/classic/account.inc:17
+#: ../../../../inc/themes/classic/categories.inc:8
+#: ../../../../inc/themes/classic/customers.inc:9
+#: ../../../../inc/themes/classic/customfields.inc:9
+#: ../../../../inc/themes/classic/datasearch-rows.inc:29
+#: ../../../../inc/themes/classic/groups.inc:8
+#: ../../../../inc/themes/classic/info.inc:25
+#: ../../../../inc/themes/classic/profiles.inc:8
+#: ../../../../inc/themes/classic/search.inc:46
+#: ../../../../inc/themes/classic/users.inc:8
+#: ../../../../inc/themes/material-blue/account-editpass.inc:11
+#: ../../../../inc/themes/material-blue/account-link.inc:12
+#: ../../../../inc/themes/material-blue/account.inc:27
+#: ../../../../inc/themes/material-blue/categories.inc:9
+#: ../../../../inc/themes/material-blue/customers.inc:10
+#: ../../../../inc/themes/material-blue/customfields.inc:8
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:29
+#: ../../../../inc/themes/material-blue/groups.inc:11
+#: ../../../../inc/themes/material-blue/info.inc:25
+#: ../../../../inc/themes/material-blue/profiles.inc:10
+#: ../../../../inc/themes/material-blue/request.inc:8
+#: ../../../../inc/themes/material-blue/users.inc:9
+msgid "Nombre"
+msgstr "Név"
+
+# "Sort by Name"
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:507
+msgid "Ordenar por Nombre"
+msgstr "Rendezés Név szerint"
+
+# "Category"
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:513
+#: ../../../../inc/SP/Mgmt/Category.class.php:74
+#: ../../../../inc/SP/Mgmt/Category.class.php:174
+#: ../../../../inc/SP/Mgmt/Category.class.php:349
+#: ../../../../inc/themes/classic/account.inc:48
+#: ../../../../inc/themes/classic/datasearch-rows.inc:39
+#: ../../../../inc/themes/classic/search.inc:56
+#: ../../../../inc/themes/material-blue/account-link.inc:24
+#: ../../../../inc/themes/material-blue/account.inc:64
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:39
+msgid "Categoría"
+msgstr "Kategória"
+
+# "Sort by Category"
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:514
+msgid "Ordenar por Categoría"
+msgstr "Rendezés Kategória szerint"
+
+# "Sort by Username"
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:521
+msgid "Ordenar por Usuario"
+msgstr "Rendezés Felhasználónév szerint"
+
+# "URL / IP"
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:527
+#: ../../../../inc/themes/classic/account-editpass.inc:16
+#: ../../../../inc/themes/classic/account-request.inc:13
+#: ../../../../inc/themes/classic/account.inc:68
+#: ../../../../inc/themes/classic/datasearch-rows.inc:50
+#: ../../../../inc/themes/classic/search.inc:69
+#: ../../../../inc/themes/material-blue/account-editpass.inc:19
+#: ../../../../inc/themes/material-blue/account-link.inc:30
+#: ../../../../inc/themes/material-blue/account.inc:84
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:50
+#: ../../../../inc/themes/material-blue/request.inc:17
+msgid "URL / IP"
+msgstr "URL / IP"
+
+# "Sort by URL / IP"
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:528
+msgid "Ordenar por URL / IP"
+msgstr "Rendezés URL / IP szerint"
+
+# "Description"
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:149
+#: ../../../../inc/SP/Core/Acl.class.php:156
+#: ../../../../inc/themes/classic/profiles.inc:65
+#: ../../../../inc/themes/material-blue/profiles.inc:84
+#, fuzzy
+msgid "Encriptación"
+msgstr "A Crypto modul nem tölthetõ be"
+
+# "Last backup"
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:185
+msgid "Último backup"
+msgstr "Utolsó Archiválás"
+
+# "There're no backups available"
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:185
+msgid "No se encontraron backups"
+msgstr "Nincsenek elérhetõ Archívumok"
+
+# "Last Modification"
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:192
+#, fuzzy
+msgid "Última exportación"
+msgstr "Utolsó oldal"
+
+# "Unable to write on configuration file"
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:192
+#, fuzzy
+msgid "No se encontró archivo de exportación"
+msgstr "Nem lehet a konfigurációs fájlba írni"
+
+# "Backup"
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:194
+#: ../../../../inc/SP/Core/Acl.class.php:157
+#: ../../../../inc/themes/classic/backup.inc:6
+#: ../../../../inc/themes/material-blue/backup.inc:6
+msgid "Copia de Seguridad"
+msgstr "Archiválás"
+
+# "Import Accounts"
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:216
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:146
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:151
+#: ../../../../inc/SP/Import/Import.class.php:97
+#: ../../../../inc/SP/Import/Migrate.class.php:366
+#: ../../../../inc/SP/Import/XmlImport.class.php:65
+#: ../../../../inc/SP/Import/XmlImport.class.php:66
+msgid "Importar Cuentas"
+msgstr "Fiókok importálása"
+
+# "Configuration"
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:238
+#, fuzzy
+msgid "Información"
+msgstr "Mutat néhány információt az alkalmazásról és a teljesítményrõl"
+
# "Option unavilable"
-#: ../../../../inc/Controller.class.php:165
+#: ../../../../inc/SP/Controller/Controller.class.php:191
msgid "Opción no disponible"
msgstr "Beállítás nem elérhetõ"
# "Please, contact to administrator"
-#: ../../../../inc/Controller.class.php:165
-#: ../../../../inc/Controller.class.php:166
-#: ../../../../inc/Controller.class.php:167
-#: ../../../../inc/Controller.class.php:168 ../../../../inc/Init.class.php:282
+#: ../../../../inc/SP/Controller/Controller.class.php:191
+#: ../../../../inc/SP/Controller/Controller.class.php:192
+#: ../../../../inc/SP/Controller/Controller.class.php:193
+#: ../../../../inc/SP/Controller/Controller.class.php:194
+#: ../../../../inc/SP/Core/Init.class.php:267
msgid "Consulte con el administrador"
msgstr "Kérem, keresse a rendszergazdát"
# "You don't have permission to access to this page"
-#: ../../../../inc/Controller.class.php:167
+#: ../../../../inc/SP/Controller/Controller.class.php:193
msgid "No tiene permisos para acceder a esta página"
msgstr "Nincs jogosultságod belépni ebbe az oldalba"
# "You don't have permission to do this operation"
-#: ../../../../inc/Controller.class.php:168
+#: ../../../../inc/SP/Controller/Controller.class.php:194
msgid "No tiene permisos para realizar esta operación"
msgstr "Nincs jogosultságod végrehajtani ezt a mûveletet"
-# "Warning"
-#: ../../../../inc/Crypt.class.php:122 ../../../../inc/Email.class.php:148
-msgid "Aviso"
-msgstr "Figyelem"
+# "Event log cleared"
+#: ../../../../inc/SP/Controller/Eventlog.class.php:102
+msgid "Registro de eventos vaciado"
+msgstr "Esemény napló törölve"
-#: ../../../../inc/Crypt.class.php:122
-msgid ""
-"Se ha regenerado el HASH de clave maestra. No es necesaria ninguna acción."
-msgstr ""
+# "Error on clearing event log"
+#: ../../../../inc/SP/Controller/Eventlog.class.php:104
+msgid "Error al vaciar el registro de eventos"
+msgstr "Hiba az esemény napló törlése közben"
-# "Crypto module can't be loaded"
-#: ../../../../inc/Crypt.class.php:186
-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:197
-msgid "Error al generar datos cifrados"
-msgstr "Hiba a titkosítási folyamat közben"
-
-# "Unable to create customer"
-#: ../../../../inc/CryptPKI.class.php:46
+# "New Category"
+#: ../../../../inc/SP/Controller/Grids.class.php:85
#, fuzzy
-msgid "No es posible generar las claves RSA"
-msgstr "Ügyfél létrehozása meghiusúlt"
+msgid "Buscar Categoría"
+msgstr "Új Kategória"
-# "File doesn't exist"
-#: ../../../../inc/CryptPKI.class.php:112
-#: ../../../../inc/CryptPKI.class.php:143
+# "Delete Category"
+#: ../../../../inc/SP/Controller/Grids.class.php:115
+#: ../../../../inc/SP/Controller/Grids.class.php:116
+#: ../../../../inc/SP/Mgmt/Category.class.php:73
+msgid "Eliminar Categoría"
+msgstr "Kategória törlése"
+
+# "Categories management"
+#: ../../../../inc/SP/Controller/Grids.class.php:143
+msgid "Gestión de Categorías"
+msgstr "Kategória Menedzsment"
+
+# "New Account"
+#: ../../../../inc/SP/Controller/Grids.class.php:179
#, 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:348
-#: ../../../../inc/XmlImport.class.php:62
-#: ../../../../inc/XmlImport.class.php:63
-#: ../../../../web/ConfigC.class.php:199
-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õ"
-
-#: ../../../../inc/CustomFields.class.php:276
-#: ../../../../web/AccountsMgmtC.class.php:301
-#: ../../../../inc/themes/classic/profiles.inc:107
-#: ../../../../inc/themes/material-blue/profiles.inc:124
-msgid "Campos Personalizados"
-msgstr ""
-
-#: ../../../../inc/CustomFields.class.php:291
-msgid "Actualizando datos encriptados"
-msgstr ""
-
-# "Records updated"
-#: ../../../../inc/CustomFields.class.php:318
-#, fuzzy
-msgid "Registros no actualizados"
-msgstr "Rekordok frissítve"
-
-# "Text to search"
-#: ../../../../inc/CustomFieldsBase.class.php:86
-#, fuzzy
-msgid "Texto"
-msgstr "Keresendõ szöveg"
-
-# "Date Added"
-#: ../../../../inc/CustomFieldsBase.class.php:88
-#, fuzzy
-msgid "Fecha"
-msgstr "Dátum hozzáadva"
-
-#: ../../../../inc/CustomFieldsBase.class.php:89
-msgid "Número"
-msgstr ""
-
-# "Email"
-#: ../../../../inc/CustomFieldsBase.class.php:90
-#: ../../../../inc/themes/classic/passreset.inc:22
-#: ../../../../inc/themes/classic/users.inc:61
-#: ../../../../inc/themes/material-blue/users.inc:71
-msgid "Email"
-msgstr "Email"
-
-#: ../../../../inc/CustomFieldsBase.class.php:91
-msgid "Teléfono"
-msgstr ""
-
-#: ../../../../inc/CustomFieldsBase.class.php:92
-msgid "Link"
-msgstr ""
-
-#: ../../../../inc/CustomFieldsBase.class.php:93
-msgid "Color"
-msgstr ""
-
-# "Categories"
-#: ../../../../inc/CustomFieldsBase.class.php:107
-#: ../../../../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:108
-#: ../../../../inc/themes/classic/profiles.inc:103
-#: ../../../../inc/themes/material-blue/profiles.inc:119
-msgid "Clientes"
-msgstr "Ügyfél"
-
-# "Groups"
-#: ../../../../inc/CustomFieldsBase.class.php:110
-#: ../../../../inc/themes/classic/account.inc:143
-#: ../../../../inc/themes/classic/profiles.inc:89
-#: ../../../../inc/themes/material-blue/account.inc:170
-#: ../../../../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"
+msgid "Buscar Cliente"
+msgstr "Keresés"
# "Delete Customer"
-#: ../../../../inc/Customer.class.php:163
-#: ../../../../web/AccountsMgmtC.class.php:160
+#: ../../../../inc/SP/Controller/Grids.class.php:209
+#: ../../../../inc/SP/Controller/Grids.class.php:210
+#: ../../../../inc/SP/Mgmt/Customer.class.php:178
msgid "Eliminar Cliente"
msgstr "Ügyfél törlése"
-# "Unable to connect to DB"
-#: ../../../../inc/DBConnectionFactory.class.php:83
-#: ../../../../inc/DBConnectionFactory.class.php:85
-#: ../../../../inc/DBConnectionFactory.class.php:99
-#: ../../../../inc/Installer.class.php:235
-#: ../../../../inc/Migrate.class.php:114
-msgid "No es posible conectar con la BD"
-msgstr "Csatlakozás a DB-hez meghiusúlt"
+# "Customers Management"
+#: ../../../../inc/SP/Controller/Grids.class.php:237
+msgid "Gestión de Clientes"
+msgstr "Ügyfél Menedzsment"
-# Please, check connection parameters
-#: ../../../../inc/DBConnectionFactory.class.php:83
-#: ../../../../inc/DBConnectionFactory.class.php:85
-#: ../../../../inc/Installer.class.php:236
-#: ../../../../inc/Migrate.class.php:115
+# "New Account"
+#: ../../../../inc/SP/Controller/Grids.class.php:252
#, fuzzy
-msgid "Compruebe los datos de conexión"
-msgstr "Please, check connection parameters"
+msgid "Buscar Campo"
+msgstr "Keresés"
-# "N/A"
-#: ../../../../inc/Email.class.php:59 ../../../../inc/UserUtil.class.php:182
-msgid "N/D"
-msgstr "n.a."
+# "Delete Group"
+#: ../../../../inc/SP/Controller/Grids.class.php:282
+#: ../../../../inc/SP/Controller/Grids.class.php:283
+#, fuzzy
+msgid "Eliminar Campo"
+msgstr "Profil törlése"
+
+#: ../../../../inc/SP/Controller/Grids.class.php:291
+#: ../../../../inc/themes/classic/customfields.inc:27
+#: ../../../../inc/themes/material-blue/customfields.inc:30
+#, fuzzy
+msgid "Módulo"
+msgstr "Modul nem elérhetõ"
+
+#: ../../../../inc/SP/Controller/Grids.class.php:312
+#: ../../../../inc/SP/Mgmt/CustomFields.class.php:313
+#: ../../../../inc/themes/classic/profiles.inc:107
+#: ../../../../inc/themes/material-blue/profiles.inc:131
+msgid "Campos Personalizados"
+msgstr ""
+
+# "Download File"
+#: ../../../../inc/SP/Controller/Grids.class.php:327
+#, fuzzy
+msgid "Buscar Archivo"
+msgstr "Fájl letöltés"
+
+# "View File"
+#: ../../../../inc/SP/Controller/Grids.class.php:334
+#: ../../../../inc/themes/material-blue/files.inc:23
+msgid "Ver Archivo"
+msgstr "Fájl megtekintése"
+
+# "Delete File"
+#: ../../../../inc/SP/Controller/Grids.class.php:344
+#: ../../../../inc/SP/Mgmt/Files.class.php:130
+#: ../../../../inc/themes/material-blue/files.inc:18
+msgid "Eliminar Archivo"
+msgstr "Fájl törlése"
+
+# "Files management"
+#: ../../../../inc/SP/Controller/Grids.class.php:376
+#, fuzzy
+msgid "Gestión de Archivos"
+msgstr "Fájl menedzsment"
+
+# "New Account"
+#: ../../../../inc/SP/Controller/Grids.class.php:391
+#, fuzzy
+msgid "Buscar Cuenta"
+msgstr "Keresés"
+
+# "Customers Management"
+#: ../../../../inc/SP/Controller/Grids.class.php:424
+#, fuzzy
+msgid "Gestión de Cuentas"
+msgstr "Ügyfél Menedzsment"
+
+# "User"
+#: ../../../../inc/SP/Controller/Grids.class.php:439
+#, fuzzy
+msgid "Buscar Usuario"
+msgstr "Felhasználó részletek"
+
+# "View user details"
+#: ../../../../inc/SP/Controller/Grids.class.php:458
+#: ../../../../inc/SP/Controller/Grids.class.php:459
+msgid "Ver Detalles de Usuario"
+msgstr "Felhasználó részletek"
+
+# "Delete User"
+#: ../../../../inc/SP/Controller/Grids.class.php:480
+#: ../../../../inc/SP/Controller/Grids.class.php:481
+#: ../../../../inc/SP/Mgmt/User/UserBase.class.php:618
+msgid "Eliminar Usuario"
+msgstr "felhasználó törlése"
+
+# "Change user password"
+#: ../../../../inc/SP/Controller/Grids.class.php:491
+#: ../../../../inc/SP/Controller/Grids.class.php:492
+msgid "Cambiar Clave de Usuario"
+msgstr "Változás felhasználói jelszó"
+
+# "Properties"
+#: ../../../../inc/SP/Controller/Grids.class.php:505
+msgid "Propiedades"
+msgstr "Beállítások"
+
+# "Users Management"
+#: ../../../../inc/SP/Controller/Grids.class.php:531
+msgid "Gestión de Usuarios"
+msgstr "Felhasználó Menedzsment"
+
+# "Edit Group"
+#: ../../../../inc/SP/Controller/Grids.class.php:546
+#, fuzzy
+msgid "Buscar Grupo"
+msgstr "Csoport módosítás"
+
+# "Delete Group"
+#: ../../../../inc/SP/Controller/Grids.class.php:576
+#: ../../../../inc/SP/Controller/Grids.class.php:577
+#: ../../../../inc/SP/Mgmt/User/Groups.class.php:397
+msgid "Eliminar Grupo"
+msgstr "Csoport törlése"
+
+# "Groups Management"
+#: ../../../../inc/SP/Controller/Grids.class.php:604
+msgid "Gestión de Grupos"
+msgstr "Csoport Menedzsment"
+
+# "Profile"
+#: ../../../../inc/SP/Controller/Grids.class.php:619
+#, fuzzy
+msgid "Buscar Perfil"
+msgstr "Nézet"
+
+# "View user details"
+#: ../../../../inc/SP/Controller/Grids.class.php:638
+#: ../../../../inc/SP/Controller/Grids.class.php:639
+#, fuzzy
+msgid "Ver Detalles de Perfil"
+msgstr "Felhasználó részletek"
+
+# "Delete Profile"
+#: ../../../../inc/SP/Controller/Grids.class.php:660
+#: ../../../../inc/SP/Controller/Grids.class.php:661
+#: ../../../../inc/SP/Mgmt/User/ProfileBase.class.php:562
+msgid "Eliminar Perfil"
+msgstr "Profil törlése"
+
+# "Profiles Management"
+#: ../../../../inc/SP/Controller/Grids.class.php:687
+msgid "Gestión de Perfiles"
+msgstr "Profil Menedzsment"
+
+# "New Account"
+#: ../../../../inc/SP/Controller/Grids.class.php:702
+#, fuzzy
+msgid "Buscar Token"
+msgstr "Keresés"
+
+#: ../../../../inc/SP/Controller/Grids.class.php:721
+#: ../../../../inc/SP/Controller/Grids.class.php:722
+#, fuzzy
+msgid "Ver token de Autorización"
+msgstr "Felhasználó részletek"
# "Action"
-#: ../../../../inc/Email.class.php:60 ../../../../web/UsersMgmtC.class.php:393
+#: ../../../../inc/SP/Controller/Grids.class.php:753
+#: ../../../../inc/SP/Log/Email.class.php:68
#: ../../../../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"
+# "Users Management"
+#: ../../../../inc/SP/Controller/Grids.class.php:772
+#, fuzzy
+msgid "Gestión de Autorizaciones API"
+msgstr "Fálj menedzsment inaktív"
-# "Send Email"
-#: ../../../../inc/Email.class.php:77
-msgid "Enviar Email"
-msgstr "Email küldése"
+# "New Account"
+#: ../../../../inc/SP/Controller/Grids.class.php:787
+#, fuzzy
+msgid "Buscar Enlace"
+msgstr "Keresés"
-# "Email sent"
-#: ../../../../inc/Email.class.php:81
-msgid "Correo enviado"
-msgstr "Email elküldve"
+# "View password"
+#: ../../../../inc/SP/Controller/Grids.class.php:794
+#: ../../../../inc/SP/Controller/Grids.class.php:795
+#, fuzzy
+msgid "Ver Enlace"
+msgstr "Jelszó"
-# "Error on sending email"
-#: ../../../../inc/Email.class.php:83
-msgid "Error al enviar correo"
-msgstr "Hiba az email küldése közben"
+#: ../../../../inc/SP/Controller/Grids.class.php:804
+#: ../../../../inc/SP/Controller/Grids.class.php:805
+msgid "Renovar Enlace"
+msgstr ""
-# "Recipient"
-#: ../../../../inc/Email.class.php:87
-msgid "Destinatario"
-msgstr "Címzett"
+# "Delete Account"
+#: ../../../../inc/SP/Controller/Grids.class.php:815
+#: ../../../../inc/SP/Controller/Grids.class.php:816
+#: ../../../../inc/SP/Mgmt/PublicLinkBase.class.php:275
+#, fuzzy
+msgid "Eliminar Enlace"
+msgstr "Fiók törlése"
-# "CC"
-#: ../../../../inc/Email.class.php:90
-msgid "CC"
-msgstr "CC"
+# "Date Modified"
+#: ../../../../inc/SP/Controller/Grids.class.php:825
+#: ../../../../inc/themes/material-blue/publiclinks.inc:10
+#, fuzzy
+msgid "Fecha Creación"
+msgstr "Adat módosítva"
-# "File successfully uploaded"
-#: ../../../../inc/FileImport.class.php:105
-msgid "Archivo no subido correctamente"
-msgstr "A fájl feltöltése sikeres"
+# "Date Modified"
+#: ../../../../inc/SP/Controller/Grids.class.php:826
+#: ../../../../inc/themes/material-blue/publiclinks.inc:14
+#, fuzzy
+msgid "Fecha Caducidad"
+msgstr "Adat módosítva"
-# "Please, check the web server's user permissions"
-#: ../../../../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"
+# "Password (Verify)"
+#: ../../../../inc/SP/Controller/Grids.class.php:828
+#: ../../../../inc/themes/material-blue/publiclinks.inc:22
+#, fuzzy
+msgid "Notificar"
+msgstr "Jelszó (Megerõsítés)"
-# "Please, check file extension"
-#: ../../../../inc/FileImport.class.php:116
-msgid "Compruebe la extensión del archivo"
-msgstr "Kérem, ellenõrizze a fájl kiterjesztését"
+# "Visits"
+#: ../../../../inc/SP/Controller/Grids.class.php:829
+#: ../../../../inc/themes/classic/account-details.inc:3
+#: ../../../../inc/themes/material-blue/account-details.inc:3
+#: ../../../../inc/themes/material-blue/publiclinks.inc:26
+msgid "Visitas"
+msgstr "Látogatók"
-# "Please, check PHP configuration for upload files"
-#: ../../../../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"
+# "Customers Management"
+#: ../../../../inc/SP/Controller/Grids.class.php:851
+#, fuzzy
+msgid "Gestión de Enlaces"
+msgstr "Ügyfél Menedzsment"
-# "Please, check temporary directory permissions"
-#: ../../../../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"
+# "Application Admin"
+#: ../../../../inc/SP/Controller/Main.class.php:170
+#: ../../../../inc/themes/classic/inc/Icons.class.php:53
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:51
+msgid "Admin Aplicación"
+msgstr "Admin alkalmazás"
+
+# "Search"
+#: ../../../../inc/SP/Controller/Main.class.php:188
+msgid "Buscar"
+msgstr "Keresés"
+
+# "Access user"
+#: ../../../../inc/SP/Controller/Main.class.php:200
+#, fuzzy
+msgid "Usuarios y Accesos"
+msgstr "Felhasználó elérése"
# "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
+#: ../../../../inc/SP/Controller/Main.class.php:206
#, fuzzy
-msgid "Error al añadir los usuarios del grupo"
-msgstr "Hiba a fiók felhasználóinak frissítése közben"
+msgid "Elementos y Personalización"
+msgstr "Profil törlése"
-# "Error on updating account's users"
-#: ../../../../inc/Groups.class.php:256
+# "Event Log"
+#: ../../../../inc/SP/Controller/Main.class.php:218
+#: ../../../../inc/themes/classic/eventlog.inc:2
+#: ../../../../inc/themes/material-blue/eventlog.inc:4
+msgid "Registro de Eventos"
+msgstr "Esemény napló"
+
+#: ../../../../inc/SP/Controller/Main.class.php:239
+msgid "Nuevo estilo visual basado en Material Design Lite by Google"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Main.class.php:240
#, fuzzy
-msgid "Error al actualizar los usuarios del grupo"
-msgstr "Hiba a fiók felhasználóinak frissítése közben"
+msgid "Usuarios en múltiples grupos"
+msgstr "Felhasználó csoportok importálása"
-# "Delete Group"
-#: ../../../../inc/Groups.class.php:369
-#: ../../../../web/UsersMgmtC.class.php:210
-msgid "Eliminar Grupo"
-msgstr "Csoport törlése"
-
-# "Error on user deletion"
-#: ../../../../inc/Groups.class.php:372
+# "Customers Management"
+#: ../../../../inc/SP/Controller/Main.class.php:241
#, fuzzy
-msgid "Error al eliminar los usuarios del grupo"
-msgstr "Hiba a felhasználó törlése közben"
+msgid "Previsualización de imágenes"
+msgstr "Kérés fiók módosításához"
-# Mime type not supported
-#: ../../../../inc/Import.class.php:109
+#: ../../../../inc/SP/Controller/Main.class.php:242
+msgid "Mostrar claves como imágenes"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Main.class.php:243
+msgid "Campos personalizados"
+msgstr ""
+
+# "Query error"
+#: ../../../../inc/SP/Controller/Main.class.php:244
#, fuzzy
-msgid "Tipo mime no soportado"
-msgstr "Fájltípus nem engedélyezett"
+msgid "API de consultas"
+msgstr "Kérés fiók módosításához"
-# Please, check the file format
-#: ../../../../inc/Import.class.php:110
+# "Enable Authentication"
+#: ../../../../inc/SP/Controller/Main.class.php:245
+#: ../../../../inc/themes/classic/login-2fa.inc:9
+#: ../../../../inc/themes/material-blue/login-2fa.inc:7
+#: ../../../../inc/themes/material-blue/preferences-security.inc:13
#, fuzzy
-msgid "Compruebe el formato del archivo"
-msgstr "Kérem, ellenõrizze a CSV fájl kiterjesztését"
+msgid "Autentificación en 2 pasos"
+msgstr "Engedélyezése Hitelesítés"
-# "Import finished"
-#: ../../../../inc/Import.class.php:124 ../../../../inc/Import.class.php:127
-#: ../../../../inc/Migrate.class.php:91
-msgid "Importación finalizada"
-msgstr "Importálás kész"
+#: ../../../../inc/SP/Controller/Main.class.php:246
+#, fuzzy
+msgid "Complejidad de generador de claves"
+msgstr "Nem találom a véletlen szám generátort"
+
+#: ../../../../inc/SP/Controller/Main.class.php:247
+msgid "Consultas especiales"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Main.class.php:248
+msgid "Exportación a XML"
+msgstr ""
+
+# "Master password too short"
+#: ../../../../inc/SP/Controller/Main.class.php:249
+#, fuzzy
+msgid "Clave maestra temporal"
+msgstr "Generate Temporary Password"
+
+#: ../../../../inc/SP/Controller/Main.class.php:250
+msgid "Importación de cuentas desde sysPass, KeePass, KeePassX y CSV"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Main.class.php:251
+msgid "Optimización del código y mayor rapidez de carga"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Main.class.php:252
+msgid "Mejoras de seguridad en XSS e inyección SQL"
+msgstr ""
+
+# "This PHP version is vulnerable to NULL Byte attack CVE-2006-7243)"
+#: ../../../../inc/SP/Controller/Main.class.php:293
+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/SP/Controller/Main.class.php:294
+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/SP/Controller/Main.class.php:301
+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/SP/Controller/Main.class.php:302
+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"
+#: ../../../../inc/SP/Controller/Main.class.php:321
+msgid "Instalación finalizada"
+msgstr "A telepítés befejezõdött"
+
+# "Click here to access"
+#: ../../../../inc/SP/Controller/Main.class.php:322
+msgid "Pulse aquí para acceder"
+msgstr ""
+"Kattinst here a "
+"bejelentkezéshez"
+
+# "Download new version"
+#: ../../../../inc/SP/Controller/Main.class.php:419
+msgid "Descargar nueva versión"
+msgstr "Új verzió letöltése"
+
+#: ../../../../inc/SP/Controller/Main.class.php:430
+msgid "Avisos de sysPass"
+msgstr ""
+
+# "Security"
+#: ../../../../inc/SP/Controller/UsersPrefs.class.php:94
+#: ../../../../inc/themes/classic/mail.inc:63
+#: ../../../../inc/themes/material-blue/mail.inc:88
+msgid "Seguridad"
+msgstr "Biztonság"
+
+#: ../../../../inc/SP/Controller/UsersPrefs.class.php:132
+#: ../../../../inc/themes/classic/sessionbar.inc:9
+msgid "Preferencias"
+msgstr ""
+
+# "Access denied to"
+#: ../../../../inc/SP/Core/Acl.class.php:120
+msgid "Denegado acceso a"
+msgstr "Belépés megtagadva"
+
+# "New Account"
+#: ../../../../inc/SP/Core/Acl.class.php:134
+#, fuzzy
+msgid "Buscar Cuentas"
+msgstr "Keresés"
+
+# "Account"
+#: ../../../../inc/SP/Core/Acl.class.php:135
+#, fuzzy
+msgid "Ver Cuenta"
+msgstr "Fiók adatok"
+
+# "Edit account password"
+#: ../../../../inc/SP/Core/Acl.class.php:139
+#, fuzzy
+msgid "Editar Clave de Cuenta"
+msgstr "fiók jelszavának módosításe"
+
+# "View History"
+#: ../../../../inc/SP/Core/Acl.class.php:140
+#: ../../../../inc/themes/classic/profiles.inc:28
+#: ../../../../inc/themes/material-blue/profiles.inc:42
+msgid "Ver Historial"
+msgstr "Elõzmények"
+
+# "Files"
+#: ../../../../inc/SP/Core/Acl.class.php:143
+#: ../../../../inc/themes/classic/account-files.inc:3
+#: ../../../../inc/themes/classic/profiles.inc:50
+#: ../../../../inc/themes/material-blue/account-files.inc:3
+#: ../../../../inc/themes/material-blue/config-files.inc:4
+#: ../../../../inc/themes/material-blue/profiles.inc:62
+msgid "Archivos"
+msgstr "Fájlok"
+
+# "Request"
+#: ../../../../inc/SP/Core/Acl.class.php:144
+#, fuzzy
+msgid "Peticiones"
+msgstr "Email kérések engedélyezése"
+
+# "Application Admin"
+#: ../../../../inc/SP/Core/Acl.class.php:145
+#, fuzzy
+msgid "Gestión Aplicación"
+msgstr "Menedzsment"
+
+# "Categories management"
+#: ../../../../inc/SP/Core/Acl.class.php:146
+#, fuzzy
+msgid "Gestión Categorías"
+msgstr "Kategória Menedzsment"
+
+# "Customers Management"
+#: ../../../../inc/SP/Core/Acl.class.php:147
+#, fuzzy
+msgid "Gestión Clientes"
+msgstr "Ügyfél Menedzsment"
+
+# "Files management disabled"
+#: ../../../../inc/SP/Core/Acl.class.php:148
+#, fuzzy
+msgid "Gestión Campos Personalizados"
+msgstr "Menedzsment"
+
+#: ../../../../inc/SP/Core/Acl.class.php:149
+#, fuzzy
+msgid "Gestión Autorizaciones API"
+msgstr "Menedzsment"
+
+# "Users Management"
+#: ../../../../inc/SP/Core/Acl.class.php:150
+#: ../../../../inc/SP/Core/Acl.class.php:151
+#, fuzzy
+msgid "Gestión Usuarios"
+msgstr "Felhasználó Menedzsment"
+
+# "Groups Management"
+#: ../../../../inc/SP/Core/Acl.class.php:152
+#, fuzzy
+msgid "Gestión Grupos"
+msgstr "Csoport Menedzsment"
+
+# "Profiles Management"
+#: ../../../../inc/SP/Core/Acl.class.php:153
+#, fuzzy
+msgid "Gestión Perfiles"
+msgstr "Profil Menedzsment"
+
+# "General configuration"
+#: ../../../../inc/SP/Core/Acl.class.php:155
+#, fuzzy
+msgid "Configuración General"
+msgstr "Általános beállítások"
+
+#: ../../../../inc/SP/Core/Acl.class.php:158
+msgid "Exportar"
+msgstr ""
+
+# "phpPMS Import"
+#: ../../../../inc/SP/Core/Acl.class.php:159
+#: ../../../../inc/themes/classic/profiles.inc:74
+#: ../../../../inc/themes/material-blue/profiles.inc:94
+#, fuzzy
+msgid "Importar"
+msgstr "Fiókok importálása"
+
+# "Make Backup"
+#: ../../../../inc/SP/Core/Backup.class.php:51
+#: ../../../../inc/themes/classic/backup.inc:56
+msgid "Realizar Backup"
+msgstr "Archívum készítés"
+
+# Application and database backup successfully done
+#: ../../../../inc/SP/Core/Backup.class.php:79
+#, fuzzy
+msgid "Copia de la aplicación y base de datos realizada correctamente"
+msgstr "Application and database backup successfully done"
+
+# "This operation is only available on Linux environments"
+#: ../../../../inc/SP/Core/Backup.class.php:197
+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/SP/Core/Backup.class.php:199
+#, fuzzy
+msgid "Error al realizar backup en modo compatibilidad"
+msgstr "Error while doing backup in compatibility mode"
+
+# "Unable to create backup directory"
+#: ../../../../inc/SP/Core/Backup.class.php:253
+#: ../../../../inc/SP/Core/XmlExport.class.php:487
+msgid "No es posible crear el directorio de backups"
+msgstr "Arcív mappa létrehozása meghiusúlt"
+
+# "Check backup directory permissions"
+#: ../../../../inc/SP/Core/Backup.class.php:258
+#: ../../../../inc/SP/Core/XmlExport.class.php:492
+msgid "Compruebe los permisos del directorio de backups"
+msgstr "Ellenõrizze az archiválás mappa jogosultságait"
+
+# "Warning"
+#: ../../../../inc/SP/Core/Crypt.class.php:132
+#: ../../../../inc/SP/Log/Email.class.php:154
+#: ../../../../inc/themes/classic/inc/Icons.class.php:70
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:68
+msgid "Aviso"
+msgstr "Figyelem"
+
+#: ../../../../inc/SP/Core/Crypt.class.php:132
+msgid ""
+"Se ha regenerado el HASH de clave maestra. No es necesaria ninguna acción."
+msgstr ""
+
+# "Crypto module can't be loaded"
+#: ../../../../inc/SP/Core/Crypt.class.php:196
+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/SP/Core/Crypt.class.php:207
+msgid "Error al generar datos cifrados"
+msgstr "Hiba a titkosítási folyamat közben"
+
+# "Unable to create customer"
+#: ../../../../inc/SP/Core/CryptPKI.class.php:47
+#, fuzzy
+msgid "No es posible generar las claves RSA"
+msgstr "Ügyfél létrehozása meghiusúlt"
+
+# "File doesn't exist"
+#: ../../../../inc/SP/Core/CryptPKI.class.php:113
+#: ../../../../inc/SP/Core/CryptPKI.class.php:115
+#: ../../../../inc/SP/Core/CryptPKI.class.php:146
+#: ../../../../inc/SP/Core/CryptPKI.class.php:148
+#, fuzzy
+msgid "El archivo de clave no existe"
+msgstr "A fájl nem létezik"
# "Error on checking database"
-#: ../../../../inc/Init.class.php:182
+#: ../../../../inc/SP/Core/Init.class.php:135
msgid "Error en la verificación de la base de datos"
msgstr "Hiba az adatbázis ellenõrzése közben"
# "Session"
-#: ../../../../inc/Init.class.php:278
+#: ../../../../inc/SP/Core/Init.class.php:263
msgid "Sesion"
msgstr "Munkamenet"
# "Session cannot be initialized."
-#: ../../../../inc/Init.class.php:278 ../../../../inc/Init.class.php:282
+#: ../../../../inc/SP/Core/Init.class.php:263
+#: ../../../../inc/SP/Core/Init.class.php:267
msgid "La sesión no puede ser inicializada"
msgstr "A munkamenetot nem lehet elindítani"
# "\"/config\" directory doesn't exist."
-#: ../../../../inc/Init.class.php:366
+#: ../../../../inc/SP/Core/Init.class.php:364
msgid "El directorio \"/config\" no existe"
msgstr "\"/config\" mappa nem létezik"
# "Unable to write into \"/config\" directory"
-#: ../../../../inc/Init.class.php:371
+#: ../../../../inc/SP/Core/Init.class.php:369
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:379
+#: ../../../../inc/SP/Core/Init.class.php:376
msgid "Los permisos del directorio \"/config\" son incorrectos"
msgstr "\"/config\" mappa jogosultságai helytelenek"
# Current
-#: ../../../../inc/Init.class.php:379
+#: ../../../../inc/SP/Core/Init.class.php:376
#, fuzzy
msgid "Actual:"
msgstr "Általános"
# Needed: 750
-#: ../../../../inc/Init.class.php:379
+#: ../../../../inc/SP/Core/Init.class.php:376
#, fuzzy
msgid "Necesario: 750"
msgstr "Felhasználónév szükséges"
# "Application in maintenance"
-#: ../../../../inc/Init.class.php:428
+#: ../../../../inc/SP/Core/Init.class.php:425
msgid "Aplicación en mantenimiento"
msgstr "Az alkalmazás fut"
# "It will be running in short"
-#: ../../../../inc/Init.class.php:428
+#: ../../../../inc/SP/Core/Init.class.php:425
msgid "En breve estará operativa"
msgstr "Hamar végezni fog"
# "Logout session"
-#: ../../../../inc/Init.class.php:465
+#: ../../../../inc/SP/Core/Init.class.php:462
msgid "Finalizar sesión"
msgstr "Kijelentkezés"
# "Inactive time"
-#: ../../../../inc/Init.class.php:467
+#: ../../../../inc/SP/Core/Init.class.php:464
msgid "Tiempo inactivo"
msgstr "Idõ kikapcsolása"
# "Total time"
-#: ../../../../inc/Init.class.php:468
+#: ../../../../inc/SP/Core/Init.class.php:465
msgid "Tiempo total"
msgstr "Teljes idõ"
# "The application needs to be updated"
-#: ../../../../inc/Init.class.php:507
+#: ../../../../inc/SP/Core/Init.class.php:504
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:507
+#: ../../../../inc/SP/Core/Init.class.php:504
#, 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:507
+#: ../../../../inc/SP/Core/Init.class.php:504
+#: ../../../../inc/themes/classic/inc/Icons.class.php:57
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:55
#: ../../../../inc/themes/classic/upgrade.inc:20
-#: ../../../../inc/themes/material-blue/upgrade.inc:22
+#: ../../../../inc/themes/material-blue/upgrade.inc:26
#, fuzzy
msgid "Actualizar"
msgstr "Frissítés Számla"
# "Update"
-#: ../../../../inc/Init.class.php:538
+#: ../../../../inc/SP/Core/Init.class.php:534
+#: ../../../../inc/themes/material-blue/upgrade.inc:4
msgid "Actualización"
msgstr "Frissítés"
# "Version updating done."
-#: ../../../../inc/Init.class.php:539
+#: ../../../../inc/SP/Core/Init.class.php:535
msgid "Actualización de versión realizada."
msgstr "Verzió frissítés kész"
-# "Version"
-#: ../../../../inc/Init.class.php:540
-#: ../../../../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:127
+#: ../../../../inc/SP/Core/Installer.class.php:136
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:128
+#: ../../../../inc/SP/Core/Installer.class.php:137
msgid "Usuario admin para acceso a la aplicación"
msgstr "Rendszergazda felhasználó bejelentkezés"
# "Enter admin password"
-#: ../../../../inc/Installer.class.php:132
+#: ../../../../inc/SP/Core/Installer.class.php:141
msgid "Indicar la clave de admin"
msgstr "Írd be az admin jelszót"
# "Application administrator's password"
-#: ../../../../inc/Installer.class.php:133
+#: ../../../../inc/SP/Core/Installer.class.php:142
msgid "Clave del usuario admin de la aplicación"
msgstr "Az alkalmazás rendszergazdai jelszava"
# "Enter master password"
-#: ../../../../inc/Installer.class.php:137
+#: ../../../../inc/SP/Core/Installer.class.php:146
msgid "Indicar la clave maestra"
msgstr "Írd be a mester jelszót"
# "Master password to encrypt the passwords"
-#: ../../../../inc/Installer.class.php:138
+#: ../../../../inc/SP/Core/Installer.class.php:147
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:142
+#: ../../../../inc/SP/Core/Installer.class.php:151
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:143
+#: ../../../../inc/SP/Core/Installer.class.php:152
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:147
+#: ../../../../inc/SP/Core/Installer.class.php:156
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:148
+#: ../../../../inc/SP/Core/Installer.class.php:157
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:152
+#: ../../../../inc/SP/Core/Installer.class.php:161
msgid "Indicar la clave de la BBDD"
msgstr "Írd be az aadtbázis jelszavát"
# "Database administartor's password"
-#: ../../../../inc/Installer.class.php:153
+#: ../../../../inc/SP/Core/Installer.class.php:162
msgid "Clave del usuario administrador de la Base de Datos"
msgstr "Az adatbázis rendszergazdai jelszava"
# "Enter database name"
-#: ../../../../inc/Installer.class.php:157
+#: ../../../../inc/SP/Core/Installer.class.php:166
msgid "Indicar el nombre de la BBDD"
msgstr "Írd be az adatbázis nevét"
# "Application database name. eg. syspass"
-#: ../../../../inc/Installer.class.php:158
+#: ../../../../inc/SP/Core/Installer.class.php:167
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:162
+#: ../../../../inc/SP/Core/Installer.class.php:171
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:163
+#: ../../../../inc/SP/Core/Installer.class.php:172
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:167
+#: ../../../../inc/SP/Core/Installer.class.php:176
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:168
+#: ../../../../inc/SP/Core/Installer.class.php:177
msgid "Servidor donde se instalará la Base de Datos"
msgstr "Szerver, ahová az adatbázis telepítve lesz"
+# "Unable to connect to DB"
+#: ../../../../inc/SP/Core/Installer.class.php:245
+#: ../../../../inc/SP/Import/Migrate.class.php:123
+#: ../../../../inc/SP/Storage/DBConnectionFactory.class.php:86
+#: ../../../../inc/SP/Storage/DBConnectionFactory.class.php:88
+#: ../../../../inc/SP/Storage/DBConnectionFactory.class.php:102
+msgid "No es posible conectar con la BD"
+msgstr "Csatlakozás a DB-hez meghiusúlt"
+
+# Please, check connection parameters
+#: ../../../../inc/SP/Core/Installer.class.php:246
+#: ../../../../inc/SP/Import/Migrate.class.php:124
+#: ../../../../inc/SP/Storage/DBConnectionFactory.class.php:86
+#: ../../../../inc/SP/Storage/DBConnectionFactory.class.php:88
+#, fuzzy
+msgid "Compruebe los datos de conexión"
+msgstr "Please, check connection parameters"
+
# "Unable to delete, user in use"
-#: ../../../../inc/Installer.class.php:267
+#: ../../../../inc/SP/Core/Installer.class.php:276
#, fuzzy
msgid "No es posible comprobar el usuario de sysPass"
msgstr "Nem lehet törölni, a felhaszánáló használatban van"
# "Please, check 'config' directory permissions"
-#: ../../../../inc/Installer.class.php:268
+#: ../../../../inc/SP/Core/Installer.class.php:277
#, fuzzy
msgid "Compruebe los permisos del usuario de conexión a la BD"
msgstr "Kérem, ellenõrizze a 'config' mappa jogosultságait"
# "MySQL user already exist"
-#: ../../../../inc/Installer.class.php:319
+#: ../../../../inc/SP/Core/Installer.class.php:328
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:320
+#: ../../../../inc/SP/Core/Installer.class.php:329
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:333
+#: ../../../../inc/SP/Core/Installer.class.php:342
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:334
+#: ../../../../inc/SP/Core/Installer.class.php:343
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:343
-#: ../../../../inc/Installer.class.php:414
+#: ../../../../inc/SP/Core/Installer.class.php:352
+#: ../../../../inc/SP/Core/Installer.class.php:423
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:344
-#: ../../../../inc/Installer.class.php:355
+#: ../../../../inc/SP/Core/Installer.class.php:353
+#: ../../../../inc/SP/Core/Installer.class.php:364
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:354
+#: ../../../../inc/SP/Core/Installer.class.php:363
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:387
+#: ../../../../inc/SP/Core/Installer.class.php:395
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:388
+#: ../../../../inc/SP/Core/Installer.class.php:396
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:396
+#: ../../../../inc/SP/Core/Installer.class.php:404
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:397
+#: ../../../../inc/SP/Core/Installer.class.php:405
msgid ""
"No es posible usar la Base de Datos para crear la estructura. Compruebe los "
"permisos y que no exista."
@@ -2571,525 +3260,1002 @@ msgstr ""
"jogosultságokat és hogy valóban létezik az adatbázis"
# "Error on creating database structure."
-#: ../../../../inc/Installer.class.php:415
+#: ../../../../inc/SP/Core/Installer.class.php:424
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:438
+#: ../../../../inc/SP/Core/Installer.class.php:447
msgid "Error al crear el grupo \"admin\""
msgstr "Hiba az ügyfél létrehozása közben"
# "Warn to developer"
-#: ../../../../inc/Installer.class.php:439
-#: ../../../../inc/Installer.class.php:472
-#: ../../../../inc/Installer.class.php:489
-#: ../../../../inc/Installer.class.php:502
+#: ../../../../inc/SP/Core/Installer.class.php:448
+#: ../../../../inc/SP/Core/Installer.class.php:481
+#: ../../../../inc/SP/Core/Installer.class.php:498
+#: ../../../../inc/SP/Core/Installer.class.php:511
msgid "Informe al desarrollador"
msgstr "Figyelmeztetsd a fejlesztõt"
# "Error on creating \"admin\" profile"
-#: ../../../../inc/Installer.class.php:471
+#: ../../../../inc/SP/Core/Installer.class.php:480
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:488
+#: ../../../../inc/SP/Core/Installer.class.php:497
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:501
+#: ../../../../inc/SP/Core/Installer.class.php:510
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: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: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: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:212 ../../../../inc/Ldap.class.php:218
-#: ../../../../inc/Ldap.class.php:225 ../../../../inc/Ldap.class.php:230
-#: ../../../../inc/Ldap.class.php:235 ../../../../inc/Ldap.class.php:240
-msgid "Error al buscar RDN de grupo"
-msgstr "Hiba az RDN csoport keresése közben"
-
-# "Error on searching user DN"
-#: ../../../../inc/Ldap.class.php:289 ../../../../inc/Ldap.class.php:295
-#: ../../../../inc/Ldap.class.php:310 ../../../../inc/Ldap.class.php:315
-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:302 ../../../../inc/Ldap.class.php:307
-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:384 ../../../../inc/Ldap.class.php:390
-#: ../../../../inc/LdapADS.class.php:103 ../../../../inc/LdapADS.class.php:108
-msgid "Error al buscar el grupo de usuarios"
-msgstr "Hiba a keresése közben"
-
-# "User deleted"
-#: ../../../../inc/Ldap.class.php:397
-#, fuzzy
-msgid "Usuario verificado en grupo"
-msgstr "Csoportot használja a:"
-
-# "No group found with that name"
-#: ../../../../inc/LdapADS.class.php:112 ../../../../inc/LdapADS.class.php:117
-msgid "No se encontró el grupo con ese nombre"
-msgstr "Nincs ilyen nevû csoport"
-
-# "Clear Events"
-#: ../../../../inc/Log.class.php:88
-msgid "Vaciar Eventos"
-msgstr "Események törlése"
-
-# "Clear event log"
-#: ../../../../inc/Log.class.php:88
-#: ../../../../inc/themes/classic/eventlog.inc:98
-#: ../../../../inc/themes/material-blue/eventlog.inc:99
-msgid "Vaciar registro de eventos"
-msgstr "Esemény napló törlése"
-
-# "Missing parameters"
-#: ../../../../inc/Migrate.class.php:51
-msgid "Faltan parámetros"
-msgstr "Hiányzó paraméter"
-
-# "Incompatible version"
-#: ../../../../inc/Migrate.class.php:148
-msgid "La versión no es compatible"
-msgstr "Nem kompatibilis verzió"
-
-# "Please, update to last version of phpPMS"
-#: ../../../../inc/Migrate.class.php:149
-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:167
-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:210 ../../../../inc/Migrate.class.php:223
-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:228
-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:273
-msgid "No es posible crear el cliente"
-msgstr "Ügyfél létrehozása meghiusúlt"
-
-# "Please, contact to developer"
-#: ../../../../inc/Migrate.class.php:274
-msgid "Contacte con el desarrollador"
-msgstr "Kérem, keresse a fejlesztõt"
-
-# "Import Customers"
-#: ../../../../inc/Migrate.class.php:278
-msgid "Importar Clientes"
-msgstr "Ügyfelek importálása"
-
-# "Records"
-#: ../../../../inc/Migrate.class.php:280 ../../../../inc/Migrate.class.php:350
-#: ../../../../inc/Migrate.class.php:451 ../../../../inc/Migrate.class.php:524
-#: ../../../../inc/Migrate.class.php:632 ../../../../inc/Migrate.class.php:697
-#: ../../../../inc/Migrate.class.php:771 ../../../../inc/Migrate.class.php:861
-#: ../../../../inc/Migrate.class.php:932
-msgid "Registros"
-msgstr "Rekordok"
-
-# "Error on retrieving customer"
-#: ../../../../inc/Migrate.class.php:302
-msgid "Error al obtener los clientes"
-msgstr "Hiba az ügyfél betöltése közben"
-
-# "Error on retrieving accounts"
-#: ../../../../inc/Migrate.class.php:344
-msgid "Error al obtener cuentas"
-msgstr "Hiba a fiókok betöltése közben"
-
-# "Customer not found"
-#: ../../../../inc/Migrate.class.php:373
-msgid "Cliente no encontrado"
-msgstr "Nincs ügyfél találat"
-
-# "Error on importing account"
-#: ../../../../inc/Migrate.class.php:416
-msgid "Error al migrar cuenta"
-msgstr "Hiba a fiók importálása közben"
-
-# "Error on retrieving accounts groups"
-#: ../../../../inc/Migrate.class.php:445
-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:449
-msgid "Importar Grupos de Cuentas"
-msgstr "Fiók csoportok importálása"
-
-# "Error on accounts groups creation"
-#: ../../../../inc/Migrate.class.php:471
-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:518
-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:522
-msgid "Importar Histórico de Cuentas"
-msgstr "Fiók elõzmények importálása"
-
-# "Error on creating accounts history"
-#: ../../../../inc/Migrate.class.php:591
-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:626
-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:630
-msgid "Importar Archivos de Cuentas"
-msgstr "Fiók fájljainak importálása"
-
-# "Error on creating accounts files"
-#: ../../../../inc/Migrate.class.php:662
-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:691
-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:695
-msgid "Importar Categorías de Cuentas"
-msgstr "Fiók kategóriák importálása"
-
-# "Error on retrieving accounts categories"
-#: ../../../../inc/Migrate.class.php:717
-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:765
-msgid "Error al obtener los usuarios"
-msgstr "Hiba a felhasználók betöltése közben"
-
-# "Import Users"
-#: ../../../../inc/Migrate.class.php:769
-msgid "Importar Usuarios"
-msgstr "Felhasználók importálása"
-
-# "Error on creating users"
-#: ../../../../inc/Migrate.class.php:826
-msgid "Error al crear usuarios"
-msgstr "Hiba a profil létrehozása közben"
-
-# "Error on retrieving users groups"
-#: ../../../../inc/Migrate.class.php:855
-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:859
-msgid "Importar Grupos de Usuarios"
-msgstr "Felhasználó csoportok importálása"
-
-# "Error on adding users groups"
-#: ../../../../inc/Migrate.class.php:885
-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:930
-msgid "Importar Configuración"
-msgstr "Konfiguráció importálása"
-
-# "Edit Profile"
-#: ../../../../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:275
-msgid "Eliminar Perfil"
-msgstr "Profil törlése"
-
-# "Edit Profile"
-#: ../../../../inc/ProfileBase.class.php:593
-msgid "Modificar Perfil"
-msgstr "Profil 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"
-
-#: ../../../../inc/SyspassImport.class.php:111
-#, fuzzy
-msgid "No hay categorías para importar"
-msgstr "Nincsenek letölthetõ Archívumok"
-
-# "There're no backups for download"
-#: ../../../../inc/SyspassImport.class.php:136
-#, fuzzy
-msgid "No hay clientes para importar"
-msgstr "Ügyfelek importálása"
-
-# "There're no backups for download"
-#: ../../../../inc/SyspassImport.class.php:161
-#, fuzzy
-msgid "No hay cuentas para importar"
-msgstr "Nincsenek letölthetõ Archívumok"
-
-# "Unable to create customer"
-#: ../../../../inc/Template.class.php:91
+#: ../../../../inc/SP/Core/Template.class.php:113
+#: ../../../../inc/SP/Core/Template.class.php:114
+#: ../../../../inc/SP/Html/DataGrid/DataGridBase.class.php:222
#, fuzzy, php-format
msgid "No es posible obtener la plantilla \"%s\" : %s"
msgstr "Ügyfél létrehozása meghiusúlt"
# "Unable to create customer"
-#: ../../../../inc/Template.class.php:130
+#: ../../../../inc/SP/Core/Template.class.php:152
#, fuzzy, php-format
msgid "No es posible obtener la variable \"%s\""
msgstr "Ügyfél létrehozása meghiusúlt"
# "Unable to create customer"
-#: ../../../../inc/Template.class.php:173
+#: ../../../../inc/SP/Core/Template.class.php:195
#, fuzzy, php-format
msgid "No es posible destruir la variable \"%s\""
msgstr "Ügyfél létrehozása meghiusúlt"
# "Error on updating database"
-#: ../../../../inc/Upgrade.class.php:51
+#: ../../../../inc/SP/Core/Upgrade.class.php:59
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:52 ../../../../inc/Upgrade.class.php:58
+#: ../../../../inc/SP/Core/Upgrade.class.php:60
+#: ../../../../inc/SP/Core/Upgrade.class.php:66
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/SP/Core/Upgrade.class.php:60
+#: ../../../../inc/SP/Core/Upgrade.class.php:66
#: ../../../../inc/themes/classic/login.inc:32
-#: ../../../../inc/themes/material-blue/2fa.inc:24
+#: ../../../../inc/themes/material-blue/login-2fa.inc:24
#: ../../../../inc/themes/material-blue/login.inc:65
msgid "Acceder"
msgstr "Belépés"
# "Error on updating database"
-#: ../../../../inc/Upgrade.class.php:57
+#: ../../../../inc/SP/Core/Upgrade.class.php:65
#, 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:74
+#: ../../../../inc/SP/Core/Upgrade.class.php:82
msgid "Actualizar BBDD"
msgstr "Frissítse az adatbázist"
# "Database update not needed."
-#: ../../../../inc/Upgrade.class.php:127
+#: ../../../../inc/SP/Core/Upgrade.class.php:143
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:135
+#: ../../../../inc/SP/Core/Upgrade.class.php:155
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:144
+#: ../../../../inc/SP/Core/Upgrade.class.php:164
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:221
+#: ../../../../inc/SP/Core/Upgrade.class.php:241
msgid "Actualizar Configuración"
msgstr "Konfiguráció frissítése"
# "Configuration updating successfully done."
-#: ../../../../inc/Upgrade.class.php:221
+#: ../../../../inc/SP/Core/Upgrade.class.php:241
msgid "Actualización de la Configuración realizada correctamente."
msgstr "A beállítások elmentve"
+# CSV/XML Import
+#: ../../../../inc/SP/Core/XmlExport.class.php:125
+#, fuzzy
+msgid "Exportar XML"
+msgstr "Fiókok importálása"
+
+# "Error on creating accounts files"
+#: ../../../../inc/SP/Core/XmlExport.class.php:138
+#, fuzzy
+msgid "Error al realizar la exportación de cuentas"
+msgstr "Hiba a fiók fájlok létrehozása közben"
+
+# "Application successfully updated"
+#: ../../../../inc/SP/Core/XmlExport.class.php:146
+#, fuzzy
+msgid "Exportación de cuentas realizada correctamente"
+msgstr "A beállítások elmentve"
+
+# "Error on creating user"
+#: ../../../../inc/SP/Core/XmlExport.class.php:432
+#, fuzzy
+msgid "Error al crear el archivo XML"
+msgstr "Hiba az ügyfél létrehozása közben"
+
+#: ../../../../inc/SP/Http/XMLRPCResponseParse.class.php:68
+msgid "Respuesta XML-RPC inválida"
+msgstr ""
+
+# "The number of fields is incorrect"
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:115
+#, 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/SP/Import/CsvImportBase.class.php:116
+#, 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"
+
+# "Error on importing account"
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:147
+msgid "Error importando cuenta"
+msgstr "Hiba a fiók importálása közben"
+
+# "Error on importing account"
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:148
+#, fuzzy, php-format
+msgid "Error procesando línea %s"
+msgstr "Hiba a fiók importálása közben"
+
+# Account Expired
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:151
+#, fuzzy, php-format
+msgid "Cuenta importada: %s"
+msgstr "Munkamenet idõ"
+
+# "File successfully uploaded"
+#: ../../../../inc/SP/Import/FileImport.class.php:108
+msgid "Archivo no subido correctamente"
+msgstr "A fájl feltöltése sikeres"
+
+# "Please, check the web server's user permissions"
+#: ../../../../inc/SP/Import/FileImport.class.php:108
+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/SP/Import/FileImport.class.php:119
+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/SP/Import/FileImport.class.php:135
+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/SP/Import/FileImport.class.php:153
+#: ../../../../inc/SP/Import/FileImport.class.php:171
+msgid "Compruebe los permisos del directorio temporal"
+msgstr "Kérem, ellenõrizze az ideiglenes mappa jogosultságait"
+
+# Mime type not supported
+#: ../../../../inc/SP/Import/Import.class.php:115
+#, fuzzy
+msgid "Tipo mime no soportado"
+msgstr "Fájltípus nem engedélyezett"
+
+# Please, check the file format
+#: ../../../../inc/SP/Import/Import.class.php:116
+#, fuzzy
+msgid "Compruebe el formato del archivo"
+msgstr "Kérem, ellenõrizze a CSV fájl kiterjesztését"
+
+#: ../../../../inc/SP/Import/Import.class.php:126
+#: ../../../../inc/themes/classic/inc/Icons.class.php:66
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:64
+#: ../../../../inc/themes/classic/backup.inc:47
+#: ../../../../inc/themes/classic/backup.inc:51
+#: ../../../../inc/themes/classic/backup.inc:115
+#: ../../../../inc/themes/classic/backup.inc:119
+#: ../../../../inc/themes/classic/encryption.inc:90
+#: ../../../../inc/themes/classic/encryption.inc:94
+#: ../../../../inc/themes/classic/encryption.inc:159
+#: ../../../../inc/themes/classic/encryption.inc:163
+#: ../../../../inc/themes/classic/import.inc:12
+#: ../../../../inc/themes/classic/import.inc:33
+#: ../../../../inc/themes/classic/import.inc:86
+#: ../../../../inc/themes/classic/import.inc:90
+#: ../../../../inc/themes/classic/import.inc:117
+#: ../../../../inc/themes/classic/import.inc:139
+#: ../../../../inc/themes/classic/import.inc:153
+#: ../../../../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/classic/wiki.inc:107
+#: ../../../../inc/themes/classic/wiki.inc:127
+#: ../../../../inc/themes/classic/wiki.inc:150
+#: ../../../../inc/themes/classic/wiki.inc:173
+#: ../../../../inc/themes/classic/wiki.inc:200
+#: ../../../../inc/themes/material-blue/backup.inc:53
+#: ../../../../inc/themes/material-blue/encryption.inc:110
+#: ../../../../inc/themes/material-blue/encryption.inc:184
+#: ../../../../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"
+
+# "Import finished"
+#: ../../../../inc/SP/Import/Import.class.php:133
+#: ../../../../inc/SP/Import/Import.class.php:139
+#: ../../../../inc/SP/Import/Migrate.class.php:100
+msgid "Importación finalizada"
+msgstr "Importálás kész"
+
+# "Missing parameters"
+#: ../../../../inc/SP/Import/Migrate.class.php:60
+msgid "Faltan parámetros"
+msgstr "Hiányzó paraméter"
+
+# "Incompatible version"
+#: ../../../../inc/SP/Import/Migrate.class.php:157
+msgid "La versión no es compatible"
+msgstr "Nem kompatibilis verzió"
+
+# "Please, update to last version of phpPMS"
+#: ../../../../inc/SP/Import/Migrate.class.php:158
+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/SP/Import/Migrate.class.php:176
+msgid "Error al obtener la configuración"
+msgstr "Hiba a konfiguráció betöltése közben"
+
+# "Error on cleaning table"
+#: ../../../../inc/SP/Import/Migrate.class.php:222
+#: ../../../../inc/SP/Import/Migrate.class.php:239
+msgid "Error al vaciar tabla"
+msgstr "Hiba a tábla törlése közben"
+
+# "Current user is not application administrator"
+#: ../../../../inc/SP/Import/Migrate.class.php:244
+msgid "Usuario actual no es administrador de la aplicación"
+msgstr "A jelenlegi felhasználó nem rendszergazda"
+
+# "Unable to create customer"
+#: ../../../../inc/SP/Import/Migrate.class.php:291
+msgid "No es posible crear el cliente"
+msgstr "Ügyfél létrehozása meghiusúlt"
+
+# "Please, contact to developer"
+#: ../../../../inc/SP/Import/Migrate.class.php:292
+msgid "Contacte con el desarrollador"
+msgstr "Kérem, keresse a fejlesztõt"
+
+# "Import Customers"
+#: ../../../../inc/SP/Import/Migrate.class.php:296
+msgid "Importar Clientes"
+msgstr "Ügyfelek importálása"
+
+# "Records"
+#: ../../../../inc/SP/Import/Migrate.class.php:298
+#: ../../../../inc/SP/Import/Migrate.class.php:368
+#: ../../../../inc/SP/Import/Migrate.class.php:471
+#: ../../../../inc/SP/Import/Migrate.class.php:548
+#: ../../../../inc/SP/Import/Migrate.class.php:658
+#: ../../../../inc/SP/Import/Migrate.class.php:725
+#: ../../../../inc/SP/Import/Migrate.class.php:801
+#: ../../../../inc/SP/Import/Migrate.class.php:893
+#: ../../../../inc/SP/Import/Migrate.class.php:966
+msgid "Registros"
+msgstr "Rekordok"
+
+# "Error on retrieving customer"
+#: ../../../../inc/SP/Import/Migrate.class.php:320
+msgid "Error al obtener los clientes"
+msgstr "Hiba az ügyfél betöltése közben"
+
+# "Error on retrieving accounts"
+#: ../../../../inc/SP/Import/Migrate.class.php:362
+msgid "Error al obtener cuentas"
+msgstr "Hiba a fiókok betöltése közben"
+
+# "Customer not found"
+#: ../../../../inc/SP/Import/Migrate.class.php:391
+msgid "Cliente no encontrado"
+msgstr "Nincs ügyfél találat"
+
+# "Error on importing account"
+#: ../../../../inc/SP/Import/Migrate.class.php:436
+msgid "Error al migrar cuenta"
+msgstr "Hiba a fiók importálása közben"
+
+# "Error on retrieving accounts groups"
+#: ../../../../inc/SP/Import/Migrate.class.php:465
+msgid "Error al obtener los grupos de cuentas"
+msgstr "Hiba a fiók csoportok betöltése közben"
+
+# "Import Accounts Groups"
+#: ../../../../inc/SP/Import/Migrate.class.php:469
+msgid "Importar Grupos de Cuentas"
+msgstr "Fiók csoportok importálása"
+
+# "Error on accounts groups creation"
+#: ../../../../inc/SP/Import/Migrate.class.php:495
+msgid "Error al crear grupos de cuentas"
+msgstr "Hiba a fiók csoportok létrehozása közben"
+
+# "Error on retrieving accounts history"
+#: ../../../../inc/SP/Import/Migrate.class.php:542
+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/SP/Import/Migrate.class.php:546
+msgid "Importar Histórico de Cuentas"
+msgstr "Fiók elõzmények importálása"
+
+# "Error on creating accounts history"
+#: ../../../../inc/SP/Import/Migrate.class.php:617
+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/SP/Import/Migrate.class.php:652
+msgid "Error al obtener los archivos de cuentas"
+msgstr "Hiba a fiókok fájljainak betöltése közben"
+
+# "Import Accounts Files"
+#: ../../../../inc/SP/Import/Migrate.class.php:656
+msgid "Importar Archivos de Cuentas"
+msgstr "Fiók fájljainak importálása"
+
+# "Error on creating accounts files"
+#: ../../../../inc/SP/Import/Migrate.class.php:690
+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/SP/Import/Migrate.class.php:719
+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/SP/Import/Migrate.class.php:723
+msgid "Importar Categorías de Cuentas"
+msgstr "Fiók kategóriák importálása"
+
+# "Error on retrieving accounts categories"
+#: ../../../../inc/SP/Import/Migrate.class.php:747
+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/SP/Import/Migrate.class.php:795
+msgid "Error al obtener los usuarios"
+msgstr "Hiba a felhasználók betöltése közben"
+
+# "Import Users"
+#: ../../../../inc/SP/Import/Migrate.class.php:799
+msgid "Importar Usuarios"
+msgstr "Felhasználók importálása"
+
+# "Error on creating users"
+#: ../../../../inc/SP/Import/Migrate.class.php:858
+msgid "Error al crear usuarios"
+msgstr "Hiba a profil létrehozása közben"
+
+# "Error on retrieving users groups"
+#: ../../../../inc/SP/Import/Migrate.class.php:887
+msgid "Error al obtener los grupos de usuarios"
+msgstr "Hiba a felhasználói csoportok betöltése közben"
+
+# "Import Users Groups"
+#: ../../../../inc/SP/Import/Migrate.class.php:891
+msgid "Importar Grupos de Usuarios"
+msgstr "Felhasználó csoportok importálása"
+
+# "Error on adding users groups"
+#: ../../../../inc/SP/Import/Migrate.class.php:919
+msgid "Error al crear los grupos de usuarios"
+msgstr "Hiba a felhasználói csoportok hozzáadás közben"
+
+# "Import Configuration"
+#: ../../../../inc/SP/Import/Migrate.class.php:964
+msgid "Importar Configuración"
+msgstr "Konfiguráció importálása"
+
+# "Invalid Id"
+#: ../../../../inc/SP/Import/SyspassImport.class.php:114
+#: ../../../../inc/SP/Import/SyspassImport.class.php:139
+#: ../../../../inc/SP/Import/SyspassImport.class.php:164
+#, fuzzy
+msgid "Formato de XML inválido"
+msgstr "Érvénytelen Id"
+
+#: ../../../../inc/SP/Import/SyspassImport.class.php:114
+#, fuzzy
+msgid "No hay categorías para importar"
+msgstr "Nincsenek letölthetõ Archívumok"
+
+# "There're no backups for download"
+#: ../../../../inc/SP/Import/SyspassImport.class.php:139
+#, fuzzy
+msgid "No hay clientes para importar"
+msgstr "Ügyfelek importálása"
+
+# "There're no backups for download"
+#: ../../../../inc/SP/Import/SyspassImport.class.php:164
+#, fuzzy
+msgid "No hay cuentas para importar"
+msgstr "Nincsenek letölthetõ Archívumok"
+
+#: ../../../../inc/SP/Import/XmlImport.class.php:66
+msgid "Formato detectado"
+msgstr ""
+
+# Unable to process XML file
+#: ../../../../inc/SP/Import/XmlImportBase.class.php:82
+#, fuzzy
+msgid "No es posible procesar el archivo XML"
+msgstr "Nem lehet a konfigurációs fájlba írni"
+
+# XML file not supported
+#: ../../../../inc/SP/Import/XmlImportBase.class.php:110
+#, fuzzy
+msgid "Archivo XML no soportado"
+msgstr "Fájltípus nem engedélyezett"
+
+# Unable to detect the application the data was exported from
+#: ../../../../inc/SP/Import/XmlImportBase.class.php:111
+#, fuzzy
+msgid "No es posible detectar la aplicación que exportó los datos"
+msgstr "Unable to detect the application the data was exported from"
+
+# "N/A"
+#: ../../../../inc/SP/Log/Email.class.php:67
+#: ../../../../inc/SP/Mgmt/User/UserUtil.class.php:196
+msgid "N/D"
+msgstr "n.a."
+
+# "Performed by"
+#: ../../../../inc/SP/Log/Email.class.php:69
+msgid "Realizado por"
+msgstr "Által végrehajtva"
+
+# "Send Email"
+#: ../../../../inc/SP/Log/Email.class.php:86
+msgid "Enviar Email"
+msgstr "Email küldése"
+
+# "Email sent"
+#: ../../../../inc/SP/Log/Email.class.php:90
+msgid "Correo enviado"
+msgstr "Email elküldve"
+
+# "Error on sending email"
+#: ../../../../inc/SP/Log/Email.class.php:92
+msgid "Error al enviar correo"
+msgstr "Hiba az email küldése közben"
+
+# "Recipient"
+#: ../../../../inc/SP/Log/Email.class.php:96
+msgid "Destinatario"
+msgstr "Címzett"
+
+# "CC"
+#: ../../../../inc/SP/Log/Email.class.php:99
+msgid "CC"
+msgstr "CC"
+
+# "Clear Events"
+#: ../../../../inc/SP/Log/Log.class.php:104
+msgid "Vaciar Eventos"
+msgstr "Események törlése"
+
+# "Clear event log"
+#: ../../../../inc/SP/Log/Log.class.php:104
+#: ../../../../inc/themes/classic/eventlog.inc:105
+#: ../../../../inc/themes/material-blue/eventlog.inc:108
+msgid "Vaciar registro de eventos"
+msgstr "Esemény napló törlése"
+
+# "Category in use by:"
+#: ../../../../inc/SP/Mgmt/Category.class.php:58
+msgid "Categoría en uso por:"
+msgstr "A kategóriát a következõ használja:"
+
+# "Error on category deletion"
+#: ../../../../inc/SP/Mgmt/Category.class.php:70
+msgid "Error al eliminar la categoría"
+msgstr "Hiba a kategória törlése közben"
+
+# "Category name duplicated"
+#: ../../../../inc/SP/Mgmt/Category.class.php:154
+#: ../../../../inc/SP/Mgmt/Category.class.php:332
+msgid "Nombre de categoría duplicado"
+msgstr "Kategória neve duplázva"
+
+# "Error on updating category"
+#: ../../../../inc/SP/Mgmt/Category.class.php:170
+msgid "Error al actualizar la categoría"
+msgstr "Hiba a kategória frissítése közben"
+
+# "Category Edit"
+#: ../../../../inc/SP/Mgmt/Category.class.php:173
+msgid "Modificar Categoría"
+msgstr "Kategória szerkesztés"
+
+# "Error on creating category"
+#: ../../../../inc/SP/Mgmt/Category.class.php:343
+msgid "Error al crear la categoría"
+msgstr "Hiba a kategória létrehozása közben"
+
+#: ../../../../inc/SP/Mgmt/CustomFields.class.php:331
+msgid "Actualizando datos encriptados"
+msgstr ""
+
+# "Records updated"
+#: ../../../../inc/SP/Mgmt/CustomFields.class.php:360
+#, fuzzy
+msgid "Registros no actualizados"
+msgstr "Rekordok frissítve"
+
+# "Text to search"
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:87
+#, fuzzy
+msgid "Texto"
+msgstr "Keresendõ szöveg"
+
+# "Date Added"
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:90
+#: ../../../../inc/themes/classic/wikipage.inc:24
+#: ../../../../inc/themes/material-blue/wikipage.inc:24
+#, fuzzy
+msgid "Fecha"
+msgstr "Dátum hozzáadva"
+
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:91
+msgid "Número"
+msgstr ""
+
+# "Email"
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:92
+#: ../../../../inc/themes/classic/inc/Icons.class.php:60
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:58
+#: ../../../../inc/themes/classic/passreset.inc:22
+#: ../../../../inc/themes/classic/users.inc:61
+#: ../../../../inc/themes/material-blue/users.inc:72
+msgid "Email"
+msgstr "Email"
+
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:93
+msgid "Teléfono"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:94
+msgid "Link"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:95
+msgid "Color"
+msgstr ""
+
+# "Categories"
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:109
+#: ../../../../inc/themes/classic/profiles.inc:98
+#: ../../../../inc/themes/material-blue/profiles.inc:121
+msgid "Categorías"
+msgstr "Kategóriák"
+
+# "Customers"
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:110
+#: ../../../../inc/themes/classic/profiles.inc:103
+#: ../../../../inc/themes/material-blue/profiles.inc:126
+msgid "Clientes"
+msgstr "Ügyfél"
+
+# "Groups"
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:112
+#: ../../../../inc/themes/classic/account.inc:152
+#: ../../../../inc/themes/classic/profiles.inc:89
+#: ../../../../inc/themes/material-blue/account.inc:190
+#: ../../../../inc/themes/material-blue/profiles.inc:111
+msgid "Grupos"
+msgstr "Csoportok"
+
+# "Duplicated customer"
+#: ../../../../inc/SP/Mgmt/Customer.class.php:58
+#: ../../../../inc/SP/Mgmt/Customer.class.php:322
+msgid "Cliente duplicado"
+msgstr "Kettõzött ügyfél"
+
+# "Error on updating customer"
+#: ../../../../inc/SP/Mgmt/Customer.class.php:77
+msgid "Error al actualizar el cliente"
+msgstr "Hiba az ügyfél frissítése közben"
+
+# "Update Customer"
+#: ../../../../inc/SP/Mgmt/Customer.class.php:80
+msgid "Actualizar Cliente"
+msgstr "Frissítse az ügyfelet"
+
+# "Customer in use by:"
+#: ../../../../inc/SP/Mgmt/Customer.class.php:163
+msgid "Cliente en uso por:"
+msgstr "Az ügyfelet a következõ használja:"
+
+# "Error on customer deletion"
+#: ../../../../inc/SP/Mgmt/Customer.class.php:175
+msgid "Error al eliminar el cliente"
+msgstr "Hiba az ügyfél törlése közben"
+
+# "Error on creating customer"
+#: ../../../../inc/SP/Mgmt/Customer.class.php:337
+msgid "Error al crear el cliente"
+msgstr "Hiba az ügyfél létrehozása közben"
+
+# "File saved"
+#: ../../../../inc/SP/Mgmt/Files.class.php:78
+#, fuzzy
+msgid "Archivo subido"
+msgstr "Fájl elmentve"
+
+# "Link to Wiki"
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:136
+#, fuzzy
+msgid "Enlace ya creado"
+msgstr "Wiki link"
+
+# "New Password"
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:152
+#, fuzzy
+msgid "Nuevo Enlace"
+msgstr "Új jelszó"
+
+# "Password updated"
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:197
+#, fuzzy
+msgid "Enlace visualizado"
+msgstr "Jelszó frissítve"
+
+# "Update Customer"
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:230
+#, fuzzy
+msgid "Actualizar Enlace"
+msgstr "Frissítés Számla"
+
+#: ../../../../inc/SP/Mgmt/PublicLinkUtil.class.php:87
+#: ../../../../inc/SP/Mgmt/PublicLinkUtil.class.php:144
+msgid "ON"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/PublicLinkUtil.class.php:87
+#: ../../../../inc/SP/Mgmt/PublicLinkUtil.class.php:144
+msgid "OFF"
+msgstr ""
+
+# "Error on updating account's users"
+#: ../../../../inc/SP/Mgmt/User/Groups.class.php:168
+#, 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/SP/Mgmt/User/Groups.class.php:276
+#, fuzzy
+msgid "Error al actualizar los usuarios del grupo"
+msgstr "Hiba a fiók felhasználóinak frissítése közben"
+
+# "Error on user deletion"
+#: ../../../../inc/SP/Mgmt/User/Groups.class.php:400
+#, fuzzy
+msgid "Error al eliminar los usuarios del grupo"
+msgstr "Hiba a felhasználó törlése közben"
+
+# "Edit Profile"
+#: ../../../../inc/SP/Mgmt/User/Profile.class.php:48
+#, fuzzy
+msgid "Migrar Perfiles"
+msgstr "Profilok"
+
+# "Error on retrieving accounts"
+#: ../../../../inc/SP/Mgmt/User/Profile.class.php:80
+#, fuzzy
+msgid "Error al obtener perfiles"
+msgstr "Hiba a fiókok betöltése közben"
+
+# "Application successfully updated"
+#: ../../../../inc/SP/Mgmt/User/Profile.class.php:137
+#, fuzzy
+msgid "Operación realizada correctamente"
+msgstr "Az alkalmazás frissítése sikeres"
+
+# "You don't have permission to do this operation"
+#: ../../../../inc/SP/Mgmt/User/Profile.class.php:139
+#, fuzzy
+msgid "Fallo al realizar la operación"
+msgstr "Hiba a elõzmények mester jelszavának frissítése közben"
+
+# "Edit Profile"
+#: ../../../../inc/SP/Mgmt/User/ProfileBase.class.php:611
+msgid "Modificar Perfil"
+msgstr "Profil módosítás"
+
# Could not perform the password change request.
-#: ../../../../inc/UserBase.class.php:388
-#: ../../../../inc/UserBase.class.php:532
+#: ../../../../inc/SP/Mgmt/User/UserBase.class.php:398
+#: ../../../../inc/SP/Mgmt/User/UserBase.class.php:548
#, 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/UserBase.class.php:527
+#: ../../../../inc/SP/Mgmt/User/UserBase.class.php:543
msgid "Modificar Usuario"
msgstr "Felhasználó módosítás"
-# "Delete User"
-#: ../../../../inc/UserBase.class.php:594
-#: ../../../../web/UsersMgmtC.class.php:151
-msgid "Eliminar Usuario"
-msgstr "felhasználó törlése"
-
# "LDAP User"
-#: ../../../../inc/UserLdap.class.php:68
-#: ../../../../web/UsersMgmtC.class.php:109
+#: ../../../../inc/SP/Mgmt/User/UserLdap.class.php:74
+#: ../../../../inc/themes/classic/inc/Icons.class.php:55
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:53
#: ../../../../inc/themes/classic/users.inc:28
-#: ../../../../inc/themes/material-blue/users.inc:34
+#: ../../../../inc/themes/material-blue/users.inc:35
msgid "Usuario de LDAP"
msgstr "LDAP felhasználó"
# "Account Activation"
-#: ../../../../inc/UserLdap.class.php:78
+#: ../../../../inc/SP/Mgmt/User/UserLdap.class.php:88
msgid "Activación Cuenta"
msgstr "Fiók Aktiválás"
# "Your account activation is pending."
-#: ../../../../inc/UserLdap.class.php:79
+#: ../../../../inc/SP/Mgmt/User/UserLdap.class.php:89
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
+#: ../../../../inc/SP/Mgmt/User/UserLdap.class.php:90
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
+#: ../../../../inc/SP/Mgmt/User/UserLdap.class.php:96
#, fuzzy
msgid "Nuevo usuario de LDAP"
msgstr "LDAP felhasználó"
# "Edit Group"
-#: ../../../../inc/UserMigrate.class.php:113
+#: ../../../../inc/SP/Mgmt/User/UserMigrate.class.php:125
#, fuzzy
msgid "Migrar Grupos"
msgstr "Csoportok"
# "Error on adding users groups"
-#: ../../../../inc/UserMigrate.class.php:113
+#: ../../../../inc/SP/Mgmt/User/UserMigrate.class.php:125
#, 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:119
+#: ../../../../inc/SP/Util/Checks.class.php:86
#, 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/SP/Util/Checks.class.php:87
#, 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:156
+#: ../../../../inc/SP/Util/Checks.class.php:123
#: ../../../../inc/themes/classic/ldap.inc:212
-#: ../../../../inc/themes/material-blue/ldap.inc:238
+#: ../../../../inc/themes/material-blue/ldap.inc:240
msgid "Módulo no disponible"
msgstr "Modul nem elérhetõ"
# "Without this module the application couldn't run correctly"
-#: ../../../../inc/Util.class.php:157
+#: ../../../../inc/SP/Util/Checks.class.php:124
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:127
+# "Session finished"
+#: ../../../../inc/SP/Util/Connection.class.php:121
#, fuzzy
-msgid "Exportar XML"
-msgstr "Fiókok importálása"
+msgid "Socket no inicializado"
+msgstr "Munkamenet befejezõdött"
-# "Error on creating user"
-#: ../../../../inc/XmlExport.class.php:412
+# "Error on sending email"
+#: ../../../../inc/SP/Util/Connection.class.php:128
#, fuzzy
-msgid "Error al crear el archivo XML"
-msgstr "Hiba az ügyfél létrehozása közben"
+msgid "Error al enviar datos"
+msgstr "Hiba az email küldése közben"
-#: ../../../../inc/XmlImport.class.php:63
-msgid "Formato detectado"
+# "Enable Authentication"
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApi.class.php:69
+#, fuzzy
+msgid "Fallo de autentificación"
+msgstr "Engedélyezése Hitelesítés"
+
+# "Error on account creation"
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApiBase.class.php:175
+#, fuzzy
+msgid "Error al realizar la consulta"
+msgstr "Hiba a fiók létrehozása közben"
+
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApiBase.class.php:212
+msgid "URL de conexión no establecida"
msgstr ""
-# Unable to process XML file
-#: ../../../../inc/XmlImportBase.class.php:80
-#, fuzzy
-msgid "No es posible procesar el archivo XML"
-msgstr "Nem lehet a konfigurációs fájlba írni"
+# "Add"
+#: ../../../../inc/themes/classic/inc/Icons.class.php:47
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:45
+#: ../../../../inc/themes/classic/profiles.inc:41
+msgid "Añadir"
+msgstr "Hozzáad"
-# XML file not supported
-#: ../../../../inc/XmlImportBase.class.php:108
+# "View user details"
+#: ../../../../inc/themes/classic/inc/Icons.class.php:48
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:46
#, fuzzy
-msgid "Archivo XML no soportado"
-msgstr "Fájltípus nem engedélyezett"
+msgid "Ver Detalles"
+msgstr "Felhasználó részletek"
-# Unable to detect the application the data was exported from
-#: ../../../../inc/XmlImportBase.class.php:109
+# "Edit"
+#: ../../../../inc/themes/classic/inc/Icons.class.php:50
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:48
+#: ../../../../inc/themes/classic/profiles.inc:32
+#: ../../../../inc/themes/material-blue/profiles.inc:47
+msgid "Editar"
+msgstr "Módosítás"
+
+# "Delete Group"
+#: ../../../../inc/themes/classic/inc/Icons.class.php:51
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:49
+#: ../../../../inc/themes/material-blue/profiles.inc:57
#, fuzzy
-msgid "No es posible detectar la aplicación que exportó los datos"
-msgstr "Unable to detect the application the data was exported from"
+msgid "Eliminar"
+msgstr "Profil törlése"
+
+# "Change password"
+#: ../../../../inc/themes/classic/inc/Icons.class.php:52
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:50
+#: ../../../../inc/themes/classic/passreset.inc:52
+msgid "Cambiar Clave"
+msgstr "Változtatsd meg a jelszót"
+
+# "Account Admin"
+#: ../../../../inc/themes/classic/inc/Icons.class.php:54
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:52
+msgid "Admin Cuentas"
+msgstr "Admin Fiók"
+
+# "Disabled"
+#: ../../../../inc/themes/classic/inc/Icons.class.php:56
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:54
+#: ../../../../inc/themes/classic/users.inc:113
+#: ../../../../inc/themes/material-blue/users.inc:152
+#: ../../../../inc/themes/material-blue/users.inc:155
+msgid "Deshabilitado"
+msgstr "Inaktív"
+
+# "Change password"
+#: ../../../../inc/themes/classic/inc/Icons.class.php:58
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:56
+#, fuzzy
+msgid "Copiar"
+msgstr "Fiók másolása"
+
+# "Back"
+#: ../../../../inc/themes/classic/inc/Icons.class.php:63
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:61
+#: ../../../../inc/themes/classic/account-actions.inc:49
+#: ../../../../inc/themes/classic/account-editpass.inc:45
+#: ../../../../inc/themes/classic/passreset.inc:46
+#: ../../../../inc/themes/material-blue/error.inc:22
+#: ../../../../inc/themes/material-blue/error.inc:23
+#: ../../../../inc/themes/material-blue/passreset.inc:48
+msgid "Volver"
+msgstr "Vissza"
+
+# "Save"
+#: ../../../../inc/themes/classic/inc/Icons.class.php:65
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:63
+#: ../../../../inc/themes/classic/account-editpass.inc:50
+#: ../../../../inc/themes/classic/encryption.inc:99
+#: ../../../../inc/themes/classic/mail.inc:107
+#: ../../../../inc/themes/classic/preferences-security.inc:57
+#: ../../../../inc/themes/classic/preferences-site.inc:130
+#: ../../../../inc/themes/material-blue/account-actions.inc:94
+msgid "Guardar"
+msgstr "Mentés"
+
+# "Clear"
+#: ../../../../inc/themes/classic/inc/Icons.class.php:67
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:65
+#: ../../../../inc/themes/classic/datatabs-grid.inc:38
+#: ../../../../inc/themes/classic/searchbox.inc:5
+#: ../../../../inc/themes/material-blue/datatabs-grid.inc:38
+#: ../../../../inc/themes/material-blue/searchbox.inc:12
+msgid "Limpiar"
+msgstr "Tiszta"
+
+# "Performed by"
+#: ../../../../inc/themes/classic/inc/Icons.class.php:68
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:66
+#, fuzzy
+msgid "Realizar"
+msgstr "Archívum készítés"
+
+# "Download Current"
+#: ../../../../inc/themes/classic/inc/Icons.class.php:69
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:67
+#, fuzzy
+msgid "Descargar"
+msgstr "Aktuális letöltés"
+
+# "Previous page"
+#: ../../../../inc/themes/classic/inc/Icons.class.php:73
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:71
+#: ../../../../inc/themes/classic/eventlog.inc:93
+#: ../../../../inc/themes/classic/search.inc:178
+#: ../../../../inc/themes/material-blue/eventlog.inc:95
+msgid "Página anterior"
+msgstr "Elõzõ oldal"
+
+# "Next page"
+#: ../../../../inc/themes/classic/inc/Icons.class.php:74
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:72
+#: ../../../../inc/themes/classic/eventlog.inc:98
+#: ../../../../inc/themes/classic/search.inc:183
+#: ../../../../inc/themes/material-blue/eventlog.inc:100
+msgid "Página siguiente"
+msgstr "Következõ oldal"
+
+# "First page"
+#: ../../../../inc/themes/classic/inc/Icons.class.php:75
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:73
+#: ../../../../inc/themes/classic/eventlog.inc:91
+#: ../../../../inc/themes/classic/search.inc:176
+#: ../../../../inc/themes/material-blue/eventlog.inc:93
+msgid "Primera página"
+msgstr "Elsõ oldal"
+
+# "Last page"
+#: ../../../../inc/themes/classic/inc/Icons.class.php:76
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:74
+#: ../../../../inc/themes/classic/eventlog.inc:100
+#: ../../../../inc/themes/classic/search.inc:185
+#: ../../../../inc/themes/material-blue/eventlog.inc:102
+msgid "Última página"
+msgstr "Utolsó oldal"
# "Query error"
#: ../../../../js/strings.js.php:27
@@ -3160,6 +4326,10 @@ msgstr "Törlöd a tételt?"
# "Page not found"
#: ../../../../js/strings.js.php:40
+#: ../../../../inc/themes/classic/wikipage.inc:8
+#: ../../../../inc/themes/classic/wikipage.inc:17
+#: ../../../../inc/themes/material-blue/wikipage.inc:8
+#: ../../../../inc/themes/material-blue/wikipage.inc:17
msgid "Página no encontrada"
msgstr "Oldal nem található"
@@ -3183,11 +4353,11 @@ msgstr "A böngészöd nem támogatja a HTML5 fájlok feltöltését"
msgid "Demasiados archivos"
msgstr "Túl sok fájl"
-# "Unable to save file.
Max file size:"
+# "File type not allowed"
#: ../../../../js/strings.js.php:45
-#, fuzzy, php-format
-msgid "No es posible guardar el archivo \"%s\" Tamaño máximo:"
-msgstr "Nem lehet elmenteni a fájlt.
Maximális fájl méret:"
+#, fuzzy
+msgid "Tamaño de archivo no permitido"
+msgstr "Fájltípus nem engedélyezett"
# "Clear event log?"
#: ../../../../js/strings.js.php:47
@@ -3246,7 +4416,7 @@ msgstr ""
# "Password strength level"
#: ../../../../js/strings.js.php:58
-#: ../../../../inc/themes/classic/editpass.inc:33
+#: ../../../../inc/themes/classic/account-editpass.inc:33
msgid "Nivel de fortaleza de la clave"
msgstr "Jelszó erõssége"
@@ -3293,9 +4463,15 @@ msgstr "Akció"
# "YES"
#: ../../../../js/strings.js.php:67
-#: ../../../../inc/themes/classic/account.inc:136
-#: ../../../../inc/themes/classic/account.inc:167
-#: ../../../../inc/themes/classic/account.inc:451
+#: ../../../../inc/themes/classic/account.inc:145
+#: ../../../../inc/themes/classic/account.inc:176
+#: ../../../../inc/themes/classic/account.inc:289
+#: ../../../../inc/themes/classic/config-events.inc:18
+#: ../../../../inc/themes/classic/config-events.inc:28
+#: ../../../../inc/themes/classic/config-events.inc:38
+#: ../../../../inc/themes/classic/config-links.inc:25
+#: ../../../../inc/themes/classic/config-links.inc:61
+#: ../../../../inc/themes/classic/config-proxy.inc:11
#: ../../../../inc/themes/classic/config.inc:70
#: ../../../../inc/themes/classic/config.inc:86
#: ../../../../inc/themes/classic/config.inc:102
@@ -3313,20 +4489,27 @@ msgstr "Akció"
#: ../../../../inc/themes/classic/mail.inc:14
#: ../../../../inc/themes/classic/mail.inc:40
#: ../../../../inc/themes/classic/mail.inc:88
-#: ../../../../inc/themes/classic/preferences.inc:48
-#: ../../../../inc/themes/classic/preferences.inc:82
-#: ../../../../inc/themes/classic/preferences.inc:99
-#: ../../../../inc/themes/classic/preferences.inc:116
-#: ../../../../inc/themes/classic/security.inc:26
+#: ../../../../inc/themes/classic/preferences-security.inc:26
+#: ../../../../inc/themes/classic/preferences-site.inc:48
+#: ../../../../inc/themes/classic/preferences-site.inc:82
+#: ../../../../inc/themes/classic/preferences-site.inc:99
+#: ../../../../inc/themes/classic/preferences-site.inc:116
#: ../../../../inc/themes/classic/wiki.inc:20
+#: ../../../../inc/themes/classic/wiki.inc:118
msgid "SI"
msgstr "Igen"
# "NO"
#: ../../../../js/strings.js.php:68
-#: ../../../../inc/themes/classic/account.inc:136
-#: ../../../../inc/themes/classic/account.inc:167
-#: ../../../../inc/themes/classic/account.inc:449
+#: ../../../../inc/themes/classic/account.inc:145
+#: ../../../../inc/themes/classic/account.inc:176
+#: ../../../../inc/themes/classic/account.inc:287
+#: ../../../../inc/themes/classic/config-events.inc:18
+#: ../../../../inc/themes/classic/config-events.inc:28
+#: ../../../../inc/themes/classic/config-events.inc:38
+#: ../../../../inc/themes/classic/config-links.inc:25
+#: ../../../../inc/themes/classic/config-links.inc:61
+#: ../../../../inc/themes/classic/config-proxy.inc:11
#: ../../../../inc/themes/classic/config.inc:70
#: ../../../../inc/themes/classic/config.inc:86
#: ../../../../inc/themes/classic/config.inc:102
@@ -3340,20 +4523,21 @@ msgstr "Igen"
#: ../../../../inc/themes/classic/customfields.inc:46
#: ../../../../inc/themes/classic/encryption.inc:58
#: ../../../../inc/themes/classic/encryption.inc:77
-#: ../../../../inc/themes/classic/import.inc:67
+#: ../../../../inc/themes/classic/import.inc:172
#: ../../../../inc/themes/classic/install.inc:99
#: ../../../../inc/themes/classic/ldap.inc:25
#: ../../../../inc/themes/classic/ldap.inc:195
#: ../../../../inc/themes/classic/mail.inc:14
#: ../../../../inc/themes/classic/mail.inc:40
#: ../../../../inc/themes/classic/mail.inc:88
-#: ../../../../inc/themes/classic/preferences.inc:48
-#: ../../../../inc/themes/classic/preferences.inc:82
-#: ../../../../inc/themes/classic/preferences.inc:99
-#: ../../../../inc/themes/classic/preferences.inc:116
-#: ../../../../inc/themes/classic/security.inc:26
+#: ../../../../inc/themes/classic/preferences-security.inc:26
+#: ../../../../inc/themes/classic/preferences-site.inc:48
+#: ../../../../inc/themes/classic/preferences-site.inc:82
+#: ../../../../inc/themes/classic/preferences-site.inc:99
+#: ../../../../inc/themes/classic/preferences-site.inc:116
#: ../../../../inc/themes/classic/tokens.inc:36
#: ../../../../inc/themes/classic/wiki.inc:20
+#: ../../../../inc/themes/classic/wiki.inc:118
msgid "NO"
msgstr "Nem"
@@ -3377,781 +4561,325 @@ msgstr "Hiba a jelszó frissítése közben"
msgid "Error al copiar al portapapeles"
msgstr "Hiba a jelszó frissítése közben"
-# "Account Details"
-#: ../../../../web/AccountC.class.php:386
-#: ../../../../web/AccountC.class.php:417
-#: ../../../../inc/themes/classic/search.inc:75
-#: ../../../../inc/themes/classic/search.inc:134
-#: ../../../../inc/themes/material-blue/search.inc:77
-#: ../../../../inc/themes/material-blue/search.inc:144
-msgid "Detalles de Cuenta"
-msgstr "Fiók adatok"
-
-# "Edit Account Password"
-#: ../../../../web/AccountC.class.php:474
-#: ../../../../inc/themes/classic/account.inc:396
-#: ../../../../inc/themes/material-blue/account.inc:436
-msgid "Modificar Clave de Cuenta"
-msgstr "Fiók jelszavának szerkesztése"
-
-# "Name"
-#: ../../../../web/AccountsMgmtC.class.php:80
-#: ../../../../web/AccountsMgmtC.class.php:139
-#: ../../../../web/AccountsMgmtC.class.php:267
-#: ../../../../web/SearchC.class.php:293
-#: ../../../../web/UsersMgmtC.class.php:88
-#: ../../../../web/UsersMgmtC.class.php:188
-#: ../../../../web/UsersMgmtC.class.php:246
-#: ../../../../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:73
-#: ../../../../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:75
-#: ../../../../inc/themes/material-blue/users.inc:8
-msgid "Nombre"
-msgstr "Név"
-
-# "Categories management"
-#: ../../../../web/AccountsMgmtC.class.php:116
-msgid "Gestión de Categorías"
-msgstr "Kategória Menedzsment"
-
-# "Customers Management"
-#: ../../../../web/AccountsMgmtC.class.php:173
-msgid "Gestión de Clientes"
-msgstr "Ügyfél Menedzsment"
-
-#: ../../../../web/AccountsMgmtC.class.php:267
-#: ../../../../inc/themes/classic/customfields.inc:27
-#: ../../../../inc/themes/material-blue/customfields.inc:30
+# "Check for updates"
+#: ../../../../js/strings.js.php:74
#, fuzzy
-msgid "Módulo"
-msgstr "Modul nem elérhetõ"
+msgid "Recibir notificaciones?"
+msgstr "Ellenõrzés"
-# "Delete Group"
-#: ../../../../web/AccountsMgmtC.class.php:288
-#, fuzzy
-msgid "Eliminar Campo"
-msgstr "Profil törlése"
-
-# "Last backup"
-#: ../../../../web/ConfigC.class.php:168
-msgid "Último backup"
-msgstr "Utolsó Archiválás"
-
-# "There're no backups available"
-#: ../../../../web/ConfigC.class.php:168
-msgid "No se encontraron backups"
-msgstr "Nincsenek elérhetõ Archívumok"
-
-# "Last Modification"
-#: ../../../../web/ConfigC.class.php:175
-#, fuzzy
-msgid "Última exportación"
-msgstr "Utolsó oldal"
-
-# "Unable to write on configuration file"
-#: ../../../../web/ConfigC.class.php:175
-#, fuzzy
-msgid "No se encontró archivo de exportación"
-msgstr "Nem lehet a konfigurációs fájlba írni"
-
-# "Configuration"
-#: ../../../../web/ConfigC.class.php:220
-#, 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:95
-msgid "Registro de eventos vaciado"
-msgstr "Esemény napló törölve"
-
-# "Error on clearing event log"
-#: ../../../../web/EventlogC.class.php:97
-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:159
-#: ../../../../web/UsersMgmtC.class.php:101
-msgid "Admin Aplicación"
-msgstr "Admin alkalmazás"
-
-# "Search"
-#: ../../../../web/MainC.class.php:177
-msgid "Buscar"
-msgstr "Keresés"
-
-# "Access user"
-#: ../../../../web/MainC.class.php:189
-#, fuzzy
-msgid "Usuarios y Accesos"
-msgstr "Felhasználó elérése"
-
-# "Delete File"
-#: ../../../../web/MainC.class.php:195
-#, fuzzy
-msgid "Elementos y Personalización"
-msgstr "Profil törlése"
-
-# "Event Log"
-#: ../../../../web/MainC.class.php:207
-#: ../../../../inc/themes/classic/eventlog.inc:2
-#: ../../../../inc/themes/material-blue/eventlog.inc:2
-msgid "Registro de Eventos"
-msgstr "Esemény napló"
-
-#: ../../../../web/MainC.class.php:228
-msgid "Nuevo estilo visual basado en Material Design Lite by Google"
+#: ../../../../js/strings.js.php:75
+msgid "Marcar Favorito"
msgstr ""
-#: ../../../../web/MainC.class.php:229
+# "Delete User"
+#: ../../../../js/strings.js.php:76
#, fuzzy
-msgid "Usuarios en múltiples grupos"
-msgstr "Felhasználó csoportok importálása"
+msgid "Eliminar Favorito"
+msgstr "felhasználó törlése"
-# "Customers Management"
-#: ../../../../web/MainC.class.php:230
-#, fuzzy
-msgid "Previsualización de imágenes"
-msgstr "Kérés fiók módosításához"
+# "Restore account from this point"
+#: ../../../../inc/themes/classic/account-actions.inc:15
+#: ../../../../inc/themes/material-blue/account-actions.inc:86
+msgid "Restaurar cuenta desde este punto"
+msgstr "Restore véve ezen a ponton"
-#: ../../../../web/MainC.class.php:231
-msgid "Mostrar claves como imágenes"
-msgstr ""
+# "View Current"
+#: ../../../../inc/themes/classic/account-actions.inc:44
+#: ../../../../inc/themes/material-blue/account-actions.inc:55
+msgid "Ver Actual"
+msgstr "Általános"
-#: ../../../../web/MainC.class.php:232
-msgid "Campos personalizados"
-msgstr ""
+# "Edit Account"
+#: ../../../../inc/themes/classic/account-actions.inc:56
+#: ../../../../inc/themes/classic/search.inc:132
+#: ../../../../inc/themes/material-blue/account-actions.inc:71
+msgid "Modificar Cuenta"
+msgstr "Fiók módosítás"
-# "Query error"
-#: ../../../../web/MainC.class.php:233
-#, fuzzy
-msgid "API de consultas"
-msgstr "Kérés fiók módosításához"
+# "Date Added"
+#: ../../../../inc/themes/classic/account-details.inc:7
+#: ../../../../inc/themes/material-blue/account-details.inc:7
+msgid "Fecha Alta"
+msgstr "Dátum hozzáadva"
-# "Enable Authentication"
-#: ../../../../web/MainC.class.php:234
-#: ../../../../inc/themes/classic/2fa.inc:9
-#: ../../../../inc/themes/material-blue/2fa.inc:7
-#: ../../../../inc/themes/material-blue/security.inc:11
-#, fuzzy
-msgid "Autentificación en 2 pasos"
-msgstr "Engedélyezése Hitelesítés"
+# "Creator"
+#: ../../../../inc/themes/classic/account-details.inc:11
+#: ../../../../inc/themes/material-blue/account-details.inc:11
+msgid "Creador"
+msgstr "Készítõ"
-#: ../../../../web/MainC.class.php:235
-#, fuzzy
-msgid "Complejidad de generador de claves"
-msgstr "Nem találom a véletlen szám generátort"
+# "Main Group"
+#: ../../../../inc/themes/classic/account-details.inc:15
+#: ../../../../inc/themes/classic/account.inc:186
+#: ../../../../inc/themes/material-blue/account-details.inc:15
+#: ../../../../inc/themes/material-blue/account.inc:225
+msgid "Grupo Principal"
+msgstr "Fõcsoport"
-#: ../../../../web/MainC.class.php:236
-msgid "Consultas especiales"
-msgstr ""
+# "Secondary Users"
+#: ../../../../inc/themes/classic/account-details.inc:20
+#: ../../../../inc/themes/material-blue/account-details.inc:20
+msgid "Usuarios Secundarios"
+msgstr "Másodlagos felhasználók"
-#: ../../../../web/MainC.class.php:237
-msgid "Exportación a XML"
-msgstr ""
+# "Secondary Groups"
+#: ../../../../inc/themes/classic/account-details.inc:39
+#: ../../../../inc/themes/material-blue/account-details.inc:39
+msgid "Grupos Secundarios"
+msgstr "Másodlagos csoportok"
-# "Master password too short"
-#: ../../../../web/MainC.class.php:238
-#, fuzzy
-msgid "Clave maestra temporal"
-msgstr "Generate Temporary Password"
+# "Date Modified"
+#: ../../../../inc/themes/classic/account-details.inc:59
+#: ../../../../inc/themes/material-blue/account-details.inc:59
+msgid "Fecha Edición"
+msgstr "Adat módosítva"
-#: ../../../../web/MainC.class.php:239
-msgid "Importación de cuentas desde sysPass, KeePass, KeePassX y CSV"
-msgstr ""
-
-#: ../../../../web/MainC.class.php:240
-msgid "Optimización del código y mayor rapidez de carga"
-msgstr ""
-
-#: ../../../../web/MainC.class.php:241
-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:282
-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:283
-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:290
-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:291
-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:310
-msgid "Instalación finalizada"
-msgstr "A telepítés befejezõdött"
-
-# "Click here to access"
-#: ../../../../web/MainC.class.php:311
-msgid "Pulse aquí para acceder"
-msgstr ""
-"Kattinst here a "
-"bejelentkezéshez"
-
-# "Download new version"
-#: ../../../../web/MainC.class.php:408
-msgid "Descargar nueva versión"
-msgstr "Új verzió letöltése"
-
-#: ../../../../web/MainC.class.php:419
-msgid "Avisos de sysPass"
-msgstr ""
-
-# "Sort by Customer"
-#: ../../../../web/SearchC.class.php:286
-msgid "Ordenar por Cliente"
-msgstr "Rendezés Ügyfél szerint"
-
-# "Sort by Name"
-#: ../../../../web/SearchC.class.php:292
-msgid "Ordenar por Nombre"
-msgstr "Rendezés Név szerint"
-
-# "Sort by Category"
-#: ../../../../web/SearchC.class.php:298
-msgid "Ordenar por Categoría"
-msgstr "Rendezés Kategória szerint"
-
-# "Sort by Username"
-#: ../../../../web/SearchC.class.php:304
-msgid "Ordenar por Usuario"
-msgstr "Rendezés Felhasználónév szerint"
-
-# "Sort by URL / IP"
-#: ../../../../web/SearchC.class.php:310
-msgid "Ordenar por URL / IP"
-msgstr "Rendezés URL / IP szerint"
-
-# "URL / IP"
-#: ../../../../web/SearchC.class.php:311
-#: ../../../../inc/themes/classic/account.inc:61
-#: ../../../../inc/themes/classic/editpass.inc:16
-#: ../../../../inc/themes/classic/request.inc:13
-#: ../../../../inc/themes/classic/search.inc:96
-#: ../../../../inc/themes/material-blue/account.inc:70
-#: ../../../../inc/themes/material-blue/editpass.inc:17
-#: ../../../../inc/themes/material-blue/request.inc:15
-#: ../../../../inc/themes/material-blue/search.inc:98
-msgid "URL / IP"
-msgstr "URL / IP"
-
-# "Properties"
-#: ../../../../web/UsersMgmtC.class.php:92
-msgid "Propiedades"
-msgstr "Beállítások"
-
-# "Account Admin"
-#: ../../../../web/UsersMgmtC.class.php:105
-msgid "Admin Cuentas"
-msgstr "Admin Fiók"
-
-# "Disabled"
-#: ../../../../web/UsersMgmtC.class.php:113
-#: ../../../../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:130
-msgid "Ver Detalles de Usuario"
-msgstr "Felhasználó részletek"
-
-# "Change user password"
-#: ../../../../web/UsersMgmtC.class.php:144
-msgid "Cambiar Clave de Usuario"
-msgstr "Változás felhasználói jelszó"
-
-# "Users Management"
-#: ../../../../web/UsersMgmtC.class.php:164
-msgid "Gestión de Usuarios"
-msgstr "Felhasználó Menedzsment"
-
-# "Groups Management"
-#: ../../../../web/UsersMgmtC.class.php:223
-msgid "Gestión de Grupos"
-msgstr "Csoport Menedzsment"
-
-# "View user details"
-#: ../../../../web/UsersMgmtC.class.php:261
-#, fuzzy
-msgid "Ver Detalles de Perfil"
-msgstr "Felhasználó részletek"
-
-# "Profiles Management"
-#: ../../../../web/UsersMgmtC.class.php:288
-msgid "Gestión de Perfiles"
-msgstr "Profil Menedzsment"
-
-#: ../../../../web/UsersMgmtC.class.php:408
-#, fuzzy
-msgid "Ver token de Autorización"
-msgstr "Felhasználó részletek"
-
-# "Users Management"
-#: ../../../../web/UsersMgmtC.class.php:435
-#, fuzzy
-msgid "Gestión de Autorizaciones API"
-msgstr "Fálj menedzsment inaktív"
-
-# "Configuration updated"
-#: ../../../../web/UsersMgmtC.class.php:457
-#, fuzzy
-msgid "Token de autorización visualizado"
-msgstr "Beállítások frissítve"
-
-#: ../../../../web/UsersMgmtC.class.php:458
-msgid "Autorizaciones"
-msgstr ""
-
-# "Security"
-#: ../../../../web/UsersPrefsC.class.php:93
-#: ../../../../inc/themes/classic/mail.inc:63
-#: ../../../../inc/themes/material-blue/mail.inc:86
-msgid "Seguridad"
-msgstr "Biztonság"
-
-#: ../../../../web/UsersPrefsC.class.php:118
-#: ../../../../inc/themes/classic/sessionbar.inc:9
-msgid "Preferencias"
-msgstr ""
-
-# Enter Security Code
-#: ../../../../inc/themes/classic/2fa.inc:14
-#: ../../../../inc/themes/material-blue/2fa.inc:12
-#, 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:64
-#: ../../../../inc/themes/material-blue/account.inc:76
-msgid "URL o IP de acceso"
-msgstr "URL vagy IP elérés"
-
-# "Access user"
-#: ../../../../inc/themes/classic/account.inc:76
-#: ../../../../inc/themes/material-blue/account.inc:90
-msgid "Usuario de acceso"
-msgstr "Felhasználó elérése"
+# "Editor"
+#: ../../../../inc/themes/classic/account-details.inc:63
+#: ../../../../inc/themes/material-blue/account-details.inc:63
+msgid "Editor"
+msgstr "Szerkesztõ"
# "Password (repeat)"
-#: ../../../../inc/themes/classic/account.inc:93
-#: ../../../../inc/themes/classic/editpass.inc:31
+#: ../../../../inc/themes/classic/account-editpass.inc:31
+#: ../../../../inc/themes/classic/account.inc:101
#: ../../../../inc/themes/classic/passreset.inc:35
#: ../../../../inc/themes/classic/users.inc:83
#: ../../../../inc/themes/classic/userspass.inc:19
#: ../../../../inc/themes/classic/userspass.inc:21
-#: ../../../../inc/themes/material-blue/account.inc:109
-#: ../../../../inc/themes/material-blue/editpass.inc:36
+#: ../../../../inc/themes/material-blue/account-editpass.inc:38
+#: ../../../../inc/themes/material-blue/account.inc:124
#: ../../../../inc/themes/material-blue/install.inc:67
#: ../../../../inc/themes/material-blue/passreset.inc:36
-#: ../../../../inc/themes/material-blue/users.inc:102
-#: ../../../../inc/themes/material-blue/users.inc:109
+#: ../../../../inc/themes/material-blue/users.inc:103
+#: ../../../../inc/themes/material-blue/users.inc:110
#: ../../../../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:100
-#: ../../../../inc/themes/classic/search.inc:112
-#: ../../../../inc/themes/classic/users.inc:91
-#: ../../../../inc/themes/material-blue/account.inc:120
-#: ../../../../inc/themes/material-blue/search.inc:118
-#: ../../../../inc/themes/material-blue/users.inc:116
-msgid "Notas"
-msgstr "Jegyzetek"
-
-# "Notes about the account"
-#: ../../../../inc/themes/classic/account.inc:102
-#: ../../../../inc/themes/material-blue/account.inc:125
-#: ../../../../inc/themes/material-blue/users.inc:123
-msgid "Notas sobre la cuenta"
-msgstr "Jegyzetek a fiókokról"
-
-# "Permissions"
-#: ../../../../inc/themes/classic/account.inc:108
-#: ../../../../inc/themes/material-blue/account.inc:134
-#: ../../../../inc/themes/material-blue/search.inc:111
-msgid "Permisos"
-msgstr "Jofosultságok"
-
-# "Enable Edit"
-#: ../../../../inc/themes/classic/account.inc:135
-#: ../../../../inc/themes/classic/account.inc:166
-#: ../../../../inc/themes/material-blue/account.inc:163
-#: ../../../../inc/themes/material-blue/account.inc:195
-msgid "Hablitar edición"
-msgstr "Szerkesztés engedélyezése"
-
# "Drop files here (max. 5) or click to select"
-#: ../../../../inc/themes/classic/account.inc:204
-#: ../../../../inc/themes/material-blue/account.inc:247
+#: ../../../../inc/themes/classic/account-files.inc:13
+#: ../../../../inc/themes/material-blue/account-files.inc:13
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:204
+#: ../../../../inc/themes/classic/account-files.inc:13
#: ../../../../inc/themes/classic/config.inc:212
-#: ../../../../inc/themes/material-blue/account.inc:247
-#: ../../../../inc/themes/material-blue/config.inc:309
+#: ../../../../inc/themes/material-blue/account-files.inc:13
+#: ../../../../inc/themes/material-blue/config-files.inc:54
msgid "Tamaño máximo de archivo"
msgstr "Maximális fájl méret"
+# "Request Account Modification"
+#: ../../../../inc/themes/classic/account-request.inc:1
+#: ../../../../inc/themes/material-blue/request.inc:3
+msgid "Solicitar Modificación de Cuenta"
+msgstr "Kérés fiók módosítás"
+
+# "Request"
+#: ../../../../inc/themes/classic/account-request.inc:22
+#: ../../../../inc/themes/material-blue/request.inc:27
+msgid "Petición"
+msgstr "Kérés"
+
+# "Request description"
+#: ../../../../inc/themes/classic/account-request.inc:24
+#: ../../../../inc/themes/material-blue/request.inc:31
+msgid "Descripción de la petición"
+msgstr "Kérés leírás"
+
+# "Send"
+#: ../../../../inc/themes/classic/account-request.inc:38
+#: ../../../../inc/themes/material-blue/request.inc:50
+msgid "Enviar"
+msgstr "Küldés"
+
+# "Account name"
+#: ../../../../inc/themes/classic/account.inc:20
+#: ../../../../inc/themes/material-blue/account.inc:33
+msgid "Nombre de cuenta"
+msgstr "Fiók név"
+
+# "Search down or enter"
+#: ../../../../inc/themes/classic/account.inc:41
+msgid "Buscar en desplegable o introducir"
+msgstr "Keress lentebb, vagy nyomj entert"
+
+# "Access URL or IP"
+#: ../../../../inc/themes/classic/account.inc:71
+#: ../../../../inc/themes/material-blue/account.inc:90
+msgid "URL o IP de acceso"
+msgstr "URL vagy IP elérés"
+
+# "Access user"
+#: ../../../../inc/themes/classic/account.inc:83
+#: ../../../../inc/themes/material-blue/account.inc:104
+msgid "Usuario de acceso"
+msgstr "Felhasználó elérése"
+
+# "Notes"
+#: ../../../../inc/themes/classic/account.inc:109
+#: ../../../../inc/themes/classic/datasearch-rows.inc:73
+#: ../../../../inc/themes/classic/search.inc:85
+#: ../../../../inc/themes/classic/users.inc:91
+#: ../../../../inc/themes/material-blue/account-link.inc:42
+#: ../../../../inc/themes/material-blue/account.inc:137
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:77
+#: ../../../../inc/themes/material-blue/users.inc:117
+msgid "Notas"
+msgstr "Jegyzetek"
+
+# "Notes about the account"
+#: ../../../../inc/themes/classic/account.inc:111
+#: ../../../../inc/themes/material-blue/account.inc:144
+#: ../../../../inc/themes/material-blue/users.inc:124
+msgid "Notas sobre la cuenta"
+msgstr "Jegyzetek a fiókokról"
+
+# "Permissions"
+#: ../../../../inc/themes/classic/account.inc:117
+#: ../../../../inc/themes/classic/datasearch-rows.inc:62
+#: ../../../../inc/themes/material-blue/account.inc:153
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:64
+msgid "Permisos"
+msgstr "Jofosultságok"
+
+# "Enable Edit"
+#: ../../../../inc/themes/classic/account.inc:144
+#: ../../../../inc/themes/classic/account.inc:175
+#: ../../../../inc/themes/material-blue/account.inc:183
+#: ../../../../inc/themes/material-blue/account.inc:216
+msgid "Hablitar edición"
+msgstr "Szerkesztés engedélyezése"
+
# "History"
-#: ../../../../inc/themes/classic/account.inc:216
-#: ../../../../inc/themes/material-blue/account.inc:259
+#: ../../../../inc/themes/classic/account.inc:203
+#: ../../../../inc/themes/material-blue/account.inc:242
msgid "Historial"
msgstr "Elõzmények"
# "Select date"
-#: ../../../../inc/themes/classic/account.inc:235
-#: ../../../../inc/themes/material-blue/account.inc:279
+#: ../../../../inc/themes/classic/account.inc:223
+#: ../../../../inc/themes/material-blue/account.inc:262
msgid "Seleccionar fecha"
msgstr "Válassz dátumot"
# "Last Modification"
-#: ../../../../inc/themes/classic/account.inc:244
-#: ../../../../inc/themes/classic/users.inc:164
-#: ../../../../inc/themes/material-blue/account.inc:288
-#: ../../../../inc/themes/material-blue/users.inc:208
+#: ../../../../inc/themes/classic/account.inc:232
+#: ../../../../inc/themes/classic/users.inc:140
+#: ../../../../inc/themes/material-blue/account.inc:271
+#: ../../../../inc/themes/material-blue/users.inc:183
msgid "Última Modificación"
msgstr "Utoljára módosítva"
# "by"
-#: ../../../../inc/themes/classic/account.inc:246
-#: ../../../../inc/themes/material-blue/account.inc:290
+#: ../../../../inc/themes/classic/account.inc:234
+#: ../../../../inc/themes/material-blue/account.inc:273
msgid "por"
msgstr "által"
-# "Visits"
-#: ../../../../inc/themes/classic/account.inc:289
-#: ../../../../inc/themes/material-blue/account.inc:339
-msgid "Visitas"
-msgstr "Látogatók"
-
-# "Date Added"
-#: ../../../../inc/themes/classic/account.inc:293
-#: ../../../../inc/themes/material-blue/account.inc:343
-msgid "Fecha Alta"
-msgstr "Dátum hozzáadva"
-
-# "Creator"
-#: ../../../../inc/themes/classic/account.inc:297
-#: ../../../../inc/themes/material-blue/account.inc:347
-msgid "Creador"
-msgstr "Készítõ"
-
-# "Main Group"
-#: ../../../../inc/themes/classic/account.inc:301
-#: ../../../../inc/themes/material-blue/account.inc:204
-#: ../../../../inc/themes/material-blue/account.inc:351
-msgid "Grupo Principal"
-msgstr "Fõcsoport"
-
-# "Secondary Users"
-#: ../../../../inc/themes/classic/account.inc:306
-#: ../../../../inc/themes/material-blue/account.inc:356
-msgid "Usuarios Secundarios"
-msgstr "Másodlagos felhasználók"
-
-# "Secondary Groups"
-#: ../../../../inc/themes/classic/account.inc:325
-#: ../../../../inc/themes/material-blue/account.inc:375
-msgid "Grupos Secundarios"
-msgstr "Másodlagos csoportok"
-
-# "Date Modified"
-#: ../../../../inc/themes/classic/account.inc:345
-#: ../../../../inc/themes/material-blue/account.inc:395
-msgid "Fecha Edición"
-msgstr "Adat módosítva"
-
-# "Editor"
-#: ../../../../inc/themes/classic/account.inc:349
-#: ../../../../inc/themes/material-blue/account.inc:399
-msgid "Editor"
-msgstr "Szerkesztõ"
-
-# "Restore account from this point"
-#: ../../../../inc/themes/classic/account.inc:376
-#: ../../../../inc/themes/material-blue/account.inc:462
-msgid "Restaurar cuenta desde este punto"
-msgstr "Restore véve ezen a ponton"
-
-# Copy Password to Clipboard
-#: ../../../../inc/themes/classic/account.inc:388
-#: ../../../../inc/themes/classic/search.inc:143
-#: ../../../../inc/themes/material-blue/account.inc:429
-#: ../../../../inc/themes/material-blue/search.inc:154
-#, fuzzy
-msgid "Copiar Clave en Portapapeles"
-msgstr "A jelszó nem lehet üres"
-
-# "View Current"
-#: ../../../../inc/themes/classic/account.inc:403
-#: ../../../../inc/themes/material-blue/account.inc:442
-msgid "Ver Actual"
-msgstr "Általános"
-
-# "Back"
-#: ../../../../inc/themes/classic/account.inc:408
-#: ../../../../inc/themes/classic/editpass.inc:45
-#: ../../../../inc/themes/classic/mgmttabs.inc:4
-#: ../../../../inc/themes/classic/passreset.inc:46
-#: ../../../../inc/themes/material-blue/passreset.inc:48
-msgid "Volver"
-msgstr "Vissza"
-
-# "Edit Account"
-#: ../../../../inc/themes/classic/account.inc:415
-#: ../../../../inc/themes/classic/search.inc:155
-#: ../../../../inc/themes/material-blue/account.inc:452
-#: ../../../../inc/themes/material-blue/search.inc:166
-msgid "Modificar Cuenta"
-msgstr "Fiók módosítás"
-
-# "Request Modification"
-#: ../../../../inc/themes/classic/account.inc:420
-#: ../../../../inc/themes/classic/search.inc:176
-#: ../../../../inc/themes/material-blue/account.inc:456
-#: ../../../../inc/themes/material-blue/search.inc:187
-msgid "Solicitar Modificación"
-msgstr "Kérés módosítás"
-
-# "Save"
-#: ../../../../inc/themes/classic/account.inc:427
-#: ../../../../inc/themes/classic/categories.inc:62
-#: ../../../../inc/themes/classic/config.inc:294
-#: ../../../../inc/themes/classic/customers.inc:62
-#: ../../../../inc/themes/classic/customfields.inc:63
-#: ../../../../inc/themes/classic/editpass.inc:50
-#: ../../../../inc/themes/classic/encryption.inc:99
-#: ../../../../inc/themes/classic/groups.inc:77
-#: ../../../../inc/themes/classic/ldap.inc:229
-#: ../../../../inc/themes/classic/mail.inc:107
-#: ../../../../inc/themes/classic/preferences.inc:130
-#: ../../../../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:468
-#: ../../../../inc/themes/material-blue/categories.inc:72
-#: ../../../../inc/themes/material-blue/config.inc:425
-#: ../../../../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/preferences.inc:134
-#: ../../../../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:437
-#: ../../../../inc/themes/material-blue/account.inc:478
+#: ../../../../inc/themes/classic/account.inc:275
+#: ../../../../inc/themes/material-blue/account.inc:318
msgid "Seleccionar grupos secundarios"
msgstr " Válassz másodlagos csoportot"
# "Select users"
-#: ../../../../inc/themes/classic/account.inc:441
-#: ../../../../inc/themes/material-blue/account.inc:481
+#: ../../../../inc/themes/classic/account.inc:279
+#: ../../../../inc/themes/material-blue/account.inc:321
msgid "Seleccionar usuarios"
msgstr "Válassz felhasználót"
# "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
+#: ../../../../inc/themes/classic/backup.inc:12
+#: ../../../../inc/themes/classic/backup.inc:69
+#: ../../../../inc/themes/material-blue/backup.inc:12
+#: ../../../../inc/themes/material-blue/backup.inc:73
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
+#: ../../../../inc/themes/classic/backup.inc:20
+#: ../../../../inc/themes/classic/backup.inc:77
+#: ../../../../inc/themes/material-blue/backup.inc:20
+#: ../../../../inc/themes/material-blue/backup.inc:81
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
+#: ../../../../inc/themes/classic/backup.inc:33
+#: ../../../../inc/themes/material-blue/backup.inc:33
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:90
-#: ../../../../inc/themes/classic/encryption.inc:94
-#: ../../../../inc/themes/classic/encryption.inc:159
-#: ../../../../inc/themes/classic/encryption.inc:163
-#: ../../../../inc/themes/classic/import.inc:12
-#: ../../../../inc/themes/classic/import.inc:34
-#: ../../../../inc/themes/classic/import.inc:48
-#: ../../../../inc/themes/classic/import.inc:94
-#: ../../../../inc/themes/classic/import.inc:115
-#: ../../../../inc/themes/classic/import.inc:167
-#: ../../../../inc/themes/classic/import.inc:171
-#: ../../../../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:104
-#: ../../../../inc/themes/material-blue/encryption.inc:108
-#: ../../../../inc/themes/material-blue/encryption.inc:178
-#: ../../../../inc/themes/material-blue/encryption.inc:182
-#: ../../../../inc/themes/material-blue/import.inc:96
-#: ../../../../inc/themes/material-blue/import.inc:100
-#: ../../../../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
+#: ../../../../inc/themes/classic/backup.inc:52
+#: ../../../../inc/themes/material-blue/backup.inc:54
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
+#: ../../../../inc/themes/classic/backup.inc:54
+#: ../../../../inc/themes/material-blue/backup.inc:56
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
+#: ../../../../inc/themes/classic/backup.inc:62
+#: ../../../../inc/themes/classic/backup.inc:128
+#: ../../../../inc/themes/material-blue/backup.inc:66
#, 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
+#: ../../../../inc/themes/classic/backup.inc:86
+#: ../../../../inc/themes/material-blue/backup.inc:90
#, 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
+#: ../../../../inc/themes/classic/backup.inc:92
+#: ../../../../inc/themes/material-blue/backup.inc:96
+#: ../../../../inc/themes/material-blue/backup.inc:103
#, 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
+#: ../../../../inc/themes/classic/backup.inc:100
+#: ../../../../inc/themes/material-blue/backup.inc:109
+#: ../../../../inc/themes/material-blue/backup.inc:116
#, fuzzy
msgid "Clave de Exportación (repetir)"
msgstr "Jelszó (ismét)"
-#: ../../../../inc/themes/classic/backup.inc:118
-#: ../../../../inc/themes/material-blue/backup.inc:134
+#: ../../../../inc/themes/classic/backup.inc:120
+#: ../../../../inc/themes/material-blue/backup.inc:136
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
+#: ../../../../inc/themes/classic/backup.inc:122
+#: ../../../../inc/themes/material-blue/backup.inc:138
msgid "Los elementos exportados son cuentas, clientes y categorías."
msgstr ""
-#: ../../../../inc/themes/classic/backup.inc:122
-#: ../../../../inc/themes/material-blue/backup.inc:138
+#: ../../../../inc/themes/classic/backup.inc:124
+#: ../../../../inc/themes/material-blue/backup.inc:140
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
+#: ../../../../inc/themes/classic/backup.inc:126
+#: ../../../../inc/themes/material-blue/backup.inc:142
msgid ""
"Es posible establecer una clave de exportación para guardar todos los datos "
"encriptados en el archivo XML."
@@ -4165,55 +4893,195 @@ 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
+#: ../../../../inc/themes/material-blue/categories.inc:15
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
+#: ../../../../inc/themes/material-blue/categories.inc:27
msgid "Descripción de la categoría"
msgstr "Kategória leírás"
+# "Event"
+#: ../../../../inc/themes/classic/config-events.inc:2
+#: ../../../../inc/themes/material-blue/config-events.inc:4
+#, fuzzy
+msgid "Eventos"
+msgstr "Esemény"
+
+# "Enable event log"
+#: ../../../../inc/themes/classic/config-events.inc:8
+#: ../../../../inc/themes/classic/config.inc:61
+#: ../../../../inc/themes/material-blue/config-events.inc:10
+msgid "Habilitar log de eventos"
+msgstr "Esemény napló engedélyezése"
+
+# "It saves the actions done by the application."
+#: ../../../../inc/themes/classic/config-events.inc:13
+#: ../../../../inc/themes/classic/config.inc:65
+#: ../../../../inc/themes/material-blue/config-events.inc:14
+#, fuzzy
+msgid "Guarda las acciones realizadas en la aplicación."
+msgstr "Ez elmenti az akciók kimenetét"
+
+# "Enable LDAP"
+#: ../../../../inc/themes/classic/config-events.inc:25
+#: ../../../../inc/themes/material-blue/config-events.inc:28
+#, fuzzy
+msgid "Habilitar Syslog"
+msgstr "LDAP engedélyezése"
+
+# "Enable event log"
+#: ../../../../inc/themes/classic/config-events.inc:35
+#: ../../../../inc/themes/material-blue/config-events.inc:40
+#, fuzzy
+msgid "Habilitar Syslog Remoto"
+msgstr "Esemény napló engedélyezése"
+
+# "Server"
+#: ../../../../inc/themes/classic/config-events.inc:45
+#: ../../../../inc/themes/classic/config-proxy.inc:18
+#: ../../../../inc/themes/classic/info.inc:44
+#: ../../../../inc/themes/classic/ldap.inc:32
+#: ../../../../inc/themes/classic/mail.inc:21
+#: ../../../../inc/themes/material-blue/config-events.inc:52
+#: ../../../../inc/themes/material-blue/config-proxy.inc:21
+#: ../../../../inc/themes/material-blue/info.inc:44
+#: ../../../../inc/themes/material-blue/ldap.inc:37
+#: ../../../../inc/themes/material-blue/ldap.inc:60
+#: ../../../../inc/themes/material-blue/mail.inc:26
+#: ../../../../inc/themes/material-blue/mail.inc:32
+msgid "Servidor"
+msgstr "Szerver"
+
+# "Port"
+#: ../../../../inc/themes/classic/config-events.inc:54
+#: ../../../../inc/themes/classic/config-proxy.inc:27
+#: ../../../../inc/themes/classic/mail.inc:29
+#: ../../../../inc/themes/material-blue/config-events.inc:66
+#: ../../../../inc/themes/material-blue/config-events.inc:74
+#: ../../../../inc/themes/material-blue/config-proxy.inc:35
+#: ../../../../inc/themes/material-blue/mail.inc:38
+#: ../../../../inc/themes/material-blue/mail.inc:45
+msgid "Puerto"
+msgstr "Port"
+
+#: ../../../../inc/themes/classic/config-links.inc:2
+#: ../../../../inc/themes/material-blue/config-links.inc:4
+#: ../../../../inc/themes/material-blue/profiles.inc:141
+msgid "Enlaces Públicos"
+msgstr ""
+
+# "Enable Wiki links"
+#: ../../../../inc/themes/classic/config-links.inc:8
+#: ../../../../inc/themes/material-blue/config-links.inc:10
+#, fuzzy
+msgid "Habilitar Enlaces Públicos"
+msgstr "Wiki linkek engedélyezése"
+
+# "Enables account name as a link to account details in search page."
+#: ../../../../inc/themes/classic/config-links.inc:12
+#: ../../../../inc/themes/material-blue/config-links.inc:15
+#, fuzzy
+msgid ""
+"Habilita la posibilidad de generar enlaces públicos para ver los detalles de "
+"una cuenta."
+msgstr "Fiók nevére való keresés engedélyezése"
+
+#: ../../../../inc/themes/classic/config-links.inc:16
+#: ../../../../inc/themes/material-blue/config-links.inc:19
+msgid ""
+"Las cuentas enlazadas serán visibles por cualquiera que disponga del enlace."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config-links.inc:20
+#: ../../../../inc/themes/material-blue/config-links.inc:23
+msgid ""
+"Para crear enlaces, los usuarios tienen que tener activada la opción en su "
+"perfl."
+msgstr ""
+
+# "File type not allowed"
+#: ../../../../inc/themes/classic/config-links.inc:32
+#: ../../../../inc/themes/material-blue/config-links.inc:38
+#, fuzzy
+msgid "Tiempo de caducidad"
+msgstr "Fájltípus nem engedélyezett"
+
+# "Inactive time"
+#: ../../../../inc/themes/classic/config-links.inc:37
+#: ../../../../inc/themes/classic/config-links.inc:47
+#: ../../../../inc/themes/material-blue/config-links.inc:46
+#, fuzzy
+msgid "Tiempo en minutos"
+msgstr "Idõ kikapcsolása"
+
+#: ../../../../inc/themes/classic/config-links.inc:42
+#: ../../../../inc/themes/material-blue/config-links.inc:52
+msgid "Número máximo de visitas"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config-links.inc:52
+#: ../../../../inc/themes/material-blue/config-links.inc:64
+#, fuzzy
+msgid "Usar imagen para clave"
+msgstr "Mester jelszó szükséges a jelszavak titkosításához"
+
+#: ../../../../inc/themes/classic/config-links.inc:56
+#: ../../../../inc/themes/material-blue/config-links.inc:69
+msgid "La clave de la cuenta es visualizada como una imagen."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config-proxy.inc:2
+#: ../../../../inc/themes/material-blue/config-proxy.inc:2
+msgid "Proxy"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config-proxy.inc:8
+#: ../../../../inc/themes/material-blue/config-proxy.inc:8
+msgid "Usar Proxy"
+msgstr ""
+
# "Site"
#: ../../../../inc/themes/classic/config.inc:4
-#: ../../../../inc/themes/classic/preferences.inc:4
-#: ../../../../inc/themes/material-blue/config.inc:4
-#: ../../../../inc/themes/material-blue/preferences.inc:4
+#: ../../../../inc/themes/classic/preferences-site.inc:4
+#: ../../../../inc/themes/material-blue/config-site.inc:4
+#: ../../../../inc/themes/material-blue/preferences-site.inc:6
msgid "Sitio"
msgstr "Oldal"
# "Language"
#: ../../../../inc/themes/classic/config.inc:11
-#: ../../../../inc/themes/classic/preferences.inc:12
-#: ../../../../inc/themes/material-blue/config.inc:12
-#: ../../../../inc/themes/material-blue/preferences.inc:12
+#: ../../../../inc/themes/classic/preferences-site.inc:12
+#: ../../../../inc/themes/material-blue/config-site.inc:10
+#: ../../../../inc/themes/material-blue/preferences-site.inc:14
msgid "Idioma"
msgstr "Nyelv"
#: ../../../../inc/themes/classic/config.inc:15
-#: ../../../../inc/themes/material-blue/config.inc:16
+#: ../../../../inc/themes/material-blue/config-site.inc:15
msgid ""
"Establece el idioma global de la aplicación. Es posible establecer un idioma "
"por usuario en las preferencias."
msgstr ""
#: ../../../../inc/themes/classic/config.inc:18
-#: ../../../../inc/themes/material-blue/config.inc:19
+#: ../../../../inc/themes/material-blue/config-site.inc:19
msgid ""
"Para mejorar/añadir las traducciones, puede colaborar en http:://translate."
"syspass.org"
msgstr ""
#: ../../../../inc/themes/classic/config.inc:33
-#: ../../../../inc/themes/classic/preferences.inc:24
-#: ../../../../inc/themes/material-blue/config.inc:34
-#: ../../../../inc/themes/material-blue/preferences.inc:23
+#: ../../../../inc/themes/classic/preferences-site.inc:24
+#: ../../../../inc/themes/material-blue/config-site.inc:34
+#: ../../../../inc/themes/material-blue/preferences-site.inc:25
msgid "Tema Visual"
msgstr ""
#: ../../../../inc/themes/classic/config.inc:37
-#: ../../../../inc/themes/material-blue/config.inc:38
+#: ../../../../inc/themes/material-blue/config-site.inc:39
msgid ""
"Establece el tema visual global de la aplicación. Es posible establecer un "
"tema visual por usuario en las preferencias."
@@ -4221,33 +5089,20 @@ msgstr ""
# "Session timeout (s)"
#: ../../../../inc/themes/classic/config.inc:52
-#: ../../../../inc/themes/material-blue/config.inc:53
-#: ../../../../inc/themes/material-blue/config.inc:61
+#: ../../../../inc/themes/material-blue/config-site.inc:55
+#: ../../../../inc/themes/material-blue/config-site.inc:63
msgid "Timeout de sesión (s)"
msgstr "Munkamenet idõ"
-# "Enable event log"
-#: ../../../../inc/themes/classic/config.inc:61
-#: ../../../../inc/themes/material-blue/config.inc:85
-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:65
-#: ../../../../inc/themes/material-blue/config.inc:89
-#, 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:77
-#: ../../../../inc/themes/material-blue/config.inc:103
+#: ../../../../inc/themes/material-blue/config-site.inc:89
msgid "Habilitar depuración"
msgstr "Nyomkövetés engedélyezése"
# "Shows some information about application and performance."
#: ../../../../inc/themes/classic/config.inc:81
-#: ../../../../inc/themes/material-blue/config.inc:107
+#: ../../../../inc/themes/material-blue/config-site.inc:94
#, fuzzy
msgid ""
"Muestra información relativa a la configuración de la aplicación y "
@@ -4256,13 +5111,13 @@ 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:93
-#: ../../../../inc/themes/material-blue/config.inc:121
+#: ../../../../inc/themes/material-blue/config-site.inc:108
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:97
-#: ../../../../inc/themes/material-blue/config.inc:125
+#: ../../../../inc/themes/material-blue/config-site.inc:113
#, fuzzy
msgid ""
"En este modo no se puede acceder a la aplicación. Para deshabilitarlo es "
@@ -4273,13 +5128,13 @@ msgstr ""
# "Check for updates"
#: ../../../../inc/themes/classic/config.inc:109
-#: ../../../../inc/themes/material-blue/config.inc:139
+#: ../../../../inc/themes/material-blue/config-site.inc:127
msgid "Comprobar actualizaciones"
msgstr "Frissítések keresése"
# "Check for application updates (only for administrators)."
#: ../../../../inc/themes/classic/config.inc:113
-#: ../../../../inc/themes/material-blue/config.inc:143
+#: ../../../../inc/themes/material-blue/config-site.inc:132
#, fuzzy
msgid ""
"Comprobar actualizaciones de la aplicación (sólo para los usuarios "
@@ -4288,14 +5143,14 @@ msgstr "Azlkalmazás frissítések keresése (csak rendszergazda esetén)"
# "Check for updates"
#: ../../../../inc/themes/classic/config.inc:125
-#: ../../../../inc/themes/material-blue/config.inc:157
+#: ../../../../inc/themes/material-blue/config-site.inc:146
#, fuzzy
msgid "Comprobar notificaciones"
msgstr "Ellenõrzés"
# "Check for application updates (only for administrators)."
#: ../../../../inc/themes/classic/config.inc:129
-#: ../../../../inc/themes/material-blue/config.inc:161
+#: ../../../../inc/themes/material-blue/config-site.inc:151
#, fuzzy
msgid ""
"Comprobar si existen notificaciones de seguridad o avisos de sysPass (sólo "
@@ -4304,17 +5159,17 @@ msgstr "Azlkalmazás frissítések keresése (csak rendszergazda esetén)"
# "Account name as link"
#: ../../../../inc/themes/classic/config.inc:141
-#: ../../../../inc/themes/classic/preferences.inc:38
-#: ../../../../inc/themes/material-blue/config.inc:182
-#: ../../../../inc/themes/material-blue/preferences.inc:36
+#: ../../../../inc/themes/classic/preferences-site.inc:38
+#: ../../../../inc/themes/material-blue/config-accounts.inc:10
+#: ../../../../inc/themes/material-blue/preferences-site.inc:38
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:145
-#: ../../../../inc/themes/classic/preferences.inc:43
-#: ../../../../inc/themes/material-blue/config.inc:186
-#: ../../../../inc/themes/material-blue/preferences.inc:40
+#: ../../../../inc/themes/classic/preferences-site.inc:43
+#: ../../../../inc/themes/material-blue/config-accounts.inc:14
+#: ../../../../inc/themes/material-blue/preferences-site.inc:42
#, fuzzy
msgid ""
"Habilita el nombre de la cuenta de la búsqueda, como enlace a los detalles "
@@ -4323,25 +5178,25 @@ msgstr "Fiók nevére való keresés engedélyezése"
# "Files management"
#: ../../../../inc/themes/classic/config.inc:157
-#: ../../../../inc/themes/material-blue/config.inc:267
+#: ../../../../inc/themes/material-blue/config-files.inc:10
msgid "Gestión de archivos"
msgstr "Fájl menedzsment"
# "Enables upload/download accounts files."
#: ../../../../inc/themes/classic/config.inc:161
-#: ../../../../inc/themes/material-blue/config.inc:271
+#: ../../../../inc/themes/material-blue/config-files.inc:15
#, 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:173
-#: ../../../../inc/themes/material-blue/config.inc:200
+#: ../../../../inc/themes/material-blue/config-accounts.inc:28
msgid "Búsquedas globales"
msgstr "Gblobális Keresések"
#: ../../../../inc/themes/classic/config.inc:177
-#: ../../../../inc/themes/material-blue/config.inc:204
+#: ../../../../inc/themes/material-blue/config-accounts.inc:32
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."
@@ -4349,26 +5204,26 @@ msgstr ""
# "Allowed file extensions"
#: ../../../../inc/themes/classic/config.inc:189
-#: ../../../../inc/themes/material-blue/config.inc:286
+#: ../../../../inc/themes/material-blue/config-files.inc:30
msgid "Extensiones de archivos permitidas"
msgstr "Engedélyezett fájl kiterjesztés"
#: ../../../../inc/themes/classic/config.inc:193
-#: ../../../../inc/themes/material-blue/config.inc:290
+#: ../../../../inc/themes/material-blue/config-files.inc:35
#, 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:197
-#: ../../../../inc/themes/material-blue/config.inc:294
+#: ../../../../inc/themes/material-blue/config-files.inc:39
#, 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:201
-#: ../../../../inc/themes/material-blue/config.inc:298
+#: ../../../../inc/themes/material-blue/config-files.inc:43
#, fuzzy
msgid ""
"Escribir extensión y pulsar intro para añadir. Es necesario guardar la "
@@ -4377,86 +5232,88 @@ msgstr "Írj kiterjesztést, majd nyomj entert a hozzáadáshoz"
# "Sets up the max upload file size."
#: ../../../../inc/themes/classic/config.inc:216
-#: ../../../../inc/themes/material-blue/config.inc:313
+#: ../../../../inc/themes/material-blue/config-files.inc:59
#, 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:220
-#: ../../../../inc/themes/material-blue/config.inc:317
+#: ../../../../inc/themes/material-blue/config-files.inc:63
#, fuzzy
msgid "El máximo absuluto es de 16MB."
msgstr "A maximum 16MB"
# "Results per page"
#: ../../../../inc/themes/classic/config.inc:231
-#: ../../../../inc/themes/classic/preferences.inc:56
-#: ../../../../inc/themes/material-blue/config.inc:218
-#: ../../../../inc/themes/material-blue/preferences.inc:54
+#: ../../../../inc/themes/classic/preferences-site.inc:56
+#: ../../../../inc/themes/material-blue/config-accounts.inc:46
+#: ../../../../inc/themes/material-blue/preferences-site.inc:56
msgid "Resultados por página"
msgstr "Eredmény / oldal"
# "Number of results that are shown per page when searching"
#: ../../../../inc/themes/classic/config.inc:235
-#: ../../../../inc/themes/classic/preferences.inc:61
-#: ../../../../inc/themes/material-blue/config.inc:222
-#: ../../../../inc/themes/material-blue/preferences.inc:58
+#: ../../../../inc/themes/classic/preferences-site.inc:61
+#: ../../../../inc/themes/material-blue/config-accounts.inc:50
+#: ../../../../inc/themes/material-blue/preferences-site.inc:60
#, 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:246
+#: ../../../../inc/themes/material-blue/config-accounts.inc:89
#, 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:250
+#: ../../../../inc/themes/material-blue/config-accounts.inc:93
#, 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:262
-#: ../../../../inc/themes/material-blue/config.inc:238
+#: ../../../../inc/themes/material-blue/config-accounts.inc:66
#, 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:266
-#: ../../../../inc/themes/material-blue/config.inc:242
+#: ../../../../inc/themes/material-blue/config-accounts.inc:70
#, 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:269
-#: ../../../../inc/themes/material-blue/config.inc:245
+#: ../../../../inc/themes/material-blue/config-accounts.inc:74
msgid "Util para entornos donde copiar la clave supone un riesgo de seguridad."
msgstr ""
# "Add extension"
-#: ../../../../inc/themes/classic/config.inc:304
-#: ../../../../inc/themes/material-blue/config.inc:435
+#: ../../../../inc/themes/classic/config.inc:308
+#: ../../../../inc/themes/material-blue/config.inc:39
msgid "Añadir extensión"
msgstr "Kiterjesztés hozzáadása"
# "Delete extension"
-#: ../../../../inc/themes/classic/config.inc:305
-#: ../../../../inc/themes/material-blue/config.inc:436
+#: ../../../../inc/themes/classic/config.inc:309
+#: ../../../../inc/themes/material-blue/config.inc:40
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
+#: ../../../../inc/themes/classic/customers.inc:11
+#: ../../../../inc/themes/material-blue/customers.inc:16
msgid "Nombre del cliente"
msgstr "Ügyfél név"
# "Customer description"
-#: ../../../../inc/themes/classic/customers.inc:18
-#: ../../../../inc/themes/material-blue/customers.inc:26
+#: ../../../../inc/themes/classic/customers.inc:19
+#: ../../../../inc/themes/material-blue/customers.inc:28
msgid "Descripción del cliente"
msgstr "Ügyfél leírás"
@@ -4472,6 +5329,62 @@ msgstr "Keresendõ szöveg"
msgid "Obligatorio"
msgstr ""
+# "Filter ON"
+#: ../../../../inc/themes/classic/datagrid-nav-full.inc:11
+#: ../../../../inc/themes/classic/search.inc:166
+#: ../../../../inc/themes/material-blue/datagrid-nav-full.inc:11
+msgid "Filtro ON"
+msgstr "Szûrõ bekapcsolva"
+
+# "No records found"
+#: ../../../../inc/themes/classic/datagrid-rows.inc:10
+#: ../../../../inc/themes/classic/datasearch-grid.inc:12
+#: ../../../../inc/themes/classic/eventlog.inc:6
+#: ../../../../inc/themes/classic/search.inc:5
+#: ../../../../inc/themes/material-blue/datagrid-rows.inc:10
+#: ../../../../inc/themes/material-blue/datasearch-grid.inc:12
+#: ../../../../inc/themes/material-blue/eventlog.inc:8
+msgid "No se encontraron registros"
+msgstr "Nem találtam rekordokat"
+
+# "Search in Wiki"
+#: ../../../../inc/themes/classic/datasearch-rows.inc:19
+#: ../../../../inc/themes/classic/search.inc:36
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:19
+msgid "Buscar en Wiki"
+msgstr "Keresés a Wikiben"
+
+# "Open link to"
+#: ../../../../inc/themes/classic/datasearch-rows.inc:53
+#: ../../../../inc/themes/classic/search.inc:72
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:53
+msgid "Abrir enlace a"
+msgstr "Nyissa meg a linket, hogy"
+
+# "Attachments"
+#: ../../../../inc/themes/classic/datasearch-rows.inc:78
+#: ../../../../inc/themes/classic/search.inc:90
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:84
+msgid "Archivos adjuntos"
+msgstr "Csatolmányok"
+
+# "Link to Wiki"
+#: ../../../../inc/themes/classic/datasearch-rows.inc:85
+#: ../../../../inc/themes/classic/datasearch-rows.inc:92
+#: ../../../../inc/themes/classic/search.inc:99
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:93
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:100
+msgid "Enlace a Wiki"
+msgstr "Wiki link"
+
+# "Search in Wiki"
+#: ../../../../inc/themes/classic/datasearch-rows.inc:88
+#: ../../../../inc/themes/classic/search.inc:96
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:95
+#, fuzzy
+msgid "Ver en Wiki"
+msgstr "Keresés a Wikiben"
+
# "Master Password"
#: ../../../../inc/themes/classic/encryption.inc:5
#: ../../../../inc/themes/classic/install.inc:46
@@ -4479,7 +5392,7 @@ msgstr ""
#: ../../../../inc/themes/classic/install.inc:51
#: ../../../../inc/themes/classic/login.inc:15
#: ../../../../inc/themes/classic/login.inc:27
-#: ../../../../inc/themes/material-blue/encryption.inc:5
+#: ../../../../inc/themes/material-blue/encryption.inc:7
#: ../../../../inc/themes/material-blue/install.inc:52
#: ../../../../inc/themes/material-blue/install.inc:59
#: ../../../../inc/themes/material-blue/login.inc:26
@@ -4490,47 +5403,47 @@ msgstr "Mester jelszó"
# "Last Change"
#: ../../../../inc/themes/classic/encryption.inc:13
#: ../../../../inc/themes/classic/encryption.inc:113
-#: ../../../../inc/themes/material-blue/encryption.inc:13
-#: ../../../../inc/themes/material-blue/encryption.inc:128
+#: ../../../../inc/themes/material-blue/encryption.inc:15
+#: ../../../../inc/themes/material-blue/encryption.inc:130
msgid "Último cambio"
msgstr "Utolsó változtatás"
# "Current Master Password"
#: ../../../../inc/themes/classic/encryption.inc:22
-#: ../../../../inc/themes/material-blue/encryption.inc:22
-#: ../../../../inc/themes/material-blue/encryption.inc:28
+#: ../../../../inc/themes/material-blue/encryption.inc:24
+#: ../../../../inc/themes/material-blue/encryption.inc:30
msgid "Clave Maestra actual"
msgstr "Jelenlegki mester jelszó"
# "New Master Password"
#: ../../../../inc/themes/classic/encryption.inc:31
-#: ../../../../inc/themes/material-blue/encryption.inc:34
-#: ../../../../inc/themes/material-blue/encryption.inc:40
+#: ../../../../inc/themes/material-blue/encryption.inc:36
+#: ../../../../inc/themes/material-blue/encryption.inc:42
msgid "Nueva Clave Maestra"
msgstr "Új mester jelszó"
# "New Master Password (repeat)"
#: ../../../../inc/themes/classic/encryption.inc:40
-#: ../../../../inc/themes/material-blue/encryption.inc:46
-#: ../../../../inc/themes/material-blue/encryption.inc:52
+#: ../../../../inc/themes/material-blue/encryption.inc:48
+#: ../../../../inc/themes/material-blue/encryption.inc:54
msgid "Nueva Clave Maestra (repetir)"
msgstr "Új mester jelszó (megerõsítés)"
# "Don't modify accounts"
#: ../../../../inc/themes/classic/encryption.inc:48
-#: ../../../../inc/themes/material-blue/encryption.inc:58
+#: ../../../../inc/themes/material-blue/encryption.inc:60
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:53
-#: ../../../../inc/themes/material-blue/encryption.inc:63
+#: ../../../../inc/themes/material-blue/encryption.inc:65
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:64
-#: ../../../../inc/themes/material-blue/encryption.inc:76
+#: ../../../../inc/themes/material-blue/encryption.inc:78
msgid "Confirmar cambio"
msgstr "Változás megerõsítése"
@@ -4538,38 +5451,38 @@ msgstr "Változás megerõsítése"
#: ../../../../inc/themes/classic/encryption.inc:67
#: ../../../../inc/themes/classic/encryption.inc:70
#: ../../../../inc/themes/classic/encryption.inc:73
-#: ../../../../inc/themes/classic/import.inc:64
-#: ../../../../inc/themes/classic/security.inc:43
+#: ../../../../inc/themes/classic/import.inc:169
+#: ../../../../inc/themes/classic/preferences-security.inc:43
msgid "Atención"
msgstr "Figyelem"
# "You should save the new password on a secure place"
#: ../../../../inc/themes/classic/encryption.inc:68
-#: ../../../../inc/themes/material-blue/encryption.inc:80
+#: ../../../../inc/themes/material-blue/encryption.inc:82
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:71
-#: ../../../../inc/themes/material-blue/encryption.inc:83
+#: ../../../../inc/themes/material-blue/encryption.inc:85
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:74
-#: ../../../../inc/themes/material-blue/encryption.inc:86
+#: ../../../../inc/themes/material-blue/encryption.inc:88
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:95
-#: ../../../../inc/themes/material-blue/encryption.inc:109
+#: ../../../../inc/themes/material-blue/encryption.inc:111
msgid ""
"La clave maestra es utilizada para encriptar las claves de las cuentas de "
"sysPass para mantenerlas seguras."
msgstr ""
#: ../../../../inc/themes/classic/encryption.inc:97
-#: ../../../../inc/themes/material-blue/encryption.inc:111
+#: ../../../../inc/themes/material-blue/encryption.inc:113
msgid ""
"Es recomendable cambiarla cada cierto tiempo y utilizar una clave compleja "
"que incluya números, letras y símbolos."
@@ -4577,7 +5490,7 @@ msgstr ""
# "Master Password"
#: ../../../../inc/themes/classic/encryption.inc:105
-#: ../../../../inc/themes/material-blue/encryption.inc:121
+#: ../../../../inc/themes/material-blue/encryption.inc:123
#, fuzzy
msgid "Clave Temporal"
msgstr "Generate Temporary Password"
@@ -4585,20 +5498,20 @@ msgstr "Generate Temporary Password"
# "Generated Password"
#: ../../../../inc/themes/classic/encryption.inc:116
#: ../../../../inc/themes/classic/encryption.inc:127
-#: ../../../../inc/themes/material-blue/encryption.inc:131
-#: ../../../../inc/themes/material-blue/encryption.inc:142
+#: ../../../../inc/themes/material-blue/encryption.inc:133
+#: ../../../../inc/themes/material-blue/encryption.inc:144
#, fuzzy
msgid "No generada"
msgstr "Generált Jelszó"
#: ../../../../inc/themes/classic/encryption.inc:121
-#: ../../../../inc/themes/material-blue/encryption.inc:136
+#: ../../../../inc/themes/material-blue/encryption.inc:138
msgid "Válido hasta"
msgstr ""
#: ../../../../inc/themes/classic/encryption.inc:133
-#: ../../../../inc/themes/material-blue/encryption.inc:148
-#: ../../../../inc/themes/material-blue/encryption.inc:154
+#: ../../../../inc/themes/material-blue/encryption.inc:150
+#: ../../../../inc/themes/material-blue/encryption.inc:156
#, fuzzy
msgid "Validez (s)"
msgstr "Munkamenet idõ"
@@ -4608,7 +5521,7 @@ msgid "Validez"
msgstr ""
#: ../../../../inc/themes/classic/encryption.inc:164
-#: ../../../../inc/themes/material-blue/encryption.inc:183
+#: ../../../../inc/themes/material-blue/encryption.inc:185
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 "
@@ -4617,83 +5530,36 @@ msgstr ""
# "General"
#: ../../../../inc/themes/classic/encryption.inc:166
-#: ../../../../inc/themes/material-blue/encryption.inc:187
+#: ../../../../inc/themes/material-blue/encryption.inc:189
#, fuzzy
msgid "Generar"
msgstr "Generate Temporary Password"
-# "No records found"
-#: ../../../../inc/themes/classic/eventlog.inc:6
-#: ../../../../inc/themes/classic/search.inc:3
-#: ../../../../inc/themes/material-blue/eventlog.inc:6
-#: ../../../../inc/themes/material-blue/search.inc:3
-msgid "No se encontraron registros"
-msgstr "Nem találtam rekordokat"
-
# "Date / Time"
#: ../../../../inc/themes/classic/eventlog.inc:17
-#: ../../../../inc/themes/material-blue/eventlog.inc:17
+#: ../../../../inc/themes/material-blue/eventlog.inc:19
msgid "Fecha / Hora"
msgstr "Dátum / Idõ"
-# "Event"
+# "High level"
#: ../../../../inc/themes/classic/eventlog.inc:20
-#: ../../../../inc/themes/material-blue/eventlog.inc:20
+#: ../../../../inc/themes/material-blue/eventlog.inc:22
+#, fuzzy
+msgid "Nivel"
+msgstr "Erös"
+
+# "Event"
+#: ../../../../inc/themes/classic/eventlog.inc:23
+#: ../../../../inc/themes/material-blue/eventlog.inc:25
msgid "Evento"
msgstr "Esemény"
# "IP"
-#: ../../../../inc/themes/classic/eventlog.inc:26
-#: ../../../../inc/themes/material-blue/eventlog.inc:26
+#: ../../../../inc/themes/classic/eventlog.inc:29
+#: ../../../../inc/themes/material-blue/eventlog.inc:31
msgid "IP"
msgstr "IP"
-# "First page"
-#: ../../../../inc/themes/classic/eventlog.inc:84
-#: ../../../../inc/themes/classic/search.inc:20
-#: ../../../../inc/themes/classic/search.inc:199
-#: ../../../../inc/themes/material-blue/eventlog.inc:84
-#: ../../../../inc/themes/material-blue/search.inc:20
-#: ../../../../inc/themes/material-blue/search.inc:209
-msgid "Primera página"
-msgstr "Elsõ oldal"
-
-# "Previous page"
-#: ../../../../inc/themes/classic/eventlog.inc:86
-#: ../../../../inc/themes/classic/search.inc:22
-#: ../../../../inc/themes/classic/search.inc:201
-#: ../../../../inc/themes/material-blue/eventlog.inc:86
-#: ../../../../inc/themes/material-blue/search.inc:22
-#: ../../../../inc/themes/material-blue/search.inc:211
-msgid "Página anterior"
-msgstr "Elõzõ oldal"
-
-# "Next page"
-#: ../../../../inc/themes/classic/eventlog.inc:91
-#: ../../../../inc/themes/classic/search.inc:27
-#: ../../../../inc/themes/classic/search.inc:206
-#: ../../../../inc/themes/material-blue/eventlog.inc:91
-#: ../../../../inc/themes/material-blue/search.inc:27
-#: ../../../../inc/themes/material-blue/search.inc:216
-msgid "Página siguiente"
-msgstr "Következõ oldal"
-
-# "Last page"
-#: ../../../../inc/themes/classic/eventlog.inc:93
-#: ../../../../inc/themes/classic/search.inc:29
-#: ../../../../inc/themes/classic/search.inc:208
-#: ../../../../inc/themes/material-blue/eventlog.inc:93
-#: ../../../../inc/themes/material-blue/search.inc:29
-#: ../../../../inc/themes/material-blue/search.inc:218
-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:29
msgid "Indica si la conexión utiliza HTTPS."
@@ -4730,176 +5596,96 @@ msgstr "A cygnux.org projekt"
# "Group name"
#: ../../../../inc/themes/classic/groups.inc:10
-#: ../../../../inc/themes/material-blue/groups.inc:14
+#: ../../../../inc/themes/material-blue/groups.inc:17
msgid "Nombre del grupo"
msgstr "Csoport név"
# "Group description"
#: ../../../../inc/themes/classic/groups.inc:18
-#: ../../../../inc/themes/material-blue/groups.inc:26
+#: ../../../../inc/themes/material-blue/groups.inc:29
msgid "Descripción del grupo"
msgstr "Csoport leírás"
-# "phpPMS Import"
-#: ../../../../inc/themes/classic/import.inc:4
-#: ../../../../inc/themes/material-blue/import.inc:118
-msgid "Importar phpPMS"
-msgstr "phpPMS importálása"
-
-# "DB Username"
-#: ../../../../inc/themes/classic/import.inc:11
-#: ../../../../inc/themes/classic/install.inc:63
-#: ../../../../inc/themes/classic/install.inc:64
-#: ../../../../inc/themes/material-blue/import.inc:125
-#: ../../../../inc/themes/material-blue/import.inc:137
-msgid "Usuario BBDD"
-msgstr "DB felhasználónév"
-
-# "Enter phpPMS database connection user"
-#: ../../../../inc/themes/classic/import.inc:15
-#: ../../../../inc/themes/material-blue/import.inc:129
-#, 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:25
-#: ../../../../inc/themes/classic/install.inc:71
-#: ../../../../inc/themes/classic/install.inc:73
-#: ../../../../inc/themes/material-blue/import.inc:143
-#: ../../../../inc/themes/material-blue/import.inc:149
-msgid "Clave BBDD"
-msgstr "Adatbázis jelszó"
-
-# "DB Name"
-#: ../../../../inc/themes/classic/import.inc:33
-#: ../../../../inc/themes/classic/install.inc:78
-#: ../../../../inc/themes/classic/install.inc:79
-#: ../../../../inc/themes/material-blue/import.inc:155
-#: ../../../../inc/themes/material-blue/import.inc:167
-msgid "Nombre BBDD"
-msgstr "DB név"
-
-# "Enter phpPMS database name"
-#: ../../../../inc/themes/classic/import.inc:37
-#: ../../../../inc/themes/material-blue/import.inc:159
-#, 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:47
-#: ../../../../inc/themes/classic/install.inc:87
-#: ../../../../inc/themes/classic/install.inc:88
-#: ../../../../inc/themes/material-blue/import.inc:173
-#: ../../../../inc/themes/material-blue/import.inc:185
-msgid "Servidor BBDD"
-msgstr "DB szerver"
-
-# "Enter phpPMS database server name"
-#: ../../../../inc/themes/classic/import.inc:51
-#: ../../../../inc/themes/material-blue/import.inc:177
-#, 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:61
-#: ../../../../inc/themes/material-blue/import.inc:191
-msgid "Confirmar"
-msgstr "Megerõsítés"
-
-# "Current data will be removed (except current user)"
-#: ../../../../inc/themes/classic/import.inc:65
-#: ../../../../inc/themes/material-blue/import.inc:195
-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:80
-msgid "Iniciar"
-msgstr "Start"
-
# CSV/XML Import
-#: ../../../../inc/themes/classic/import.inc:86
-#: ../../../../inc/themes/material-blue/import.inc:4
+#: ../../../../inc/themes/classic/import.inc:4
+#: ../../../../inc/themes/material-blue/import.inc:6
#, fuzzy
msgid "Importar CSV/XML"
msgstr "Import CSV/XML"
# Default Group
-#: ../../../../inc/themes/classic/import.inc:93
-#: ../../../../inc/themes/material-blue/import.inc:11
+#: ../../../../inc/themes/classic/import.inc:11
+#: ../../../../inc/themes/material-blue/import.inc:13
#, 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:97
-#: ../../../../inc/themes/material-blue/import.inc:15
+#: ../../../../inc/themes/classic/import.inc:15
+#: ../../../../inc/themes/material-blue/import.inc:17
#, 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:114
+#: ../../../../inc/themes/classic/import.inc:32
#: ../../../../inc/themes/classic/ldap.inc:144
-#: ../../../../inc/themes/material-blue/import.inc:33
-#: ../../../../inc/themes/material-blue/ldap.inc:170
+#: ../../../../inc/themes/material-blue/import.inc:35
+#: ../../../../inc/themes/material-blue/ldap.inc:172
#, fuzzy
msgid "Grupo por Defecto"
msgstr "Csoportot használja a:"
# Define the default users group for new LDAP users
-#: ../../../../inc/themes/classic/import.inc:118
-#: ../../../../inc/themes/material-blue/import.inc:37
+#: ../../../../inc/themes/classic/import.inc:36
+#: ../../../../inc/themes/material-blue/import.inc:39
#, 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:135
-#: ../../../../inc/themes/material-blue/import.inc:55
-#: ../../../../inc/themes/material-blue/import.inc:61
+#: ../../../../inc/themes/classic/import.inc:53
+#: ../../../../inc/themes/material-blue/import.inc:57
+#: ../../../../inc/themes/material-blue/import.inc:63
#, fuzzy
msgid "Clave de Importación"
msgstr "Fiók importálás megerõsítése"
-#: ../../../../inc/themes/classic/import.inc:143
-#: ../../../../inc/themes/material-blue/import.inc:67
-#: ../../../../inc/themes/material-blue/import.inc:73
+#: ../../../../inc/themes/classic/import.inc:61
+#: ../../../../inc/themes/material-blue/import.inc:69
+#: ../../../../inc/themes/material-blue/import.inc:75
msgid "Delimitador CSV"
msgstr ""
# "Drop files here or click to select"
-#: ../../../../inc/themes/classic/import.inc:159
+#: ../../../../inc/themes/classic/import.inc:75
#: ../../../../inc/themes/material-blue/import.inc:87
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:172
-#: ../../../../inc/themes/material-blue/import.inc:101
+#: ../../../../inc/themes/classic/import.inc:91
+#: ../../../../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/classic/import.inc:174
-#: ../../../../inc/themes/material-blue/import.inc:103
+#: ../../../../inc/themes/classic/import.inc:93
+#: ../../../../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:176
-#: ../../../../inc/themes/material-blue/import.inc:105
+#: ../../../../inc/themes/classic/import.inc:95
+#: ../../../../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:178
-#: ../../../../inc/themes/material-blue/import.inc:107
+#: ../../../../inc/themes/classic/import.inc:97
+#: ../../../../inc/themes/material-blue/import.inc:110
#, fuzzy
msgid ""
"Para archivos de KeePass o KeePassX, el nombre del cliente será igual a "
@@ -4909,21 +5695,21 @@ msgstr ""
"KeePassX."
# "Import form a CSV file with the format"
-#: ../../../../inc/themes/classic/import.inc:180
-#: ../../../../inc/themes/material-blue/import.inc:109
+#: ../../../../inc/themes/classic/import.inc:99
+#: ../../../../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:182
-#: ../../../../inc/themes/material-blue/import.inc:111
+#: ../../../../inc/themes/classic/import.inc:101
+#: ../../../../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:184
-#: ../../../../inc/themes/material-blue/import.inc:113
+#: ../../../../inc/themes/classic/import.inc:103
+#: ../../../../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 "
@@ -4932,6 +5718,86 @@ msgstr ""
"Amennyiben az ügyfél vagy a kategória nem létezik, automatikusan lesznek "
"létrehozva"
+# "phpPMS Import"
+#: ../../../../inc/themes/classic/import.inc:109
+#: ../../../../inc/themes/material-blue/import.inc:121
+msgid "Importar phpPMS"
+msgstr "phpPMS importálása"
+
+# "DB Username"
+#: ../../../../inc/themes/classic/import.inc:116
+#: ../../../../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:120
+#: ../../../../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:130
+#: ../../../../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:138
+#: ../../../../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:142
+#: ../../../../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:152
+#: ../../../../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:156
+#: ../../../../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:166
+#: ../../../../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:170
+#: ../../../../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:185
+msgid "Iniciar"
+msgstr "Start"
+
# "Request description"
#: ../../../../inc/themes/classic/info.inc:4
#: ../../../../inc/themes/material-blue/info.inc:4
@@ -4971,19 +5837,6 @@ msgstr "Tiltott kiterjesztések"
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:353
-#: ../../../../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/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
@@ -5050,27 +5903,27 @@ msgstr "Telepítés"
# "Enable LDAP"
#: ../../../../inc/themes/classic/ldap.inc:12
-#: ../../../../inc/themes/material-blue/ldap.inc:12
+#: ../../../../inc/themes/material-blue/ldap.inc:14
msgid "Habilitar LDAP"
msgstr "LDAP engedélyezése"
# "Enables LDAP authentication"
#: ../../../../inc/themes/classic/ldap.inc:16
-#: ../../../../inc/themes/material-blue/ldap.inc:16
+#: ../../../../inc/themes/material-blue/ldap.inc:18
#, 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
+#: ../../../../inc/themes/material-blue/ldap.inc:22
#, 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
+#: ../../../../inc/themes/material-blue/ldap.inc:41
#, fuzzy
msgid "Nombre o dirección IP del servidor de LDAP."
msgstr "LDAP szerver hosztnév vagy IP cím"
@@ -5081,64 +5934,64 @@ msgstr "LDAP szerver hosztnév vagy IP cím"
#: ../../../../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
+#: ../../../../inc/themes/material-blue/ldap.inc:45
+#: ../../../../inc/themes/material-blue/ldap.inc:74
+#: ../../../../inc/themes/material-blue/ldap.inc:121
+#: ../../../../inc/themes/material-blue/ldap.inc:153
+#: ../../../../inc/themes/material-blue/wiki.inc:105
#, fuzzy
msgid "Ejemplos:"
msgstr "Példák"
# "Bind User"
#: ../../../../inc/themes/classic/ldap.inc:57
-#: ../../../../inc/themes/material-blue/ldap.inc:64
+#: ../../../../inc/themes/material-blue/ldap.inc:66
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
+#: ../../../../inc/themes/material-blue/ldap.inc:70
#, 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
+#: ../../../../inc/themes/material-blue/ldap.inc:94
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
+#: ../../../../inc/themes/material-blue/ldap.inc:113
+#: ../../../../inc/themes/material-blue/ldap.inc:135
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
+#: ../../../../inc/themes/material-blue/ldap.inc:117
#, 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
+#: ../../../../inc/themes/material-blue/ldap.inc:145
#, 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
+#: ../../../../inc/themes/material-blue/ldap.inc:149
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
+#: ../../../../inc/themes/material-blue/ldap.inc:176
#, fuzzy
msgid ""
"Define el grupo de usuarios por defecto para los nuevos usuarios de LDAP."
@@ -5146,14 +5999,14 @@ 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
+#: ../../../../inc/themes/material-blue/ldap.inc:192
#, 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
+#: ../../../../inc/themes/material-blue/ldap.inc:196
#, fuzzy
msgid ""
"Define el perfil de usuarios por defecto para los nuevos usuarios de LDAP."
@@ -5161,30 +6014,45 @@ 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
+#: ../../../../inc/themes/material-blue/ldap.inc:212
#, 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
+#: ../../../../inc/themes/material-blue/ldap.inc:216
#, 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
+#: ../../../../inc/themes/classic/wiki.inc:214
+#: ../../../../inc/themes/material-blue/ldap.inc:230
+#: ../../../../inc/themes/material-blue/wiki.inc:247
msgid "Comprobar"
msgstr "Ellenõrzés"
# "Check LDAP connection"
#: ../../../../inc/themes/classic/ldap.inc:206
-#: ../../../../inc/themes/material-blue/ldap.inc:232
+#: ../../../../inc/themes/material-blue/ldap.inc:234
msgid "Comprobar conexión con LDAP"
msgstr "LDAP kapcsolat ellenõrzése"
+# Enter Security Code
+#: ../../../../inc/themes/classic/login-2fa.inc:14
+#: ../../../../inc/themes/material-blue/login-2fa.inc:12
+#, fuzzy
+msgid "Introducir código"
+msgstr "Enter Security Code"
+
+# "Password (Verify)"
+#: ../../../../inc/themes/classic/login-2fa.inc:26
+#, fuzzy
+msgid "Verificar"
+msgstr "Jelszó (Megerõsítés)"
+
# "Lost your password?"
#: ../../../../inc/themes/classic/login.inc:46
#: ../../../../inc/themes/material-blue/login.inc:74
@@ -5209,50 +6077,35 @@ msgstr "Új Kategória"
# "Enable email notifications"
#: ../../../../inc/themes/classic/mail.inc:11
-#: ../../../../inc/themes/material-blue/mail.inc:11
+#: ../../../../inc/themes/material-blue/mail.inc:13
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:367
-#: ../../../../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
+#: ../../../../inc/themes/material-blue/mail.inc:51
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
+#: ../../../../inc/themes/material-blue/mail.inc:93
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
+#: ../../../../inc/themes/material-blue/mail.inc:102
+#: ../../../../inc/themes/material-blue/mail.inc:109
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
+#: ../../../../inc/themes/material-blue/mail.inc:115
msgid "Habilitar peticiones por correo"
msgstr "Email kérések engedélyezése"
-# "More Actions"
-#: ../../../../inc/themes/classic/mgmttabs.inc:70
-#: ../../../../inc/themes/classic/search.inc:150
-#: ../../../../inc/themes/material-blue/search.inc:160
-msgid "Más Acciones"
-msgstr "Több akció"
-
# "Request Password Change"
#: ../../../../inc/themes/classic/passreset.inc:13
#: ../../../../inc/themes/material-blue/passreset.inc:9
@@ -5283,7 +6136,7 @@ msgstr "Vissza a bejelentkezéshez"
# "Request"
#: ../../../../inc/themes/classic/passreset.inc:48
-#: ../../../../inc/themes/material-blue/2fa.inc:25
+#: ../../../../inc/themes/material-blue/login-2fa.inc:25
#: ../../../../inc/themes/material-blue/passreset.inc:53
#: ../../../../inc/themes/material-blue/passreset.inc:54
msgid "Solicitar"
@@ -5301,98 +6154,137 @@ msgstr "Kérés jelszó módosítás"
msgid "Cambiar"
msgstr "Változtatás"
-# "Change password"
-#: ../../../../inc/themes/classic/passreset.inc:52
-msgid "Cambiar Clave"
-msgstr "Változtatsd meg a jelszót"
+# "Warning"
+#: ../../../../inc/themes/classic/preferences-security.inc:4
+#, fuzzy
+msgid "Autenticación"
+msgstr "Figyelem"
+
+# "Account Activation"
+#: ../../../../inc/themes/classic/preferences-security.inc:13
+#, fuzzy
+msgid "Autenticación en 2 pasos"
+msgstr "Fiók Aktiválás"
+
+#: ../../../../inc/themes/classic/preferences-security.inc:17
+#: ../../../../inc/themes/material-blue/preferences-security.inc:17
+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/preferences-security.inc:21
+#: ../../../../inc/themes/material-blue/preferences-security.inc:21
+msgid ""
+"Escanee el código QR proporcionado y a continuación introduzca la clave de 6 "
+"dígitos."
+msgstr ""
+
+#: ../../../../inc/themes/classic/preferences-security.inc:29
+#: ../../../../inc/themes/material-blue/preferences-security.inc:29
+msgid "Activar"
+msgstr ""
+
+# "Error on retrieving accounts history"
+#: ../../../../inc/themes/classic/preferences-security.inc:34
+#: ../../../../inc/themes/material-blue/preferences-security.inc:35
+#, 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/preferences-security.inc:39
+#: ../../../../inc/themes/material-blue/preferences-security.inc:43
+msgid "Código"
+msgstr ""
+
+#: ../../../../inc/themes/classic/preferences-security.inc:44
+#: ../../../../inc/themes/material-blue/preferences-security.inc:48
+msgid ""
+"Una vez activada, sólo es posible acceder si se dispone del dispositivo "
+"generador de códigos asociado."
+msgstr ""
# "Results per page"
-#: ../../../../inc/themes/classic/preferences.inc:73
-#: ../../../../inc/themes/material-blue/preferences.inc:74
+#: ../../../../inc/themes/classic/preferences-site.inc:73
+#: ../../../../inc/themes/material-blue/preferences-site.inc:76
#, fuzzy
msgid "Ordenar resultados por visitas"
msgstr "Keresési találok száma oldalanként"
# Enables to show account's search results like a card format.
-#: ../../../../inc/themes/classic/preferences.inc:77
-#: ../../../../inc/themes/material-blue/preferences.inc:78
+#: ../../../../inc/themes/classic/preferences-site.inc:77
+#: ../../../../inc/themes/material-blue/preferences-site.inc:80
#, fuzzy
msgid ""
"Ordena los resultados de búsqueda por el número de visitas de las cuentas."
msgstr "Enables to show account's search results like a card format."
-#: ../../../../inc/themes/classic/preferences.inc:90
-#: ../../../../inc/themes/material-blue/preferences.inc:91
+#: ../../../../inc/themes/classic/preferences-site.inc:90
+#: ../../../../inc/themes/material-blue/preferences-site.inc:93
msgid "Barra de navegación superior"
msgstr ""
-#: ../../../../inc/themes/classic/preferences.inc:94
-#: ../../../../inc/themes/material-blue/preferences.inc:95
+#: ../../../../inc/themes/classic/preferences-site.inc:94
+#: ../../../../inc/themes/material-blue/preferences-site.inc:97
msgid "Mostrar una barra de navegación superior en las búsquedas."
msgstr ""
-#: ../../../../inc/themes/classic/preferences.inc:107
-#: ../../../../inc/themes/material-blue/preferences.inc:108
+#: ../../../../inc/themes/classic/preferences-site.inc:107
+#: ../../../../inc/themes/material-blue/preferences-site.inc:110
msgid "Mostrar Acciones Ocultas"
msgstr ""
-#: ../../../../inc/themes/classic/preferences.inc:111
-#: ../../../../inc/themes/material-blue/preferences.inc:112
+#: ../../../../inc/themes/classic/preferences-site.inc:111
+#: ../../../../inc/themes/material-blue/preferences-site.inc:114
msgid ""
"Mostrar las acciones ocultas para los elementos de la búsqueda de cuentas."
msgstr ""
# "Profile name"
#: ../../../../inc/themes/classic/profiles.inc:11
-#: ../../../../inc/themes/material-blue/profiles.inc:14
+#: ../../../../inc/themes/material-blue/profiles.inc:16
msgid "Nombre del perfil"
msgstr "Profil név"
# "View account details"
#: ../../../../inc/themes/classic/profiles.inc:19
-#: ../../../../inc/themes/material-blue/profiles.inc:30
+#: ../../../../inc/themes/material-blue/profiles.inc:32
msgid "Ver detalles de cuenta"
msgstr "Fiók adatok"
# "View"
#: ../../../../inc/themes/classic/profiles.inc:19
-#: ../../../../inc/themes/material-blue/profiles.inc:30
+#: ../../../../inc/themes/material-blue/profiles.inc:32
msgid "Ver"
msgstr "Nézet"
# "View account password"
#: ../../../../inc/themes/classic/profiles.inc:23
-#: ../../../../inc/themes/material-blue/profiles.inc:35
+#: ../../../../inc/themes/material-blue/profiles.inc:37
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
+#: ../../../../inc/themes/material-blue/profiles.inc:42
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
+#: ../../../../inc/themes/material-blue/profiles.inc:47
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
+#: ../../../../inc/themes/material-blue/profiles.inc:52
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
+#: ../../../../inc/themes/material-blue/profiles.inc:52
msgid "Editar Clave"
msgstr "Jelszó módosítás"
@@ -5401,11 +6293,6 @@ msgstr "Jelszó módosítás"
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"
@@ -5418,13 +6305,13 @@ msgstr "Törlés"
# "View account files"
#: ../../../../inc/themes/classic/profiles.inc:50
-#: ../../../../inc/themes/material-blue/profiles.inc:60
+#: ../../../../inc/themes/material-blue/profiles.inc:62
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
+#: ../../../../inc/themes/material-blue/profiles.inc:79
msgid "Configuración general"
msgstr "Általános beállítások"
@@ -5440,284 +6327,178 @@ msgstr "archívum készítés"
# "Backup"
#: ../../../../inc/themes/classic/profiles.inc:70
-#: ../../../../inc/themes/material-blue/profiles.inc:82
+#: ../../../../inc/themes/material-blue/profiles.inc:89
msgid "Backup"
msgstr "Archiválás"
# "Confirm account import"
#: ../../../../inc/themes/classic/profiles.inc:74
-#: ../../../../inc/themes/material-blue/profiles.inc:87
+#: ../../../../inc/themes/material-blue/profiles.inc:94
#, 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
+#: ../../../../inc/themes/material-blue/profiles.inc:100
msgid "Gestión"
msgstr "Menedzsment"
# "Users management"
#: ../../../../inc/themes/classic/profiles.inc:85
-#: ../../../../inc/themes/material-blue/profiles.inc:99
+#: ../../../../inc/themes/material-blue/profiles.inc:106
msgid "Gestión de usuarios"
msgstr "Felhasználó menedzsment"
# "Groups management"
#: ../../../../inc/themes/classic/profiles.inc:89
-#: ../../../../inc/themes/material-blue/profiles.inc:104
+#: ../../../../inc/themes/material-blue/profiles.inc:111
msgid "Gestión de grupos"
msgstr "Csoport menedzsment"
# "Profiles management"
#: ../../../../inc/themes/classic/profiles.inc:94
-#: ../../../../inc/themes/material-blue/profiles.inc:109
+#: ../../../../inc/themes/material-blue/profiles.inc:116
msgid "Gestión de perfiles"
msgstr "Profil menedzsment"
# "Profiles"
#: ../../../../inc/themes/classic/profiles.inc:94
-#: ../../../../inc/themes/material-blue/profiles.inc:109
+#: ../../../../inc/themes/material-blue/profiles.inc:116
msgid "Perfiles"
msgstr "Profilok"
# "Categories management"
#: ../../../../inc/themes/classic/profiles.inc:98
-#: ../../../../inc/themes/material-blue/profiles.inc:114
+#: ../../../../inc/themes/material-blue/profiles.inc:121
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
+#: ../../../../inc/themes/material-blue/profiles.inc:126
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
+#: ../../../../inc/themes/material-blue/profiles.inc:131
#, 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
+#: ../../../../inc/themes/material-blue/profiles.inc:136
#, 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
+#: ../../../../inc/themes/material-blue/profiles.inc:136
msgid "Autorizaciones API"
msgstr ""
# "Others"
#: ../../../../inc/themes/classic/profiles.inc:120
-#: ../../../../inc/themes/material-blue/profiles.inc:135
+#: ../../../../inc/themes/material-blue/profiles.inc:147
msgid "Otros"
msgstr "Egyebek"
# "View event log"
#: ../../../../inc/themes/classic/profiles.inc:124
-#: ../../../../inc/themes/material-blue/profiles.inc:141
+#: ../../../../inc/themes/material-blue/profiles.inc:153
msgid "Ver log de eventos"
msgstr "Esemény napló"
# "Event Log"
#: ../../../../inc/themes/classic/profiles.inc:124
-#: ../../../../inc/themes/material-blue/profiles.inc:141
+#: ../../../../inc/themes/material-blue/profiles.inc:153
msgid "Log de Eventos"
msgstr "Esemény napló"
# "Performed by"
#: ../../../../inc/themes/classic/profiles.inc:132
-#: ../../../../inc/themes/material-blue/profiles.inc:148
+#: ../../../../inc/themes/material-blue/profiles.inc:160
#, fuzzy
msgid "Usado por"
msgstr "által"
#: ../../../../inc/themes/classic/profiles.inc:139
-#: ../../../../inc/themes/material-blue/profiles.inc:155
+#: ../../../../inc/themes/material-blue/profiles.inc:167
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:446
-#: ../../../../inc/themes/material-blue/editpass.inc:55
-#: ../../../../inc/themes/material-blue/mgmttabs.inc:13
-#: ../../../../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"
-
-# "Filter ON"
-#: ../../../../inc/themes/classic/search.inc:10
-#: ../../../../inc/themes/classic/search.inc:189
-#: ../../../../inc/themes/material-blue/search.inc:10
-#: ../../../../inc/themes/material-blue/search.inc:199
-msgid "Filtro ON"
-msgstr "Szûrõ bekapcsolva"
-
# "Global ON"
-#: ../../../../inc/themes/classic/search.inc:14
-#: ../../../../inc/themes/classic/search.inc:193
-#: ../../../../inc/themes/material-blue/search.inc:14
-#: ../../../../inc/themes/material-blue/search.inc:203
+#: ../../../../inc/themes/classic/search.inc:170
msgid "Global ON"
msgstr "Global On"
-# "Search in Wiki"
-#: ../../../../inc/themes/classic/search.inc:63
-#: ../../../../inc/themes/material-blue/search.inc:65
-msgid "Buscar en Wiki"
-msgstr "Keresés a Wikiben"
-
-# "Open link to"
-#: ../../../../inc/themes/classic/search.inc:99
-#: ../../../../inc/themes/material-blue/search.inc:101
-msgid "Abrir enlace a"
-msgstr "Nyissa meg a linket, hogy"
-
-# "Attachments"
-#: ../../../../inc/themes/classic/search.inc:117
-#: ../../../../inc/themes/material-blue/search.inc:125
-msgid "Archivos adjuntos"
-msgstr "Csatolmányok"
-
-# "Link to Wiki"
-#: ../../../../inc/themes/classic/search.inc:124
-#: ../../../../inc/themes/material-blue/search.inc:134
-msgid "Enlace a Wiki"
-msgstr "Wiki link"
-
-# "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:7
-#: ../../../../inc/themes/material-blue/searchbox.inc:10
+#: ../../../../inc/themes/material-blue/searchbox.inc:17
msgid "Texto a buscar"
msgstr "Keresendõ szöveg"
# "Incorrect parameters"
#: ../../../../inc/themes/classic/searchbox.inc:12
-#: ../../../../inc/themes/material-blue/searchbox.inc:15
+#: ../../../../inc/themes/material-blue/searchbox.inc:22
#, fuzzy
msgid "Parámetros especiales:"
msgstr "Helytelen paraméter"
#: ../../../../inc/themes/classic/searchbox.inc:15
-#: ../../../../inc/themes/material-blue/searchbox.inc:18
+#: ../../../../inc/themes/material-blue/searchbox.inc:25
msgid "Buscar cuentas a las que 'login' tenga acceso"
msgstr ""
#: ../../../../inc/themes/classic/searchbox.inc:17
-#: ../../../../inc/themes/material-blue/searchbox.inc:19
+#: ../../../../inc/themes/material-blue/searchbox.inc:27
msgid "Buscar cuentas a las que 'group_name' tenga acceso"
msgstr ""
#: ../../../../inc/themes/classic/searchbox.inc:19
-#: ../../../../inc/themes/material-blue/searchbox.inc:20
+#: ../../../../inc/themes/material-blue/searchbox.inc:29
msgid "Buscar cuentas con archivos con el nombre 'file_name'"
msgstr ""
# "Global search"
#: ../../../../inc/themes/classic/searchbox.inc:24
-#: ../../../../inc/themes/material-blue/searchbox.inc:25
-#: ../../../../inc/themes/material-blue/searchbox.inc:28
+#: ../../../../inc/themes/material-blue/searchbox.inc:35
+#: ../../../../inc/themes/material-blue/searchbox.inc:38
msgid "Búsqueda global"
msgstr "Globális keresés"
+# Show Password
+#: ../../../../inc/themes/classic/searchbox.inc:49
+#: ../../../../inc/themes/classic/searchbox.inc:121
+#: ../../../../inc/themes/material-blue/searchbox.inc:62
+#: ../../../../inc/themes/material-blue/searchbox.inc:129
+#, fuzzy
+msgid "Mostrar Todos"
+msgstr "Show Password"
+
+# Show Password
+#: ../../../../inc/themes/classic/searchbox.inc:49
+#: ../../../../inc/themes/classic/searchbox.inc:118
+#: ../../../../inc/themes/material-blue/searchbox.inc:62
+#: ../../../../inc/themes/material-blue/searchbox.inc:126
+#, fuzzy
+msgid "Mostrar Favoritos"
+msgstr "Show Password"
+
# "APP"
-#: ../../../../inc/themes/classic/searchbox.inc:50
-#: ../../../../inc/themes/material-blue/searchbox.inc:54
+#: ../../../../inc/themes/classic/searchbox.inc:52
+#: ../../../../inc/themes/material-blue/searchbox.inc:66
msgid "CPP"
msgstr "APP"
# "Accounts per page"
-#: ../../../../inc/themes/classic/searchbox.inc:51
-#: ../../../../inc/themes/material-blue/searchbox.inc:54
+#: ../../../../inc/themes/classic/searchbox.inc:53
+#: ../../../../inc/themes/material-blue/searchbox.inc:66
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
@@ -5734,7 +6515,7 @@ msgstr "Kijelentkezés"
#: ../../../../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
+#: ../../../../inc/themes/material-blue/users.inc:133
msgid "Opciones"
msgstr "Beállítások"
@@ -5766,7 +6547,7 @@ msgstr "Frissítések keresése"
# DB Update
#: ../../../../inc/themes/classic/upgrade.inc:8
-#: ../../../../inc/themes/material-blue/upgrade.inc:6
+#: ../../../../inc/themes/material-blue/upgrade.inc:10
#, fuzzy
msgid "Actualización de BBDD"
msgstr "Verzió frissítés kész"
@@ -5779,93 +6560,93 @@ msgstr "Archiválás"
# Security Code
#: ../../../../inc/themes/classic/upgrade.inc:11
-#: ../../../../inc/themes/material-blue/upgrade.inc:12
+#: ../../../../inc/themes/material-blue/upgrade.inc:16
#, fuzzy
msgid "Código de Seguridad"
msgstr "Archiválás"
# Start Update
#: ../../../../inc/themes/classic/upgrade.inc:21
-#: ../../../../inc/themes/material-blue/upgrade.inc:23
+#: ../../../../inc/themes/material-blue/upgrade.inc:27
#, fuzzy
msgid "Iniciar Actualización"
msgstr "Start"
# "Full username"
#: ../../../../inc/themes/classic/users.inc:12
-#: ../../../../inc/themes/material-blue/users.inc:15
+#: ../../../../inc/themes/material-blue/users.inc:16
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
+#: ../../../../inc/themes/material-blue/users.inc:32
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
+#: ../../../../inc/themes/material-blue/users.inc:79
msgid "Dirección de correo"
msgstr "Email cím"
# "Application administrator"
#: ../../../../inc/themes/classic/users.inc:103
-#: ../../../../inc/themes/material-blue/users.inc:136
+#: ../../../../inc/themes/material-blue/users.inc:137
msgid "Administrador de la aplicación"
msgstr "Rendszergazda"
# "Application Admin"
#: ../../../../inc/themes/classic/users.inc:103
-#: ../../../../inc/themes/material-blue/users.inc:139
+#: ../../../../inc/themes/material-blue/users.inc:140
msgid "Admin. Aplicación"
msgstr "Admin alkalmazás"
# "Accounts administrator"
#: ../../../../inc/themes/classic/users.inc:107
-#: ../../../../inc/themes/material-blue/users.inc:143
+#: ../../../../inc/themes/material-blue/users.inc:144
msgid "Administrador de cuentas"
msgstr "Fiókok adminja"
# "Accounts Admin"
#: ../../../../inc/themes/classic/users.inc:107
-#: ../../../../inc/themes/material-blue/users.inc:146
+#: ../../../../inc/themes/material-blue/users.inc:147
msgid "Admin. Cuentas"
msgstr "Admin fiók"
# "Force password change"
#: ../../../../inc/themes/classic/users.inc:117
-#: ../../../../inc/themes/material-blue/users.inc:158
+#: ../../../../inc/themes/material-blue/users.inc:159
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
+#: ../../../../inc/themes/classic/users.inc:130
+#: ../../../../inc/themes/material-blue/users.inc:173
msgid "Entradas"
msgstr "Belépések"
# "Last Access"
-#: ../../../../inc/themes/classic/users.inc:159
-#: ../../../../inc/themes/material-blue/users.inc:203
+#: ../../../../inc/themes/classic/users.inc:135
+#: ../../../../inc/themes/material-blue/users.inc:178
msgid "Último Acceso"
msgstr "Utolsó belépés"
# "Master Password Date"
-#: ../../../../inc/themes/classic/users.inc:169
-#: ../../../../inc/themes/material-blue/users.inc:213
+#: ../../../../inc/themes/classic/users.inc:145
+#: ../../../../inc/themes/material-blue/users.inc:188
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
+#: ../../../../inc/themes/material-blue/wiki.inc:15
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
+#: ../../../../inc/themes/material-blue/wiki.inc:19
#, fuzzy
msgid ""
"Habilita la opción de añadir un enlace a Wiki externa para los resultados de "
@@ -5874,21 +6655,21 @@ 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
+#: ../../../../inc/themes/material-blue/wiki.inc:34
+#: ../../../../inc/themes/material-blue/wiki.inc:60
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
+#: ../../../../inc/themes/material-blue/wiki.inc:38
#, 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
+#: ../../../../inc/themes/material-blue/wiki.inc:42
#, fuzzy
msgid "Como parámetro se utiliza el nombre del cliente."
msgstr "Az ügyfelet paraméterként használja"
@@ -5896,29 +6677,33 @@ 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
+#: ../../../../inc/themes/classic/wiki.inc:134
+#: ../../../../inc/themes/classic/wiki.inc:157
+#: ../../../../inc/themes/material-blue/wiki.inc:46
+#: ../../../../inc/themes/material-blue/wiki.inc:78
+#: ../../../../inc/themes/material-blue/wiki.inc:153
+#: ../../../../inc/themes/material-blue/wiki.inc:179
#, 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
+#: ../../../../inc/themes/material-blue/wiki.inc:66
+#: ../../../../inc/themes/material-blue/wiki.inc:91
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
+#: ../../../../inc/themes/material-blue/wiki.inc:70
#, 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
+#: ../../../../inc/themes/material-blue/wiki.inc:74
#, fuzzy
msgid ""
"El nombre de la cuenta se utiliza como parámetro de la variable de búsqueda "
@@ -5927,108 +6712,212 @@ 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
+#: ../../../../inc/themes/material-blue/wiki.inc:97
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
+#: ../../../../inc/themes/material-blue/wiki.inc:101
#, 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"
+#: ../../../../inc/themes/classic/wiki.inc:100
+#: ../../../../inc/themes/material-blue/wiki.inc:116
+msgid "DokuWiki API"
+msgstr ""
+
+# "Enable Wiki links"
+#: ../../../../inc/themes/classic/wiki.inc:106
+#: ../../../../inc/themes/material-blue/wiki.inc:122
+#, fuzzy
+msgid "Habilitar API de DokuWiki"
+msgstr "Wiki linkek engedélyezése"
+
+#: ../../../../inc/themes/classic/wiki.inc:110
+#: ../../../../inc/themes/material-blue/wiki.inc:126
+msgid ""
+"Habilita la conexión a la API XML-RPC de DokuWiki para los enlaces Wiki."
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:113
+#: ../../../../inc/themes/material-blue/wiki.inc:129
+msgid ""
+"Para que esta característica funcione, es necesario habilitar los enlaces "
+"Wiki para el filtrado de cuentas."
+msgstr ""
+
+# "URL / IP"
+#: ../../../../inc/themes/classic/wiki.inc:126
+#: ../../../../inc/themes/material-blue/wiki.inc:145
+#: ../../../../inc/themes/material-blue/wiki.inc:165
+#, fuzzy
+msgid "URL API"
+msgstr "URL / IP"
+
+# "Wiki page URL"
+#: ../../../../inc/themes/classic/wiki.inc:130
+#: ../../../../inc/themes/material-blue/wiki.inc:149
+#, fuzzy
+msgid "URL de la API de DokuWiki."
+msgstr "Wiki oldal URL"
+
+#: ../../../../inc/themes/classic/wiki.inc:149
+#: ../../../../inc/themes/material-blue/wiki.inc:171
+#: ../../../../inc/themes/material-blue/wiki.inc:191
+msgid "URL Base"
+msgstr ""
+
+# "Wiki search URL"
+#: ../../../../inc/themes/classic/wiki.inc:153
+#: ../../../../inc/themes/material-blue/wiki.inc:175
+#, fuzzy
+msgid "URL base de DokuWiki."
+msgstr "Wiki keresés URL"
+
+# "User to connect LDAP server"
+#: ../../../../inc/themes/classic/wiki.inc:176
+#: ../../../../inc/themes/material-blue/wiki.inc:201
+#, fuzzy
+msgid "Usuario para conectar a la API de DokuWiki."
+msgstr "Felhasználó az LDAP szerverhez való kapcsolódáshoz"
+
+#: ../../../../inc/themes/classic/wiki.inc:199
+#: ../../../../inc/themes/material-blue/wiki.inc:229
+#: ../../../../inc/themes/material-blue/wiki.inc:242
+msgid "Namespace"
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:203
+#: ../../../../inc/themes/material-blue/wiki.inc:233
+msgid "Namespace utilizado para buscar las páginas."
+msgstr ""
+
+# "Check LDAP connection"
+#: ../../../../inc/themes/classic/wiki.inc:217
+#: ../../../../inc/themes/material-blue/wiki.inc:250
+#, fuzzy
+msgid "Comprobar conexión con DokuWiki"
+msgstr "LDAP kapcsolat ellenõrzése"
+
# "Add filter"
-#: ../../../../inc/themes/classic/wiki.inc:121
-#: ../../../../inc/themes/material-blue/wiki.inc:135
+#: ../../../../inc/themes/classic/wiki.inc:246
+#: ../../../../inc/themes/material-blue/wiki.inc:280
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
+#: ../../../../inc/themes/classic/wiki.inc:247
+#: ../../../../inc/themes/material-blue/wiki.inc:281
msgid "Eliminar filtro"
msgstr "Szûrõ törlése"
+# "Wiki"
+#: ../../../../inc/themes/classic/wikipage.inc:2
+#: ../../../../inc/themes/material-blue/wikipage.inc:2
+#, fuzzy
+msgid "Ver Wiki"
+msgstr "Wiki"
+
+# "Search base"
+#: ../../../../inc/themes/classic/wikipage.inc:10
+#: ../../../../inc/themes/material-blue/wikipage.inc:10
+#, fuzzy, php-format
+msgid "Resultados de búsqueda de '%s'"
+msgstr "Keresés"
+
+# "First page"
+#: ../../../../inc/themes/classic/wikipage.inc:13
+#: ../../../../inc/themes/classic/wikipage.inc:23
+#: ../../../../inc/themes/material-blue/wikipage.inc:13
+#: ../../../../inc/themes/material-blue/wikipage.inc:23
+#, fuzzy
+msgid "Página"
+msgstr "Elsõ oldal"
+
+#: ../../../../inc/themes/classic/wikipage.inc:25
+#: ../../../../inc/themes/material-blue/wikipage.inc:25
+msgid "Autor"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/account-actions.inc:19
+msgid "Crear Enlace Público"
+msgstr ""
+
+# "Back"
+#: ../../../../inc/themes/material-blue/account-actions.inc:62
+msgid "Atrás"
+msgstr "Vissza"
+
+#: ../../../../inc/themes/material-blue/account-details.inc:69
+msgid "Enlace Público"
+msgstr ""
+
# "History"
-#: ../../../../inc/themes/material-blue/account.inc:4
+#: ../../../../inc/themes/material-blue/account.inc:5
#, fuzzy
msgid "Histórico"
msgstr "Fiók elõzmények importálása"
-#: ../../../../inc/themes/material-blue/account.inc:34
-msgid "> Usar texto y crear nuevo"
-msgstr ""
-
-#: ../../../../inc/themes/material-blue/account.inc:43
+#: ../../../../inc/themes/material-blue/account.inc:56
msgid "Seleccionar o escribir para crear uno nuevo"
msgstr ""
# "Password (repeat)"
-#: ../../../../inc/themes/material-blue/account.inc:114
+#: ../../../../inc/themes/material-blue/account.inc:131
#, 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:115
-#: ../../../../inc/themes/material-blue/import.inc:214
-#, fuzzy
-msgid "Realizar"
-msgstr "Archívum készítés"
-
-#: ../../../../inc/themes/material-blue/config.inc:67
-msgid "Forzar HTTPS"
-msgstr ""
-
-#: ../../../../inc/themes/material-blue/config.inc:71
-msgid "Fuerza para que todas las conexiones sean a través de HTTPS."
-msgstr ""
-
# "Results per page"
-#: ../../../../inc/themes/material-blue/config.inc:232
-#: ../../../../inc/themes/material-blue/preferences.inc:68
+#: ../../../../inc/themes/material-blue/config-accounts.inc:60
+#: ../../../../inc/themes/material-blue/preferences-site.inc:70
#, fuzzy
msgid "Número de resultados por página"
msgstr "Keresési találok száma oldalanként"
+# "LDAP server hostname or IP address"
+#: ../../../../inc/themes/material-blue/config-events.inc:60
+#, fuzzy
+msgid "Nombre o dirección IP"
+msgstr "LDAP szerver hosztnév vagy IP cím"
+
# "Maximum file size"
-#: ../../../../inc/themes/material-blue/config.inc:327
+#: ../../../../inc/themes/material-blue/config-files.inc:73
#, fuzzy
msgid "Tamaño máximo de archivo en bytes"
msgstr "Maximális fájl méret"
-#: ../../../../inc/themes/material-blue/config.inc:334
-msgid "Proxy"
-msgstr ""
-
-#: ../../../../inc/themes/material-blue/config.inc:340
-msgid "Usar Proxy"
-msgstr ""
-
# "Server"
-#: ../../../../inc/themes/material-blue/config.inc:361
+#: ../../../../inc/themes/material-blue/config-proxy.inc:29
#, fuzzy
msgid "Servidor proxy"
msgstr "Szerver"
-#: ../../../../inc/themes/material-blue/config.inc:375
+#: ../../../../inc/themes/material-blue/config-proxy.inc:43
msgid "Puerto del servidor proxy"
msgstr ""
# "Access user"
-#: ../../../../inc/themes/material-blue/config.inc:389
+#: ../../../../inc/themes/material-blue/config-proxy.inc:57
#, fuzzy
msgid "Usuario del servidor proxy"
msgstr "Felhasználó elérése"
-#: ../../../../inc/themes/material-blue/config.inc:403
+#: ../../../../inc/themes/material-blue/config-proxy.inc:71
msgid "Clave del servidor proxy"
msgstr ""
+#: ../../../../inc/themes/material-blue/config-site.inc:69
+msgid "Forzar HTTPS"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/config-site.inc:74
+msgid "Fuerza para que todas las conexiones sean a través de HTTPS."
+msgstr ""
+
# "Group name"
#: ../../../../inc/themes/material-blue/customfields.inc:14
#, fuzzy
@@ -6046,6 +6935,12 @@ msgstr "Segítség :: GYIK :: Változások Listája"
msgid "Preferencias de usuario"
msgstr "Dupla felhasználó bejelentkezés"
+# "Edit Configuration"
+#: ../../../../inc/themes/material-blue/info.inc:52
+#, fuzzy
+msgid "Copia de Configuración"
+msgstr "Konfiguráció szerkesztése"
+
# sysPass administrator's login
#: ../../../../inc/themes/material-blue/install.inc:33
#, fuzzy
@@ -6089,60 +6984,71 @@ 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
+#: ../../../../inc/themes/material-blue/ldap.inc:98
#, fuzzy
msgid "Clave del usuario de conexión a LDAP."
msgstr "LDAP bind felhasználói jelszó"
-#: ../../../../inc/themes/material-blue/mail.inc:118
+#: ../../../../inc/themes/material-blue/mail.inc:120
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
+#: ../../../../inc/themes/material-blue/profiles.inc:27
#, fuzzy
msgid "Crear nueva cuenta"
msgstr "Új fiók"
# "Creator"
-#: ../../../../inc/themes/material-blue/profiles.inc:25
+#: ../../../../inc/themes/material-blue/profiles.inc:27
#, fuzzy
msgid "Crear"
msgstr "Hiba a profil létrehozása közben"
# "Delete Account"
-#: ../../../../inc/themes/material-blue/profiles.inc:55
+#: ../../../../inc/themes/material-blue/profiles.inc:57
#, fuzzy
msgid "Eliminar cuenta"
msgstr "Fiók törlése"
-# "Delete Group"
-#: ../../../../inc/themes/material-blue/profiles.inc:55
+# "Edit account password"
+#: ../../../../inc/themes/material-blue/profiles.inc:67
#, fuzzy
-msgid "Eliminar"
-msgstr "Profil törlése"
+msgid "Publicar enlace a cuenta"
+msgstr "fiók jelszavának módosításe"
+
+# "Open link to"
+#: ../../../../inc/themes/material-blue/profiles.inc:67
+#, fuzzy
+msgid "Publicar Enlace"
+msgstr "Nyissa meg a linket, hogy"
# "Error on encryption module"
-#: ../../../../inc/themes/material-blue/profiles.inc:77
+#: ../../../../inc/themes/material-blue/profiles.inc:84
#, fuzzy
msgid "Opciones de encriptación"
msgstr "Beállítások"
# "Make backup"
-#: ../../../../inc/themes/material-blue/profiles.inc:82
+#: ../../../../inc/themes/material-blue/profiles.inc:89
#, fuzzy
msgid "Realizar copia de seguridad y exportar"
msgstr "archívum készítés"
-# "Enable Authentication"
-#: ../../../../inc/themes/material-blue/security.inc:4
+# "Customers Management"
+#: ../../../../inc/themes/material-blue/profiles.inc:141
#, fuzzy
-msgid "Autentificación"
-msgstr "Engedélyezése Hitelesítés"
+msgid "Gestión de enlaces"
+msgstr "Ügyfél Menedzsment"
-# "Error on updating profile"
+# "User"
+#: ../../../../inc/themes/material-blue/publiclinks.inc:30
#, fuzzy
-#~ msgid "Error al actualizar datos encriptados"
-#~ msgstr "Hiba a jelszó frissítése közben"
+msgid "Uso"
+msgstr "Felhasználó"
+
+#: ../../../../inc/themes/material-blue/publiclinks.inc:38
+msgid "Hash"
+msgstr ""
diff --git a/inc/locales/it_IT/LC_MESSAGES/messages.mo b/inc/locales/it_IT/LC_MESSAGES/messages.mo
index 3ee70da0..a87f612c 100644
Binary files a/inc/locales/it_IT/LC_MESSAGES/messages.mo 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
index 874a05d1..b4d2a770 100644
--- a/inc/locales/it_IT/LC_MESSAGES/messages.po
+++ b/inc/locales/it_IT/LC_MESSAGES/messages.po
@@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: sysPass\n"
-"POT-Creation-Date: 2015-10-25 23:36+0100\n"
-"PO-Revision-Date: 2015-10-25 23:36+0100\n"
+"POT-Creation-Date: 2016-01-10 19:27+0100\n"
+"PO-Revision-Date: 2016-01-10 19:27+0100\n"
"Last-Translator: nuxsmin \n"
"Language-Team: nuxsmin@syspass.org \n"
"Language: it_IT\n"
@@ -15,88 +15,113 @@ msgstr ""
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-SearchPath-0: ../../../..\n"
-#: ../../../../ajax/ajax_2fa.php:37 ../../../../ajax/ajax_accountSave.php:42
-#: ../../../../ajax/ajax_appMgmtSave.php:43
-#: ../../../../ajax/ajax_backup.php:41 ../../../../ajax/ajax_checkLdap.php:42
-#: ../../../../ajax/ajax_configSave.php:44 ../../../../ajax/ajax_files.php:42
-#: ../../../../ajax/ajax_getFiles.php:47 ../../../../ajax/ajax_import.php:50
-#: ../../../../ajax/ajax_migrate.php:46 ../../../../ajax/ajax_passReset.php:40
-#: ../../../../ajax/ajax_search.php:42
-#: ../../../../ajax/ajax_sendRequest.php:42
-#: ../../../../ajax/ajax_userPrefsSave.php:43
+#: ../../../../ajax/ajax_2fa.php:41 ../../../../ajax/ajax_accFavorites.php:42
+#: ../../../../ajax/ajax_accountSave.php:51
+#: ../../../../ajax/ajax_appMgmtSave.php:56
+#: ../../../../ajax/ajax_appMgmtSearch.php:48
+#: ../../../../ajax/ajax_backup.php:47
+#: ../../../../ajax/ajax_checkConnection.php:45
+#: ../../../../ajax/ajax_configSave.php:58 ../../../../ajax/ajax_files.php:52
+#: ../../../../ajax/ajax_files.php:67 ../../../../ajax/ajax_getFiles.php:51
+#: ../../../../ajax/ajax_import.php:54 ../../../../ajax/ajax_migrate.php:50
+#: ../../../../ajax/ajax_passReset.php:46 ../../../../ajax/ajax_search.php:46
+#: ../../../../ajax/ajax_sendRequest.php:52
+#: ../../../../ajax/ajax_userPrefsSave.php:52
msgid "CONSULTA INVÁLIDA"
msgstr ""
-#: ../../../../ajax/ajax_2fa.php:48
+#: ../../../../ajax/ajax_2fa.php:57
msgid "Código correcto"
msgstr ""
-#: ../../../../ajax/ajax_2fa.php:51 ../../../../ajax/ajax_userPrefsSave.php:99
+#: ../../../../ajax/ajax_2fa.php:60
+#: ../../../../ajax/ajax_userPrefsSave.php:109
msgid "Código incorrecto"
msgstr ""
-#: ../../../../ajax/ajax_accountSave.php:36
-#: ../../../../ajax/ajax_appMgmtSave.php:37
-#: ../../../../ajax/ajax_backup.php:35 ../../../../ajax/ajax_checkLdap.php:36
-#: ../../../../ajax/ajax_configSave.php:38 ../../../../ajax/ajax_import.php:36
-#: ../../../../ajax/ajax_migrate.php:36
-#: ../../../../ajax/ajax_sendRequest.php:36
-#: ../../../../ajax/ajax_userPrefsSave.php:37
-#: ../../../../ajax/ajax_viewpass.php:37
-msgid "La sesión no se ha iniciado o ha caducado"
-msgstr ""
-
-#: ../../../../ajax/ajax_accountSave.php:78
-#: ../../../../ajax/ajax_accountSave.php:93
-msgid "Es necesario un nombre de cuenta"
-msgstr ""
-
-#: ../../../../ajax/ajax_accountSave.php:80
-#: ../../../../ajax/ajax_accountSave.php:91
-#: ../../../../ajax/ajax_appMgmtSave.php:329
-msgid "Es necesario un nombre de cliente"
-msgstr ""
-
-#: ../../../../ajax/ajax_accountSave.php:82
-#: ../../../../ajax/ajax_accountSave.php:95
-msgid "Es necesario un usuario"
-msgstr ""
-
-#: ../../../../ajax/ajax_accountSave.php:84
-#: ../../../../ajax/ajax_accountSave.php:106
-msgid "Es necesaria una clave"
-msgstr ""
-
-#: ../../../../ajax/ajax_accountSave.php:86
-#: ../../../../ajax/ajax_accountSave.php:97
-msgid "Es necesario una categoría"
-msgstr ""
-
-#: ../../../../ajax/ajax_accountSave.php:101
-#: ../../../../ajax/ajax_accountSave.php:110
-msgid "Id inválido"
-msgstr ""
-
-#: ../../../../ajax/ajax_accountSave.php:113
-#: ../../../../ajax/ajax_accountSave.php:263
-#: ../../../../ajax/ajax_appMgmtSave.php:535
-#: ../../../../ajax/ajax_configSave.php:334
-#: ../../../../ajax/ajax_userPrefsSave.php:113 ../../../../api.php:53
+#: ../../../../ajax/ajax_accFavorites.php:50
+#: ../../../../ajax/ajax_accountSave.php:122
+#: ../../../../ajax/ajax_accountSave.php:260
+#: ../../../../ajax/ajax_appMgmtSave.php:606
+#: ../../../../ajax/ajax_appMgmtSearch.php:101
+#: ../../../../ajax/ajax_configSave.php:429
+#: ../../../../ajax/ajax_files.php:208
+#: ../../../../ajax/ajax_userPrefsSave.php:123
msgid "Acción Inválida"
msgstr ""
-#: ../../../../ajax/ajax_accountSave.php:121
-#: ../../../../ajax/ajax_appMgmtSave.php:112
-#: ../../../../ajax/ajax_appMgmtSave.php:149
-#: ../../../../ajax/ajax_backup.php:68
+#: ../../../../ajax/ajax_accFavorites.php:55
+msgid "Favorito añadido"
+msgstr ""
+
+#: ../../../../ajax/ajax_accFavorites.php:58
+msgid "Error al añadir favorito"
+msgstr ""
+
+#: ../../../../ajax/ajax_accFavorites.php:61
+msgid "Favorito eliminado"
+msgstr ""
+
+#: ../../../../ajax/ajax_accFavorites.php:64
+msgid "Error al eliminar favorito"
+msgstr ""
+
+#: ../../../../ajax/ajax_accountSave.php:45
+#: ../../../../ajax/ajax_appMgmtSave.php:50
+#: ../../../../ajax/ajax_appMgmtSearch.php:42
+#: ../../../../ajax/ajax_backup.php:41
+#: ../../../../ajax/ajax_checkConnection.php:39
+#: ../../../../ajax/ajax_configSave.php:52 ../../../../ajax/ajax_import.php:40
+#: ../../../../ajax/ajax_migrate.php:40
+#: ../../../../ajax/ajax_sendRequest.php:46
+#: ../../../../ajax/ajax_userPrefsSave.php:46
+#: ../../../../ajax/ajax_viewpass.php:44 ../../../../ajax/ajax_wiki.php:37
+msgid "La sesión no se ha iniciado o ha caducado"
+msgstr ""
+
+#: ../../../../ajax/ajax_accountSave.php:87
+#: ../../../../ajax/ajax_accountSave.php:102
+msgid "Es necesario un nombre de cuenta"
+msgstr ""
+
+#: ../../../../ajax/ajax_accountSave.php:89
+#: ../../../../ajax/ajax_accountSave.php:100
+#: ../../../../ajax/ajax_appMgmtSave.php:343
+msgid "Es necesario un nombre de cliente"
+msgstr ""
+
+#: ../../../../ajax/ajax_accountSave.php:91
+#: ../../../../ajax/ajax_accountSave.php:104
+msgid "Es necesario un usuario"
+msgstr ""
+
+#: ../../../../ajax/ajax_accountSave.php:93
+#: ../../../../ajax/ajax_accountSave.php:115
+msgid "Es necesaria una clave"
+msgstr ""
+
+#: ../../../../ajax/ajax_accountSave.php:95
+#: ../../../../ajax/ajax_accountSave.php:106
+msgid "Es necesario una categoría"
+msgstr ""
+
+#: ../../../../ajax/ajax_accountSave.php:110
+#: ../../../../ajax/ajax_accountSave.php:119
+msgid "Id inválido"
+msgstr ""
+
+#: ../../../../ajax/ajax_accountSave.php:130
+#: ../../../../ajax/ajax_appMgmtSave.php:124
+#: ../../../../ajax/ajax_appMgmtSave.php:161
+#: ../../../../ajax/ajax_backup.php:70
msgid "Las claves no coinciden"
msgstr ""
-#: ../../../../ajax/ajax_accountSave.php:173
+#: ../../../../ajax/ajax_accountSave.php:184
msgid "Cuenta creada"
msgstr ""
-#: ../../../../ajax/ajax_accountSave.php:176
+#: ../../../../ajax/ajax_accountSave.php:187
msgid "Error al crear la cuenta"
msgstr ""
@@ -104,608 +129,701 @@ msgstr ""
msgid "Sin cambios"
msgstr ""
-#: ../../../../ajax/ajax_accountSave.php:223
+#: ../../../../ajax/ajax_accountSave.php:220
msgid "Cuenta actualizada"
msgstr ""
-#: ../../../../ajax/ajax_accountSave.php:226
+#: ../../../../ajax/ajax_accountSave.php:223
msgid "Error al modificar la cuenta"
msgstr ""
-#: ../../../../ajax/ajax_accountSave.php:233
+#: ../../../../ajax/ajax_accountSave.php:232
+#: ../../../../ajax/ajax_appMgmtSave.php:601
msgid "Cuenta eliminada"
msgstr ""
-#: ../../../../ajax/ajax_accountSave.php:236
+#: ../../../../ajax/ajax_accountSave.php:235
+#: ../../../../ajax/ajax_appMgmtSave.php:604
msgid "Error al eliminar la cuenta"
msgstr ""
-#: ../../../../ajax/ajax_accountSave.php:246
-#: ../../../../ajax/ajax_appMgmtSave.php:153
-#: ../../../../ajax/ajax_passReset.php:75
+#: ../../../../ajax/ajax_accountSave.php:243
+#: ../../../../ajax/ajax_appMgmtSave.php:165
+#: ../../../../ajax/ajax_passReset.php:85
+#: ../../../../ajax/ajax_passReset.php:89
msgid "Clave actualizada"
msgstr ""
-#: ../../../../ajax/ajax_accountSave.php:249
+#: ../../../../ajax/ajax_accountSave.php:246
msgid "Error al actualizar la clave"
msgstr ""
-#: ../../../../ajax/ajax_accountSave.php:256
+#: ../../../../ajax/ajax_accountSave.php:253
msgid "Cuenta restaurada"
msgstr ""
-#: ../../../../ajax/ajax_accountSave.php:259
+#: ../../../../ajax/ajax_accountSave.php:256
msgid "Error al restaurar cuenta"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtData.php:54
+#: ../../../../ajax/ajax_appMgmtData.php:60
msgid "Ver Usuario"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtData.php:61
-#: ../../../../web/UsersMgmtC.class.php:137
+#: ../../../../ajax/ajax_appMgmtData.php:67
+#: ../../../../inc/SP/Controller/Grids.class.php:469
+#: ../../../../inc/SP/Controller/Grids.class.php:470
msgid "Editar Usuario"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtData.php:67
-#: ../../../../inc/UserBase.class.php:383
-#: ../../../../web/UsersMgmtC.class.php:122
+#: ../../../../ajax/ajax_appMgmtData.php:73
+#: ../../../../inc/SP/Controller/Grids.class.php:446
+#: ../../../../inc/SP/Controller/Grids.class.php:447
+#: ../../../../inc/SP/Mgmt/User/UserBase.class.php:393
msgid "Nuevo Usuario"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtData.php:73
+#: ../../../../ajax/ajax_appMgmtData.php:79
msgid "Ver Grupo"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtData.php:80
-#: ../../../../web/UsersMgmtC.class.php:203
+#: ../../../../ajax/ajax_appMgmtData.php:86
+#: ../../../../inc/SP/Controller/Grids.class.php:565
+#: ../../../../inc/SP/Controller/Grids.class.php:566
msgid "Editar Grupo"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtData.php:86
-#: ../../../../inc/Groups.class.php:152 ../../../../inc/Groups.class.php:253
-#: ../../../../web/UsersMgmtC.class.php:195
+#: ../../../../ajax/ajax_appMgmtData.php:92
+#: ../../../../inc/SP/Controller/Grids.class.php:553
+#: ../../../../inc/SP/Controller/Grids.class.php:554
+#: ../../../../inc/SP/Mgmt/User/Groups.class.php:165
+#: ../../../../inc/SP/Mgmt/User/Groups.class.php:273
msgid "Nuevo Grupo"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtData.php:92
+#: ../../../../ajax/ajax_appMgmtData.php:98
msgid "Ver Perfil"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtData.php:99
-#: ../../../../web/UsersMgmtC.class.php:268
+#: ../../../../ajax/ajax_appMgmtData.php:105
+#: ../../../../inc/SP/Controller/Grids.class.php:649
+#: ../../../../inc/SP/Controller/Grids.class.php:650
msgid "Editar Perfil"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtData.php:105
-#: ../../../../inc/ProfileBase.class.php:512
-#: ../../../../web/UsersMgmtC.class.php:253
+#: ../../../../ajax/ajax_appMgmtData.php:111
+#: ../../../../inc/SP/Controller/Grids.class.php:626
+#: ../../../../inc/SP/Controller/Grids.class.php:627
+#: ../../../../inc/SP/Mgmt/User/ProfileBase.class.php:518
msgid "Nuevo Perfil"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtData.php:111
+#: ../../../../ajax/ajax_appMgmtData.php:117
msgid "Ver Cliente"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtData.php:118
-#: ../../../../web/AccountsMgmtC.class.php:153
+#: ../../../../ajax/ajax_appMgmtData.php:124
+#: ../../../../inc/SP/Controller/Grids.class.php:198
+#: ../../../../inc/SP/Controller/Grids.class.php:199
msgid "Editar Cliente"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtData.php:124
-#: ../../../../inc/Customer.class.php:65
-#: ../../../../web/AccountsMgmtC.class.php:146
+#: ../../../../ajax/ajax_appMgmtData.php:130
+#: ../../../../inc/SP/Controller/Grids.class.php:186
+#: ../../../../inc/SP/Controller/Grids.class.php:187
+#: ../../../../inc/SP/Mgmt/Customer.class.php:342
msgid "Nuevo Cliente"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtData.php:130
+#: ../../../../ajax/ajax_appMgmtData.php:136
msgid "Ver Categoría"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtData.php:137
-#: ../../../../web/AccountsMgmtC.class.php:95
+#: ../../../../ajax/ajax_appMgmtData.php:143
+#: ../../../../inc/SP/Controller/Grids.class.php:104
+#: ../../../../inc/SP/Controller/Grids.class.php:105
msgid "Editar Categoría"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtData.php:143
-#: ../../../../inc/Category.class.php:83
-#: ../../../../web/AccountsMgmtC.class.php:87
-#: ../../../../inc/themes/classic/account.inc:53
-#: ../../../../inc/themes/material-blue/account.inc:62
+#: ../../../../ajax/ajax_appMgmtData.php:149
+#: ../../../../inc/SP/Controller/Grids.class.php:92
+#: ../../../../inc/SP/Controller/Grids.class.php:93
+#: ../../../../inc/SP/Mgmt/Category.class.php:348
+#: ../../../../inc/themes/classic/account.inc:59
+#: ../../../../inc/themes/material-blue/account.inc:75
msgid "Nueva Categoría"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtData.php:149
+#: ../../../../ajax/ajax_appMgmtData.php:155
msgid "Ver Autorización"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtData.php:156
-#: ../../../../inc/ApiTokens.class.php:189
-#: ../../../../web/UsersMgmtC.class.php:400
+#: ../../../../ajax/ajax_appMgmtData.php:162
+#: ../../../../inc/SP/Api/ApiTokens.class.php:110
+#: ../../../../inc/SP/Controller/Grids.class.php:709
+#: ../../../../inc/SP/Controller/Grids.class.php:710
msgid "Nueva Autorización"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtData.php:162
-#: ../../../../web/UsersMgmtC.class.php:415
+#: ../../../../ajax/ajax_appMgmtData.php:168
+#: ../../../../inc/SP/Controller/Grids.class.php:732
+#: ../../../../inc/SP/Controller/Grids.class.php:733
msgid "Editar Autorización"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtData.php:168
-#: ../../../../web/AccountsMgmtC.class.php:274
+#: ../../../../ajax/ajax_appMgmtData.php:174
+#: ../../../../inc/SP/Controller/Grids.class.php:259
+#: ../../../../inc/SP/Controller/Grids.class.php:260
msgid "Nuevo Campo"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtData.php:174
-#: ../../../../web/AccountsMgmtC.class.php:281
+#: ../../../../ajax/ajax_appMgmtData.php:180
+#: ../../../../inc/SP/Controller/Grids.class.php:271
+#: ../../../../inc/SP/Controller/Grids.class.php:272
msgid "Editar Campo"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:86
+#: ../../../../ajax/ajax_appMgmtData.php:186
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:196
+msgid "Ver Enlace Público"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:98
msgid "Es necesario un nombre de usuario"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:88
+#: ../../../../ajax/ajax_appMgmtSave.php:100
msgid "Es necesario un login"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:90
+#: ../../../../ajax/ajax_appMgmtSave.php:102
msgid "Es necesario un perfil"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:92
+#: ../../../../ajax/ajax_appMgmtSave.php:104
msgid "Es necesario un grupo"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:94
+#: ../../../../ajax/ajax_appMgmtSave.php:106
msgid "Es necesario un email"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:96
-#: ../../../../ajax/ajax_appMgmtSave.php:145
-#: ../../../../ajax/ajax_appMgmtSave.php:160
-#: ../../../../ajax/ajax_backup.php:54
-#: ../../../../ajax/ajax_configSave.php:307
-#: ../../../../ajax/ajax_import.php:40 ../../../../ajax/ajax_migrate.php:40
-#: ../../../../ajax/ajax_userPrefsSave.php:88
+#: ../../../../ajax/ajax_appMgmtSave.php:108
+#: ../../../../ajax/ajax_appMgmtSave.php:157
+#: ../../../../ajax/ajax_appMgmtSave.php:172
+#: ../../../../ajax/ajax_backup.php:60
+#: ../../../../ajax/ajax_configSave.php:379
+#: ../../../../ajax/ajax_import.php:44 ../../../../ajax/ajax_migrate.php:44
+#: ../../../../ajax/ajax_userPrefsSave.php:98
msgid "Ey, esto es una DEMO!!"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:101
+#: ../../../../ajax/ajax_appMgmtSave.php:113
msgid "Login de usuario duplicado"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:104
+#: ../../../../ajax/ajax_appMgmtSave.php:116
msgid "Email de usuario duplicado"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:110
-#: ../../../../ajax/ajax_appMgmtSave.php:147
+#: ../../../../ajax/ajax_appMgmtSave.php:122
+#: ../../../../ajax/ajax_appMgmtSave.php:159
msgid "La clave no puede estar en blanco"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:123
+#: ../../../../ajax/ajax_appMgmtSave.php:135
msgid "Usuario creado"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:126
+#: ../../../../ajax/ajax_appMgmtSave.php:138
msgid "Error al crear el usuario"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:136
-#: ../../../../inc/UserMigrate.class.php:89
+#: ../../../../ajax/ajax_appMgmtSave.php:148
+#: ../../../../inc/SP/Mgmt/User/UserMigrate.class.php:98
msgid "Usuario actualizado"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:139
+#: ../../../../ajax/ajax_appMgmtSave.php:151
msgid "Error al actualizar el usuario"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:156
-#: ../../../../ajax/ajax_passReset.php:79
+#: ../../../../ajax/ajax_appMgmtSave.php:168
+#: ../../../../ajax/ajax_passReset.php:93
+#: ../../../../ajax/ajax_passReset.php:96
msgid "Error al modificar la clave"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:162
+#: ../../../../ajax/ajax_appMgmtSave.php:174
msgid "No es posible eliminar, usuario en uso"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:166
+#: ../../../../ajax/ajax_appMgmtSave.php:178
msgid "Usuario eliminado"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:169
+#: ../../../../ajax/ajax_appMgmtSave.php:181
msgid "Error al eliminar el usuario"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:184
+#: ../../../../ajax/ajax_appMgmtSave.php:196
msgid "Es necesario un nombre de grupo"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:192
+#: ../../../../ajax/ajax_appMgmtSave.php:204
msgid "Nombre de grupo duplicado"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:204
+#: ../../../../ajax/ajax_appMgmtSave.php:216
msgid "Grupo creado"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:206
+#: ../../../../ajax/ajax_appMgmtSave.php:218
msgid "Error al crear el grupo"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:217
+#: ../../../../ajax/ajax_appMgmtSave.php:229
msgid "Grupo actualizado"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:220
+#: ../../../../ajax/ajax_appMgmtSave.php:232
msgid "Error al actualizar el grupo"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:229
-#: ../../../../ajax/ajax_appMgmtSave.php:306
-#: ../../../../inc/CustomFieldsBase.class.php:109
-#: ../../../../inc/themes/classic/account.inc:112
+#: ../../../../ajax/ajax_appMgmtSave.php:241
+#: ../../../../ajax/ajax_appMgmtSave.php:320
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:111
+#: ../../../../inc/themes/classic/account.inc:121
#: ../../../../inc/themes/classic/groups.inc:24
#: ../../../../inc/themes/classic/profiles.inc:85
-#: ../../../../inc/themes/material-blue/account.inc:138
-#: ../../../../inc/themes/material-blue/groups.inc:32
-#: ../../../../inc/themes/material-blue/profiles.inc:99
+#: ../../../../inc/themes/material-blue/account.inc:157
+#: ../../../../inc/themes/material-blue/groups.inc:35
+#: ../../../../inc/themes/material-blue/profiles.inc:106
msgid "Usuarios"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:233
-#: ../../../../inc/Category.class.php:266
-#: ../../../../inc/CustomFieldsBase.class.php:106
-#: ../../../../inc/Customer.class.php:150
+#: ../../../../ajax/ajax_appMgmtSave.php:245
+#: ../../../../inc/SP/Mgmt/Category.class.php:93
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:108
+#: ../../../../inc/SP/Mgmt/Customer.class.php:163
#: ../../../../inc/themes/classic/profiles.inc:15
-#: ../../../../inc/themes/material-blue/config.inc:176
-#: ../../../../inc/themes/material-blue/profiles.inc:19
+#: ../../../../inc/themes/material-blue/config-accounts.inc:4
+#: ../../../../inc/themes/material-blue/profiles.inc:21
msgid "Cuentas"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:236
-#: ../../../../ajax/ajax_appMgmtSave.php:308
-#: ../../../../inc/Category.class.php:119
-#: ../../../../inc/Customer.class.php:150
+#: ../../../../ajax/ajax_appMgmtSave.php:248
+#: ../../../../ajax/ajax_appMgmtSave.php:322
+#: ../../../../inc/SP/Mgmt/Category.class.php:58
+#: ../../../../inc/SP/Mgmt/Customer.class.php:163
msgid "No es posible eliminar"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:236
+#: ../../../../ajax/ajax_appMgmtSave.php:248
msgid "Grupo en uso por:"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:241
+#: ../../../../ajax/ajax_appMgmtSave.php:253
msgid "Grupo eliminado"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:244
+#: ../../../../ajax/ajax_appMgmtSave.php:256
msgid "Error al eliminar el grupo"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:283
+#: ../../../../ajax/ajax_appMgmtSave.php:297
msgid "Es necesario un nombre de perfil"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:285
+#: ../../../../ajax/ajax_appMgmtSave.php:299
msgid "Nombre de perfil duplicado"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:290
+#: ../../../../ajax/ajax_appMgmtSave.php:304
msgid "Perfil creado"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:293
+#: ../../../../ajax/ajax_appMgmtSave.php:307
msgid "Error al crear el perfil"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:296
+#: ../../../../ajax/ajax_appMgmtSave.php:310
msgid "Perfil actualizado"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:299
+#: ../../../../ajax/ajax_appMgmtSave.php:313
msgid "Error al actualizar el perfil"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:308
+#: ../../../../ajax/ajax_appMgmtSave.php:322
msgid "Perfil en uso por:"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:311
+#: ../../../../ajax/ajax_appMgmtSave.php:325
msgid "Perfil eliminado"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:314
+#: ../../../../ajax/ajax_appMgmtSave.php:328
msgid "Error al eliminar el perfil"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:349
+#: ../../../../ajax/ajax_appMgmtSave.php:363
msgid "Cliente creado"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:364
+#: ../../../../ajax/ajax_appMgmtSave.php:378
msgid "Cliente actualizado"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:374
+#: ../../../../ajax/ajax_appMgmtSave.php:388
msgid "Cliente eliminado"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:388
+#: ../../../../ajax/ajax_appMgmtSave.php:402
msgid "Es necesario un nombre de categoría"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:408
+#: ../../../../ajax/ajax_appMgmtSave.php:422
msgid "Categoría creada"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:423
+#: ../../../../ajax/ajax_appMgmtSave.php:437
msgid "Categoría actualizada"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:434
+#: ../../../../ajax/ajax_appMgmtSave.php:448
msgid "Categoría eliminada"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:450
+#: ../../../../ajax/ajax_appMgmtSave.php:464
msgid "Usuario o acción no indicado"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:460
+#: ../../../../ajax/ajax_appMgmtSave.php:474
msgid "Autorización creada"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:468
+#: ../../../../ajax/ajax_appMgmtSave.php:482
msgid "Autorización actualizada"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:478
+#: ../../../../ajax/ajax_appMgmtSave.php:492
msgid "Autorización eliminada"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:495
+#: ../../../../ajax/ajax_appMgmtSave.php:509
msgid "Nombre del campo no indicado"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:497
+#: ../../../../ajax/ajax_appMgmtSave.php:511
msgid "Tipo del campo no indicado"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:499
+#: ../../../../ajax/ajax_appMgmtSave.php:513
msgid "Módulo del campo no indicado"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:513
+#: ../../../../ajax/ajax_appMgmtSave.php:527
msgid "Campo creado"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:522
+#: ../../../../ajax/ajax_appMgmtSave.php:536
msgid "Campo actualizado"
msgstr ""
-#: ../../../../ajax/ajax_appMgmtSave.php:532
+#: ../../../../ajax/ajax_appMgmtSave.php:546
msgid "Campo eliminado"
msgstr ""
-#: ../../../../ajax/ajax_backup.php:58 ../../../../ajax/ajax_backup.php:63
-#: ../../../../inc/themes/classic/backup.inc:54
-msgid "Realizar Backup"
+#: ../../../../ajax/ajax_appMgmtSave.php:564
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:153
+msgid "Enlace creado"
msgstr ""
-#: ../../../../ajax/ajax_backup.php:58 ../../../../ajax/ajax_backup.php:60
+#: ../../../../ajax/ajax_appMgmtSave.php:573
+#: ../../../../inc/SP/Mgmt/PublicLinkBase.class.php:276
+msgid "Enlace eliminado"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:582
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:231
+msgid "Enlace actualizado"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:587
+#: ../../../../ajax/ajax_files.php:149 ../../../../ajax/ajax_files.php:201
+msgid "No es un ID de archivo válido"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:589
+#: ../../../../ajax/ajax_files.php:203
+#: ../../../../inc/SP/Mgmt/Files.class.php:138
+msgid "Archivo eliminado"
+msgstr ""
+
+#: ../../../../ajax/ajax_appMgmtSave.php:592
+#: ../../../../ajax/ajax_files.php:206
+#: ../../../../inc/SP/Mgmt/Files.class.php:145
+msgid "Error al eliminar el archivo"
+msgstr ""
+
+#: ../../../../ajax/ajax_backup.php:64
+#: ../../../../inc/SP/Core/Backup.class.php:71
msgid "Error al realizar el backup"
msgstr ""
-#: ../../../../ajax/ajax_backup.php:60 ../../../../ajax/ajax_backup.php:74
-#: ../../../../ajax/ajax_checkLdap.php:58 ../../../../inc/Import.class.php:128
-#: ../../../../inc/Migrate.class.php:92
+#: ../../../../ajax/ajax_backup.php:64 ../../../../ajax/ajax_backup.php:74
+#: ../../../../ajax/ajax_checkConnection.php:63
+#: ../../../../ajax/ajax_checkConnection.php:89
+#: ../../../../inc/SP/Import/Import.class.php:140
+#: ../../../../inc/SP/Import/Migrate.class.php:101
+#: ../../../../inc/SP/Mgmt/PublicLinkBase.class.php:272
+#: ../../../../inc/SP/Mgmt/PublicLinkBase.class.php:304
msgid "Revise el registro de eventos para más detalles"
msgstr ""
-#: ../../../../ajax/ajax_backup.php:63
-msgid "Copia de la aplicación y base de datos realizada correctamente"
-msgstr ""
-
-#: ../../../../ajax/ajax_backup.php:65
+#: ../../../../ajax/ajax_backup.php:67
msgid "Proceso de backup finalizado"
msgstr ""
-#: ../../../../ajax/ajax_backup.php:72 ../../../../ajax/ajax_backup.php:77
-msgid "Realizar Exportación"
-msgstr ""
-
-#: ../../../../ajax/ajax_backup.php:72
-msgid "Error al realizar la exportación de cuentas"
-msgstr ""
-
#: ../../../../ajax/ajax_backup.php:74
msgid "Error al realizar la exportación"
msgstr ""
#: ../../../../ajax/ajax_backup.php:77
-msgid "Exportación de cuentas realizada correctamente"
-msgstr ""
-
-#: ../../../../ajax/ajax_backup.php:79
msgid "Proceso de exportación finalizado"
msgstr ""
-#: ../../../../ajax/ajax_checkLdap.php:52 ../../../../inc/Ldap.class.php:259
+#: ../../../../ajax/ajax_checkConnection.php:57
+#: ../../../../inc/SP/Auth/Ldap.class.php:287
msgid "Los parámetros de LDAP no están configurados"
msgstr ""
-#: ../../../../ajax/ajax_checkLdap.php:58
+#: ../../../../ajax/ajax_checkConnection.php:63
msgid "Error de conexión a LDAP"
msgstr ""
-#: ../../../../ajax/ajax_checkLdap.php:60
+#: ../../../../ajax/ajax_checkConnection.php:65
msgid "Conexión a LDAP correcta"
msgstr ""
-#: ../../../../ajax/ajax_checkLdap.php:60
+#: ../../../../ajax/ajax_checkConnection.php:65
msgid "Objetos encontrados"
msgstr ""
-#: ../../../../ajax/ajax_configSave.php:58
+#: ../../../../ajax/ajax_checkConnection.php:73
+msgid "Los parámetros de DokuWiki no están configurados"
+msgstr ""
+
+#: ../../../../ajax/ajax_checkConnection.php:80
+msgid "Error"
+msgstr ""
+
+#: ../../../../ajax/ajax_checkConnection.php:83
+msgid "Conexión correcta"
+msgstr ""
+
+#: ../../../../ajax/ajax_checkConnection.php:84
+#: ../../../../inc/SP/Core/Init.class.php:536
+#: ../../../../inc/themes/classic/info.inc:33
+#: ../../../../inc/themes/material-blue/info.inc:33
+msgid "Versión"
+msgstr ""
+
+#: ../../../../ajax/ajax_checkConnection.php:89
+msgid "Error de conexión a DokuWiki"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:72
msgid "Modificar Configuración"
msgstr ""
-#: ../../../../ajax/ajax_configSave.php:101
+#: ../../../../ajax/ajax_configSave.php:105
+msgid "Faltan parámetros de syslog remoto"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:113
+msgid "Syslog remoto deshabilitado"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:135
msgid "El tamaño máximo por archivo es de 16MB"
msgstr ""
-#: ../../../../ajax/ajax_configSave.php:109 ../../../../js/strings.js.php:46
+#: ../../../../ajax/ajax_configSave.php:142 ../../../../js/strings.js.php:46
msgid "Extensión no permitida"
msgstr ""
-#: ../../../../ajax/ajax_configSave.php:128
+#: ../../../../ajax/ajax_configSave.php:172
msgid "Faltan parámetros de Proxy"
msgstr ""
-#: ../../../../ajax/ajax_configSave.php:136
+#: ../../../../ajax/ajax_configSave.php:180
msgid "Proxy habiltado"
msgstr ""
-#: ../../../../ajax/ajax_configSave.php:140
+#: ../../../../ajax/ajax_configSave.php:184
msgid "Proxy deshabilitado"
msgstr ""
-#: ../../../../ajax/ajax_configSave.php:143
-#: ../../../../ajax/ajax_configSave.php:167
-#: ../../../../ajax/ajax_configSave.php:201
-#: ../../../../ajax/ajax_configSave.php:240
+#: ../../../../ajax/ajax_configSave.php:187
+#: ../../../../ajax/ajax_configSave.php:237
+#: ../../../../ajax/ajax_configSave.php:271
+#: ../../../../ajax/ajax_configSave.php:310
msgid "Sección"
msgstr ""
-#: ../../../../ajax/ajax_configSave.php:143
-#: ../../../../web/ConfigC.class.php:108
+#: ../../../../ajax/ajax_configSave.php:187
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:125
#: ../../../../inc/themes/classic/profiles.inc:61
-#: ../../../../inc/themes/material-blue/profiles.inc:72
+#: ../../../../inc/themes/material-blue/profiles.inc:79
msgid "General"
msgstr ""
-#: ../../../../ajax/ajax_configSave.php:153
+#: ../../../../ajax/ajax_configSave.php:197
msgid "Faltan parámetros de Wiki"
msgstr ""
-#: ../../../../ajax/ajax_configSave.php:160
+#: ../../../../ajax/ajax_configSave.php:204
msgid "Wiki habiltada"
msgstr ""
-#: ../../../../ajax/ajax_configSave.php:164
+#: ../../../../ajax/ajax_configSave.php:208
msgid "Wiki deshabilitada"
msgstr ""
-#: ../../../../ajax/ajax_configSave.php:167
-#: ../../../../web/ConfigC.class.php:244
-#: ../../../../inc/themes/classic/wiki.inc:4
-#: ../../../../inc/themes/material-blue/wiki.inc:4
-msgid "Wiki"
+#: ../../../../ajax/ajax_configSave.php:221
+msgid "Faltan parámetros de DokuWiki"
msgstr ""
-#: ../../../../ajax/ajax_configSave.php:182
-msgid "Faltan parámetros de LDAP"
+#: ../../../../ajax/ajax_configSave.php:230
+msgid "DokuWiki habiltada"
msgstr ""
-#: ../../../../ajax/ajax_configSave.php:194
-msgid "LDAP habiltado"
-msgstr ""
-
-#: ../../../../ajax/ajax_configSave.php:198
-msgid "LDAP deshabilitado"
-msgstr ""
-
-#: ../../../../ajax/ajax_configSave.php:201
-#: ../../../../web/ConfigC.class.php:276
-#: ../../../../inc/themes/classic/ldap.inc:4
-#: ../../../../inc/themes/material-blue/ldap.inc:4
-msgid "LDAP"
-msgstr ""
-
-#: ../../../../ajax/ajax_configSave.php:216
-msgid "Faltan parámetros de Correo"
-msgstr ""
-
-#: ../../../../ajax/ajax_configSave.php:231
-msgid "Correo habiltado"
+#: ../../../../ajax/ajax_configSave.php:234
+msgid "DokuWiki deshabilitada"
msgstr ""
#: ../../../../ajax/ajax_configSave.php:237
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:270
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:88
+#: ../../../../inc/themes/classic/wiki.inc:4
+#: ../../../../inc/themes/material-blue/wiki.inc:9
+msgid "Wiki"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:252
+msgid "Faltan parámetros de LDAP"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:264
+msgid "LDAP habiltado"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:268
+msgid "LDAP deshabilitado"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:271
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:302
+#: ../../../../inc/themes/classic/ldap.inc:4
+#: ../../../../inc/themes/material-blue/ldap.inc:6
+msgid "LDAP"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:286
+msgid "Faltan parámetros de Correo"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:301
+msgid "Correo habiltado"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:307
msgid "Correo deshabilitado"
msgstr ""
-#: ../../../../ajax/ajax_configSave.php:240
-#: ../../../../web/ConfigC.class.php:306
+#: ../../../../ajax/ajax_configSave.php:310
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:332
#: ../../../../inc/themes/classic/mail.inc:4
-#: ../../../../inc/themes/material-blue/mail.inc:4
+#: ../../../../inc/themes/material-blue/mail.inc:6
msgid "Correo"
msgstr ""
-#: ../../../../ajax/ajax_configSave.php:262
+#: ../../../../ajax/ajax_configSave.php:316
+msgid "Error al guardar la configuración"
+msgstr ""
+
+#: ../../../../ajax/ajax_configSave.php:334
msgid "Configuración actualizada"
msgstr ""
-#: ../../../../ajax/ajax_configSave.php:271
-#: ../../../../ajax/ajax_configSave.php:317
-#: ../../../../ajax/ajax_viewpass.php:61
-#: ../../../../inc/Controller.class.php:169
+#: ../../../../ajax/ajax_configSave.php:343
+#: ../../../../ajax/ajax_configSave.php:389
+#: ../../../../ajax/ajax_configSave.php:394
+#: ../../../../ajax/ajax_viewpass.php:69
+#: ../../../../inc/SP/Controller/Controller.class.php:195
msgid "Clave maestra actualizada"
msgstr ""
-#: ../../../../ajax/ajax_configSave.php:271
-#: ../../../../ajax/ajax_viewpass.php:61
-#: ../../../../inc/Controller.class.php:169
+#: ../../../../ajax/ajax_configSave.php:343
+#: ../../../../ajax/ajax_viewpass.php:69
+#: ../../../../inc/SP/Controller/Controller.class.php:195
msgid "Reinicie la sesión para cambiarla"
msgstr ""
-#: ../../../../ajax/ajax_configSave.php:273
+#: ../../../../ajax/ajax_configSave.php:345
msgid "Clave maestra no indicada"
msgstr ""
-#: ../../../../ajax/ajax_configSave.php:275
+#: ../../../../ajax/ajax_configSave.php:347
msgid "Se ha de confirmar el cambio de clave"
msgstr ""
-#: ../../../../ajax/ajax_configSave.php:279
+#: ../../../../ajax/ajax_configSave.php:351
msgid "Las claves son idénticas"
msgstr ""
-#: ../../../../ajax/ajax_configSave.php:281
+#: ../../../../ajax/ajax_configSave.php:353
msgid "Las claves maestras no coinciden"
msgstr ""
-#: ../../../../ajax/ajax_configSave.php:283
+#: ../../../../ajax/ajax_configSave.php:355
msgid "La clave maestra actual no coincide"
msgstr ""
-#: ../../../../ajax/ajax_configSave.php:292
+#: ../../../../ajax/ajax_configSave.php:364
msgid "Errores al actualizar las claves de las cuentas"
msgstr ""
-#: ../../../../ajax/ajax_configSave.php:298
+#: ../../../../ajax/ajax_configSave.php:370
msgid "Errores al actualizar las claves de las cuentas del histórico"
msgstr ""
-#: ../../../../ajax/ajax_configSave.php:302
+#: ../../../../ajax/ajax_configSave.php:374
msgid "Errores al actualizar datos de campos personalizados"
msgstr ""
-#: ../../../../ajax/ajax_configSave.php:315
-#: ../../../../inc/Account.class.php:512
+#: ../../../../ajax/ajax_configSave.php:386
+#: ../../../../inc/SP/Account/Account.class.php:499
msgid "Actualizar Clave Maestra"
msgstr ""
-#: ../../../../ajax/ajax_configSave.php:319
+#: ../../../../ajax/ajax_configSave.php:397
+#: ../../../../ajax/ajax_configSave.php:402
msgid "Error al guardar el hash de la clave maestra"
msgstr ""
-#: ../../../../ajax/ajax_configSave.php:327
-msgid "Generar Clave Temporal"
+#: ../../../../ajax/ajax_configSave.php:412
+#: ../../../../ajax/ajax_configSave.php:418
+msgid "Clave Temporal Generada"
msgstr ""
-#: ../../../../ajax/ajax_configSave.php:327
-#: ../../../../inc/CustomFieldsBase.class.php:87
-#: ../../../../inc/themes/classic/account.inc:86
-#: ../../../../inc/themes/classic/editpass.inc:25
+#: ../../../../ajax/ajax_configSave.php:413
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:89
+#: ../../../../inc/themes/classic/account-editpass.inc:25
+#: ../../../../inc/themes/classic/account.inc:93
+#: ../../../../inc/themes/classic/config-proxy.inc:45
#: ../../../../inc/themes/classic/encryption.inc:143
#: ../../../../inc/themes/classic/install.inc:38
#: ../../../../inc/themes/classic/install.inc:39
@@ -717,87 +835,104 @@ msgstr ""
#: ../../../../inc/themes/classic/users.inc:75
#: ../../../../inc/themes/classic/userspass.inc:8
#: ../../../../inc/themes/classic/userspass.inc:11
-#: ../../../../inc/themes/material-blue/account.inc:99
-#: ../../../../inc/themes/material-blue/account.inc:104
-#: ../../../../inc/themes/material-blue/config.inc:395
-#: ../../../../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/encryption.inc:161
+#: ../../../../inc/themes/classic/wiki.inc:188
+#: ../../../../inc/themes/material-blue/account-editpass.inc:28
+#: ../../../../inc/themes/material-blue/account-editpass.inc:33
+#: ../../../../inc/themes/material-blue/account-editpass.inc:43
+#: ../../../../inc/themes/material-blue/account-link.inc:47
+#: ../../../../inc/themes/material-blue/account.inc:113
+#: ../../../../inc/themes/material-blue/account.inc:119
+#: ../../../../inc/themes/material-blue/config-proxy.inc:63
+#: ../../../../inc/themes/material-blue/encryption.inc:163
#: ../../../../inc/themes/material-blue/install.inc:47
-#: ../../../../inc/themes/material-blue/ldap.inc:105
+#: ../../../../inc/themes/material-blue/ldap.inc:107
#: ../../../../inc/themes/material-blue/login.inc:18
#: ../../../../inc/themes/material-blue/login.inc:41
-#: ../../../../inc/themes/material-blue/mail.inc:73
-#: ../../../../inc/themes/material-blue/mail.inc:80
+#: ../../../../inc/themes/material-blue/mail.inc:75
+#: ../../../../inc/themes/material-blue/mail.inc:82
#: ../../../../inc/themes/material-blue/passreset.inc:30
-#: ../../../../inc/themes/material-blue/users.inc:89
-#: ../../../../inc/themes/material-blue/users.inc:96
+#: ../../../../inc/themes/material-blue/users.inc:90
+#: ../../../../inc/themes/material-blue/users.inc:97
#: ../../../../inc/themes/material-blue/userspass.inc:8
#: ../../../../inc/themes/material-blue/userspass.inc:13
+#: ../../../../inc/themes/material-blue/wiki.inc:216
+#: ../../../../inc/themes/material-blue/wiki.inc:223
msgid "Clave"
msgstr ""
-#: ../../../../ajax/ajax_configSave.php:329
-msgid "Clave Temporal Generada"
-msgstr ""
-
-#: ../../../../ajax/ajax_configSave.php:331
+#: ../../../../ajax/ajax_configSave.php:421
+#: ../../../../ajax/ajax_configSave.php:426
msgid "Error al generar clave temporal"
msgstr ""
-#: ../../../../ajax/ajax_doLogin.php:49
+#: ../../../../ajax/ajax_doLogin.php:61
msgid "Usuario/Clave no introducidos"
msgstr ""
-#: ../../../../ajax/ajax_doLogin.php:61
+#: ../../../../ajax/ajax_doLogin.php:73
msgid "Inicio sesión"
msgstr ""
-#: ../../../../ajax/ajax_doLogin.php:66
+#: ../../../../ajax/ajax_doLogin.php:78
msgid "Servidor Login"
msgstr ""
-#: ../../../../ajax/ajax_doLogin.php:72
+#: ../../../../ajax/ajax_doLogin.php:85
msgid "Error al guardar los datos de LDAP"
msgstr ""
-#: ../../../../ajax/ajax_doLogin.php:75 ../../../../ajax/ajax_doLogin.php:83
-#: ../../../../ajax/ajax_doLogin.php:135 ../../../../ajax/ajax_doLogin.php:179
-#: ../../../../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:185
-#: ../../../../inc/Crypt.class.php:196
-#: ../../../../inc/XmlImportBase.class.php:79
+#: ../../../../ajax/ajax_doLogin.php:88 ../../../../ajax/ajax_doLogin.php:97
+#: ../../../../ajax/ajax_doLogin.php:160 ../../../../ajax/ajax_doLogin.php:209
+#: ../../../../inc/SP/Api/ApiTokens.class.php:107
+#: ../../../../inc/SP/Api/ApiTokens.class.php:140
+#: ../../../../inc/SP/Api/ApiTokens.class.php:168
+#: ../../../../inc/SP/Api/ApiTokens.class.php:189
+#: ../../../../inc/SP/Api/ApiTokens.class.php:233
+#: ../../../../inc/SP/Api/ApiTokens.class.php:259
+#: ../../../../inc/SP/Api/ApiTokensUtil.class.php:180
+#: ../../../../inc/SP/Core/Crypt.class.php:195
+#: ../../../../inc/SP/Core/Crypt.class.php:206
+#: ../../../../inc/SP/Import/XmlImportBase.class.php:81
+#: ../../../../inc/SP/Mgmt/PublicLinkBase.class.php:272
+#: ../../../../inc/SP/Mgmt/PublicLinkBase.class.php:304
msgid "Error interno"
msgstr ""
-#: ../../../../ajax/ajax_doLogin.php:80
+#: ../../../../ajax/ajax_doLogin.php:94
msgid "Error al actualizar la clave del usuario en la BBDD"
msgstr ""
-#: ../../../../ajax/ajax_doLogin.php:88 ../../../../ajax/ajax_doLogin.php:113
+#: ../../../../ajax/ajax_doLogin.php:102 ../../../../ajax/ajax_doLogin.php:127
+#: ../../../../ajax/ajax_doLogin.php:137
msgid "Login incorrecto"
msgstr ""
-#: ../../../../ajax/ajax_doLogin.php:89 ../../../../ajax/ajax_doLogin.php:96
-#: ../../../../ajax/ajax_doLogin.php:103 ../../../../ajax/ajax_doLogin.php:114
-#: ../../../../ajax/ajax_doLogin.php:124 ../../../../ajax/ajax_doLogin.php:174
-#: ../../../../inc/ApiTokens.class.php:190
-#: ../../../../inc/ApiTokens.class.php:308 ../../../../inc/Auth.class.php:108
-#: ../../../../inc/Init.class.php:466 ../../../../inc/Ldap.class.php:290
-#: ../../../../inc/Ldap.class.php:303 ../../../../inc/Ldap.class.php:311
-#: ../../../../inc/UserBase.class.php:384
-#: ../../../../inc/UserBase.class.php:528 ../../../../res/test.php:64
-#: ../../../../web/SearchC.class.php:305
-#: ../../../../web/UsersMgmtC.class.php:393
-#: ../../../../inc/themes/classic/account.inc:73
-#: ../../../../inc/themes/classic/editpass.inc:21
-#: ../../../../inc/themes/classic/eventlog.inc:23
+#: ../../../../ajax/ajax_doLogin.php:103 ../../../../ajax/ajax_doLogin.php:110
+#: ../../../../ajax/ajax_doLogin.php:117 ../../../../ajax/ajax_doLogin.php:128
+#: ../../../../ajax/ajax_doLogin.php:138 ../../../../ajax/ajax_doLogin.php:148
+#: ../../../../ajax/ajax_doLogin.php:200
+#: ../../../../inc/SP/Api/ApiTokens.class.php:111
+#: ../../../../inc/SP/Api/ApiTokens.class.php:237
+#: ../../../../inc/SP/Auth/Auth.class.php:122
+#: ../../../../inc/SP/Auth/Ldap.class.php:318
+#: ../../../../inc/SP/Auth/Ldap.class.php:332
+#: ../../../../inc/SP/Auth/Ldap.class.php:341
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:520
+#: ../../../../inc/SP/Controller/Grids.class.php:752
+#: ../../../../inc/SP/Controller/Grids.class.php:827
+#: ../../../../inc/SP/Core/Init.class.php:463
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:156
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:200
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:234
+#: ../../../../inc/SP/Mgmt/User/UserBase.class.php:394
+#: ../../../../inc/SP/Mgmt/User/UserBase.class.php:544
+#: ../../../../res/test.php:64
+#: ../../../../inc/themes/classic/account-editpass.inc:21
+#: ../../../../inc/themes/classic/account-request.inc:17
+#: ../../../../inc/themes/classic/account.inc:80
+#: ../../../../inc/themes/classic/config-proxy.inc:36
+#: ../../../../inc/themes/classic/datasearch-rows.inc:45
+#: ../../../../inc/themes/classic/eventlog.inc:26
#: ../../../../inc/themes/classic/info.inc:39
#: ../../../../inc/themes/classic/install.inc:27
#: ../../../../inc/themes/classic/install.inc:28
@@ -805,1672 +940,2519 @@ msgstr ""
#: ../../../../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:89
+#: ../../../../inc/themes/classic/search.inc:62
#: ../../../../inc/themes/classic/tokens.inc:8
-#: ../../../../inc/themes/material-blue/account.inc:84
-#: ../../../../inc/themes/material-blue/config.inc:381
-#: ../../../../inc/themes/material-blue/editpass.inc:22
-#: ../../../../inc/themes/material-blue/eventlog.inc:23
+#: ../../../../inc/themes/classic/wiki.inc:172
+#: ../../../../inc/themes/material-blue/account-editpass.inc:24
+#: ../../../../inc/themes/material-blue/account-link.inc:36
+#: ../../../../inc/themes/material-blue/account.inc:98
+#: ../../../../inc/themes/material-blue/config-proxy.inc:49
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:45
+#: ../../../../inc/themes/material-blue/eventlog.inc:28
#: ../../../../inc/themes/material-blue/info.inc:39
-#: ../../../../inc/themes/material-blue/ldap.inc:86
+#: ../../../../inc/themes/material-blue/ldap.inc:88
#: ../../../../inc/themes/material-blue/login.inc:11
#: ../../../../inc/themes/material-blue/login.inc:34
-#: ../../../../inc/themes/material-blue/mail.inc:61
-#: ../../../../inc/themes/material-blue/mail.inc:67
+#: ../../../../inc/themes/material-blue/mail.inc:63
+#: ../../../../inc/themes/material-blue/mail.inc:69
#: ../../../../inc/themes/material-blue/passreset.inc:16
-#: ../../../../inc/themes/material-blue/request.inc:20
-#: ../../../../inc/themes/material-blue/search.inc:91
+#: ../../../../inc/themes/material-blue/publiclinks.inc:18
+#: ../../../../inc/themes/material-blue/request.inc:22
#: ../../../../inc/themes/material-blue/tokens.inc:8
+#: ../../../../inc/themes/material-blue/wiki.inc:197
+#: ../../../../inc/themes/material-blue/wiki.inc:210
msgid "Usuario"
msgstr ""
-#: ../../../../ajax/ajax_doLogin.php:92 ../../../../ajax/ajax_doLogin.php:106
-#: ../../../../ajax/ajax_doLogin.php:117
+#: ../../../../ajax/ajax_doLogin.php:106 ../../../../ajax/ajax_doLogin.php:120
+#: ../../../../ajax/ajax_doLogin.php:131 ../../../../ajax/ajax_doLogin.php:142
msgid "Usuario/Clave incorrectos"
msgstr ""
-#: ../../../../ajax/ajax_doLogin.php:95 ../../../../ajax/ajax_doLogin.php:99
+#: ../../../../ajax/ajax_doLogin.php:109 ../../../../ajax/ajax_doLogin.php:113
msgid "Cuenta expirada"
msgstr ""
-#: ../../../../ajax/ajax_doLogin.php:102
+#: ../../../../ajax/ajax_doLogin.php:116
msgid "El usuario no tiene grupos asociados"
msgstr ""
-#: ../../../../ajax/ajax_doLogin.php:123 ../../../../ajax/ajax_doLogin.php:127
+#: ../../../../ajax/ajax_doLogin.php:139
+#: ../../../../inc/themes/material-blue/preferences-security.inc:6
+msgid "Autentificación"
+msgstr ""
+
+#: ../../../../ajax/ajax_doLogin.php:147 ../../../../ajax/ajax_doLogin.php:151
msgid "Usuario deshabilitado"
msgstr ""
-#: ../../../../ajax/ajax_doLogin.php:132
+#: ../../../../ajax/ajax_doLogin.php:157
msgid "Error al obtener los datos del usuario de la BBDD"
msgstr ""
-#: ../../../../ajax/ajax_doLogin.php:142
+#: ../../../../ajax/ajax_doLogin.php:167
msgid "La clave maestra no ha sido guardada o es incorrecta"
msgstr ""
-#: ../../../../ajax/ajax_doLogin.php:149 ../../../../ajax/ajax_doLogin.php:152
+#: ../../../../ajax/ajax_doLogin.php:175 ../../../../ajax/ajax_doLogin.php:178
msgid "Clave maestra incorrecta"
msgstr ""
-#: ../../../../ajax/ajax_doLogin.php:175
-#: ../../../../inc/ProfileBase.class.php:512
-#: ../../../../inc/ProfileBase.class.php:550
-#: ../../../../inc/ProfileBase.class.php:593
-#: ../../../../web/UsersMgmtC.class.php:90
+#: ../../../../ajax/ajax_doLogin.php:201
+#: ../../../../inc/SP/Controller/Grids.class.php:503
+#: ../../../../inc/SP/Mgmt/User/ProfileBase.class.php:519
+#: ../../../../inc/SP/Mgmt/User/ProfileBase.class.php:563
+#: ../../../../inc/SP/Mgmt/User/ProfileBase.class.php:612
#: ../../../../inc/themes/classic/users.inc:37
-#: ../../../../inc/themes/material-blue/users.inc:43
+#: ../../../../inc/themes/material-blue/users.inc:44
msgid "Perfil"
msgstr ""
-#: ../../../../ajax/ajax_doLogin.php:176 ../../../../inc/Groups.class.php:158
-#: ../../../../inc/Groups.class.php:259 ../../../../inc/Groups.class.php:375
-#: ../../../../inc/Ldap.class.php:213 ../../../../inc/Ldap.class.php:226
-#: ../../../../inc/Ldap.class.php:236 ../../../../inc/Ldap.class.php:385
-#: ../../../../web/UsersMgmtC.class.php:91
+#: ../../../../ajax/ajax_doLogin.php:202
+#: ../../../../inc/SP/Auth/Ldap.class.php:225
+#: ../../../../inc/SP/Auth/Ldap.class.php:239
+#: ../../../../inc/SP/Auth/Ldap.class.php:250
+#: ../../../../inc/SP/Auth/Ldap.class.php:416
+#: ../../../../inc/SP/Controller/Grids.class.php:504
+#: ../../../../inc/SP/Mgmt/User/Groups.class.php:171
+#: ../../../../inc/SP/Mgmt/User/Groups.class.php:279
+#: ../../../../inc/SP/Mgmt/User/Groups.class.php:403
#: ../../../../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
+#: ../../../../inc/themes/material-blue/ldap.inc:141
+#: ../../../../inc/themes/material-blue/ldap.inc:166
+#: ../../../../inc/themes/material-blue/users.inc:58
msgid "Grupo"
msgstr ""
-#: ../../../../ajax/ajax_files.php:46 ../../../../ajax/ajax_getFiles.php:40
+#: ../../../../ajax/ajax_doLogin.php:206
+msgid "Error al obtener la clave maestra del usuario"
+msgstr ""
+
+#: ../../../../ajax/ajax_files.php:56 ../../../../ajax/ajax_getFiles.php:44
msgid "Gestión de archivos deshabilitada"
msgstr ""
-#: ../../../../ajax/ajax_files.php:60 ../../../../inc/Files.class.php:63
+#: ../../../../ajax/ajax_files.php:70
+#: ../../../../inc/SP/Mgmt/Files.class.php:71
msgid "Subir Archivo"
msgstr ""
-#: ../../../../ajax/ajax_files.php:69
+#: ../../../../ajax/ajax_files.php:79
msgid "No hay extensiones permitidas"
msgstr ""
-#: ../../../../ajax/ajax_files.php:80 ../../../../inc/FileImport.class.php:115
+#: ../../../../ajax/ajax_files.php:90
+#: ../../../../inc/SP/Import/FileImport.class.php:118
msgid "Tipo de archivo no soportado"
msgstr ""
-#: ../../../../ajax/ajax_files.php:86
+#: ../../../../ajax/ajax_files.php:91
+msgid "Extensión"
+msgstr ""
+
+#: ../../../../ajax/ajax_files.php:97
msgid "Archivo inválido"
msgstr ""
-#: ../../../../ajax/ajax_files.php:102 ../../../../ajax/ajax_files.php:119
-#: ../../../../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:109
-msgid "El archivo es mayor de "
-msgstr ""
-
-#: ../../../../ajax/ajax_files.php:126
-msgid "Archivo guardado"
-msgstr ""
-
-#: ../../../../ajax/ajax_files.php:131
-msgid "No se pudo guardar el archivo"
-msgstr ""
-
-#: ../../../../ajax/ajax_files.php:141 ../../../../ajax/ajax_files.php:200
-msgid "No es un ID de archivo válido"
-msgstr ""
-
-#: ../../../../ajax/ajax_files.php:149
-msgid "El archivo no existe"
-msgstr ""
-
-#: ../../../../ajax/ajax_files.php:158
-#: ../../../../inc/themes/classic/files.inc:19
-#: ../../../../inc/themes/material-blue/files.inc:19
-msgid "Descargar Archivo"
-msgstr ""
-
-#: ../../../../ajax/ajax_files.php:159 ../../../../ajax/ajax_viewpass.php:70
-#: ../../../../inc/Files.class.php:112
-#: ../../../../inc/themes/classic/eventlog.inc:14
-#: ../../../../inc/themes/material-blue/eventlog.inc:14
-msgid "ID"
-msgstr ""
-
-#: ../../../../ajax/ajax_files.php:160 ../../../../inc/Files.class.php:65
-#: ../../../../inc/Files.class.php:113
-#: ../../../../inc/themes/classic/import.inc:152
-#: ../../../../inc/themes/material-blue/import.inc:80
+#: ../../../../ajax/ajax_files.php:98 ../../../../ajax/ajax_files.php:167
+#: ../../../../inc/SP/Mgmt/Files.class.php:73
+#: ../../../../inc/SP/Mgmt/Files.class.php:133
+#: ../../../../inc/themes/classic/import.inc:70
+#: ../../../../inc/themes/material-blue/import.inc:82
msgid "Archivo"
msgstr ""
-#: ../../../../ajax/ajax_files.php:161 ../../../../inc/Files.class.php:66
-#: ../../../../inc/Files.class.php:114
-#: ../../../../web/AccountsMgmtC.class.php:267
+#: ../../../../ajax/ajax_files.php:114 ../../../../ajax/ajax_files.php:132
+#: ../../../../inc/SP/Import/FileImport.class.php:134
+#: ../../../../inc/SP/Import/FileImport.class.php:152
+#: ../../../../inc/SP/Import/FileImport.class.php:170
+msgid "Error interno al leer el archivo"
+msgstr ""
+
+#: ../../../../ajax/ajax_files.php:121
+msgid "Tamaño de archivo superado"
+msgstr ""
+
+#: ../../../../ajax/ajax_files.php:122 ../../../../ajax/ajax_files.php:169
+#: ../../../../inc/SP/Controller/Grids.class.php:356
+#: ../../../../inc/SP/Mgmt/Files.class.php:75
+#: ../../../../inc/SP/Mgmt/Files.class.php:135
+msgid "Tamaño"
+msgstr ""
+
+#: ../../../../ajax/ajax_files.php:139
+msgid "Archivo guardado"
+msgstr ""
+
+#: ../../../../ajax/ajax_files.php:141
+#: ../../../../inc/SP/Mgmt/Files.class.php:85
+msgid "No se pudo guardar el archivo"
+msgstr ""
+
+#: ../../../../ajax/ajax_files.php:155
+msgid "El archivo no existe"
+msgstr ""
+
+#: ../../../../ajax/ajax_files.php:164
+#: ../../../../inc/themes/material-blue/files.inc:21
+msgid "Descargar Archivo"
+msgstr ""
+
+#: ../../../../ajax/ajax_files.php:165 ../../../../ajax/ajax_viewpass.php:78
+#: ../../../../inc/SP/Api/ApiTokens.class.php:263
+#: ../../../../inc/SP/Mgmt/Files.class.php:131
+#: ../../../../inc/SP/Mgmt/PublicLinkBase.class.php:277
+#: ../../../../inc/themes/classic/eventlog.inc:14
+#: ../../../../inc/themes/material-blue/eventlog.inc:16
+msgid "ID"
+msgstr ""
+
+#: ../../../../ajax/ajax_files.php:166
+#: ../../../../ajax/ajax_sendRequest.php:74
+#: ../../../../ajax/ajax_viewpass.php:79
+#: ../../../../inc/SP/Account/Account.class.php:136
+#: ../../../../inc/SP/Account/Account.class.php:194
+#: ../../../../inc/SP/Account/Account.class.php:395
+#: ../../../../inc/SP/Account/Account.class.php:418
+#: ../../../../inc/SP/Account/Account.class.php:680
+#: ../../../../inc/SP/Controller/Grids.class.php:352
+#: ../../../../inc/SP/Controller/Grids.class.php:824
+#: ../../../../inc/SP/Mgmt/Files.class.php:72
+#: ../../../../inc/SP/Mgmt/Files.class.php:132
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:155
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:199
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:233
+#: ../../../../inc/themes/material-blue/publiclinks.inc:6
+msgid "Cuenta"
+msgstr ""
+
+#: ../../../../ajax/ajax_files.php:168
+#: ../../../../inc/SP/Controller/Grids.class.php:293
+#: ../../../../inc/SP/Controller/Grids.class.php:355
+#: ../../../../inc/SP/Mgmt/Files.class.php:74
+#: ../../../../inc/SP/Mgmt/Files.class.php:134
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:154
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:198
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:232
#: ../../../../inc/themes/classic/customfields.inc:16
#: ../../../../inc/themes/material-blue/customfields.inc:19
msgid "Tipo"
msgstr ""
-#: ../../../../ajax/ajax_files.php:162 ../../../../inc/Files.class.php:67
-#: ../../../../inc/Files.class.php:115
-msgid "Tamaño"
-msgstr ""
-
-#: ../../../../ajax/ajax_files.php:204
-msgid "Archivo eliminado"
-msgstr ""
-
-#: ../../../../ajax/ajax_files.php:209
-msgid "Error al eliminar el archivo"
-msgstr ""
-
-#: ../../../../ajax/ajax_getContent.php:42
-#: ../../../../inc/ApiRequest.class.php:55
-#: ../../../../inc/CustomFieldDef.class.php:45
-#: ../../../../inc/CustomFields.class.php:54
+#: ../../../../ajax/ajax_getContent.php:51
+#: ../../../../inc/SP/Api/ApiRequest.class.php:126
+#: ../../../../inc/SP/Api/SyspassApi.class.php:63
+#: ../../../../inc/SP/Api/SyspassApi.class.php:91
+#: ../../../../inc/SP/Api/SyspassApi.class.php:116
+#: ../../../../inc/SP/Mgmt/CustomFieldDef.class.php:49
+#: ../../../../inc/SP/Mgmt/CustomFields.class.php:61
msgid "Parámetros incorrectos"
msgstr ""
-#: ../../../../ajax/ajax_migrate.php:56
+#: ../../../../ajax/ajax_migrate.php:60
msgid "Confirmar la importación de cuentas"
msgstr ""
-#: ../../../../ajax/ajax_migrate.php:58
+#: ../../../../ajax/ajax_migrate.php:62
msgid "Es necesario un usuario de conexión"
msgstr ""
-#: ../../../../ajax/ajax_migrate.php:60
+#: ../../../../ajax/ajax_migrate.php:64
msgid "Es necesaria una clave de conexión"
msgstr ""
-#: ../../../../ajax/ajax_migrate.php:62
+#: ../../../../ajax/ajax_migrate.php:66
msgid "Es necesario el nombre de la BBDD"
msgstr ""
-#: ../../../../ajax/ajax_migrate.php:64
+#: ../../../../ajax/ajax_migrate.php:68
msgid "Es necesario un nombre de host"
msgstr ""
-#: ../../../../ajax/ajax_passReset.php:50
-#: ../../../../ajax/ajax_passReset.php:53
+#: ../../../../ajax/ajax_passReset.php:56
+#: ../../../../ajax/ajax_passReset.php:59
msgid "Recuperación de Clave"
msgstr ""
-#: ../../../../ajax/ajax_passReset.php:56
#: ../../../../ajax/ajax_passReset.php:61
msgid "Solicitado para"
msgstr ""
-#: ../../../../ajax/ajax_passReset.php:58
-#: ../../../../ajax/ajax_sendRequest.php:76
+#: ../../../../ajax/ajax_passReset.php:64
+#: ../../../../ajax/ajax_passReset.php:67
+#: ../../../../ajax/ajax_sendRequest.php:86
msgid "Solicitud enviada"
msgstr ""
-#: ../../../../ajax/ajax_passReset.php:58
+#: ../../../../ajax/ajax_passReset.php:67
msgid "En breve recibirá un correo para completar la solicitud."
msgstr ""
-#: ../../../../ajax/ajax_passReset.php:63
+#: ../../../../ajax/ajax_passReset.php:70
+msgid "Solicitud no enviada"
+msgstr ""
+
+#: ../../../../ajax/ajax_passReset.php:75
msgid "No se ha podido realizar la solicitud. Consulte con el administrador."
msgstr ""
-#: ../../../../ajax/ajax_passReset.php:73
-#: ../../../../inc/UserBase.class.php:570
-#: ../../../../inc/UserPass.class.php:127
+#: ../../../../ajax/ajax_passReset.php:79
+#: ../../../../inc/SP/Mgmt/User/UserBase.class.php:588
+#: ../../../../inc/SP/Mgmt/User/UserPass.class.php:140
msgid "Modificar Clave Usuario"
msgstr ""
-#: ../../../../ajax/ajax_passReset.php:73
-#: ../../../../inc/UserBase.class.php:570
-#: ../../../../inc/UserBase.class.php:594
-#: ../../../../inc/UserPass.class.php:127
-#: ../../../../web/UsersMgmtC.class.php:89
+#: ../../../../ajax/ajax_passReset.php:86
+#: ../../../../inc/SP/Controller/Grids.class.php:502
+#: ../../../../inc/SP/Mgmt/User/UserBase.class.php:589
+#: ../../../../inc/SP/Mgmt/User/UserBase.class.php:619
+#: ../../../../inc/SP/Mgmt/User/UserMigrate.class.php:99
+#: ../../../../inc/SP/Mgmt/User/UserPass.class.php:141
#: ../../../../inc/themes/classic/users.inc:21
-#: ../../../../inc/themes/material-blue/users.inc:24
+#: ../../../../inc/themes/material-blue/users.inc:25
msgid "Login"
msgstr ""
-#: ../../../../ajax/ajax_passReset.php:81
+#: ../../../../ajax/ajax_passReset.php:98
msgid "La clave es incorrecta o no coincide"
msgstr ""
-#: ../../../../ajax/ajax_sendRequest.php:49
+#: ../../../../ajax/ajax_sendRequest.php:59
msgid "Es necesaria una descripción"
msgstr ""
-#: ../../../../ajax/ajax_sendRequest.php:62
+#: ../../../../ajax/ajax_sendRequest.php:72
msgid "Solicitud de Modificación de Cuenta"
msgstr ""
-#: ../../../../ajax/ajax_sendRequest.php:63
+#: ../../../../ajax/ajax_sendRequest.php:73
msgid "Solicitante"
msgstr ""
-#: ../../../../ajax/ajax_sendRequest.php:64
-#: ../../../../ajax/ajax_viewpass.php:71 ../../../../inc/Account.class.php:181
-#: ../../../../inc/Account.class.php:236 ../../../../inc/Account.class.php:417
-#: ../../../../inc/Account.class.php:440 ../../../../inc/Account.class.php:684
-#: ../../../../inc/Files.class.php:64
-msgid "Cuenta"
-msgstr ""
-
-#: ../../../../ajax/ajax_sendRequest.php:65
-#: ../../../../inc/Account.class.php:180 ../../../../inc/Account.class.php:235
-#: ../../../../inc/Account.class.php:416 ../../../../inc/Account.class.php:439
-#: ../../../../inc/Account.class.php:683 ../../../../inc/Customer.class.php:65
-#: ../../../../inc/Customer.class.php:115
-#: ../../../../inc/Customer.class.php:163
-#: ../../../../web/SearchC.class.php:287
-#: ../../../../inc/themes/classic/account.inc:23
-#: ../../../../inc/themes/classic/editpass.inc:12
-#: ../../../../inc/themes/classic/request.inc:9
-#: ../../../../inc/themes/classic/search.inc:58
-#: ../../../../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:60
+#: ../../../../ajax/ajax_sendRequest.php:75
+#: ../../../../inc/SP/Account/Account.class.php:135
+#: ../../../../inc/SP/Account/Account.class.php:193
+#: ../../../../inc/SP/Account/Account.class.php:394
+#: ../../../../inc/SP/Account/Account.class.php:417
+#: ../../../../inc/SP/Account/Account.class.php:679
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:499
+#: ../../../../inc/SP/Controller/Grids.class.php:353
+#: ../../../../inc/SP/Controller/Grids.class.php:408
+#: ../../../../inc/SP/Mgmt/Customer.class.php:81
+#: ../../../../inc/SP/Mgmt/Customer.class.php:179
+#: ../../../../inc/SP/Mgmt/Customer.class.php:343
+#: ../../../../inc/themes/classic/account-editpass.inc:12
+#: ../../../../inc/themes/classic/account-request.inc:9
+#: ../../../../inc/themes/classic/account.inc:29
+#: ../../../../inc/themes/classic/datasearch-rows.inc:14
+#: ../../../../inc/themes/classic/search.inc:31
+#: ../../../../inc/themes/material-blue/account-editpass.inc:15
+#: ../../../../inc/themes/material-blue/account-link.inc:18
+#: ../../../../inc/themes/material-blue/account.inc:41
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:14
+#: ../../../../inc/themes/material-blue/request.inc:12
msgid "Cliente"
msgstr ""
-#: ../../../../ajax/ajax_sendRequest.php:66
-#: ../../../../web/AccountsMgmtC.class.php:80
-#: ../../../../web/AccountsMgmtC.class.php:139
-#: ../../../../web/UsersMgmtC.class.php:188
+#: ../../../../ajax/ajax_sendRequest.php:76
+#: ../../../../inc/SP/Controller/Grids.class.php:125
+#: ../../../../inc/SP/Controller/Grids.class.php:219
+#: ../../../../inc/SP/Controller/Grids.class.php:586
#: ../../../../inc/themes/classic/categories.inc:16
-#: ../../../../inc/themes/classic/customers.inc:16
-#: ../../../../inc/themes/classic/eventlog.inc:29
+#: ../../../../inc/themes/classic/customers.inc:17
+#: ../../../../inc/themes/classic/eventlog.inc:32
#: ../../../../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:29
-#: ../../../../inc/themes/material-blue/groups.inc:20
+#: ../../../../inc/themes/material-blue/categories.inc:21
+#: ../../../../inc/themes/material-blue/customers.inc:22
+#: ../../../../inc/themes/material-blue/eventlog.inc:34
+#: ../../../../inc/themes/material-blue/groups.inc:23
msgid "Descripción"
msgstr ""
-#: ../../../../ajax/ajax_sendRequest.php:79
+#: ../../../../ajax/ajax_sendRequest.php:89
msgid "Error al enviar la solicitud"
msgstr ""
-#: ../../../../ajax/ajax_userPrefsSave.php:75
-#: ../../../../ajax/ajax_userPrefsSave.php:108
+#: ../../../../ajax/ajax_userPrefsSave.php:84
+#: ../../../../ajax/ajax_userPrefsSave.php:118
msgid "Error al actualizar preferencias"
msgstr ""
-#: ../../../../ajax/ajax_userPrefsSave.php:85
-#: ../../../../ajax/ajax_userPrefsSave.php:111
+#: ../../../../ajax/ajax_userPrefsSave.php:95
+#: ../../../../ajax/ajax_userPrefsSave.php:121
msgid "Preferencias actualizadas"
msgstr ""
-#: ../../../../ajax/ajax_viewpass.php:55
+#: ../../../../ajax/ajax_viewpass.php:62
msgid "La clave maestra no coincide"
msgstr ""
-#: ../../../../ajax/ajax_viewpass.php:59
-#: ../../../../inc/Controller.class.php:166
+#: ../../../../ajax/ajax_viewpass.php:67
+#: ../../../../inc/SP/Controller/Controller.class.php:192
msgid "No tiene permisos para acceder a esta cuenta"
msgstr ""
-#: ../../../../ajax/ajax_viewpass.php:69 ../../../../inc/Acl.class.php:133
-#: ../../../../inc/themes/classic/account.inc:382
+#: ../../../../ajax/ajax_viewpass.php:77
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:360
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:361
+#: ../../../../inc/SP/Core/Acl.class.php:141
+#: ../../../../inc/themes/classic/inc/Icons.class.php:49
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:47
+#: ../../../../inc/themes/classic/account-actions.inc:22
#: ../../../../inc/themes/classic/profiles.inc:23
-#: ../../../../inc/themes/classic/search.inc:139
-#: ../../../../inc/themes/material-blue/account.inc:425
-#: ../../../../inc/themes/material-blue/profiles.inc:35
-#: ../../../../inc/themes/material-blue/search.inc:149
+#: ../../../../inc/themes/classic/search.inc:114
+#: ../../../../inc/themes/material-blue/account-actions.inc:28
+#: ../../../../inc/themes/material-blue/profiles.inc:37
msgid "Ver Clave"
msgstr ""
-#: ../../../../ajax/ajax_viewpass.php:80 ../../../../js/strings.js.php:73
+#: ../../../../ajax/ajax_viewpass.php:88 ../../../../js/strings.js.php:73
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:33 ../../../../inc/Backup.class.php:28
-#: ../../../../inc/Base.php:26 ../../../../inc/Cache.class.php:28
-#: ../../../../inc/Category.class.php:29 ../../../../inc/Config.class.php:28
-#: ../../../../inc/ConfigDB.class.php:28
-#: ../../../../inc/ConfigInterface.class.php:28
-#: ../../../../inc/Controller.class.php:31 ../../../../inc/Crypt.class.php:28
-#: ../../../../inc/CryptMasterPass.class.php:28
-#: ../../../../inc/CryptPKI.class.php:28
-#: ../../../../inc/CsvImport.class.php:28
-#: ../../../../inc/CsvImportBase.class.php:28
-#: ../../../../inc/CustomFieldDef.class.php:28
-#: ../../../../inc/CustomFields.class.php:28
-#: ../../../../inc/CustomFieldsBase.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/Language.class.php:28 ../../../../inc/Ldap.class.php:29
-#: ../../../../inc/LdapADS.class.php:28 ../../../../inc/Log.class.php:28
-#: ../../../../inc/Migrate.class.php:28 ../../../../inc/Minify.class.php:30
-#: ../../../../inc/Profile.class.php:29
-#: ../../../../inc/ProfileBase.class.php:28
-#: ../../../../inc/Request.class.php:110 ../../../../inc/Response.class.php:28
-#: ../../../../inc/SPException.class.php:28
-#: ../../../../inc/Session.class.php:28
-#: ../../../../inc/SessionUtil.class.php:28
-#: ../../../../inc/SyspassImport.class.php:28
-#: ../../../../inc/Template.class.php:27 ../../../../inc/Themes.class.php:28
-#: ../../../../inc/Upgrade.class.php:29 ../../../../inc/User.class.php:28
-#: ../../../../inc/UserAccounts.class.php:28
-#: ../../../../inc/UserBase.class.php:28 ../../../../inc/UserLdap.class.php:28
-#: ../../../../inc/UserMigrate.class.php:28
-#: ../../../../inc/UserPass.class.php:28
-#: ../../../../inc/UserPassRecover.class.php:28
-#: ../../../../inc/UserPreferences.class.php:28
-#: ../../../../inc/UserUtil.class.php:28 ../../../../inc/Util.class.php:28
-#: ../../../../inc/XmlExport.class.php:28
-#: ../../../../inc/XmlImport.class.php:28
-#: ../../../../inc/XmlImportBase.class.php:28
-#: ../../../../web/AccountC.class.php:41
-#: ../../../../web/AccountsMgmtC.class.php:33
-#: ../../../../web/ConfigC.class.php:35 ../../../../web/EventlogC.class.php:30
-#: ../../../../web/SearchC.class.php:33
-#: ../../../../web/UsersMgmtC.class.php:40
-#: ../../../../web/UsersPrefsC.class.php:35
+#: ../../../../inc/Base.php:28 ../../../../inc/SP/Account/Account.class.php:40
+#: ../../../../inc/SP/Account/AccountBase.class.php:30
+#: ../../../../inc/SP/Account/AccountHistory.class.php:37
+#: ../../../../inc/SP/Account/AccountInterface.class.php:28
+#: ../../../../inc/SP/Account/AccountSearch.class.php:36
+#: ../../../../inc/SP/Account/AccountUtil.class.php:32
+#: ../../../../inc/SP/Account/UserAccounts.class.php:31
+#: ../../../../inc/SP/Api/ApiBase.class.php:28
+#: ../../../../inc/SP/Api/ApiRequest.class.php:32
+#: ../../../../inc/SP/Api/ApiTokens.class.php:28
+#: ../../../../inc/SP/Api/ApiTokensUtil.class.php:34
+#: ../../../../inc/SP/Api/SyspassApi.class.php:34
+#: ../../../../inc/SP/Auth/Auth.class.php:43
+#: ../../../../inc/SP/Auth/Auth2FA.class.php:34
+#: ../../../../inc/SP/Auth/Ldap.class.php:32
+#: ../../../../inc/SP/Auth/LdapADS.class.php:31
+#: ../../../../inc/SP/Config/Cache.class.php:28
+#: ../../../../inc/SP/Config/Config.class.php:31
+#: ../../../../inc/SP/Config/ConfigDB.class.php:33
+#: ../../../../inc/SP/Config/ConfigInterface.class.php:28
+#: ../../../../inc/SP/Controller/AccItemMgmt.class.php:28
+#: ../../../../inc/SP/Controller/AccItemsMgmt.class.php:28
+#: ../../../../inc/SP/Controller/AccItemsMgmtSearch.class.php:28
+#: ../../../../inc/SP/Controller/Account.class.php:28
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:28
+#: ../../../../inc/SP/Controller/AccountsSearchData.class.php:28
+#: ../../../../inc/SP/Controller/AppItemMgmt.class.php:28
+#: ../../../../inc/SP/Controller/AppItemsMgmt.class.php:28
+#: ../../../../inc/SP/Controller/AppItemsMgmtSearch.class.php:28
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:28
+#: ../../../../inc/SP/Controller/Controller.class.php:28
+#: ../../../../inc/SP/Controller/Eventlog.class.php:28
+#: ../../../../inc/SP/Controller/GridItemsSearch.class.php:11
+#: ../../../../inc/SP/Controller/GridTabController.class.php:28
+#: ../../../../inc/SP/Controller/Grids.class.php:28
+#: ../../../../inc/SP/Controller/Main.class.php:28
+#: ../../../../inc/SP/Controller/UsersPrefs.class.php:28
+#: ../../../../inc/SP/Controller/Wiki.class.php:28
+#: ../../../../inc/SP/Core/Acl.class.php:33
+#: ../../../../inc/SP/Core/Backup.class.php:37
+#: ../../../../inc/SP/Core/Crypt.class.php:35
+#: ../../../../inc/SP/Core/CryptMasterPass.class.php:31
+#: ../../../../inc/SP/Core/CryptPKI.class.php:28
+#: ../../../../inc/SP/Core/Init.class.php:40
+#: ../../../../inc/SP/Core/Installer.class.php:38
+#: ../../../../inc/SP/Core/Language.class.php:31
+#: ../../../../inc/SP/Core/SPException.class.php:30
+#: ../../../../inc/SP/Core/Session.class.php:33
+#: ../../../../inc/SP/Core/SessionUtil.class.php:32
+#: ../../../../inc/SP/Core/Template.class.php:28
+#: ../../../../inc/SP/Core/ThemeIconsBase.class.php:31
+#: ../../../../inc/SP/Core/ThemeIconsInterface.class.php:28
+#: ../../../../inc/SP/Core/Themes.class.php:32
+#: ../../../../inc/SP/Core/Upgrade.class.php:37
+#: ../../../../inc/SP/Core/XmlExport.class.php:36
+#: ../../../../inc/SP/Html/Assets/FontIcon.class.php:28
+#: ../../../../inc/SP/Html/Assets/IconBase.class.php:28
+#: ../../../../inc/SP/Html/Assets/IconInterface.class.php:28
+#: ../../../../inc/SP/Html/Assets/ImageIcon.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGrid.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGridAction.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGridActionBase.class.php:30
+#: ../../../../inc/SP/Html/DataGrid/DataGridActionInterface.class.php:30
+#: ../../../../inc/SP/Html/DataGrid/DataGridActionSearch.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGridActionType.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGridBase.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGridData.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGridDataBase.class.php:30
+#: ../../../../inc/SP/Html/DataGrid/DataGridDataInterface.class.php:30
+#: ../../../../inc/SP/Html/DataGrid/DataGridHeader.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGridHeaderBase.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGridHeaderInterface.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGridHeaderSort.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGridInterface.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGridPager.class.php:28
+#: ../../../../inc/SP/Html/DataGrid/DataGridPagerBase.class.php:30
+#: ../../../../inc/SP/Html/DataGrid/DataGridPagerInterface.class.php:30
+#: ../../../../inc/SP/Html/DataGrid/DataGridSort.class.php:30
+#: ../../../../inc/SP/Html/DataGrid/DataGridSortInterface.class.php:30
+#: ../../../../inc/SP/Html/DataGrid/DataGridTab.class.php:28
+#: ../../../../inc/SP/Html/Html.class.php:28
+#: ../../../../inc/SP/Html/Minify.class.php:33
+#: ../../../../inc/SP/Http/Request.class.php:50
+#: ../../../../inc/SP/Http/Response.class.php:28
+#: ../../../../inc/SP/Import/CsvImport.class.php:30
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:34
+#: ../../../../inc/SP/Import/FileImport.class.php:31
+#: ../../../../inc/SP/Import/Import.class.php:33
+#: ../../../../inc/SP/Import/ImportBase.class.php:34
+#: ../../../../inc/SP/Import/KeepassImport.class.php:30
+#: ../../../../inc/SP/Import/KeepassXImport.class.php:31
+#: ../../../../inc/SP/Import/Migrate.class.php:37
+#: ../../../../inc/SP/Import/SyspassImport.class.php:31
+#: ../../../../inc/SP/Import/XmlImport.class.php:31
+#: ../../../../inc/SP/Import/XmlImportBase.class.php:30
+#: ../../../../inc/SP/Log/Log.class.php:35
+#: ../../../../inc/SP/Mgmt/Category.class.php:36
+#: ../../../../inc/SP/Mgmt/CustomFieldDef.class.php:32
+#: ../../../../inc/SP/Mgmt/CustomFields.class.php:35
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:28
+#: ../../../../inc/SP/Mgmt/Customer.class.php:37
+#: ../../../../inc/SP/Mgmt/Files.class.php:36
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:40
+#: ../../../../inc/SP/Mgmt/PublicLinkBase.class.php:38
+#: ../../../../inc/SP/Mgmt/PublicLinkUtil.class.php:34
+#: ../../../../inc/SP/Mgmt/User/Groups.class.php:35
+#: ../../../../inc/SP/Mgmt/User/Profile.class.php:34
+#: ../../../../inc/SP/Mgmt/User/ProfileBase.class.php:37
+#: ../../../../inc/SP/Mgmt/User/ProfileUtil.class.php:34
+#: ../../../../inc/SP/Mgmt/User/User.class.php:34
+#: ../../../../inc/SP/Mgmt/User/UserBase.class.php:36
+#: ../../../../inc/SP/Mgmt/User/UserLdap.class.php:34
+#: ../../../../inc/SP/Mgmt/User/UserMigrate.class.php:33
+#: ../../../../inc/SP/Mgmt/User/UserPass.class.php:37
+#: ../../../../inc/SP/Mgmt/User/UserPassRecover.class.php:31
+#: ../../../../inc/SP/Mgmt/User/UserPreferences.class.php:33
+#: ../../../../inc/SP/Mgmt/User/UserUtil.class.php:32
+#: ../../../../inc/SP/Storage/DB.class.php:33
+#: ../../../../inc/SP/Storage/DBConnectionFactory.class.php:33
+#: ../../../../inc/SP/Util/ImageUtil.class.php:30
+#: ../../../../inc/SP/Util/Util.class.php:35
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApi.class.php:34
+#: ../../../../inc/themes/classic/inc/Icons.class.php:28
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:28
msgid "No es posible acceder directamente a este archivo"
msgstr ""
-#: ../../../../inc/Account.class.php:112 ../../../../inc/Account.class.php:201
-#: ../../../../inc/Account.class.php:653
+#: ../../../../inc/SP/Account/Account.class.php:63
+#: ../../../../inc/SP/Account/Account.class.php:157
+#: ../../../../inc/SP/Account/Account.class.php:647
msgid "Error al actualizar el historial"
msgstr ""
-#: ../../../../inc/Account.class.php:117
+#: ../../../../inc/SP/Account/Account.class.php:68
msgid "Actualizar Cuenta"
msgstr ""
-#: ../../../../inc/Account.class.php:120 ../../../../inc/Account.class.php:398
+#: ../../../../inc/SP/Account/Account.class.php:71
+#: ../../../../inc/SP/Account/Account.class.php:376
msgid "Error al actualizar los grupos secundarios"
msgstr ""
-#: ../../../../inc/Account.class.php:126 ../../../../inc/Account.class.php:406
+#: ../../../../inc/SP/Account/Account.class.php:77
+#: ../../../../inc/SP/Account/Account.class.php:384
msgid "Error al actualizar los usuarios de la cuenta"
msgstr ""
-#: ../../../../inc/Account.class.php:234
+#: ../../../../inc/SP/Account/Account.class.php:192
msgid "Restaurar Cuenta"
msgstr ""
-#: ../../../../inc/Account.class.php:341
-#: ../../../../inc/AccountHistory.class.php:348
-#: ../../../../inc/AccountHistory.class.php:508
+#: ../../../../inc/SP/Account/Account.class.php:304
+#: ../../../../inc/SP/Account/AccountHistory.class.php:371
+#: ../../../../inc/SP/Account/AccountHistory.class.php:539
msgid "No se pudieron obtener los datos de la cuenta"
msgstr ""
-#: ../../../../inc/Account.class.php:415 ../../../../inc/Acl.class.php:129
-#: ../../../../web/AccountC.class.php:150 ../../../../web/MainC.class.php:183
+#: ../../../../inc/SP/Account/Account.class.php:393
+#: ../../../../inc/SP/Controller/Account.class.php:125
+#: ../../../../inc/SP/Controller/Main.class.php:194
+#: ../../../../inc/SP/Core/Acl.class.php:137
msgid "Nueva Cuenta"
msgstr ""
-#: ../../../../inc/Account.class.php:433
+#: ../../../../inc/SP/Account/Account.class.php:411
msgid "ERROR: Error en la operación."
msgstr ""
-#: ../../../../inc/Account.class.php:438 ../../../../inc/Acl.class.php:134
-#: ../../../../web/AccountC.class.php:358
-#: ../../../../inc/themes/classic/account.inc:369
-#: ../../../../inc/themes/classic/search.inc:167
-#: ../../../../inc/themes/material-blue/account.inc:419
-#: ../../../../inc/themes/material-blue/search.inc:178
+#: ../../../../inc/SP/Account/Account.class.php:416
+#: ../../../../inc/SP/Controller/Account.class.php:386
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:428
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:429
+#: ../../../../inc/SP/Controller/Grids.class.php:398
+#: ../../../../inc/SP/Controller/Grids.class.php:399
+#: ../../../../inc/SP/Core/Acl.class.php:142
+#: ../../../../inc/themes/classic/account-actions.inc:8
+#: ../../../../inc/themes/classic/search.inc:144
+#: ../../../../inc/themes/material-blue/account-actions.inc:10
msgid "Eliminar Cuenta"
msgstr ""
-#: ../../../../inc/Account.class.php:451
+#: ../../../../inc/SP/Account/Account.class.php:432
msgid "Error al eliminar grupos asociados a la cuenta"
msgstr ""
-#: ../../../../inc/Account.class.php:455
+#: ../../../../inc/SP/Account/Account.class.php:437
msgid "Error al eliminar usuarios asociados a la cuenta"
msgstr ""
-#: ../../../../inc/Account.class.php:459
+#: ../../../../inc/SP/Account/Account.class.php:442
msgid "Error al eliminar archivos asociados a la cuenta"
msgstr ""
-#: ../../../../inc/Account.class.php:513
-#: ../../../../inc/AccountHistory.class.php:129
-#: ../../../../inc/XmlImport.class.php:62
+#: ../../../../inc/SP/Account/Account.class.php:500
+#: ../../../../inc/SP/Account/AccountHistory.class.php:140
+#: ../../../../inc/SP/Import/XmlImport.class.php:65
msgid "Inicio"
msgstr ""
-#: ../../../../inc/Account.class.php:518
-#: ../../../../inc/AccountHistory.class.php:135
+#: ../../../../inc/SP/Account/Account.class.php:506
+#: ../../../../inc/SP/Account/AccountHistory.class.php:147
msgid "Error en el módulo de encriptación"
msgstr ""
-#: ../../../../inc/Account.class.php:526
-#: ../../../../inc/AccountHistory.class.php:143
+#: ../../../../inc/SP/Account/Account.class.php:515
+#: ../../../../inc/SP/Account/AccountHistory.class.php:156
msgid "Error al obtener las claves de las cuentas"
msgstr ""
-#: ../../../../inc/Account.class.php:542
-#: ../../../../inc/AccountHistory.class.php:165
+#: ../../../../inc/SP/Account/Account.class.php:531
+#: ../../../../inc/SP/Account/AccountHistory.class.php:177
msgid "Clave de cuenta vacía"
msgstr ""
-#: ../../../../inc/Account.class.php:547
-#: ../../../../inc/AccountHistory.class.php:170
+#: ../../../../inc/SP/Account/Account.class.php:536
+#: ../../../../inc/SP/Account/AccountHistory.class.php:182
msgid "IV de encriptación incorrecto"
msgstr ""
-#: ../../../../inc/Account.class.php:556
-#: ../../../../inc/AccountHistory.class.php:179
+#: ../../../../inc/SP/Account/Account.class.php:545
+#: ../../../../inc/SP/Account/AccountHistory.class.php:191
msgid "No es posible desencriptar la clave de la cuenta"
msgstr ""
-#: ../../../../inc/Account.class.php:562
+#: ../../../../inc/SP/Account/Account.class.php:551
msgid "Fallo al actualizar la clave de la cuenta"
msgstr ""
-#: ../../../../inc/Account.class.php:576
+#: ../../../../inc/SP/Account/Account.class.php:565
msgid "Cuentas actualizadas"
msgstr ""
-#: ../../../../inc/Account.class.php:581
-#: ../../../../inc/AccountHistory.class.php:204
-#: ../../../../inc/CustomFields.class.php:285
-#: ../../../../inc/CustomFields.class.php:327
+#: ../../../../inc/SP/Account/Account.class.php:570
+#: ../../../../inc/SP/Account/AccountHistory.class.php:216
+#: ../../../../inc/SP/Mgmt/CustomFields.class.php:325
+#: ../../../../inc/SP/Mgmt/CustomFields.class.php:369
msgid "Fin"
msgstr ""
-#: ../../../../inc/Account.class.php:682
+#: ../../../../inc/SP/Account/Account.class.php:678
msgid "Modificar Clave"
msgstr ""
-#: ../../../../inc/Account.class.php:717
-msgid "No se pudieron obtener los datos de las cuentas"
-msgstr ""
-
-#: ../../../../inc/AccountHistory.class.php:128
+#: ../../../../inc/SP/Account/AccountHistory.class.php:139
msgid "Actualizar Clave Maestra (H)"
msgstr ""
-#: ../../../../inc/AccountHistory.class.php:160
+#: ../../../../inc/SP/Account/AccountHistory.class.php:172
msgid "La clave maestra del registro no coincide"
msgstr ""
-#: ../../../../inc/AccountHistory.class.php:185
+#: ../../../../inc/SP/Account/AccountHistory.class.php:197
msgid "Fallo al actualizar la clave del histórico"
msgstr ""
-#: ../../../../inc/AccountHistory.class.php:199
-#: ../../../../inc/CustomFields.class.php:323
+#: ../../../../inc/SP/Account/AccountHistory.class.php:211
+#: ../../../../inc/SP/Mgmt/CustomFields.class.php:365
msgid "Registros actualizados"
msgstr ""
-#: ../../../../inc/Acl.class.php:112
-msgid "Denegado acceso a"
+#: ../../../../inc/SP/Account/AccountUtil.class.php:133
+msgid "No se pudieron obtener los datos de las cuentas"
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:265
-#: ../../../../inc/themes/classic/search.inc:161
-#: ../../../../inc/themes/material-blue/search.inc:172
-msgid "Copiar Cuenta"
-msgstr ""
-
-#: ../../../../inc/Acl.class.php:130 ../../../../web/AccountC.class.php:329
-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:191
-#: ../../../../inc/themes/classic/profiles.inc:50
-#: ../../../../inc/themes/material-blue/account.inc:234
-#: ../../../../inc/themes/material-blue/config.inc:261
-#: ../../../../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/ConfigDB.class.php:91
-#: ../../../../inc/ConfigDB.class.php:119 ../../../../web/MainC.class.php:201
-#: ../../../../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:132
-#: ../../../../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:177
-#: ../../../../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
+#: ../../../../inc/SP/Api/ApiBase.class.php:81
+#: ../../../../inc/SP/Api/ApiBase.class.php:105
+#: ../../../../inc/SP/Api/ApiBase.class.php:133
msgid "Acceso no permitido"
msgstr ""
-#: ../../../../inc/Api.class.php:166
+#: ../../../../inc/SP/Api/ApiBase.class.php:173
msgid "Error de codificación"
msgstr ""
-#: ../../../../inc/ApiRequest.class.php:102
+#: ../../../../inc/SP/Api/ApiRequest.class.php:96
+msgid "Método inválido"
+msgstr ""
+
+#: ../../../../inc/SP/Api/ApiRequest.class.php:112
+msgid "Datos inválidos"
+msgstr ""
+
+#: ../../../../inc/SP/Api/ApiRequest.class.php:140
+msgid "Acción inválida"
+msgstr ""
+
+#: ../../../../inc/SP/Api/ApiRequest.class.php:152
msgid "Token de autorización"
msgstr ""
-#: ../../../../inc/ApiRequest.class.php:103
+#: ../../../../inc/SP/Api/ApiRequest.class.php:153
msgid "Acción a realizar"
msgstr ""
-#: ../../../../inc/ApiRequest.class.php:104
+#: ../../../../inc/SP/Api/ApiRequest.class.php:154
msgid "Clave de usuario (opcional)"
msgstr ""
-#: ../../../../inc/ApiRequest.class.php:105
+#: ../../../../inc/SP/Api/ApiRequest.class.php:155
msgid "Cadena a buscar"
msgstr ""
-#: ../../../../inc/ApiRequest.class.php:106
+#: ../../../../inc/SP/Api/ApiRequest.class.php:156
msgid "Numero de cuentas a mostar en la búsqueda"
msgstr ""
-#: ../../../../inc/ApiRequest.class.php:107
+#: ../../../../inc/SP/Api/ApiRequest.class.php:157
msgid "Item a devolver"
msgstr ""
-#: ../../../../inc/ApiTokens.class.php:221
+#: ../../../../inc/SP/Api/ApiTokens.class.php:144
msgid "La autorización ya existe"
msgstr ""
-#: ../../../../inc/ApiTokens.class.php:307
+#: ../../../../inc/SP/Api/ApiTokens.class.php:236
msgid "Actualizar Autorización"
msgstr ""
-#: ../../../../inc/ApiTokens.class.php:331
-#: ../../../../web/UsersMgmtC.class.php:422
+#: ../../../../inc/SP/Api/ApiTokens.class.php:262
+#: ../../../../inc/SP/Controller/Grids.class.php:743
+#: ../../../../inc/SP/Controller/Grids.class.php:744
msgid "Eliminar Autorización"
msgstr ""
-#: ../../../../inc/Auth.class.php:107
+#: ../../../../inc/SP/Auth/Auth.class.php:121
msgid "Usuario no pertenece al grupo"
msgstr ""
-#: ../../../../inc/Auth.class.php:186
+#: ../../../../inc/SP/Auth/Auth.class.php:202
#: ../../../../inc/themes/classic/users.inc:117
#: ../../../../inc/themes/classic/userspass.inc:2
-#: ../../../../inc/themes/material-blue/users.inc:161
+#: ../../../../inc/themes/material-blue/users.inc:162
#: ../../../../inc/themes/material-blue/userspass.inc:2
msgid "Cambio de Clave"
msgstr ""
-#: ../../../../inc/Auth.class.php:188
+#: ../../../../inc/SP/Auth/Auth.class.php:204
msgid "Se ha solicitado el cambio de su clave de usuario."
msgstr ""
-#: ../../../../inc/Auth.class.php:190
+#: ../../../../inc/SP/Auth/Auth.class.php:206
msgid "Para completar el proceso es necesario que acceda a la siguiente URL:"
msgstr ""
-#: ../../../../inc/Auth.class.php:194
+#: ../../../../inc/SP/Auth/Auth.class.php:210
msgid "Si no ha solicitado esta acción, ignore este mensaje."
msgstr ""
-#: ../../../../inc/Backup.class.php:167
-msgid "Esta operación sólo es posible en entornos Linux"
+#: ../../../../inc/SP/Auth/Ldap.class.php:136
+#: ../../../../inc/SP/Auth/Ldap.class.php:140
+msgid "No es posible conectar con el servidor de LDAP"
msgstr ""
-#: ../../../../inc/Backup.class.php:169
-msgid "Error al realizar backup en modo compatibilidad"
+#: ../../../../inc/SP/Auth/Ldap.class.php:166
+#: ../../../../inc/SP/Auth/Ldap.class.php:171
+msgid "Error al conectar (BIND)"
msgstr ""
-#: ../../../../inc/Backup.class.php:223
-#: ../../../../inc/XmlExport.class.php:467
-msgid "No es posible crear el directorio de backups"
+#: ../../../../inc/SP/Auth/Ldap.class.php:195
+#: ../../../../inc/SP/Auth/Ldap.class.php:200
+msgid "Error al buscar objetos en DN base"
msgstr ""
-#: ../../../../inc/Backup.class.php:228
-#: ../../../../inc/XmlExport.class.php:472
-msgid "Compruebe los permisos del directorio de backups"
+#: ../../../../inc/SP/Auth/Ldap.class.php:224
+#: ../../../../inc/SP/Auth/Ldap.class.php:230
+#: ../../../../inc/SP/Auth/Ldap.class.php:238
+#: ../../../../inc/SP/Auth/Ldap.class.php:243
+#: ../../../../inc/SP/Auth/Ldap.class.php:249
+#: ../../../../inc/SP/Auth/Ldap.class.php:254
+msgid "Error al buscar RDN de grupo"
msgstr ""
-#: ../../../../inc/Category.class.php:69
-#: ../../../../inc/Category.class.php:165
-msgid "Nombre de categoría duplicado"
+#: ../../../../inc/SP/Auth/Ldap.class.php:317
+#: ../../../../inc/SP/Auth/Ldap.class.php:323
+#: ../../../../inc/SP/Auth/Ldap.class.php:340
+#: ../../../../inc/SP/Auth/Ldap.class.php:345
+msgid "Error al buscar el DN del usuario"
msgstr ""
-#: ../../../../inc/Category.class.php:78
-msgid "Error al crear la categoría"
+#: ../../../../inc/SP/Auth/Ldap.class.php:331
+#: ../../../../inc/SP/Auth/Ldap.class.php:336
+msgid "Error al localizar el usuario en LDAP"
msgstr ""
-#: ../../../../inc/Category.class.php:83
-#: ../../../../inc/Category.class.php:132
-#: ../../../../inc/Category.class.php:182
-#: ../../../../web/SearchC.class.php:299
-#: ../../../../inc/themes/classic/account.inc:42
-#: ../../../../inc/themes/classic/search.inc:83
-#: ../../../../inc/themes/material-blue/account.inc:51
-#: ../../../../inc/themes/material-blue/search.inc:85
-msgid "Categoría"
+#: ../../../../inc/SP/Auth/Ldap.class.php:415
+#: ../../../../inc/SP/Auth/Ldap.class.php:421
+#: ../../../../inc/SP/Auth/LdapADS.class.php:107
+#: ../../../../inc/SP/Auth/LdapADS.class.php:112
+msgid "Error al buscar el grupo de usuarios"
msgstr ""
-#: ../../../../inc/Category.class.php:119
-msgid "Categoría en uso por:"
+#: ../../../../inc/SP/Auth/Ldap.class.php:428
+msgid "Usuario verificado en grupo"
msgstr ""
-#: ../../../../inc/Category.class.php:129
-msgid "Error al eliminar la categoría"
+#: ../../../../inc/SP/Auth/LdapADS.class.php:117
+#: ../../../../inc/SP/Auth/LdapADS.class.php:122
+msgid "No se encontró el grupo con ese nombre"
msgstr ""
-#: ../../../../inc/Category.class.php:132
-#: ../../../../web/AccountsMgmtC.class.php:102
-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:148
+#: ../../../../inc/SP/Config/Config.class.php:151
msgid "No es posible escribir el archivo de configuración"
msgstr ""
-#: ../../../../inc/Config.class.php:148
+#: ../../../../inc/SP/Config/Config.class.php:151
msgid "Compruebe los permisos del directorio \"config\""
msgstr ""
-#: ../../../../inc/ConfigDB.class.php:91
-#: ../../../../inc/ConfigDB.class.php:120
+#: ../../../../inc/SP/Config/ConfigDB.class.php:102
+#: ../../../../inc/SP/Config/ConfigDB.class.php:136
+#: ../../../../inc/SP/Controller/Main.class.php:212
+#: ../../../../inc/SP/Core/Acl.class.php:154
+#: ../../../../inc/themes/classic/profiles.inc:57
+#: ../../../../inc/themes/material-blue/profiles.inc:73
+msgid "Configuración"
+msgstr ""
+
+#: ../../../../inc/SP/Config/ConfigDB.class.php:103
+#: ../../../../inc/SP/Config/ConfigDB.class.php:137
msgid "Modificar configuración"
msgstr ""
-#: ../../../../inc/ConfigDB.class.php:121
+#: ../../../../inc/SP/Config/ConfigDB.class.php:138
msgid "Parámetro"
msgstr ""
-#: ../../../../inc/ConfigDB.class.php:122
+#: ../../../../inc/SP/Config/ConfigDB.class.php:139
msgid "Valor"
msgstr ""
-#: ../../../../inc/Controller.class.php:165
-msgid "Opción no disponible"
+#: ../../../../inc/SP/Controller/AccItemMgmt.class.php:166
+msgid "Token de autorización visualizado"
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:282
-msgid "Consulte con el administrador"
+#: ../../../../inc/SP/Controller/AccItemMgmt.class.php:167
+msgid "Autorizaciones"
msgstr ""
-#: ../../../../inc/Controller.class.php:167
-msgid "No tiene permisos para acceder a esta página"
+#: ../../../../inc/SP/Controller/Account.class.php:279
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:410
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:411
+#: ../../../../inc/SP/Core/Acl.class.php:136
+#: ../../../../inc/themes/classic/search.inc:138
+msgid "Copiar Cuenta"
msgstr ""
-#: ../../../../inc/Controller.class.php:168
-msgid "No tiene permisos para realizar esta operación"
+#: ../../../../inc/SP/Controller/Account.class.php:358
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:392
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:393
+#: ../../../../inc/SP/Core/Acl.class.php:138
+msgid "Editar Cuenta"
msgstr ""
-#: ../../../../inc/Crypt.class.php:122 ../../../../inc/Email.class.php:148
-msgid "Aviso"
+#: ../../../../inc/SP/Controller/Account.class.php:413
+#: ../../../../inc/SP/Controller/Account.class.php:445
+#: ../../../../inc/SP/Controller/Account.class.php:538
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:348
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:349
+#: ../../../../inc/themes/classic/datasearch-rows.inc:31
+#: ../../../../inc/themes/classic/search.inc:48
+#: ../../../../inc/themes/classic/search.inc:109
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:31
+msgid "Detalles de Cuenta"
msgstr ""
-#: ../../../../inc/Crypt.class.php:122
-msgid ""
-"Se ha regenerado el HASH de clave maestra. No es necesaria ninguna acción."
+#: ../../../../inc/SP/Controller/Account.class.php:501
+#: ../../../../inc/themes/classic/account-actions.inc:37
+#: ../../../../inc/themes/material-blue/account-actions.inc:46
+msgid "Modificar Clave de Cuenta"
msgstr ""
-#: ../../../../inc/Crypt.class.php:186
-msgid "No se puede usar el módulo de encriptación"
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:375
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:376
+#: ../../../../inc/themes/classic/account-actions.inc:28
+#: ../../../../inc/themes/classic/search.inc:118
+#: ../../../../inc/themes/material-blue/account-actions.inc:35
+msgid "Copiar Clave en Portapapeles"
msgstr ""
-#: ../../../../inc/Crypt.class.php:197
-msgid "Error al generar datos cifrados"
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:439
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:440
+#: ../../../../inc/themes/classic/account-actions.inc:61
+#: ../../../../inc/themes/classic/search.inc:153
+#: ../../../../inc/themes/material-blue/account-actions.inc:78
+msgid "Solicitar Modificación"
msgstr ""
-#: ../../../../inc/CryptPKI.class.php:46
-msgid "No es posible generar las claves RSA"
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:450
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:451
+#: ../../../../inc/themes/classic/search.inc:127
+msgid "Más Acciones"
msgstr ""
-#: ../../../../inc/CryptPKI.class.php:112
-#: ../../../../inc/CryptPKI.class.php:143
-msgid "El archivo de clave no existe"
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:500
+msgid "Ordenar por Cliente"
msgstr ""
-#: ../../../../inc/CsvImportBase.class.php:109
-#, php-format
-msgid "El número de campos es incorrecto (%d)"
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:506
+#: ../../../../inc/SP/Controller/Grids.class.php:124
+#: ../../../../inc/SP/Controller/Grids.class.php:218
+#: ../../../../inc/SP/Controller/Grids.class.php:292
+#: ../../../../inc/SP/Controller/Grids.class.php:354
+#: ../../../../inc/SP/Controller/Grids.class.php:407
+#: ../../../../inc/SP/Controller/Grids.class.php:501
+#: ../../../../inc/SP/Controller/Grids.class.php:585
+#: ../../../../inc/SP/Controller/Grids.class.php:669
+#: ../../../../inc/themes/classic/account-editpass.inc:8
+#: ../../../../inc/themes/classic/account-request.inc:6
+#: ../../../../inc/themes/classic/account.inc:17
+#: ../../../../inc/themes/classic/categories.inc:8
+#: ../../../../inc/themes/classic/customers.inc:9
+#: ../../../../inc/themes/classic/customfields.inc:9
+#: ../../../../inc/themes/classic/datasearch-rows.inc:29
+#: ../../../../inc/themes/classic/groups.inc:8
+#: ../../../../inc/themes/classic/info.inc:25
+#: ../../../../inc/themes/classic/profiles.inc:8
+#: ../../../../inc/themes/classic/search.inc:46
+#: ../../../../inc/themes/classic/users.inc:8
+#: ../../../../inc/themes/material-blue/account-editpass.inc:11
+#: ../../../../inc/themes/material-blue/account-link.inc:12
+#: ../../../../inc/themes/material-blue/account.inc:27
+#: ../../../../inc/themes/material-blue/categories.inc:9
+#: ../../../../inc/themes/material-blue/customers.inc:10
+#: ../../../../inc/themes/material-blue/customfields.inc:8
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:29
+#: ../../../../inc/themes/material-blue/groups.inc:11
+#: ../../../../inc/themes/material-blue/info.inc:25
+#: ../../../../inc/themes/material-blue/profiles.inc:10
+#: ../../../../inc/themes/material-blue/request.inc:8
+#: ../../../../inc/themes/material-blue/users.inc:9
+msgid "Nombre"
msgstr ""
-#: ../../../../inc/CsvImportBase.class.php:110
-#, php-format
-msgid "Compruebe el formato del archivo CSV en línea %s"
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:507
+msgid "Ordenar por Nombre"
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:348
-#: ../../../../inc/XmlImport.class.php:62
-#: ../../../../inc/XmlImport.class.php:63
-#: ../../../../web/ConfigC.class.php:199
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:513
+#: ../../../../inc/SP/Mgmt/Category.class.php:74
+#: ../../../../inc/SP/Mgmt/Category.class.php:174
+#: ../../../../inc/SP/Mgmt/Category.class.php:349
+#: ../../../../inc/themes/classic/account.inc:48
+#: ../../../../inc/themes/classic/datasearch-rows.inc:39
+#: ../../../../inc/themes/classic/search.inc:56
+#: ../../../../inc/themes/material-blue/account-link.inc:24
+#: ../../../../inc/themes/material-blue/account.inc:64
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:39
+msgid "Categoría"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:514
+msgid "Ordenar por Categoría"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:521
+msgid "Ordenar por Usuario"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:527
+#: ../../../../inc/themes/classic/account-editpass.inc:16
+#: ../../../../inc/themes/classic/account-request.inc:13
+#: ../../../../inc/themes/classic/account.inc:68
+#: ../../../../inc/themes/classic/datasearch-rows.inc:50
+#: ../../../../inc/themes/classic/search.inc:69
+#: ../../../../inc/themes/material-blue/account-editpass.inc:19
+#: ../../../../inc/themes/material-blue/account-link.inc:30
+#: ../../../../inc/themes/material-blue/account.inc:84
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:50
+#: ../../../../inc/themes/material-blue/request.inc:17
+msgid "URL / IP"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/AccountsSearch.class.php:528
+msgid "Ordenar por URL / IP"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:149
+#: ../../../../inc/SP/Core/Acl.class.php:156
+#: ../../../../inc/themes/classic/profiles.inc:65
+#: ../../../../inc/themes/material-blue/profiles.inc:84
+msgid "Encriptación"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:185
+msgid "Último backup"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:185
+msgid "No se encontraron backups"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:192
+msgid "Última exportación"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:192
+msgid "No se encontró archivo de exportación"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:194
+#: ../../../../inc/SP/Core/Acl.class.php:157
+#: ../../../../inc/themes/classic/backup.inc:6
+#: ../../../../inc/themes/material-blue/backup.inc:6
+msgid "Copia de Seguridad"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:216
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:146
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:151
+#: ../../../../inc/SP/Import/Import.class.php:97
+#: ../../../../inc/SP/Import/Migrate.class.php:366
+#: ../../../../inc/SP/Import/XmlImport.class.php:65
+#: ../../../../inc/SP/Import/XmlImport.class.php:66
msgid "Importar Cuentas"
msgstr ""
-#: ../../../../inc/CsvImportBase.class.php:141
-msgid "Error importando cuenta"
+#: ../../../../inc/SP/Controller/ConfigMgmt.class.php:238
+msgid "Información"
msgstr ""
-#: ../../../../inc/CsvImportBase.class.php:142
-#, php-format
-msgid "Error procesando línea %s"
+#: ../../../../inc/SP/Controller/Controller.class.php:191
+msgid "Opción no disponible"
msgstr ""
-#: ../../../../inc/CsvImportBase.class.php:145
-#, php-format
-msgid "Cuenta importada: %s"
+#: ../../../../inc/SP/Controller/Controller.class.php:191
+#: ../../../../inc/SP/Controller/Controller.class.php:192
+#: ../../../../inc/SP/Controller/Controller.class.php:193
+#: ../../../../inc/SP/Controller/Controller.class.php:194
+#: ../../../../inc/SP/Core/Init.class.php:267
+msgid "Consulte con el administrador"
msgstr ""
-#: ../../../../inc/CustomFields.class.php:276
-#: ../../../../web/AccountsMgmtC.class.php:301
-#: ../../../../inc/themes/classic/profiles.inc:107
-#: ../../../../inc/themes/material-blue/profiles.inc:124
-msgid "Campos Personalizados"
+#: ../../../../inc/SP/Controller/Controller.class.php:193
+msgid "No tiene permisos para acceder a esta página"
msgstr ""
-#: ../../../../inc/CustomFields.class.php:291
-msgid "Actualizando datos encriptados"
+#: ../../../../inc/SP/Controller/Controller.class.php:194
+msgid "No tiene permisos para realizar esta operación"
msgstr ""
-#: ../../../../inc/CustomFields.class.php:318
-msgid "Registros no actualizados"
+#: ../../../../inc/SP/Controller/Eventlog.class.php:102
+msgid "Registro de eventos vaciado"
msgstr ""
-#: ../../../../inc/CustomFieldsBase.class.php:86
-msgid "Texto"
+#: ../../../../inc/SP/Controller/Eventlog.class.php:104
+msgid "Error al vaciar el registro de eventos"
msgstr ""
-#: ../../../../inc/CustomFieldsBase.class.php:88
-msgid "Fecha"
+#: ../../../../inc/SP/Controller/Grids.class.php:85
+msgid "Buscar Categoría"
msgstr ""
-#: ../../../../inc/CustomFieldsBase.class.php:89
-msgid "Número"
+#: ../../../../inc/SP/Controller/Grids.class.php:115
+#: ../../../../inc/SP/Controller/Grids.class.php:116
+#: ../../../../inc/SP/Mgmt/Category.class.php:73
+msgid "Eliminar Categoría"
msgstr ""
-#: ../../../../inc/CustomFieldsBase.class.php:90
-#: ../../../../inc/themes/classic/passreset.inc:22
-#: ../../../../inc/themes/classic/users.inc:61
-#: ../../../../inc/themes/material-blue/users.inc:71
-msgid "Email"
+#: ../../../../inc/SP/Controller/Grids.class.php:143
+msgid "Gestión de Categorías"
msgstr ""
-#: ../../../../inc/CustomFieldsBase.class.php:91
-msgid "Teléfono"
+#: ../../../../inc/SP/Controller/Grids.class.php:179
+msgid "Buscar Cliente"
msgstr ""
-#: ../../../../inc/CustomFieldsBase.class.php:92
-msgid "Link"
-msgstr ""
-
-#: ../../../../inc/CustomFieldsBase.class.php:93
-msgid "Color"
-msgstr ""
-
-#: ../../../../inc/CustomFieldsBase.class.php:107
-#: ../../../../inc/themes/classic/profiles.inc:98
-#: ../../../../inc/themes/material-blue/profiles.inc:114
-msgid "Categorías"
-msgstr ""
-
-#: ../../../../inc/CustomFieldsBase.class.php:108
-#: ../../../../inc/themes/classic/profiles.inc:103
-#: ../../../../inc/themes/material-blue/profiles.inc:119
-msgid "Clientes"
-msgstr ""
-
-#: ../../../../inc/CustomFieldsBase.class.php:110
-#: ../../../../inc/themes/classic/account.inc:143
-#: ../../../../inc/themes/classic/profiles.inc:89
-#: ../../../../inc/themes/material-blue/account.inc:170
-#: ../../../../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:160
+#: ../../../../inc/SP/Controller/Grids.class.php:209
+#: ../../../../inc/SP/Controller/Grids.class.php:210
+#: ../../../../inc/SP/Mgmt/Customer.class.php:178
msgid "Eliminar Cliente"
msgstr ""
-#: ../../../../inc/DBConnectionFactory.class.php:83
-#: ../../../../inc/DBConnectionFactory.class.php:85
-#: ../../../../inc/DBConnectionFactory.class.php:99
-#: ../../../../inc/Installer.class.php:235
-#: ../../../../inc/Migrate.class.php:114
-msgid "No es posible conectar con la BD"
+#: ../../../../inc/SP/Controller/Grids.class.php:237
+msgid "Gestión de Clientes"
msgstr ""
-#: ../../../../inc/DBConnectionFactory.class.php:83
-#: ../../../../inc/DBConnectionFactory.class.php:85
-#: ../../../../inc/Installer.class.php:236
-#: ../../../../inc/Migrate.class.php:115
-msgid "Compruebe los datos de conexión"
+#: ../../../../inc/SP/Controller/Grids.class.php:252
+msgid "Buscar Campo"
msgstr ""
-#: ../../../../inc/Email.class.php:59 ../../../../inc/UserUtil.class.php:182
-msgid "N/D"
+#: ../../../../inc/SP/Controller/Grids.class.php:282
+#: ../../../../inc/SP/Controller/Grids.class.php:283
+msgid "Eliminar Campo"
msgstr ""
-#: ../../../../inc/Email.class.php:60 ../../../../web/UsersMgmtC.class.php:393
+#: ../../../../inc/SP/Controller/Grids.class.php:291
+#: ../../../../inc/themes/classic/customfields.inc:27
+#: ../../../../inc/themes/material-blue/customfields.inc:30
+msgid "Módulo"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids.class.php:312
+#: ../../../../inc/SP/Mgmt/CustomFields.class.php:313
+#: ../../../../inc/themes/classic/profiles.inc:107
+#: ../../../../inc/themes/material-blue/profiles.inc:131
+msgid "Campos Personalizados"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids.class.php:327
+msgid "Buscar Archivo"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids.class.php:334
+#: ../../../../inc/themes/material-blue/files.inc:23
+msgid "Ver Archivo"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids.class.php:344
+#: ../../../../inc/SP/Mgmt/Files.class.php:130
+#: ../../../../inc/themes/material-blue/files.inc:18
+msgid "Eliminar Archivo"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids.class.php:376
+msgid "Gestión de Archivos"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids.class.php:391
+msgid "Buscar Cuenta"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids.class.php:424
+msgid "Gestión de Cuentas"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids.class.php:439
+msgid "Buscar Usuario"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids.class.php:458
+#: ../../../../inc/SP/Controller/Grids.class.php:459
+msgid "Ver Detalles de Usuario"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids.class.php:480
+#: ../../../../inc/SP/Controller/Grids.class.php:481
+#: ../../../../inc/SP/Mgmt/User/UserBase.class.php:618
+msgid "Eliminar Usuario"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids.class.php:491
+#: ../../../../inc/SP/Controller/Grids.class.php:492
+msgid "Cambiar Clave de Usuario"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids.class.php:505
+msgid "Propiedades"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids.class.php:531
+msgid "Gestión de Usuarios"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids.class.php:546
+msgid "Buscar Grupo"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids.class.php:576
+#: ../../../../inc/SP/Controller/Grids.class.php:577
+#: ../../../../inc/SP/Mgmt/User/Groups.class.php:397
+msgid "Eliminar Grupo"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids.class.php:604
+msgid "Gestión de Grupos"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids.class.php:619
+msgid "Buscar Perfil"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids.class.php:638
+#: ../../../../inc/SP/Controller/Grids.class.php:639
+msgid "Ver Detalles de Perfil"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids.class.php:660
+#: ../../../../inc/SP/Controller/Grids.class.php:661
+#: ../../../../inc/SP/Mgmt/User/ProfileBase.class.php:562
+msgid "Eliminar Perfil"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids.class.php:687
+msgid "Gestión de Perfiles"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids.class.php:702
+msgid "Buscar Token"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids.class.php:721
+#: ../../../../inc/SP/Controller/Grids.class.php:722
+msgid "Ver token de Autorización"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids.class.php:753
+#: ../../../../inc/SP/Log/Email.class.php:68
#: ../../../../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"
+#: ../../../../inc/SP/Controller/Grids.class.php:772
+msgid "Gestión de Autorizaciones API"
msgstr ""
-#: ../../../../inc/Email.class.php:77
-msgid "Enviar Email"
+#: ../../../../inc/SP/Controller/Grids.class.php:787
+msgid "Buscar Enlace"
msgstr ""
-#: ../../../../inc/Email.class.php:81
-msgid "Correo enviado"
+#: ../../../../inc/SP/Controller/Grids.class.php:794
+#: ../../../../inc/SP/Controller/Grids.class.php:795
+msgid "Ver Enlace"
msgstr ""
-#: ../../../../inc/Email.class.php:83
-msgid "Error al enviar correo"
+#: ../../../../inc/SP/Controller/Grids.class.php:804
+#: ../../../../inc/SP/Controller/Grids.class.php:805
+msgid "Renovar Enlace"
msgstr ""
-#: ../../../../inc/Email.class.php:87
-msgid "Destinatario"
+#: ../../../../inc/SP/Controller/Grids.class.php:815
+#: ../../../../inc/SP/Controller/Grids.class.php:816
+#: ../../../../inc/SP/Mgmt/PublicLinkBase.class.php:275
+msgid "Eliminar Enlace"
msgstr ""
-#: ../../../../inc/Email.class.php:90
-msgid "CC"
+#: ../../../../inc/SP/Controller/Grids.class.php:825
+#: ../../../../inc/themes/material-blue/publiclinks.inc:10
+msgid "Fecha Creación"
msgstr ""
-#: ../../../../inc/FileImport.class.php:105
-msgid "Archivo no subido correctamente"
+#: ../../../../inc/SP/Controller/Grids.class.php:826
+#: ../../../../inc/themes/material-blue/publiclinks.inc:14
+msgid "Fecha Caducidad"
msgstr ""
-#: ../../../../inc/FileImport.class.php:105
-msgid "Verifique los permisos del usuario del servidor web"
+#: ../../../../inc/SP/Controller/Grids.class.php:828
+#: ../../../../inc/themes/material-blue/publiclinks.inc:22
+msgid "Notificar"
msgstr ""
-#: ../../../../inc/FileImport.class.php:116
-msgid "Compruebe la extensión del archivo"
+#: ../../../../inc/SP/Controller/Grids.class.php:829
+#: ../../../../inc/themes/classic/account-details.inc:3
+#: ../../../../inc/themes/material-blue/account-details.inc:3
+#: ../../../../inc/themes/material-blue/publiclinks.inc:26
+msgid "Visitas"
msgstr ""
-#: ../../../../inc/FileImport.class.php:132
-msgid "Compruebe la configuración de PHP para subir archivos"
+#: ../../../../inc/SP/Controller/Grids.class.php:851
+msgid "Gestión de Enlaces"
msgstr ""
-#: ../../../../inc/FileImport.class.php:150
-#: ../../../../inc/FileImport.class.php:168
-msgid "Compruebe los permisos del directorio temporal"
+#: ../../../../inc/SP/Controller/Main.class.php:170
+#: ../../../../inc/themes/classic/inc/Icons.class.php:53
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:51
+msgid "Admin Aplicación"
msgstr ""
-#: ../../../../inc/Files.class.php:111
-#: ../../../../inc/themes/classic/files.inc:15
-#: ../../../../inc/themes/material-blue/files.inc:16
-msgid "Eliminar Archivo"
+#: ../../../../inc/SP/Controller/Main.class.php:188
+msgid "Buscar"
msgstr ""
-#: ../../../../inc/Groups.class.php:155
-msgid "Error al añadir los usuarios del grupo"
+#: ../../../../inc/SP/Controller/Main.class.php:200
+msgid "Usuarios y Accesos"
msgstr ""
-#: ../../../../inc/Groups.class.php:256
-msgid "Error al actualizar los usuarios del grupo"
+#: ../../../../inc/SP/Controller/Main.class.php:206
+msgid "Elementos y Personalización"
msgstr ""
-#: ../../../../inc/Groups.class.php:369
-#: ../../../../web/UsersMgmtC.class.php:210
-msgid "Eliminar Grupo"
+#: ../../../../inc/SP/Controller/Main.class.php:218
+#: ../../../../inc/themes/classic/eventlog.inc:2
+#: ../../../../inc/themes/material-blue/eventlog.inc:4
+msgid "Registro de Eventos"
msgstr ""
-#: ../../../../inc/Groups.class.php:372
-msgid "Error al eliminar los usuarios del grupo"
+#: ../../../../inc/SP/Controller/Main.class.php:239
+msgid "Nuevo estilo visual basado en Material Design Lite by Google"
msgstr ""
-#: ../../../../inc/Import.class.php:109
-msgid "Tipo mime no soportado"
+#: ../../../../inc/SP/Controller/Main.class.php:240
+msgid "Usuarios en múltiples grupos"
msgstr ""
-#: ../../../../inc/Import.class.php:110
-msgid "Compruebe el formato del archivo"
+#: ../../../../inc/SP/Controller/Main.class.php:241
+msgid "Previsualización de imágenes"
msgstr ""
-#: ../../../../inc/Import.class.php:124 ../../../../inc/Import.class.php:127
-#: ../../../../inc/Migrate.class.php:91
-msgid "Importación finalizada"
+#: ../../../../inc/SP/Controller/Main.class.php:242
+msgid "Mostrar claves como imágenes"
msgstr ""
-#: ../../../../inc/Init.class.php:182
+#: ../../../../inc/SP/Controller/Main.class.php:243
+msgid "Campos personalizados"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Main.class.php:244
+msgid "API de consultas"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Main.class.php:245
+#: ../../../../inc/themes/classic/login-2fa.inc:9
+#: ../../../../inc/themes/material-blue/login-2fa.inc:7
+#: ../../../../inc/themes/material-blue/preferences-security.inc:13
+msgid "Autentificación en 2 pasos"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Main.class.php:246
+msgid "Complejidad de generador de claves"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Main.class.php:247
+msgid "Consultas especiales"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Main.class.php:248
+msgid "Exportación a XML"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Main.class.php:249
+msgid "Clave maestra temporal"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Main.class.php:250
+msgid "Importación de cuentas desde sysPass, KeePass, KeePassX y CSV"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Main.class.php:251
+msgid "Optimización del código y mayor rapidez de carga"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Main.class.php:252
+msgid "Mejoras de seguridad en XSS e inyección SQL"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Main.class.php:293
+msgid "La version de PHP es vulnerable al ataque NULL Byte (CVE-2006-7243)"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Main.class.php:294
+msgid "Actualice la versión de PHP para usar sysPass de forma segura"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Main.class.php:301
+msgid "No se encuentra el generador de números aleatorios."
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Main.class.php:302
+msgid ""
+"Sin esta función un atacante puede utilizar su cuenta al resetear la clave"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Main.class.php:321
+msgid "Instalación finalizada"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Main.class.php:322
+msgid "Pulse aquí para acceder"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Main.class.php:419
+msgid "Descargar nueva versión"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Main.class.php:430
+msgid "Avisos de sysPass"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/UsersPrefs.class.php:94
+#: ../../../../inc/themes/classic/mail.inc:63
+#: ../../../../inc/themes/material-blue/mail.inc:88
+msgid "Seguridad"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/UsersPrefs.class.php:132
+#: ../../../../inc/themes/classic/sessionbar.inc:9
+msgid "Preferencias"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Acl.class.php:120
+msgid "Denegado acceso a"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Acl.class.php:134
+msgid "Buscar Cuentas"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Acl.class.php:135
+msgid "Ver Cuenta"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Acl.class.php:139
+msgid "Editar Clave de Cuenta"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Acl.class.php:140
+#: ../../../../inc/themes/classic/profiles.inc:28
+#: ../../../../inc/themes/material-blue/profiles.inc:42
+msgid "Ver Historial"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Acl.class.php:143
+#: ../../../../inc/themes/classic/account-files.inc:3
+#: ../../../../inc/themes/classic/profiles.inc:50
+#: ../../../../inc/themes/material-blue/account-files.inc:3
+#: ../../../../inc/themes/material-blue/config-files.inc:4
+#: ../../../../inc/themes/material-blue/profiles.inc:62
+msgid "Archivos"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Acl.class.php:144
+msgid "Peticiones"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Acl.class.php:145
+msgid "Gestión Aplicación"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Acl.class.php:146
+msgid "Gestión Categorías"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Acl.class.php:147
+msgid "Gestión Clientes"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Acl.class.php:148
+msgid "Gestión Campos Personalizados"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Acl.class.php:149
+msgid "Gestión Autorizaciones API"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Acl.class.php:150
+#: ../../../../inc/SP/Core/Acl.class.php:151
+msgid "Gestión Usuarios"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Acl.class.php:152
+msgid "Gestión Grupos"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Acl.class.php:153
+msgid "Gestión Perfiles"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Acl.class.php:155
+msgid "Configuración General"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Acl.class.php:158
+msgid "Exportar"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Acl.class.php:159
+#: ../../../../inc/themes/classic/profiles.inc:74
+#: ../../../../inc/themes/material-blue/profiles.inc:94
+msgid "Importar"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Backup.class.php:51
+#: ../../../../inc/themes/classic/backup.inc:56
+msgid "Realizar Backup"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Backup.class.php:79
+msgid "Copia de la aplicación y base de datos realizada correctamente"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Backup.class.php:197
+msgid "Esta operación sólo es posible en entornos Linux"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Backup.class.php:199
+msgid "Error al realizar backup en modo compatibilidad"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Backup.class.php:253
+#: ../../../../inc/SP/Core/XmlExport.class.php:487
+msgid "No es posible crear el directorio de backups"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Backup.class.php:258
+#: ../../../../inc/SP/Core/XmlExport.class.php:492
+msgid "Compruebe los permisos del directorio de backups"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Crypt.class.php:132
+#: ../../../../inc/SP/Log/Email.class.php:154
+#: ../../../../inc/themes/classic/inc/Icons.class.php:70
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:68
+msgid "Aviso"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Crypt.class.php:132
+msgid ""
+"Se ha regenerado el HASH de clave maestra. No es necesaria ninguna acción."
+msgstr ""
+
+#: ../../../../inc/SP/Core/Crypt.class.php:196
+msgid "No se puede usar el módulo de encriptación"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Crypt.class.php:207
+msgid "Error al generar datos cifrados"
+msgstr ""
+
+#: ../../../../inc/SP/Core/CryptPKI.class.php:47
+msgid "No es posible generar las claves RSA"
+msgstr ""
+
+#: ../../../../inc/SP/Core/CryptPKI.class.php:113
+#: ../../../../inc/SP/Core/CryptPKI.class.php:115
+#: ../../../../inc/SP/Core/CryptPKI.class.php:146
+#: ../../../../inc/SP/Core/CryptPKI.class.php:148
+msgid "El archivo de clave no existe"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Init.class.php:135
msgid "Error en la verificación de la base de datos"
msgstr ""
-#: ../../../../inc/Init.class.php:278
+#: ../../../../inc/SP/Core/Init.class.php:263
msgid "Sesion"
msgstr ""
-#: ../../../../inc/Init.class.php:278 ../../../../inc/Init.class.php:282
+#: ../../../../inc/SP/Core/Init.class.php:263
+#: ../../../../inc/SP/Core/Init.class.php:267
msgid "La sesión no puede ser inicializada"
msgstr ""
-#: ../../../../inc/Init.class.php:366
+#: ../../../../inc/SP/Core/Init.class.php:364
msgid "El directorio \"/config\" no existe"
msgstr ""
-#: ../../../../inc/Init.class.php:371
+#: ../../../../inc/SP/Core/Init.class.php:369
msgid "No es posible escribir en el directorio \"config\""
msgstr ""
-#: ../../../../inc/Init.class.php:379
+#: ../../../../inc/SP/Core/Init.class.php:376
msgid "Los permisos del directorio \"/config\" son incorrectos"
msgstr ""
-#: ../../../../inc/Init.class.php:379
+#: ../../../../inc/SP/Core/Init.class.php:376
msgid "Actual:"
msgstr ""
-#: ../../../../inc/Init.class.php:379
+#: ../../../../inc/SP/Core/Init.class.php:376
msgid "Necesario: 750"
msgstr ""
-#: ../../../../inc/Init.class.php:428
+#: ../../../../inc/SP/Core/Init.class.php:425
msgid "Aplicación en mantenimiento"
msgstr ""
-#: ../../../../inc/Init.class.php:428
+#: ../../../../inc/SP/Core/Init.class.php:425
msgid "En breve estará operativa"
msgstr ""
-#: ../../../../inc/Init.class.php:465
+#: ../../../../inc/SP/Core/Init.class.php:462
msgid "Finalizar sesión"
msgstr ""
-#: ../../../../inc/Init.class.php:467
+#: ../../../../inc/SP/Core/Init.class.php:464
msgid "Tiempo inactivo"
msgstr ""
-#: ../../../../inc/Init.class.php:468
+#: ../../../../inc/SP/Core/Init.class.php:465
msgid "Tiempo total"
msgstr ""
-#: ../../../../inc/Init.class.php:507
+#: ../../../../inc/SP/Core/Init.class.php:504
msgid "La aplicación necesita actualizarse"
msgstr ""
-#: ../../../../inc/Init.class.php:507
+#: ../../../../inc/SP/Core/Init.class.php:504
#, php-format
msgid "Si es un administrador pulse en el enlace: %s"
msgstr ""
-#: ../../../../inc/Init.class.php:507
+#: ../../../../inc/SP/Core/Init.class.php:504
+#: ../../../../inc/themes/classic/inc/Icons.class.php:57
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:55
#: ../../../../inc/themes/classic/upgrade.inc:20
-#: ../../../../inc/themes/material-blue/upgrade.inc:22
+#: ../../../../inc/themes/material-blue/upgrade.inc:26
msgid "Actualizar"
msgstr ""
-#: ../../../../inc/Init.class.php:538
+#: ../../../../inc/SP/Core/Init.class.php:534
+#: ../../../../inc/themes/material-blue/upgrade.inc:4
msgid "Actualización"
msgstr ""
-#: ../../../../inc/Init.class.php:539
+#: ../../../../inc/SP/Core/Init.class.php:535
msgid "Actualización de versión realizada."
msgstr ""
-#: ../../../../inc/Init.class.php:540
-#: ../../../../inc/themes/classic/info.inc:33
-#: ../../../../inc/themes/material-blue/info.inc:33
-msgid "Versión"
-msgstr ""
-
-#: ../../../../inc/Installer.class.php:127
+#: ../../../../inc/SP/Core/Installer.class.php:136
msgid "Indicar nombre de usuario admin"
msgstr ""
-#: ../../../../inc/Installer.class.php:128
+#: ../../../../inc/SP/Core/Installer.class.php:137
msgid "Usuario admin para acceso a la aplicación"
msgstr ""
-#: ../../../../inc/Installer.class.php:132
+#: ../../../../inc/SP/Core/Installer.class.php:141
msgid "Indicar la clave de admin"
msgstr ""
-#: ../../../../inc/Installer.class.php:133
+#: ../../../../inc/SP/Core/Installer.class.php:142
msgid "Clave del usuario admin de la aplicación"
msgstr ""
-#: ../../../../inc/Installer.class.php:137
+#: ../../../../inc/SP/Core/Installer.class.php:146
msgid "Indicar la clave maestra"
msgstr ""
-#: ../../../../inc/Installer.class.php:138
+#: ../../../../inc/SP/Core/Installer.class.php:147
msgid "Clave maestra para encriptar las claves"
msgstr ""
-#: ../../../../inc/Installer.class.php:142
+#: ../../../../inc/SP/Core/Installer.class.php:151
msgid "Clave maestra muy corta"
msgstr ""
-#: ../../../../inc/Installer.class.php:143
+#: ../../../../inc/SP/Core/Installer.class.php:152
msgid "La longitud de la clave maestra ha de ser mayor de 11 caracteres"
msgstr ""
-#: ../../../../inc/Installer.class.php:147
+#: ../../../../inc/SP/Core/Installer.class.php:156
msgid "Indicar el usuario de la BBDD"
msgstr ""
-#: ../../../../inc/Installer.class.php:148
+#: ../../../../inc/SP/Core/Installer.class.php:157
msgid "Usuario con permisos de administrador de la Base de Datos"
msgstr ""
-#: ../../../../inc/Installer.class.php:152
+#: ../../../../inc/SP/Core/Installer.class.php:161
msgid "Indicar la clave de la BBDD"
msgstr ""
-#: ../../../../inc/Installer.class.php:153
+#: ../../../../inc/SP/Core/Installer.class.php:162
msgid "Clave del usuario administrador de la Base de Datos"
msgstr ""
-#: ../../../../inc/Installer.class.php:157
+#: ../../../../inc/SP/Core/Installer.class.php:166
msgid "Indicar el nombre de la BBDD"
msgstr ""
-#: ../../../../inc/Installer.class.php:158
+#: ../../../../inc/SP/Core/Installer.class.php:167
msgid "Nombre para la BBDD de la aplicación pej. syspass"
msgstr ""
-#: ../../../../inc/Installer.class.php:162
+#: ../../../../inc/SP/Core/Installer.class.php:171
msgid "El nombre de la BBDD no puede contener \".\""
msgstr ""
-#: ../../../../inc/Installer.class.php:163
+#: ../../../../inc/SP/Core/Installer.class.php:172
msgid "Elimine los puntos del nombre de la Base de Datos"
msgstr ""
-#: ../../../../inc/Installer.class.php:167
+#: ../../../../inc/SP/Core/Installer.class.php:176
msgid "Indicar el servidor de la BBDD"
msgstr ""
-#: ../../../../inc/Installer.class.php:168
+#: ../../../../inc/SP/Core/Installer.class.php:177
msgid "Servidor donde se instalará la Base de Datos"
msgstr ""
-#: ../../../../inc/Installer.class.php:267
+#: ../../../../inc/SP/Core/Installer.class.php:245
+#: ../../../../inc/SP/Import/Migrate.class.php:123
+#: ../../../../inc/SP/Storage/DBConnectionFactory.class.php:86
+#: ../../../../inc/SP/Storage/DBConnectionFactory.class.php:88
+#: ../../../../inc/SP/Storage/DBConnectionFactory.class.php:102
+msgid "No es posible conectar con la BD"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Installer.class.php:246
+#: ../../../../inc/SP/Import/Migrate.class.php:124
+#: ../../../../inc/SP/Storage/DBConnectionFactory.class.php:86
+#: ../../../../inc/SP/Storage/DBConnectionFactory.class.php:88
+msgid "Compruebe los datos de conexión"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Installer.class.php:276
msgid "No es posible comprobar el usuario de sysPass"
msgstr ""
-#: ../../../../inc/Installer.class.php:268
+#: ../../../../inc/SP/Core/Installer.class.php:277
msgid "Compruebe los permisos del usuario de conexión a la BD"
msgstr ""
-#: ../../../../inc/Installer.class.php:319
+#: ../../../../inc/SP/Core/Installer.class.php:328
msgid "El usuario de MySQL ya existe"
msgstr ""
-#: ../../../../inc/Installer.class.php:320
+#: ../../../../inc/SP/Core/Installer.class.php:329
msgid "Indique un nuevo usuario o elimine el existente"
msgstr ""
-#: ../../../../inc/Installer.class.php:333
+#: ../../../../inc/SP/Core/Installer.class.php:342
msgid "La BBDD ya existe"
msgstr ""
-#: ../../../../inc/Installer.class.php:334
+#: ../../../../inc/SP/Core/Installer.class.php:343
msgid "Indique una nueva Base de Datos o elimine la existente"
msgstr ""
-#: ../../../../inc/Installer.class.php:343
-#: ../../../../inc/Installer.class.php:414
+#: ../../../../inc/SP/Core/Installer.class.php:352
+#: ../../../../inc/SP/Core/Installer.class.php:423
msgid "Error al crear la BBDD"
msgstr ""
-#: ../../../../inc/Installer.class.php:344
-#: ../../../../inc/Installer.class.php:355
+#: ../../../../inc/SP/Core/Installer.class.php:353
+#: ../../../../inc/SP/Core/Installer.class.php:364
msgid "Verifique los permisos del usuario de la Base de Datos"
msgstr ""
-#: ../../../../inc/Installer.class.php:354
+#: ../../../../inc/SP/Core/Installer.class.php:363
msgid "Error al establecer permisos de la BBDD"
msgstr ""
-#: ../../../../inc/Installer.class.php:387
+#: ../../../../inc/SP/Core/Installer.class.php:395
msgid "El archivo de estructura de la BBDD no existe"
msgstr ""
-#: ../../../../inc/Installer.class.php:388
+#: ../../../../inc/SP/Core/Installer.class.php:396
msgid "No es posible crear la BBDD de la aplicación. Descárguela de nuevo."
msgstr ""
-#: ../../../../inc/Installer.class.php:396
+#: ../../../../inc/SP/Core/Installer.class.php:404
msgid "Error al seleccionar la BBDD"
msgstr ""
-#: ../../../../inc/Installer.class.php:397
+#: ../../../../inc/SP/Core/Installer.class.php:405
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:415
+#: ../../../../inc/SP/Core/Installer.class.php:424
msgid "Error al crear la estructura de la Base de Datos."
msgstr ""
-#: ../../../../inc/Installer.class.php:438
+#: ../../../../inc/SP/Core/Installer.class.php:447
msgid "Error al crear el grupo \"admin\""
msgstr ""
-#: ../../../../inc/Installer.class.php:439
-#: ../../../../inc/Installer.class.php:472
-#: ../../../../inc/Installer.class.php:489
-#: ../../../../inc/Installer.class.php:502
+#: ../../../../inc/SP/Core/Installer.class.php:448
+#: ../../../../inc/SP/Core/Installer.class.php:481
+#: ../../../../inc/SP/Core/Installer.class.php:498
+#: ../../../../inc/SP/Core/Installer.class.php:511
msgid "Informe al desarrollador"
msgstr ""
-#: ../../../../inc/Installer.class.php:471
+#: ../../../../inc/SP/Core/Installer.class.php:480
msgid "Error al crear el perfil \"admin\""
msgstr ""
-#: ../../../../inc/Installer.class.php:488
+#: ../../../../inc/SP/Core/Installer.class.php:497
msgid "Error al crear el usuario \"admin\""
msgstr ""
-#: ../../../../inc/Installer.class.php:501
+#: ../../../../inc/SP/Core/Installer.class.php:510
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:212 ../../../../inc/Ldap.class.php:218
-#: ../../../../inc/Ldap.class.php:225 ../../../../inc/Ldap.class.php:230
-#: ../../../../inc/Ldap.class.php:235 ../../../../inc/Ldap.class.php:240
-msgid "Error al buscar RDN de grupo"
-msgstr ""
-
-#: ../../../../inc/Ldap.class.php:289 ../../../../inc/Ldap.class.php:295
-#: ../../../../inc/Ldap.class.php:310 ../../../../inc/Ldap.class.php:315
-msgid "Error al buscar el DN del usuario"
-msgstr ""
-
-#: ../../../../inc/Ldap.class.php:302 ../../../../inc/Ldap.class.php:307
-msgid "Error al localizar el usuario en LDAP"
-msgstr ""
-
-#: ../../../../inc/Ldap.class.php:384 ../../../../inc/Ldap.class.php:390
-#: ../../../../inc/LdapADS.class.php:103 ../../../../inc/LdapADS.class.php:108
-msgid "Error al buscar el grupo de usuarios"
-msgstr ""
-
-#: ../../../../inc/Ldap.class.php:397
-msgid "Usuario verificado en grupo"
-msgstr ""
-
-#: ../../../../inc/LdapADS.class.php:112 ../../../../inc/LdapADS.class.php:117
-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:98
-#: ../../../../inc/themes/material-blue/eventlog.inc:99
-msgid "Vaciar registro de eventos"
-msgstr ""
-
-#: ../../../../inc/Migrate.class.php:51
-msgid "Faltan parámetros"
-msgstr ""
-
-#: ../../../../inc/Migrate.class.php:148
-msgid "La versión no es compatible"
-msgstr ""
-
-#: ../../../../inc/Migrate.class.php:149
-msgid "Actualice a la última versión de phpPMS"
-msgstr ""
-
-#: ../../../../inc/Migrate.class.php:167
-msgid "Error al obtener la configuración"
-msgstr ""
-
-#: ../../../../inc/Migrate.class.php:210 ../../../../inc/Migrate.class.php:223
-msgid "Error al vaciar tabla"
-msgstr ""
-
-#: ../../../../inc/Migrate.class.php:228
-msgid "Usuario actual no es administrador de la aplicación"
-msgstr ""
-
-#: ../../../../inc/Migrate.class.php:273
-msgid "No es posible crear el cliente"
-msgstr ""
-
-#: ../../../../inc/Migrate.class.php:274
-msgid "Contacte con el desarrollador"
-msgstr ""
-
-#: ../../../../inc/Migrate.class.php:278
-msgid "Importar Clientes"
-msgstr ""
-
-#: ../../../../inc/Migrate.class.php:280 ../../../../inc/Migrate.class.php:350
-#: ../../../../inc/Migrate.class.php:451 ../../../../inc/Migrate.class.php:524
-#: ../../../../inc/Migrate.class.php:632 ../../../../inc/Migrate.class.php:697
-#: ../../../../inc/Migrate.class.php:771 ../../../../inc/Migrate.class.php:861
-#: ../../../../inc/Migrate.class.php:932
-msgid "Registros"
-msgstr ""
-
-#: ../../../../inc/Migrate.class.php:302
-msgid "Error al obtener los clientes"
-msgstr ""
-
-#: ../../../../inc/Migrate.class.php:344
-msgid "Error al obtener cuentas"
-msgstr ""
-
-#: ../../../../inc/Migrate.class.php:373
-msgid "Cliente no encontrado"
-msgstr ""
-
-#: ../../../../inc/Migrate.class.php:416
-msgid "Error al migrar cuenta"
-msgstr ""
-
-#: ../../../../inc/Migrate.class.php:445
-msgid "Error al obtener los grupos de cuentas"
-msgstr ""
-
-#: ../../../../inc/Migrate.class.php:449
-msgid "Importar Grupos de Cuentas"
-msgstr ""
-
-#: ../../../../inc/Migrate.class.php:471
-msgid "Error al crear grupos de cuentas"
-msgstr ""
-
-#: ../../../../inc/Migrate.class.php:518
-msgid "Error al obtener el historico de cuentas"
-msgstr ""
-
-#: ../../../../inc/Migrate.class.php:522
-msgid "Importar Histórico de Cuentas"
-msgstr ""
-
-#: ../../../../inc/Migrate.class.php:591
-msgid "Error al crear historico de cuentas"
-msgstr ""
-
-#: ../../../../inc/Migrate.class.php:626
-msgid "Error al obtener los archivos de cuentas"
-msgstr ""
-
-#: ../../../../inc/Migrate.class.php:630
-msgid "Importar Archivos de Cuentas"
-msgstr ""
-
-#: ../../../../inc/Migrate.class.php:662
-msgid "Error al crear archivos de cuentas"
-msgstr ""
-
-#: ../../../../inc/Migrate.class.php:691
-msgid "Error al obtener las categorías de cuentas"
-msgstr ""
-
-#: ../../../../inc/Migrate.class.php:695
-msgid "Importar Categorías de Cuentas"
-msgstr ""
-
-#: ../../../../inc/Migrate.class.php:717
-msgid "Error al crear categorías de cuentas"
-msgstr ""
-
-#: ../../../../inc/Migrate.class.php:765
-msgid "Error al obtener los usuarios"
-msgstr ""
-
-#: ../../../../inc/Migrate.class.php:769
-msgid "Importar Usuarios"
-msgstr ""
-
-#: ../../../../inc/Migrate.class.php:826
-msgid "Error al crear usuarios"
-msgstr ""
-
-#: ../../../../inc/Migrate.class.php:855
-msgid "Error al obtener los grupos de usuarios"
-msgstr ""
-
-#: ../../../../inc/Migrate.class.php:859
-msgid "Importar Grupos de Usuarios"
-msgstr ""
-
-#: ../../../../inc/Migrate.class.php:885
-msgid "Error al crear los grupos de usuarios"
-msgstr ""
-
-#: ../../../../inc/Migrate.class.php:930
-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:275
-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/Template.class.php:91
+#: ../../../../inc/SP/Core/Template.class.php:113
+#: ../../../../inc/SP/Core/Template.class.php:114
+#: ../../../../inc/SP/Html/DataGrid/DataGridBase.class.php:222
#, php-format
msgid "No es posible obtener la plantilla \"%s\" : %s"
msgstr ""
-#: ../../../../inc/Template.class.php:130
+#: ../../../../inc/SP/Core/Template.class.php:152
#, php-format
msgid "No es posible obtener la variable \"%s\""
msgstr ""
-#: ../../../../inc/Template.class.php:173
+#: ../../../../inc/SP/Core/Template.class.php:195
#, php-format
msgid "No es posible destruir la variable \"%s\""
msgstr ""
-#: ../../../../inc/Upgrade.class.php:51
+#: ../../../../inc/SP/Core/Upgrade.class.php:59
msgid "Error al aplicar la actualización de la Base de Datos"
msgstr ""
-#: ../../../../inc/Upgrade.class.php:52 ../../../../inc/Upgrade.class.php:58
+#: ../../../../inc/SP/Core/Upgrade.class.php:60
+#: ../../../../inc/SP/Core/Upgrade.class.php:66
msgid "Compruebe el registro de eventos para más detalles"
msgstr ""
-#: ../../../../inc/Upgrade.class.php:52 ../../../../inc/Upgrade.class.php:58
+#: ../../../../inc/SP/Core/Upgrade.class.php:60
+#: ../../../../inc/SP/Core/Upgrade.class.php:66
#: ../../../../inc/themes/classic/login.inc:32
-#: ../../../../inc/themes/material-blue/2fa.inc:24
+#: ../../../../inc/themes/material-blue/login-2fa.inc:24
#: ../../../../inc/themes/material-blue/login.inc:65
msgid "Acceder"
msgstr ""
-#: ../../../../inc/Upgrade.class.php:57
+#: ../../../../inc/SP/Core/Upgrade.class.php:65
msgid "Error al aplicar la actualización auxiliar"
msgstr ""
-#: ../../../../inc/Upgrade.class.php:74
+#: ../../../../inc/SP/Core/Upgrade.class.php:82
msgid "Actualizar BBDD"
msgstr ""
-#: ../../../../inc/Upgrade.class.php:127
+#: ../../../../inc/SP/Core/Upgrade.class.php:143
msgid "No es necesario actualizar la Base de Datos."
msgstr ""
-#: ../../../../inc/Upgrade.class.php:135
+#: ../../../../inc/SP/Core/Upgrade.class.php:155
msgid "Error al aplicar la actualización de la Base de Datos."
msgstr ""
-#: ../../../../inc/Upgrade.class.php:144
+#: ../../../../inc/SP/Core/Upgrade.class.php:164
msgid "Actualización de la Base de Datos realizada correctamente."
msgstr ""
-#: ../../../../inc/Upgrade.class.php:221
+#: ../../../../inc/SP/Core/Upgrade.class.php:241
msgid "Actualizar Configuración"
msgstr ""
-#: ../../../../inc/Upgrade.class.php:221
+#: ../../../../inc/SP/Core/Upgrade.class.php:241
msgid "Actualización de la Configuración realizada correctamente."
msgstr ""
-#: ../../../../inc/UserBase.class.php:388
-#: ../../../../inc/UserBase.class.php:532
+#: ../../../../inc/SP/Core/XmlExport.class.php:125
+msgid "Exportar XML"
+msgstr ""
+
+#: ../../../../inc/SP/Core/XmlExport.class.php:138
+msgid "Error al realizar la exportación de cuentas"
+msgstr ""
+
+#: ../../../../inc/SP/Core/XmlExport.class.php:146
+msgid "Exportación de cuentas realizada correctamente"
+msgstr ""
+
+#: ../../../../inc/SP/Core/XmlExport.class.php:432
+msgid "Error al crear el archivo XML"
+msgstr ""
+
+#: ../../../../inc/SP/Http/XMLRPCResponseParse.class.php:68
+msgid "Respuesta XML-RPC inválida"
+msgstr ""
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:115
+#, php-format
+msgid "El número de campos es incorrecto (%d)"
+msgstr ""
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:116
+#, php-format
+msgid "Compruebe el formato del archivo CSV en línea %s"
+msgstr ""
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:147
+msgid "Error importando cuenta"
+msgstr ""
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:148
+#, php-format
+msgid "Error procesando línea %s"
+msgstr ""
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:151
+#, php-format
+msgid "Cuenta importada: %s"
+msgstr ""
+
+#: ../../../../inc/SP/Import/FileImport.class.php:108
+msgid "Archivo no subido correctamente"
+msgstr ""
+
+#: ../../../../inc/SP/Import/FileImport.class.php:108
+msgid "Verifique los permisos del usuario del servidor web"
+msgstr ""
+
+#: ../../../../inc/SP/Import/FileImport.class.php:119
+msgid "Compruebe la extensión del archivo"
+msgstr ""
+
+#: ../../../../inc/SP/Import/FileImport.class.php:135
+msgid "Compruebe la configuración de PHP para subir archivos"
+msgstr ""
+
+#: ../../../../inc/SP/Import/FileImport.class.php:153
+#: ../../../../inc/SP/Import/FileImport.class.php:171
+msgid "Compruebe los permisos del directorio temporal"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Import.class.php:115
+msgid "Tipo mime no soportado"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Import.class.php:116
+msgid "Compruebe el formato del archivo"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Import.class.php:126
+#: ../../../../inc/themes/classic/inc/Icons.class.php:66
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:64
+#: ../../../../inc/themes/classic/backup.inc:47
+#: ../../../../inc/themes/classic/backup.inc:51
+#: ../../../../inc/themes/classic/backup.inc:115
+#: ../../../../inc/themes/classic/backup.inc:119
+#: ../../../../inc/themes/classic/encryption.inc:90
+#: ../../../../inc/themes/classic/encryption.inc:94
+#: ../../../../inc/themes/classic/encryption.inc:159
+#: ../../../../inc/themes/classic/encryption.inc:163
+#: ../../../../inc/themes/classic/import.inc:12
+#: ../../../../inc/themes/classic/import.inc:33
+#: ../../../../inc/themes/classic/import.inc:86
+#: ../../../../inc/themes/classic/import.inc:90
+#: ../../../../inc/themes/classic/import.inc:117
+#: ../../../../inc/themes/classic/import.inc:139
+#: ../../../../inc/themes/classic/import.inc:153
+#: ../../../../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/classic/wiki.inc:107
+#: ../../../../inc/themes/classic/wiki.inc:127
+#: ../../../../inc/themes/classic/wiki.inc:150
+#: ../../../../inc/themes/classic/wiki.inc:173
+#: ../../../../inc/themes/classic/wiki.inc:200
+#: ../../../../inc/themes/material-blue/backup.inc:53
+#: ../../../../inc/themes/material-blue/encryption.inc:110
+#: ../../../../inc/themes/material-blue/encryption.inc:184
+#: ../../../../inc/themes/material-blue/import.inc:103
+#: ../../../../inc/themes/material-blue/js-common.inc:11
+msgid "Ayuda"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Import.class.php:133
+#: ../../../../inc/SP/Import/Import.class.php:139
+#: ../../../../inc/SP/Import/Migrate.class.php:100
+msgid "Importación finalizada"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Migrate.class.php:60
+msgid "Faltan parámetros"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Migrate.class.php:157
+msgid "La versión no es compatible"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Migrate.class.php:158
+msgid "Actualice a la última versión de phpPMS"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Migrate.class.php:176
+msgid "Error al obtener la configuración"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Migrate.class.php:222
+#: ../../../../inc/SP/Import/Migrate.class.php:239
+msgid "Error al vaciar tabla"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Migrate.class.php:244
+msgid "Usuario actual no es administrador de la aplicación"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Migrate.class.php:291
+msgid "No es posible crear el cliente"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Migrate.class.php:292
+msgid "Contacte con el desarrollador"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Migrate.class.php:296
+msgid "Importar Clientes"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Migrate.class.php:298
+#: ../../../../inc/SP/Import/Migrate.class.php:368
+#: ../../../../inc/SP/Import/Migrate.class.php:471
+#: ../../../../inc/SP/Import/Migrate.class.php:548
+#: ../../../../inc/SP/Import/Migrate.class.php:658
+#: ../../../../inc/SP/Import/Migrate.class.php:725
+#: ../../../../inc/SP/Import/Migrate.class.php:801
+#: ../../../../inc/SP/Import/Migrate.class.php:893
+#: ../../../../inc/SP/Import/Migrate.class.php:966
+msgid "Registros"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Migrate.class.php:320
+msgid "Error al obtener los clientes"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Migrate.class.php:362
+msgid "Error al obtener cuentas"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Migrate.class.php:391
+msgid "Cliente no encontrado"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Migrate.class.php:436
+msgid "Error al migrar cuenta"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Migrate.class.php:465
+msgid "Error al obtener los grupos de cuentas"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Migrate.class.php:469
+msgid "Importar Grupos de Cuentas"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Migrate.class.php:495
+msgid "Error al crear grupos de cuentas"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Migrate.class.php:542
+msgid "Error al obtener el historico de cuentas"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Migrate.class.php:546
+msgid "Importar Histórico de Cuentas"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Migrate.class.php:617
+msgid "Error al crear historico de cuentas"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Migrate.class.php:652
+msgid "Error al obtener los archivos de cuentas"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Migrate.class.php:656
+msgid "Importar Archivos de Cuentas"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Migrate.class.php:690
+msgid "Error al crear archivos de cuentas"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Migrate.class.php:719
+msgid "Error al obtener las categorías de cuentas"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Migrate.class.php:723
+msgid "Importar Categorías de Cuentas"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Migrate.class.php:747
+msgid "Error al crear categorías de cuentas"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Migrate.class.php:795
+msgid "Error al obtener los usuarios"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Migrate.class.php:799
+msgid "Importar Usuarios"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Migrate.class.php:858
+msgid "Error al crear usuarios"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Migrate.class.php:887
+msgid "Error al obtener los grupos de usuarios"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Migrate.class.php:891
+msgid "Importar Grupos de Usuarios"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Migrate.class.php:919
+msgid "Error al crear los grupos de usuarios"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Migrate.class.php:964
+msgid "Importar Configuración"
+msgstr ""
+
+#: ../../../../inc/SP/Import/SyspassImport.class.php:114
+#: ../../../../inc/SP/Import/SyspassImport.class.php:139
+#: ../../../../inc/SP/Import/SyspassImport.class.php:164
+msgid "Formato de XML inválido"
+msgstr ""
+
+#: ../../../../inc/SP/Import/SyspassImport.class.php:114
+msgid "No hay categorías para importar"
+msgstr ""
+
+#: ../../../../inc/SP/Import/SyspassImport.class.php:139
+msgid "No hay clientes para importar"
+msgstr ""
+
+#: ../../../../inc/SP/Import/SyspassImport.class.php:164
+msgid "No hay cuentas para importar"
+msgstr ""
+
+#: ../../../../inc/SP/Import/XmlImport.class.php:66
+msgid "Formato detectado"
+msgstr ""
+
+#: ../../../../inc/SP/Import/XmlImportBase.class.php:82
+msgid "No es posible procesar el archivo XML"
+msgstr ""
+
+#: ../../../../inc/SP/Import/XmlImportBase.class.php:110
+msgid "Archivo XML no soportado"
+msgstr ""
+
+#: ../../../../inc/SP/Import/XmlImportBase.class.php:111
+msgid "No es posible detectar la aplicación que exportó los datos"
+msgstr ""
+
+#: ../../../../inc/SP/Log/Email.class.php:67
+#: ../../../../inc/SP/Mgmt/User/UserUtil.class.php:196
+msgid "N/D"
+msgstr ""
+
+#: ../../../../inc/SP/Log/Email.class.php:69
+msgid "Realizado por"
+msgstr ""
+
+#: ../../../../inc/SP/Log/Email.class.php:86
+msgid "Enviar Email"
+msgstr ""
+
+#: ../../../../inc/SP/Log/Email.class.php:90
+msgid "Correo enviado"
+msgstr ""
+
+#: ../../../../inc/SP/Log/Email.class.php:92
+msgid "Error al enviar correo"
+msgstr ""
+
+#: ../../../../inc/SP/Log/Email.class.php:96
+msgid "Destinatario"
+msgstr ""
+
+#: ../../../../inc/SP/Log/Email.class.php:99
+msgid "CC"
+msgstr ""
+
+#: ../../../../inc/SP/Log/Log.class.php:104
+msgid "Vaciar Eventos"
+msgstr ""
+
+#: ../../../../inc/SP/Log/Log.class.php:104
+#: ../../../../inc/themes/classic/eventlog.inc:105
+#: ../../../../inc/themes/material-blue/eventlog.inc:108
+msgid "Vaciar registro de eventos"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Category.class.php:58
+msgid "Categoría en uso por:"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Category.class.php:70
+msgid "Error al eliminar la categoría"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Category.class.php:154
+#: ../../../../inc/SP/Mgmt/Category.class.php:332
+msgid "Nombre de categoría duplicado"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Category.class.php:170
+msgid "Error al actualizar la categoría"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Category.class.php:173
+msgid "Modificar Categoría"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Category.class.php:343
+msgid "Error al crear la categoría"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/CustomFields.class.php:331
+msgid "Actualizando datos encriptados"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/CustomFields.class.php:360
+msgid "Registros no actualizados"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:87
+msgid "Texto"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:90
+#: ../../../../inc/themes/classic/wikipage.inc:24
+#: ../../../../inc/themes/material-blue/wikipage.inc:24
+msgid "Fecha"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:91
+msgid "Número"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:92
+#: ../../../../inc/themes/classic/inc/Icons.class.php:60
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:58
+#: ../../../../inc/themes/classic/passreset.inc:22
+#: ../../../../inc/themes/classic/users.inc:61
+#: ../../../../inc/themes/material-blue/users.inc:72
+msgid "Email"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:93
+msgid "Teléfono"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:94
+msgid "Link"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:95
+msgid "Color"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:109
+#: ../../../../inc/themes/classic/profiles.inc:98
+#: ../../../../inc/themes/material-blue/profiles.inc:121
+msgid "Categorías"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:110
+#: ../../../../inc/themes/classic/profiles.inc:103
+#: ../../../../inc/themes/material-blue/profiles.inc:126
+msgid "Clientes"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/CustomFieldsBase.class.php:112
+#: ../../../../inc/themes/classic/account.inc:152
+#: ../../../../inc/themes/classic/profiles.inc:89
+#: ../../../../inc/themes/material-blue/account.inc:190
+#: ../../../../inc/themes/material-blue/profiles.inc:111
+msgid "Grupos"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Customer.class.php:58
+#: ../../../../inc/SP/Mgmt/Customer.class.php:322
+msgid "Cliente duplicado"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Customer.class.php:77
+msgid "Error al actualizar el cliente"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Customer.class.php:80
+msgid "Actualizar Cliente"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Customer.class.php:163
+msgid "Cliente en uso por:"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Customer.class.php:175
+msgid "Error al eliminar el cliente"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Customer.class.php:337
+msgid "Error al crear el cliente"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Files.class.php:78
+msgid "Archivo subido"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:136
+msgid "Enlace ya creado"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:152
+msgid "Nuevo Enlace"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:197
+msgid "Enlace visualizado"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/PublicLink.class.php:230
+msgid "Actualizar Enlace"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/PublicLinkUtil.class.php:87
+#: ../../../../inc/SP/Mgmt/PublicLinkUtil.class.php:144
+msgid "ON"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/PublicLinkUtil.class.php:87
+#: ../../../../inc/SP/Mgmt/PublicLinkUtil.class.php:144
+msgid "OFF"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/User/Groups.class.php:168
+msgid "Error al añadir los usuarios del grupo"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/User/Groups.class.php:276
+msgid "Error al actualizar los usuarios del grupo"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/User/Groups.class.php:400
+msgid "Error al eliminar los usuarios del grupo"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/User/Profile.class.php:48
+msgid "Migrar Perfiles"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/User/Profile.class.php:80
+msgid "Error al obtener perfiles"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/User/Profile.class.php:137
+msgid "Operación realizada correctamente"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/User/Profile.class.php:139
+msgid "Fallo al realizar la operación"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/User/ProfileBase.class.php:611
+msgid "Modificar Perfil"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/User/UserBase.class.php:398
+#: ../../../../inc/SP/Mgmt/User/UserBase.class.php:548
msgid "No se pudo realizar la petición de cambio de clave."
msgstr ""
-#: ../../../../inc/UserBase.class.php:527
+#: ../../../../inc/SP/Mgmt/User/UserBase.class.php:543
msgid "Modificar Usuario"
msgstr ""
-#: ../../../../inc/UserBase.class.php:594
-#: ../../../../web/UsersMgmtC.class.php:151
-msgid "Eliminar Usuario"
-msgstr ""
-
-#: ../../../../inc/UserLdap.class.php:68
-#: ../../../../web/UsersMgmtC.class.php:109
+#: ../../../../inc/SP/Mgmt/User/UserLdap.class.php:74
+#: ../../../../inc/themes/classic/inc/Icons.class.php:55
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:53
#: ../../../../inc/themes/classic/users.inc:28
-#: ../../../../inc/themes/material-blue/users.inc:34
+#: ../../../../inc/themes/material-blue/users.inc:35
msgid "Usuario de LDAP"
msgstr ""
-#: ../../../../inc/UserLdap.class.php:78
+#: ../../../../inc/SP/Mgmt/User/UserLdap.class.php:88
msgid "Activación Cuenta"
msgstr ""
-#: ../../../../inc/UserLdap.class.php:79
+#: ../../../../inc/SP/Mgmt/User/UserLdap.class.php:89
msgid "Su cuenta está pendiente de activación."
msgstr ""
-#: ../../../../inc/UserLdap.class.php:80
+#: ../../../../inc/SP/Mgmt/User/UserLdap.class.php:90
msgid "En breve recibirá un email de confirmación."
msgstr ""
-#: ../../../../inc/UserLdap.class.php:86
+#: ../../../../inc/SP/Mgmt/User/UserLdap.class.php:96
msgid "Nuevo usuario de LDAP"
msgstr ""
-#: ../../../../inc/UserMigrate.class.php:113
+#: ../../../../inc/SP/Mgmt/User/UserMigrate.class.php:125
msgid "Migrar Grupos"
msgstr ""
-#: ../../../../inc/UserMigrate.class.php:113
+#: ../../../../inc/SP/Mgmt/User/UserMigrate.class.php:125
msgid "Error al migrar grupo del usuario"
msgstr ""
-#: ../../../../inc/Util.class.php:119
+#: ../../../../inc/SP/Util/Checks.class.php:86
msgid "Versión de PHP requerida >= "
msgstr ""
-#: ../../../../inc/Util.class.php:120
+#: ../../../../inc/SP/Util/Checks.class.php:87
msgid ""
"Actualice la versión de PHP para que la aplicación funcione correctamente"
msgstr ""
-#: ../../../../inc/Util.class.php:156
+#: ../../../../inc/SP/Util/Checks.class.php:123
#: ../../../../inc/themes/classic/ldap.inc:212
-#: ../../../../inc/themes/material-blue/ldap.inc:238
+#: ../../../../inc/themes/material-blue/ldap.inc:240
msgid "Módulo no disponible"
msgstr ""
-#: ../../../../inc/Util.class.php:157
+#: ../../../../inc/SP/Util/Checks.class.php:124
msgid "Sin este módulo la aplicación puede no funcionar correctamente."
msgstr ""
-#: ../../../../inc/XmlExport.class.php:127
-msgid "Exportar XML"
+#: ../../../../inc/SP/Util/Connection.class.php:121
+msgid "Socket no inicializado"
msgstr ""
-#: ../../../../inc/XmlExport.class.php:412
-msgid "Error al crear el archivo XML"
+#: ../../../../inc/SP/Util/Connection.class.php:128
+msgid "Error al enviar datos"
msgstr ""
-#: ../../../../inc/XmlImport.class.php:63
-msgid "Formato detectado"
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApi.class.php:69
+msgid "Fallo de autentificación"
msgstr ""
-#: ../../../../inc/XmlImportBase.class.php:80
-msgid "No es posible procesar el archivo XML"
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApiBase.class.php:175
+msgid "Error al realizar la consulta"
msgstr ""
-#: ../../../../inc/XmlImportBase.class.php:108
-msgid "Archivo XML no soportado"
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApiBase.class.php:212
+msgid "URL de conexión no establecida"
msgstr ""
-#: ../../../../inc/XmlImportBase.class.php:109
-msgid "No es posible detectar la aplicación que exportó los datos"
+#: ../../../../inc/themes/classic/inc/Icons.class.php:47
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:45
+#: ../../../../inc/themes/classic/profiles.inc:41
+msgid "Añadir"
+msgstr ""
+
+#: ../../../../inc/themes/classic/inc/Icons.class.php:48
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:46
+msgid "Ver Detalles"
+msgstr ""
+
+#: ../../../../inc/themes/classic/inc/Icons.class.php:50
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:48
+#: ../../../../inc/themes/classic/profiles.inc:32
+#: ../../../../inc/themes/material-blue/profiles.inc:47
+msgid "Editar"
+msgstr ""
+
+#: ../../../../inc/themes/classic/inc/Icons.class.php:51
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:49
+#: ../../../../inc/themes/material-blue/profiles.inc:57
+msgid "Eliminar"
+msgstr ""
+
+#: ../../../../inc/themes/classic/inc/Icons.class.php:52
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:50
+#: ../../../../inc/themes/classic/passreset.inc:52
+msgid "Cambiar Clave"
+msgstr ""
+
+#: ../../../../inc/themes/classic/inc/Icons.class.php:54
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:52
+msgid "Admin Cuentas"
+msgstr ""
+
+#: ../../../../inc/themes/classic/inc/Icons.class.php:56
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:54
+#: ../../../../inc/themes/classic/users.inc:113
+#: ../../../../inc/themes/material-blue/users.inc:152
+#: ../../../../inc/themes/material-blue/users.inc:155
+msgid "Deshabilitado"
+msgstr ""
+
+#: ../../../../inc/themes/classic/inc/Icons.class.php:58
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:56
+msgid "Copiar"
+msgstr ""
+
+#: ../../../../inc/themes/classic/inc/Icons.class.php:63
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:61
+#: ../../../../inc/themes/classic/account-actions.inc:49
+#: ../../../../inc/themes/classic/account-editpass.inc:45
+#: ../../../../inc/themes/classic/passreset.inc:46
+#: ../../../../inc/themes/material-blue/error.inc:22
+#: ../../../../inc/themes/material-blue/error.inc:23
+#: ../../../../inc/themes/material-blue/passreset.inc:48
+msgid "Volver"
+msgstr ""
+
+#: ../../../../inc/themes/classic/inc/Icons.class.php:65
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:63
+#: ../../../../inc/themes/classic/account-editpass.inc:50
+#: ../../../../inc/themes/classic/encryption.inc:99
+#: ../../../../inc/themes/classic/mail.inc:107
+#: ../../../../inc/themes/classic/preferences-security.inc:57
+#: ../../../../inc/themes/classic/preferences-site.inc:130
+#: ../../../../inc/themes/material-blue/account-actions.inc:94
+msgid "Guardar"
+msgstr ""
+
+#: ../../../../inc/themes/classic/inc/Icons.class.php:67
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:65
+#: ../../../../inc/themes/classic/datatabs-grid.inc:38
+#: ../../../../inc/themes/classic/searchbox.inc:5
+#: ../../../../inc/themes/material-blue/datatabs-grid.inc:38
+#: ../../../../inc/themes/material-blue/searchbox.inc:12
+msgid "Limpiar"
+msgstr ""
+
+#: ../../../../inc/themes/classic/inc/Icons.class.php:68
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:66
+msgid "Realizar"
+msgstr ""
+
+#: ../../../../inc/themes/classic/inc/Icons.class.php:69
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:67
+msgid "Descargar"
+msgstr ""
+
+#: ../../../../inc/themes/classic/inc/Icons.class.php:73
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:71
+#: ../../../../inc/themes/classic/eventlog.inc:93
+#: ../../../../inc/themes/classic/search.inc:178
+#: ../../../../inc/themes/material-blue/eventlog.inc:95
+msgid "Página anterior"
+msgstr ""
+
+#: ../../../../inc/themes/classic/inc/Icons.class.php:74
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:72
+#: ../../../../inc/themes/classic/eventlog.inc:98
+#: ../../../../inc/themes/classic/search.inc:183
+#: ../../../../inc/themes/material-blue/eventlog.inc:100
+msgid "Página siguiente"
+msgstr ""
+
+#: ../../../../inc/themes/classic/inc/Icons.class.php:75
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:73
+#: ../../../../inc/themes/classic/eventlog.inc:91
+#: ../../../../inc/themes/classic/search.inc:176
+#: ../../../../inc/themes/material-blue/eventlog.inc:93
+msgid "Primera página"
+msgstr ""
+
+#: ../../../../inc/themes/classic/inc/Icons.class.php:76
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:74
+#: ../../../../inc/themes/classic/eventlog.inc:100
+#: ../../../../inc/themes/classic/search.inc:185
+#: ../../../../inc/themes/material-blue/eventlog.inc:102
+msgid "Última página"
msgstr ""
#: ../../../../js/strings.js.php:27
@@ -2528,6 +3510,10 @@ msgid "Borrar elemento?"
msgstr ""
#: ../../../../js/strings.js.php:40
+#: ../../../../inc/themes/classic/wikipage.inc:8
+#: ../../../../inc/themes/classic/wikipage.inc:17
+#: ../../../../inc/themes/material-blue/wikipage.inc:8
+#: ../../../../inc/themes/material-blue/wikipage.inc:17
msgid "Página no encontrada"
msgstr ""
@@ -2548,8 +3534,7 @@ msgid "Demasiados archivos"
msgstr ""
#: ../../../../js/strings.js.php:45
-#, php-format
-msgid "No es posible guardar el archivo \"%s\" Tamaño máximo:"
+msgid "Tamaño de archivo no permitido"
msgstr ""
#: ../../../../js/strings.js.php:47
@@ -2597,7 +3582,7 @@ msgid "Restablecer"
msgstr ""
#: ../../../../js/strings.js.php:58
-#: ../../../../inc/themes/classic/editpass.inc:33
+#: ../../../../inc/themes/classic/account-editpass.inc:33
msgid "Nivel de fortaleza de la clave"
msgstr ""
@@ -2634,9 +3619,15 @@ msgid "Seleccionar Acción"
msgstr ""
#: ../../../../js/strings.js.php:67
-#: ../../../../inc/themes/classic/account.inc:136
-#: ../../../../inc/themes/classic/account.inc:167
-#: ../../../../inc/themes/classic/account.inc:451
+#: ../../../../inc/themes/classic/account.inc:145
+#: ../../../../inc/themes/classic/account.inc:176
+#: ../../../../inc/themes/classic/account.inc:289
+#: ../../../../inc/themes/classic/config-events.inc:18
+#: ../../../../inc/themes/classic/config-events.inc:28
+#: ../../../../inc/themes/classic/config-events.inc:38
+#: ../../../../inc/themes/classic/config-links.inc:25
+#: ../../../../inc/themes/classic/config-links.inc:61
+#: ../../../../inc/themes/classic/config-proxy.inc:11
#: ../../../../inc/themes/classic/config.inc:70
#: ../../../../inc/themes/classic/config.inc:86
#: ../../../../inc/themes/classic/config.inc:102
@@ -2654,19 +3645,26 @@ msgstr ""
#: ../../../../inc/themes/classic/mail.inc:14
#: ../../../../inc/themes/classic/mail.inc:40
#: ../../../../inc/themes/classic/mail.inc:88
-#: ../../../../inc/themes/classic/preferences.inc:48
-#: ../../../../inc/themes/classic/preferences.inc:82
-#: ../../../../inc/themes/classic/preferences.inc:99
-#: ../../../../inc/themes/classic/preferences.inc:116
-#: ../../../../inc/themes/classic/security.inc:26
+#: ../../../../inc/themes/classic/preferences-security.inc:26
+#: ../../../../inc/themes/classic/preferences-site.inc:48
+#: ../../../../inc/themes/classic/preferences-site.inc:82
+#: ../../../../inc/themes/classic/preferences-site.inc:99
+#: ../../../../inc/themes/classic/preferences-site.inc:116
#: ../../../../inc/themes/classic/wiki.inc:20
+#: ../../../../inc/themes/classic/wiki.inc:118
msgid "SI"
msgstr ""
#: ../../../../js/strings.js.php:68
-#: ../../../../inc/themes/classic/account.inc:136
-#: ../../../../inc/themes/classic/account.inc:167
-#: ../../../../inc/themes/classic/account.inc:449
+#: ../../../../inc/themes/classic/account.inc:145
+#: ../../../../inc/themes/classic/account.inc:176
+#: ../../../../inc/themes/classic/account.inc:287
+#: ../../../../inc/themes/classic/config-events.inc:18
+#: ../../../../inc/themes/classic/config-events.inc:28
+#: ../../../../inc/themes/classic/config-events.inc:38
+#: ../../../../inc/themes/classic/config-links.inc:25
+#: ../../../../inc/themes/classic/config-links.inc:61
+#: ../../../../inc/themes/classic/config-proxy.inc:11
#: ../../../../inc/themes/classic/config.inc:70
#: ../../../../inc/themes/classic/config.inc:86
#: ../../../../inc/themes/classic/config.inc:102
@@ -2680,20 +3678,21 @@ msgstr ""
#: ../../../../inc/themes/classic/customfields.inc:46
#: ../../../../inc/themes/classic/encryption.inc:58
#: ../../../../inc/themes/classic/encryption.inc:77
-#: ../../../../inc/themes/classic/import.inc:67
+#: ../../../../inc/themes/classic/import.inc:172
#: ../../../../inc/themes/classic/install.inc:99
#: ../../../../inc/themes/classic/ldap.inc:25
#: ../../../../inc/themes/classic/ldap.inc:195
#: ../../../../inc/themes/classic/mail.inc:14
#: ../../../../inc/themes/classic/mail.inc:40
#: ../../../../inc/themes/classic/mail.inc:88
-#: ../../../../inc/themes/classic/preferences.inc:48
-#: ../../../../inc/themes/classic/preferences.inc:82
-#: ../../../../inc/themes/classic/preferences.inc:99
-#: ../../../../inc/themes/classic/preferences.inc:116
-#: ../../../../inc/themes/classic/security.inc:26
+#: ../../../../inc/themes/classic/preferences-security.inc:26
+#: ../../../../inc/themes/classic/preferences-site.inc:48
+#: ../../../../inc/themes/classic/preferences-site.inc:82
+#: ../../../../inc/themes/classic/preferences-site.inc:99
+#: ../../../../inc/themes/classic/preferences-site.inc:116
#: ../../../../inc/themes/classic/tokens.inc:36
#: ../../../../inc/themes/classic/wiki.inc:20
+#: ../../../../inc/themes/classic/wiki.inc:118
msgid "NO"
msgstr ""
@@ -2713,665 +3712,279 @@ msgstr ""
msgid "Error al copiar al portapapeles"
msgstr ""
-#: ../../../../web/AccountC.class.php:386
-#: ../../../../web/AccountC.class.php:417
-#: ../../../../inc/themes/classic/search.inc:75
-#: ../../../../inc/themes/classic/search.inc:134
-#: ../../../../inc/themes/material-blue/search.inc:77
-#: ../../../../inc/themes/material-blue/search.inc:144
-msgid "Detalles de Cuenta"
+#: ../../../../js/strings.js.php:74
+msgid "Recibir notificaciones?"
msgstr ""
-#: ../../../../web/AccountC.class.php:474
-#: ../../../../inc/themes/classic/account.inc:396
-#: ../../../../inc/themes/material-blue/account.inc:436
-msgid "Modificar Clave de Cuenta"
+#: ../../../../js/strings.js.php:75
+msgid "Marcar Favorito"
msgstr ""
-#: ../../../../web/AccountsMgmtC.class.php:80
-#: ../../../../web/AccountsMgmtC.class.php:139
-#: ../../../../web/AccountsMgmtC.class.php:267
-#: ../../../../web/SearchC.class.php:293
-#: ../../../../web/UsersMgmtC.class.php:88
-#: ../../../../web/UsersMgmtC.class.php:188
-#: ../../../../web/UsersMgmtC.class.php:246
-#: ../../../../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:73
-#: ../../../../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:75
-#: ../../../../inc/themes/material-blue/users.inc:8
-msgid "Nombre"
+#: ../../../../js/strings.js.php:76
+msgid "Eliminar Favorito"
msgstr ""
-#: ../../../../web/AccountsMgmtC.class.php:116
-msgid "Gestión de Categorías"
+#: ../../../../inc/themes/classic/account-actions.inc:15
+#: ../../../../inc/themes/material-blue/account-actions.inc:86
+msgid "Restaurar cuenta desde este punto"
msgstr ""
-#: ../../../../web/AccountsMgmtC.class.php:173
-msgid "Gestión de Clientes"
+#: ../../../../inc/themes/classic/account-actions.inc:44
+#: ../../../../inc/themes/material-blue/account-actions.inc:55
+msgid "Ver Actual"
msgstr ""
-#: ../../../../web/AccountsMgmtC.class.php:267
-#: ../../../../inc/themes/classic/customfields.inc:27
-#: ../../../../inc/themes/material-blue/customfields.inc:30
-msgid "Módulo"
+#: ../../../../inc/themes/classic/account-actions.inc:56
+#: ../../../../inc/themes/classic/search.inc:132
+#: ../../../../inc/themes/material-blue/account-actions.inc:71
+msgid "Modificar Cuenta"
msgstr ""
-#: ../../../../web/AccountsMgmtC.class.php:288
-msgid "Eliminar Campo"
+#: ../../../../inc/themes/classic/account-details.inc:7
+#: ../../../../inc/themes/material-blue/account-details.inc:7
+msgid "Fecha Alta"
msgstr ""
-#: ../../../../web/ConfigC.class.php:168
-msgid "Último backup"
+#: ../../../../inc/themes/classic/account-details.inc:11
+#: ../../../../inc/themes/material-blue/account-details.inc:11
+msgid "Creador"
msgstr ""
-#: ../../../../web/ConfigC.class.php:168
-msgid "No se encontraron backups"
+#: ../../../../inc/themes/classic/account-details.inc:15
+#: ../../../../inc/themes/classic/account.inc:186
+#: ../../../../inc/themes/material-blue/account-details.inc:15
+#: ../../../../inc/themes/material-blue/account.inc:225
+msgid "Grupo Principal"
msgstr ""
-#: ../../../../web/ConfigC.class.php:175
-msgid "Última exportación"
+#: ../../../../inc/themes/classic/account-details.inc:20
+#: ../../../../inc/themes/material-blue/account-details.inc:20
+msgid "Usuarios Secundarios"
msgstr ""
-#: ../../../../web/ConfigC.class.php:175
-msgid "No se encontró archivo de exportación"
+#: ../../../../inc/themes/classic/account-details.inc:39
+#: ../../../../inc/themes/material-blue/account-details.inc:39
+msgid "Grupos Secundarios"
msgstr ""
-#: ../../../../web/ConfigC.class.php:220
-msgid "Información"
+#: ../../../../inc/themes/classic/account-details.inc:59
+#: ../../../../inc/themes/material-blue/account-details.inc:59
+msgid "Fecha Edición"
msgstr ""
-#: ../../../../web/EventlogC.class.php:95
-msgid "Registro de eventos vaciado"
+#: ../../../../inc/themes/classic/account-details.inc:63
+#: ../../../../inc/themes/material-blue/account-details.inc:63
+msgid "Editor"
msgstr ""
-#: ../../../../web/EventlogC.class.php:97
-msgid "Error al vaciar el registro de eventos"
-msgstr ""
-
-#: ../../../../web/MainC.class.php:159
-#: ../../../../web/UsersMgmtC.class.php:101
-msgid "Admin Aplicación"
-msgstr ""
-
-#: ../../../../web/MainC.class.php:177
-msgid "Buscar"
-msgstr ""
-
-#: ../../../../web/MainC.class.php:189
-msgid "Usuarios y Accesos"
-msgstr ""
-
-#: ../../../../web/MainC.class.php:195
-msgid "Elementos y Personalización"
-msgstr ""
-
-#: ../../../../web/MainC.class.php:207
-#: ../../../../inc/themes/classic/eventlog.inc:2
-#: ../../../../inc/themes/material-blue/eventlog.inc:2
-msgid "Registro de Eventos"
-msgstr ""
-
-#: ../../../../web/MainC.class.php:228
-msgid "Nuevo estilo visual basado en Material Design Lite by Google"
-msgstr ""
-
-#: ../../../../web/MainC.class.php:229
-msgid "Usuarios en múltiples grupos"
-msgstr ""
-
-#: ../../../../web/MainC.class.php:230
-msgid "Previsualización de imágenes"
-msgstr ""
-
-#: ../../../../web/MainC.class.php:231
-msgid "Mostrar claves como imágenes"
-msgstr ""
-
-#: ../../../../web/MainC.class.php:232
-msgid "Campos personalizados"
-msgstr ""
-
-#: ../../../../web/MainC.class.php:233
-msgid "API de consultas"
-msgstr ""
-
-#: ../../../../web/MainC.class.php:234
-#: ../../../../inc/themes/classic/2fa.inc:9
-#: ../../../../inc/themes/material-blue/2fa.inc:7
-#: ../../../../inc/themes/material-blue/security.inc:11
-msgid "Autentificación en 2 pasos"
-msgstr ""
-
-#: ../../../../web/MainC.class.php:235
-msgid "Complejidad de generador de claves"
-msgstr ""
-
-#: ../../../../web/MainC.class.php:236
-msgid "Consultas especiales"
-msgstr ""
-
-#: ../../../../web/MainC.class.php:237
-msgid "Exportación a XML"
-msgstr ""
-
-#: ../../../../web/MainC.class.php:238
-msgid "Clave maestra temporal"
-msgstr ""
-
-#: ../../../../web/MainC.class.php:239
-msgid "Importación de cuentas desde sysPass, KeePass, KeePassX y CSV"
-msgstr ""
-
-#: ../../../../web/MainC.class.php:240
-msgid "Optimización del código y mayor rapidez de carga"
-msgstr ""
-
-#: ../../../../web/MainC.class.php:241
-msgid "Mejoras de seguridad en XSS e inyección SQL"
-msgstr ""
-
-#: ../../../../web/MainC.class.php:282
-msgid "La version de PHP es vulnerable al ataque NULL Byte (CVE-2006-7243)"
-msgstr ""
-
-#: ../../../../web/MainC.class.php:283
-msgid "Actualice la versión de PHP para usar sysPass de forma segura"
-msgstr ""
-
-#: ../../../../web/MainC.class.php:290
-msgid "No se encuentra el generador de números aleatorios."
-msgstr ""
-
-#: ../../../../web/MainC.class.php:291
-msgid ""
-"Sin esta función un atacante puede utilizar su cuenta al resetear la clave"
-msgstr ""
-
-#: ../../../../web/MainC.class.php:310
-msgid "Instalación finalizada"
-msgstr ""
-
-#: ../../../../web/MainC.class.php:311
-msgid "Pulse aquí para acceder"
-msgstr ""
-
-#: ../../../../web/MainC.class.php:408
-msgid "Descargar nueva versión"
-msgstr ""
-
-#: ../../../../web/MainC.class.php:419
-msgid "Avisos de sysPass"
-msgstr ""
-
-#: ../../../../web/SearchC.class.php:286
-msgid "Ordenar por Cliente"
-msgstr ""
-
-#: ../../../../web/SearchC.class.php:292
-msgid "Ordenar por Nombre"
-msgstr ""
-
-#: ../../../../web/SearchC.class.php:298
-msgid "Ordenar por Categoría"
-msgstr ""
-
-#: ../../../../web/SearchC.class.php:304
-msgid "Ordenar por Usuario"
-msgstr ""
-
-#: ../../../../web/SearchC.class.php:310
-msgid "Ordenar por URL / IP"
-msgstr ""
-
-#: ../../../../web/SearchC.class.php:311
-#: ../../../../inc/themes/classic/account.inc:61
-#: ../../../../inc/themes/classic/editpass.inc:16
-#: ../../../../inc/themes/classic/request.inc:13
-#: ../../../../inc/themes/classic/search.inc:96
-#: ../../../../inc/themes/material-blue/account.inc:70
-#: ../../../../inc/themes/material-blue/editpass.inc:17
-#: ../../../../inc/themes/material-blue/request.inc:15
-#: ../../../../inc/themes/material-blue/search.inc:98
-msgid "URL / IP"
-msgstr ""
-
-#: ../../../../web/UsersMgmtC.class.php:92
-msgid "Propiedades"
-msgstr ""
-
-#: ../../../../web/UsersMgmtC.class.php:105
-msgid "Admin Cuentas"
-msgstr ""
-
-#: ../../../../web/UsersMgmtC.class.php:113
-#: ../../../../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:130
-msgid "Ver Detalles de Usuario"
-msgstr ""
-
-#: ../../../../web/UsersMgmtC.class.php:144
-msgid "Cambiar Clave de Usuario"
-msgstr ""
-
-#: ../../../../web/UsersMgmtC.class.php:164
-msgid "Gestión de Usuarios"
-msgstr ""
-
-#: ../../../../web/UsersMgmtC.class.php:223
-msgid "Gestión de Grupos"
-msgstr ""
-
-#: ../../../../web/UsersMgmtC.class.php:261
-msgid "Ver Detalles de Perfil"
-msgstr ""
-
-#: ../../../../web/UsersMgmtC.class.php:288
-msgid "Gestión de Perfiles"
-msgstr ""
-
-#: ../../../../web/UsersMgmtC.class.php:408
-msgid "Ver token de Autorización"
-msgstr ""
-
-#: ../../../../web/UsersMgmtC.class.php:435
-msgid "Gestión de Autorizaciones API"
-msgstr ""
-
-#: ../../../../web/UsersMgmtC.class.php:457
-msgid "Token de autorización visualizado"
-msgstr ""
-
-#: ../../../../web/UsersMgmtC.class.php:458
-msgid "Autorizaciones"
-msgstr ""
-
-#: ../../../../web/UsersPrefsC.class.php:93
-#: ../../../../inc/themes/classic/mail.inc:63
-#: ../../../../inc/themes/material-blue/mail.inc:86
-msgid "Seguridad"
-msgstr ""
-
-#: ../../../../web/UsersPrefsC.class.php:118
-#: ../../../../inc/themes/classic/sessionbar.inc:9
-msgid "Preferencias"
-msgstr ""
-
-#: ../../../../inc/themes/classic/2fa.inc:14
-#: ../../../../inc/themes/material-blue/2fa.inc:12
-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:64
-#: ../../../../inc/themes/material-blue/account.inc:76
-msgid "URL o IP de acceso"
-msgstr ""
-
-#: ../../../../inc/themes/classic/account.inc:76
-#: ../../../../inc/themes/material-blue/account.inc:90
-msgid "Usuario de acceso"
-msgstr ""
-
-#: ../../../../inc/themes/classic/account.inc:93
-#: ../../../../inc/themes/classic/editpass.inc:31
+#: ../../../../inc/themes/classic/account-editpass.inc:31
+#: ../../../../inc/themes/classic/account.inc:101
#: ../../../../inc/themes/classic/passreset.inc:35
#: ../../../../inc/themes/classic/users.inc:83
#: ../../../../inc/themes/classic/userspass.inc:19
#: ../../../../inc/themes/classic/userspass.inc:21
-#: ../../../../inc/themes/material-blue/account.inc:109
-#: ../../../../inc/themes/material-blue/editpass.inc:36
+#: ../../../../inc/themes/material-blue/account-editpass.inc:38
+#: ../../../../inc/themes/material-blue/account.inc:124
#: ../../../../inc/themes/material-blue/install.inc:67
#: ../../../../inc/themes/material-blue/passreset.inc:36
-#: ../../../../inc/themes/material-blue/users.inc:102
-#: ../../../../inc/themes/material-blue/users.inc:109
+#: ../../../../inc/themes/material-blue/users.inc:103
+#: ../../../../inc/themes/material-blue/users.inc:110
#: ../../../../inc/themes/material-blue/userspass.inc:19
#: ../../../../inc/themes/material-blue/userspass.inc:25
msgid "Clave (repetir)"
msgstr ""
-#: ../../../../inc/themes/classic/account.inc:100
-#: ../../../../inc/themes/classic/search.inc:112
-#: ../../../../inc/themes/classic/users.inc:91
-#: ../../../../inc/themes/material-blue/account.inc:120
-#: ../../../../inc/themes/material-blue/search.inc:118
-#: ../../../../inc/themes/material-blue/users.inc:116
-msgid "Notas"
-msgstr ""
-
-#: ../../../../inc/themes/classic/account.inc:102
-#: ../../../../inc/themes/material-blue/account.inc:125
-#: ../../../../inc/themes/material-blue/users.inc:123
-msgid "Notas sobre la cuenta"
-msgstr ""
-
-#: ../../../../inc/themes/classic/account.inc:108
-#: ../../../../inc/themes/material-blue/account.inc:134
-#: ../../../../inc/themes/material-blue/search.inc:111
-msgid "Permisos"
-msgstr ""
-
-#: ../../../../inc/themes/classic/account.inc:135
-#: ../../../../inc/themes/classic/account.inc:166
-#: ../../../../inc/themes/material-blue/account.inc:163
-#: ../../../../inc/themes/material-blue/account.inc:195
-msgid "Hablitar edición"
-msgstr ""
-
-#: ../../../../inc/themes/classic/account.inc:204
-#: ../../../../inc/themes/material-blue/account.inc:247
+#: ../../../../inc/themes/classic/account-files.inc:13
+#: ../../../../inc/themes/material-blue/account-files.inc:13
msgid "Soltar archivos aquí (max. 5) o click para seleccionar"
msgstr ""
-#: ../../../../inc/themes/classic/account.inc:204
+#: ../../../../inc/themes/classic/account-files.inc:13
#: ../../../../inc/themes/classic/config.inc:212
-#: ../../../../inc/themes/material-blue/account.inc:247
-#: ../../../../inc/themes/material-blue/config.inc:309
+#: ../../../../inc/themes/material-blue/account-files.inc:13
+#: ../../../../inc/themes/material-blue/config-files.inc:54
msgid "Tamaño máximo de archivo"
msgstr ""
-#: ../../../../inc/themes/classic/account.inc:216
-#: ../../../../inc/themes/material-blue/account.inc:259
+#: ../../../../inc/themes/classic/account-request.inc:1
+#: ../../../../inc/themes/material-blue/request.inc:3
+msgid "Solicitar Modificación de Cuenta"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account-request.inc:22
+#: ../../../../inc/themes/material-blue/request.inc:27
+msgid "Petición"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account-request.inc:24
+#: ../../../../inc/themes/material-blue/request.inc:31
+msgid "Descripción de la petición"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account-request.inc:38
+#: ../../../../inc/themes/material-blue/request.inc:50
+msgid "Enviar"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:20
+#: ../../../../inc/themes/material-blue/account.inc:33
+msgid "Nombre de cuenta"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:41
+msgid "Buscar en desplegable o introducir"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:71
+#: ../../../../inc/themes/material-blue/account.inc:90
+msgid "URL o IP de acceso"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:83
+#: ../../../../inc/themes/material-blue/account.inc:104
+msgid "Usuario de acceso"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:109
+#: ../../../../inc/themes/classic/datasearch-rows.inc:73
+#: ../../../../inc/themes/classic/search.inc:85
+#: ../../../../inc/themes/classic/users.inc:91
+#: ../../../../inc/themes/material-blue/account-link.inc:42
+#: ../../../../inc/themes/material-blue/account.inc:137
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:77
+#: ../../../../inc/themes/material-blue/users.inc:117
+msgid "Notas"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:111
+#: ../../../../inc/themes/material-blue/account.inc:144
+#: ../../../../inc/themes/material-blue/users.inc:124
+msgid "Notas sobre la cuenta"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:117
+#: ../../../../inc/themes/classic/datasearch-rows.inc:62
+#: ../../../../inc/themes/material-blue/account.inc:153
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:64
+msgid "Permisos"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:144
+#: ../../../../inc/themes/classic/account.inc:175
+#: ../../../../inc/themes/material-blue/account.inc:183
+#: ../../../../inc/themes/material-blue/account.inc:216
+msgid "Hablitar edición"
+msgstr ""
+
+#: ../../../../inc/themes/classic/account.inc:203
+#: ../../../../inc/themes/material-blue/account.inc:242
msgid "Historial"
msgstr ""
-#: ../../../../inc/themes/classic/account.inc:235
-#: ../../../../inc/themes/material-blue/account.inc:279
+#: ../../../../inc/themes/classic/account.inc:223
+#: ../../../../inc/themes/material-blue/account.inc:262
msgid "Seleccionar fecha"
msgstr ""
-#: ../../../../inc/themes/classic/account.inc:244
-#: ../../../../inc/themes/classic/users.inc:164
-#: ../../../../inc/themes/material-blue/account.inc:288
-#: ../../../../inc/themes/material-blue/users.inc:208
+#: ../../../../inc/themes/classic/account.inc:232
+#: ../../../../inc/themes/classic/users.inc:140
+#: ../../../../inc/themes/material-blue/account.inc:271
+#: ../../../../inc/themes/material-blue/users.inc:183
msgid "Última Modificación"
msgstr ""
-#: ../../../../inc/themes/classic/account.inc:246
-#: ../../../../inc/themes/material-blue/account.inc:290
+#: ../../../../inc/themes/classic/account.inc:234
+#: ../../../../inc/themes/material-blue/account.inc:273
msgid "por"
msgstr ""
-#: ../../../../inc/themes/classic/account.inc:289
-#: ../../../../inc/themes/material-blue/account.inc:339
-msgid "Visitas"
-msgstr ""
-
-#: ../../../../inc/themes/classic/account.inc:293
-#: ../../../../inc/themes/material-blue/account.inc:343
-msgid "Fecha Alta"
-msgstr ""
-
-#: ../../../../inc/themes/classic/account.inc:297
-#: ../../../../inc/themes/material-blue/account.inc:347
-msgid "Creador"
-msgstr ""
-
-#: ../../../../inc/themes/classic/account.inc:301
-#: ../../../../inc/themes/material-blue/account.inc:204
-#: ../../../../inc/themes/material-blue/account.inc:351
-msgid "Grupo Principal"
-msgstr ""
-
-#: ../../../../inc/themes/classic/account.inc:306
-#: ../../../../inc/themes/material-blue/account.inc:356
-msgid "Usuarios Secundarios"
-msgstr ""
-
-#: ../../../../inc/themes/classic/account.inc:325
-#: ../../../../inc/themes/material-blue/account.inc:375
-msgid "Grupos Secundarios"
-msgstr ""
-
-#: ../../../../inc/themes/classic/account.inc:345
-#: ../../../../inc/themes/material-blue/account.inc:395
-msgid "Fecha Edición"
-msgstr ""
-
-#: ../../../../inc/themes/classic/account.inc:349
-#: ../../../../inc/themes/material-blue/account.inc:399
-msgid "Editor"
-msgstr ""
-
-#: ../../../../inc/themes/classic/account.inc:376
-#: ../../../../inc/themes/material-blue/account.inc:462
-msgid "Restaurar cuenta desde este punto"
-msgstr ""
-
-#: ../../../../inc/themes/classic/account.inc:388
-#: ../../../../inc/themes/classic/search.inc:143
-#: ../../../../inc/themes/material-blue/account.inc:429
-#: ../../../../inc/themes/material-blue/search.inc:154
-msgid "Copiar Clave en Portapapeles"
-msgstr ""
-
-#: ../../../../inc/themes/classic/account.inc:403
-#: ../../../../inc/themes/material-blue/account.inc:442
-msgid "Ver Actual"
-msgstr ""
-
-#: ../../../../inc/themes/classic/account.inc:408
-#: ../../../../inc/themes/classic/editpass.inc:45
-#: ../../../../inc/themes/classic/mgmttabs.inc:4
-#: ../../../../inc/themes/classic/passreset.inc:46
-#: ../../../../inc/themes/material-blue/passreset.inc:48
-msgid "Volver"
-msgstr ""
-
-#: ../../../../inc/themes/classic/account.inc:415
-#: ../../../../inc/themes/classic/search.inc:155
-#: ../../../../inc/themes/material-blue/account.inc:452
-#: ../../../../inc/themes/material-blue/search.inc:166
-msgid "Modificar Cuenta"
-msgstr ""
-
-#: ../../../../inc/themes/classic/account.inc:420
-#: ../../../../inc/themes/classic/search.inc:176
-#: ../../../../inc/themes/material-blue/account.inc:456
-#: ../../../../inc/themes/material-blue/search.inc:187
-msgid "Solicitar Modificación"
-msgstr ""
-
-#: ../../../../inc/themes/classic/account.inc:427
-#: ../../../../inc/themes/classic/categories.inc:62
-#: ../../../../inc/themes/classic/config.inc:294
-#: ../../../../inc/themes/classic/customers.inc:62
-#: ../../../../inc/themes/classic/customfields.inc:63
-#: ../../../../inc/themes/classic/editpass.inc:50
-#: ../../../../inc/themes/classic/encryption.inc:99
-#: ../../../../inc/themes/classic/groups.inc:77
-#: ../../../../inc/themes/classic/ldap.inc:229
-#: ../../../../inc/themes/classic/mail.inc:107
-#: ../../../../inc/themes/classic/preferences.inc:130
-#: ../../../../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:468
-#: ../../../../inc/themes/material-blue/categories.inc:72
-#: ../../../../inc/themes/material-blue/config.inc:425
-#: ../../../../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/preferences.inc:134
-#: ../../../../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:437
-#: ../../../../inc/themes/material-blue/account.inc:478
+#: ../../../../inc/themes/classic/account.inc:275
+#: ../../../../inc/themes/material-blue/account.inc:318
msgid "Seleccionar grupos secundarios"
msgstr ""
-#: ../../../../inc/themes/classic/account.inc:441
-#: ../../../../inc/themes/material-blue/account.inc:481
+#: ../../../../inc/themes/classic/account.inc:279
+#: ../../../../inc/themes/material-blue/account.inc:321
msgid "Seleccionar usuarios"
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
+#: ../../../../inc/themes/classic/backup.inc:12
+#: ../../../../inc/themes/classic/backup.inc:69
+#: ../../../../inc/themes/material-blue/backup.inc:12
+#: ../../../../inc/themes/material-blue/backup.inc:73
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
+#: ../../../../inc/themes/classic/backup.inc:20
+#: ../../../../inc/themes/classic/backup.inc:77
+#: ../../../../inc/themes/material-blue/backup.inc:20
+#: ../../../../inc/themes/material-blue/backup.inc:81
msgid "Descargar Actual"
msgstr ""
-#: ../../../../inc/themes/classic/backup.inc:31
-#: ../../../../inc/themes/material-blue/backup.inc:31
+#: ../../../../inc/themes/classic/backup.inc:33
+#: ../../../../inc/themes/material-blue/backup.inc:33
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:90
-#: ../../../../inc/themes/classic/encryption.inc:94
-#: ../../../../inc/themes/classic/encryption.inc:159
-#: ../../../../inc/themes/classic/encryption.inc:163
-#: ../../../../inc/themes/classic/import.inc:12
-#: ../../../../inc/themes/classic/import.inc:34
-#: ../../../../inc/themes/classic/import.inc:48
-#: ../../../../inc/themes/classic/import.inc:94
-#: ../../../../inc/themes/classic/import.inc:115
-#: ../../../../inc/themes/classic/import.inc:167
-#: ../../../../inc/themes/classic/import.inc:171
-#: ../../../../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:104
-#: ../../../../inc/themes/material-blue/encryption.inc:108
-#: ../../../../inc/themes/material-blue/encryption.inc:178
-#: ../../../../inc/themes/material-blue/encryption.inc:182
-#: ../../../../inc/themes/material-blue/import.inc:96
-#: ../../../../inc/themes/material-blue/import.inc:100
-#: ../../../../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 ""
+"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:54
+#: ../../../../inc/themes/material-blue/backup.inc:56
+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
+#: ../../../../inc/themes/classic/backup.inc:62
+#: ../../../../inc/themes/classic/backup.inc:128
+#: ../../../../inc/themes/material-blue/backup.inc:66
msgid "Exportar Cuentas"
msgstr ""
-#: ../../../../inc/themes/classic/backup.inc:84
-#: ../../../../inc/themes/material-blue/backup.inc:88
+#: ../../../../inc/themes/classic/backup.inc:86
+#: ../../../../inc/themes/material-blue/backup.inc:90
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
+#: ../../../../inc/themes/classic/backup.inc:92
+#: ../../../../inc/themes/material-blue/backup.inc:96
+#: ../../../../inc/themes/material-blue/backup.inc:103
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
+#: ../../../../inc/themes/classic/backup.inc:100
+#: ../../../../inc/themes/material-blue/backup.inc:109
+#: ../../../../inc/themes/material-blue/backup.inc:116
msgid "Clave de Exportación (repetir)"
msgstr ""
-#: ../../../../inc/themes/classic/backup.inc:118
-#: ../../../../inc/themes/material-blue/backup.inc:134
+#: ../../../../inc/themes/classic/backup.inc:120
+#: ../../../../inc/themes/material-blue/backup.inc:136
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
+#: ../../../../inc/themes/classic/backup.inc:122
+#: ../../../../inc/themes/material-blue/backup.inc:138
msgid "Los elementos exportados son cuentas, clientes y categorías."
msgstr ""
-#: ../../../../inc/themes/classic/backup.inc:122
-#: ../../../../inc/themes/material-blue/backup.inc:138
+#: ../../../../inc/themes/classic/backup.inc:124
+#: ../../../../inc/themes/material-blue/backup.inc:140
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
+#: ../../../../inc/themes/classic/backup.inc:126
+#: ../../../../inc/themes/material-blue/backup.inc:142
msgid ""
"Es posible establecer una clave de exportación para guardar todos los datos "
"encriptados en el archivo XML."
@@ -3383,245 +3996,357 @@ msgid "Javascript es necesario para el correcto funcionamiento"
msgstr ""
#: ../../../../inc/themes/classic/categories.inc:10
-#: ../../../../inc/themes/material-blue/categories.inc:14
+#: ../../../../inc/themes/material-blue/categories.inc:15
msgid "Nombre de la categoría"
msgstr ""
#: ../../../../inc/themes/classic/categories.inc:18
-#: ../../../../inc/themes/material-blue/categories.inc:26
+#: ../../../../inc/themes/material-blue/categories.inc:27
msgid "Descripción de la categoría"
msgstr ""
+#: ../../../../inc/themes/classic/config-events.inc:2
+#: ../../../../inc/themes/material-blue/config-events.inc:4
+msgid "Eventos"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config-events.inc:8
+#: ../../../../inc/themes/classic/config.inc:61
+#: ../../../../inc/themes/material-blue/config-events.inc:10
+msgid "Habilitar log de eventos"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config-events.inc:13
+#: ../../../../inc/themes/classic/config.inc:65
+#: ../../../../inc/themes/material-blue/config-events.inc:14
+msgid "Guarda las acciones realizadas en la aplicación."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config-events.inc:25
+#: ../../../../inc/themes/material-blue/config-events.inc:28
+msgid "Habilitar Syslog"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config-events.inc:35
+#: ../../../../inc/themes/material-blue/config-events.inc:40
+msgid "Habilitar Syslog Remoto"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config-events.inc:45
+#: ../../../../inc/themes/classic/config-proxy.inc:18
+#: ../../../../inc/themes/classic/info.inc:44
+#: ../../../../inc/themes/classic/ldap.inc:32
+#: ../../../../inc/themes/classic/mail.inc:21
+#: ../../../../inc/themes/material-blue/config-events.inc:52
+#: ../../../../inc/themes/material-blue/config-proxy.inc:21
+#: ../../../../inc/themes/material-blue/info.inc:44
+#: ../../../../inc/themes/material-blue/ldap.inc:37
+#: ../../../../inc/themes/material-blue/ldap.inc:60
+#: ../../../../inc/themes/material-blue/mail.inc:26
+#: ../../../../inc/themes/material-blue/mail.inc:32
+msgid "Servidor"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config-events.inc:54
+#: ../../../../inc/themes/classic/config-proxy.inc:27
+#: ../../../../inc/themes/classic/mail.inc:29
+#: ../../../../inc/themes/material-blue/config-events.inc:66
+#: ../../../../inc/themes/material-blue/config-events.inc:74
+#: ../../../../inc/themes/material-blue/config-proxy.inc:35
+#: ../../../../inc/themes/material-blue/mail.inc:38
+#: ../../../../inc/themes/material-blue/mail.inc:45
+msgid "Puerto"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config-links.inc:2
+#: ../../../../inc/themes/material-blue/config-links.inc:4
+#: ../../../../inc/themes/material-blue/profiles.inc:141
+msgid "Enlaces Públicos"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config-links.inc:8
+#: ../../../../inc/themes/material-blue/config-links.inc:10
+msgid "Habilitar Enlaces Públicos"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config-links.inc:12
+#: ../../../../inc/themes/material-blue/config-links.inc:15
+msgid ""
+"Habilita la posibilidad de generar enlaces públicos para ver los detalles de "
+"una cuenta."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config-links.inc:16
+#: ../../../../inc/themes/material-blue/config-links.inc:19
+msgid ""
+"Las cuentas enlazadas serán visibles por cualquiera que disponga del enlace."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config-links.inc:20
+#: ../../../../inc/themes/material-blue/config-links.inc:23
+msgid ""
+"Para crear enlaces, los usuarios tienen que tener activada la opción en su "
+"perfl."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config-links.inc:32
+#: ../../../../inc/themes/material-blue/config-links.inc:38
+msgid "Tiempo de caducidad"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config-links.inc:37
+#: ../../../../inc/themes/classic/config-links.inc:47
+#: ../../../../inc/themes/material-blue/config-links.inc:46
+msgid "Tiempo en minutos"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config-links.inc:42
+#: ../../../../inc/themes/material-blue/config-links.inc:52
+msgid "Número máximo de visitas"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config-links.inc:52
+#: ../../../../inc/themes/material-blue/config-links.inc:64
+msgid "Usar imagen para clave"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config-links.inc:56
+#: ../../../../inc/themes/material-blue/config-links.inc:69
+msgid "La clave de la cuenta es visualizada como una imagen."
+msgstr ""
+
+#: ../../../../inc/themes/classic/config-proxy.inc:2
+#: ../../../../inc/themes/material-blue/config-proxy.inc:2
+msgid "Proxy"
+msgstr ""
+
+#: ../../../../inc/themes/classic/config-proxy.inc:8
+#: ../../../../inc/themes/material-blue/config-proxy.inc:8
+msgid "Usar Proxy"
+msgstr ""
+
#: ../../../../inc/themes/classic/config.inc:4
-#: ../../../../inc/themes/classic/preferences.inc:4
-#: ../../../../inc/themes/material-blue/config.inc:4
-#: ../../../../inc/themes/material-blue/preferences.inc:4
+#: ../../../../inc/themes/classic/preferences-site.inc:4
+#: ../../../../inc/themes/material-blue/config-site.inc:4
+#: ../../../../inc/themes/material-blue/preferences-site.inc:6
msgid "Sitio"
msgstr ""
#: ../../../../inc/themes/classic/config.inc:11
-#: ../../../../inc/themes/classic/preferences.inc:12
-#: ../../../../inc/themes/material-blue/config.inc:12
-#: ../../../../inc/themes/material-blue/preferences.inc:12
+#: ../../../../inc/themes/classic/preferences-site.inc:12
+#: ../../../../inc/themes/material-blue/config-site.inc:10
+#: ../../../../inc/themes/material-blue/preferences-site.inc:14
msgid "Idioma"
msgstr ""
#: ../../../../inc/themes/classic/config.inc:15
-#: ../../../../inc/themes/material-blue/config.inc:16
+#: ../../../../inc/themes/material-blue/config-site.inc:15
msgid ""
"Establece el idioma global de la aplicación. Es posible establecer un idioma "
"por usuario en las preferencias."
msgstr ""
#: ../../../../inc/themes/classic/config.inc:18
-#: ../../../../inc/themes/material-blue/config.inc:19
+#: ../../../../inc/themes/material-blue/config-site.inc:19
msgid ""
"Para mejorar/añadir las traducciones, puede colaborar en http:://translate."
"syspass.org"
msgstr ""
#: ../../../../inc/themes/classic/config.inc:33
-#: ../../../../inc/themes/classic/preferences.inc:24
-#: ../../../../inc/themes/material-blue/config.inc:34
-#: ../../../../inc/themes/material-blue/preferences.inc:23
+#: ../../../../inc/themes/classic/preferences-site.inc:24
+#: ../../../../inc/themes/material-blue/config-site.inc:34
+#: ../../../../inc/themes/material-blue/preferences-site.inc:25
msgid "Tema Visual"
msgstr ""
#: ../../../../inc/themes/classic/config.inc:37
-#: ../../../../inc/themes/material-blue/config.inc:38
+#: ../../../../inc/themes/material-blue/config-site.inc:39
msgid ""
"Establece el tema visual global de la aplicación. Es posible establecer un "
"tema visual por usuario en las preferencias."
msgstr ""
#: ../../../../inc/themes/classic/config.inc:52
-#: ../../../../inc/themes/material-blue/config.inc:53
-#: ../../../../inc/themes/material-blue/config.inc:61
+#: ../../../../inc/themes/material-blue/config-site.inc:55
+#: ../../../../inc/themes/material-blue/config-site.inc:63
msgid "Timeout de sesión (s)"
msgstr ""
-#: ../../../../inc/themes/classic/config.inc:61
-#: ../../../../inc/themes/material-blue/config.inc:85
-msgid "Habilitar log de eventos"
-msgstr ""
-
-#: ../../../../inc/themes/classic/config.inc:65
-#: ../../../../inc/themes/material-blue/config.inc:89
-msgid "Guarda las acciones realizadas en la aplicación."
-msgstr ""
-
#: ../../../../inc/themes/classic/config.inc:77
-#: ../../../../inc/themes/material-blue/config.inc:103
+#: ../../../../inc/themes/material-blue/config-site.inc:89
msgid "Habilitar depuración"
msgstr ""
#: ../../../../inc/themes/classic/config.inc:81
-#: ../../../../inc/themes/material-blue/config.inc:107
+#: ../../../../inc/themes/material-blue/config-site.inc:94
msgid ""
"Muestra información relativa a la configuración de la aplicación y "
"rendimiento."
msgstr ""
#: ../../../../inc/themes/classic/config.inc:93
-#: ../../../../inc/themes/material-blue/config.inc:121
+#: ../../../../inc/themes/material-blue/config-site.inc:108
msgid "Modo mantenimiento"
msgstr ""
#: ../../../../inc/themes/classic/config.inc:97
-#: ../../../../inc/themes/material-blue/config.inc:125
+#: ../../../../inc/themes/material-blue/config-site.inc:113
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:109
-#: ../../../../inc/themes/material-blue/config.inc:139
+#: ../../../../inc/themes/material-blue/config-site.inc:127
msgid "Comprobar actualizaciones"
msgstr ""
#: ../../../../inc/themes/classic/config.inc:113
-#: ../../../../inc/themes/material-blue/config.inc:143
+#: ../../../../inc/themes/material-blue/config-site.inc:132
msgid ""
"Comprobar actualizaciones de la aplicación (sólo para los usuarios "
"administradores)."
msgstr ""
#: ../../../../inc/themes/classic/config.inc:125
-#: ../../../../inc/themes/material-blue/config.inc:157
+#: ../../../../inc/themes/material-blue/config-site.inc:146
msgid "Comprobar notificaciones"
msgstr ""
#: ../../../../inc/themes/classic/config.inc:129
-#: ../../../../inc/themes/material-blue/config.inc:161
+#: ../../../../inc/themes/material-blue/config-site.inc:151
msgid ""
"Comprobar si existen notificaciones de seguridad o avisos de sysPass (sólo "
"para los usuarios administradores)."
msgstr ""
#: ../../../../inc/themes/classic/config.inc:141
-#: ../../../../inc/themes/classic/preferences.inc:38
-#: ../../../../inc/themes/material-blue/config.inc:182
-#: ../../../../inc/themes/material-blue/preferences.inc:36
+#: ../../../../inc/themes/classic/preferences-site.inc:38
+#: ../../../../inc/themes/material-blue/config-accounts.inc:10
+#: ../../../../inc/themes/material-blue/preferences-site.inc:38
msgid "Nombre de cuenta como enlace"
msgstr ""
#: ../../../../inc/themes/classic/config.inc:145
-#: ../../../../inc/themes/classic/preferences.inc:43
-#: ../../../../inc/themes/material-blue/config.inc:186
-#: ../../../../inc/themes/material-blue/preferences.inc:40
+#: ../../../../inc/themes/classic/preferences-site.inc:43
+#: ../../../../inc/themes/material-blue/config-accounts.inc:14
+#: ../../../../inc/themes/material-blue/preferences-site.inc:42
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:157
-#: ../../../../inc/themes/material-blue/config.inc:267
+#: ../../../../inc/themes/material-blue/config-files.inc:10
msgid "Gestión de archivos"
msgstr ""
#: ../../../../inc/themes/classic/config.inc:161
-#: ../../../../inc/themes/material-blue/config.inc:271
+#: ../../../../inc/themes/material-blue/config-files.inc:15
msgid "Habilita la subida/descarga de archivos para las cuentas."
msgstr ""
#: ../../../../inc/themes/classic/config.inc:173
-#: ../../../../inc/themes/material-blue/config.inc:200
+#: ../../../../inc/themes/material-blue/config-accounts.inc:28
msgid "Búsquedas globales"
msgstr ""
#: ../../../../inc/themes/classic/config.inc:177
-#: ../../../../inc/themes/material-blue/config.inc:204
+#: ../../../../inc/themes/material-blue/config-accounts.inc:32
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:189
-#: ../../../../inc/themes/material-blue/config.inc:286
+#: ../../../../inc/themes/material-blue/config-files.inc:30
msgid "Extensiones de archivos permitidas"
msgstr ""
#: ../../../../inc/themes/classic/config.inc:193
-#: ../../../../inc/themes/material-blue/config.inc:290
+#: ../../../../inc/themes/material-blue/config-files.inc:35
msgid "Extensiones permitidas para la subida de archivos."
msgstr ""
#: ../../../../inc/themes/classic/config.inc:197
-#: ../../../../inc/themes/material-blue/config.inc:294
+#: ../../../../inc/themes/material-blue/config-files.inc:39
msgid "Se permite un máximo de 4 caracteres."
msgstr ""
#: ../../../../inc/themes/classic/config.inc:201
-#: ../../../../inc/themes/material-blue/config.inc:298
+#: ../../../../inc/themes/material-blue/config-files.inc:43
msgid ""
"Escribir extensión y pulsar intro para añadir. Es necesario guardar la "
"configuración."
msgstr ""
#: ../../../../inc/themes/classic/config.inc:216
-#: ../../../../inc/themes/material-blue/config.inc:313
+#: ../../../../inc/themes/material-blue/config-files.inc:59
msgid "Establece el tamaño máximo para subir archivos."
msgstr ""
#: ../../../../inc/themes/classic/config.inc:220
-#: ../../../../inc/themes/material-blue/config.inc:317
+#: ../../../../inc/themes/material-blue/config-files.inc:63
msgid "El máximo absuluto es de 16MB."
msgstr ""
#: ../../../../inc/themes/classic/config.inc:231
-#: ../../../../inc/themes/classic/preferences.inc:56
-#: ../../../../inc/themes/material-blue/config.inc:218
-#: ../../../../inc/themes/material-blue/preferences.inc:54
+#: ../../../../inc/themes/classic/preferences-site.inc:56
+#: ../../../../inc/themes/material-blue/config-accounts.inc:46
+#: ../../../../inc/themes/material-blue/preferences-site.inc:56
msgid "Resultados por página"
msgstr ""
#: ../../../../inc/themes/classic/config.inc:235
-#: ../../../../inc/themes/classic/preferences.inc:61
-#: ../../../../inc/themes/material-blue/config.inc:222
-#: ../../../../inc/themes/material-blue/preferences.inc:58
+#: ../../../../inc/themes/classic/preferences-site.inc:61
+#: ../../../../inc/themes/material-blue/config-accounts.inc:50
+#: ../../../../inc/themes/material-blue/preferences-site.inc:60
msgid "Número de resultados por página a mostrar, al realizar una búsqueda."
msgstr ""
#: ../../../../inc/themes/classic/config.inc:246
+#: ../../../../inc/themes/material-blue/config-accounts.inc:89
msgid "Resultados en Tarjetas"
msgstr ""
#: ../../../../inc/themes/classic/config.inc:250
+#: ../../../../inc/themes/material-blue/config-accounts.inc:93
msgid "Muestra los resultados de búsqueda de cuentas en formato tarjeta."
msgstr ""
#: ../../../../inc/themes/classic/config.inc:262
-#: ../../../../inc/themes/material-blue/config.inc:238
+#: ../../../../inc/themes/material-blue/config-accounts.inc:66
msgid "Imagen para mostrar clave"
msgstr ""
#: ../../../../inc/themes/classic/config.inc:266
-#: ../../../../inc/themes/material-blue/config.inc:242
+#: ../../../../inc/themes/material-blue/config-accounts.inc:70
msgid "Generar una imagen con el texto de la clave de la cuenta."
msgstr ""
#: ../../../../inc/themes/classic/config.inc:269
-#: ../../../../inc/themes/material-blue/config.inc:245
+#: ../../../../inc/themes/material-blue/config-accounts.inc:74
msgid "Util para entornos donde copiar la clave supone un riesgo de seguridad."
msgstr ""
-#: ../../../../inc/themes/classic/config.inc:304
-#: ../../../../inc/themes/material-blue/config.inc:435
+#: ../../../../inc/themes/classic/config.inc:308
+#: ../../../../inc/themes/material-blue/config.inc:39
msgid "Añadir extensión"
msgstr ""
-#: ../../../../inc/themes/classic/config.inc:305
-#: ../../../../inc/themes/material-blue/config.inc:436
+#: ../../../../inc/themes/classic/config.inc:309
+#: ../../../../inc/themes/material-blue/config.inc:40
msgid "Eliminar extensión"
msgstr ""
-#: ../../../../inc/themes/classic/customers.inc:10
-#: ../../../../inc/themes/material-blue/customers.inc:14
+#: ../../../../inc/themes/classic/customers.inc:11
+#: ../../../../inc/themes/material-blue/customers.inc:16
msgid "Nombre del cliente"
msgstr ""
-#: ../../../../inc/themes/classic/customers.inc:18
-#: ../../../../inc/themes/material-blue/customers.inc:26
+#: ../../../../inc/themes/classic/customers.inc:19
+#: ../../../../inc/themes/material-blue/customers.inc:28
msgid "Descripción del cliente"
msgstr ""
@@ -3635,13 +4360,61 @@ msgstr ""
msgid "Obligatorio"
msgstr ""
+#: ../../../../inc/themes/classic/datagrid-nav-full.inc:11
+#: ../../../../inc/themes/classic/search.inc:166
+#: ../../../../inc/themes/material-blue/datagrid-nav-full.inc:11
+msgid "Filtro ON"
+msgstr ""
+
+#: ../../../../inc/themes/classic/datagrid-rows.inc:10
+#: ../../../../inc/themes/classic/datasearch-grid.inc:12
+#: ../../../../inc/themes/classic/eventlog.inc:6
+#: ../../../../inc/themes/classic/search.inc:5
+#: ../../../../inc/themes/material-blue/datagrid-rows.inc:10
+#: ../../../../inc/themes/material-blue/datasearch-grid.inc:12
+#: ../../../../inc/themes/material-blue/eventlog.inc:8
+msgid "No se encontraron registros"
+msgstr ""
+
+#: ../../../../inc/themes/classic/datasearch-rows.inc:19
+#: ../../../../inc/themes/classic/search.inc:36
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:19
+msgid "Buscar en Wiki"
+msgstr ""
+
+#: ../../../../inc/themes/classic/datasearch-rows.inc:53
+#: ../../../../inc/themes/classic/search.inc:72
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:53
+msgid "Abrir enlace a"
+msgstr ""
+
+#: ../../../../inc/themes/classic/datasearch-rows.inc:78
+#: ../../../../inc/themes/classic/search.inc:90
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:84
+msgid "Archivos adjuntos"
+msgstr ""
+
+#: ../../../../inc/themes/classic/datasearch-rows.inc:85
+#: ../../../../inc/themes/classic/datasearch-rows.inc:92
+#: ../../../../inc/themes/classic/search.inc:99
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:93
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:100
+msgid "Enlace a Wiki"
+msgstr ""
+
+#: ../../../../inc/themes/classic/datasearch-rows.inc:88
+#: ../../../../inc/themes/classic/search.inc:96
+#: ../../../../inc/themes/material-blue/datasearch-rows.inc:95
+msgid "Ver en Wiki"
+msgstr ""
+
#: ../../../../inc/themes/classic/encryption.inc:5
#: ../../../../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:5
+#: ../../../../inc/themes/material-blue/encryption.inc:7
#: ../../../../inc/themes/material-blue/install.inc:52
#: ../../../../inc/themes/material-blue/install.inc:59
#: ../../../../inc/themes/material-blue/login.inc:26
@@ -3651,101 +4424,101 @@ msgstr ""
#: ../../../../inc/themes/classic/encryption.inc:13
#: ../../../../inc/themes/classic/encryption.inc:113
-#: ../../../../inc/themes/material-blue/encryption.inc:13
-#: ../../../../inc/themes/material-blue/encryption.inc:128
+#: ../../../../inc/themes/material-blue/encryption.inc:15
+#: ../../../../inc/themes/material-blue/encryption.inc:130
msgid "Último cambio"
msgstr ""
#: ../../../../inc/themes/classic/encryption.inc:22
-#: ../../../../inc/themes/material-blue/encryption.inc:22
-#: ../../../../inc/themes/material-blue/encryption.inc:28
+#: ../../../../inc/themes/material-blue/encryption.inc:24
+#: ../../../../inc/themes/material-blue/encryption.inc:30
msgid "Clave Maestra actual"
msgstr ""
#: ../../../../inc/themes/classic/encryption.inc:31
-#: ../../../../inc/themes/material-blue/encryption.inc:34
-#: ../../../../inc/themes/material-blue/encryption.inc:40
+#: ../../../../inc/themes/material-blue/encryption.inc:36
+#: ../../../../inc/themes/material-blue/encryption.inc:42
msgid "Nueva Clave Maestra"
msgstr ""
#: ../../../../inc/themes/classic/encryption.inc:40
-#: ../../../../inc/themes/material-blue/encryption.inc:46
-#: ../../../../inc/themes/material-blue/encryption.inc:52
+#: ../../../../inc/themes/material-blue/encryption.inc:48
+#: ../../../../inc/themes/material-blue/encryption.inc:54
msgid "Nueva Clave Maestra (repetir)"
msgstr ""
#: ../../../../inc/themes/classic/encryption.inc:48
-#: ../../../../inc/themes/material-blue/encryption.inc:58
+#: ../../../../inc/themes/material-blue/encryption.inc:60
msgid "No modificar cuentas"
msgstr ""
#: ../../../../inc/themes/classic/encryption.inc:53
-#: ../../../../inc/themes/material-blue/encryption.inc:63
+#: ../../../../inc/themes/material-blue/encryption.inc:65
msgid "Establece una nueva clave maestra sin re-encriptar las cuentas"
msgstr ""
#: ../../../../inc/themes/classic/encryption.inc:64
-#: ../../../../inc/themes/material-blue/encryption.inc:76
+#: ../../../../inc/themes/material-blue/encryption.inc:78
msgid "Confirmar cambio"
msgstr ""
#: ../../../../inc/themes/classic/encryption.inc:67
#: ../../../../inc/themes/classic/encryption.inc:70
#: ../../../../inc/themes/classic/encryption.inc:73
-#: ../../../../inc/themes/classic/import.inc:64
-#: ../../../../inc/themes/classic/security.inc:43
+#: ../../../../inc/themes/classic/import.inc:169
+#: ../../../../inc/themes/classic/preferences-security.inc:43
msgid "Atención"
msgstr ""
#: ../../../../inc/themes/classic/encryption.inc:68
-#: ../../../../inc/themes/material-blue/encryption.inc:80
+#: ../../../../inc/themes/material-blue/encryption.inc:82
msgid "Guarde la nueva clave en un lugar seguro."
msgstr ""
#: ../../../../inc/themes/classic/encryption.inc:71
-#: ../../../../inc/themes/material-blue/encryption.inc:83
+#: ../../../../inc/themes/material-blue/encryption.inc:85
msgid "Se volverán a encriptar las claves de todas las cuentas."
msgstr ""
#: ../../../../inc/themes/classic/encryption.inc:74
-#: ../../../../inc/themes/material-blue/encryption.inc:86
+#: ../../../../inc/themes/material-blue/encryption.inc:88
msgid "Los usuarios deberán de introducir la nueva clave maestra."
msgstr ""
#: ../../../../inc/themes/classic/encryption.inc:95
-#: ../../../../inc/themes/material-blue/encryption.inc:109
+#: ../../../../inc/themes/material-blue/encryption.inc:111
msgid ""
"La clave maestra es utilizada para encriptar las claves de las cuentas de "
"sysPass para mantenerlas seguras."
msgstr ""
#: ../../../../inc/themes/classic/encryption.inc:97
-#: ../../../../inc/themes/material-blue/encryption.inc:111
+#: ../../../../inc/themes/material-blue/encryption.inc:113
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:105
-#: ../../../../inc/themes/material-blue/encryption.inc:121
+#: ../../../../inc/themes/material-blue/encryption.inc:123
msgid "Clave Temporal"
msgstr ""
#: ../../../../inc/themes/classic/encryption.inc:116
#: ../../../../inc/themes/classic/encryption.inc:127
-#: ../../../../inc/themes/material-blue/encryption.inc:131
-#: ../../../../inc/themes/material-blue/encryption.inc:142
+#: ../../../../inc/themes/material-blue/encryption.inc:133
+#: ../../../../inc/themes/material-blue/encryption.inc:144
msgid "No generada"
msgstr ""
#: ../../../../inc/themes/classic/encryption.inc:121
-#: ../../../../inc/themes/material-blue/encryption.inc:136
+#: ../../../../inc/themes/material-blue/encryption.inc:138
msgid "Válido hasta"
msgstr ""
#: ../../../../inc/themes/classic/encryption.inc:133
-#: ../../../../inc/themes/material-blue/encryption.inc:148
-#: ../../../../inc/themes/material-blue/encryption.inc:154
+#: ../../../../inc/themes/material-blue/encryption.inc:150
+#: ../../../../inc/themes/material-blue/encryption.inc:156
msgid "Validez (s)"
msgstr ""
@@ -3754,7 +4527,7 @@ msgid "Validez"
msgstr ""
#: ../../../../inc/themes/classic/encryption.inc:164
-#: ../../../../inc/themes/material-blue/encryption.inc:183
+#: ../../../../inc/themes/material-blue/encryption.inc:185
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 "
@@ -3762,73 +4535,30 @@ msgid ""
msgstr ""
#: ../../../../inc/themes/classic/encryption.inc:166
-#: ../../../../inc/themes/material-blue/encryption.inc:187
+#: ../../../../inc/themes/material-blue/encryption.inc:189
msgid "Generar"
msgstr ""
-#: ../../../../inc/themes/classic/eventlog.inc:6
-#: ../../../../inc/themes/classic/search.inc:3
-#: ../../../../inc/themes/material-blue/eventlog.inc:6
-#: ../../../../inc/themes/material-blue/search.inc:3
-msgid "No se encontraron registros"
-msgstr ""
-
#: ../../../../inc/themes/classic/eventlog.inc:17
-#: ../../../../inc/themes/material-blue/eventlog.inc:17
+#: ../../../../inc/themes/material-blue/eventlog.inc:19
msgid "Fecha / Hora"
msgstr ""
#: ../../../../inc/themes/classic/eventlog.inc:20
-#: ../../../../inc/themes/material-blue/eventlog.inc:20
+#: ../../../../inc/themes/material-blue/eventlog.inc:22
+msgid "Nivel"
+msgstr ""
+
+#: ../../../../inc/themes/classic/eventlog.inc:23
+#: ../../../../inc/themes/material-blue/eventlog.inc:25
msgid "Evento"
msgstr ""
-#: ../../../../inc/themes/classic/eventlog.inc:26
-#: ../../../../inc/themes/material-blue/eventlog.inc:26
+#: ../../../../inc/themes/classic/eventlog.inc:29
+#: ../../../../inc/themes/material-blue/eventlog.inc:31
msgid "IP"
msgstr ""
-#: ../../../../inc/themes/classic/eventlog.inc:84
-#: ../../../../inc/themes/classic/search.inc:20
-#: ../../../../inc/themes/classic/search.inc:199
-#: ../../../../inc/themes/material-blue/eventlog.inc:84
-#: ../../../../inc/themes/material-blue/search.inc:20
-#: ../../../../inc/themes/material-blue/search.inc:209
-msgid "Primera página"
-msgstr ""
-
-#: ../../../../inc/themes/classic/eventlog.inc:86
-#: ../../../../inc/themes/classic/search.inc:22
-#: ../../../../inc/themes/classic/search.inc:201
-#: ../../../../inc/themes/material-blue/eventlog.inc:86
-#: ../../../../inc/themes/material-blue/search.inc:22
-#: ../../../../inc/themes/material-blue/search.inc:211
-msgid "Página anterior"
-msgstr ""
-
-#: ../../../../inc/themes/classic/eventlog.inc:91
-#: ../../../../inc/themes/classic/search.inc:27
-#: ../../../../inc/themes/classic/search.inc:206
-#: ../../../../inc/themes/material-blue/eventlog.inc:91
-#: ../../../../inc/themes/material-blue/search.inc:27
-#: ../../../../inc/themes/material-blue/search.inc:216
-msgid "Página siguiente"
-msgstr ""
-
-#: ../../../../inc/themes/classic/eventlog.inc:93
-#: ../../../../inc/themes/classic/search.inc:29
-#: ../../../../inc/themes/classic/search.inc:208
-#: ../../../../inc/themes/material-blue/eventlog.inc:93
-#: ../../../../inc/themes/material-blue/search.inc:29
-#: ../../../../inc/themes/material-blue/search.inc:218
-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:29
msgid "Indica si la conexión utiliza HTTPS."
@@ -3860,169 +4590,169 @@ msgid "Un proyecto de cygnux.org"
msgstr ""
#: ../../../../inc/themes/classic/groups.inc:10
-#: ../../../../inc/themes/material-blue/groups.inc:14
+#: ../../../../inc/themes/material-blue/groups.inc:17
msgid "Nombre del grupo"
msgstr ""
#: ../../../../inc/themes/classic/groups.inc:18
-#: ../../../../inc/themes/material-blue/groups.inc:26
+#: ../../../../inc/themes/material-blue/groups.inc:29
msgid "Descripción del grupo"
msgstr ""
#: ../../../../inc/themes/classic/import.inc:4
-#: ../../../../inc/themes/material-blue/import.inc:118
-msgid "Importar phpPMS"
-msgstr ""
-
-#: ../../../../inc/themes/classic/import.inc:11
-#: ../../../../inc/themes/classic/install.inc:63
-#: ../../../../inc/themes/classic/install.inc:64
-#: ../../../../inc/themes/material-blue/import.inc:125
-#: ../../../../inc/themes/material-blue/import.inc:137
-msgid "Usuario BBDD"
-msgstr ""
-
-#: ../../../../inc/themes/classic/import.inc:15
-#: ../../../../inc/themes/material-blue/import.inc:129
-msgid "Indicar el usuario de conexión a la base de datos de phpPMS."
-msgstr ""
-
-#: ../../../../inc/themes/classic/import.inc:25
-#: ../../../../inc/themes/classic/install.inc:71
-#: ../../../../inc/themes/classic/install.inc:73
-#: ../../../../inc/themes/material-blue/import.inc:143
-#: ../../../../inc/themes/material-blue/import.inc:149
-msgid "Clave BBDD"
-msgstr ""
-
-#: ../../../../inc/themes/classic/import.inc:33
-#: ../../../../inc/themes/classic/install.inc:78
-#: ../../../../inc/themes/classic/install.inc:79
-#: ../../../../inc/themes/material-blue/import.inc:155
-#: ../../../../inc/themes/material-blue/import.inc:167
-msgid "Nombre BBDD"
-msgstr ""
-
-#: ../../../../inc/themes/classic/import.inc:37
-#: ../../../../inc/themes/material-blue/import.inc:159
-msgid "Indicar el nombre de la base de datos de phpPMS."
-msgstr ""
-
-#: ../../../../inc/themes/classic/import.inc:47
-#: ../../../../inc/themes/classic/install.inc:87
-#: ../../../../inc/themes/classic/install.inc:88
-#: ../../../../inc/themes/material-blue/import.inc:173
-#: ../../../../inc/themes/material-blue/import.inc:185
-msgid "Servidor BBDD"
-msgstr ""
-
-#: ../../../../inc/themes/classic/import.inc:51
-#: ../../../../inc/themes/material-blue/import.inc:177
-msgid "Indicar el servidor de la base de datos de phpPMS."
-msgstr ""
-
-#: ../../../../inc/themes/classic/import.inc:61
-#: ../../../../inc/themes/material-blue/import.inc:191
-msgid "Confirmar"
-msgstr ""
-
-#: ../../../../inc/themes/classic/import.inc:65
-#: ../../../../inc/themes/material-blue/import.inc:195
-msgid "Los datos actuales serán borrados (excepto el usuario actual)"
-msgstr ""
-
-#: ../../../../inc/themes/classic/import.inc:80
-msgid "Iniciar"
-msgstr ""
-
-#: ../../../../inc/themes/classic/import.inc:86
-#: ../../../../inc/themes/material-blue/import.inc:4
+#: ../../../../inc/themes/material-blue/import.inc:6
msgid "Importar CSV/XML"
msgstr ""
-#: ../../../../inc/themes/classic/import.inc:93
-#: ../../../../inc/themes/material-blue/import.inc:11
+#: ../../../../inc/themes/classic/import.inc:11
+#: ../../../../inc/themes/material-blue/import.inc:13
msgid "Usuario por Defecto"
msgstr ""
-#: ../../../../inc/themes/classic/import.inc:97
-#: ../../../../inc/themes/material-blue/import.inc:15
+#: ../../../../inc/themes/classic/import.inc:15
+#: ../../../../inc/themes/material-blue/import.inc:17
msgid "Define el usuario por defecto para las cuentas importadas."
msgstr ""
-#: ../../../../inc/themes/classic/import.inc:114
+#: ../../../../inc/themes/classic/import.inc:32
#: ../../../../inc/themes/classic/ldap.inc:144
-#: ../../../../inc/themes/material-blue/import.inc:33
-#: ../../../../inc/themes/material-blue/ldap.inc:170
+#: ../../../../inc/themes/material-blue/import.inc:35
+#: ../../../../inc/themes/material-blue/ldap.inc:172
msgid "Grupo por Defecto"
msgstr ""
-#: ../../../../inc/themes/classic/import.inc:118
-#: ../../../../inc/themes/material-blue/import.inc:37
+#: ../../../../inc/themes/classic/import.inc:36
+#: ../../../../inc/themes/material-blue/import.inc:39
msgid "Define el grupo por defecto para las cuentas importadas."
msgstr ""
-#: ../../../../inc/themes/classic/import.inc:135
-#: ../../../../inc/themes/material-blue/import.inc:55
-#: ../../../../inc/themes/material-blue/import.inc:61
+#: ../../../../inc/themes/classic/import.inc:53
+#: ../../../../inc/themes/material-blue/import.inc:57
+#: ../../../../inc/themes/material-blue/import.inc:63
msgid "Clave de Importación"
msgstr ""
-#: ../../../../inc/themes/classic/import.inc:143
-#: ../../../../inc/themes/material-blue/import.inc:67
-#: ../../../../inc/themes/material-blue/import.inc:73
+#: ../../../../inc/themes/classic/import.inc:61
+#: ../../../../inc/themes/material-blue/import.inc:69
+#: ../../../../inc/themes/material-blue/import.inc:75
msgid "Delimitador CSV"
msgstr ""
-#: ../../../../inc/themes/classic/import.inc:159
+#: ../../../../inc/themes/classic/import.inc:75
#: ../../../../inc/themes/material-blue/import.inc:87
msgid "Soltar archivo aquí o click para seleccionar"
msgstr ""
-#: ../../../../inc/themes/classic/import.inc:172
-#: ../../../../inc/themes/material-blue/import.inc:101
+#: ../../../../inc/themes/classic/import.inc:91
+#: ../../../../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/classic/import.inc:174
-#: ../../../../inc/themes/material-blue/import.inc:103
+#: ../../../../inc/themes/classic/import.inc:93
+#: ../../../../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:176
-#: ../../../../inc/themes/material-blue/import.inc:105
+#: ../../../../inc/themes/classic/import.inc:95
+#: ../../../../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:178
-#: ../../../../inc/themes/material-blue/import.inc:107
+#: ../../../../inc/themes/classic/import.inc:97
+#: ../../../../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:180
-#: ../../../../inc/themes/material-blue/import.inc:109
+#: ../../../../inc/themes/classic/import.inc:99
+#: ../../../../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:182
-#: ../../../../inc/themes/material-blue/import.inc:111
+#: ../../../../inc/themes/classic/import.inc:101
+#: ../../../../inc/themes/material-blue/import.inc:114
msgid "nombre_de_cuenta;cliente;categoría;url;usuario;clave;notas"
msgstr ""
-#: ../../../../inc/themes/classic/import.inc:184
-#: ../../../../inc/themes/material-blue/import.inc:113
+#: ../../../../inc/themes/classic/import.inc:103
+#: ../../../../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/import.inc:109
+#: ../../../../inc/themes/material-blue/import.inc:121
+msgid "Importar phpPMS"
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:116
+#: ../../../../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:120
+#: ../../../../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:130
+#: ../../../../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:138
+#: ../../../../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:142
+#: ../../../../inc/themes/material-blue/import.inc:162
+msgid "Indicar el nombre de la base de datos de phpPMS."
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:152
+#: ../../../../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:156
+#: ../../../../inc/themes/material-blue/import.inc:180
+msgid "Indicar el servidor de la base de datos de phpPMS."
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:166
+#: ../../../../inc/themes/material-blue/import.inc:194
+msgid "Confirmar"
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:170
+#: ../../../../inc/themes/material-blue/import.inc:198
+msgid "Los datos actuales serán borrados (excepto el usuario actual)"
+msgstr ""
+
+#: ../../../../inc/themes/classic/import.inc:185
+msgid "Iniciar"
+msgstr ""
+
#: ../../../../inc/themes/classic/info.inc:4
#: ../../../../inc/themes/material-blue/info.inc:4
msgid "Información de la Aplicación"
@@ -4053,18 +4783,6 @@ msgstr ""
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:353
-#: ../../../../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/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 "
@@ -4115,22 +4833,22 @@ msgid "Instalar"
msgstr ""
#: ../../../../inc/themes/classic/ldap.inc:12
-#: ../../../../inc/themes/material-blue/ldap.inc:12
+#: ../../../../inc/themes/material-blue/ldap.inc:14
msgid "Habilitar LDAP"
msgstr ""
#: ../../../../inc/themes/classic/ldap.inc:16
-#: ../../../../inc/themes/material-blue/ldap.inc:16
+#: ../../../../inc/themes/material-blue/ldap.inc:18
msgid "Habilita de autentificación mediante servidor LDAP."
msgstr ""
#: ../../../../inc/themes/classic/ldap.inc:20
-#: ../../../../inc/themes/material-blue/ldap.inc:20
+#: ../../../../inc/themes/material-blue/ldap.inc:22
msgid "Este método utilizará MySQL en caso de fallo."
msgstr ""
#: ../../../../inc/themes/classic/ldap.inc:36
-#: ../../../../inc/themes/material-blue/ldap.inc:39
+#: ../../../../inc/themes/material-blue/ldap.inc:41
msgid "Nombre o dirección IP del servidor de LDAP."
msgstr ""
@@ -4139,88 +4857,99 @@ msgstr ""
#: ../../../../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
+#: ../../../../inc/themes/material-blue/ldap.inc:45
+#: ../../../../inc/themes/material-blue/ldap.inc:74
+#: ../../../../inc/themes/material-blue/ldap.inc:121
+#: ../../../../inc/themes/material-blue/ldap.inc:153
+#: ../../../../inc/themes/material-blue/wiki.inc:105
msgid "Ejemplos:"
msgstr ""
#: ../../../../inc/themes/classic/ldap.inc:57
-#: ../../../../inc/themes/material-blue/ldap.inc:64
+#: ../../../../inc/themes/material-blue/ldap.inc:66
msgid "Usuario de conexión"
msgstr ""
#: ../../../../inc/themes/classic/ldap.inc:61
-#: ../../../../inc/themes/material-blue/ldap.inc:68
+#: ../../../../inc/themes/material-blue/ldap.inc:70
msgid "Usuario para conectar con el servicio de LDAP."
msgstr ""
#: ../../../../inc/themes/classic/ldap.inc:81
-#: ../../../../inc/themes/material-blue/ldap.inc:92
+#: ../../../../inc/themes/material-blue/ldap.inc:94
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
+#: ../../../../inc/themes/material-blue/ldap.inc:113
+#: ../../../../inc/themes/material-blue/ldap.inc:135
msgid "Base de búsqueda"
msgstr ""
#: ../../../../inc/themes/classic/ldap.inc:96
-#: ../../../../inc/themes/material-blue/ldap.inc:115
+#: ../../../../inc/themes/material-blue/ldap.inc:117
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
+#: ../../../../inc/themes/material-blue/ldap.inc:145
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
+#: ../../../../inc/themes/material-blue/ldap.inc:149
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
+#: ../../../../inc/themes/material-blue/ldap.inc:176
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
+#: ../../../../inc/themes/material-blue/ldap.inc:192
msgid "Perfil por Defecto"
msgstr ""
#: ../../../../inc/themes/classic/ldap.inc:169
-#: ../../../../inc/themes/material-blue/ldap.inc:194
+#: ../../../../inc/themes/material-blue/ldap.inc:196
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
+#: ../../../../inc/themes/material-blue/ldap.inc:212
msgid "Active Directory"
msgstr ""
#: ../../../../inc/themes/classic/ldap.inc:190
-#: ../../../../inc/themes/material-blue/ldap.inc:214
+#: ../../../../inc/themes/material-blue/ldap.inc:216
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
+#: ../../../../inc/themes/classic/wiki.inc:214
+#: ../../../../inc/themes/material-blue/ldap.inc:230
+#: ../../../../inc/themes/material-blue/wiki.inc:247
msgid "Comprobar"
msgstr ""
#: ../../../../inc/themes/classic/ldap.inc:206
-#: ../../../../inc/themes/material-blue/ldap.inc:232
+#: ../../../../inc/themes/material-blue/ldap.inc:234
msgid "Comprobar conexión con LDAP"
msgstr ""
+#: ../../../../inc/themes/classic/login-2fa.inc:14
+#: ../../../../inc/themes/material-blue/login-2fa.inc:12
+msgid "Introducir código"
+msgstr ""
+
+#: ../../../../inc/themes/classic/login-2fa.inc:26
+msgid "Verificar"
+msgstr ""
+
#: ../../../../inc/themes/classic/login.inc:46
#: ../../../../inc/themes/material-blue/login.inc:74
msgid "¿Olvidó su clave?"
@@ -4240,44 +4969,31 @@ msgid "Nuevas Características"
msgstr ""
#: ../../../../inc/themes/classic/mail.inc:11
-#: ../../../../inc/themes/material-blue/mail.inc:11
+#: ../../../../inc/themes/material-blue/mail.inc:13
msgid "Habilitar notificaciones de correo"
msgstr ""
-#: ../../../../inc/themes/classic/mail.inc:29
-#: ../../../../inc/themes/material-blue/config.inc:367
-#: ../../../../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
+#: ../../../../inc/themes/material-blue/mail.inc:51
msgid "Habilitar Autentificación"
msgstr ""
#: ../../../../inc/themes/classic/mail.inc:68
-#: ../../../../inc/themes/material-blue/mail.inc:91
+#: ../../../../inc/themes/material-blue/mail.inc:93
msgid "Deshabilitada"
msgstr ""
#: ../../../../inc/themes/classic/mail.inc:77
-#: ../../../../inc/themes/material-blue/mail.inc:100
-#: ../../../../inc/themes/material-blue/mail.inc:107
+#: ../../../../inc/themes/material-blue/mail.inc:102
+#: ../../../../inc/themes/material-blue/mail.inc:109
msgid "Dirección de correo de envío"
msgstr ""
#: ../../../../inc/themes/classic/mail.inc:85
-#: ../../../../inc/themes/material-blue/mail.inc:113
+#: ../../../../inc/themes/material-blue/mail.inc:115
msgid "Habilitar peticiones por correo"
msgstr ""
-#: ../../../../inc/themes/classic/mgmttabs.inc:70
-#: ../../../../inc/themes/classic/search.inc:150
-#: ../../../../inc/themes/material-blue/search.inc:160
-msgid "Más Acciones"
-msgstr ""
-
#: ../../../../inc/themes/classic/passreset.inc:13
#: ../../../../inc/themes/material-blue/passreset.inc:9
msgid "Solicitud de Cambio de Clave"
@@ -4302,7 +5018,7 @@ msgid "Volver a iniciar sesión"
msgstr ""
#: ../../../../inc/themes/classic/passreset.inc:48
-#: ../../../../inc/themes/material-blue/2fa.inc:25
+#: ../../../../inc/themes/material-blue/login-2fa.inc:25
#: ../../../../inc/themes/material-blue/passreset.inc:53
#: ../../../../inc/themes/material-blue/passreset.inc:54
msgid "Solicitar"
@@ -4318,84 +5034,119 @@ msgstr ""
msgid "Cambiar"
msgstr ""
-#: ../../../../inc/themes/classic/passreset.inc:52
-msgid "Cambiar Clave"
+#: ../../../../inc/themes/classic/preferences-security.inc:4
+msgid "Autenticación"
msgstr ""
-#: ../../../../inc/themes/classic/preferences.inc:73
-#: ../../../../inc/themes/material-blue/preferences.inc:74
+#: ../../../../inc/themes/classic/preferences-security.inc:13
+msgid "Autenticación en 2 pasos"
+msgstr ""
+
+#: ../../../../inc/themes/classic/preferences-security.inc:17
+#: ../../../../inc/themes/material-blue/preferences-security.inc:17
+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/preferences-security.inc:21
+#: ../../../../inc/themes/material-blue/preferences-security.inc:21
+msgid ""
+"Escanee el código QR proporcionado y a continuación introduzca la clave de 6 "
+"dígitos."
+msgstr ""
+
+#: ../../../../inc/themes/classic/preferences-security.inc:29
+#: ../../../../inc/themes/material-blue/preferences-security.inc:29
+msgid "Activar"
+msgstr ""
+
+#: ../../../../inc/themes/classic/preferences-security.inc:34
+#: ../../../../inc/themes/material-blue/preferences-security.inc:35
+msgid "Error al obtener el código QR. Inténtelo de nuevo"
+msgstr ""
+
+#: ../../../../inc/themes/classic/preferences-security.inc:39
+#: ../../../../inc/themes/material-blue/preferences-security.inc:43
+msgid "Código"
+msgstr ""
+
+#: ../../../../inc/themes/classic/preferences-security.inc:44
+#: ../../../../inc/themes/material-blue/preferences-security.inc:48
+msgid ""
+"Una vez activada, sólo es posible acceder si se dispone del dispositivo "
+"generador de códigos asociado."
+msgstr ""
+
+#: ../../../../inc/themes/classic/preferences-site.inc:73
+#: ../../../../inc/themes/material-blue/preferences-site.inc:76
msgid "Ordenar resultados por visitas"
msgstr ""
-#: ../../../../inc/themes/classic/preferences.inc:77
-#: ../../../../inc/themes/material-blue/preferences.inc:78
+#: ../../../../inc/themes/classic/preferences-site.inc:77
+#: ../../../../inc/themes/material-blue/preferences-site.inc:80
msgid ""
"Ordena los resultados de búsqueda por el número de visitas de las cuentas."
msgstr ""
-#: ../../../../inc/themes/classic/preferences.inc:90
-#: ../../../../inc/themes/material-blue/preferences.inc:91
+#: ../../../../inc/themes/classic/preferences-site.inc:90
+#: ../../../../inc/themes/material-blue/preferences-site.inc:93
msgid "Barra de navegación superior"
msgstr ""
-#: ../../../../inc/themes/classic/preferences.inc:94
-#: ../../../../inc/themes/material-blue/preferences.inc:95
+#: ../../../../inc/themes/classic/preferences-site.inc:94
+#: ../../../../inc/themes/material-blue/preferences-site.inc:97
msgid "Mostrar una barra de navegación superior en las búsquedas."
msgstr ""
-#: ../../../../inc/themes/classic/preferences.inc:107
-#: ../../../../inc/themes/material-blue/preferences.inc:108
+#: ../../../../inc/themes/classic/preferences-site.inc:107
+#: ../../../../inc/themes/material-blue/preferences-site.inc:110
msgid "Mostrar Acciones Ocultas"
msgstr ""
-#: ../../../../inc/themes/classic/preferences.inc:111
-#: ../../../../inc/themes/material-blue/preferences.inc:112
+#: ../../../../inc/themes/classic/preferences-site.inc:111
+#: ../../../../inc/themes/material-blue/preferences-site.inc:114
msgid ""
"Mostrar las acciones ocultas para los elementos de la búsqueda de cuentas."
msgstr ""
#: ../../../../inc/themes/classic/profiles.inc:11
-#: ../../../../inc/themes/material-blue/profiles.inc:14
+#: ../../../../inc/themes/material-blue/profiles.inc:16
msgid "Nombre del perfil"
msgstr ""
#: ../../../../inc/themes/classic/profiles.inc:19
-#: ../../../../inc/themes/material-blue/profiles.inc:30
+#: ../../../../inc/themes/material-blue/profiles.inc:32
msgid "Ver detalles de cuenta"
msgstr ""
#: ../../../../inc/themes/classic/profiles.inc:19
-#: ../../../../inc/themes/material-blue/profiles.inc:30
+#: ../../../../inc/themes/material-blue/profiles.inc:32
msgid "Ver"
msgstr ""
#: ../../../../inc/themes/classic/profiles.inc:23
-#: ../../../../inc/themes/material-blue/profiles.inc:35
+#: ../../../../inc/themes/material-blue/profiles.inc:37
msgid "Ver clave de cuenta"
msgstr ""
#: ../../../../inc/themes/classic/profiles.inc:28
-#: ../../../../inc/themes/material-blue/profiles.inc:40
+#: ../../../../inc/themes/material-blue/profiles.inc:42
msgid "Ver historial de cuenta"
msgstr ""
#: ../../../../inc/themes/classic/profiles.inc:32
-#: ../../../../inc/themes/material-blue/profiles.inc:45
+#: ../../../../inc/themes/material-blue/profiles.inc:47
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
+#: ../../../../inc/themes/material-blue/profiles.inc:52
msgid "Editar clave de cuenta"
msgstr ""
#: ../../../../inc/themes/classic/profiles.inc:37
-#: ../../../../inc/themes/material-blue/profiles.inc:50
+#: ../../../../inc/themes/material-blue/profiles.inc:52
msgid "Editar Clave"
msgstr ""
@@ -4403,10 +5154,6 @@ msgstr ""
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 ""
@@ -4416,12 +5163,12 @@ msgid "Borrar"
msgstr ""
#: ../../../../inc/themes/classic/profiles.inc:50
-#: ../../../../inc/themes/material-blue/profiles.inc:60
+#: ../../../../inc/themes/material-blue/profiles.inc:62
msgid "Ver archivos de cuenta"
msgstr ""
#: ../../../../inc/themes/classic/profiles.inc:61
-#: ../../../../inc/themes/material-blue/profiles.inc:72
+#: ../../../../inc/themes/material-blue/profiles.inc:79
msgid "Configuración general"
msgstr ""
@@ -4434,242 +5181,149 @@ msgid "Realizar copia de seguridad"
msgstr ""
#: ../../../../inc/themes/classic/profiles.inc:70
-#: ../../../../inc/themes/material-blue/profiles.inc:82
+#: ../../../../inc/themes/material-blue/profiles.inc:89
msgid "Backup"
msgstr ""
#: ../../../../inc/themes/classic/profiles.inc:74
-#: ../../../../inc/themes/material-blue/profiles.inc:87
+#: ../../../../inc/themes/material-blue/profiles.inc:94
msgid "Realizar importación de cuentas"
msgstr ""
#: ../../../../inc/themes/classic/profiles.inc:81
-#: ../../../../inc/themes/material-blue/profiles.inc:93
+#: ../../../../inc/themes/material-blue/profiles.inc:100
msgid "Gestión"
msgstr ""
#: ../../../../inc/themes/classic/profiles.inc:85
-#: ../../../../inc/themes/material-blue/profiles.inc:99
+#: ../../../../inc/themes/material-blue/profiles.inc:106
msgid "Gestión de usuarios"
msgstr ""
#: ../../../../inc/themes/classic/profiles.inc:89
-#: ../../../../inc/themes/material-blue/profiles.inc:104
+#: ../../../../inc/themes/material-blue/profiles.inc:111
msgid "Gestión de grupos"
msgstr ""
#: ../../../../inc/themes/classic/profiles.inc:94
-#: ../../../../inc/themes/material-blue/profiles.inc:109
+#: ../../../../inc/themes/material-blue/profiles.inc:116
msgid "Gestión de perfiles"
msgstr ""
#: ../../../../inc/themes/classic/profiles.inc:94
-#: ../../../../inc/themes/material-blue/profiles.inc:109
+#: ../../../../inc/themes/material-blue/profiles.inc:116
msgid "Perfiles"
msgstr ""
#: ../../../../inc/themes/classic/profiles.inc:98
-#: ../../../../inc/themes/material-blue/profiles.inc:114
+#: ../../../../inc/themes/material-blue/profiles.inc:121
msgid "Gestión de categorías"
msgstr ""
#: ../../../../inc/themes/classic/profiles.inc:103
-#: ../../../../inc/themes/material-blue/profiles.inc:119
+#: ../../../../inc/themes/material-blue/profiles.inc:126
msgid "Gestión de clientes"
msgstr ""
#: ../../../../inc/themes/classic/profiles.inc:107
-#: ../../../../inc/themes/material-blue/profiles.inc:124
+#: ../../../../inc/themes/material-blue/profiles.inc:131
msgid "Gestión de campos personalizados"
msgstr ""
#: ../../../../inc/themes/classic/profiles.inc:112
-#: ../../../../inc/themes/material-blue/profiles.inc:129
+#: ../../../../inc/themes/material-blue/profiles.inc:136
msgid "Gestión de autorizaciones API"
msgstr ""
#: ../../../../inc/themes/classic/profiles.inc:112
-#: ../../../../inc/themes/material-blue/profiles.inc:129
+#: ../../../../inc/themes/material-blue/profiles.inc:136
msgid "Autorizaciones API"
msgstr ""
#: ../../../../inc/themes/classic/profiles.inc:120
-#: ../../../../inc/themes/material-blue/profiles.inc:135
+#: ../../../../inc/themes/material-blue/profiles.inc:147
msgid "Otros"
msgstr ""
#: ../../../../inc/themes/classic/profiles.inc:124
-#: ../../../../inc/themes/material-blue/profiles.inc:141
+#: ../../../../inc/themes/material-blue/profiles.inc:153
msgid "Ver log de eventos"
msgstr ""
#: ../../../../inc/themes/classic/profiles.inc:124
-#: ../../../../inc/themes/material-blue/profiles.inc:141
+#: ../../../../inc/themes/material-blue/profiles.inc:153
msgid "Log de Eventos"
msgstr ""
#: ../../../../inc/themes/classic/profiles.inc:132
-#: ../../../../inc/themes/material-blue/profiles.inc:148
+#: ../../../../inc/themes/material-blue/profiles.inc:160
msgid "Usado por"
msgstr ""
#: ../../../../inc/themes/classic/profiles.inc:139
-#: ../../../../inc/themes/material-blue/profiles.inc:155
+#: ../../../../inc/themes/material-blue/profiles.inc:167
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:446
-#: ../../../../inc/themes/material-blue/editpass.inc:55
-#: ../../../../inc/themes/material-blue/mgmttabs.inc:13
-#: ../../../../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:10
-#: ../../../../inc/themes/classic/search.inc:189
-#: ../../../../inc/themes/material-blue/search.inc:10
-#: ../../../../inc/themes/material-blue/search.inc:199
-msgid "Filtro ON"
-msgstr ""
-
-#: ../../../../inc/themes/classic/search.inc:14
-#: ../../../../inc/themes/classic/search.inc:193
-#: ../../../../inc/themes/material-blue/search.inc:14
-#: ../../../../inc/themes/material-blue/search.inc:203
+#: ../../../../inc/themes/classic/search.inc:170
msgid "Global ON"
msgstr ""
-#: ../../../../inc/themes/classic/search.inc:63
-#: ../../../../inc/themes/material-blue/search.inc:65
-msgid "Buscar en Wiki"
-msgstr ""
-
-#: ../../../../inc/themes/classic/search.inc:99
-#: ../../../../inc/themes/material-blue/search.inc:101
-msgid "Abrir enlace a"
-msgstr ""
-
-#: ../../../../inc/themes/classic/search.inc:117
-#: ../../../../inc/themes/material-blue/search.inc:125
-msgid "Archivos adjuntos"
-msgstr ""
-
-#: ../../../../inc/themes/classic/search.inc:124
-#: ../../../../inc/themes/material-blue/search.inc:134
-msgid "Enlace a Wiki"
-msgstr ""
-
-#: ../../../../inc/themes/classic/searchbox.inc:5
-#: ../../../../inc/themes/material-blue/searchbox.inc:5
-msgid "Limpiar"
-msgstr ""
-
#: ../../../../inc/themes/classic/searchbox.inc:7
-#: ../../../../inc/themes/material-blue/searchbox.inc:10
+#: ../../../../inc/themes/material-blue/searchbox.inc:17
msgid "Texto a buscar"
msgstr ""
#: ../../../../inc/themes/classic/searchbox.inc:12
-#: ../../../../inc/themes/material-blue/searchbox.inc:15
+#: ../../../../inc/themes/material-blue/searchbox.inc:22
msgid "Parámetros especiales:"
msgstr ""
#: ../../../../inc/themes/classic/searchbox.inc:15
-#: ../../../../inc/themes/material-blue/searchbox.inc:18
+#: ../../../../inc/themes/material-blue/searchbox.inc:25
msgid "Buscar cuentas a las que 'login' tenga acceso"
msgstr ""
#: ../../../../inc/themes/classic/searchbox.inc:17
-#: ../../../../inc/themes/material-blue/searchbox.inc:19
+#: ../../../../inc/themes/material-blue/searchbox.inc:27
msgid "Buscar cuentas a las que 'group_name' tenga acceso"
msgstr ""
#: ../../../../inc/themes/classic/searchbox.inc:19
-#: ../../../../inc/themes/material-blue/searchbox.inc:20
+#: ../../../../inc/themes/material-blue/searchbox.inc:29
msgid "Buscar cuentas con archivos con el nombre 'file_name'"
msgstr ""
#: ../../../../inc/themes/classic/searchbox.inc:24
-#: ../../../../inc/themes/material-blue/searchbox.inc:25
-#: ../../../../inc/themes/material-blue/searchbox.inc:28
+#: ../../../../inc/themes/material-blue/searchbox.inc:35
+#: ../../../../inc/themes/material-blue/searchbox.inc:38
msgid "Búsqueda global"
msgstr ""
-#: ../../../../inc/themes/classic/searchbox.inc:50
-#: ../../../../inc/themes/material-blue/searchbox.inc:54
+#: ../../../../inc/themes/classic/searchbox.inc:49
+#: ../../../../inc/themes/classic/searchbox.inc:121
+#: ../../../../inc/themes/material-blue/searchbox.inc:62
+#: ../../../../inc/themes/material-blue/searchbox.inc:129
+msgid "Mostrar Todos"
+msgstr ""
+
+#: ../../../../inc/themes/classic/searchbox.inc:49
+#: ../../../../inc/themes/classic/searchbox.inc:118
+#: ../../../../inc/themes/material-blue/searchbox.inc:62
+#: ../../../../inc/themes/material-blue/searchbox.inc:126
+msgid "Mostrar Favoritos"
+msgstr ""
+
+#: ../../../../inc/themes/classic/searchbox.inc:52
+#: ../../../../inc/themes/material-blue/searchbox.inc:66
msgid "CPP"
msgstr ""
-#: ../../../../inc/themes/classic/searchbox.inc:51
-#: ../../../../inc/themes/material-blue/searchbox.inc:54
+#: ../../../../inc/themes/classic/searchbox.inc:53
+#: ../../../../inc/themes/material-blue/searchbox.inc:66
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"
@@ -4683,7 +5337,7 @@ 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
+#: ../../../../inc/themes/material-blue/users.inc:133
msgid "Opciones"
msgstr ""
@@ -4709,7 +5363,7 @@ msgid "Error al comprobar actualizaciones"
msgstr ""
#: ../../../../inc/themes/classic/upgrade.inc:8
-#: ../../../../inc/themes/material-blue/upgrade.inc:6
+#: ../../../../inc/themes/material-blue/upgrade.inc:10
msgid "Actualización de BBDD"
msgstr ""
@@ -4718,208 +5372,298 @@ msgid "Introducir Código de Seguridad"
msgstr ""
#: ../../../../inc/themes/classic/upgrade.inc:11
-#: ../../../../inc/themes/material-blue/upgrade.inc:12
+#: ../../../../inc/themes/material-blue/upgrade.inc:16
msgid "Código de Seguridad"
msgstr ""
#: ../../../../inc/themes/classic/upgrade.inc:21
-#: ../../../../inc/themes/material-blue/upgrade.inc:23
+#: ../../../../inc/themes/material-blue/upgrade.inc:27
msgid "Iniciar Actualización"
msgstr ""
#: ../../../../inc/themes/classic/users.inc:12
-#: ../../../../inc/themes/material-blue/users.inc:15
+#: ../../../../inc/themes/material-blue/users.inc:16
msgid "Nombre de usuario completo"
msgstr ""
#: ../../../../inc/themes/classic/users.inc:25
-#: ../../../../inc/themes/material-blue/users.inc:31
+#: ../../../../inc/themes/material-blue/users.inc:32
msgid "Login de inicio de sesión"
msgstr ""
#: ../../../../inc/themes/classic/users.inc:64
-#: ../../../../inc/themes/material-blue/users.inc:78
+#: ../../../../inc/themes/material-blue/users.inc:79
msgid "Dirección de correo"
msgstr ""
#: ../../../../inc/themes/classic/users.inc:103
-#: ../../../../inc/themes/material-blue/users.inc:136
+#: ../../../../inc/themes/material-blue/users.inc:137
msgid "Administrador de la aplicación"
msgstr ""
#: ../../../../inc/themes/classic/users.inc:103
-#: ../../../../inc/themes/material-blue/users.inc:139
+#: ../../../../inc/themes/material-blue/users.inc:140
msgid "Admin. Aplicación"
msgstr ""
#: ../../../../inc/themes/classic/users.inc:107
-#: ../../../../inc/themes/material-blue/users.inc:143
+#: ../../../../inc/themes/material-blue/users.inc:144
msgid "Administrador de cuentas"
msgstr ""
#: ../../../../inc/themes/classic/users.inc:107
-#: ../../../../inc/themes/material-blue/users.inc:146
+#: ../../../../inc/themes/material-blue/users.inc:147
msgid "Admin. Cuentas"
msgstr ""
#: ../../../../inc/themes/classic/users.inc:117
-#: ../../../../inc/themes/material-blue/users.inc:158
+#: ../../../../inc/themes/material-blue/users.inc:159
msgid "Forzar cambio de clave"
msgstr ""
-#: ../../../../inc/themes/classic/users.inc:154
-#: ../../../../inc/themes/material-blue/users.inc:198
+#: ../../../../inc/themes/classic/users.inc:130
+#: ../../../../inc/themes/material-blue/users.inc:173
msgid "Entradas"
msgstr ""
-#: ../../../../inc/themes/classic/users.inc:159
-#: ../../../../inc/themes/material-blue/users.inc:203
+#: ../../../../inc/themes/classic/users.inc:135
+#: ../../../../inc/themes/material-blue/users.inc:178
msgid "Último Acceso"
msgstr ""
-#: ../../../../inc/themes/classic/users.inc:169
-#: ../../../../inc/themes/material-blue/users.inc:213
+#: ../../../../inc/themes/classic/users.inc:145
+#: ../../../../inc/themes/material-blue/users.inc:188
msgid "Fecha Clave Maestra"
msgstr ""
#: ../../../../inc/themes/classic/wiki.inc:11
-#: ../../../../inc/themes/material-blue/wiki.inc:11
+#: ../../../../inc/themes/material-blue/wiki.inc:15
msgid "Habilitar enlaces Wiki"
msgstr ""
#: ../../../../inc/themes/classic/wiki.inc:15
-#: ../../../../inc/themes/material-blue/wiki.inc:15
+#: ../../../../inc/themes/material-blue/wiki.inc:19
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
+#: ../../../../inc/themes/material-blue/wiki.inc:34
+#: ../../../../inc/themes/material-blue/wiki.inc:60
msgid "URL de búsqueda Wiki"
msgstr ""
#: ../../../../inc/themes/classic/wiki.inc:31
-#: ../../../../inc/themes/material-blue/wiki.inc:34
+#: ../../../../inc/themes/material-blue/wiki.inc:38
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
+#: ../../../../inc/themes/material-blue/wiki.inc:42
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
+#: ../../../../inc/themes/classic/wiki.inc:134
+#: ../../../../inc/themes/classic/wiki.inc:157
+#: ../../../../inc/themes/material-blue/wiki.inc:46
+#: ../../../../inc/themes/material-blue/wiki.inc:78
+#: ../../../../inc/themes/material-blue/wiki.inc:153
+#: ../../../../inc/themes/material-blue/wiki.inc:179
msgid "Ejemplo:"
msgstr ""
#: ../../../../inc/themes/classic/wiki.inc:54
-#: ../../../../inc/themes/material-blue/wiki.inc:62
-#: ../../../../inc/themes/material-blue/wiki.inc:87
+#: ../../../../inc/themes/material-blue/wiki.inc:66
+#: ../../../../inc/themes/material-blue/wiki.inc:91
msgid "URL de página en Wiki"
msgstr ""
#: ../../../../inc/themes/classic/wiki.inc:58
-#: ../../../../inc/themes/material-blue/wiki.inc:66
+#: ../../../../inc/themes/material-blue/wiki.inc:70
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
+#: ../../../../inc/themes/material-blue/wiki.inc:74
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
+#: ../../../../inc/themes/material-blue/wiki.inc:97
msgid "Prefijo para nombre de cuenta"
msgstr ""
#: ../../../../inc/themes/classic/wiki.inc:85
-#: ../../../../inc/themes/material-blue/wiki.inc:97
+#: ../../../../inc/themes/material-blue/wiki.inc:101
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
+#: ../../../../inc/themes/classic/wiki.inc:100
+#: ../../../../inc/themes/material-blue/wiki.inc:116
+msgid "DokuWiki API"
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:106
+#: ../../../../inc/themes/material-blue/wiki.inc:122
+msgid "Habilitar API de DokuWiki"
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:110
+#: ../../../../inc/themes/material-blue/wiki.inc:126
+msgid ""
+"Habilita la conexión a la API XML-RPC de DokuWiki para los enlaces Wiki."
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:113
+#: ../../../../inc/themes/material-blue/wiki.inc:129
+msgid ""
+"Para que esta característica funcione, es necesario habilitar los enlaces "
+"Wiki para el filtrado de cuentas."
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:126
+#: ../../../../inc/themes/material-blue/wiki.inc:145
+#: ../../../../inc/themes/material-blue/wiki.inc:165
+msgid "URL API"
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:130
+#: ../../../../inc/themes/material-blue/wiki.inc:149
+msgid "URL de la API de DokuWiki."
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:149
+#: ../../../../inc/themes/material-blue/wiki.inc:171
+#: ../../../../inc/themes/material-blue/wiki.inc:191
+msgid "URL Base"
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:153
+#: ../../../../inc/themes/material-blue/wiki.inc:175
+msgid "URL base de DokuWiki."
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:176
+#: ../../../../inc/themes/material-blue/wiki.inc:201
+msgid "Usuario para conectar a la API de DokuWiki."
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:199
+#: ../../../../inc/themes/material-blue/wiki.inc:229
+#: ../../../../inc/themes/material-blue/wiki.inc:242
+msgid "Namespace"
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:203
+#: ../../../../inc/themes/material-blue/wiki.inc:233
+msgid "Namespace utilizado para buscar las páginas."
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:217
+#: ../../../../inc/themes/material-blue/wiki.inc:250
+msgid "Comprobar conexión con DokuWiki"
+msgstr ""
+
+#: ../../../../inc/themes/classic/wiki.inc:246
+#: ../../../../inc/themes/material-blue/wiki.inc:280
msgid "Añadir filtro"
msgstr ""
-#: ../../../../inc/themes/classic/wiki.inc:122
-#: ../../../../inc/themes/material-blue/wiki.inc:136
+#: ../../../../inc/themes/classic/wiki.inc:247
+#: ../../../../inc/themes/material-blue/wiki.inc:281
msgid "Eliminar filtro"
msgstr ""
-#: ../../../../inc/themes/material-blue/account.inc:4
+#: ../../../../inc/themes/classic/wikipage.inc:2
+#: ../../../../inc/themes/material-blue/wikipage.inc:2
+msgid "Ver Wiki"
+msgstr ""
+
+#: ../../../../inc/themes/classic/wikipage.inc:10
+#: ../../../../inc/themes/material-blue/wikipage.inc:10
+#, php-format
+msgid "Resultados de búsqueda de '%s'"
+msgstr ""
+
+#: ../../../../inc/themes/classic/wikipage.inc:13
+#: ../../../../inc/themes/classic/wikipage.inc:23
+#: ../../../../inc/themes/material-blue/wikipage.inc:13
+#: ../../../../inc/themes/material-blue/wikipage.inc:23
+msgid "Página"
+msgstr ""
+
+#: ../../../../inc/themes/classic/wikipage.inc:25
+#: ../../../../inc/themes/material-blue/wikipage.inc:25
+msgid "Autor"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/account-actions.inc:19
+msgid "Crear Enlace Público"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/account-actions.inc:62
+msgid "Atrás"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/account-details.inc:69
+msgid "Enlace Público"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/account.inc:5
msgid "Histórico"
msgstr ""
-#: ../../../../inc/themes/material-blue/account.inc:34
-msgid "> Usar texto y crear nuevo"
-msgstr ""
-
-#: ../../../../inc/themes/material-blue/account.inc:43
+#: ../../../../inc/themes/material-blue/account.inc:56
msgid "Seleccionar o escribir para crear uno nuevo"
msgstr ""
-#: ../../../../inc/themes/material-blue/account.inc:114
+#: ../../../../inc/themes/material-blue/account.inc:131
msgid "Clave (Repetir)"
msgstr ""
-#: ../../../../inc/themes/material-blue/backup.inc:58
-#: ../../../../inc/themes/material-blue/backup.inc:144
-#: ../../../../inc/themes/material-blue/encryption.inc:115
-#: ../../../../inc/themes/material-blue/import.inc:214
-msgid "Realizar"
-msgstr ""
-
-#: ../../../../inc/themes/material-blue/config.inc:67
-msgid "Forzar HTTPS"
-msgstr ""
-
-#: ../../../../inc/themes/material-blue/config.inc:71
-msgid "Fuerza para que todas las conexiones sean a través de HTTPS."
-msgstr ""
-
-#: ../../../../inc/themes/material-blue/config.inc:232
-#: ../../../../inc/themes/material-blue/preferences.inc:68
+#: ../../../../inc/themes/material-blue/config-accounts.inc:60
+#: ../../../../inc/themes/material-blue/preferences-site.inc:70
msgid "Número de resultados por página"
msgstr ""
-#: ../../../../inc/themes/material-blue/config.inc:327
+#: ../../../../inc/themes/material-blue/config-events.inc:60
+msgid "Nombre o dirección IP"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/config-files.inc:73
msgid "Tamaño máximo de archivo en bytes"
msgstr ""
-#: ../../../../inc/themes/material-blue/config.inc:334
-msgid "Proxy"
-msgstr ""
-
-#: ../../../../inc/themes/material-blue/config.inc:340
-msgid "Usar Proxy"
-msgstr ""
-
-#: ../../../../inc/themes/material-blue/config.inc:361
+#: ../../../../inc/themes/material-blue/config-proxy.inc:29
msgid "Servidor proxy"
msgstr ""
-#: ../../../../inc/themes/material-blue/config.inc:375
+#: ../../../../inc/themes/material-blue/config-proxy.inc:43
msgid "Puerto del servidor proxy"
msgstr ""
-#: ../../../../inc/themes/material-blue/config.inc:389
+#: ../../../../inc/themes/material-blue/config-proxy.inc:57
msgid "Usuario del servidor proxy"
msgstr ""
-#: ../../../../inc/themes/material-blue/config.inc:403
+#: ../../../../inc/themes/material-blue/config-proxy.inc:71
msgid "Clave del servidor proxy"
msgstr ""
+#: ../../../../inc/themes/material-blue/config-site.inc:69
+msgid "Forzar HTTPS"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/config-site.inc:74
+msgid "Fuerza para que todas las conexiones sean a través de HTTPS."
+msgstr ""
+
#: ../../../../inc/themes/material-blue/customfields.inc:14
msgid "Nombre del campo"
msgstr ""
@@ -4932,6 +5676,10 @@ msgstr ""
msgid "Preferencias de usuario"
msgstr ""
+#: ../../../../inc/themes/material-blue/info.inc:52
+msgid "Copia de Configuración"
+msgstr ""
+
#: ../../../../inc/themes/material-blue/install.inc:33
msgid "Usuario administrador de sysPass"
msgstr ""
@@ -4960,40 +5708,52 @@ msgstr ""
msgid "Nombre del servidor para instalar la base de datos de sysPass"
msgstr ""
-#: ../../../../inc/themes/material-blue/ldap.inc:96
+#: ../../../../inc/themes/material-blue/ldap.inc:98
msgid "Clave del usuario de conexión a LDAP."
msgstr ""
-#: ../../../../inc/themes/material-blue/mail.inc:118
+#: ../../../../inc/themes/material-blue/mail.inc:120
msgid ""
"Habilita que los usuarios puedan solicitar modificaciones o acceso a las "
"cuentas sin permisos."
msgstr ""
-#: ../../../../inc/themes/material-blue/profiles.inc:25
+#: ../../../../inc/themes/material-blue/profiles.inc:27
msgid "Crear nueva cuenta"
msgstr ""
-#: ../../../../inc/themes/material-blue/profiles.inc:25
+#: ../../../../inc/themes/material-blue/profiles.inc:27
msgid "Crear"
msgstr ""
-#: ../../../../inc/themes/material-blue/profiles.inc:55
+#: ../../../../inc/themes/material-blue/profiles.inc:57
msgid "Eliminar cuenta"
msgstr ""
-#: ../../../../inc/themes/material-blue/profiles.inc:55
-msgid "Eliminar"
+#: ../../../../inc/themes/material-blue/profiles.inc:67
+msgid "Publicar enlace a cuenta"
msgstr ""
-#: ../../../../inc/themes/material-blue/profiles.inc:77
+#: ../../../../inc/themes/material-blue/profiles.inc:67
+msgid "Publicar Enlace"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/profiles.inc:84
msgid "Opciones de encriptación"
msgstr ""
-#: ../../../../inc/themes/material-blue/profiles.inc:82
+#: ../../../../inc/themes/material-blue/profiles.inc:89
msgid "Realizar copia de seguridad y exportar"
msgstr ""
-#: ../../../../inc/themes/material-blue/security.inc:4
-msgid "Autentificación"
+#: ../../../../inc/themes/material-blue/profiles.inc:141
+msgid "Gestión de enlaces"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/publiclinks.inc:30
+msgid "Uso"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/publiclinks.inc:38
+msgid "Hash"
msgstr ""
diff --git a/inc/locales/nl_NL/LC_MESSAGES/messages.mo b/inc/locales/nl_NL/LC_MESSAGES/messages.mo
index ef2f7069..d1b2c433 100644
Binary files a/inc/locales/nl_NL/LC_MESSAGES/messages.mo and b/inc/locales/nl_NL/LC_MESSAGES/messages.mo differ
diff --git a/inc/locales/nl_NL/LC_MESSAGES/messages.po b/inc/locales/nl_NL/LC_MESSAGES/messages.po
index 91439b1e..8f57cb1f 100644
--- a/inc/locales/nl_NL/LC_MESSAGES/messages.po
+++ b/inc/locales/nl_NL/LC_MESSAGES/messages.po
@@ -1,3333 +1,4244 @@
msgid ""
msgstr ""
"Project-Id-Version: sysPass\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-08-30 23:02+0100\n"
-"PO-Revision-Date: 2016-08-30 23:02+0100\n"
+"POT-Creation-Date: 2017-01-14 01:10+0100\n"
+"PO-Revision-Date: \n"
"Last-Translator: nuxsmin \n"
-"Language-Team: \n"
-"Language: nl_NL\n"
+"Language-Team: nlmaca\n"
+"Language: nl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-KeywordsList: _;gettext;gettext_noop\n"
-"X-Poedit-Basepath: .\n"
-"X-Poedit-SourceCharset: UTF-8\n"
"X-Generator: Poedit 1.6.10\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+"X-Poedit-Basepath: .\n"
"X-Poedit-SearchPath-0: ../../../..\n"
-#: ../../../../ajax/ajax_2fa.php:37 ../../../../ajax/ajax_accountSave.php:42
-#: ../../../../ajax/ajax_appMgmtSave.php:43
-#: ../../../../ajax/ajax_backup.php:41 ../../../../ajax/ajax_checkLdap.php:42
-#: ../../../../ajax/ajax_configSave.php:44 ../../../../ajax/ajax_files.php:42
-#: ../../../../ajax/ajax_files.php:57 ../../../../ajax/ajax_getFiles.php:47
-#: ../../../../ajax/ajax_import.php:50 ../../../../ajax/ajax_migrate.php:46
-#: ../../../../ajax/ajax_passReset.php:40 ../../../../ajax/ajax_search.php:42
-#: ../../../../ajax/ajax_sendRequest.php:42
-#: ../../../../ajax/ajax_userPrefsSave.php:43
-msgid "CONSULTA INVÁLIDA"
-msgstr ""
-
-#: ../../../../ajax/ajax_2fa.php:48
-msgid "Código correcto"
-msgstr "Code geverifieerd"
-
-#: ../../../../ajax/ajax_2fa.php:51 ../../../../ajax/ajax_userPrefsSave.php:99
-msgid "Código incorrecto"
-msgstr "Foutieve code"
-
-#: ../../../../ajax/ajax_accountSave.php:36
-#: ../../../../ajax/ajax_appMgmtSave.php:37
-#: ../../../../ajax/ajax_backup.php:35 ../../../../ajax/ajax_checkLdap.php:36
-#: ../../../../ajax/ajax_configSave.php:38 ../../../../ajax/ajax_import.php:36
-#: ../../../../ajax/ajax_migrate.php:36
-#: ../../../../ajax/ajax_sendRequest.php:36
-#: ../../../../ajax/ajax_userPrefsSave.php:37
-#: ../../../../ajax/ajax_viewpass.php:37
-msgid "La sesión no se ha iniciado o ha caducado"
-msgstr "Sessie nog niet gestart of er is een timeout opgetreden"
-
-#: ../../../../ajax/ajax_accountSave.php:78
-#: ../../../../ajax/ajax_accountSave.php:93
-msgid "Es necesario un nombre de cuenta"
-msgstr "Een gebruikers account is nodig"
-
-#: ../../../../ajax/ajax_accountSave.php:80
-#: ../../../../ajax/ajax_accountSave.php:91
-#: ../../../../ajax/ajax_appMgmtSave.php:329
-msgid "Es necesario un nombre de cliente"
-msgstr "Een klantnaam is nodig"
-
-#: ../../../../ajax/ajax_accountSave.php:82
-#: ../../../../ajax/ajax_accountSave.php:95
-msgid "Es necesario un usuario"
-msgstr "Gebruikersnaam nodig"
-
-#: ../../../../ajax/ajax_accountSave.php:84
-#: ../../../../ajax/ajax_accountSave.php:106
-msgid "Es necesaria una clave"
-msgstr "Sleutel nodig"
-
-#: ../../../../ajax/ajax_accountSave.php:86
-#: ../../../../ajax/ajax_accountSave.php:97
-msgid "Es necesario una categoría"
-msgstr "Een categorie is benodigd"
-
-#: ../../../../ajax/ajax_accountSave.php:101
-#: ../../../../ajax/ajax_accountSave.php:110
-msgid "Id inválido"
-msgstr "Foutief Id"
-
-#: ../../../../ajax/ajax_accountSave.php:113
-#: ../../../../ajax/ajax_accountSave.php:263
-#: ../../../../ajax/ajax_appMgmtSave.php:535
-#: ../../../../ajax/ajax_configSave.php:334
-#: ../../../../ajax/ajax_userPrefsSave.php:113 ../../../../api.php:53
-msgid "Acción Inválida"
-msgstr "Ongeldige actie"
-
-#: ../../../../ajax/ajax_accountSave.php:121
-#: ../../../../ajax/ajax_appMgmtSave.php:112
-#: ../../../../ajax/ajax_appMgmtSave.php:149
-#: ../../../../ajax/ajax_backup.php:68
-msgid "Las claves no coinciden"
-msgstr "De wachtwoorden zijn niet gelijk"
-
-#: ../../../../ajax/ajax_accountSave.php:173
-msgid "Cuenta creada"
-msgstr "Account toegevoegd"
-
-#: ../../../../ajax/ajax_accountSave.php:176
-msgid "Error al crear la cuenta"
-msgstr "Fout bij account aanmaken"
-
-#: ../../../../ajax/ajax_accountSave.php:211
-msgid "Sin cambios"
-msgstr "Geen wijzigingen"
-
-#: ../../../../ajax/ajax_accountSave.php:223
-msgid "Cuenta actualizada"
-msgstr "Account bijgewerkt"
-
-#: ../../../../ajax/ajax_accountSave.php:226
-msgid "Error al modificar la cuenta"
-msgstr "Error bij account bijwerken"
-
-#: ../../../../ajax/ajax_accountSave.php:233
-msgid "Cuenta eliminada"
-msgstr "Account verwijderd"
-
-#: ../../../../ajax/ajax_accountSave.php:236
-msgid "Error al eliminar la cuenta"
-msgstr "Error bij account verwijderen"
-
-#: ../../../../ajax/ajax_accountSave.php:246
-#: ../../../../ajax/ajax_appMgmtSave.php:153
-#: ../../../../ajax/ajax_passReset.php:75
-msgid "Clave actualizada"
-msgstr "Wachtwoord bijgewerkt"
-
-#: ../../../../ajax/ajax_accountSave.php:249
-msgid "Error al actualizar la clave"
-msgstr "Error bij wachtwoord bijewerken"
-
-#: ../../../../ajax/ajax_accountSave.php:256
-msgid "Cuenta restaurada"
-msgstr "Account hersteld"
-
-#: ../../../../ajax/ajax_accountSave.php:259
-msgid "Error al restaurar cuenta"
-msgstr "Error bij account herstellen"
-
-#: ../../../../ajax/ajax_appMgmtData.php:54
-msgid "Ver Usuario"
-msgstr "Bekijk Gebruiker"
-
-#: ../../../../ajax/ajax_appMgmtData.php:61
-#: ../../../../web/UsersMgmtC.class.php:137
-msgid "Editar Usuario"
-msgstr "Wijzig Gebruiker"
-
-#: ../../../../ajax/ajax_appMgmtData.php:67
-#: ../../../../inc/UserBase.class.php:383
-#: ../../../../web/UsersMgmtC.class.php:122
-msgid "Nuevo Usuario"
-msgstr "Nieuwe Gebruiker"
-
-#: ../../../../ajax/ajax_appMgmtData.php:73
-msgid "Ver Grupo"
-msgstr "Bekijk Groep"
-
-#: ../../../../ajax/ajax_appMgmtData.php:80
-#: ../../../../web/UsersMgmtC.class.php:203
-msgid "Editar Grupo"
-msgstr "Wijzig Broep"
-
-#: ../../../../ajax/ajax_appMgmtData.php:86
-#: ../../../../inc/Groups.class.php:152 ../../../../inc/Groups.class.php:253
-#: ../../../../web/UsersMgmtC.class.php:195
-msgid "Nuevo Grupo"
-msgstr "Nieuwe Groep"
-
-#: ../../../../ajax/ajax_appMgmtData.php:92
-msgid "Ver Perfil"
-msgstr "Bekijk Profiel"
-
-#: ../../../../ajax/ajax_appMgmtData.php:99
-#: ../../../../web/UsersMgmtC.class.php:268
-msgid "Editar Perfil"
-msgstr "Wijzig Profiel"
-
-#: ../../../../ajax/ajax_appMgmtData.php:105
-#: ../../../../inc/ProfileBase.class.php:512
-#: ../../../../web/UsersMgmtC.class.php:253
-msgid "Nuevo Perfil"
-msgstr "Nieuw Profiel"
-
-#: ../../../../ajax/ajax_appMgmtData.php:111
-msgid "Ver Cliente"
-msgstr "Bekijk Klant"
-
-#: ../../../../ajax/ajax_appMgmtData.php:118
-#: ../../../../web/AccountsMgmtC.class.php:153
-msgid "Editar Cliente"
-msgstr "Wijzig Klant"
-
-#: ../../../../ajax/ajax_appMgmtData.php:124
-#: ../../../../inc/Customer.class.php:65
-#: ../../../../web/AccountsMgmtC.class.php:146
-msgid "Nuevo Cliente"
-msgstr "Nieuwe Klant"
-
-#: ../../../../ajax/ajax_appMgmtData.php:130
-msgid "Ver Categoría"
-msgstr "Bekijk Categorie"
-
-#: ../../../../ajax/ajax_appMgmtData.php:137
-#: ../../../../web/AccountsMgmtC.class.php:95
-msgid "Editar Categoría"
-msgstr "Wijzig Categorie"
-
-#: ../../../../ajax/ajax_appMgmtData.php:143
-#: ../../../../inc/Category.class.php:83
-#: ../../../../web/AccountsMgmtC.class.php:87
-#: ../../../../inc/themes/classic/account.inc:53
-#: ../../../../inc/themes/material-blue/account.inc:62
-msgid "Nueva Categoría"
-msgstr "Nieuwe Categorie"
-
-#: ../../../../ajax/ajax_appMgmtData.php:149
-msgid "Ver Autorización"
-msgstr "Bekijk Autorisatie"
-
-#: ../../../../ajax/ajax_appMgmtData.php:156
-#: ../../../../inc/ApiTokens.class.php:189
-#: ../../../../web/UsersMgmtC.class.php:400
-msgid "Nueva Autorización"
-msgstr "Nieuwe Autorisatie"
-
-#: ../../../../ajax/ajax_appMgmtData.php:162
-#: ../../../../web/UsersMgmtC.class.php:415
-msgid "Editar Autorización"
-msgstr "Wijzig Autorisatie"
-
-#: ../../../../ajax/ajax_appMgmtData.php:168
-#: ../../../../web/AccountsMgmtC.class.php:274
-msgid "Nuevo Campo"
-msgstr "Nieuw Veld"
-
-#: ../../../../ajax/ajax_appMgmtData.php:174
-#: ../../../../web/AccountsMgmtC.class.php:281
-msgid "Editar Campo"
-msgstr "Wijzig Veld"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:86
-msgid "Es necesario un nombre de usuario"
-msgstr "Een gebruikersnaam is nodig"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:88
-msgid "Es necesario un login"
-msgstr "Een inlog is nodig"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:90
-msgid "Es necesario un perfil"
-msgstr "Een profiel is nodig"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:92
-msgid "Es necesario un grupo"
-msgstr "Een groep is nodig"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:94
-msgid "Es necesario un email"
-msgstr "Een emailadres is nodig"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:96
-#: ../../../../ajax/ajax_appMgmtSave.php:145
-#: ../../../../ajax/ajax_appMgmtSave.php:160
-#: ../../../../ajax/ajax_backup.php:54
-#: ../../../../ajax/ajax_configSave.php:307
-#: ../../../../ajax/ajax_import.php:40 ../../../../ajax/ajax_migrate.php:40
-#: ../../../../ajax/ajax_userPrefsSave.php:88
-msgid "Ey, esto es una DEMO!!"
-msgstr "Hallo, dit is een DEMO!!"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:101
-msgid "Login de usuario duplicado"
-msgstr "Dubbele gebruiker login"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:104
-msgid "Email de usuario duplicado"
-msgstr "Dubbel gebruiker emailadres"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:110
-#: ../../../../ajax/ajax_appMgmtSave.php:147
-msgid "La clave no puede estar en blanco"
-msgstr "Wachtwoorden mogen niet leeg zijn"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:123
-msgid "Usuario creado"
-msgstr "Gebruiker toegevoegd"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:126
-msgid "Error al crear el usuario"
-msgstr "Fout bij aanmaken gebruiker"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:136
-#: ../../../../inc/UserMigrate.class.php:89
-msgid "Usuario actualizado"
-msgstr "Gebruiker bijgewerkt"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:139
-msgid "Error al actualizar el usuario"
-msgstr "Fout bij bijwerken gebruiker"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:156
-#: ../../../../ajax/ajax_passReset.php:79
-msgid "Error al modificar la clave"
-msgstr "Fout bij wachtwoord wijzigen"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:162
-msgid "No es posible eliminar, usuario en uso"
-msgstr "Niet mogelijk om te verwijderen, gebruiker is bezet"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:166
-msgid "Usuario eliminado"
-msgstr "Gebruiker verwijderd"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:169
-msgid "Error al eliminar el usuario"
-msgstr "Fout bij verwijderen gebruiker"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:184
-msgid "Es necesario un nombre de grupo"
-msgstr "Een groepnaam is nodig"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:192
-msgid "Nombre de grupo duplicado"
-msgstr "Dubbele groepnaam"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:204
-msgid "Grupo creado"
-msgstr "Groep toegevoegd"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:206
-msgid "Error al crear el grupo"
-msgstr "Fout bij aanmaken groep"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:217
-msgid "Grupo actualizado"
-msgstr "Groep bijgewerkt"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:220
-msgid "Error al actualizar el grupo"
-msgstr "Fout bij bijwerken groep"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:229
-#: ../../../../ajax/ajax_appMgmtSave.php:306
-#: ../../../../inc/CustomFieldsBase.class.php:109
-#: ../../../../inc/themes/classic/account.inc:112
-#: ../../../../inc/themes/classic/groups.inc:24
-#: ../../../../inc/themes/classic/profiles.inc:85
-#: ../../../../inc/themes/material-blue/account.inc:138
-#: ../../../../inc/themes/material-blue/groups.inc:32
-#: ../../../../inc/themes/material-blue/profiles.inc:99
-msgid "Usuarios"
-msgstr "Gebruikers"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:233
-#: ../../../../inc/Category.class.php:266
-#: ../../../../inc/CustomFieldsBase.class.php:106
-#: ../../../../inc/Customer.class.php:150
-#: ../../../../inc/themes/classic/profiles.inc:15
-#: ../../../../inc/themes/material-blue/config.inc:176
-#: ../../../../inc/themes/material-blue/profiles.inc:19
-msgid "Cuentas"
-msgstr "Accounts"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:236
-#: ../../../../ajax/ajax_appMgmtSave.php:308
-#: ../../../../inc/Category.class.php:119
-#: ../../../../inc/Customer.class.php:150
-msgid "No es posible eliminar"
-msgstr "Fout bij verwijderen"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:236
-msgid "Grupo en uso por:"
-msgstr "Groep in gebruik door:"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:241
-msgid "Grupo eliminado"
-msgstr "Groep verwijderd"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:244
-msgid "Error al eliminar el grupo"
-msgstr "Fout bij verwijderen groep"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:283
-msgid "Es necesario un nombre de perfil"
-msgstr "Een profiel naam is nodig"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:285
-msgid "Nombre de perfil duplicado"
-msgstr "Dubbele profiel naam"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:290
-msgid "Perfil creado"
-msgstr "Profiel toegevoegd"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:293
-msgid "Error al crear el perfil"
-msgstr "Fout bij aanmaken profiel"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:296
-msgid "Perfil actualizado"
-msgstr "Profiel bijgewerkt"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:299
-msgid "Error al actualizar el perfil"
-msgstr "Fout bij bijwerken profiel"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:308
-msgid "Perfil en uso por:"
-msgstr "Profiel in gebruik door:"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:311
-msgid "Perfil eliminado"
-msgstr "Profiel verwijderd"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:314
-msgid "Error al eliminar el perfil"
-msgstr "Fout bij verwijderen profiel"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:349
-msgid "Cliente creado"
-msgstr "Klant toegevoegd"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:364
-msgid "Cliente actualizado"
-msgstr "Klant bijgewerkt"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:374
-msgid "Cliente eliminado"
-msgstr "Klant verwijderd"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:388
-msgid "Es necesario un nombre de categoría"
-msgstr "Een categorie naam is nodig"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:408
-msgid "Categoría creada"
-msgstr "Categorie toegevoegd"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:423
-msgid "Categoría actualizada"
-msgstr "Categorie bijgewerkt"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:434
-msgid "Categoría eliminada"
-msgstr "Categorie verwijderd"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:450
-msgid "Usuario o acción no indicado"
-msgstr "Gebruiker of actie niet ingevuld"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:460
-msgid "Autorización creada"
-msgstr "Autorisatie toegevoegd"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:468
-msgid "Autorización actualizada"
-msgstr "Autorisatie bijgewerkt"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:478
-msgid "Autorización eliminada"
-msgstr "Autorisatie verwijderd"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:495
-msgid "Nombre del campo no indicado"
-msgstr "Veld naam niet ingevuld"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:497
-msgid "Tipo del campo no indicado"
-msgstr "Veld type niet ingevuld"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:499
-msgid "Módulo del campo no indicado"
-msgstr "Veld module niet ingevuld"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:513
-msgid "Campo creado"
-msgstr "Veld toegevoegd"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:522
-msgid "Campo actualizado"
-msgstr "Veld bijgewerkt"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:532
-msgid "Campo eliminado"
-msgstr "Veld verwijderd"
-
-#: ../../../../ajax/ajax_backup.php:58 ../../../../ajax/ajax_backup.php:63
-#: ../../../../inc/themes/classic/backup.inc:54
-msgid "Realizar Backup"
-msgstr "Backup maken"
-
-#: ../../../../ajax/ajax_backup.php:58 ../../../../ajax/ajax_backup.php:60
-msgid "Error al realizar el backup"
-msgstr "Fout in backup proces"
-
-#: ../../../../ajax/ajax_backup.php:60 ../../../../ajax/ajax_backup.php:74
-#: ../../../../ajax/ajax_checkLdap.php:58 ../../../../inc/Import.class.php:128
-#: ../../../../inc/Migrate.class.php:92
-msgid "Revise el registro de eventos para más detalles"
-msgstr "Check het eventlog voor mij"
-
-#: ../../../../ajax/ajax_backup.php:63
-msgid "Copia de la aplicación y base de datos realizada correctamente"
-msgstr "Applicatie en database backup succesvol afgerond"
-
-#: ../../../../ajax/ajax_backup.php:65
-msgid "Proceso de backup finalizado"
-msgstr "Backup proces afgerond"
-
-#: ../../../../ajax/ajax_backup.php:72 ../../../../ajax/ajax_backup.php:77
-msgid "Realizar Exportación"
-msgstr "Draai export"
-
-#: ../../../../ajax/ajax_backup.php:72
-msgid "Error al realizar la exportación de cuentas"
-msgstr "Fout opgetreden bij exporteren van accounts"
-
-#: ../../../../ajax/ajax_backup.php:74
-msgid "Error al realizar la exportación"
-msgstr "Fout opgetreden bij exporteren"
-
-#: ../../../../ajax/ajax_backup.php:77
-msgid "Exportación de cuentas realizada correctamente"
-msgstr "Export succesvol afgerond"
-
-#: ../../../../ajax/ajax_backup.php:79
-msgid "Proceso de exportación finalizado"
-msgstr "Export proces afgerond"
-
-#: ../../../../ajax/ajax_checkLdap.php:52 ../../../../inc/Ldap.class.php:270
-msgid "Los parámetros de LDAP no están configurados"
-msgstr "LDAP parameters niet opgegeven"
-
-#: ../../../../ajax/ajax_checkLdap.php:58
-msgid "Error de conexión a LDAP"
-msgstr "Fout bij LDAP connectie"
-
-#: ../../../../ajax/ajax_checkLdap.php:60
-msgid "Conexión a LDAP correcta"
-msgstr "LDAP connectie gelukt"
-
-#: ../../../../ajax/ajax_checkLdap.php:60
-msgid "Objetos encontrados"
-msgstr "Objecten gevonden"
-
-#: ../../../../ajax/ajax_configSave.php:58
-msgid "Modificar Configuración"
-msgstr "Wijzig Configuratie"
-
-#: ../../../../ajax/ajax_configSave.php:101
-msgid "El tamaño máximo por archivo es de 16MB"
-msgstr "Het maxiumale bestands formaat is 16MB per bestand"
-
-#: ../../../../ajax/ajax_configSave.php:109 ../../../../js/strings.js.php:46
-msgid "Extensión no permitida"
-msgstr "Extensie niet toegestaan"
-
-#: ../../../../ajax/ajax_configSave.php:128
-msgid "Faltan parámetros de Proxy"
-msgstr "Missende proxy parameters"
-
-#: ../../../../ajax/ajax_configSave.php:136
-msgid "Proxy habiltado"
-msgstr "Proxy geactiveerd"
-
-#: ../../../../ajax/ajax_configSave.php:140
-msgid "Proxy deshabilitado"
-msgstr "Proxy uitgeschakeld"
-
-#: ../../../../ajax/ajax_configSave.php:143
-#: ../../../../ajax/ajax_configSave.php:167
-#: ../../../../ajax/ajax_configSave.php:201
-#: ../../../../ajax/ajax_configSave.php:240
-msgid "Sección"
-msgstr "Sectie"
-
-#: ../../../../ajax/ajax_configSave.php:143
-#: ../../../../web/ConfigC.class.php:109
-#: ../../../../inc/themes/classic/profiles.inc:61
-#: ../../../../inc/themes/material-blue/profiles.inc:72
-msgid "General"
-msgstr "Algemeen"
-
-#: ../../../../ajax/ajax_configSave.php:153
-msgid "Faltan parámetros de Wiki"
-msgstr "Missende Wiki parameters"
-
-#: ../../../../ajax/ajax_configSave.php:160
-msgid "Wiki habiltada"
-msgstr "Wiki geactiveerd"
-
-#: ../../../../ajax/ajax_configSave.php:164
-msgid "Wiki deshabilitada"
-msgstr "Wiki uitgeschakeld"
-
-#: ../../../../ajax/ajax_configSave.php:167
-#: ../../../../web/ConfigC.class.php:246
-#: ../../../../inc/themes/classic/wiki.inc:4
-#: ../../../../inc/themes/material-blue/wiki.inc:4
-msgid "Wiki"
-msgstr "Wiki"
-
-#: ../../../../ajax/ajax_configSave.php:182
-msgid "Faltan parámetros de LDAP"
-msgstr "Missende LDAP parameters"
-
-#: ../../../../ajax/ajax_configSave.php:194
-msgid "LDAP habiltado"
-msgstr "LDAP geactiveerd"
-
-#: ../../../../ajax/ajax_configSave.php:198
-msgid "LDAP deshabilitado"
-msgstr "LDAP uitgeschakeld"
-
-#: ../../../../ajax/ajax_configSave.php:201
-#: ../../../../web/ConfigC.class.php:278
-#: ../../../../inc/themes/classic/ldap.inc:4
-#: ../../../../inc/themes/material-blue/ldap.inc:4
-msgid "LDAP"
-msgstr "LDAP"
-
-#: ../../../../ajax/ajax_configSave.php:216
-msgid "Faltan parámetros de Correo"
-msgstr "Missende Email parameters"
-
-#: ../../../../ajax/ajax_configSave.php:231
-msgid "Correo habiltado"
-msgstr "Email geactiveerd"
-
-#: ../../../../ajax/ajax_configSave.php:237
-msgid "Correo deshabilitado"
-msgstr "Email uitgeschakeld"
-
-#: ../../../../ajax/ajax_configSave.php:240
-#: ../../../../web/ConfigC.class.php:308
-#: ../../../../inc/themes/classic/mail.inc:4
-#: ../../../../inc/themes/material-blue/mail.inc:4
-msgid "Correo"
-msgstr "Email"
-
-#: ../../../../ajax/ajax_configSave.php:262
-msgid "Configuración actualizada"
-msgstr "Configuratie bijgewerkt"
-
-#: ../../../../ajax/ajax_configSave.php:271
-#: ../../../../ajax/ajax_configSave.php:317
-#: ../../../../ajax/ajax_viewpass.php:61
-#: ../../../../inc/Controller.class.php:169
-msgid "Clave maestra actualizada"
-msgstr "Master Wachtwoord bijgewerkt"
-
-#: ../../../../ajax/ajax_configSave.php:271
-#: ../../../../ajax/ajax_viewpass.php:61
-#: ../../../../inc/Controller.class.php:169
-msgid "Reinicie la sesión para cambiarla"
-msgstr "Herstart sessie om bij te werken"
-
-#: ../../../../ajax/ajax_configSave.php:273
-msgid "Clave maestra no indicada"
-msgstr "Master Wachtwoord nodig"
-
-#: ../../../../ajax/ajax_configSave.php:275
-msgid "Se ha de confirmar el cambio de clave"
-msgstr "De wachtwoord wijziging moet bevestigd worden"
-
-#: ../../../../ajax/ajax_configSave.php:279
-msgid "Las claves son idénticas"
-msgstr "De wachtwoorden zijn gelijk"
-
-#: ../../../../ajax/ajax_configSave.php:281
-msgid "Las claves maestras no coinciden"
-msgstr "De master wachtwoorden zijn niet gelijk"
-
-#: ../../../../ajax/ajax_configSave.php:283
-msgid "La clave maestra actual no coincide"
-msgstr "Het huidige master wachtwoord matched niet"
-
-#: ../../../../ajax/ajax_configSave.php:292
-msgid "Errores al actualizar las claves de las cuentas"
-msgstr "Fout bij wijzigen wachtwoord van account"
-
-#: ../../../../ajax/ajax_configSave.php:298
-msgid "Errores al actualizar las claves de las cuentas del histórico"
-msgstr "Fout bij wijzigen wachtwoord van account in de geschiedenis"
-
-#: ../../../../ajax/ajax_configSave.php:302
-msgid "Errores al actualizar datos de campos personalizados"
-msgstr "Fout bij wijzigen aangepaste velden"
-
-#: ../../../../ajax/ajax_configSave.php:315
-#: ../../../../inc/Account.class.php:512
-msgid "Actualizar Clave Maestra"
-msgstr "Bijwerken Master Wachtwoord"
-
-#: ../../../../ajax/ajax_configSave.php:319
-msgid "Error al guardar el hash de la clave maestra"
-msgstr "Fout bij opslaan van Master Wachtwoord"
-
-#: ../../../../ajax/ajax_configSave.php:327
-msgid "Generar Clave Temporal"
-msgstr "Genereer tijdelijk wachtwoord"
-
-#: ../../../../ajax/ajax_configSave.php:327
-#: ../../../../inc/CustomFieldsBase.class.php:87
-#: ../../../../inc/themes/classic/account.inc:86
-#: ../../../../inc/themes/classic/editpass.inc:25
-#: ../../../../inc/themes/classic/encryption.inc:143
-#: ../../../../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/passreset.inc:34
-#: ../../../../inc/themes/classic/users.inc:75
-#: ../../../../inc/themes/classic/userspass.inc:8
-#: ../../../../inc/themes/classic/userspass.inc:11
-#: ../../../../inc/themes/material-blue/account.inc:99
-#: ../../../../inc/themes/material-blue/account.inc:104
-#: ../../../../inc/themes/material-blue/config.inc:414
-#: ../../../../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/encryption.inc:169
-#: ../../../../inc/themes/material-blue/install.inc:47
-#: ../../../../inc/themes/material-blue/ldap.inc:105
-#: ../../../../inc/themes/material-blue/login.inc:18
-#: ../../../../inc/themes/material-blue/login.inc:41
-#: ../../../../inc/themes/material-blue/mail.inc:73
-#: ../../../../inc/themes/material-blue/mail.inc:80
-#: ../../../../inc/themes/material-blue/passreset.inc:28
-#: ../../../../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 "Wachtwoord"
-
-#: ../../../../ajax/ajax_configSave.php:329
-msgid "Clave Temporal Generada"
-msgstr "Tijdelijk wachtwoord gegenereerd"
-
-#: ../../../../ajax/ajax_configSave.php:331
-msgid "Error al generar clave temporal"
-msgstr "Fout bij genereren tijdelijk wachtwoord"
-
-#: ../../../../ajax/ajax_doLogin.php:50
-msgid "Usuario/Clave no introducidos"
-msgstr "Gebruiker/Wachtwoord niet ingevuld"
-
-#: ../../../../ajax/ajax_doLogin.php:62
-msgid "Inicio sesión"
-msgstr "Inloggen"
-
-#: ../../../../ajax/ajax_doLogin.php:67
-msgid "Servidor Login"
-msgstr "Inloggen Server"
-
-#: ../../../../ajax/ajax_doLogin.php:73
-msgid "Error al guardar los datos de LDAP"
-msgstr "Fout bij opslaan van LDAP gebruikers data"
-
-#: ../../../../ajax/ajax_doLogin.php:76 ../../../../ajax/ajax_doLogin.php:84
-#: ../../../../ajax/ajax_doLogin.php:146 ../../../../ajax/ajax_doLogin.php:190
-#: ../../../../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:190
-#: ../../../../inc/Crypt.class.php:201
-#: ../../../../inc/XmlImportBase.class.php:79
-msgid "Error interno"
-msgstr "Interne fout"
-
-#: ../../../../ajax/ajax_doLogin.php:81
-msgid "Error al actualizar la clave del usuario en la BBDD"
-msgstr "Fout bij bijwerken gebruiker wachtwoord in de Database"
-
-#: ../../../../ajax/ajax_doLogin.php:89 ../../../../ajax/ajax_doLogin.php:114
-#: ../../../../ajax/ajax_doLogin.php:124
-msgid "Login incorrecto"
-msgstr "Foutieve login"
-
-#: ../../../../ajax/ajax_doLogin.php:90 ../../../../ajax/ajax_doLogin.php:97
-#: ../../../../ajax/ajax_doLogin.php:104 ../../../../ajax/ajax_doLogin.php:115
-#: ../../../../ajax/ajax_doLogin.php:125 ../../../../ajax/ajax_doLogin.php:135
-#: ../../../../ajax/ajax_doLogin.php:185
-#: ../../../../inc/ApiTokens.class.php:190
-#: ../../../../inc/ApiTokens.class.php:308 ../../../../inc/Auth.class.php:108
-#: ../../../../inc/Init.class.php:499 ../../../../inc/Ldap.class.php:301
-#: ../../../../inc/Ldap.class.php:314 ../../../../inc/Ldap.class.php:322
-#: ../../../../inc/UserBase.class.php:384
-#: ../../../../inc/UserBase.class.php:528 ../../../../res/test.php:64
-#: ../../../../web/SearchC.class.php:309
-#: ../../../../web/UsersMgmtC.class.php:393
-#: ../../../../inc/themes/classic/account.inc:73
-#: ../../../../inc/themes/classic/editpass.inc:21
-#: ../../../../inc/themes/classic/eventlog.inc:23
-#: ../../../../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:89
-#: ../../../../inc/themes/classic/tokens.inc:8
-#: ../../../../inc/themes/material-blue/account.inc:84
-#: ../../../../inc/themes/material-blue/config.inc:400
-#: ../../../../inc/themes/material-blue/editpass.inc:22
-#: ../../../../inc/themes/material-blue/eventlog.inc:23
-#: ../../../../inc/themes/material-blue/info.inc:39
-#: ../../../../inc/themes/material-blue/ldap.inc:86
-#: ../../../../inc/themes/material-blue/login.inc:11
-#: ../../../../inc/themes/material-blue/login.inc:34
-#: ../../../../inc/themes/material-blue/mail.inc:61
-#: ../../../../inc/themes/material-blue/mail.inc:67
-#: ../../../../inc/themes/material-blue/passreset.inc:14
-#: ../../../../inc/themes/material-blue/request.inc:20
-#: ../../../../inc/themes/material-blue/search.inc:91
-#: ../../../../inc/themes/material-blue/tokens.inc:8
-msgid "Usuario"
-msgstr "Gebruiker"
-
-#: ../../../../ajax/ajax_doLogin.php:93 ../../../../ajax/ajax_doLogin.php:107
-#: ../../../../ajax/ajax_doLogin.php:118 ../../../../ajax/ajax_doLogin.php:129
-msgid "Usuario/Clave incorrectos"
-msgstr "Foutieve gebruiker/wachtwoord"
-
-#: ../../../../ajax/ajax_doLogin.php:96 ../../../../ajax/ajax_doLogin.php:100
-msgid "Cuenta expirada"
-msgstr "Account verlopen"
-
-#: ../../../../ajax/ajax_doLogin.php:103
-msgid "El usuario no tiene grupos asociados"
-msgstr "De gebruiker heeft geen geassocieerde groepen"
-
-#: ../../../../ajax/ajax_doLogin.php:126
-#: ../../../../inc/themes/material-blue/security.inc:4
-msgid "Autentificación"
-msgstr ""
-
-#: ../../../../ajax/ajax_doLogin.php:134 ../../../../ajax/ajax_doLogin.php:138
-msgid "Usuario deshabilitado"
-msgstr "Gebruiker uitgeschakeld"
-
-#: ../../../../ajax/ajax_doLogin.php:143
-msgid "Error al obtener los datos del usuario de la BBDD"
-msgstr "Fout bij ophalen gebruiker data vanuit de DB"
-
-#: ../../../../ajax/ajax_doLogin.php:153
-msgid "La clave maestra no ha sido guardada o es incorrecta"
-msgstr "Het Master Wachtwoord is niet opgeslagen"
-
-#: ../../../../ajax/ajax_doLogin.php:160 ../../../../ajax/ajax_doLogin.php:163
-msgid "Clave maestra incorrecta"
-msgstr "Ongeldig Master Wachtwoord"
-
-#: ../../../../ajax/ajax_doLogin.php:186
-#: ../../../../inc/ProfileBase.class.php:512
-#: ../../../../inc/ProfileBase.class.php:550
-#: ../../../../inc/ProfileBase.class.php:593
-#: ../../../../web/UsersMgmtC.class.php:90
-#: ../../../../inc/themes/classic/users.inc:37
-#: ../../../../inc/themes/material-blue/users.inc:43
-msgid "Perfil"
-msgstr "Profiel"
-
-#: ../../../../ajax/ajax_doLogin.php:187 ../../../../inc/Groups.class.php:158
-#: ../../../../inc/Groups.class.php:259 ../../../../inc/Groups.class.php:375
-#: ../../../../inc/Ldap.class.php:224 ../../../../inc/Ldap.class.php:237
-#: ../../../../inc/Ldap.class.php:247 ../../../../inc/Ldap.class.php:396
-#: ../../../../web/UsersMgmtC.class.php:91
-#: ../../../../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 "Groep"
-
-#: ../../../../ajax/ajax_files.php:46 ../../../../ajax/ajax_getFiles.php:40
+#: ../../../../ajax/ajax_accGetFiles.php:43
+#: ../../../../ajax/ajax_filesMgmt.php:57
msgid "Gestión de archivos deshabilitada"
msgstr "Bestands management uitgeschakeld"
-#: ../../../../ajax/ajax_files.php:60 ../../../../inc/Files.class.php:63
-msgid "Subir Archivo"
-msgstr "Bestand uploaden"
+#: ../../../../ajax/ajax_accGetFiles.php:50
+#: ../../../../ajax/ajax_accSearch.php:44
+#: ../../../../ajax/ajax_filesMgmt.php:53
+#: ../../../../ajax/ajax_filesMgmt.php:68
+#: ../../../../ajax/ajax_getItems.php:46 ../../../../ajax/ajax_migrate.php:49
+#: ../../../../ajax/ajax_passReset.php:49
+#: ../../../../ajax/ajax_userPrefsSave.php:58
+msgid "CONSULTA INVÁLIDA"
+msgstr "Ongeldige Query"
-#: ../../../../ajax/ajax_files.php:69
-msgid "No hay extensiones permitidas"
-msgstr "Er zijn geen toegestande extensies"
+#: ../../../../ajax/ajax_accSearch.php:38
+#: ../../../../ajax/ajax_accViewPass.php:45
+#: ../../../../ajax/ajax_migrate.php:39
+#: ../../../../ajax/ajax_userPrefsSave.php:51
+#: ../../../../inc/SP/Controller/RequestControllerTrait.class.php:113
+msgid "La sesión no se ha iniciado o ha caducado"
+msgstr "Sessie nog niet gestart of er is een timeout opgetreden"
-#: ../../../../ajax/ajax_files.php:80 ../../../../inc/FileImport.class.php:115
-msgid "Tipo de archivo no soportado"
-msgstr "Bestandstype niet toegestaan"
+#: ../../../../ajax/ajax_accViewPass.php:69
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:511
+msgid "La clave maestra no coincide"
+msgstr "Het Master Wachtwoord matched niet"
-#: ../../../../ajax/ajax_files.php:86
-msgid "Archivo inválido"
-msgstr "Ongeldig bestand"
+#: ../../../../ajax/ajax_accViewPass.php:76
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:298
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:521
+msgid "No tiene permisos para acceder a esta cuenta"
+msgstr "U heeft geen permissie op dit account"
-#: ../../../../ajax/ajax_files.php:102 ../../../../ajax/ajax_files.php:119
-#: ../../../../inc/FileImport.class.php:131
-#: ../../../../inc/FileImport.class.php:149
-#: ../../../../inc/FileImport.class.php:167
-msgid "Error interno al leer el archivo"
-msgstr "Interne fout bij lezen bestand"
+#: ../../../../ajax/ajax_accViewPass.php:78
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:458
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:514
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:301
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:523
+#: ../../../../inc/SP/Controller/LoginController.class.php:283
+#: ../../../../inc/SP/Controller/LoginController.class.php:294
+msgid "Clave maestra actualizada"
+msgstr "Master Wachtwoord bijgewerkt"
-#: ../../../../ajax/ajax_files.php:109
-msgid "El archivo es mayor de "
-msgstr "Het bestand is groter dan"
+#: ../../../../ajax/ajax_accViewPass.php:78
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:459
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:301
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:523
+#, fuzzy
+msgid "Reinicie la sesión para cambiarla"
+msgstr "Herstart sessie om bij te werken"
-#: ../../../../ajax/ajax_files.php:126
-msgid "Archivo guardado"
-msgstr "Bestand opgeslagen"
+#: ../../../../ajax/ajax_accViewPass.php:86
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:222
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:223
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:531
+#: ../../../../inc/SP/Core/Acl.class.php:211
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:48
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:48
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:51
+msgid "Ver Clave"
+msgstr "Bekijk wachtwoord"
-#: ../../../../ajax/ajax_files.php:131
-msgid "No se pudo guardar el archivo"
-msgstr "Fout bij opslaan van bestand"
-
-#: ../../../../ajax/ajax_files.php:141 ../../../../ajax/ajax_files.php:200
-msgid "No es un ID de archivo válido"
-msgstr "Ongeldig bestands ID"
-
-#: ../../../../ajax/ajax_files.php:149
-msgid "El archivo no existe"
-msgstr "Het bestand bestaat niet"
-
-#: ../../../../ajax/ajax_files.php:158
-#: ../../../../inc/themes/classic/files.inc:19
-#: ../../../../inc/themes/material-blue/files.inc:19
-msgid "Descargar Archivo"
-msgstr "Download bestand"
-
-#: ../../../../ajax/ajax_files.php:159 ../../../../ajax/ajax_viewpass.php:70
-#: ../../../../inc/Files.class.php:112
-#: ../../../../inc/themes/classic/eventlog.inc:14
-#: ../../../../inc/themes/material-blue/eventlog.inc:14
+#: ../../../../ajax/ajax_accViewPass.php:87
+#: ../../../../ajax/ajax_filesMgmt.php:160
+#: ../../../../inc/SP/Api/ApiTokens.class.php:270
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:532
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:134
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:197
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:19
msgid "ID"
msgstr "ID"
-#: ../../../../ajax/ajax_files.php:160 ../../../../inc/Files.class.php:65
-#: ../../../../inc/Files.class.php:113
-#: ../../../../inc/themes/classic/import.inc:70
-#: ../../../../inc/themes/material-blue/import.inc:80
+#: ../../../../ajax/ajax_accViewPass.php:88
+#: ../../../../ajax/ajax_filesMgmt.php:161
+#: ../../../../inc/SP/Account/Account.class.php:164
+#: ../../../../inc/SP/Account/Account.class.php:280
+#: ../../../../inc/SP/Account/Account.class.php:414
+#: ../../../../inc/SP/Account/Account.class.php:467
+#: ../../../../inc/SP/Account/Account.class.php:689
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:279
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:760
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:766
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:533
+#: ../../../../inc/SP/Controller/MainController.class.php:527
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:86
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:135
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:71
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:143
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:236
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:11
+msgid "Cuenta"
+msgstr "Account"
+
+#: ../../../../ajax/ajax_accViewPass.php:101
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:237
+#: ../../../../js/strings.js.php:72
+msgid "Clave de Cuenta"
+msgstr "Account Wachtwoord"
+
+#: ../../../../ajax/ajax_filesMgmt.php:71
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:85
+msgid "Subir Archivo"
+msgstr "Bestand uploaden"
+
+#: ../../../../ajax/ajax_filesMgmt.php:77
+#, fuzzy
+msgid "No hay extensiones permitidas"
+msgstr "Er zijn geen toegestande extensies"
+
+#: ../../../../ajax/ajax_filesMgmt.php:94
+#: ../../../../inc/SP/Import/FileImport.class.php:119
+msgid "Tipo de archivo no soportado"
+msgstr "Bestandstype niet toegestaan"
+
+#: ../../../../ajax/ajax_filesMgmt.php:95
+msgid "Extensión"
+msgstr ""
+
+#: ../../../../ajax/ajax_filesMgmt.php:101
+msgid "Archivo inválido"
+msgstr "Ongeldig bestand"
+
+#: ../../../../ajax/ajax_filesMgmt.php:102
+#: ../../../../ajax/ajax_filesMgmt.php:162
+#: ../../../../inc/SP/Core/Upgrade.class.php:280
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:87
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:136
+#: ../../../../inc/themes/material-blue/views/config/import.inc:106
msgid "Archivo"
msgstr "Bestand"
-#: ../../../../ajax/ajax_files.php:161 ../../../../inc/Files.class.php:66
-#: ../../../../inc/Files.class.php:114
-#: ../../../../web/AccountsMgmtC.class.php:267
-#: ../../../../inc/themes/classic/customfields.inc:16
-#: ../../../../inc/themes/material-blue/customfields.inc:19
-msgid "Tipo"
-msgstr "Type"
+#: ../../../../ajax/ajax_filesMgmt.php:115
+#: ../../../../ajax/ajax_filesMgmt.php:133
+#: ../../../../inc/SP/Import/FileImport.class.php:135
+#: ../../../../inc/SP/Import/FileImport.class.php:155
+#: ../../../../inc/SP/Import/FileImport.class.php:175
+msgid "Error interno al leer el archivo"
+msgstr "Interne fout bij lezen bestand"
-#: ../../../../ajax/ajax_files.php:162 ../../../../inc/Files.class.php:67
-#: ../../../../inc/Files.class.php:115
+#: ../../../../ajax/ajax_filesMgmt.php:122
+msgid "Tamaño de archivo superado"
+msgstr ""
+
+#: ../../../../ajax/ajax_filesMgmt.php:123
+#: ../../../../ajax/ajax_filesMgmt.php:164
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:283
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:89
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:138
msgid "Tamaño"
msgstr "Grootte"
-#: ../../../../ajax/ajax_files.php:204
+#: ../../../../ajax/ajax_filesMgmt.php:140
+msgid "Archivo guardado"
+msgstr "Bestand opgeslagen"
+
+#: ../../../../ajax/ajax_filesMgmt.php:142
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:92
+msgid "No se pudo guardar el archivo"
+msgstr "Fout bij opslaan van bestand"
+
+#: ../../../../ajax/ajax_filesMgmt.php:150
+#: ../../../../ajax/ajax_filesMgmt.php:194
+msgid "No es un ID de archivo válido"
+msgstr "Ongeldig bestands ID"
+
+#: ../../../../ajax/ajax_filesMgmt.php:156
+msgid "El archivo no existe"
+msgstr "Het bestand bestaat niet"
+
+#: ../../../../ajax/ajax_filesMgmt.php:159
+#: ../../../../inc/themes/material-blue/views/account/files-list.inc:34
+msgid "Descargar Archivo"
+msgstr "Download bestand"
+
+#: ../../../../ajax/ajax_filesMgmt.php:163
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:205
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:282
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:53
+#: ../../../../inc/SP/Controller/LoginController.class.php:340
+#: ../../../../inc/SP/Controller/LoginController.class.php:369
+#: ../../../../inc/SP/Controller/LoginController.class.php:412
+#: ../../../../inc/SP/Controller/LoginController.class.php:430
+#: ../../../../inc/SP/Core/Init.class.php:400
+#: ../../../../inc/SP/Core/Init.class.php:629
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:88
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:137
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:70
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:142
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:235
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:30
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:38
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:45
+msgid "Tipo"
+msgstr "Type"
+
+#: ../../../../ajax/ajax_filesMgmt.php:196
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:144
msgid "Archivo eliminado"
msgstr "Bestand verwijderd"
-#: ../../../../ajax/ajax_files.php:209
+#: ../../../../ajax/ajax_filesMgmt.php:199
+#, fuzzy
msgid "Error al eliminar el archivo"
msgstr "Fout bij verwijderen bestand"
-#: ../../../../ajax/ajax_getContent.php:42
-#: ../../../../inc/ApiRequest.class.php:55
-#: ../../../../inc/CustomFieldDef.class.php:45
-#: ../../../../inc/CustomFields.class.php:54
+#: ../../../../ajax/ajax_filesMgmt.php:201
+#: ../../../../ajax/ajax_userPrefsSave.php:96
+#: ../../../../inc/SP/Api/ApiRequest.class.php:192
+#: ../../../../inc/SP/Controller/RequestControllerTrait.class.php:101
+msgid "Acción Inválida"
+msgstr "Ongeldige actie"
+
+#: ../../../../ajax/ajax_getContent.php:54
+#: ../../../../inc/SP/Api/ApiBase.class.php:149
+#: ../../../../inc/SP/Api/ApiRequest.class.php:178
msgid "Parámetros incorrectos"
msgstr "Foutieve parameters"
-#: ../../../../ajax/ajax_migrate.php:56
+#: ../../../../ajax/ajax_install.php:58
+msgid "Instalación finalizada"
+msgstr "Installatie afgerond"
+
+#: ../../../../ajax/ajax_migrate.php:43
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:259
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:481
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:563
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:611
+#: ../../../../inc/SP/Forms/UserForm.class.php:93
+#: ../../../../inc/SP/Forms/UserForm.class.php:105
+#: ../../../../inc/SP/Forms/UserForm.class.php:119
+msgid "Ey, esto es una DEMO!!"
+msgstr "Hallo, dit is een DEMO!!"
+
+#: ../../../../ajax/ajax_migrate.php:59
msgid "Confirmar la importación de cuentas"
msgstr "Bevestig account import"
-#: ../../../../ajax/ajax_migrate.php:58
+#: ../../../../ajax/ajax_migrate.php:61
msgid "Es necesario un usuario de conexión"
msgstr "Een connectie gebruikersnaam is nodig"
-#: ../../../../ajax/ajax_migrate.php:60
+#: ../../../../ajax/ajax_migrate.php:63
msgid "Es necesaria una clave de conexión"
msgstr "Het connectie wachtwoord is nodig"
-#: ../../../../ajax/ajax_migrate.php:62
+#: ../../../../ajax/ajax_migrate.php:65
msgid "Es necesario el nombre de la BBDD"
msgstr "Een database naam is nodig"
-#: ../../../../ajax/ajax_migrate.php:64
+#: ../../../../ajax/ajax_migrate.php:67
msgid "Es necesario un nombre de host"
msgstr "Een hostname is nodig"
-#: ../../../../ajax/ajax_passReset.php:50
-#: ../../../../ajax/ajax_passReset.php:53
+#: ../../../../ajax/ajax_passReset.php:60
msgid "Recuperación de Clave"
msgstr "Wachtwoord Herstel"
-#: ../../../../ajax/ajax_passReset.php:56
#: ../../../../ajax/ajax_passReset.php:61
msgid "Solicitado para"
msgstr "Aangevraagd voor"
-#: ../../../../ajax/ajax_passReset.php:58
-#: ../../../../ajax/ajax_sendRequest.php:76
+#: ../../../../ajax/ajax_passReset.php:68
msgid "Solicitud enviada"
msgstr "Aanvraag verstuurd"
-#: ../../../../ajax/ajax_passReset.php:58
+#: ../../../../ajax/ajax_passReset.php:72
msgid "En breve recibirá un correo para completar la solicitud."
msgstr "U ontvanget een email om de aanvraag te bevestigen"
-#: ../../../../ajax/ajax_passReset.php:63
-msgid "No se ha podido realizar la solicitud. Consulte con el administrador."
-msgstr "De aanvraag kon niet gedaan worden"
+#: ../../../../ajax/ajax_passReset.php:76
+msgid "Solicitud no enviada"
+msgstr ""
-#: ../../../../ajax/ajax_passReset.php:73
-#: ../../../../inc/UserBase.class.php:570
-#: ../../../../inc/UserPass.class.php:127
+#: ../../../../ajax/ajax_passReset.php:77
+msgid "Compruebe datos de usuario o consulte con el administrador"
+msgstr ""
+
+#: ../../../../ajax/ajax_passReset.php:86
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:378
+#: ../../../../inc/SP/Mgmt/Users/UserPass.class.php:148
msgid "Modificar Clave Usuario"
msgstr "Wijzig Gebruikers Wachtwoord"
-#: ../../../../ajax/ajax_passReset.php:73
-#: ../../../../inc/UserBase.class.php:570
-#: ../../../../inc/UserBase.class.php:594
-#: ../../../../inc/UserPass.class.php:127
-#: ../../../../web/UsersMgmtC.class.php:89
-#: ../../../../inc/themes/classic/users.inc:21
-#: ../../../../inc/themes/material-blue/users.inc:24
+#: ../../../../ajax/ajax_passReset.php:99
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:222
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:653
+msgid "Clave actualizada"
+msgstr "Wachtwoord bijgewerkt"
+
+#: ../../../../ajax/ajax_passReset.php:100
+#: ../../../../inc/SP/Auth/Database/Database.class.php:66
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:402
+#: ../../../../inc/SP/Controller/LoginController.class.php:283
+#: ../../../../inc/SP/Controller/LoginController.class.php:294
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:164
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:379
+#: ../../../../inc/SP/Mgmt/Users/UserMigrate.class.php:102
+#: ../../../../inc/SP/Mgmt/Users/UserPass.class.php:149
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:31
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:23
msgid "Login"
msgstr "Inloggen"
-#: ../../../../ajax/ajax_passReset.php:81
+#: ../../../../ajax/ajax_passReset.php:107
+#, fuzzy
msgid "La clave es incorrecta o no coincide"
msgstr "Het wachtwoord is onjuist of matched niet"
-#: ../../../../ajax/ajax_sendRequest.php:49
-msgid "Es necesaria una descripción"
-msgstr "Een omschrijving is nodig"
-
-#: ../../../../ajax/ajax_sendRequest.php:62
-msgid "Solicitud de Modificación de Cuenta"
-msgstr "Aanvraag voor Account Modificatie"
-
-#: ../../../../ajax/ajax_sendRequest.php:63
-msgid "Solicitante"
-msgstr "Aanvrager"
-
-#: ../../../../ajax/ajax_sendRequest.php:64
-#: ../../../../ajax/ajax_viewpass.php:71 ../../../../inc/Account.class.php:181
-#: ../../../../inc/Account.class.php:236 ../../../../inc/Account.class.php:417
-#: ../../../../inc/Account.class.php:440 ../../../../inc/Account.class.php:684
-#: ../../../../inc/Files.class.php:64
-msgid "Cuenta"
-msgstr "Account"
-
-#: ../../../../ajax/ajax_sendRequest.php:65
-#: ../../../../inc/Account.class.php:180 ../../../../inc/Account.class.php:235
-#: ../../../../inc/Account.class.php:416 ../../../../inc/Account.class.php:439
-#: ../../../../inc/Account.class.php:683 ../../../../inc/Customer.class.php:65
-#: ../../../../inc/Customer.class.php:115
-#: ../../../../inc/Customer.class.php:163
-#: ../../../../web/SearchC.class.php:291
-#: ../../../../inc/themes/classic/account.inc:23
-#: ../../../../inc/themes/classic/editpass.inc:12
-#: ../../../../inc/themes/classic/request.inc:9
-#: ../../../../inc/themes/classic/search.inc:58
-#: ../../../../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:60
-msgid "Cliente"
-msgstr "Klant"
-
-#: ../../../../ajax/ajax_sendRequest.php:66
-#: ../../../../web/AccountsMgmtC.class.php:80
-#: ../../../../web/AccountsMgmtC.class.php:139
-#: ../../../../web/UsersMgmtC.class.php:188
-#: ../../../../inc/themes/classic/categories.inc:16
-#: ../../../../inc/themes/classic/customers.inc:16
-#: ../../../../inc/themes/classic/eventlog.inc:29
-#: ../../../../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:29
-#: ../../../../inc/themes/material-blue/groups.inc:20
-msgid "Descripción"
-msgstr "Omschrijving"
-
-#: ../../../../ajax/ajax_sendRequest.php:79
-msgid "Error al enviar la solicitud"
-msgstr "Fout bij verzenden aanvraag"
-
-#: ../../../../ajax/ajax_userPrefsSave.php:75
-#: ../../../../ajax/ajax_userPrefsSave.php:108
-msgid "Error al actualizar preferencias"
-msgstr "Fout bij updaten voorkeuren"
-
-#: ../../../../ajax/ajax_userPrefsSave.php:85
-#: ../../../../ajax/ajax_userPrefsSave.php:111
+#: ../../../../ajax/ajax_userPrefsSave.php:89
+#: ../../../../inc/SP/Mgmt/Users/UserPreferencesUtil.class.php:84
msgid "Preferencias actualizadas"
msgstr "Voorkeuren bijgewerkt"
-#: ../../../../ajax/ajax_viewpass.php:55
-msgid "La clave maestra no coincide"
-msgstr "Het Master Wachtwoord matched niet"
-
-#: ../../../../ajax/ajax_viewpass.php:59
-#: ../../../../inc/Controller.class.php:166
-msgid "No tiene permisos para acceder a esta cuenta"
-msgstr "U heeft geen permissie op dit account"
-
-#: ../../../../ajax/ajax_viewpass.php:69 ../../../../inc/Acl.class.php:133
-#: ../../../../inc/themes/classic/account.inc:405
-#: ../../../../inc/themes/classic/profiles.inc:23
-#: ../../../../inc/themes/classic/search.inc:139
-#: ../../../../inc/themes/material-blue/account.inc:433
-#: ../../../../inc/themes/material-blue/profiles.inc:35
-#: ../../../../inc/themes/material-blue/search.inc:149
-msgid "Ver Clave"
-msgstr "Bekijk wachtwoord"
-
-#: ../../../../ajax/ajax_viewpass.php:80 ../../../../js/strings.js.php:73
-msgid "Clave de Cuenta"
-msgstr "Account Wachtwoord"
-
-#: ../../../../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:33 ../../../../inc/Backup.class.php:28
-#: ../../../../inc/Base.php:26 ../../../../inc/Cache.class.php:28
-#: ../../../../inc/Category.class.php:29 ../../../../inc/Config.class.php:28
-#: ../../../../inc/ConfigDB.class.php:28
-#: ../../../../inc/ConfigInterface.class.php:28
-#: ../../../../inc/Controller.class.php:31 ../../../../inc/Crypt.class.php:28
-#: ../../../../inc/CryptMasterPass.class.php:28
-#: ../../../../inc/CryptPKI.class.php:28
-#: ../../../../inc/CsvImport.class.php:28
-#: ../../../../inc/CsvImportBase.class.php:28
-#: ../../../../inc/CustomFieldDef.class.php:28
-#: ../../../../inc/CustomFields.class.php:28
-#: ../../../../inc/CustomFieldsBase.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/Language.class.php:28 ../../../../inc/Ldap.class.php:29
-#: ../../../../inc/LdapADS.class.php:28 ../../../../inc/Log.class.php:28
-#: ../../../../inc/Migrate.class.php:28 ../../../../inc/Minify.class.php:30
-#: ../../../../inc/Profile.class.php:29
-#: ../../../../inc/ProfileBase.class.php:28
-#: ../../../../inc/Request.class.php:46 ../../../../inc/Response.class.php:28
-#: ../../../../inc/SPException.class.php:28
-#: ../../../../inc/Session.class.php:28
-#: ../../../../inc/SessionUtil.class.php:28
-#: ../../../../inc/SyspassImport.class.php:28
-#: ../../../../inc/Template.class.php:27 ../../../../inc/Themes.class.php:28
-#: ../../../../inc/Upgrade.class.php:29 ../../../../inc/User.class.php:28
-#: ../../../../inc/UserAccounts.class.php:28
-#: ../../../../inc/UserBase.class.php:28 ../../../../inc/UserLdap.class.php:28
-#: ../../../../inc/UserMigrate.class.php:28
-#: ../../../../inc/UserPass.class.php:28
-#: ../../../../inc/UserPassRecover.class.php:28
-#: ../../../../inc/UserPreferences.class.php:28
-#: ../../../../inc/UserUtil.class.php:28 ../../../../inc/Util.class.php:28
-#: ../../../../inc/XmlExport.class.php:28
-#: ../../../../inc/XmlImport.class.php:28
-#: ../../../../inc/XmlImportBase.class.php:28
-#: ../../../../web/AccountC.class.php:41
-#: ../../../../web/AccountsMgmtC.class.php:33
-#: ../../../../web/ConfigC.class.php:36 ../../../../web/EventlogC.class.php:30
-#: ../../../../web/SearchC.class.php:33
-#: ../../../../web/UsersMgmtC.class.php:40
-#: ../../../../web/UsersPrefsC.class.php:35
+#: ../../../../inc/Base.php:27
+#: ../../../../inc/Plugins/Authenticator/Authenticator.class.php:32
+#: ../../../../inc/SP/Account/Account.class.php:46
+#: ../../../../inc/SP/Account/AccountBase.class.php:32
+#: ../../../../inc/SP/Account/AccountHistory.class.php:35
+#: ../../../../inc/SP/Account/AccountInterface.class.php:31
+#: ../../../../inc/SP/Account/AccountSearch.class.php:37
+#: ../../../../inc/SP/Account/AccountTags.class.php:33
+#: ../../../../inc/SP/Account/AccountUtil.class.php:33
+#: ../../../../inc/SP/Account/AccountsSearchItem.class.php:27
+#: ../../../../inc/SP/Account/UserAccounts.class.php:31
+#: ../../../../inc/SP/Api/ApiBase.class.php:27
+#: ../../../../inc/SP/Api/ApiRequest.class.php:33
+#: ../../../../inc/SP/Api/ApiTokens.class.php:27
+#: ../../../../inc/SP/Api/ApiTokensUtil.class.php:34
+#: ../../../../inc/SP/Api/SyspassApi.class.php:43
+#: ../../../../inc/SP/Auth/Auth.class.php:39
+#: ../../../../inc/SP/Config/Config.class.php:31
+#: ../../../../inc/SP/Config/ConfigDB.class.php:32
+#: ../../../../inc/SP/Config/ConfigInterface.class.php:27
+#: ../../../../inc/SP/Controller/AccountController.class.php:27
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:27
+#: ../../../../inc/SP/Controller/ConfigController.class.php:27
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:27
+#: ../../../../inc/SP/Controller/EventlogController.class.php:27
+#: ../../../../inc/SP/Controller/GridItemsSearchController.class.php:34
+#: ../../../../inc/SP/Controller/GridTabControllerBase.class.php:27
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:27
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:27
+#: ../../../../inc/SP/Controller/ItemListController.class.php:27
+#: ../../../../inc/SP/Controller/ItemSearchController.class.php:27
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:27
+#: ../../../../inc/SP/Controller/MainController.class.php:27
+#: ../../../../inc/SP/Controller/NoticeShowController.class.php:27
+#: ../../../../inc/SP/Controller/NoticesSearchController.class.php:27
+#: ../../../../inc/SP/Controller/UserPreferencesController.class.php:27
+#: ../../../../inc/SP/Controller/WikiController.class.php:27
+#: ../../../../inc/SP/Core/Acl.class.php:33
+#: ../../../../inc/SP/Core/Backup.class.php:37
+#: ../../../../inc/SP/Core/Crypt.class.php:34
+#: ../../../../inc/SP/Core/CryptMasterPass.class.php:30
+#: ../../../../inc/SP/Core/CryptPKI.class.php:27
+#: ../../../../inc/SP/Core/Exceptions/SPException.class.php:29
+#: ../../../../inc/SP/Core/Init.class.php:41
+#: ../../../../inc/SP/Core/Installer.class.php:45
+#: ../../../../inc/SP/Core/Language.class.php:30
+#: ../../../../inc/SP/Core/Session.class.php:34
+#: ../../../../inc/SP/Core/SessionUtil.class.php:31
+#: ../../../../inc/SP/Core/Template.class.php:27
+#: ../../../../inc/SP/Core/UI/Theme.class.php:33
+#: ../../../../inc/SP/Core/UI/ThemeIconsBase.class.php:30
+#: ../../../../inc/SP/Core/UI/ThemeIconsInterface.class.php:27
+#: ../../../../inc/SP/Core/Upgrade.class.php:40
+#: ../../../../inc/SP/Core/XmlExport.class.php:38
+#: ../../../../inc/SP/DataModel/AccountData.class.php:27
+#: ../../../../inc/SP/DataModel/CategoryData.class.php:27
+#: ../../../../inc/SP/DataModel/CustomFieldBaseData.class.php:27
+#: ../../../../inc/SP/DataModel/CustomFieldData.class.php:27
+#: ../../../../inc/SP/DataModel/CustomerData.class.php:27
+#: ../../../../inc/SP/DataModel/FileData.class.php:27
+#: ../../../../inc/SP/DataModel/GroupAccountsData.class.php:27
+#: ../../../../inc/SP/DataModel/GroupData.class.php:27
+#: ../../../../inc/SP/DataModel/GroupUsersData.class.php:27
+#: ../../../../inc/SP/DataModel/ProfileBaseData.class.php:27
+#: ../../../../inc/SP/DataModel/ProfileData.class.php:27
+#: ../../../../inc/SP/DataModel/PublicLinkBaseData.class.php:27
+#: ../../../../inc/SP/DataModel/PublicLinkData.class.php:27
+#: ../../../../inc/SP/DataModel/PublicLinkListData.class.php:27
+#: ../../../../inc/SP/DataModel/TagData.class.php:27
+#: ../../../../inc/SP/DataModel/UserData.class.php:27
+#: ../../../../inc/SP/Html/Assets/FontIcon.class.php:27
+#: ../../../../inc/SP/Html/Assets/IconBase.class.php:27
+#: ../../../../inc/SP/Html/Assets/IconInterface.class.php:27
+#: ../../../../inc/SP/Html/Assets/ImageIcon.class.php:27
+#: ../../../../inc/SP/Html/DataGrid/DataGrid.class.php:27
+#: ../../../../inc/SP/Html/DataGrid/DataGridAction.class.php:27
+#: ../../../../inc/SP/Html/DataGrid/DataGridActionBase.class.php:29
+#: ../../../../inc/SP/Html/DataGrid/DataGridActionInterface.class.php:29
+#: ../../../../inc/SP/Html/DataGrid/DataGridActionSearch.class.php:27
+#: ../../../../inc/SP/Html/DataGrid/DataGridActionType.class.php:27
+#: ../../../../inc/SP/Html/DataGrid/DataGridBase.class.php:27
+#: ../../../../inc/SP/Html/DataGrid/DataGridData.class.php:27
+#: ../../../../inc/SP/Html/DataGrid/DataGridDataBase.class.php:29
+#: ../../../../inc/SP/Html/DataGrid/DataGridDataInterface.class.php:29
+#: ../../../../inc/SP/Html/DataGrid/DataGridHeader.class.php:27
+#: ../../../../inc/SP/Html/DataGrid/DataGridHeaderBase.class.php:27
+#: ../../../../inc/SP/Html/DataGrid/DataGridHeaderInterface.class.php:27
+#: ../../../../inc/SP/Html/DataGrid/DataGridHeaderSort.class.php:27
+#: ../../../../inc/SP/Html/DataGrid/DataGridInterface.class.php:27
+#: ../../../../inc/SP/Html/DataGrid/DataGridPager.class.php:27
+#: ../../../../inc/SP/Html/DataGrid/DataGridPagerBase.class.php:29
+#: ../../../../inc/SP/Html/DataGrid/DataGridPagerInterface.class.php:29
+#: ../../../../inc/SP/Html/DataGrid/DataGridSort.class.php:29
+#: ../../../../inc/SP/Html/DataGrid/DataGridSortInterface.class.php:29
+#: ../../../../inc/SP/Html/DataGrid/DataGridTab.class.php:27
+#: ../../../../inc/SP/Html/Html.class.php:27
+#: ../../../../inc/SP/Html/Minify.class.php:32
+#: ../../../../inc/SP/Http/Request.class.php:49
+#: ../../../../inc/SP/Http/Response.class.php:29
+#: ../../../../inc/SP/Import/CsvImport.class.php:29
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:35
+#: ../../../../inc/SP/Import/FileImport.class.php:30
+#: ../../../../inc/SP/Import/Import.class.php:33
+#: ../../../../inc/SP/Import/ImportBase.class.php:39
+#: ../../../../inc/SP/Import/KeepassImport.class.php:32
+#: ../../../../inc/SP/Import/KeepassXImport.class.php:32
+#: ../../../../inc/SP/Import/SyspassImport.class.php:34
+#: ../../../../inc/SP/Import/XmlImport.class.php:30
+#: ../../../../inc/SP/Import/XmlImportBase.class.php:29
+#: ../../../../inc/SP/Log/Log.class.php:35
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:28
+#: ../../../../inc/SP/Mgmt/Categories/CategoryBase.class.php:27
+#: ../../../../inc/SP/Mgmt/Categories/CategorySearch.class.php:27
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomField.class.php:27
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldBase.class.php:27
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:27
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDefSearch.class.php:27
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:27
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:27
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:28
+#: ../../../../inc/SP/Mgmt/Customers/CustomerBase.class.php:27
+#: ../../../../inc/SP/Mgmt/Customers/CustomerSearch.class.php:27
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:40
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:40
+#: ../../../../inc/SP/Mgmt/Groups/GroupAccounts.class.php:27
+#: ../../../../inc/SP/Mgmt/Groups/GroupAccountsBase.class.php:30
+#: ../../../../inc/SP/Mgmt/Groups/GroupAccountsUtil.class.php:27
+#: ../../../../inc/SP/Mgmt/Groups/GroupSearch.class.php:27
+#: ../../../../inc/SP/Mgmt/Groups/GroupUsers.class.php:27
+#: ../../../../inc/SP/Mgmt/ItemInterface.class.php:27
+#: ../../../../inc/SP/Mgmt/ItemSearchInterface.class.php:29
+#: ../../../../inc/SP/Mgmt/Notices/NoticeBase.class.php:27
+#: ../../../../inc/SP/Mgmt/Notices/NoticeSearch.class.php:27
+#: ../../../../inc/SP/Mgmt/Plugins/PluginBase.class.php:27
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:28
+#: ../../../../inc/SP/Mgmt/Profiles/ProfileBase.class.php:30
+#: ../../../../inc/SP/Mgmt/Profiles/ProfileSearch.class.php:27
+#: ../../../../inc/SP/Mgmt/Profiles/ProfileUtil.class.php:34
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:43
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLinkBase.class.php:27
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLinkSearch.class.php:36
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:27
+#: ../../../../inc/SP/Mgmt/Tags/TagBase.class.php:30
+#: ../../../../inc/SP/Mgmt/Tags/TagSearch.class.php:27
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:27
+#: ../../../../inc/SP/Mgmt/Users/UserBase.class.php:27
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:35
+#: ../../../../inc/SP/Mgmt/Users/UserMigrate.class.php:27
+#: ../../../../inc/SP/Mgmt/Users/UserPass.class.php:27
+#: ../../../../inc/SP/Mgmt/Users/UserPassRecover.class.php:34
+#: ../../../../inc/SP/Mgmt/Users/UserPassRecoverBase.class.php:27
+#: ../../../../inc/SP/Mgmt/Users/UserPreferences.class.php:27
+#: ../../../../inc/SP/Mgmt/Users/UserPreferencesBase.class.php:27
+#: ../../../../inc/SP/Mgmt/Users/UserUtil.class.php:27
+#: ../../../../inc/SP/Storage/DB.class.php:34
+#: ../../../../inc/SP/Storage/MySQLHandler.class.php:32
+#: ../../../../inc/SP/Util/ImageUtil.class.php:30
+#: ../../../../inc/SP/Util/Util.class.php:35
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApi.class.php:33
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:28
msgid "No es posible acceder directamente a este archivo"
msgstr "Niet mogelijk om dit bestand te openen"
-#: ../../../../inc/Account.class.php:112 ../../../../inc/Account.class.php:201
-#: ../../../../inc/Account.class.php:653
-msgid "Error al actualizar el historial"
-msgstr "Fout bij bijwerken geschiedenis"
-
-#: ../../../../inc/Account.class.php:117
+#: ../../../../inc/SP/Account/Account.class.php:66
msgid "Actualizar Cuenta"
msgstr "Bijwerken Account"
-#: ../../../../inc/Account.class.php:120 ../../../../inc/Account.class.php:398
-msgid "Error al actualizar los grupos secundarios"
-msgstr "Fout bij het updaten van de secundaire groep"
+#: ../../../../inc/SP/Account/Account.class.php:70
+#: ../../../../inc/SP/Account/Account.class.php:240
+#: ../../../../inc/SP/Account/Account.class.php:457
+#: ../../../../inc/SP/Account/Account.class.php:650
+msgid "Error al actualizar el historial"
+msgstr "Fout bij bijwerken geschiedenis"
-#: ../../../../inc/Account.class.php:126 ../../../../inc/Account.class.php:406
+#: ../../../../inc/SP/Account/Account.class.php:73
+#: ../../../../inc/SP/Account/Account.class.php:157
+#, fuzzy
+msgid "Error al modificar la cuenta"
+msgstr "Error bij account bijwerken"
+
+#: ../../../../inc/SP/Account/Account.class.php:89
+#: ../../../../inc/SP/Account/Account.class.php:400
msgid "Error al actualizar los usuarios de la cuenta"
msgstr "Fout bij het update van de gebruikers onder het account"
-#: ../../../../inc/Account.class.php:234
+#: ../../../../inc/SP/Account/Account.class.php:163
+#: ../../../../inc/SP/Account/Account.class.php:279
+#: ../../../../inc/SP/Account/Account.class.php:413
+#: ../../../../inc/SP/Account/Account.class.php:466
+#: ../../../../inc/SP/Account/Account.class.php:688
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:345
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:280
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:349
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:767
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:80
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:151
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:23
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:29
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:15
+#: ../../../../inc/themes/material-blue/views/account/account.inc:52
+#: ../../../../inc/themes/material-blue/views/account/request.inc:16
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:21
+msgid "Cliente"
+msgstr "Klant"
+
+#: ../../../../inc/SP/Account/Account.class.php:235
msgid "Restaurar Cuenta"
msgstr "Account Herstel"
-#: ../../../../inc/Account.class.php:341
-#: ../../../../inc/AccountHistory.class.php:348
-#: ../../../../inc/AccountHistory.class.php:508
+#: ../../../../inc/SP/Account/Account.class.php:243
+#: ../../../../inc/SP/Account/Account.class.php:273
+msgid "Error al restaurar cuenta"
+msgstr "Fout bij herstellen account"
+
+#: ../../../../inc/SP/Account/Account.class.php:309
+#: ../../../../inc/SP/Account/AccountHistory.class.php:179
+#: ../../../../inc/SP/Account/AccountHistory.class.php:455
msgid "No se pudieron obtener los datos de la cuenta"
msgstr "Error bij ophalen account gegevens"
-#: ../../../../inc/Account.class.php:415 ../../../../inc/Acl.class.php:129
-#: ../../../../web/AccountC.class.php:150 ../../../../web/MainC.class.php:183
+#: ../../../../inc/SP/Account/Account.class.php:311
+msgid "La cuenta no existe"
+msgstr ""
+
+#: ../../../../inc/SP/Account/Account.class.php:376
+#, fuzzy
+msgid "Error al crear la cuenta"
+msgstr "Fout bij account aanmaken"
+
+#: ../../../../inc/SP/Account/Account.class.php:381
+#: ../../../../inc/SP/Controller/AccountController.class.php:133
+#: ../../../../inc/SP/Controller/MainController.class.php:246
+#: ../../../../inc/SP/Core/Acl.class.php:207
msgid "Nueva Cuenta"
msgstr "Nieuw Account"
-#: ../../../../inc/Account.class.php:433
-msgid "ERROR: Error en la operación."
-msgstr "ERROR: Operatie mislukt"
-
-#: ../../../../inc/Account.class.php:438 ../../../../inc/Acl.class.php:134
-#: ../../../../web/AccountC.class.php:358
-#: ../../../../inc/themes/classic/account.inc:392
-#: ../../../../inc/themes/classic/search.inc:167
-#: ../../../../inc/themes/material-blue/account.inc:427
-#: ../../../../inc/themes/material-blue/search.inc:178
+#: ../../../../inc/SP/Account/Account.class.php:453
+#: ../../../../inc/SP/Controller/AccountController.class.php:342
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:277
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:278
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:382
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:383
+#: ../../../../inc/SP/Core/Acl.class.php:212
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:17
msgid "Eliminar Cuenta"
msgstr "Verwijder Account"
-#: ../../../../inc/Account.class.php:451
-msgid "Error al eliminar grupos asociados a la cuenta"
-msgstr "Error bij verwijderen account's groepen"
+#: ../../../../inc/SP/Account/Account.class.php:460
+#: ../../../../inc/SP/Account/Account.class.php:477
+#, fuzzy
+msgid "Error al eliminar la cuenta"
+msgstr "Error bij account verwijderen"
-#: ../../../../inc/Account.class.php:455
+#: ../../../../inc/SP/Account/Account.class.php:494
msgid "Error al eliminar usuarios asociados a la cuenta"
msgstr "Error bij verwijderen account's users"
-#: ../../../../inc/Account.class.php:459
-msgid "Error al eliminar archivos asociados a la cuenta"
-msgstr "Error bij verwijderen account's bestanden"
+#: ../../../../inc/SP/Account/Account.class.php:554
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:511
+msgid "Actualizar Clave Maestra"
+msgstr "Bijwerken Master Wachtwoord"
-#: ../../../../inc/Account.class.php:513
-#: ../../../../inc/AccountHistory.class.php:129
-#: ../../../../inc/XmlImport.class.php:62
-msgid "Inicio"
-msgstr "Start"
-
-#: ../../../../inc/Account.class.php:518
-#: ../../../../inc/AccountHistory.class.php:135
+#: ../../../../inc/SP/Account/Account.class.php:558
+#: ../../../../inc/SP/Account/AccountHistory.class.php:224
msgid "Error en el módulo de encriptación"
msgstr "Error bij encryptie module"
-#: ../../../../inc/Account.class.php:526
-#: ../../../../inc/AccountHistory.class.php:143
+#: ../../../../inc/SP/Account/Account.class.php:567
+#: ../../../../inc/SP/Account/AccountHistory.class.php:233
msgid "Error al obtener las claves de las cuentas"
msgstr "Error bij ophalen account's wachtwoorden"
-#: ../../../../inc/Account.class.php:542
-#: ../../../../inc/AccountHistory.class.php:165
+#: ../../../../inc/SP/Account/Account.class.php:583
+#: ../../../../inc/SP/Account/AccountHistory.class.php:261
msgid "Clave de cuenta vacía"
msgstr "Account wachtwoord leeg"
-#: ../../../../inc/Account.class.php:547
-#: ../../../../inc/AccountHistory.class.php:170
+#: ../../../../inc/SP/Account/Account.class.php:588
+#: ../../../../inc/SP/Account/AccountHistory.class.php:266
msgid "IV de encriptación incorrecto"
msgstr "Foutieve encryptie IV"
-#: ../../../../inc/Account.class.php:556
-#: ../../../../inc/AccountHistory.class.php:179
+#: ../../../../inc/SP/Account/Account.class.php:597
+#: ../../../../inc/SP/Account/AccountHistory.class.php:275
msgid "No es posible desencriptar la clave de la cuenta"
msgstr "Niet mogelijk om het account wachtwoord te decrypten"
-#: ../../../../inc/Account.class.php:562
+#: ../../../../inc/SP/Account/Account.class.php:603
msgid "Fallo al actualizar la clave de la cuenta"
msgstr "Error bij het updaten van het account wachtwoord"
-#: ../../../../inc/Account.class.php:576
+#: ../../../../inc/SP/Account/Account.class.php:610
+#: ../../../../inc/SP/Account/AccountHistory.class.php:288
msgid "Cuentas actualizadas"
msgstr "Accounts bijgewerkt"
-#: ../../../../inc/Account.class.php:581
-#: ../../../../inc/AccountHistory.class.php:204
-#: ../../../../inc/CustomFields.class.php:285
-#: ../../../../inc/CustomFields.class.php:327
-msgid "Fin"
-msgstr "Einde"
+#: ../../../../inc/SP/Account/Account.class.php:611
+#: ../../../../inc/SP/Account/AccountHistory.class.php:289
+msgid "Errores"
+msgstr ""
-#: ../../../../inc/Account.class.php:682
+#: ../../../../inc/SP/Account/Account.class.php:644
msgid "Modificar Clave"
msgstr "Bijwerken Wachtwoord"
-#: ../../../../inc/Account.class.php:717
-msgid "No se pudieron obtener los datos de las cuentas"
-msgstr "Niet mogelijk om accounts gegevens op te halen"
+#: ../../../../inc/SP/Account/Account.class.php:653
+#: ../../../../inc/SP/Account/Account.class.php:679
+#, fuzzy
+msgid "Error al actualizar la clave"
+msgstr "Fout bij wachtwoord updaten"
-#: ../../../../inc/AccountHistory.class.php:128
+#: ../../../../inc/SP/Account/AccountFavorites.class.php:80
+msgid "Error al añadir favorito"
+msgstr ""
+
+#: ../../../../inc/SP/Account/AccountFavorites.class.php:101
+msgid "Error al eliminar favorito"
+msgstr ""
+
+#: ../../../../inc/SP/Account/AccountHistory.class.php:220
msgid "Actualizar Clave Maestra (H)"
msgstr "Wijzig Master Wachtwoord (H)"
-#: ../../../../inc/AccountHistory.class.php:160
+#: ../../../../inc/SP/Account/AccountHistory.class.php:256
msgid "La clave maestra del registro no coincide"
msgstr "De waarde van het hoofd wachtwoord komt niet overeen"
-#: ../../../../inc/AccountHistory.class.php:185
+#: ../../../../inc/SP/Account/AccountHistory.class.php:281
msgid "Fallo al actualizar la clave del histórico"
msgstr "Fout bij het updaten van hoofd wachtwoord"
-#: ../../../../inc/AccountHistory.class.php:199
-#: ../../../../inc/CustomFields.class.php:323
-msgid "Registros actualizados"
-msgstr "Gegevvens bijgewerkt"
+#: ../../../../inc/SP/Account/AccountTags.class.php:75
+msgid "Error al eliminar las etiquetas de la cuenta"
+msgstr ""
-#: ../../../../inc/Acl.class.php:112
-msgid "Denegado acceso a"
-msgstr "Toegang geweigerd tot"
+#: ../../../../inc/SP/Account/AccountUtil.class.php:132
+msgid "No se pudieron obtener los datos de las cuentas"
+msgstr "Niet mogelijk om accounts gegevens op te halen"
-#: ../../../../inc/Acl.class.php:126
-msgid "Buscar Cuentas"
-msgstr "Zoek accounts"
-
-#: ../../../../inc/Acl.class.php:127
-msgid "Ver Cuenta"
-msgstr "Bekijk Account"
-
-#: ../../../../inc/Acl.class.php:128 ../../../../web/AccountC.class.php:265
-#: ../../../../inc/themes/classic/search.inc:161
-#: ../../../../inc/themes/material-blue/search.inc:172
-msgid "Copiar Cuenta"
-msgstr "Kopieer Account"
-
-#: ../../../../inc/Acl.class.php:130 ../../../../web/AccountC.class.php:329
-msgid "Editar Cuenta"
-msgstr "Wijzig Account"
-
-#: ../../../../inc/Acl.class.php:131
-msgid "Editar Clave de Cuenta"
-msgstr "Wijzig Account Wachwoord"
-
-#: ../../../../inc/Acl.class.php:132
-#: ../../../../inc/themes/classic/profiles.inc:28
-#: ../../../../inc/themes/material-blue/profiles.inc:40
-msgid "Ver Historial"
-msgstr "Bekijk Geschiedenis"
-
-#: ../../../../inc/Acl.class.php:135
-#: ../../../../inc/themes/classic/account.inc:207
-#: ../../../../inc/themes/classic/profiles.inc:50
-#: ../../../../inc/themes/material-blue/account.inc:234
-#: ../../../../inc/themes/material-blue/config.inc:280
-#: ../../../../inc/themes/material-blue/profiles.inc:60
-msgid "Archivos"
-msgstr "Bestanden"
-
-#: ../../../../inc/Acl.class.php:136
-msgid "Peticiones"
-msgstr "Aanvragen"
-
-#: ../../../../inc/Acl.class.php:137
-msgid "Gestión Aplicación"
-msgstr "Applicatie Management"
-
-#: ../../../../inc/Acl.class.php:138
-msgid "Gestión Categorías"
-msgstr "Categorieen Management"
-
-#: ../../../../inc/Acl.class.php:139
-msgid "Gestión Clientes"
-msgstr "Klanten Management"
-
-#: ../../../../inc/Acl.class.php:140
-msgid "Gestión Campos Personalizados"
-msgstr "Aangepaste Velden Management"
-
-#: ../../../../inc/Acl.class.php:141
-msgid "Gestión Autorizaciones API"
-msgstr "API Autorisaties Management"
-
-#: ../../../../inc/Acl.class.php:142 ../../../../inc/Acl.class.php:143
-msgid "Gestión Usuarios"
-msgstr "Gebruikers management"
-
-#: ../../../../inc/Acl.class.php:144
-msgid "Gestión Grupos"
-msgstr "Groepen Management"
-
-#: ../../../../inc/Acl.class.php:145
-msgid "Gestión Perfiles"
-msgstr "Profielen management"
-
-#: ../../../../inc/Acl.class.php:146 ../../../../inc/ConfigDB.class.php:91
-#: ../../../../inc/ConfigDB.class.php:119 ../../../../web/MainC.class.php:201
-#: ../../../../inc/themes/classic/profiles.inc:57
-#: ../../../../inc/themes/material-blue/profiles.inc:66
-msgid "Configuración"
-msgstr "Configuratie"
-
-#: ../../../../inc/Acl.class.php:147
-msgid "Configuración General"
-msgstr "Algemene Configuratie"
-
-#: ../../../../inc/Acl.class.php:148 ../../../../web/ConfigC.class.php:134
-#: ../../../../inc/themes/classic/profiles.inc:65
-#: ../../../../inc/themes/material-blue/profiles.inc:77
-msgid "Encriptación"
-msgstr "Encryptie"
-
-#: ../../../../inc/Acl.class.php:149 ../../../../web/ConfigC.class.php:179
-#: ../../../../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 "Importeer"
-
-#: ../../../../inc/Api.class.php:65 ../../../../inc/Api.class.php:88
-#: ../../../../inc/Api.class.php:126
+#: ../../../../inc/SP/Api/ApiBase.class.php:90
+#: ../../../../inc/SP/Api/ApiBase.class.php:180
+#: ../../../../inc/SP/Api/ApiBase.class.php:192
+#: ../../../../inc/SP/Api/ApiBase.class.php:205
+#: ../../../../inc/SP/Api/ApiBase.class.php:237
+#: ../../../../inc/SP/Api/SyspassApi.class.php:75
+#: ../../../../inc/SP/Api/SyspassApi.class.php:140
msgid "Acceso no permitido"
msgstr "Onbevoegde toegang"
-#: ../../../../inc/Api.class.php:166
-msgid "Error de codificación"
-msgstr "Codering Fout"
+#: ../../../../inc/SP/Api/ApiRequest.class.php:145
+#: ../../../../inc/SP/Import/XmlImportBase.class.php:133
+msgid "Método inválido"
+msgstr ""
-#: ../../../../inc/ApiRequest.class.php:102
-msgid "Token de autorización"
-msgstr "Autorisatie sleutel"
+#: ../../../../inc/SP/Api/ApiRequest.class.php:162
+msgid "Datos inválidos"
+msgstr ""
-#: ../../../../inc/ApiRequest.class.php:103
-msgid "Acción a realizar"
-msgstr "Actie"
+#: ../../../../inc/SP/Api/ApiRequest.class.php:164
+msgid "Formato incorrecto"
+msgstr ""
-#: ../../../../inc/ApiRequest.class.php:104
-msgid "Clave de usuario (opcional)"
-msgstr "Gebruikers wachtwoord (optioneel)"
+#: ../../../../inc/SP/Api/ApiTokens.class.php:104
+#: ../../../../inc/SP/Api/ApiTokens.class.php:137
+#: ../../../../inc/SP/Api/ApiTokens.class.php:165
+#: ../../../../inc/SP/Api/ApiTokens.class.php:196
+#: ../../../../inc/SP/Api/ApiTokens.class.php:240
+#: ../../../../inc/SP/Api/ApiTokens.class.php:266
+#: ../../../../inc/SP/Api/ApiTokensUtil.class.php:168
+#: ../../../../inc/SP/Controller/LoginController.class.php:170
+#: ../../../../inc/SP/Controller/LoginController.class.php:250
+#: ../../../../inc/SP/Controller/LoginController.class.php:359
+#: ../../../../inc/SP/Controller/LoginController.class.php:386
+#: ../../../../inc/SP/Core/Crypt.class.php:194
+#: ../../../../inc/SP/Core/Crypt.class.php:205
+#: ../../../../inc/SP/Import/XmlImportBase.class.php:82
+#: ../../../../inc/SP/Mgmt/Users/UserPassRecover.class.php:130
+msgid "Error interno"
+msgstr "Interne fout"
-#: ../../../../inc/ApiRequest.class.php:105
-msgid "Cadena a buscar"
-msgstr "String om te zoeken naar"
+#: ../../../../inc/SP/Api/ApiTokens.class.php:107
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:710
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:711
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:208
+msgid "Nueva Autorización"
+msgstr "Nieuwe Autorisatie"
-#: ../../../../inc/ApiRequest.class.php:106
-msgid "Numero de cuentas a mostar en la búsqueda"
-msgstr "Aantal resultaten per pagina bij zoek opdrachten"
+#: ../../../../inc/SP/Api/ApiTokens.class.php:108
+#: ../../../../inc/SP/Api/ApiTokens.class.php:244
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:519
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:533
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:544
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:169
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:109
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:119
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:366
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:676
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:763
+#: ../../../../inc/SP/Controller/LoginController.class.php:186
+#: ../../../../inc/SP/Controller/LoginController.class.php:241
+#: ../../../../inc/SP/Controller/LoginController.class.php:341
+#: ../../../../inc/SP/Controller/LoginController.class.php:406
+#: ../../../../inc/SP/Controller/LoginController.class.php:431
+#: ../../../../inc/SP/Core/Init.class.php:548
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:72
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:144
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:237
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:102
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:271
+#: ../../../../inc/SP/Mgmt/Users/UserPreferencesUtil.class.php:65
+#: ../../../../res/test.php:64
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:45
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:51
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:33
+#: ../../../../inc/themes/material-blue/views/account/account.inc:105
+#: ../../../../inc/themes/material-blue/views/account/viewpass.inc:14
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:63
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:49
+#: ../../../../inc/themes/material-blue/views/config/info.inc:40
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:98
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:68
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:75
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:209
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:223
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:31
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:23
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:11
+#: ../../../../inc/themes/material-blue/views/main/login.inc:14
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:16
+msgid "Usuario"
+msgstr "Gebruiker"
-#: ../../../../inc/ApiRequest.class.php:107
-msgid "Item a devolver"
-msgstr "Item om naar terug te keren"
-
-#: ../../../../inc/ApiTokens.class.php:221
+#: ../../../../inc/SP/Api/ApiTokens.class.php:141
msgid "La autorización ya existe"
msgstr "De autorisatie bestaat al"
-#: ../../../../inc/ApiTokens.class.php:307
+#: ../../../../inc/SP/Api/ApiTokens.class.php:243
msgid "Actualizar Autorización"
msgstr "Bijwerken Autorisatie"
-#: ../../../../inc/ApiTokens.class.php:331
-#: ../../../../web/UsersMgmtC.class.php:422
+#: ../../../../inc/SP/Api/ApiTokens.class.php:269
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:741
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:742
msgid "Eliminar Autorización"
msgstr "Verwijder Autorisatie"
-#: ../../../../inc/Auth.class.php:107
-msgid "Usuario no pertenece al grupo"
-msgstr "De gebruiker behoort niet tot de groep"
+#: ../../../../inc/SP/Api/SyspassApi.class.php:176
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:642
+msgid "Cuenta creada"
+msgstr "Account toegevoegd"
-#: ../../../../inc/Auth.class.php:195
-#: ../../../../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
+#: ../../../../inc/SP/Api/SyspassApi.class.php:201
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:664
+msgid "Cuenta eliminada"
+msgstr "Account verwijderd"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:247
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:414
+msgid "Categoría creada"
+msgstr "Categorie toegevoegd"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:270
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:425
+msgid "Categoría eliminada"
+msgstr "Categorie verwijderd"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:316
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:377
+msgid "Cliente creado"
+msgstr "Klant toegevoegd"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:339
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:388
+msgid "Cliente eliminado"
+msgstr "Klant verwijderd"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:354
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:622
+msgid "Proceso de backup finalizado"
+msgstr "Backup proces afgerond"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:360
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:616
+#: ../../../../inc/SP/Core/Backup.class.php:72
+#, fuzzy
+msgid "Error al realizar el backup"
+msgstr "Fout in backup proces"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:361
+#: ../../../../inc/SP/Controller/ChecksController.class.php:113
+#: ../../../../inc/SP/Controller/ChecksController.class.php:142
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:597
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:617
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:711
+#: ../../../../inc/SP/Import/Import.class.php:102
+msgid "Revise el registro de eventos para más detalles"
+msgstr "Check het eventlog voor mij"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:391
+#: ../../../../inc/SP/Api/SyspassApi.class.php:408
+#: ../../../../inc/SP/Api/SyspassApi.class.php:415
+msgid "Id de la cuenta"
+msgstr ""
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:392
+#: ../../../../inc/SP/Api/SyspassApi.class.php:409
+#: ../../../../inc/SP/Api/SyspassApi.class.php:421
+msgid "Clave del usuario asociado al token"
+msgstr ""
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:393
+msgid "Devolver detalles en la respuesta"
+msgstr ""
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:399
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:15
+msgid "Texto a buscar"
+msgstr "Zoek naar tekst"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:400
+#: ../../../../inc/SP/Api/SyspassApi.class.php:440
+#: ../../../../inc/SP/Api/SyspassApi.class.php:460
+msgid "Número de resultados a mostrar"
+msgstr ""
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:401
+msgid "Id de categoría a filtrar"
+msgstr ""
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:402
+msgid "Id de cliente a filtrar"
+msgstr ""
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:422
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:18
+#: ../../../../inc/themes/material-blue/views/account/account.inc:47
+msgid "Nombre de cuenta"
+msgstr "Account naam"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:423
+#: ../../../../inc/SP/Api/SyspassApi.class.php:453
+msgid "Id de categoría"
+msgstr ""
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:424
+#: ../../../../inc/SP/Api/SyspassApi.class.php:473
+msgid "Id de cliente"
+msgstr ""
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:425
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:540
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:63
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:56
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:62
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:73
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:44
+#: ../../../../inc/themes/material-blue/views/account/account.inc:118
+#: ../../../../inc/themes/material-blue/views/account/account.inc:125
+#: ../../../../inc/themes/material-blue/views/account/viewpass.inc:25
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:193
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:63
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:119
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:81
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:88
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:229
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:236
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:92
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:99
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:35
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:41
+#: ../../../../inc/themes/material-blue/views/main/install.inc:43
+#: ../../../../inc/themes/material-blue/views/main/login.inc:26
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:34
+msgid "Clave"
+msgstr "Wachtwoord"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:426
+#: ../../../../inc/themes/material-blue/views/account/account.inc:112
+msgid "Usuario de acceso"
+msgstr "Toegang gebruiker"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:427
+#: ../../../../inc/themes/material-blue/views/account/account.inc:100
+msgid "URL o IP de acceso"
+msgstr "Toegang URL of IP"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:428
+#: ../../../../inc/themes/material-blue/views/account/account.inc:167
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:126
+msgid "Notas sobre la cuenta"
+msgstr "Notities voor het account"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:439
+msgid "Nombre de categoría a buscar"
+msgstr ""
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:446
+#: ../../../../inc/themes/material-blue/views/itemshow/categories.inc:22
+msgid "Nombre de la categoría"
+msgstr "Categorie Naam"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:447
+#: ../../../../inc/themes/material-blue/views/itemshow/categories.inc:34
+msgid "Descripción de la categoría"
+msgstr "Categorie Omschrijving"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:459
+msgid "Nombre de cliente a buscar"
+msgstr ""
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:466
+#: ../../../../inc/themes/material-blue/views/itemshow/customers.inc:25
+msgid "Nombre del cliente"
+msgstr "Klantnaam"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:467
+#: ../../../../inc/themes/material-blue/views/itemshow/customers.inc:38
+msgid "Descripción del cliente"
+msgstr "Klant omschrijving"
+
+#: ../../../../inc/SP/Auth/Auth.class.php:83
+msgid "Método ya inicializado"
+msgstr ""
+
+#: ../../../../inc/SP/Auth/Auth.class.php:85
+msgid "Método no disponible"
+msgstr ""
+
+#: ../../../../inc/SP/Auth/AuthUtil.class.php:59
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:143
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:164
msgid "Cambio de Clave"
msgstr "Wachtwoord wijziging"
-#: ../../../../inc/Auth.class.php:197
+#: ../../../../inc/SP/Auth/AuthUtil.class.php:61
msgid "Se ha solicitado el cambio de su clave de usuario."
msgstr ""
"Een aanvraag is ingediend voor het wijzigen van uw gebruikers wachtwoord."
-#: ../../../../inc/Auth.class.php:199
+#: ../../../../inc/SP/Auth/AuthUtil.class.php:63
msgid "Para completar el proceso es necesario que acceda a la siguiente URL:"
msgstr "Om door te kunnen gaan, dient u naar de volgende URL te gaan:"
-#: ../../../../inc/Auth.class.php:203
+#: ../../../../inc/SP/Auth/AuthUtil.class.php:67
msgid "Si no ha solicitado esta acción, ignore este mensaje."
msgstr "Indien deze actie niet door u is aangevraagd, negeer dan dit bericht."
-#: ../../../../inc/Backup.class.php:167
-msgid "Esta operación sólo es posible en entornos Linux"
-msgstr "Deze actie wordt alleen ondersteund in Linux omgevingen"
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:112
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:422
+#: ../../../../inc/SP/Controller/ChecksController.class.php:92
+msgid "Los parámetros de LDAP no están configurados"
+msgstr "LDAP parameters niet opgegeven"
-#: ../../../../inc/Backup.class.php:169
-msgid "Error al realizar backup en modo compatibilidad"
-msgstr "Fout bij het backuppen in compatibiliteits mode"
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:126
+#: ../../../../inc/SP/Controller/ChecksController.class.php:107
+msgid "Conexión a LDAP correcta"
+msgstr "LDAP connectie gelukt"
-#: ../../../../inc/Backup.class.php:223
-#: ../../../../inc/XmlExport.class.php:467
-msgid "No es posible crear el directorio de backups"
-msgstr "Niet mogelijk om backup folders aan te maken"
-
-#: ../../../../inc/Backup.class.php:228
-#: ../../../../inc/XmlExport.class.php:472
-msgid "Compruebe los permisos del directorio de backups"
-msgstr "Check de permissies op de backup folder"
-
-#: ../../../../inc/Category.class.php:69
-#: ../../../../inc/Category.class.php:165
-msgid "Nombre de categoría duplicado"
-msgstr "Dubbele categorie naam"
-
-#: ../../../../inc/Category.class.php:78
-msgid "Error al crear la categoría"
-msgstr "Fout bij het creeeren van de categorie"
-
-#: ../../../../inc/Category.class.php:83
-#: ../../../../inc/Category.class.php:132
-#: ../../../../inc/Category.class.php:182
-#: ../../../../web/SearchC.class.php:303
-#: ../../../../inc/themes/classic/account.inc:42
-#: ../../../../inc/themes/classic/search.inc:83
-#: ../../../../inc/themes/material-blue/account.inc:51
-#: ../../../../inc/themes/material-blue/search.inc:85
-msgid "Categoría"
-msgstr "Categorie"
-
-#: ../../../../inc/Category.class.php:119
-msgid "Categoría en uso por:"
-msgstr "Categorie in gebruik door:"
-
-#: ../../../../inc/Category.class.php:129
-msgid "Error al eliminar la categoría"
-msgstr "Fout bij verwijderen categorie"
-
-#: ../../../../inc/Category.class.php:132
-#: ../../../../web/AccountsMgmtC.class.php:102
-msgid "Eliminar Categoría"
-msgstr "Verwijder Categorie"
-
-#: ../../../../inc/Category.class.php:179
-msgid "Error al actualizar la categoría"
-msgstr "Fout bij wijzigen categorie"
-
-#: ../../../../inc/Category.class.php:182
-msgid "Modificar Categoría"
-msgstr "Wijzig Categorie"
-
-#: ../../../../inc/Config.class.php:148
-msgid "No es posible escribir el archivo de configuración"
-msgstr "Niet mogelijk om in het configuratie bestand te schrijven"
-
-#: ../../../../inc/Config.class.php:148
-msgid "Compruebe los permisos del directorio \"config\""
-msgstr "Check a.u.b de \"config\" folder"
-
-#: ../../../../inc/ConfigDB.class.php:91
-#: ../../../../inc/ConfigDB.class.php:120
-msgid "Modificar configuración"
-msgstr "Bijwerken Configuratie"
-
-#: ../../../../inc/ConfigDB.class.php:121
-msgid "Parámetro"
-msgstr "Parameter"
-
-#: ../../../../inc/ConfigDB.class.php:122
-msgid "Valor"
-msgstr "Waarde"
-
-#: ../../../../inc/Controller.class.php:165
-msgid "Opción no disponible"
-msgstr "Optie niet beschikbaar"
-
-#: ../../../../inc/Controller.class.php:165
-#: ../../../../inc/Controller.class.php:166
-#: ../../../../inc/Controller.class.php:167
-#: ../../../../inc/Controller.class.php:168 ../../../../inc/Init.class.php:305
-msgid "Consulte con el administrador"
-msgstr "Neem contact op met de system administrator"
-
-#: ../../../../inc/Controller.class.php:167
-msgid "No tiene permisos para acceder a esta página"
-msgstr "U heeft geen toegang tot deze pagina"
-
-#: ../../../../inc/Controller.class.php:168
-msgid "No tiene permisos para realizar esta operación"
-msgstr "U heeft hiervoor geen toegang"
-
-#: ../../../../inc/Crypt.class.php:127 ../../../../inc/Email.class.php:148
-msgid "Aviso"
-msgstr "Waarschuwing"
-
-#: ../../../../inc/Crypt.class.php:127
-msgid ""
-"Se ha regenerado el HASH de clave maestra. No es necesaria ninguna acción."
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:127
+#: ../../../../inc/SP/Controller/ChecksController.class.php:108
+#: ../../../../inc/SP/Mgmt/Users/UserLdapSync.class.php:64
+#, php-format
+msgid "Objetos encontrados: %d"
msgstr ""
-"De hoofd wachtwoord hash is opnieuw gemaakt, er hoeft geen verdere actie "
-"ondernomen worden,"
-#: ../../../../inc/Crypt.class.php:191
-msgid "No se puede usar el módulo de encriptación"
-msgstr "De Crypto module kan niet geladen worden"
-
-#: ../../../../inc/Crypt.class.php:202
-msgid "Error al generar datos cifrados"
-msgstr "Fout bij het genereren van de versleutelde data"
-
-#: ../../../../inc/CryptPKI.class.php:46
-msgid "No es posible generar las claves RSA"
-msgstr "Niet mogelijk om de RSA sleutels te genereren"
-
-#: ../../../../inc/CryptPKI.class.php:112
-#: ../../../../inc/CryptPKI.class.php:143
-msgid "El archivo de clave no existe"
-msgstr "Het sleutel bestand bestaat niet"
-
-#: ../../../../inc/CsvImportBase.class.php:109
-#, php-format
-msgid "El número de campos es incorrecto (%d)"
-msgstr "Foutief aantal velden(%d)"
-
-#: ../../../../inc/CsvImportBase.class.php:110
-#, php-format
-msgid "Compruebe el formato del archivo CSV en línea %s"
-msgstr "Check a.u.b. het CSV bestand op regel %s"
-
-#: ../../../../inc/CsvImportBase.class.php:140
-#: ../../../../inc/CsvImportBase.class.php:145
-#: ../../../../inc/Import.class.php:118 ../../../../inc/Import.class.php:124
-#: ../../../../inc/Migrate.class.php:348
-#: ../../../../inc/XmlImport.class.php:62
-#: ../../../../inc/XmlImport.class.php:63
-#: ../../../../web/ConfigC.class.php:201
-msgid "Importar Cuentas"
-msgstr "Importeer Accounts"
-
-#: ../../../../inc/CsvImportBase.class.php:141
-msgid "Error importando cuenta"
-msgstr "Fout bij het importeren van het account"
-
-#: ../../../../inc/CsvImportBase.class.php:142
-#, php-format
-msgid "Error procesando línea %s"
-msgstr "Fout bij het verwerken op regel %s"
-
-#: ../../../../inc/CsvImportBase.class.php:145
-#, php-format
-msgid "Cuenta importada: %s"
-msgstr "Account %s geimporteerd"
-
-#: ../../../../inc/CustomFields.class.php:276
-#: ../../../../web/AccountsMgmtC.class.php:301
-#: ../../../../inc/themes/classic/profiles.inc:107
-#: ../../../../inc/themes/material-blue/profiles.inc:124
-msgid "Campos Personalizados"
-msgstr "Aangepaste velden"
-
-#: ../../../../inc/CustomFields.class.php:291
-msgid "Actualizando datos encriptados"
-msgstr "Bijwerken encrypted data"
-
-#: ../../../../inc/CustomFields.class.php:318
-msgid "Registros no actualizados"
-msgstr "Geen bijgewerkte velden"
-
-#: ../../../../inc/CustomFieldsBase.class.php:86
-msgid "Texto"
-msgstr "Tekst"
-
-#: ../../../../inc/CustomFieldsBase.class.php:88
-msgid "Fecha"
-msgstr "Datum"
-
-#: ../../../../inc/CustomFieldsBase.class.php:89
-msgid "Número"
-msgstr "Nummer"
-
-#: ../../../../inc/CustomFieldsBase.class.php:90
-#: ../../../../inc/themes/classic/passreset.inc:22
-#: ../../../../inc/themes/classic/users.inc:61
-#: ../../../../inc/themes/material-blue/users.inc:71
-msgid "Email"
-msgstr "Emailadres"
-
-#: ../../../../inc/CustomFieldsBase.class.php:91
-msgid "Teléfono"
-msgstr "Telefoon"
-
-#: ../../../../inc/CustomFieldsBase.class.php:92
-msgid "Link"
-msgstr "Link"
-
-#: ../../../../inc/CustomFieldsBase.class.php:93
-msgid "Color"
-msgstr "Kleur"
-
-#: ../../../../inc/CustomFieldsBase.class.php:107
-#: ../../../../inc/themes/classic/profiles.inc:98
-#: ../../../../inc/themes/material-blue/profiles.inc:114
-msgid "Categorías"
-msgstr "Categorieen"
-
-#: ../../../../inc/CustomFieldsBase.class.php:108
-#: ../../../../inc/themes/classic/profiles.inc:103
-#: ../../../../inc/themes/material-blue/profiles.inc:119
-msgid "Clientes"
-msgstr "Klanten"
-
-#: ../../../../inc/CustomFieldsBase.class.php:110
-#: ../../../../inc/themes/classic/account.inc:143
-#: ../../../../inc/themes/classic/profiles.inc:89
-#: ../../../../inc/themes/material-blue/account.inc:170
-#: ../../../../inc/themes/material-blue/profiles.inc:104
-msgid "Grupos"
-msgstr "Groepen"
-
-#: ../../../../inc/Customer.class.php:50 ../../../../inc/Customer.class.php:95
-msgid "Cliente duplicado"
-msgstr "Dubbele klant"
-
-#: ../../../../inc/Customer.class.php:60
-msgid "Error al crear el cliente"
-msgstr "Fout bij aanmaken klant"
-
-#: ../../../../inc/Customer.class.php:112
-msgid "Error al actualizar el cliente"
-msgstr "Fout bij bijwerken klant"
-
-#: ../../../../inc/Customer.class.php:115
-msgid "Actualizar Cliente"
-msgstr "Bijwerken Klant"
-
-#: ../../../../inc/Customer.class.php:150
-msgid "Cliente en uso por:"
-msgstr "Klant in gebruik door:"
-
-#: ../../../../inc/Customer.class.php:160
-msgid "Error al eliminar el cliente"
-msgstr "Fout bij verwijderen klant"
-
-#: ../../../../inc/Customer.class.php:163
-#: ../../../../web/AccountsMgmtC.class.php:160
-msgid "Eliminar Cliente"
-msgstr "Verwijder Klant"
-
-#: ../../../../inc/DBConnectionFactory.class.php:83
-#: ../../../../inc/DBConnectionFactory.class.php:85
-#: ../../../../inc/DBConnectionFactory.class.php:99
-#: ../../../../inc/Installer.class.php:230
-#: ../../../../inc/Migrate.class.php:114
-msgid "No es posible conectar con la BD"
-msgstr "Kan geen verbinding maken met de DB"
-
-#: ../../../../inc/DBConnectionFactory.class.php:83
-#: ../../../../inc/DBConnectionFactory.class.php:85
-#: ../../../../inc/Installer.class.php:231
-#: ../../../../inc/Migrate.class.php:115
-msgid "Compruebe los datos de conexión"
-msgstr "Check a.u.b de connetie parameters"
-
-#: ../../../../inc/Email.class.php:59 ../../../../inc/UserUtil.class.php:182
-msgid "N/D"
-msgstr "N/A"
-
-#: ../../../../inc/Email.class.php:60 ../../../../web/UsersMgmtC.class.php:393
-#: ../../../../inc/themes/classic/tokens.inc:20
-#: ../../../../inc/themes/material-blue/tokens.inc:20
-msgid "Acción"
-msgstr "Actie"
-
-#: ../../../../inc/Email.class.php:61
-msgid "Realizado por"
-msgstr "Uitgevoerd door"
-
-#: ../../../../inc/Email.class.php:77
-msgid "Enviar Email"
-msgstr "Verstuur Email"
-
-#: ../../../../inc/Email.class.php:81
-msgid "Correo enviado"
-msgstr "Email Verstuurd"
-
-#: ../../../../inc/Email.class.php:83
-msgid "Error al enviar correo"
-msgstr "Fout bij versturen email"
-
-#: ../../../../inc/Email.class.php:87
-msgid "Destinatario"
-msgstr "Ontvanger"
-
-#: ../../../../inc/Email.class.php:90
-msgid "CC"
-msgstr "CC"
-
-#: ../../../../inc/FileImport.class.php:105
-msgid "Archivo no subido correctamente"
-msgstr "Bestand succesvol geupload"
-
-#: ../../../../inc/FileImport.class.php:105
-msgid "Verifique los permisos del usuario del servidor web"
-msgstr "Controleer de gebruikers permissies van de web server"
-
-#: ../../../../inc/FileImport.class.php:116
-msgid "Compruebe la extensión del archivo"
-msgstr "Check a.u.b de bestandsextensie"
-
-#: ../../../../inc/FileImport.class.php:132
-msgid "Compruebe la configuración de PHP para subir archivos"
-msgstr "Check de PHP configuratie voor het uploaden van bestanden"
-
-#: ../../../../inc/FileImport.class.php:150
-#: ../../../../inc/FileImport.class.php:168
-msgid "Compruebe los permisos del directorio temporal"
-msgstr "Check de tijdelijke folder"
-
-#: ../../../../inc/Files.class.php:111
-#: ../../../../inc/themes/classic/files.inc:15
-#: ../../../../inc/themes/material-blue/files.inc:16
-msgid "Eliminar Archivo"
-msgstr "Verwijder Bestand"
-
-#: ../../../../inc/Groups.class.php:155
-msgid "Error al añadir los usuarios del grupo"
-msgstr "Niet mogelijk om gebruikers toe te voegen aan de groep"
-
-#: ../../../../inc/Groups.class.php:256
-msgid "Error al actualizar los usuarios del grupo"
-msgstr "Niet mogelijk om groep gebruikers bij te werken"
-
-#: ../../../../inc/Groups.class.php:369
-#: ../../../../web/UsersMgmtC.class.php:210
-msgid "Eliminar Grupo"
-msgstr "Verwijder Groep"
-
-#: ../../../../inc/Groups.class.php:372
-msgid "Error al eliminar los usuarios del grupo"
-msgstr "Fout bij verwijderen groep gebruikers"
-
-#: ../../../../inc/Import.class.php:109
-msgid "Tipo mime no soportado"
-msgstr "Mime type wordt niet ondersteund"
-
-#: ../../../../inc/Import.class.php:110
-msgid "Compruebe el formato del archivo"
-msgstr "Check a.u.b de "
-
-#: ../../../../inc/Import.class.php:124 ../../../../inc/Import.class.php:127
-#: ../../../../inc/Migrate.class.php:91
-msgid "Importación finalizada"
-msgstr "Import succesvol"
-
-#: ../../../../inc/Init.class.php:143
-msgid "Error en la verificación de la base de datos"
-msgstr "Fout bij het checken van de database"
-
-#: ../../../../inc/Init.class.php:301
-msgid "Sesion"
-msgstr "Sessie"
-
-#: ../../../../inc/Init.class.php:301 ../../../../inc/Init.class.php:305
-msgid "La sesión no puede ser inicializada"
-msgstr "Sessie kan niet worden geinitaliseerd"
-
-#: ../../../../inc/Init.class.php:400
-msgid "El directorio \"/config\" no existe"
-msgstr "De \"/config\" folder bestaat niet"
-
-#: ../../../../inc/Init.class.php:405
-msgid "No es posible escribir en el directorio \"config\""
-msgstr "Niet mogelijk om naar de \"/config\" te schrijven"
-
-#: ../../../../inc/Init.class.php:413
-msgid "Los permisos del directorio \"/config\" son incorrectos"
-msgstr "De \"/config\" folder permissies zijn incorrect"
-
-#: ../../../../inc/Init.class.php:413
-msgid "Actual:"
-msgstr "Huidig:"
-
-#: ../../../../inc/Init.class.php:413
-msgid "Necesario: 750"
-msgstr "Nodig: 750"
-
-#: ../../../../inc/Init.class.php:462
-msgid "Aplicación en mantenimiento"
-msgstr "Applicatie in onderhoud"
-
-#: ../../../../inc/Init.class.php:462
-msgid "En breve estará operativa"
-msgstr "Een moment geduld"
-
-#: ../../../../inc/Init.class.php:498
-msgid "Finalizar sesión"
-msgstr "Uitloggen sessie"
-
-#: ../../../../inc/Init.class.php:500
-msgid "Tiempo inactivo"
-msgstr "Inactieve tijd"
-
-#: ../../../../inc/Init.class.php:501
-msgid "Tiempo total"
-msgstr "Totale tijd"
-
-#: ../../../../inc/Init.class.php:540
-msgid "La aplicación necesita actualizarse"
-msgstr "De applicatie dient bijgewerkt te worden"
-
-#: ../../../../inc/Init.class.php:540
-#, php-format
-msgid "Si es un administrador pulse en el enlace: %s"
-msgstr "Indien u een administrator bent klik dan op de link: %s"
-
-#: ../../../../inc/Init.class.php:540
-#: ../../../../inc/themes/classic/upgrade.inc:20
-#: ../../../../inc/themes/material-blue/upgrade.inc:22
-msgid "Actualizar"
-msgstr "Update"
-
-#: ../../../../inc/Init.class.php:570
-msgid "Actualización"
-msgstr "Update"
-
-#: ../../../../inc/Init.class.php:571
-msgid "Actualización de versión realizada."
-msgstr "Versie update bijgewerkt"
-
-#: ../../../../inc/Init.class.php:572
-#: ../../../../inc/themes/classic/info.inc:33
-#: ../../../../inc/themes/material-blue/info.inc:33
-msgid "Versión"
-msgstr "Versie"
-
-#: ../../../../inc/Installer.class.php:127
-msgid "Indicar nombre de usuario admin"
-msgstr "Vul de admin gebruikersnaam in"
-
-#: ../../../../inc/Installer.class.php:128
-msgid "Usuario admin para acceso a la aplicación"
-msgstr "Administratie gebuiker om in te loggen in de applicatie"
-
-#: ../../../../inc/Installer.class.php:132
-msgid "Indicar la clave de admin"
-msgstr "Geef het admin wachtwoord op"
-
-#: ../../../../inc/Installer.class.php:133
-msgid "Clave del usuario admin de la aplicación"
-msgstr "Administratie gebruikers wachtwoord"
-
-#: ../../../../inc/Installer.class.php:137
-msgid "Indicar la clave maestra"
-msgstr "geef het hoofd wachtwoord op"
-
-#: ../../../../inc/Installer.class.php:138
-msgid "Clave maestra para encriptar las claves"
-msgstr "Hoofd wachtwoord om de wachtwoorden te versleutelen"
-
-#: ../../../../inc/Installer.class.php:142
-msgid "Clave maestra muy corta"
-msgstr "Hoofd wachtwoor is te kort"
-
-#: ../../../../inc/Installer.class.php:143
-msgid "La longitud de la clave maestra ha de ser mayor de 11 caracteres"
-msgstr "Het hoofd wachtwoord dient uit minimaal 11 karakters te bestaan"
-
-#: ../../../../inc/Installer.class.php:147
-msgid "Indicar el usuario de la BBDD"
-msgstr "Geef de database gebruiker op"
-
-#: ../../../../inc/Installer.class.php:148
-msgid "Usuario con permisos de administrador de la Base de Datos"
-msgstr "Een gebruiker met database administrator rechten"
-
-#: ../../../../inc/Installer.class.php:152
-msgid "Indicar el nombre de la BBDD"
-msgstr "Geef de database naam op"
-
-#: ../../../../inc/Installer.class.php:153
-msgid "Nombre para la BBDD de la aplicación pej. syspass"
-msgstr "Applicatie database naam vb. syspass"
-
-#: ../../../../inc/Installer.class.php:157
-msgid "El nombre de la BBDD no puede contener \".\""
-msgstr "Database naam mag geen \".\" bevatten"
-
-#: ../../../../inc/Installer.class.php:158
-msgid "Elimine los puntos del nombre de la Base de Datos"
-msgstr "Verwijder a.u.b punten in de database naam"
-
-#: ../../../../inc/Installer.class.php:162
-msgid "Indicar el servidor de la BBDD"
-msgstr "Geef de database server op"
-
-#: ../../../../inc/Installer.class.php:163
-msgid "Servidor donde se instalará la Base de Datos"
-msgstr "Server waar de database geinstalleerd wordt"
-
-#: ../../../../inc/Installer.class.php:261
-msgid "No es posible comprobar el usuario de sysPass"
-msgstr "Niet mogelijk om de syspass gebruiker te controleren"
-
-#: ../../../../inc/Installer.class.php:262
-msgid "Compruebe los permisos del usuario de conexión a la BD"
-msgstr "Check a.u.b de DB connectie gebruikers rechten"
-
-#: ../../../../inc/Installer.class.php:327
-msgid "El usuario de MySQL ya existe"
-msgstr "De MySQL gebruiker bestaat al"
-
-#: ../../../../inc/Installer.class.php:328
-msgid "Indique un nuevo usuario o elimine el existente"
-msgstr "Geef een nieuwe gebruikersnaam of verwijder de huidige"
-
-#: ../../../../inc/Installer.class.php:341
-msgid "La BBDD ya existe"
-msgstr "De database bestaat al"
-
-#: ../../../../inc/Installer.class.php:342
-msgid "Indique una nueva Base de Datos o elimine la existente"
-msgstr "Geef een nieuwe database of verwijder de huidige"
-
-#: ../../../../inc/Installer.class.php:351
-#: ../../../../inc/Installer.class.php:422
-msgid "Error al crear la BBDD"
-msgstr "Fout bij het creeeren van de DB"
-
-#: ../../../../inc/Installer.class.php:352
-#: ../../../../inc/Installer.class.php:363
-msgid "Verifique los permisos del usuario de la Base de Datos"
-msgstr "Controleer database gebruiker rechten aub."
-
-#: ../../../../inc/Installer.class.php:362
-msgid "Error al establecer permisos de la BBDD"
-msgstr "Fout tijdens het zetten van database rechten"
-
-#: ../../../../inc/Installer.class.php:395
-msgid "El archivo de estructura de la BBDD no existe"
-msgstr "Het database structuurbestand bestaat niet"
-
-#: ../../../../inc/Installer.class.php:396
-msgid "No es posible crear la BBDD de la aplicación. Descárguela de nuevo."
-msgstr ""
-"Niet mogelijk om de applicatie database aan te maken. Download hem opnieuw "
-"aub."
-
-#: ../../../../inc/Installer.class.php:404
-msgid "Error al seleccionar la BBDD"
-msgstr "Fout tijdens het selecteren database"
-
-#: ../../../../inc/Installer.class.php:405
-msgid ""
-"No es posible usar la Base de Datos para crear la estructura. Compruebe los "
-"permisos y que no exista."
-msgstr ""
-"Kan de database niet gebruiken, controleer de login gegevens en de rechten."
-
-#: ../../../../inc/Installer.class.php:423
-msgid "Error al crear la estructura de la Base de Datos."
-msgstr "Fout tijdens het maken van de database structuur"
-
-#: ../../../../inc/Installer.class.php:446
-msgid "Error al crear el grupo \"admin\""
-msgstr "Fout tijdens het maken van de \"admin\" groep"
-
-#: ../../../../inc/Installer.class.php:447
-#: ../../../../inc/Installer.class.php:480
-#: ../../../../inc/Installer.class.php:497
-#: ../../../../inc/Installer.class.php:510
-msgid "Informe al desarrollador"
-msgstr "Waarschuw de ontwikkelaar"
-
-#: ../../../../inc/Installer.class.php:479
-msgid "Error al crear el perfil \"admin\""
-msgstr "Fout tijdens het maken van het \"admin\" profiel"
-
-#: ../../../../inc/Installer.class.php:496
-msgid "Error al crear el usuario \"admin\""
-msgstr "Fout tijdens het maken van de \"admin\" gebruiker"
-
-#: ../../../../inc/Installer.class.php:509
-msgid "Error al actualizar la clave maestra del usuario \"admin\""
-msgstr ""
-"Fout tijdens het veranderen van het Hoofd wachtoord voor de \"admin\" "
-"gebruiker"
-
-#: ../../../../inc/Ldap.class.php:134 ../../../../inc/Ldap.class.php:138
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:153
msgid "No es posible conectar con el servidor de LDAP"
msgstr "Niet mogelijk om te verbinden met de LDAP server"
-#: ../../../../inc/Ldap.class.php:167 ../../../../inc/Ldap.class.php:172
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:199
msgid "Error al conectar (BIND)"
msgstr "Connectie probleem (BIND)"
-#: ../../../../inc/Ldap.class.php:195 ../../../../inc/Ldap.class.php:200
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:236
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:249
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:260
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:670
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:683
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:694
msgid "Error al buscar objetos en DN base"
msgstr "Fout bij zoeken naar objecten in de base DN"
-#: ../../../../inc/Ldap.class.php:223 ../../../../inc/Ldap.class.php:229
-#: ../../../../inc/Ldap.class.php:236 ../../../../inc/Ldap.class.php:241
-#: ../../../../inc/Ldap.class.php:246 ../../../../inc/Ldap.class.php:251
-msgid "Error al buscar RDN de grupo"
-msgstr "Fout bij zoeken in groep RDN"
-
-#: ../../../../inc/Ldap.class.php:300 ../../../../inc/Ldap.class.php:306
-#: ../../../../inc/Ldap.class.php:321 ../../../../inc/Ldap.class.php:326
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:518
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:524
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:543
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:548
msgid "Error al buscar el DN del usuario"
msgstr "Fout bij het zoeken gebruiker DN"
-#: ../../../../inc/Ldap.class.php:313 ../../../../inc/Ldap.class.php:318
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:532
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:537
msgid "Error al localizar el usuario en LDAP"
msgstr "Fout bij het zoeken gebruiker in DLS"
-#: ../../../../inc/Ldap.class.php:395 ../../../../inc/Ldap.class.php:401
-#: ../../../../inc/LdapADS.class.php:105 ../../../../inc/LdapADS.class.php:110
-msgid "Error al buscar el grupo de usuarios"
-msgstr "Fout bij het zoeken gebruikers groep"
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:575
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:581
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:589
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:595
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:601
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:606
+msgid "Error al buscar RDN de grupo"
+msgstr "Fout bij zoeken in groep RDN"
-#: ../../../../inc/Ldap.class.php:408
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:576
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:590
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:602
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:135
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:146
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:160
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:170
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:108
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:120
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:404
+#: ../../../../inc/SP/Controller/LoginController.class.php:243
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:85
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:147
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:155
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:182
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:63
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:46
+msgid "Grupo"
+msgstr "Groep"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:121
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:159
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:92
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:125
msgid "Usuario verificado en grupo"
msgstr "Gebruiker in groep geverifieerd"
-#: ../../../../inc/LdapADS.class.php:114 ../../../../inc/LdapADS.class.php:119
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:134
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:107
+msgid "Error al buscar el grupo de usuarios"
+msgstr "Fout bij het zoeken gebruikers groep"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:145
msgid "No se encontró el grupo con ese nombre"
msgstr "Geen groep met die naam gevonden"
-#: ../../../../inc/Log.class.php:88
-msgid "Vaciar Eventos"
-msgstr "Schoon events op"
-
-#: ../../../../inc/Log.class.php:88
-#: ../../../../inc/themes/classic/eventlog.inc:98
-#: ../../../../inc/themes/material-blue/eventlog.inc:99
-msgid "Vaciar registro de eventos"
-msgstr "Event log opschonen"
-
-#: ../../../../inc/Migrate.class.php:51
-msgid "Faltan parámetros"
-msgstr "Missende parameters"
-
-#: ../../../../inc/Migrate.class.php:148
-msgid "La versión no es compatible"
-msgstr "Compatible versie"
-
-#: ../../../../inc/Migrate.class.php:149
-msgid "Actualice a la última versión de phpPMS"
-msgstr "Update a.u.b naar de laatste versie van phpPMS"
-
-#: ../../../../inc/Migrate.class.php:167
-msgid "Error al obtener la configuración"
-msgstr "Fout bij het verkrijgen van de configuratie"
-
-#: ../../../../inc/Migrate.class.php:210 ../../../../inc/Migrate.class.php:223
-msgid "Error al vaciar tabla"
-msgstr "Fout bij het opschonen van de tabel"
-
-#: ../../../../inc/Migrate.class.php:228
-msgid "Usuario actual no es administrador de la aplicación"
-msgstr "Huidige gebruiker is geen applicatie admin"
-
-#: ../../../../inc/Migrate.class.php:273
-msgid "No es posible crear el cliente"
-msgstr "Niet mogelijk om klant aan te maken"
-
-#: ../../../../inc/Migrate.class.php:274
-msgid "Contacte con el desarrollador"
-msgstr "Neem contact op met de developer"
-
-#: ../../../../inc/Migrate.class.php:278
-msgid "Importar Clientes"
-msgstr "Importeer Klanten"
-
-#: ../../../../inc/Migrate.class.php:280 ../../../../inc/Migrate.class.php:350
-#: ../../../../inc/Migrate.class.php:451 ../../../../inc/Migrate.class.php:524
-#: ../../../../inc/Migrate.class.php:632 ../../../../inc/Migrate.class.php:697
-#: ../../../../inc/Migrate.class.php:771 ../../../../inc/Migrate.class.php:861
-#: ../../../../inc/Migrate.class.php:932
-msgid "Registros"
-msgstr "Velden"
-
-#: ../../../../inc/Migrate.class.php:302
-msgid "Error al obtener los clientes"
-msgstr "Fout bij het ophalen van de klant"
-
-#: ../../../../inc/Migrate.class.php:344
-msgid "Error al obtener cuentas"
-msgstr "Fout bij het ophalen van accounts"
-
-#: ../../../../inc/Migrate.class.php:373
-msgid "Cliente no encontrado"
-msgstr "Klant niet gevonden"
-
-#: ../../../../inc/Migrate.class.php:416
-msgid "Error al migrar cuenta"
-msgstr "Fout bij het importeren van het account"
-
-#: ../../../../inc/Migrate.class.php:445
-msgid "Error al obtener los grupos de cuentas"
-msgstr "Fout bij het ophalen van account groepen"
-
-#: ../../../../inc/Migrate.class.php:449
-msgid "Importar Grupos de Cuentas"
-msgstr "Importeer account groepen"
-
-#: ../../../../inc/Migrate.class.php:471
-msgid "Error al crear grupos de cuentas"
-msgstr "Fout bij het creeeren van account groepen"
-
-#: ../../../../inc/Migrate.class.php:518
-msgid "Error al obtener el historico de cuentas"
-msgstr "Fout bij het ophalen van account geschiedenis"
-
-#: ../../../../inc/Migrate.class.php:522
-msgid "Importar Histórico de Cuentas"
-msgstr "Importeer Account geschiedenis"
-
-#: ../../../../inc/Migrate.class.php:591
-msgid "Error al crear historico de cuentas"
-msgstr "Fout bij het creeeren van account geschiedenis"
-
-#: ../../../../inc/Migrate.class.php:626
-msgid "Error al obtener los archivos de cuentas"
-msgstr "Fout bij het creeeren van account bestanden"
-
-#: ../../../../inc/Migrate.class.php:630
-msgid "Importar Archivos de Cuentas"
-msgstr "Importeer Account bestanden"
-
-#: ../../../../inc/Migrate.class.php:662
-msgid "Error al crear archivos de cuentas"
-msgstr "Fout bij het creeeren van account bestanden"
-
-#: ../../../../inc/Migrate.class.php:691
-msgid "Error al obtener las categorías de cuentas"
-msgstr "Fout bij het ophalen van account categorien"
-
-#: ../../../../inc/Migrate.class.php:695
-msgid "Importar Categorías de Cuentas"
-msgstr "Importeer Account Categorien"
-
-#: ../../../../inc/Migrate.class.php:717
-msgid "Error al crear categorías de cuentas"
-msgstr "Fout bij het ophalen van account categorien"
-
-#: ../../../../inc/Migrate.class.php:765
-msgid "Error al obtener los usuarios"
-msgstr "Fout bij het ophalen van gebruikers"
-
-#: ../../../../inc/Migrate.class.php:769
-msgid "Importar Usuarios"
-msgstr "Importeer Gebruikers"
-
-#: ../../../../inc/Migrate.class.php:826
-msgid "Error al crear usuarios"
-msgstr "Fout bij het creeeren van gebruikers"
-
-#: ../../../../inc/Migrate.class.php:855
-msgid "Error al obtener los grupos de usuarios"
-msgstr "Fout bij het ophalen van gebruiker groepen"
-
-#: ../../../../inc/Migrate.class.php:859
-msgid "Importar Grupos de Usuarios"
-msgstr "Importeer Gebruikers Groepen"
-
-#: ../../../../inc/Migrate.class.php:885
-msgid "Error al crear los grupos de usuarios"
-msgstr "Fout bij het toevoegen van gebruikers groepen"
-
-#: ../../../../inc/Migrate.class.php:930
-msgid "Importar Configuración"
-msgstr "Importeer Configuratie"
-
-#: ../../../../inc/Profile.class.php:69 ../../../../inc/Profile.class.php:123
-#: ../../../../inc/Profile.class.php:128
-msgid "Migrar Perfiles"
-msgstr "Migreer profielen"
-
-#: ../../../../inc/Profile.class.php:69
-msgid "Error al obtener perfiles"
-msgstr "Fout bij het ophalen van profielen"
-
-#: ../../../../inc/Profile.class.php:126
-msgid "Operación realizada correctamente"
-msgstr "Operatie succesvol"
-
-#: ../../../../inc/Profile.class.php:128
-msgid "Fallo al realizar la operación"
-msgstr "Fout bij het uitvoeren van het process"
-
-#: ../../../../inc/ProfileBase.class.php:164
-msgid "Datos de perfil incorrectos"
-msgstr "Foutieve profiel data"
-
-#: ../../../../inc/ProfileBase.class.php:550
-#: ../../../../web/UsersMgmtC.class.php:275
-msgid "Eliminar Perfil"
-msgstr "Verwijder Profiel"
-
-#: ../../../../inc/ProfileBase.class.php:593
-msgid "Modificar Perfil"
-msgstr "Bewerk Profiel"
-
-#: ../../../../inc/SyspassImport.class.php:111
-#: ../../../../inc/SyspassImport.class.php:136
-#: ../../../../inc/SyspassImport.class.php:161
-msgid "Formato de XML inválido"
-msgstr "Ongeldig XML formaat"
-
-#: ../../../../inc/SyspassImport.class.php:111
-msgid "No hay categorías para importar"
-msgstr "Er zijn geen categorien om te importeren"
-
-#: ../../../../inc/SyspassImport.class.php:136
-msgid "No hay clientes para importar"
-msgstr "Er zijn geen klanten om te importeren"
-
-#: ../../../../inc/SyspassImport.class.php:161
-msgid "No hay cuentas para importar"
-msgstr "Er zijn geen accounts om te importeren"
-
-#: ../../../../inc/Template.class.php:91
-#, php-format
-msgid "No es posible obtener la plantilla \"%s\" : %s"
-msgstr "Niet mogelijk om \"%s\" template: %s op te halen"
-
-#: ../../../../inc/Template.class.php:130
-#, php-format
-msgid "No es posible obtener la variable \"%s\""
-msgstr "Niet mogelijk om \"%s\" variable op te halen"
-
-#: ../../../../inc/Template.class.php:173
-#, php-format
-msgid "No es posible destruir la variable \"%s\""
-msgstr "Niet mogelijk om de \"%s\" variabele terug te zetten"
-
-#: ../../../../inc/Upgrade.class.php:51
-msgid "Error al aplicar la actualización de la Base de Datos"
-msgstr "Fout bij het updaten van de database"
-
-#: ../../../../inc/Upgrade.class.php:52 ../../../../inc/Upgrade.class.php:58
-msgid "Compruebe el registro de eventos para más detalles"
-msgstr "Check a.u.b de event log voor meer details"
-
-#: ../../../../inc/Upgrade.class.php:52 ../../../../inc/Upgrade.class.php:58
-#: ../../../../inc/themes/classic/login.inc:32
-#: ../../../../inc/themes/material-blue/2fa.inc:24
-#: ../../../../inc/themes/material-blue/2fa.inc:25
-#: ../../../../inc/themes/material-blue/login.inc:65
-msgid "Acceder"
-msgstr "Aanmelden"
-
-#: ../../../../inc/Upgrade.class.php:57
-msgid "Error al aplicar la actualización auxiliar"
-msgstr "Fout tijdens het uitvoeren van de extra update"
-
-#: ../../../../inc/Upgrade.class.php:74
-msgid "Actualizar BBDD"
-msgstr "Bijwerken DB"
-
-#: ../../../../inc/Upgrade.class.php:127
-msgid "No es necesario actualizar la Base de Datos."
-msgstr "Database update niet nodig"
-
-#: ../../../../inc/Upgrade.class.php:135
-msgid "Error al aplicar la actualización de la Base de Datos."
-msgstr "Fout bij het bijwerken van de database"
-
-#: ../../../../inc/Upgrade.class.php:144
-msgid "Actualización de la Base de Datos realizada correctamente."
-msgstr "Database update succesvol"
-
-#: ../../../../inc/Upgrade.class.php:221
-msgid "Actualizar Configuración"
-msgstr "Bijwerken configuratie"
-
-#: ../../../../inc/Upgrade.class.php:221
-msgid "Actualización de la Configuración realizada correctamente."
-msgstr "Configuratie is succesvol bijgewerkt"
-
-#: ../../../../inc/UserBase.class.php:388
-#: ../../../../inc/UserBase.class.php:532
-msgid "No se pudo realizar la petición de cambio de clave."
-msgstr "Kon de aanvraag voor het veranderen van het wachtwoord niet uitvoeren."
-
-#: ../../../../inc/UserBase.class.php:527
-msgid "Modificar Usuario"
-msgstr "Bewerk Gebruiker"
-
-#: ../../../../inc/UserBase.class.php:594
-#: ../../../../web/UsersMgmtC.class.php:151
-msgid "Eliminar Usuario"
-msgstr "Verwijder Gebruiker"
-
-#: ../../../../inc/UserLdap.class.php:68
-#: ../../../../web/UsersMgmtC.class.php:109
-#: ../../../../inc/themes/classic/users.inc:28
-#: ../../../../inc/themes/material-blue/users.inc:34
-msgid "Usuario de LDAP"
-msgstr "LDAP Gebruiker"
-
-#: ../../../../inc/UserLdap.class.php:78
-msgid "Activación Cuenta"
-msgstr "Account Activatie"
-
-#: ../../../../inc/UserLdap.class.php:79
-msgid "Su cuenta está pendiente de activación."
-msgstr "Uw account is in behandeling"
-
-#: ../../../../inc/UserLdap.class.php:80
-msgid "En breve recibirá un email de confirmación."
-msgstr "Uw krijgt binnenkort een bevestigings email"
-
-#: ../../../../inc/UserLdap.class.php:86
-msgid "Nuevo usuario de LDAP"
-msgstr "Nieuwe LDAP Gebruiker"
-
-#: ../../../../inc/UserMigrate.class.php:113
-msgid "Migrar Grupos"
-msgstr "Migreer Groepen"
-
-#: ../../../../inc/UserMigrate.class.php:113
-msgid "Error al migrar grupo del usuario"
-msgstr "Fout bij het migreren van de Gebruikers Groep"
-
-#: ../../../../inc/Util.class.php:119
-msgid "Versión de PHP requerida >= "
-msgstr "Vereiste PHP versie >="
-
-#: ../../../../inc/Util.class.php:120
-msgid ""
-"Actualice la versión de PHP para que la aplicación funcione correctamente"
-msgstr "Update a.u.b de PHP versie om gebruik te kunnen maken van SysPass"
-
-#: ../../../../inc/Util.class.php:156
-#: ../../../../inc/themes/classic/ldap.inc:212
-#: ../../../../inc/themes/material-blue/ldap.inc:238
-msgid "Módulo no disponible"
-msgstr "Module niet beschikbaar"
-
-#: ../../../../inc/Util.class.php:157
-msgid "Sin este módulo la aplicación puede no funcionar correctamente."
-msgstr "Zonder deze module kan de applicatie niet goed werken"
-
-#: ../../../../inc/XmlExport.class.php:127
-msgid "Exportar XML"
-msgstr "XML Export"
-
-#: ../../../../inc/XmlExport.class.php:412
-msgid "Error al crear el archivo XML"
-msgstr "Fout bij het creeeren van het XML bestand"
-
-#: ../../../../inc/XmlImport.class.php:63
-msgid "Formato detectado"
-msgstr "Gedetecteerd formaat"
-
-#: ../../../../inc/XmlImportBase.class.php:80
-msgid "No es posible procesar el archivo XML"
-msgstr "XML bestand kan niet verwerkt worden"
-
-#: ../../../../inc/XmlImportBase.class.php:108
-msgid "Archivo XML no soportado"
-msgstr "XML bestand wordt niet ondersteund"
-
-#: ../../../../inc/XmlImportBase.class.php:109
-msgid "No es posible detectar la aplicación que exportó los datos"
-msgstr "Kon de applicatie waar de data van geexporteerd was niet vinden"
-
-#: ../../../../js/strings.js.php:27
-msgid "Error en la consulta"
-msgstr "Fout gedurende de query"
-
-#: ../../../../js/strings.js.php:28
-msgid "Ha ocurrido un error"
-msgstr "Er is een fout opgetreden"
-
-#: ../../../../js/strings.js.php:29
-#: ../../../../inc/themes/classic/login.inc:52
-#: ../../../../inc/themes/material-blue/login.inc:78
-msgid "Sesión finalizada"
-msgstr "Sessie afgerond"
-
-#: ../../../../js/strings.js.php:30
-msgid "Borrar la cuenta?"
-msgstr "Verwijder account?"
-
-#: ../../../../js/strings.js.php:31
-msgid "Borrar el usuario?"
-msgstr "Verwijder Gebruiker"
-
-#: ../../../../js/strings.js.php:32
-msgid "Guarde la configuración para que sea efectiva"
-msgstr "Je moet de configuratie opslaan voordat de wijzigingen gebruikt worden"
-
-#: ../../../../js/strings.js.php:33
-msgid "Clave Generada"
-msgstr "Genereer Wachtwoord"
-
-#: ../../../../js/strings.js.php:34
-msgid "Nivel alto"
-msgstr "Hoger niveau"
-
-#: ../../../../js/strings.js.php:35
-msgid "Nivel medio"
-msgstr "Gemiddeld niveau"
-
-#: ../../../../js/strings.js.php:36
-msgid "Nivel bajo"
-msgstr "Laag niveau"
-
-#: ../../../../js/strings.js.php:37
-msgid "Nivel muy alto"
-msgstr "Erg hoog niveau"
-
-#: ../../../../js/strings.js.php:38
-msgid "Utilizar al menos 8 caracteres"
-msgstr "U dient minimaal 8 karakters op te geven"
-
-#: ../../../../js/strings.js.php:39
-msgid "Borrar elemento?"
-msgstr "Verwijder item"
-
-#: ../../../../js/strings.js.php:40
-msgid "Página no encontrada"
-msgstr "Pagina niet gevonden"
-
-#: ../../../../js/strings.js.php:41
-msgid "Archivo no soportado para visualizar"
-msgstr "Bestand niet geschikt voor voorbeeld weergave"
-
-#: ../../../../js/strings.js.php:42
-msgid "Eliminar archivo?"
-msgstr "Verwijder Bestand?"
-
-#: ../../../../js/strings.js.php:43
-msgid "Su navegador no soporta subir archivos con HTML5"
-msgstr "Uw browser heeft geen ondersteuning voor HTML5 uploads"
-
-#: ../../../../js/strings.js.php:44
-msgid "Demasiados archivos"
-msgstr "Teveel bestanden"
-
-#: ../../../../js/strings.js.php:45
-msgid "Tamaño de archivo no permitido"
-msgstr "Bestandsgrootte niet toegestaan"
-
-#: ../../../../js/strings.js.php:47
-msgid "Vaciar el registro de eventos?"
-msgstr "Opschonen van event log?"
-
-#: ../../../../js/strings.js.php:48
-msgid "Seleccionar Grupo"
-msgstr "Selecteer Groep"
-
-#: ../../../../js/strings.js.php:49
-msgid "Seleccionar Usuario"
-msgstr "Selecteer Gebruiker"
-
-#: ../../../../js/strings.js.php:50
-msgid "Seleccionar Perfil"
-msgstr "Selecteer Profiel"
-
-#: ../../../../js/strings.js.php:51
-msgid "Seleccionar Cliente"
-msgstr "Selecteer Klant"
-
-#: ../../../../js/strings.js.php:52
-msgid "Seleccionar Categoría"
-msgstr "Selecteer Categorie"
-
-#: ../../../../js/strings.js.php:53
-msgid "Sin resultados"
-msgstr "Geen resultaten"
-
-#: ../../../../js/strings.js.php:54
-msgid "Opciones de clave"
-msgstr "Wachtwoord opties"
-
-#: ../../../../js/strings.js.php:55
-msgid "Generar clave aleatoria"
-msgstr "Genereer willekeurig wachtwoord"
-
-#: ../../../../js/strings.js.php:56
-msgid "Complejidad"
-msgstr "Complexiteit"
-
-#: ../../../../js/strings.js.php:57
-msgid "Restablecer"
-msgstr "Reset"
-
-#: ../../../../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 "Toon Wachtwoord"
-
-#: ../../../../js/strings.js.php:60
-msgid "Copiar Usuario"
-msgstr "Kopieer Gebruikersnaam"
-
-#: ../../../../js/strings.js.php:61
-msgid "Copiar Clave"
-msgstr "Kopieer Wachtwoord"
-
-#: ../../../../js/strings.js.php:62
-msgid "Incluir Números"
-msgstr "Inclusief Nummers"
-
-#: ../../../../js/strings.js.php:63
-msgid "Incluir Mayúsculas"
-msgstr "Inclusief Hoofdletters"
-
-#: ../../../../js/strings.js.php:64
-msgid "Incluir Símbolos"
-msgstr "Inclusief Symbolen"
-
-#: ../../../../js/strings.js.php:65
-msgid "Longitud"
-msgstr "Lengte"
-
-#: ../../../../js/strings.js.php:66
-msgid "Seleccionar Acción"
-msgstr "Selecteer Actie"
-
-#: ../../../../js/strings.js.php:67
-#: ../../../../inc/themes/classic/account.inc:136
-#: ../../../../inc/themes/classic/account.inc:167
-#: ../../../../inc/themes/classic/account.inc:474
-#: ../../../../inc/themes/classic/config.inc:70
-#: ../../../../inc/themes/classic/config.inc:86
-#: ../../../../inc/themes/classic/config.inc:102
-#: ../../../../inc/themes/classic/config.inc:118
-#: ../../../../inc/themes/classic/config.inc:134
-#: ../../../../inc/themes/classic/config.inc:150
-#: ../../../../inc/themes/classic/config.inc:166
-#: ../../../../inc/themes/classic/config.inc:182
-#: ../../../../inc/themes/classic/config.inc:255
-#: ../../../../inc/themes/classic/config.inc:274
-#: ../../../../inc/themes/classic/customfields.inc:46
-#: ../../../../inc/themes/classic/install.inc:99
-#: ../../../../inc/themes/classic/ldap.inc:25
-#: ../../../../inc/themes/classic/ldap.inc:195
-#: ../../../../inc/themes/classic/mail.inc:14
-#: ../../../../inc/themes/classic/mail.inc:40
-#: ../../../../inc/themes/classic/mail.inc:88
-#: ../../../../inc/themes/classic/preferences.inc:48
-#: ../../../../inc/themes/classic/preferences.inc:82
-#: ../../../../inc/themes/classic/preferences.inc:99
-#: ../../../../inc/themes/classic/preferences.inc:116
-#: ../../../../inc/themes/classic/security.inc:26
-#: ../../../../inc/themes/classic/wiki.inc:20
-msgid "SI"
-msgstr "JA"
-
-#: ../../../../js/strings.js.php:68
-#: ../../../../inc/themes/classic/account.inc:136
-#: ../../../../inc/themes/classic/account.inc:167
-#: ../../../../inc/themes/classic/account.inc:472
-#: ../../../../inc/themes/classic/config.inc:70
-#: ../../../../inc/themes/classic/config.inc:86
-#: ../../../../inc/themes/classic/config.inc:102
-#: ../../../../inc/themes/classic/config.inc:118
-#: ../../../../inc/themes/classic/config.inc:134
-#: ../../../../inc/themes/classic/config.inc:150
-#: ../../../../inc/themes/classic/config.inc:166
-#: ../../../../inc/themes/classic/config.inc:182
-#: ../../../../inc/themes/classic/config.inc:255
-#: ../../../../inc/themes/classic/config.inc:274
-#: ../../../../inc/themes/classic/customfields.inc:46
-#: ../../../../inc/themes/classic/encryption.inc:58
-#: ../../../../inc/themes/classic/encryption.inc:77
-#: ../../../../inc/themes/classic/import.inc:171
-#: ../../../../inc/themes/classic/install.inc:99
-#: ../../../../inc/themes/classic/ldap.inc:25
-#: ../../../../inc/themes/classic/ldap.inc:195
-#: ../../../../inc/themes/classic/mail.inc:14
-#: ../../../../inc/themes/classic/mail.inc:40
-#: ../../../../inc/themes/classic/mail.inc:88
-#: ../../../../inc/themes/classic/preferences.inc:48
-#: ../../../../inc/themes/classic/preferences.inc:82
-#: ../../../../inc/themes/classic/preferences.inc:99
-#: ../../../../inc/themes/classic/preferences.inc:116
-#: ../../../../inc/themes/classic/security.inc:26
-#: ../../../../inc/themes/classic/tokens.inc:36
-#: ../../../../inc/themes/classic/wiki.inc:20
-msgid "NO"
-msgstr "NEE"
-
-#: ../../../../js/strings.js.php:69
-msgid "Aceptar"
-msgstr "Accepteer"
-
-#: ../../../../js/strings.js.php:70
-msgid "Cancelar"
-msgstr "Annuleer"
-
-#: ../../../../js/strings.js.php:71
-msgid "Clave Copiada al Portapapeles"
-msgstr "Wachtwoord gekopieerd naar klembord"
-
-#: ../../../../js/strings.js.php:72
-msgid "Error al copiar al portapapeles"
-msgstr "Fout bij kopieren naar klembord"
-
-#: ../../../../web/AccountC.class.php:386
-#: ../../../../web/AccountC.class.php:417
-#: ../../../../inc/themes/classic/search.inc:75
-#: ../../../../inc/themes/classic/search.inc:134
-#: ../../../../inc/themes/material-blue/search.inc:77
-#: ../../../../inc/themes/material-blue/search.inc:144
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:168
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:118
+msgid "Usuario no pertenece al grupo"
+msgstr "De gebruiker behoort niet tot de groep"
+
+#: ../../../../inc/SP/Config/ConfigDB.class.php:102
+#: ../../../../inc/SP/Config/ConfigDB.class.php:138
+#: ../../../../inc/SP/Controller/MainController.class.php:276
+#: ../../../../inc/SP/Core/Acl.class.php:235
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:75
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:120
+msgid "Configuración"
+msgstr "Configuratie"
+
+#: ../../../../inc/SP/Config/ConfigDB.class.php:103
+#: ../../../../inc/SP/Config/ConfigDB.class.php:139
+msgid "Modificar configuración"
+msgstr "Bijwerken Configuratie"
+
+#: ../../../../inc/SP/Config/ConfigDB.class.php:140
+#: ../../../../inc/SP/Core/Upgrade.class.php:253
+#: ../../../../inc/SP/Core/Upgrade.class.php:259
+msgid "Parámetro"
+msgstr "Parameter"
+
+#: ../../../../inc/SP/Config/ConfigDB.class.php:143
+msgid "Valor"
+msgstr "Waarde"
+
+#: ../../../../inc/SP/Controller/AccountController.class.php:269
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:264
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:265
+#: ../../../../inc/SP/Core/Acl.class.php:206
+msgid "Copiar Cuenta"
+msgstr "Kopieer Account"
+
+#: ../../../../inc/SP/Controller/AccountController.class.php:316
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:251
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:252
+#: ../../../../inc/SP/Core/Acl.class.php:208
+msgid "Editar Cuenta"
+msgstr "Wijzig Account"
+
+#: ../../../../inc/SP/Controller/AccountController.class.php:368
+#: ../../../../inc/SP/Controller/AccountController.class.php:398
+#: ../../../../inc/SP/Controller/AccountController.class.php:491
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:211
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:212
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:45
msgid "Detalles de Cuenta"
msgstr "Account details"
-#: ../../../../web/AccountC.class.php:474
-#: ../../../../inc/themes/classic/account.inc:419
-#: ../../../../inc/themes/material-blue/account.inc:444
+#: ../../../../inc/SP/Controller/AccountController.class.php:452
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:79
msgid "Modificar Clave de Cuenta"
msgstr "Wijzig Account Wachtwoord"
-#: ../../../../web/AccountsMgmtC.class.php:80
-#: ../../../../web/AccountsMgmtC.class.php:139
-#: ../../../../web/AccountsMgmtC.class.php:267
-#: ../../../../web/SearchC.class.php:297
-#: ../../../../web/UsersMgmtC.class.php:88
-#: ../../../../web/UsersMgmtC.class.php:188
-#: ../../../../web/UsersMgmtC.class.php:246
-#: ../../../../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:73
-#: ../../../../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:75
-#: ../../../../inc/themes/material-blue/users.inc:8
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:237
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:238
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:63
+msgid "Copiar Clave en Portapapeles"
+msgstr "Kopieer Wachtwoord naar klembord"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:287
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:288
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:127
+msgid "Solicitar Modificación"
+msgstr "Aanvraag Modificatie"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:297
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:298
+msgid "Más Acciones"
+msgstr "Meer acties"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:346
+msgid "Ordenar por Cliente"
+msgstr "Sorteer bij Klant"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:352
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:55
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:129
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:204
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:281
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:348
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:401
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:520
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:594
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:840
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:236
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:236
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:240
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:79
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:140
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:226
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:165
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:12
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:9
+#: ../../../../inc/themes/material-blue/views/account/account.inc:40
+#: ../../../../inc/themes/material-blue/views/account/request.inc:12
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:43
+#: ../../../../inc/themes/material-blue/views/config/info.inc:26
+#: ../../../../inc/themes/material-blue/views/itemshow/categories.inc:15
+#: ../../../../inc/themes/material-blue/views/itemshow/customers.inc:18
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:18
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:17
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:13
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:16
+#: ../../../../inc/themes/material-blue/views/itemshow/tags.inc:15
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:16
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:12
msgid "Nombre"
msgstr "Naam"
-#: ../../../../web/AccountsMgmtC.class.php:116
-msgid "Gestión de Categorías"
-msgstr "Categoriëen Management"
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:353
+msgid "Ordenar por Nombre"
+msgstr "Sorteer bij Naam"
-#: ../../../../web/AccountsMgmtC.class.php:173
-msgid "Gestión de Clientes"
-msgstr "Klanten Management"
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:359
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:78
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:152
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:21
+#: ../../../../inc/themes/material-blue/views/account/account.inc:73
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:57
+msgid "Categoría"
+msgstr "Categorie"
-#: ../../../../web/AccountsMgmtC.class.php:267
-#: ../../../../inc/themes/classic/customfields.inc:27
-#: ../../../../inc/themes/material-blue/customfields.inc:30
-msgid "Módulo"
-msgstr "Module"
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:360
+msgid "Ordenar por Categoría"
+msgstr "Sorteer bij Categorie"
-#: ../../../../web/AccountsMgmtC.class.php:288
-msgid "Eliminar Campo"
-msgstr "Verwijder Veld"
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:367
+msgid "Ordenar por Usuario"
+msgstr "Sorteer bij Gebruikersnaam"
-#: ../../../../web/ConfigC.class.php:170
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:373
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:34
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:40
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:27
+#: ../../../../inc/themes/material-blue/views/account/account.inc:94
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:68
+msgid "URL / IP"
+msgstr "URL / IP"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:374
+msgid "Ordenar por URL / IP"
+msgstr "Sorteer bij URL / IP"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:127
+msgid "Los parámetros de DokuWiki no están configurados"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:135
+msgid "Error"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:137
+msgid "Conexión correcta"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:138
+#: ../../../../inc/SP/Core/Init.class.php:399
+#: ../../../../inc/SP/Core/Init.class.php:628
+#: ../../../../inc/SP/Core/Upgrade.class.php:93
+#: ../../../../inc/SP/Core/Upgrade.class.php:273
+#: ../../../../inc/themes/material-blue/views/config/info.inc:34
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:25
+msgid "Versión"
+msgstr "Versie"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:141
+msgid "Error de conexión a DokuWiki"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:120
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:285
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:350
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:398
+msgid "Modificar Configuración"
+msgstr "Wijzig Configuratie"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:153
+msgid "Faltan parámetros de syslog remoto"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:162
+msgid "Syslog remoto deshabilitado"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:184
+msgid "El tamaño máximo por archivo es de 16MB"
+msgstr "Het maxiumale bestands formaat is 16MB per bestand"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:192
+#: ../../../../js/strings.js.php:45
+msgid "Extensión no permitida"
+msgstr "Extensie niet toegestaan"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:225
+msgid "Faltan parámetros de Proxy"
+msgstr "Missende proxy parameters"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:234
+msgid "Proxy habiltado"
+msgstr "Proxy geactiveerd"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:238
+msgid "Proxy deshabilitado"
+msgstr "Proxy uitgeschakeld"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:241
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:338
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:386
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:439
+msgid "Sección"
+msgstr "Sectie"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:241
+#: ../../../../inc/SP/Controller/ConfigController.class.php:167
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:128
+#: ../../../../inc/themes/material-blue/views/main/install.inc:132
+msgid "General"
+msgstr "Algemeen"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:266
+msgid "Configuración actualizada"
+msgstr "Configuratie bijgewerkt"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:268
+msgid "Error al guardar la configuración"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:296
+msgid "Faltan parámetros de Wiki"
+msgstr "Missende Wiki parameters"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:304
+msgid "Wiki habiltada"
+msgstr "Wiki geactiveerd"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:308
+msgid "Wiki deshabilitada"
+msgstr "Wiki uitgeschakeld"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:321
+msgid "Faltan parámetros de DokuWiki"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:331
+msgid "DokuWiki habiltada"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:335
+msgid "DokuWiki deshabilitada"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:338
+#: ../../../../inc/SP/Controller/ConfigController.class.php:212
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:62
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:10
+msgid "Wiki"
+msgstr "Wiki"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:366
+msgid "Faltan parámetros de LDAP"
+msgstr "Missende LDAP parameters"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:379
+msgid "LDAP habiltado"
+msgstr "LDAP geactiveerd"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:383
+msgid "LDAP deshabilitado"
+msgstr "LDAP uitgeschakeld"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:386
+#: ../../../../inc/SP/Controller/ConfigController.class.php:245
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:7
+msgid "LDAP"
+msgstr "LDAP"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:414
+msgid "Faltan parámetros de Correo"
+msgstr "Missende Email parameters"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:430
+msgid "Correo habiltado"
+msgstr "Email geactiveerd"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:436
+msgid "Correo deshabilitado"
+msgstr "Email uitgeschakeld"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:439
+#: ../../../../inc/SP/Controller/ConfigController.class.php:276
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:7
+msgid "Correo"
+msgstr "Email"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:462
+msgid "Clave maestra no indicada"
+msgstr "Master Wachtwoord nodig"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:465
+msgid "Se ha de confirmar el cambio de clave"
+msgstr "De wachtwoord wijziging moet bevestigd worden"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:470
+msgid "Las claves son idénticas"
+msgstr "De wachtwoorden zijn gelijk"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:473
+msgid "Las claves maestras no coinciden"
+msgstr "De master wachtwoorden zijn niet gelijk"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:476
+msgid "La clave maestra actual no coincide"
+msgstr "Het huidige master wachtwoord matched niet"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:491
+#, fuzzy
+msgid "Errores al actualizar las claves de las cuentas"
+msgstr "Fout bij wijzigen wachtwoord van account"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:498
+msgid "Errores al actualizar las claves de las cuentas del histórico"
+msgstr "Fout bij wijzigen wachtwoord van account in de geschiedenis"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:503
+msgid "Errores al actualizar datos de campos personalizados"
+msgstr "Fout bij wijzigen aangepaste velden"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:519
+msgid "Error al guardar el hash de la clave maestra"
+msgstr "Fout bij opslaan van Master Wachtwoord"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:539
+msgid "Clave Temporal Generada"
+msgstr "Tijdelijk wachtwoord gegenereerd"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:545
+msgid "Error al generar clave temporal"
+msgstr "Fout bij genereren tijdelijk wachtwoord"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:591
+#: ../../../../inc/SP/Forms/AccountForm.class.php:79
+#: ../../../../inc/SP/Forms/UserForm.class.php:109
+msgid "Las claves no coinciden"
+msgstr "De wachtwoorden zijn niet gelijk"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:596
+#, fuzzy
+msgid "Error al realizar la exportación"
+msgstr "Fout opgetreden bij exporteren"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:602
+msgid "Proceso de exportación finalizado"
+msgstr "Export proces afgerond"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:300
+#: ../../../../inc/SP/Core/Acl.class.php:237
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:135
+msgid "Encriptación"
+msgstr "Encryptie"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:338
msgid "Último backup"
msgstr "Laatste backup"
-#: ../../../../web/ConfigC.class.php:170
+#: ../../../../inc/SP/Controller/ConfigController.class.php:338
+#, fuzzy
msgid "No se encontraron backups"
msgstr "Er zijn geen backups beschikbaar"
-#: ../../../../web/ConfigC.class.php:177
+#: ../../../../inc/SP/Controller/ConfigController.class.php:347
msgid "Última exportación"
msgstr "Laatste export"
-#: ../../../../web/ConfigC.class.php:177
+#: ../../../../inc/SP/Controller/ConfigController.class.php:347
msgid "No se encontró archivo de exportación"
msgstr "Geen export bestand gevonden"
-#: ../../../../web/ConfigC.class.php:222
+#: ../../../../inc/SP/Controller/ConfigController.class.php:349
+#: ../../../../inc/SP/Core/Acl.class.php:238
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:7
+msgid "Copia de Seguridad"
+msgstr "Backup"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:371
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:79
+#: ../../../../inc/SP/Import/Import.class.php:64
+#: ../../../../inc/SP/Import/XmlImport.class.php:64
+#: ../../../../inc/SP/Import/XmlImport.class.php:65
+msgid "Importar Cuentas"
+msgstr "Importeer Accounts"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:395
+#: ../../../../inc/SP/Controller/MainController.class.php:536
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:77
msgid "Información"
msgstr "Informatie"
-#: ../../../../web/EventlogC.class.php:95
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:297
+msgid "Opción no disponible"
+msgstr "Optie niet beschikbaar"
+
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:297
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:298
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:299
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:300
+#: ../../../../inc/SP/Core/Init.class.php:279
+msgid "Consulte con el administrador"
+msgstr "Neem contact op met de system administrator"
+
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:299
+msgid "No tiene permisos para acceder a esta página"
+msgstr "U heeft geen toegang tot deze pagina"
+
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:300
+msgid "No tiene permisos para realizar esta operación"
+msgstr "U heeft hiervoor geen toegang"
+
+#: ../../../../inc/SP/Controller/EventlogController.class.php:80
+msgid "Buscar Evento"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/EventlogController.class.php:104
msgid "Registro de eventos vaciado"
msgstr "Event log opgeschoond"
-#: ../../../../web/EventlogC.class.php:97
+#: ../../../../inc/SP/Controller/EventlogController.class.php:106
msgid "Error al vaciar el registro de eventos"
msgstr "Fout bij opschonen Event Log"
-#: ../../../../web/MainC.class.php:159
-#: ../../../../web/UsersMgmtC.class.php:101
-msgid "Admin Aplicación"
-msgstr "Applicatie Admin"
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:56
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:130
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:521
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:55
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:768
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:237
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:237
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:241
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:37
+#: ../../../../inc/themes/material-blue/views/itemshow/categories.inc:27
+#: ../../../../inc/themes/material-blue/views/itemshow/customers.inc:31
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:30
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:74
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:80
+msgid "Descripción"
+msgstr "Omschrijving"
-#: ../../../../web/MainC.class.php:177
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:71
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:93
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:184
+msgid "Categorías"
+msgstr "Categorieen"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:79
+msgid "Buscar Categoría"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:89
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:90
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:199
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:77
+#: ../../../../inc/themes/material-blue/views/account/account.inc:84
+msgid "Nueva Categoría"
+msgstr "Nieuwe Categorie"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:100
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:101
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:195
+#: ../../../../inc/SP/Core/Acl.class.php:219
+msgid "Editar Categoría"
+msgstr "Wijzig Categorie"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:110
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:111
+#: ../../../../inc/SP/Core/Acl.class.php:220
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:151
+msgid "Eliminar Categoría"
+msgstr "Verwijder Categorie"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:145
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:94
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:191
+msgid "Clientes"
+msgstr "Klanten"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:153
+msgid "Buscar Cliente"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:163
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:164
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:186
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:79
+#: ../../../../inc/themes/material-blue/views/account/account.inc:63
+msgid "Nuevo Cliente"
+msgstr "Nieuwe Klant"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:174
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:175
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:182
+#: ../../../../inc/SP/Core/Acl.class.php:224
+msgid "Editar Cliente"
+msgstr "Wijzig Klant"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:184
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:185
+#: ../../../../inc/SP/Core/Acl.class.php:225
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:150
+msgid "Eliminar Cliente"
+msgstr "Verwijder Klant"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:203
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:41
+msgid "Módulo"
+msgstr "Module"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:221
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:67
+#: ../../../../inc/themes/material-blue/views/account/account.inc:244
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:198
+msgid "Campos Personalizados"
+msgstr "Aangepaste velden"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:229
+msgid "Buscar Campo"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:239
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:240
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:216
+msgid "Nuevo Campo"
+msgstr "Nieuw Veld"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:250
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:251
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:220
+msgid "Editar Campo"
+msgstr "Wijzig Veld"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:260
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:261
+msgid "Eliminar Campo"
+msgstr "Verwijder Veld"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:301
+#: ../../../../inc/SP/Core/Acl.class.php:213
+#: ../../../../inc/themes/material-blue/views/account/files.inc:5
+#: ../../../../inc/themes/material-blue/views/account/files.inc:15
+#: ../../../../inc/themes/material-blue/views/config/general-files.inc:4
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:86
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:226
+msgid "Archivos"
+msgstr "Bestanden"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:309
+msgid "Buscar Archivo"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:319
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:320
+#: ../../../../inc/themes/material-blue/views/account/files-list.inc:40
+msgid "Ver Archivo"
+msgstr "Bekijk bestand"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:329
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:330
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:133
+#: ../../../../inc/themes/material-blue/views/account/files-list.inc:26
+msgid "Eliminar Archivo"
+msgstr "Verwijder Bestand"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:364
+#: ../../../../inc/SP/Controller/MainController.class.php:534
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:92
+#: ../../../../inc/themes/material-blue/views/account/linkedAccounts.inc:13
+#: ../../../../inc/themes/material-blue/views/config/general-accounts.inc:4
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:29
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:219
+msgid "Cuentas"
+msgstr "Accounts"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:372
+msgid "Buscar Cuenta"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:403
+#: ../../../../inc/SP/Controller/LoginController.class.php:242
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:49
+msgid "Perfil"
+msgstr "Profiel"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:405
+msgid "Propiedades"
+msgstr "Eigenschappen"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:426
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:95
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:24
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:43
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:46
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:163
+msgid "Usuarios"
+msgstr "Gebruikers"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:434
+msgid "Buscar Usuario"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:443
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:444
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:147
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:101
+msgid "Nuevo Usuario"
+msgstr "Nieuwe Gebruiker"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:457
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:458
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:283
+msgid "Importar usuarios de LDAP"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:470
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:471
+msgid "Ver Detalles de Usuario"
+msgstr "Bekijk gebruiker Details"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:480
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:481
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:139
+msgid "Editar Usuario"
+msgstr "Wijzig Gebruiker"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:490
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:491
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:20
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:46
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:52
+msgid "Cambiar Clave de Usuario"
+msgstr "Wijzig Gebruikers Wachtwoord"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:501
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:502
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:163
+msgid "Eliminar Usuario"
+msgstr "Verwijder Gebruiker"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:536
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:96
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:46
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:170
+msgid "Grupos"
+msgstr "Groepen"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:544
+msgid "Buscar Grupo"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:554
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:555
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:160
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:73
+msgid "Nuevo Grupo"
+msgstr "Nieuwe Groep"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:565
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:566
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:156
+msgid "Editar Grupo"
+msgstr "Wijzig Broep"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:575
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:576
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:139
+msgid "Eliminar Grupo"
+msgstr "Verwijder Groep"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:608
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:177
+msgid "Perfiles"
+msgstr "Profielen"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:616
+msgid "Buscar Perfil"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:626
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:627
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:173
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:78
+msgid "Nuevo Perfil"
+msgstr "Nieuw Profiel"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:637
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:638
+msgid "Ver Detalles de Perfil"
+msgstr "Bekijk Profiel Details"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:647
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:648
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:169
+msgid "Editar Perfil"
+msgstr "Wijzig Profiel"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:657
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:658
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:139
+msgid "Eliminar Perfil"
+msgstr "Verwijder Profiel"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:677
+#: ../../../../inc/SP/Log/Email.class.php:66
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:23
+msgid "Acción"
+msgstr "Actie"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:692
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:205
+msgid "Autorizaciones API"
+msgstr "API Autorisaties"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:700
+msgid "Buscar Token"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:721
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:722
+msgid "Ver token de Autorización"
+msgstr "Bekijk Autorisatie Sleutel"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:731
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:732
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:212
+msgid "Editar Autorización"
+msgstr "Wijzig Autorisatie"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:761
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:15
+msgid "Fecha Creación"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:762
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:19
+msgid "Fecha Caducidad"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:764
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:27
+msgid "Notificar"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:765
+#: ../../../../inc/themes/material-blue/views/account/details.inc:18
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:31
+msgid "Visitas"
+msgstr "Bezoekers"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:784
+msgid "Enlaces"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:792
+msgid "Buscar Enlace"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:802
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:803
+msgid "Ver Enlace"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:811
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:812
+msgid "Renovar Enlace"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:821
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:822
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:195
+msgid "Eliminar Enlace"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:854
+#: ../../../../inc/themes/material-blue/views/account/account.inc:171
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:233
+msgid "Etiquetas"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:862
+msgid "Buscar Etiqueta"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:872
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:873
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:229
+msgid "Nueva Etiqueta"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:883
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:884
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:233
+msgid "Editar Etiqueta"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:893
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:894
+msgid "Eliminar Etiqueta"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:912
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:67
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:94
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:128
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:237
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:267
+msgid "Plugin"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:913
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:56
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:238
+msgid "Estado"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:929
+msgid "Plugins"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:937
+msgid "Buscar Plugin"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:947
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:948
+msgid "Ver Plugin"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:956
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:957
+msgid "Habilitar"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:966
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:967
+msgid "Deshabilitar"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:976
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:977
+msgid "Restablecer Datos"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:52
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:64
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:85
+#: ../../../../inc/themes/material-blue/views/account/account.inc:151
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:62
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:69
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:24
+msgid "Fecha"
+msgstr "Datum"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:54
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:50
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:57
+msgid "Componente"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:65
+msgid "Leída"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:74
+#: ../../../../inc/SP/Controller/MainController.class.php:295
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:79
+msgid "Notificaciones"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:82
+msgid "Buscar Notificación"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:92
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:93
+#: ../../../../inc/SP/Controller/NoticeShowController.class.php:100
+msgid "Ver Notificación"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:101
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:102
+msgid "Marcar Notificación"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:112
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:113
+msgid "Eliminar Notificación"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:205
+msgid "Usuario creado"
+msgstr "Gebruiker toegevoegd"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:211
+#: ../../../../inc/SP/Mgmt/Users/UserMigrate.class.php:101
+msgid "Usuario actualizado"
+msgstr "Gebruiker bijgewerkt"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:217
+msgid "Usuario eliminado"
+msgstr "Gebruiker verwijderd"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:301
+msgid "Grupo creado"
+msgstr "Groep toegevoegd"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:307
+msgid "Grupo actualizado"
+msgstr "Groep bijgewerkt"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:313
+msgid "Grupo eliminado"
+msgstr "Groep verwijderd"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:339
+msgid "Perfil creado"
+msgstr "Profiel toegevoegd"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:345
+msgid "Perfil actualizado"
+msgstr "Profiel bijgewerkt"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:351
+msgid "Perfil eliminado"
+msgstr "Profiel verwijderd"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:383
+msgid "Cliente actualizado"
+msgstr "Klant bijgewerkt"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:420
+msgid "Categoría actualizada"
+msgstr "Categorie bijgewerkt"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:447
+msgid "Autorización creada"
+msgstr "Autorisatie toegevoegd"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:452
+msgid "Autorización actualizada"
+msgstr "Autorisatie bijgewerkt"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:457
+msgid "Autorización eliminada"
+msgstr "Autorisatie verwijderd"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:480
+msgid "Campo creado"
+msgstr "Veld toegevoegd"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:485
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:211
+msgid "Campo actualizado"
+msgstr "Veld bijgewerkt"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:490
+msgid "Campo eliminado"
+msgstr "Veld verwijderd"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:516
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:141
+msgid "Enlace creado"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:521
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:234
+msgid "Enlace actualizado"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:526
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:196
+msgid "Enlace eliminado"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:549
+msgid "Etiqueta creada"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:554
+msgid "Etiqueta actualizada"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:559
+msgid "Etiqueta eliminada"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:576
+msgid "Archivo actualizado"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:597
+msgid "Plugin habilitado"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:603
+msgid "Plugin deshabilitado"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:608
+msgid "Plugin restablecido"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:648
+msgid "Cuenta actualizada"
+msgstr "Account bijgewerkt"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:658
+msgid "Cuenta restaurada"
+msgstr "Account hersteld"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:685
+msgid "Favorito añadido"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:690
+msgid "Favorito eliminado"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:704
+msgid "Importación de usuarios de LDAP realizada"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:705
+#, php-format
+msgid "Usuarios importados %d/%d"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:706
+#, php-format
+msgid "Errores: %d"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:708
+msgid "Error al importar usuarios de LDAP"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:726
+msgid "Notificación leída"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:731
+msgid "Notificación eliminada"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:749
+msgid "Es necesaria una descripción"
+msgstr "Een omschrijving is nodig"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:764
+msgid "Solicitud de Modificación de Cuenta"
+msgstr "Aanvraag voor Account Modificatie"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:765
+msgid "Solicitante"
+msgstr "Aanvrager"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:785
+msgid "Solicitud enviada por correo"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:787
+msgid "Solicitud no enviada por correo"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:802
+msgid "Solicitud realizada"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:134
+msgid "Ver Usuario"
+msgstr "Bekijk Gebruiker"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:151
+msgid "Ver Grupo"
+msgstr "Bekijk Groep"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:164
+msgid "Ver Perfil"
+msgstr "Bekijk Profiel"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:177
+msgid "Ver Cliente"
+msgstr "Bekijk Klant"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:190
+msgid "Ver Categoría"
+msgstr "Bekijk Categorie"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:203
+msgid "Ver Autorización"
+msgstr "Bekijk Autorisatie"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:224
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:68
+msgid "Ver Enlace Público"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:241
+msgid "Detalles de Plugin"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:404
+msgid "Token de autorización visualizado"
+msgstr "Autorisatie sleutel bekeken"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:405
+msgid "Autorizaciones"
+msgstr "Authorisaties"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:106
+msgid "Usuario/Clave no introducidos"
+msgstr "Gebruiker/Wachtwoord niet ingevuld"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:113
+msgid "Inicio sesión"
+msgstr "Inloggen"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:127
+#: ../../../../inc/SP/Controller/LoginController.class.php:344
+#: ../../../../inc/SP/Controller/LoginController.class.php:405
+#: ../../../../inc/SP/Controller/LoginController.class.php:429
+msgid "Login incorrecto"
+msgstr "Foutieve login"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:167
+msgid "Error al obtener los datos del usuario de la BBDD"
+msgstr "Fout bij ophalen gebruiker data vanuit de DB"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:185
+#: ../../../../inc/SP/Controller/LoginController.class.php:189
+msgid "Usuario deshabilitado"
+msgstr "Gebruiker uitgeschakeld"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:247
+msgid "Error al obtener la clave maestra del usuario"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:276
+#: ../../../../inc/SP/Controller/LoginController.class.php:279
+#: ../../../../inc/SP/Controller/LoginController.class.php:287
+#: ../../../../inc/SP/Controller/LoginController.class.php:290
+msgid "Clave maestra incorrecta"
+msgstr "Ongeldig Master Wachtwoord"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:301
+msgid "Es necesaria su clave anterior"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:304
+msgid "La clave maestra no ha sido guardada o es incorrecta"
+msgstr "Het Master Wachtwoord is niet opgeslagen"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:349
+msgid "Cuenta expirada"
+msgstr "Account verlopen"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:354
+msgid "El usuario no tiene grupos asociados"
+msgstr "De gebruiker heeft geen geassocieerde groepen"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:370
+msgid "Servidor LDAP"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:432
+msgid "Autentificación"
+msgstr "Authenticatie"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:237
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:72
msgid "Buscar"
msgstr "zoek"
-#: ../../../../web/MainC.class.php:189
+#: ../../../../inc/SP/Controller/MainController.class.php:256
msgid "Usuarios y Accesos"
msgstr "Gebruikers en Toegang"
-#: ../../../../web/MainC.class.php:195
+#: ../../../../inc/SP/Controller/MainController.class.php:266
msgid "Elementos y Personalización"
msgstr "Onderdelen en Aanpassingen"
-#: ../../../../web/MainC.class.php:207
-#: ../../../../inc/themes/classic/eventlog.inc:2
-#: ../../../../inc/themes/material-blue/eventlog.inc:2
+#: ../../../../inc/SP/Controller/MainController.class.php:286
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:7
msgid "Registro de Eventos"
msgstr "Event Log"
-#: ../../../../web/MainC.class.php:228
-msgid "Nuevo estilo visual basado en Material Design Lite by Google"
-msgstr "Nieuw uiterlijk gebaseerd op Material Design van Google"
-
-#: ../../../../web/MainC.class.php:229
-msgid "Usuarios en múltiples grupos"
-msgstr "Gebruikers kunnen horen bij meerdere groepen"
-
-#: ../../../../web/MainC.class.php:230
-msgid "Previsualización de imágenes"
-msgstr "Images previsualization"
-
-#: ../../../../web/MainC.class.php:231
-msgid "Mostrar claves como imágenes"
-msgstr "Toon wachtwoorden als afbeeldingen"
-
-#: ../../../../web/MainC.class.php:232
-msgid "Campos personalizados"
-msgstr "Aangepaste velden"
-
-#: ../../../../web/MainC.class.php:233
-msgid "API de consultas"
-msgstr "API queries"
-
-#: ../../../../web/MainC.class.php:234
-#: ../../../../inc/themes/classic/2fa.inc:9
-#: ../../../../inc/themes/material-blue/2fa.inc:7
-#: ../../../../inc/themes/material-blue/security.inc:11
-msgid "Autentificación en 2 pasos"
-msgstr "Twee factor authenticatie"
-
-#: ../../../../web/MainC.class.php:235
-msgid "Complejidad de generador de claves"
-msgstr "Willekeurig getal generator met moeilijkheids configuratie"
-
-#: ../../../../web/MainC.class.php:236
-msgid "Consultas especiales"
-msgstr "Speciale queries"
-
-#: ../../../../web/MainC.class.php:237
-msgid "Exportación a XML"
-msgstr "XML Export"
-
-#: ../../../../web/MainC.class.php:238
-msgid "Clave maestra temporal"
-msgstr "Tijdelijk Master Wachtwoord"
-
-#: ../../../../web/MainC.class.php:239
-msgid "Importación de cuentas desde sysPass, KeePass, KeePassX y CSV"
-msgstr "Accounts Importeren vanuit Keepass, KeepassX en CSV"
-
-#: ../../../../web/MainC.class.php:240
-msgid "Optimización del código y mayor rapidez de carga"
-msgstr "Code optimalisatie en sneller laden"
-
-#: ../../../../web/MainC.class.php:241
-msgid "Mejoras de seguridad en XSS e inyección SQL"
-msgstr "Verbeterde beveiliging om XSS en SQL injection te voorkomen"
-
-#: ../../../../web/MainC.class.php:282
+#: ../../../../inc/SP/Controller/MainController.class.php:346
msgid "La version de PHP es vulnerable al ataque NULL Byte (CVE-2006-7243)"
msgstr "Deze PHP versie is kwetsbaar voor NULL Byte attack CVE-2006-7243)"
-#: ../../../../web/MainC.class.php:283
+#: ../../../../inc/SP/Controller/MainController.class.php:347
msgid "Actualice la versión de PHP para usar sysPass de forma segura"
msgstr ""
"Update a.u.b de PHP versie om gebruik te kunnen maken van een veilige SysPass"
-#: ../../../../web/MainC.class.php:290
+#: ../../../../inc/SP/Controller/MainController.class.php:353
msgid "No se encuentra el generador de números aleatorios."
msgstr "Willekeurige wachtwoord generator niet gevonden"
-#: ../../../../web/MainC.class.php:291
+#: ../../../../inc/SP/Controller/MainController.class.php:354
msgid ""
"Sin esta función un atacante puede utilizar su cuenta al resetear la clave"
msgstr ""
"Zonder deze functie kan een hacker uw account overnemen bij een wachtwoord "
"herstel actie"
-#: ../../../../web/MainC.class.php:310
-msgid "Instalación finalizada"
-msgstr "Installatie afgerond"
-
-#: ../../../../web/MainC.class.php:311
-msgid "Pulse aquí para acceder"
-msgstr "Klik hier om in te loggen"
-
-#: ../../../../web/MainC.class.php:408
+#: ../../../../inc/SP/Controller/MainController.class.php:421
msgid "Descargar nueva versión"
msgstr "Download nieuwe versie"
-#: ../../../../web/MainC.class.php:419
+#: ../../../../inc/SP/Controller/MainController.class.php:433
msgid "Avisos de sysPass"
msgstr "sysPass Mededelingen"
-#: ../../../../web/SearchC.class.php:290
-msgid "Ordenar por Cliente"
-msgstr "Sorteer bij Klant"
+#: ../../../../inc/SP/Controller/MainController.class.php:526
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:69
+msgid "Enlace visualizado"
+msgstr ""
-#: ../../../../web/SearchC.class.php:296
-msgid "Ordenar por Nombre"
-msgstr "Sorteer bij Naam"
+#: ../../../../inc/SP/Controller/MainController.class.php:528
+msgid "Origen"
+msgstr ""
-#: ../../../../web/SearchC.class.php:302
-msgid "Ordenar por Categoría"
-msgstr "Sorteer bij Categorie"
+#: ../../../../inc/SP/Controller/MainController.class.php:529
+#, fuzzy
+msgid "Agente"
+msgstr "Klant"
-#: ../../../../web/SearchC.class.php:308
-msgid "Ordenar por Usuario"
-msgstr "Sorteer bij Gebruikersnaam"
-
-#: ../../../../web/SearchC.class.php:314
-msgid "Ordenar por URL / IP"
-msgstr "Sorteer bij URL / IP"
-
-#: ../../../../web/SearchC.class.php:315
-#: ../../../../inc/themes/classic/account.inc:61
-#: ../../../../inc/themes/classic/editpass.inc:16
-#: ../../../../inc/themes/classic/request.inc:13
-#: ../../../../inc/themes/classic/search.inc:96
-#: ../../../../inc/themes/material-blue/account.inc:70
-#: ../../../../inc/themes/material-blue/editpass.inc:17
-#: ../../../../inc/themes/material-blue/request.inc:15
-#: ../../../../inc/themes/material-blue/search.inc:98
-msgid "URL / IP"
-msgstr "URL / IP"
-
-#: ../../../../web/UsersMgmtC.class.php:92
-msgid "Propiedades"
-msgstr "Eigenschappen"
-
-#: ../../../../web/UsersMgmtC.class.php:105
-msgid "Admin Cuentas"
-msgstr "Account Admin"
-
-#: ../../../../web/UsersMgmtC.class.php:113
-#: ../../../../inc/themes/classic/users.inc:113
-#: ../../../../inc/themes/material-blue/users.inc:151
-#: ../../../../inc/themes/material-blue/users.inc:154
-msgid "Deshabilitado"
-msgstr "Uitgeschakeld"
-
-#: ../../../../web/UsersMgmtC.class.php:130
-msgid "Ver Detalles de Usuario"
-msgstr "Bekijk gebruiker Details"
-
-#: ../../../../web/UsersMgmtC.class.php:144
-msgid "Cambiar Clave de Usuario"
-msgstr "Wijzig Gebruikers Wachtwoord"
-
-#: ../../../../web/UsersMgmtC.class.php:164
-msgid "Gestión de Usuarios"
-msgstr "Gebruikers Management"
-
-#: ../../../../web/UsersMgmtC.class.php:223
-msgid "Gestión de Grupos"
-msgstr "Groepen Management"
-
-#: ../../../../web/UsersMgmtC.class.php:261
-msgid "Ver Detalles de Perfil"
-msgstr "Bekijk Profiel Details"
-
-#: ../../../../web/UsersMgmtC.class.php:288
-msgid "Gestión de Perfiles"
-msgstr "Profiel Management"
-
-#: ../../../../web/UsersMgmtC.class.php:408
-msgid "Ver token de Autorización"
-msgstr "Bekijk Autorisatie Sleutel"
-
-#: ../../../../web/UsersMgmtC.class.php:435
-msgid "Gestión de Autorizaciones API"
-msgstr "API Autorisaties Management"
-
-#: ../../../../web/UsersMgmtC.class.php:457
-msgid "Token de autorización visualizado"
-msgstr "Autorisatie sleutel bekeken"
-
-#: ../../../../web/UsersMgmtC.class.php:458
-msgid "Autorizaciones"
-msgstr "Authorisaties"
-
-#: ../../../../web/UsersPrefsC.class.php:93
-#: ../../../../inc/themes/classic/mail.inc:63
-#: ../../../../inc/themes/material-blue/mail.inc:86
-msgid "Seguridad"
-msgstr "Beveiliging"
-
-#: ../../../../web/UsersPrefsC.class.php:118
-#: ../../../../inc/themes/classic/sessionbar.inc:12
+#: ../../../../inc/SP/Controller/UserPreferencesController.class.php:89
msgid "Preferencias"
msgstr "Voorkeuren"
-#: ../../../../inc/themes/classic/2fa.inc:14
-#: ../../../../inc/themes/material-blue/2fa.inc:12
-msgid "Introducir código"
-msgstr "Invullen code"
+#: ../../../../inc/SP/Core/Acl.class.php:189
+#, php-format
+msgid "Denegado acceso a %s"
+msgstr ""
-#: ../../../../inc/themes/classic/2fa.inc:26
-msgid "Verificar"
-msgstr "Verifieer"
+#: ../../../../inc/SP/Core/Acl.class.php:204
+msgid "Buscar Cuentas"
+msgstr "Zoek accounts"
-#: ../../../../inc/themes/classic/account.inc:14
-#: ../../../../inc/themes/material-blue/account.inc:21
-msgid "Nombre de cuenta"
-msgstr "Account naam"
+#: ../../../../inc/SP/Core/Acl.class.php:205
+msgid "Ver Cuenta"
+msgstr "Bekijk Account"
-#: ../../../../inc/themes/classic/account.inc:35
-msgid "Buscar en desplegable o introducir"
-msgstr "Zoek beneden of enter"
+#: ../../../../inc/SP/Core/Acl.class.php:209
+msgid "Editar Clave de Cuenta"
+msgstr "Wijzig Account Wachwoord"
-#: ../../../../inc/themes/classic/account.inc:64
-#: ../../../../inc/themes/material-blue/account.inc:76
-msgid "URL o IP de acceso"
-msgstr "Toegang URL of IP"
+#: ../../../../inc/SP/Core/Acl.class.php:210
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:58
+msgid "Ver Historial"
+msgstr "Bekijk Geschiedenis"
-#: ../../../../inc/themes/classic/account.inc:76
-#: ../../../../inc/themes/material-blue/account.inc:90
-msgid "Usuario de acceso"
-msgstr "Toegang gebruiker"
+#: ../../../../inc/SP/Core/Acl.class.php:214
+msgid "Peticiones"
+msgstr "Aanvragen"
-#: ../../../../inc/themes/classic/account.inc:93
-#: ../../../../inc/themes/classic/editpass.inc:31
-#: ../../../../inc/themes/classic/passreset.inc:35
-#: ../../../../inc/themes/classic/users.inc:83
-#: ../../../../inc/themes/classic/userspass.inc:19
-#: ../../../../inc/themes/classic/userspass.inc:21
-#: ../../../../inc/themes/material-blue/account.inc:109
-#: ../../../../inc/themes/material-blue/editpass.inc:36
-#: ../../../../inc/themes/material-blue/install.inc:67
-#: ../../../../inc/themes/material-blue/passreset.inc:34
-#: ../../../../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 "Wachtwoord (Herhaal)"
+#: ../../../../inc/SP/Core/Acl.class.php:215
+msgid "Gestión Aplicación"
+msgstr "Applicatie Management"
-#: ../../../../inc/themes/classic/account.inc:100
-#: ../../../../inc/themes/classic/search.inc:112
-#: ../../../../inc/themes/classic/users.inc:91
-#: ../../../../inc/themes/material-blue/account.inc:120
-#: ../../../../inc/themes/material-blue/search.inc:118
-#: ../../../../inc/themes/material-blue/users.inc:116
-msgid "Notas"
-msgstr "Notities"
+#: ../../../../inc/SP/Core/Acl.class.php:216
+msgid "Gestión Categorías"
+msgstr "Categorieen Management"
-#: ../../../../inc/themes/classic/account.inc:102
-#: ../../../../inc/themes/material-blue/account.inc:125
-#: ../../../../inc/themes/material-blue/users.inc:123
-msgid "Notas sobre la cuenta"
-msgstr "Notities voor het account"
+#: ../../../../inc/SP/Core/Acl.class.php:217
+msgid "Buscar Categorías"
+msgstr ""
-#: ../../../../inc/themes/classic/account.inc:108
-#: ../../../../inc/themes/material-blue/account.inc:134
-#: ../../../../inc/themes/material-blue/search.inc:111
-msgid "Permisos"
-msgstr "Permissies"
+#: ../../../../inc/SP/Core/Acl.class.php:218
+msgid "Añadir Categoría"
+msgstr ""
-#: ../../../../inc/themes/classic/account.inc:135
-#: ../../../../inc/themes/classic/account.inc:166
-#: ../../../../inc/themes/material-blue/account.inc:163
-#: ../../../../inc/themes/material-blue/account.inc:195
-msgid "Hablitar edición"
-msgstr "Activeer Wijzigen"
+#: ../../../../inc/SP/Core/Acl.class.php:221
+msgid "Gestión Clientes"
+msgstr "Klanten Management"
-#: ../../../../inc/themes/classic/account.inc:177
-#: ../../../../inc/themes/classic/account.inc:324
-#: ../../../../inc/themes/material-blue/account.inc:204
-#: ../../../../inc/themes/material-blue/account.inc:359
-msgid "Grupo Principal"
-msgstr "Hoofd Groep"
+#: ../../../../inc/SP/Core/Acl.class.php:222
+msgid "Buscar Clientes"
+msgstr ""
-#: ../../../../inc/themes/classic/account.inc:217
-#: ../../../../inc/themes/material-blue/account.inc:245
-msgid "Soltar archivos aquí (max. 5) o click para seleccionar"
-msgstr "Drop bestanden hier (max. 5) of klik om te selecteren"
+#: ../../../../inc/SP/Core/Acl.class.php:223
+msgid "Añadir Cliente"
+msgstr ""
-#: ../../../../inc/themes/classic/account.inc:217
-#: ../../../../inc/themes/classic/config.inc:212
-#: ../../../../inc/themes/material-blue/account.inc:245
-#: ../../../../inc/themes/material-blue/config.inc:328
-msgid "Tamaño máximo de archivo"
-msgstr "Maximale bestandsgrootte"
+#: ../../../../inc/SP/Core/Acl.class.php:226
+msgid "Gestión Campos Personalizados"
+msgstr "Aangepaste Velden Management"
-#: ../../../../inc/themes/classic/account.inc:239
-#: ../../../../inc/themes/material-blue/account.inc:267
-msgid "Historial"
-msgstr "Geschiedenis"
+#: ../../../../inc/SP/Core/Acl.class.php:227
+msgid "Gestión Autorizaciones API"
+msgstr "API Autorisaties Management"
-#: ../../../../inc/themes/classic/account.inc:258
-#: ../../../../inc/themes/material-blue/account.inc:287
-msgid "Seleccionar fecha"
-msgstr "Selecteer data"
+#: ../../../../inc/SP/Core/Acl.class.php:228
+msgid "Gestión de Archivos"
+msgstr ""
-#: ../../../../inc/themes/classic/account.inc:267
-#: ../../../../inc/themes/classic/users.inc:164
-#: ../../../../inc/themes/material-blue/account.inc:296
-#: ../../../../inc/themes/material-blue/users.inc:208
-msgid "Última Modificación"
-msgstr "Laatste Aanpassing"
+#: ../../../../inc/SP/Core/Acl.class.php:229
+msgid "Gestión de Cuentas"
+msgstr ""
-#: ../../../../inc/themes/classic/account.inc:269
-#: ../../../../inc/themes/material-blue/account.inc:298
-msgid "por"
-msgstr "door"
+#: ../../../../inc/SP/Core/Acl.class.php:230
+msgid "Gestión de Etiquetas"
+msgstr ""
-#: ../../../../inc/themes/classic/account.inc:312
-#: ../../../../inc/themes/material-blue/account.inc:347
-msgid "Visitas"
-msgstr "Bezoekers"
+#: ../../../../inc/SP/Core/Acl.class.php:231
+#: ../../../../inc/SP/Core/Acl.class.php:232
+msgid "Gestión Usuarios"
+msgstr "Gebruikers management"
-#: ../../../../inc/themes/classic/account.inc:316
-#: ../../../../inc/themes/material-blue/account.inc:351
-msgid "Fecha Alta"
-msgstr "Datum toegevoegd"
+#: ../../../../inc/SP/Core/Acl.class.php:233
+msgid "Gestión Grupos"
+msgstr "Groepen Management"
-#: ../../../../inc/themes/classic/account.inc:320
-#: ../../../../inc/themes/material-blue/account.inc:355
-msgid "Creador"
-msgstr "Maker"
+#: ../../../../inc/SP/Core/Acl.class.php:234
+msgid "Gestión Perfiles"
+msgstr "Profielen management"
-#: ../../../../inc/themes/classic/account.inc:329
-#: ../../../../inc/themes/material-blue/account.inc:364
-msgid "Usuarios Secundarios"
-msgstr "Secundaire Gebruikers"
+#: ../../../../inc/SP/Core/Acl.class.php:236
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:128
+msgid "Configuración General"
+msgstr "Algemene Configuratie"
-#: ../../../../inc/themes/classic/account.inc:348
-#: ../../../../inc/themes/material-blue/account.inc:383
-msgid "Grupos Secundarios"
-msgstr "Secundaire Groepen"
+#: ../../../../inc/SP/Core/Acl.class.php:239
+msgid "Exportar"
+msgstr "Export"
-#: ../../../../inc/themes/classic/account.inc:368
-#: ../../../../inc/themes/material-blue/account.inc:403
-msgid "Fecha Edición"
-msgstr "Datum Aangepast"
+#: ../../../../inc/SP/Core/Acl.class.php:240
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:149
+msgid "Importar"
+msgstr "Importeer"
-#: ../../../../inc/themes/classic/account.inc:372
-#: ../../../../inc/themes/material-blue/account.inc:407
-msgid "Editor"
-msgstr "Bewerker"
+#: ../../../../inc/SP/Core/Backup.class.php:51
+msgid "Realizar Backup"
+msgstr "Backup maken"
-#: ../../../../inc/themes/classic/account.inc:399
-#: ../../../../inc/themes/material-blue/account.inc:470
-msgid "Restaurar cuenta desde este punto"
-msgstr "Herstel account vanaf dit punt"
+#: ../../../../inc/SP/Core/Backup.class.php:80
+msgid "Copia de la aplicación y base de datos realizada correctamente"
+msgstr "Applicatie en database backup succesvol afgerond"
-#: ../../../../inc/themes/classic/account.inc:411
-#: ../../../../inc/themes/classic/search.inc:143
-#: ../../../../inc/themes/material-blue/account.inc:437
-#: ../../../../inc/themes/material-blue/search.inc:154
-msgid "Copiar Clave en Portapapeles"
-msgstr "Kopieer Wachtwoord naar klembord"
+#: ../../../../inc/SP/Core/Backup.class.php:98
+#: ../../../../inc/SP/Core/XmlExport.class.php:511
+#, php-format
+msgid "No es posible crear el directorio de backups (\"%s\")"
+msgstr ""
-#: ../../../../inc/themes/classic/account.inc:426
-#: ../../../../inc/themes/material-blue/account.inc:450
-msgid "Ver Actual"
-msgstr "Bekijk Huidig"
+#: ../../../../inc/SP/Core/Backup.class.php:102
+#: ../../../../inc/SP/Core/XmlExport.class.php:517
+msgid "Compruebe los permisos del directorio de backups"
+msgstr "Check de permissies op de backup folder"
-#: ../../../../inc/themes/classic/account.inc:431
-#: ../../../../inc/themes/classic/editpass.inc:45
-#: ../../../../inc/themes/classic/mgmttabs.inc:4
-#: ../../../../inc/themes/classic/passreset.inc:46
-#: ../../../../inc/themes/material-blue/passreset.inc:46
-msgid "Volver"
-msgstr "Terug"
+#: ../../../../inc/SP/Core/Backup.class.php:235
+msgid "Esta operación sólo es posible en entornos Linux"
+msgstr "Deze actie wordt alleen ondersteund in Linux omgevingen"
-#: ../../../../inc/themes/classic/account.inc:438
-#: ../../../../inc/themes/classic/search.inc:155
-#: ../../../../inc/themes/material-blue/account.inc:460
-#: ../../../../inc/themes/material-blue/search.inc:166
-msgid "Modificar Cuenta"
-msgstr "Bewerk Account"
+#: ../../../../inc/SP/Core/Backup.class.php:237
+msgid "Error al realizar backup en modo compatibilidad"
+msgstr "Fout bij het backuppen in compatibiliteits mode"
-#: ../../../../inc/themes/classic/account.inc:443
-#: ../../../../inc/themes/classic/search.inc:176
-#: ../../../../inc/themes/material-blue/account.inc:464
-#: ../../../../inc/themes/material-blue/search.inc:187
-msgid "Solicitar Modificación"
-msgstr "Aanvraag Modificatie"
+#: ../../../../inc/SP/Core/Crypt.class.php:129
+#: ../../../../inc/SP/Log/Email.class.php:152
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:70
+msgid "Aviso"
+msgstr "Waarschuwing"
-#: ../../../../inc/themes/classic/account.inc:450
-#: ../../../../inc/themes/classic/categories.inc:62
-#: ../../../../inc/themes/classic/config.inc:294
-#: ../../../../inc/themes/classic/customers.inc:62
-#: ../../../../inc/themes/classic/customfields.inc:63
-#: ../../../../inc/themes/classic/editpass.inc:50
-#: ../../../../inc/themes/classic/encryption.inc:99
-#: ../../../../inc/themes/classic/groups.inc:77
-#: ../../../../inc/themes/classic/ldap.inc:229
-#: ../../../../inc/themes/classic/mail.inc:107
-#: ../../../../inc/themes/classic/preferences.inc:130
-#: ../../../../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:476
-#: ../../../../inc/themes/material-blue/categories.inc:72
-#: ../../../../inc/themes/material-blue/config.inc:444
-#: ../../../../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/preferences.inc:134
-#: ../../../../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 "Opslaan"
+#: ../../../../inc/SP/Core/Crypt.class.php:129
+msgid ""
+"Se ha regenerado el HASH de clave maestra. No es necesaria ninguna acción."
+msgstr ""
+"De hoofd wachtwoord hash is opnieuw gemaakt, er hoeft geen verdere actie "
+"ondernomen worden,"
-#: ../../../../inc/themes/classic/account.inc:460
-#: ../../../../inc/themes/material-blue/account.inc:486
-msgid "Seleccionar grupos secundarios"
-msgstr "Selecteer Secundaire Groepen"
+#: ../../../../inc/SP/Core/Crypt.class.php:195
+msgid "No se puede usar el módulo de encriptación"
+msgstr "De Crypto module kan niet geladen worden"
-#: ../../../../inc/themes/classic/account.inc:464
-#: ../../../../inc/themes/material-blue/account.inc:489
-msgid "Seleccionar usuarios"
-msgstr "Selecteer Gebruikers"
+#: ../../../../inc/SP/Core/Crypt.class.php:206
+msgid "Error al generar datos cifrados"
+msgstr "Fout bij het genereren van de versleutelde data"
-#: ../../../../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 "Resultaat"
+#: ../../../../inc/SP/Core/CryptPKI.class.php:48
+msgid "No es posible generar las claves RSA"
+msgstr "Niet mogelijk om de RSA sleutels te genereren"
-#: ../../../../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 Huidig"
+#: ../../../../inc/SP/Core/CryptPKI.class.php:114
+#: ../../../../inc/SP/Core/CryptPKI.class.php:116
+#: ../../../../inc/SP/Core/CryptPKI.class.php:147
+#: ../../../../inc/SP/Core/CryptPKI.class.php:149
+msgid "El archivo de clave no existe"
+msgstr "Het sleutel bestand bestaat niet"
-#: ../../../../inc/themes/classic/backup.inc:31
-#: ../../../../inc/themes/material-blue/backup.inc:31
-msgid "No hay backups para descargar"
-msgstr "Er zijn geen backups te downloaden"
+#: ../../../../inc/SP/Core/Events/EventDispatcherBase.class.php:80
+msgid "Observador no inicializado"
+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:90
-#: ../../../../inc/themes/classic/encryption.inc:94
-#: ../../../../inc/themes/classic/encryption.inc:159
-#: ../../../../inc/themes/classic/encryption.inc:163
-#: ../../../../inc/themes/classic/import.inc:12
-#: ../../../../inc/themes/classic/import.inc:33
-#: ../../../../inc/themes/classic/import.inc:86
-#: ../../../../inc/themes/classic/import.inc:90
-#: ../../../../inc/themes/classic/import.inc:116
-#: ../../../../inc/themes/classic/import.inc:138
-#: ../../../../inc/themes/classic/import.inc:152
-#: ../../../../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:104
-#: ../../../../inc/themes/material-blue/encryption.inc:108
-#: ../../../../inc/themes/material-blue/encryption.inc:186
-#: ../../../../inc/themes/material-blue/encryption.inc:190
-#: ../../../../inc/themes/material-blue/import.inc:97
-#: ../../../../inc/themes/material-blue/import.inc:101
-#: ../../../../inc/themes/material-blue/js-common.inc:11
+#: ../../../../inc/SP/Core/Events/EventDispatcherBase.class.php:110
+msgid "Es necesario un objeto"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Init.class.php:146
+msgid "Error en la verificación de la base de datos"
+msgstr "Fout bij het checken van de database"
+
+#: ../../../../inc/SP/Core/Init.class.php:275
+msgid "Sesion"
+msgstr "Sessie"
+
+#: ../../../../inc/SP/Core/Init.class.php:275
+#: ../../../../inc/SP/Core/Init.class.php:279
+msgid "La sesión no puede ser inicializada"
+msgstr "Sessie kan niet worden geinitaliseerd"
+
+#: ../../../../inc/SP/Core/Init.class.php:397
+#: ../../../../inc/SP/Core/Init.class.php:626
+msgid "Actualización"
+msgstr "Update"
+
+#: ../../../../inc/SP/Core/Init.class.php:398
+#: ../../../../inc/SP/Core/Init.class.php:627
+msgid "Actualización de versión realizada."
+msgstr "Versie update bijgewerkt"
+
+#: ../../../../inc/SP/Core/Init.class.php:418
+msgid "El directorio \"/config\" no existe"
+msgstr "De \"/config\" folder bestaat niet"
+
+#: ../../../../inc/SP/Core/Init.class.php:423
+msgid "No es posible escribir en el directorio \"config\""
+msgstr "Niet mogelijk om naar de \"/config\" te schrijven"
+
+#: ../../../../inc/SP/Core/Init.class.php:430
+#, fuzzy
+msgid "Los permisos del directorio \"/config\" son incorrectos"
+msgstr "De \"/config\" folder permissies zijn incorrect"
+
+#: ../../../../inc/SP/Core/Init.class.php:430
+msgid "Actual:"
+msgstr "Huidig:"
+
+#: ../../../../inc/SP/Core/Init.class.php:430
+msgid "Necesario: 750"
+msgstr "Nodig: 750"
+
+#: ../../../../inc/SP/Core/Init.class.php:514
+msgid "Aplicación en mantenimiento"
+msgstr "Applicatie in onderhoud"
+
+#: ../../../../inc/SP/Core/Init.class.php:514
+msgid "En breve estará operativa"
+msgstr "Een moment geduld"
+
+#: ../../../../inc/SP/Core/Init.class.php:547
+msgid "Finalizar sesión"
+msgstr "Uitloggen sessie"
+
+#: ../../../../inc/SP/Core/Init.class.php:549
+msgid "Tiempo inactivo"
+msgstr "Inactieve tijd"
+
+#: ../../../../inc/SP/Core/Init.class.php:550
+msgid "Tiempo total"
+msgstr "Totale tijd"
+
+#: ../../../../inc/SP/Core/Init.class.php:597
+msgid "La aplicación necesita actualizarse"
+msgstr "De applicatie dient bijgewerkt te worden"
+
+#: ../../../../inc/SP/Core/Init.class.php:597
+#, php-format
+msgid "Si es un administrador pulse en el enlace: %s"
+msgstr "Indien u een administrator bent klik dan op de link: %s"
+
+#: ../../../../inc/SP/Core/Init.class.php:597
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:57
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:48
+msgid "Actualizar"
+msgstr "Update"
+
+#: ../../../../inc/SP/Core/Init.class.php:615
+#: ../../../../inc/themes/material-blue/views/main/login.inc:64
+msgid "Acceder"
+msgstr "Aanmelden"
+
+#: ../../../../inc/SP/Core/Installer.class.php:132
+msgid "Indicar nombre de usuario admin"
+msgstr "Vul de admin gebruikersnaam in"
+
+#: ../../../../inc/SP/Core/Installer.class.php:133
+msgid "Usuario admin para acceso a la aplicación"
+msgstr "Administratie gebuiker om in te loggen in de applicatie"
+
+#: ../../../../inc/SP/Core/Installer.class.php:137
+msgid "Indicar la clave de admin"
+msgstr "Geef het admin wachtwoord op"
+
+#: ../../../../inc/SP/Core/Installer.class.php:138
+msgid "Clave del usuario admin de la aplicación"
+msgstr "Administratie gebruikers wachtwoord"
+
+#: ../../../../inc/SP/Core/Installer.class.php:142
+msgid "Indicar la clave maestra"
+msgstr "geef het hoofd wachtwoord op"
+
+#: ../../../../inc/SP/Core/Installer.class.php:143
+msgid "Clave maestra para encriptar las claves"
+msgstr "Hoofd wachtwoord om de wachtwoorden te versleutelen"
+
+#: ../../../../inc/SP/Core/Installer.class.php:147
+msgid "Clave maestra muy corta"
+msgstr "Hoofd wachtwoor is te kort"
+
+#: ../../../../inc/SP/Core/Installer.class.php:148
+msgid "La longitud de la clave maestra ha de ser mayor de 11 caracteres"
+msgstr "Het hoofd wachtwoord dient uit minimaal 11 karakters te bestaan"
+
+#: ../../../../inc/SP/Core/Installer.class.php:152
+msgid "Indicar el usuario de la BBDD"
+msgstr "Geef de database gebruiker op"
+
+#: ../../../../inc/SP/Core/Installer.class.php:153
+msgid "Usuario con permisos de administrador de la Base de Datos"
+msgstr "Een gebruiker met database administrator rechten"
+
+#: ../../../../inc/SP/Core/Installer.class.php:157
+msgid "Indicar la clave de la BBDD"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Installer.class.php:158
+msgid "Clave del usuario administrador de la Base de Datos"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Installer.class.php:162
+msgid "Indicar el nombre de la BBDD"
+msgstr "Geef de database naam op"
+
+#: ../../../../inc/SP/Core/Installer.class.php:163
+msgid "Nombre para la BBDD de la aplicación pej. syspass"
+msgstr "Applicatie database naam vb. syspass"
+
+#: ../../../../inc/SP/Core/Installer.class.php:167
+msgid "El nombre de la BBDD no puede contener \".\""
+msgstr "Database naam mag geen \".\" bevatten"
+
+#: ../../../../inc/SP/Core/Installer.class.php:168
+#, fuzzy
+msgid "Elimine los puntos del nombre de la Base de Datos"
+msgstr "Verwijder a.u.b punten in de database naam"
+
+#: ../../../../inc/SP/Core/Installer.class.php:172
+msgid "Indicar el servidor de la BBDD"
+msgstr "Geef de database server op"
+
+#: ../../../../inc/SP/Core/Installer.class.php:173
+msgid "Servidor donde se instalará la Base de Datos"
+msgstr "Server waar de database geinstalleerd wordt"
+
+#: ../../../../inc/SP/Core/Installer.class.php:192
+#: ../../../../inc/SP/Storage/MySQLHandler.class.php:127
+#: ../../../../inc/SP/Storage/MySQLHandler.class.php:130
+#: ../../../../inc/SP/Storage/MySQLHandler.class.php:147
+msgid "No es posible conectar con la BD"
+msgstr "Kan geen verbinding maken met de DB"
+
+#: ../../../../inc/SP/Core/Installer.class.php:193
+#: ../../../../inc/SP/Storage/MySQLHandler.class.php:127
+#: ../../../../inc/SP/Storage/MySQLHandler.class.php:131
+msgid "Compruebe los datos de conexión"
+msgstr "Check a.u.b de connetie parameters"
+
+#: ../../../../inc/SP/Core/Installer.class.php:226
+#, php-format
+msgid "No es posible comprobar el usuario de sysPass"
+msgstr "Niet mogelijk om de syspass gebruiker te controleren"
+
+#: ../../../../inc/SP/Core/Installer.class.php:227
+#, fuzzy
+msgid "Compruebe los permisos del usuario de conexión a la BD"
+msgstr "Check a.u.b de DB connectie gebruikers rechten"
+
+#: ../../../../inc/SP/Core/Installer.class.php:278
+#, php-format
+msgid "Error al crear el usuario de conexión a MySQL '%s'"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Installer.class.php:294
+msgid "La BBDD ya existe"
+msgstr "De database bestaat al"
+
+#: ../../../../inc/SP/Core/Installer.class.php:295
+msgid "Indique una nueva Base de Datos o elimine la existente"
+msgstr "Geef een nieuwe database of verwijder de huidige"
+
+#: ../../../../inc/SP/Core/Installer.class.php:298
+msgid "La BBDD no existe"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Installer.class.php:299
+msgid "Es necesario crearla y asignar los permisos necesarios"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Installer.class.php:310
+#: ../../../../inc/SP/Core/Installer.class.php:394
+#, php-format
+msgid "Error al crear la BBDD"
+msgstr "Fout bij het creeeren van de DB"
+
+#: ../../../../inc/SP/Core/Installer.class.php:311
+#: ../../../../inc/SP/Core/Installer.class.php:334
+msgid "Verifique los permisos del usuario de la Base de Datos"
+msgstr "Controleer database gebruiker rechten aub."
+
+#: ../../../../inc/SP/Core/Installer.class.php:333
+#, php-format
+msgid "Error al establecer permisos de la BBDD ('%s')"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Installer.class.php:366
+msgid "El archivo de estructura de la BBDD no existe"
+msgstr "Het database structuurbestand bestaat niet"
+
+#: ../../../../inc/SP/Core/Installer.class.php:367
+msgid "No es posible crear la BBDD de la aplicación. Descárguela de nuevo."
+msgstr ""
+"Niet mogelijk om de applicatie database aan te maken. Download hem opnieuw "
+"aub."
+
+#: ../../../../inc/SP/Core/Installer.class.php:375
+#, php-format
+msgid "Error al seleccionar la BBDD"
+msgstr "Fout tijdens het selecteren database"
+
+#: ../../../../inc/SP/Core/Installer.class.php:376
+msgid ""
+"No es posible usar la Base de Datos para crear la estructura. Compruebe los "
+"permisos y que no exista."
+msgstr ""
+"Kan de database niet gebruiken, controleer de login gegevens en de rechten."
+
+#: ../../../../inc/SP/Core/Installer.class.php:395
+msgid "Error al crear la estructura de la Base de Datos."
+msgstr "Fout tijdens het maken van de database structuur"
+
+#: ../../../../inc/SP/Core/Installer.class.php:419
+msgid "Error al crear el grupo \"admin\""
+msgstr "Fout tijdens het maken van de \"admin\" groep"
+
+#: ../../../../inc/SP/Core/Installer.class.php:420
+#: ../../../../inc/SP/Core/Installer.class.php:453
+#: ../../../../inc/SP/Core/Installer.class.php:473
+#: ../../../../inc/SP/Core/Installer.class.php:486
+msgid "Informe al desarrollador"
+msgstr "Waarschuw de ontwikkelaar"
+
+#: ../../../../inc/SP/Core/Installer.class.php:452
+msgid "Error al crear el perfil \"admin\""
+msgstr "Fout tijdens het maken van het \"admin\" profiel"
+
+#: ../../../../inc/SP/Core/Installer.class.php:472
+msgid "Error al crear el usuario \"admin\""
+msgstr "Fout tijdens het maken van de \"admin\" gebruiker"
+
+#: ../../../../inc/SP/Core/Installer.class.php:485
+msgid "Error al actualizar la clave maestra del usuario \"admin\""
+msgstr ""
+"Fout tijdens het veranderen van het Hoofd wachtoord voor de \"admin\" "
+"gebruiker"
+
+#: ../../../../inc/SP/Core/Plugin/PluginUtil.class.php:105
+#: ../../../../inc/SP/Core/Plugin/PluginUtil.class.php:107
+#: ../../../../inc/SP/Core/Plugin/PluginUtil.class.php:159
+#, php-format
+msgid "No es posible cargar el plugin \"%s\""
+msgstr ""
+
+#: ../../../../inc/SP/Core/Template.class.php:124
+#: ../../../../inc/SP/Core/Template.class.php:126
+#: ../../../../inc/SP/Html/DataGrid/DataGridBase.class.php:260
+#, php-format
+msgid "No es posible obtener la plantilla \"%s\" : %s"
+msgstr "Niet mogelijk om \"%s\" template: %s op te halen"
+
+#: ../../../../inc/SP/Core/Template.class.php:180
+#: ../../../../inc/SP/Core/Template.class.php:182
+#, php-format
+msgid "No es posible obtener la variable \"%s\""
+msgstr "Niet mogelijk om \"%s\" variable op te halen"
+
+#: ../../../../inc/SP/Core/Template.class.php:225
+#: ../../../../inc/SP/Core/Template.class.php:227
+#, php-format
+msgid "No es posible destruir la variable \"%s\""
+msgstr "Niet mogelijk om de \"%s\" variabele terug te zetten"
+
+#: ../../../../inc/SP/Core/Template.class.php:244
+msgid "La plantilla no contiene archivos"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:65
+#, fuzzy
+msgid "Error al aplicar la actualización de la Base de Datos"
+msgstr "Fout bij het updaten van de database"
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:66
+#: ../../../../inc/SP/Core/Upgrade.class.php:76
+msgid "Compruebe el registro de eventos para más detalles"
+msgstr "Check a.u.b de event log voor meer details"
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:75
+msgid "Error al aplicar la actualización auxiliar"
+msgstr "Fout tijdens het uitvoeren van de extra update"
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:92
+msgid "Actualizar BBDD"
+msgstr "Bijwerken DB"
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:98
+msgid "No es necesario actualizar la Base de Datos."
+msgstr "Database update niet nodig"
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:111
+msgid "Error al aplicar la actualización de la Base de Datos."
+msgstr "Fout bij het bijwerken van de database"
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:120
+msgid "Actualización de la Base de Datos realizada correctamente."
+msgstr "Database update succesvol"
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:241
+msgid "Actualizar Configuración"
+msgstr "Bijwerken configuratie"
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:279
+msgid "Error al actualizar la configuración"
+msgstr ""
+
+#: ../../../../inc/SP/Core/XmlExport.class.php:127
+msgid "Exportar XML"
+msgstr "XML Export"
+
+#: ../../../../inc/SP/Core/XmlExport.class.php:141
+msgid "Error al realizar la exportación de cuentas"
+msgstr "Fout opgetreden bij exporteren van accounts"
+
+#: ../../../../inc/SP/Core/XmlExport.class.php:149
+msgid "Exportación de cuentas realizada correctamente"
+msgstr "Export succesvol afgerond"
+
+#: ../../../../inc/SP/Core/XmlExport.class.php:474
+msgid "Error al crear el archivo XML"
+msgstr "Fout bij het creeeren van het XML bestand"
+
+#: ../../../../inc/SP/Forms/AccountForm.class.php:77
+msgid "Es necesaria una clave"
+msgstr "Sleutel nodig"
+
+#: ../../../../inc/SP/Forms/AccountForm.class.php:89
+msgid "Es necesario un nombre de cuenta"
+msgstr "Een gebruikers account is nodig"
+
+#: ../../../../inc/SP/Forms/AccountForm.class.php:91
+#: ../../../../inc/SP/Forms/CustomerForm.class.php:69
+msgid "Es necesario un nombre de cliente"
+msgstr "Een klantnaam is nodig"
+
+#: ../../../../inc/SP/Forms/AccountForm.class.php:93
+msgid "Es necesario un usuario"
+msgstr "Gebruikersnaam nodig"
+
+#: ../../../../inc/SP/Forms/AccountForm.class.php:95
+msgid "Es necesario una categoría"
+msgstr "Een categorie is benodigd"
+
+#: ../../../../inc/SP/Forms/ApiTokenForm.class.php:69
+msgid "Usuario no indicado"
+msgstr ""
+
+#: ../../../../inc/SP/Forms/ApiTokenForm.class.php:71
+msgid "Acción no indicada"
+msgstr ""
+
+#: ../../../../inc/SP/Forms/CategoryForm.class.php:69
+msgid "Es necesario un nombre de categoría"
+msgstr "Een categorie naam is nodig"
+
+#: ../../../../inc/SP/Forms/CustomFieldDefForm.class.php:69
+msgid "Nombre del campo no indicado"
+msgstr "Veld naam niet ingevuld"
+
+#: ../../../../inc/SP/Forms/CustomFieldDefForm.class.php:71
+msgid "Tipo del campo no indicado"
+msgstr "Veld type niet ingevuld"
+
+#: ../../../../inc/SP/Forms/CustomFieldDefForm.class.php:73
+msgid "Módulo del campo no indicado"
+msgstr "Veld module niet ingevuld"
+
+#: ../../../../inc/SP/Forms/GroupForm.class.php:69
+msgid "Es necesario un nombre de grupo"
+msgstr "Een groepnaam is nodig"
+
+#: ../../../../inc/SP/Forms/ProfileForm.class.php:69
+msgid "Es necesario un nombre de perfil"
+msgstr "Een profiel naam is nodig"
+
+#: ../../../../inc/SP/Forms/TagForm.class.php:69
+msgid "Es necesario un nombre de etiqueta"
+msgstr ""
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:83
+msgid "Es necesario un nombre de usuario"
+msgstr "Een gebruikersnaam is nodig"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:85
+msgid "Es necesario un login"
+msgstr "Een inlog is nodig"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:87
+msgid "Es necesario un perfil"
+msgstr "Een profiel is nodig"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:89
+msgid "Es necesario un grupo"
+msgstr "Een groep is nodig"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:91
+msgid "Es necesario un email"
+msgstr "Een emailadres is nodig"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:107
+msgid "La clave no puede estar en blanco"
+msgstr "Wachtwoorden mogen niet leeg zijn"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:121
+msgid "No es posible eliminar, usuario en uso"
+msgstr "Niet mogelijk om te verwijderen, gebruiker is bezet"
+
+#: ../../../../inc/SP/Http/XMLRPCResponseParse.class.php:68
+msgid "Respuesta XML-RPC inválida"
+msgstr ""
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:90
+#, php-format
+msgid "El número de campos es incorrecto (%d)"
+msgstr "Foutief aantal velden(%d)"
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:91
+#, php-format
+msgid "Compruebe el formato del archivo CSV en línea %s"
+msgstr "Check a.u.b. het CSV bestand op regel %s"
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:125
+#, php-format
+msgid "Cuenta importada: %s"
+msgstr "Account %s geimporteerd"
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:129
+msgid "Error importando cuenta"
+msgstr "Fout bij het importeren van het account"
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:130
+#, php-format
+msgid "Error procesando línea %s"
+msgstr "Fout bij het verwerken op regel %s"
+
+#: ../../../../inc/SP/Import/FileImport.class.php:109
+msgid "Archivo no subido correctamente"
+msgstr "Bestand succesvol geupload"
+
+#: ../../../../inc/SP/Import/FileImport.class.php:109
+msgid "Verifique los permisos del usuario del servidor web"
+msgstr "Controleer de gebruikers permissies van de web server"
+
+#: ../../../../inc/SP/Import/FileImport.class.php:120
+#, fuzzy
+msgid "Compruebe la extensión del archivo"
+msgstr "Check a.u.b de bestandsextensie"
+
+#: ../../../../inc/SP/Import/FileImport.class.php:136
+#, fuzzy
+msgid "Compruebe la configuración de PHP para subir archivos"
+msgstr "Check de PHP configuratie voor het uploaden van bestanden"
+
+#: ../../../../inc/SP/Import/FileImport.class.php:156
+#: ../../../../inc/SP/Import/FileImport.class.php:176
+#, fuzzy
+msgid "Compruebe los permisos del directorio temporal"
+msgstr "Check de tijdelijke folder"
+
+#: ../../../../inc/SP/Import/Import.class.php:80
+#, php-format
+msgid "Tipo mime no soportado (\"%s\")"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Import.class.php:81
+#, fuzzy
+msgid "Compruebe el formato del archivo"
+msgstr "Check a.u.b de "
+
+#: ../../../../inc/SP/Import/Import.class.php:89
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:66
+#: ../../../../js/strings.js.php:79
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:64
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:129
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:217
+#: ../../../../inc/themes/material-blue/views/config/import.inc:131
msgid "Ayuda"
msgstr "Help"
-#: ../../../../inc/themes/classic/backup.inc:50
-#: ../../../../inc/themes/material-blue/backup.inc:52
+#: ../../../../inc/SP/Import/Import.class.php:95
+#: ../../../../inc/SP/Import/Import.class.php:101
+msgid "Importación finalizada"
+msgstr "Import succesvol"
+
+#: ../../../../inc/SP/Import/ImportBase.class.php:116
+msgid "Id de categoría no definido. No es posible importar cuenta."
+msgstr ""
+
+#: ../../../../inc/SP/Import/ImportBase.class.php:119
+msgid "Id de cliente no definido. No es posible importar cuenta."
+msgstr ""
+
+#: ../../../../inc/SP/Import/SyspassImport.class.php:70
+msgid "Clave de encriptación no indicada"
+msgstr ""
+
+#: ../../../../inc/SP/Import/XmlImport.class.php:64
+msgid "Inicio"
+msgstr "Start"
+
+#: ../../../../inc/SP/Import/XmlImport.class.php:65
+#, php-format
+msgid "Formato detectado: %s"
+msgstr ""
+
+#: ../../../../inc/SP/Import/XmlImportBase.class.php:83
+msgid "No es posible procesar el archivo XML"
+msgstr "XML bestand kan niet verwerkt worden"
+
+#: ../../../../inc/SP/Import/XmlImportBase.class.php:111
+msgid "Archivo XML no soportado"
+msgstr "XML bestand wordt niet ondersteund"
+
+#: ../../../../inc/SP/Import/XmlImportBase.class.php:112
+msgid "No es posible detectar la aplicación que exportó los datos"
+msgstr "Kon de applicatie waar de data van geexporteerd was niet vinden"
+
+#: ../../../../inc/SP/Import/XmlImportBase.class.php:131
+msgid "Formato de XML inválido"
+msgstr "Ongeldig XML formaat"
+
+#: ../../../../inc/SP/Import/XmlImportBase.class.php:131
+#, php-format
+msgid "El nodo \"%s\" no existe"
+msgstr ""
+
+#: ../../../../inc/SP/Log/Email.class.php:65
+msgid "N/D"
+msgstr "N/A"
+
+#: ../../../../inc/SP/Log/Email.class.php:67
+msgid "Realizado por"
+msgstr "Uitgevoerd door"
+
+#: ../../../../inc/SP/Log/Email.class.php:84
+msgid "Enviar Email"
+msgstr "Verstuur Email"
+
+#: ../../../../inc/SP/Log/Email.class.php:88
+msgid "Correo enviado"
+msgstr "Email Verstuurd"
+
+#: ../../../../inc/SP/Log/Email.class.php:90
+msgid "Error al enviar correo"
+msgstr "Fout bij versturen email"
+
+#: ../../../../inc/SP/Log/Email.class.php:94
+msgid "Destinatario"
+msgstr "Ontvanger"
+
+#: ../../../../inc/SP/Log/Email.class.php:97
+msgid "CC"
+msgstr "CC"
+
+#: ../../../../inc/SP/Log/Log.class.php:90
+msgid "Vaciar Eventos"
+msgstr "Schoon events op"
+
+#: ../../../../inc/SP/Log/Log.class.php:90
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:137
+msgid "Vaciar registro de eventos"
+msgstr "Event log opschonen"
+
+#: ../../../../inc/SP/Log/LogUtil.class.php:43
+#, php-format
+msgid "Extensión '%s' no cargada"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:59
+msgid "Categoría duplicada"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:72
+msgid "Error al crear la categoría"
+msgstr "Fout bij het creeeren van de categorie"
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:131
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:130
+msgid "No es posible eliminar"
+msgstr "Fout bij verwijderen"
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:137
+msgid "Categoría no encontrada"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:148
+msgid "Error al eliminar la categoría"
+msgstr "Fout bij verwijderen categorie"
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:212
+msgid "Nombre de categoría duplicado"
+msgstr "Dubbele categorie naam"
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:232
+msgid "Error al actualizar la categoría"
+msgstr "Fout bij wijzigen categorie"
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:235
+msgid "Modificar Categoría"
+msgstr "Wijzig Categorie"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:71
+msgid "Error al crear el campo personalizado"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:102
+msgid "Error al eliminar el campo personalizado"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:147
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:209
+msgid "Error al actualizar el campo personalizado"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:180
+msgid "Campo personalizado no encontrado"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:232
+msgid "No se encontraron campos personalizados"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:61
+msgid "Texto"
+msgstr "Tekst"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:65
+msgid "Número"
+msgstr "Nummer"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:66
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:60
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:77
+msgid "Email"
+msgstr "Emailadres"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:67
+msgid "Teléfono"
+msgstr "Telefoon"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:68
+msgid "Link"
+msgstr "Link"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:69
+msgid "Color"
+msgstr "Kleur"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:80
+msgid "No hay datos de campos personalizados"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:85
+msgid "Actualizando datos encriptados"
+msgstr "Bijwerken encrypted data"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:113
+#, fuzzy
+msgid "Registros no actualizados"
+msgstr "Geen bijgewerkte velden"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:114
+msgid "Registros actualizados"
+msgstr "Gegevvens bijgewerkt"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:187
+msgid "Error al migrar campos personalizados"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:58
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:212
+#, fuzzy
+msgid "Cliente duplicado"
+msgstr "Dubbele klant"
+
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:74
+msgid "Error al crear el cliente"
+msgstr "Fout bij aanmaken klant"
+
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:136
+msgid "Cliente no encontrado"
+msgstr "Klant niet gevonden"
+
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:147
+#, fuzzy
+msgid "Error al eliminar el cliente"
+msgstr "Fout bij verwijderen klant"
+
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:232
+msgid "Error al actualizar el cliente"
+msgstr "Fout bij bijwerken klant"
+
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:235
+msgid "Actualizar Cliente"
+msgstr "Bijwerken Klant"
+
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:100
+msgid "Archivo subido"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Files/FileUtil.class.php:102
+msgid "Error al eliminar archivos asociados a la cuenta"
+msgstr "Error bij verwijderen account's bestanden"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:56
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:210
+msgid "Nombre de grupo duplicado"
+msgstr "Dubbele groepnaam"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:68
+#, fuzzy
+msgid "Error al crear el grupo"
+msgstr "Fout bij aanmaken groep"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:82
+msgid "Error al añadir los usuarios del grupo"
+msgstr "Niet mogelijk om gebruikers toe te voegen aan de groep"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:123
+msgid "Grupo en uso"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:136
+#, fuzzy
+msgid "Error al eliminar el grupo"
+msgstr "Fout bij verwijderen groep"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:144
+#: ../../../../inc/SP/Mgmt/Groups/GroupUsers.class.php:93
+msgid "Error al eliminar los usuarios del grupo"
+msgstr "Fout bij verwijderen groep gebruikers"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:225
+#, fuzzy
+msgid "Error al actualizar el grupo"
+msgstr "Fout bij bijwerken groep"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:228
+msgid "Actualizar Grupo"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:237
+msgid "Error al actualizar los usuarios del grupo"
+msgstr "Niet mogelijk om groep gebruikers bij te werken"
+
+#: ../../../../inc/SP/Mgmt/Groups/GroupAccounts.class.php:68
+msgid "Error al eliminar grupos asociados a la cuenta"
+msgstr "Error bij verwijderen account's groepen"
+
+#: ../../../../inc/SP/Mgmt/Groups/GroupAccounts.class.php:100
+msgid "Error al actualizar los grupos secundarios"
+msgstr "Fout bij het updaten van de secundaire groep"
+
+#: ../../../../inc/SP/Mgmt/Groups/GroupUsers.class.php:72
+msgid "Error al asignar los usuarios al grupo"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:68
+msgid "Error al crear la notificación"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:90
+msgid "Error al eliminar la notificación"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:128
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:242
+msgid "Error al modificar la notificación"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:163
+msgid "Error al obtener la notificación"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:194
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:280
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:314
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:349
+msgid "Error al obtener las notificaciones"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:61
+msgid "Error al crear el plugin"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:66
+msgid "Nuevo Plugin"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:90
+msgid "Error al eliminar el plugin"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:93
+msgid "Eliminar Plugin"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:124
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:233
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:263
+msgid "Error al actualizar el plugin"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:127
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:236
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:266
+msgid "Modificar Plugin"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:238
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:56
+msgid "Habilitado"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:238
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:55
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:154
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:157
+msgid "Deshabilitado"
+msgstr "Uitgeschakeld"
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:59
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:204
+msgid "Nombre de perfil duplicado"
+msgstr "Dubbele profiel naam"
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:73
+msgid "Error al crear perfil"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:123
+msgid "Perfil en uso"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:136
+msgid "Error al eliminar perfil"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:222
+msgid "Error al modificar perfil"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:225
+msgid "Modificar Perfil"
+msgstr "Bewerk Profiel"
+
+#: ../../../../inc/SP/Mgmt/Profiles/ProfileUtil.class.php:52
+msgid "Migrar Perfiles"
+msgstr "Migreer profielen"
+
+#: ../../../../inc/SP/Mgmt/Profiles/ProfileUtil.class.php:83
+msgid "Error al obtener perfiles"
+msgstr "Fout bij het ophalen van profielen"
+
+#: ../../../../inc/SP/Mgmt/Profiles/ProfileUtil.class.php:143
+msgid "Operación realizada correctamente"
+msgstr "Operatie succesvol"
+
+#: ../../../../inc/SP/Mgmt/Profiles/ProfileUtil.class.php:145
+msgid "Fallo al realizar la operación"
+msgstr "Fout bij het uitvoeren van het process"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:101
+msgid "Error al actualizar enlace"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:114
+msgid "Enlace ya creado"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:137
+msgid "Error al crear enlace"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:140
+msgid "Nuevo Enlace"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:192
+msgid "Error al eliminar enlace"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:230
+msgid "Error al renovar enlace"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:233
+msgid "Actualizar Enlace"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:267
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:366
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:400
+msgid "Error al obtener enlace"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:318
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLinkSearch.class.php:72
+msgid "ON"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:318
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLinkSearch.class.php:72
+msgid "OFF"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:53
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:132
+msgid "Etiqueta duplicada"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:65
+msgid "Error al crear etiqueta"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:119
+msgid "Error al eliminar etiqueta"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:145
+msgid "Error al actualizar etiqueta"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:185
+msgid "Error al obtener etiqueta"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:57
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:232
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:69
+msgid "Login/email de usuario duplicados"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:96
+#, fuzzy
+msgid "Error al crear el usuario"
+msgstr "Fout bij aanmaken gebruiker"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:105
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:274
+msgid "No se pudo realizar la petición de cambio de clave."
+msgstr "Kon de aanvraag voor het veranderen van het wachtwoord niet uitvoeren."
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:158
+#, fuzzy
+msgid "Error al eliminar el usuario"
+msgstr "Fout bij verwijderen gebruiker"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:219
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:428
+msgid "Error al obtener los datos del usuario"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:265
+#, fuzzy
+msgid "Error al actualizar el usuario"
+msgstr "Fout bij bijwerken gebruiker"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:270
+msgid "Modificar Usuario"
+msgstr "Bewerk Gebruiker"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:336
+msgid "Error al obtener los usuarios"
+msgstr "Fout bij het ophalen van gebruikers"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:375
+#: ../../../../inc/SP/Mgmt/Users/UserPass.class.php:145
+#, fuzzy
+msgid "Error al modificar la clave"
+msgstr "Fout bij wachtwoord wijzigen"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:100
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:54
+msgid "Usuario de LDAP"
+msgstr "LDAP Gebruiker"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:111
+#, fuzzy
+msgid "Error al guardar los datos de LDAP"
+msgstr "Fout bij opslaan van LDAP gebruikers data"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:117
+msgid "Activación Cuenta"
+msgstr "Account Activatie"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:118
+msgid "Su cuenta está pendiente de activación."
+msgstr "Uw account is in behandeling"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:119
+msgid "En breve recibirá un email de confirmación."
+msgstr "Uw krijgt binnenkort een bevestigings email"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:124
+msgid "Nuevo usuario de LDAP"
+msgstr "Nieuwe LDAP Gebruiker"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:168
+msgid "Error al actualizar la clave del usuario en la BBDD"
+msgstr "Fout bij bijwerken gebruiker wachtwoord in de Database"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdapSync.class.php:57
+msgid "Sincronización LDAP"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdapSync.class.php:96
+#, php-format
+msgid "Creando usuario '%s (%s)'"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdapSync.class.php:107
+msgid "No se encontraron objetos para sincronizar"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdapSync.class.php:113
+msgid "Sincronización finalizada"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Users/UserMigrate.class.php:97
+msgid "Error al migrar cuenta de usuario"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Users/UserMigrate.class.php:122
+msgid "Error al obtener grupo de usuarios"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Users/UserMigrate.class.php:133
+msgid "Migrar Grupos"
+msgstr "Migreer Groepen"
+
+#: ../../../../inc/SP/Mgmt/Users/UserMigrate.class.php:133
+msgid "Error al migrar grupo del usuario"
+msgstr "Fout bij het migreren van de Gebruikers Groep"
+
+#: ../../../../inc/SP/Mgmt/Users/UserPassRecover.class.php:104
+msgid "Error en comprobación de hash"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Users/UserPassRecover.class.php:106
+msgid "Hash inválido o expirado"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Users/UserPassRecover.class.php:155
+msgid "Error al generar el hash de recuperación"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Users/UserPreferences.class.php:78
+msgid "Error al actualizar preferencias"
+msgstr "Fout bij updaten voorkeuren"
+
+#: ../../../../inc/SP/Mgmt/Users/UserPreferencesUtil.class.php:58
+msgid "Actualizando preferencias"
+msgstr ""
+
+#: ../../../../inc/SP/Storage/XmlHandler.class.php:83
+#, php-format
+msgid "No es posible leer/escribir el archivo: %s"
+msgstr ""
+
+#: ../../../../inc/SP/Storage/XmlHandler.class.php:159
+msgid "No hay elementos para guardar"
+msgstr ""
+
+#: ../../../../inc/SP/Util/Checks.class.php:83
+msgid "Versión de PHP requerida >= "
+msgstr "Vereiste PHP versie >="
+
+#: ../../../../inc/SP/Util/Checks.class.php:84
+msgid ""
+"Actualice la versión de PHP para que la aplicación funcione correctamente"
+msgstr "Update a.u.b de PHP versie om gebruik te kunnen maken van SysPass"
+
+#: ../../../../inc/SP/Util/Checks.class.php:122
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:263
+msgid "Módulo no disponible"
+msgstr "Module niet beschikbaar"
+
+#: ../../../../inc/SP/Util/Checks.class.php:123
+msgid "Sin este módulo la aplicación puede no funcionar correctamente."
+msgstr "Zonder deze module kan de applicatie niet goed werken"
+
+#: ../../../../inc/SP/Util/Connection.class.php:120
+msgid "Socket no inicializado"
+msgstr ""
+
+#: ../../../../inc/SP/Util/Connection.class.php:127
+msgid "Error al enviar datos"
+msgstr ""
+
+#: ../../../../inc/SP/Util/Json.class.php:63
+msgid "Error de codificación"
+msgstr "Codering Fout"
+
+#: ../../../../inc/SP/Util/Util.class.php:314
+msgid "Respuesta"
+msgstr ""
+
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApi.class.php:68
+msgid "Fallo de autentificación"
+msgstr ""
+
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApiBase.class.php:173
+msgid "Error al realizar la consulta"
+msgstr ""
+
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApiBase.class.php:215
+msgid "URL de conexión no establecida"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:46
+msgid "Añadir"
+msgstr "Voeg toe"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:47
+msgid "Ver Detalles"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:49
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:65
+msgid "Editar"
+msgstr "Wijzig"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:50
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:80
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:79
+msgid "Eliminar"
+msgstr "Verwijder"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:51
+msgid "Cambiar Clave"
+msgstr "Wijzig Wachtwoord"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:52
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:142
+msgid "Admin Aplicación"
+msgstr "Applicatie Admin"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:53
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:149
+msgid "Admin Cuentas"
+msgstr "Account Admin"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:58
+msgid "Copiar"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:63
+#: ../../../../inc/themes/material-blue/views/main/error.inc:12
+#: ../../../../inc/themes/material-blue/views/main/error.inc:13
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:56
+msgid "Volver"
+msgstr "Terug"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:64
+msgid "Restaurar"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:65
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:109
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:145
+msgid "Guardar"
+msgstr "Opslaan"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:67
+msgid "Limpiar"
+msgstr "Opschonen"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:68
+msgid "Realizar"
+msgstr "Uitvoeren"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:69
+msgid "Descargar"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:71
+msgid "Comprobar"
+msgstr "Check"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:78
+msgid "Crítico"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:83
+msgid "Página anterior"
+msgstr "Vorige pagina"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:84
+msgid "Página siguiente"
+msgstr "Volgende pagina"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:85
+msgid "Primera página"
+msgstr "Eerste pagina"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:86
+msgid "Última página"
+msgstr "Laatste pagina"
+
+#: ../../../../js/strings.js.php:26
+#, fuzzy
+msgid "Error en la consulta"
+msgstr "Fout gedurende de query"
+
+#: ../../../../js/strings.js.php:27
+msgid "Ha ocurrido un error"
+msgstr "Er is een fout opgetreden"
+
+#: ../../../../js/strings.js.php:28
+#: ../../../../inc/themes/material-blue/views/main/login.inc:77
+msgid "Sesión finalizada"
+msgstr "Sessie afgerond"
+
+#: ../../../../js/strings.js.php:29
+msgid "Borrar la cuenta?"
+msgstr "Verwijder account?"
+
+#: ../../../../js/strings.js.php:30
+msgid "Borrar el usuario?"
+msgstr "Verwijder Gebruiker"
+
+#: ../../../../js/strings.js.php:31
+msgid "Guarde la configuración para que sea efectiva"
+msgstr "Je moet de configuratie opslaan voordat de wijzigingen gebruikt worden"
+
+#: ../../../../js/strings.js.php:32
+msgid "Clave Generada"
+msgstr "Genereer Wachtwoord"
+
+#: ../../../../js/strings.js.php:33
+msgid "Nivel alto"
+msgstr "Hoger niveau"
+
+#: ../../../../js/strings.js.php:34
+msgid "Nivel medio"
+msgstr "Gemiddeld niveau"
+
+#: ../../../../js/strings.js.php:35
+msgid "Nivel bajo"
+msgstr "Laag niveau"
+
+#: ../../../../js/strings.js.php:36
+msgid "Nivel muy alto"
+msgstr "Erg hoog niveau"
+
+#: ../../../../js/strings.js.php:37
+msgid "Utilizar al menos 8 caracteres"
+msgstr "U dient minimaal 8 karakters op te geven"
+
+#: ../../../../js/strings.js.php:38
+msgid "Borrar elemento?"
+msgstr "Verwijder item"
+
+#: ../../../../js/strings.js.php:39
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:8
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:17
+msgid "Página no encontrada"
+msgstr "Pagina niet gevonden"
+
+#: ../../../../js/strings.js.php:40
+msgid "Archivo no soportado para visualizar"
+msgstr "Bestand niet geschikt voor voorbeeld weergave"
+
+#: ../../../../js/strings.js.php:41
+msgid "Eliminar archivo?"
+msgstr "Verwijder Bestand?"
+
+#: ../../../../js/strings.js.php:42
+msgid "Su navegador no soporta subir archivos con HTML5"
+msgstr "Uw browser heeft geen ondersteuning voor HTML5 uploads"
+
+#: ../../../../js/strings.js.php:43
+msgid "Demasiados archivos"
+msgstr "Teveel bestanden"
+
+#: ../../../../js/strings.js.php:44
+msgid "Tamaño de archivo no permitido"
+msgstr "Bestandsgrootte niet toegestaan"
+
+#: ../../../../js/strings.js.php:46
+msgid "Vaciar el registro de eventos?"
+msgstr "Opschonen van event log?"
+
+#: ../../../../js/strings.js.php:47
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:75
+#: ../../../../inc/themes/material-blue/views/config/import.inc:51
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:200
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:67
+msgid "Seleccionar Grupo"
+msgstr "Selecteer Groep"
+
+#: ../../../../js/strings.js.php:48
+#: ../../../../inc/themes/material-blue/views/config/import.inc:27
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:222
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:14
+msgid "Seleccionar Usuario"
+msgstr "Selecteer Gebruiker"
+
+#: ../../../../js/strings.js.php:49
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:53
+msgid "Seleccionar Perfil"
+msgstr "Selecteer Profiel"
+
+#: ../../../../js/strings.js.php:50
+#: ../../../../inc/themes/material-blue/views/account/account.inc:56
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:49
+msgid "Seleccionar Cliente"
+msgstr "Selecteer Klant"
+
+#: ../../../../js/strings.js.php:51
+#: ../../../../inc/themes/material-blue/views/account/account.inc:77
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:57
+msgid "Seleccionar Categoría"
+msgstr "Selecteer Categorie"
+
+#: ../../../../js/strings.js.php:52
+msgid "Sin resultados"
+msgstr "Geen resultaten"
+
+#: ../../../../js/strings.js.php:53
+msgid "Opciones de clave"
+msgstr "Wachtwoord opties"
+
+#: ../../../../js/strings.js.php:54
+msgid "Generar clave aleatoria"
+msgstr "Genereer willekeurig wachtwoord"
+
+#: ../../../../js/strings.js.php:55
+msgid "Complejidad"
+msgstr "Complexiteit"
+
+#: ../../../../js/strings.js.php:56
+msgid "Restablecer"
+msgstr "Reset"
+
+#: ../../../../js/strings.js.php:57
+msgid "Nivel de fortaleza de la clave"
+msgstr "Wachtwoord sterkte"
+
+#: ../../../../js/strings.js.php:58
+msgid "Mostrar Clave"
+msgstr "Toon Wachtwoord"
+
+#: ../../../../js/strings.js.php:59
+#: ../../../../inc/themes/material-blue/views/account/viewpass.inc:13
+msgid "Copiar Usuario"
+msgstr "Kopieer Gebruikersnaam"
+
+#: ../../../../js/strings.js.php:60
+#: ../../../../inc/themes/material-blue/views/account/viewpass.inc:24
+msgid "Copiar Clave"
+msgstr "Kopieer Wachtwoord"
+
+#: ../../../../js/strings.js.php:61
+msgid "Incluir Números"
+msgstr "Inclusief Nummers"
+
+#: ../../../../js/strings.js.php:62
+msgid "Incluir Mayúsculas"
+msgstr "Inclusief Hoofdletters"
+
+#: ../../../../js/strings.js.php:63
+msgid "Incluir Símbolos"
+msgstr "Inclusief Symbolen"
+
+#: ../../../../js/strings.js.php:64
+msgid "Longitud"
+msgstr "Lengte"
+
+#: ../../../../js/strings.js.php:65
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:27
+msgid "Seleccionar Acción"
+msgstr "Selecteer Actie"
+
+#: ../../../../js/strings.js.php:66
+msgid "SI"
+msgstr "JA"
+
+#: ../../../../js/strings.js.php:67
+msgid "NO"
+msgstr "NEE"
+
+#: ../../../../js/strings.js.php:68
+msgid "Aceptar"
+msgstr "Accepteer"
+
+#: ../../../../js/strings.js.php:69
+msgid "Cancelar"
+msgstr "Annuleer"
+
+#: ../../../../js/strings.js.php:70
+msgid "Clave Copiada al Portapapeles"
+msgstr "Wachtwoord gekopieerd naar klembord"
+
+#: ../../../../js/strings.js.php:71
+msgid "Error al copiar al portapapeles"
+msgstr "Fout bij kopieren naar klembord"
+
+#: ../../../../js/strings.js.php:73
+msgid "Recibir notificaciones?"
+msgstr ""
+
+#: ../../../../js/strings.js.php:74
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:133
+msgid "Marcar Favorito"
+msgstr ""
+
+#: ../../../../js/strings.js.php:75
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:123
+msgid "Eliminar Favorito"
+msgstr ""
+
+#: ../../../../js/strings.js.php:76
+msgid "Limpiar Selección"
+msgstr ""
+
+#: ../../../../js/strings.js.php:77
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:68
+msgid "Mostrar Favoritos"
+msgstr ""
+
+#: ../../../../js/strings.js.php:78
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:68
+msgid "Mostrar Todos"
+msgstr ""
+
+#: ../../../../js/strings.js.php:80
+msgid "Sin cambios"
+msgstr "Geen wijzigingen"
+
+#: ../../../../js/strings.js.php:81
+msgid "Ahora"
+msgstr ""
+
+#: ../../../../js/strings.js.php:82
+msgid ""
+"Este proceso importará los usuarios de LDAP detectados. Desea continuar?"
+msgstr ""
+
+#: ../../../../js/strings.js.php:83
+msgid "Esta acción restablecerá todos los datos del plugin. Desea continuar?"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:67
+#: ../../../../inc/themes/material-blue/views/account/account.inc:130
+#: ../../../../inc/themes/material-blue/views/account/account.inc:137
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:105
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:112
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:47
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:54
+#: ../../../../inc/themes/material-blue/views/main/install.inc:62
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:42
+msgid "Clave (repetir)"
+msgstr "Wachtwoord (Herhaal)"
+
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:78
+#: ../../../../inc/themes/material-blue/views/account/account.inc:144
+#: ../../../../inc/themes/material-blue/views/account/details.inc:89
+msgid "Fecha Caducidad Clave"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:88
+#: ../../../../inc/themes/material-blue/views/account/account.inc:155
+msgid "Seleccionar Fecha"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:102
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:101
+#: ../../../../inc/themes/material-blue/views/account/request.inc:42
+msgid "Atrás"
+msgstr "Terug"
+
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:39
+#: ../../../../inc/themes/material-blue/views/account/account.inc:160
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:140
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:119
+msgid "Notas"
+msgstr "Notities"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:9
+msgid "Accesos"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:20
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:104
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:107
+msgid "Permisos"
+msgstr "Permissies"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:26
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:47
+msgid "Seleccionar Usuarios"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:40
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:62
+msgid "Hablitar edición"
+msgstr "Activeer Wijzigen"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:48
+msgid "Seleccionar Grupos"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:72
+#: ../../../../inc/themes/material-blue/views/account/details.inc:30
+msgid "Grupo Principal"
+msgstr "Hoofd Groep"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:86
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:111
+msgid "Cuenta Privada"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:91
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:100
+msgid "Privada"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:11
+msgid "Histórico"
+msgstr "Geschiedenis"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:175
+msgid "Seleccionar Etiquetas"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:186
+msgid "Cuenta Vinculada"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:190
+msgid "Seleccionar Cuenta"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:202
+msgid "Historial"
+msgstr "Geschiedenis"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:207
+msgid "Seleccionar fecha"
+msgstr "Selecteer data"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:219
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:185
+msgid "Última Modificación"
+msgstr "Laatste Aanpassing"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:226
+#: ../../../../inc/themes/material-blue/views/account/account.inc:229
+msgid "Enlace Público"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:31
+msgid "Crear Enlace Público"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:93
+msgid "Ver Actual"
+msgstr "Bekijk Huidig"
+
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:115
+msgid "Modificar Cuenta"
+msgstr "Bewerk Account"
+
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:137
+msgid "Restaurar cuenta desde este punto"
+msgstr "Herstel account vanaf dit punt"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:8
+msgid "Detalles"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:22
+msgid "Fecha Alta"
+msgstr "Datum toegevoegd"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:26
+msgid "Creador"
+msgstr "Maker"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:35
+msgid "Usuarios Secundarios"
+msgstr "Secundaire Gebruikers"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:55
+msgid "Grupos Secundarios"
+msgstr "Secundaire Groepen"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:76
+msgid "Fecha Edición"
+msgstr "Datum Aangepast"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:80
+msgid "Editor"
+msgstr "Bewerker"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:85
+msgid "Fecha de Clave"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/account/files.inc:37
+#, php-format
+msgid "Soltar archivos aquí (max. 5) o click para seleccionar"
+msgstr "Drop bestanden hier (max. 5) of klik om te selecteren"
+
+#: ../../../../inc/themes/material-blue/views/account/files.inc:37
+#, php-format
+msgid "Tamaño máximo de archivo: %d MB"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/account/linkedAccounts.inc:3
+msgid "Cuentas Vinculadas"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/account/request.inc:4
+msgid "Solicitar Modificación de Cuenta"
+msgstr "Aanvraag Account Modificatie"
+
+#: ../../../../inc/themes/material-blue/views/account/request.inc:20
+msgid "Petición"
+msgstr "Aanvraag"
+
+#: ../../../../inc/themes/material-blue/views/account/request.inc:26
+msgid "Descripción de la petición"
+msgstr "Aanvraag beschrijving"
+
+#: ../../../../inc/themes/material-blue/views/account/request.inc:49
+msgid "Enviar"
+msgstr "Verstuur"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/index.inc:11
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:11
+msgid "No se encontraron registros"
+msgstr "Geen records gevonden"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:24
+msgid "Buscar en Wiki"
+msgstr "Zoek in de Wiki"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:71
+msgid "Abrir enlace a"
+msgstr "Open link aar"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:95
+msgid "Clave Caducada"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:149
+msgid "Archivos adjuntos"
+msgstr "Bijlages"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:159
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:170
+msgid "Enlace a Wiki"
+msgstr "Link naar Wiki"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:162
+msgid "Ver en Wiki"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:22
+msgid "Parámetros especiales:"
+msgstr "Speciale parameters"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:25
+msgid "Buscar cuentas a las que 'login' tenga acceso"
+msgstr "Zoek accounts met 'Login' toegangsrechten."
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:27
+msgid "Buscar cuentas a las que 'group_name' tenga acceso"
+msgstr "Zoek accounts met 'groep_naam' toegangsrechten."
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:29
+msgid "Buscar cuentas con archivos con el nombre 'file_name'"
+msgstr ""
+" Zoeken naar accounts waarbij een bestand is met de naam ' bestandsnaam ' "
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:30
+msgid "Buscar cuentas con la etiqueta 'tag_name'"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:31
+msgid "Buscar cuentas con la clave caducada"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:39
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:43
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:114
+msgid "Búsqueda global"
+msgstr "Globale zoek opdracht"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:71
+msgid "Filtrar Favoritos"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:85
+msgid "Cuentas por página"
+msgstr "Accounts per pagina"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:91
+msgid "Más Filtros"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:96
+msgid "Seleccionar Etiqueta"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:13
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:92
+msgid "Resultado"
+msgstr "Resultaat"
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:21
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:100
+msgid "Descargar Actual"
+msgstr "Download Huidig"
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:28
+msgid "Copia BBDD"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:35
+msgid "Copia sysPass"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:38
+#, fuzzy
+msgid "No hay backups para descargar"
+msgstr "Er zijn geen backups te downloaden"
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:65
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."
@@ -3335,8 +4246,7 @@ msgstr ""
"De backup zorgt ervoor dat de configuratie en database kan worden "
"opgeslagen. "
-#: ../../../../inc/themes/classic/backup.inc:52
-#: ../../../../inc/themes/material-blue/backup.inc:54
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:67
msgid ""
"Con este método es posible guardar todos los datos de sysPass en otro lugar "
"o utilizarlos para hacer la aplicación portable."
@@ -3344,31 +4254,26 @@ msgstr ""
"Deze optie zorgt ervoor dat alle syspass data extern kan worden opgeslagen "
"en gebruikt"
-#: ../../../../inc/themes/classic/backup.inc:60
-#: ../../../../inc/themes/classic/backup.inc:126
-#: ../../../../inc/themes/material-blue/backup.inc:64
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:82
msgid "Exportar Cuentas"
msgstr "Exporteer Accounts"
-#: ../../../../inc/themes/classic/backup.inc:84
-#: ../../../../inc/themes/material-blue/backup.inc:88
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:111
+#, fuzzy
msgid "No hay archivos XML para descargar"
msgstr "Er zijn geen bestanden te downloaden"
-#: ../../../../inc/themes/classic/backup.inc:90
-#: ../../../../inc/themes/material-blue/backup.inc:94
-#: ../../../../inc/themes/material-blue/backup.inc:101
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:117
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:125
msgid "Clave de Exportación"
msgstr "Exporteer Wachtwoord"
-#: ../../../../inc/themes/classic/backup.inc:98
-#: ../../../../inc/themes/material-blue/backup.inc:107
-#: ../../../../inc/themes/material-blue/backup.inc:114
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:131
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:139
msgid "Clave de Exportación (repetir)"
msgstr "Exporteer Wachtwoord (herhaal)"
-#: ../../../../inc/themes/classic/backup.inc:118
-#: ../../../../inc/themes/material-blue/backup.inc:134
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:161
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."
@@ -3376,21 +4281,18 @@ msgstr ""
"De gebruikers export zorgt ervoor dat deze kunnen worden geëxporteerd voor "
"in een andere syspass instantie."
-#: ../../../../inc/themes/classic/backup.inc:120
-#: ../../../../inc/themes/material-blue/backup.inc:136
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:163
msgid "Los elementos exportados son cuentas, clientes y categorías."
msgstr "De geëxporteerd onderdelen zijn accounts, klanten en catagorien. "
-#: ../../../../inc/themes/classic/backup.inc:122
-#: ../../../../inc/themes/material-blue/backup.inc:138
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:165
msgid ""
"Las claves de las cuentas son exportadas de forma encriptada para mayor "
"seguridad."
msgstr ""
"De wachtwoorden zijn versleuteld geëxporteerd vanwege extra beveiliging."
-#: ../../../../inc/themes/classic/backup.inc:124
-#: ../../../../inc/themes/material-blue/backup.inc:140
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:167
msgid ""
"Es posible establecer una clave de exportación para guardar todos los datos "
"encriptados en el archivo XML."
@@ -3398,359 +4300,62 @@ msgstr ""
"Het is mogelijk om een export wachtwoord in te stellen om de data beveiligd "
"op te slaan in een XML bestand"
-#: ../../../../inc/themes/classic/body-start.inc:4
-#: ../../../../inc/themes/material-blue/body-start.inc:4
-msgid "Javascript es necesario para el correcto funcionamiento"
-msgstr "Javascript is benodigd om dit correct uit te voeren."
-
-#: ../../../../inc/themes/classic/categories.inc:10
-#: ../../../../inc/themes/material-blue/categories.inc:14
-msgid "Nombre de la categoría"
-msgstr "Categorie Naam"
-
-#: ../../../../inc/themes/classic/categories.inc:18
-#: ../../../../inc/themes/material-blue/categories.inc:26
-msgid "Descripción de la categoría"
-msgstr "Categorie Omschrijving"
-
-#: ../../../../inc/themes/classic/config.inc:4
-#: ../../../../inc/themes/classic/preferences.inc:4
-#: ../../../../inc/themes/material-blue/config.inc:4
-#: ../../../../inc/themes/material-blue/preferences.inc:4
-msgid "Sitio"
-msgstr "Site"
-
-#: ../../../../inc/themes/classic/config.inc:11
-#: ../../../../inc/themes/classic/preferences.inc:12
-#: ../../../../inc/themes/material-blue/config.inc:12
-#: ../../../../inc/themes/material-blue/preferences.inc:12
-msgid "Idioma"
-msgstr "Taal"
-
-#: ../../../../inc/themes/classic/config.inc:15
-#: ../../../../inc/themes/material-blue/config.inc:16
-msgid ""
-"Establece el idioma global de la aplicación. Es posible establecer un idioma "
-"por usuario en las preferencias."
-msgstr "Stel de algemene taal in. Per gebruiker is dit aan te passen."
-
-#: ../../../../inc/themes/classic/config.inc:18
-#: ../../../../inc/themes/material-blue/config.inc:19
-msgid ""
-"Para mejorar/añadir las traducciones, puede colaborar en http:://translate."
-"syspass.org"
-msgstr ""
-"Om vertalingen toe te voegen of aan te passen kun je naar http:://translate."
-"syspass.org surfen. "
-
-#: ../../../../inc/themes/classic/config.inc:33
-#: ../../../../inc/themes/classic/preferences.inc:24
-#: ../../../../inc/themes/material-blue/config.inc:34
-#: ../../../../inc/themes/material-blue/preferences.inc:23
-msgid "Tema Visual"
-msgstr "Visueel Thema"
-
-#: ../../../../inc/themes/classic/config.inc:37
-#: ../../../../inc/themes/material-blue/config.inc:38
-msgid ""
-"Establece el tema visual global de la aplicación. Es posible establecer un "
-"tema visual por usuario en las preferencias."
-msgstr "Stel het algemene thema in, dit is per gebruiker aan te passen."
-
-#: ../../../../inc/themes/classic/config.inc:52
-#: ../../../../inc/themes/material-blue/config.inc:53
-#: ../../../../inc/themes/material-blue/config.inc:61
-msgid "Timeout de sesión (s)"
-msgstr "Sessie Timeout(s)"
-
-#: ../../../../inc/themes/classic/config.inc:61
-#: ../../../../inc/themes/material-blue/config.inc:85
-msgid "Habilitar log de eventos"
-msgstr "Activeer Event Log"
-
-#: ../../../../inc/themes/classic/config.inc:65
-#: ../../../../inc/themes/material-blue/config.inc:89
-msgid "Guarda las acciones realizadas en la aplicación."
-msgstr "Slaat de acties van de applicatie op."
-
-#: ../../../../inc/themes/classic/config.inc:77
-#: ../../../../inc/themes/material-blue/config.inc:103
-msgid "Habilitar depuración"
-msgstr "Activeer debugging"
-
-#: ../../../../inc/themes/classic/config.inc:81
-#: ../../../../inc/themes/material-blue/config.inc:107
-msgid ""
-"Muestra información relativa a la configuración de la aplicación y "
-"rendimiento."
-msgstr "Laat informatie over de applicatie en prestaties."
-
-#: ../../../../inc/themes/classic/config.inc:93
-#: ../../../../inc/themes/material-blue/config.inc:121
-msgid "Modo mantenimiento"
-msgstr "Onderhouds mode"
-
-#: ../../../../inc/themes/classic/config.inc:97
-#: ../../../../inc/themes/material-blue/config.inc:125
-msgid ""
-"En este modo no se puede acceder a la aplicación. Para deshabilitarlo es "
-"necesario modificar el archivo de configuración."
-msgstr "In deze modus kan niemand inloggen. Sla de configuratie wel op."
-
-#: ../../../../inc/themes/classic/config.inc:109
-#: ../../../../inc/themes/material-blue/config.inc:139
-msgid "Comprobar actualizaciones"
-msgstr "Chekc voor updates"
-
-#: ../../../../inc/themes/classic/config.inc:113
-#: ../../../../inc/themes/material-blue/config.inc:143
-msgid ""
-"Comprobar actualizaciones de la aplicación (sólo para los usuarios "
-"administradores)."
-msgstr "Check voor applicatie updates (alleen voor administrators)"
-
-#: ../../../../inc/themes/classic/config.inc:125
-#: ../../../../inc/themes/material-blue/config.inc:157
-msgid "Comprobar notificaciones"
-msgstr "Check voor mededelingen"
-
-#: ../../../../inc/themes/classic/config.inc:129
-#: ../../../../inc/themes/material-blue/config.inc:161
-msgid ""
-"Comprobar si existen notificaciones de seguridad o avisos de sysPass (sólo "
-"para los usuarios administradores)."
-msgstr ""
-"Controleer syspass beveiligingsfouten of andere meldingen (Alleen voor "
-"administrators)"
-
-#: ../../../../inc/themes/classic/config.inc:141
-#: ../../../../inc/themes/classic/preferences.inc:38
-#: ../../../../inc/themes/material-blue/config.inc:182
-#: ../../../../inc/themes/material-blue/preferences.inc:36
-msgid "Nombre de cuenta como enlace"
-msgstr "Account naam als link"
-
-#: ../../../../inc/themes/classic/config.inc:145
-#: ../../../../inc/themes/classic/preferences.inc:43
-#: ../../../../inc/themes/material-blue/config.inc:186
-#: ../../../../inc/themes/material-blue/preferences.inc:40
-msgid ""
-"Habilita el nombre de la cuenta de la búsqueda, como enlace a los detalles "
-"de la cuenta."
-msgstr "Activeer gebruikersnaam als link naar het account."
-
-#: ../../../../inc/themes/classic/config.inc:157
-#: ../../../../inc/themes/material-blue/config.inc:286
-msgid "Gestión de archivos"
-msgstr "Bestands Management"
-
-#: ../../../../inc/themes/classic/config.inc:161
-#: ../../../../inc/themes/material-blue/config.inc:290
-msgid "Habilita la subida/descarga de archivos para las cuentas."
-msgstr "Activeer uploads/downloads van gebruikersbestanden"
-
-#: ../../../../inc/themes/classic/config.inc:173
-#: ../../../../inc/themes/material-blue/config.inc:200
-msgid "Búsquedas globales"
-msgstr "Global zoek actie"
-
-#: ../../../../inc/themes/classic/config.inc:177
-#: ../../../../inc/themes/material-blue/config.inc:204
-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 ""
-"Laat toe dat gebruikers kunnen zoeken, zodra zij geen rechten hebben zal het "
-"niet worden weergegeven."
-
-#: ../../../../inc/themes/classic/config.inc:189
-#: ../../../../inc/themes/material-blue/config.inc:305
-msgid "Extensiones de archivos permitidas"
-msgstr "Bestands extensies toegestaan"
-
-#: ../../../../inc/themes/classic/config.inc:193
-#: ../../../../inc/themes/material-blue/config.inc:309
-msgid "Extensiones permitidas para la subida de archivos."
-msgstr "Extensies die zijn toegestaan om te uploaden."
-
-#: ../../../../inc/themes/classic/config.inc:197
-#: ../../../../inc/themes/material-blue/config.inc:313
-msgid "Se permite un máximo de 4 caracteres."
-msgstr "Max 4 karakters toegestaan"
-
-#: ../../../../inc/themes/classic/config.inc:201
-#: ../../../../inc/themes/material-blue/config.inc:317
-msgid ""
-"Escribir extensión y pulsar intro para añadir. Es necesario guardar la "
-"configuración."
-msgstr ""
-"Typ de extensie en druk op enter. Vergeet hierna niet de configuratie op te "
-"slaan."
-
-#: ../../../../inc/themes/classic/config.inc:216
-#: ../../../../inc/themes/material-blue/config.inc:332
-msgid "Establece el tamaño máximo para subir archivos."
-msgstr "Stel de maximale grootte in voor uploads."
-
-#: ../../../../inc/themes/classic/config.inc:220
-#: ../../../../inc/themes/material-blue/config.inc:336
-msgid "El máximo absuluto es de 16MB."
-msgstr "De absolute maximale grootte is 16MB."
-
-#: ../../../../inc/themes/classic/config.inc:231
-#: ../../../../inc/themes/classic/preferences.inc:56
-#: ../../../../inc/themes/material-blue/config.inc:218
-#: ../../../../inc/themes/material-blue/preferences.inc:54
-msgid "Resultados por página"
-msgstr "Resultaten per pagina"
-
-#: ../../../../inc/themes/classic/config.inc:235
-#: ../../../../inc/themes/classic/preferences.inc:61
-#: ../../../../inc/themes/material-blue/config.inc:222
-#: ../../../../inc/themes/material-blue/preferences.inc:58
-msgid "Número de resultados por página a mostrar, al realizar una búsqueda."
-msgstr "Aantal "
-
-#: ../../../../inc/themes/classic/config.inc:246
-#: ../../../../inc/themes/material-blue/config.inc:260
-msgid "Resultados en Tarjetas"
-msgstr "Resultaat like Kaarten"
-
-#: ../../../../inc/themes/classic/config.inc:250
-#: ../../../../inc/themes/material-blue/config.inc:264
-msgid "Muestra los resultados de búsqueda de cuentas en formato tarjeta."
-msgstr ""
-" Maakt het mogelijk rekening te houden met de zoekresultaten als een "
-"kaartformaat te laten zien."
-
-#: ../../../../inc/themes/classic/config.inc:262
-#: ../../../../inc/themes/material-blue/config.inc:238
-msgid "Imagen para mostrar clave"
-msgstr "Afbeelding om wachtwoord te tonen"
-
-#: ../../../../inc/themes/classic/config.inc:266
-#: ../../../../inc/themes/material-blue/config.inc:242
-msgid "Generar una imagen con el texto de la clave de la cuenta."
-msgstr "Genereerd een plaatje met de tekst van het wachtwoord van je account. "
-
-#: ../../../../inc/themes/classic/config.inc:269
-#: ../../../../inc/themes/material-blue/config.inc:245
-msgid "Util para entornos donde copiar la clave supone un riesgo de seguridad."
-msgstr ""
-"Nuttig voor omgevingen waar het kopiëren van een wachtwoord naar het "
-"klembord "
-
-#: ../../../../inc/themes/classic/config.inc:304
-#: ../../../../inc/themes/material-blue/config.inc:454
-msgid "Añadir extensión"
-msgstr "Toevoegen Extensie"
-
-#: ../../../../inc/themes/classic/config.inc:305
-#: ../../../../inc/themes/material-blue/config.inc:455
-msgid "Eliminar extensión"
-msgstr "Verwijder Extensie"
-
-#: ../../../../inc/themes/classic/customers.inc:10
-#: ../../../../inc/themes/material-blue/customers.inc:14
-msgid "Nombre del cliente"
-msgstr "Klantnaam"
-
-#: ../../../../inc/themes/classic/customers.inc:18
-#: ../../../../inc/themes/material-blue/customers.inc:26
-msgid "Descripción del cliente"
-msgstr "Klant omschrijving"
-
-#: ../../../../inc/themes/classic/customfields.inc:38
-#: ../../../../inc/themes/material-blue/customfields.inc:41
-msgid "Texto Ayuda"
-msgstr "Help Tekst"
-
-#: ../../../../inc/themes/classic/customfields.inc:44
-#: ../../../../inc/themes/material-blue/customfields.inc:52
-msgid "Obligatorio"
-msgstr "Vereist"
-
-#: ../../../../inc/themes/classic/encryption.inc:5
-#: ../../../../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:5
-#: ../../../../inc/themes/material-blue/install.inc:52
-#: ../../../../inc/themes/material-blue/install.inc:59
-#: ../../../../inc/themes/material-blue/login.inc:26
-#: ../../../../inc/themes/material-blue/login.inc:49
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:8
+#: ../../../../inc/themes/material-blue/views/config/import.inc:77
+#: ../../../../inc/themes/material-blue/views/config/import.inc:85
+#: ../../../../inc/themes/material-blue/views/main/install.inc:48
+#: ../../../../inc/themes/material-blue/views/main/install.inc:54
+#: ../../../../inc/themes/material-blue/views/main/login.inc:48
msgid "Clave Maestra"
msgstr "Hoofd wachtwoord"
-#: ../../../../inc/themes/classic/encryption.inc:13
-#: ../../../../inc/themes/classic/encryption.inc:113
-#: ../../../../inc/themes/material-blue/encryption.inc:13
-#: ../../../../inc/themes/material-blue/encryption.inc:128
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:18
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:157
msgid "Último cambio"
msgstr "Laatste Wijziging"
-#: ../../../../inc/themes/classic/encryption.inc:22
-#: ../../../../inc/themes/material-blue/encryption.inc:22
-#: ../../../../inc/themes/material-blue/encryption.inc:28
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:27
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:35
msgid "Clave Maestra actual"
msgstr "Huidig hoofd wachtwoord"
-#: ../../../../inc/themes/classic/encryption.inc:31
-#: ../../../../inc/themes/material-blue/encryption.inc:34
-#: ../../../../inc/themes/material-blue/encryption.inc:40
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:41
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:49
msgid "Nueva Clave Maestra"
msgstr "Nieuw Hoofd Wachtwoord"
-#: ../../../../inc/themes/classic/encryption.inc:40
-#: ../../../../inc/themes/material-blue/encryption.inc:46
-#: ../../../../inc/themes/material-blue/encryption.inc:52
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:55
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:63
msgid "Nueva Clave Maestra (repetir)"
msgstr "Nieuw Hoofd Wachtwoord (herhaal)"
-#: ../../../../inc/themes/classic/encryption.inc:48
-#: ../../../../inc/themes/material-blue/encryption.inc:58
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:69
msgid "No modificar cuentas"
msgstr "Pas niet de accounts aan"
-#: ../../../../inc/themes/classic/encryption.inc:53
-#: ../../../../inc/themes/material-blue/encryption.inc:63
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:75
msgid "Establece una nueva clave maestra sin re-encriptar las cuentas"
msgstr ""
"Stelt een nieuw master wachtwoord in zonder opnieuw de wachtwoorden te "
"beveiligen. "
-#: ../../../../inc/themes/classic/encryption.inc:64
-#: ../../../../inc/themes/material-blue/encryption.inc:76
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:89
msgid "Confirmar cambio"
msgstr "Bevestig wijziging"
-#: ../../../../inc/themes/classic/encryption.inc:67
-#: ../../../../inc/themes/classic/encryption.inc:70
-#: ../../../../inc/themes/classic/encryption.inc:73
-#: ../../../../inc/themes/classic/import.inc:168
-#: ../../../../inc/themes/classic/security.inc:43
-msgid "Atención"
-msgstr "Waarschuwing"
-
-#: ../../../../inc/themes/classic/encryption.inc:68
-#: ../../../../inc/themes/material-blue/encryption.inc:80
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:94
msgid "Guarde la nueva clave en un lugar seguro."
msgstr "Bewaar het nieuwe wachtwoord op een veilige plek."
-#: ../../../../inc/themes/classic/encryption.inc:71
-#: ../../../../inc/themes/material-blue/encryption.inc:83
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:98
msgid "Se volverán a encriptar las claves de todas las cuentas."
msgstr "Alle account zullen opnieuw worden versleuteld."
-#: ../../../../inc/themes/classic/encryption.inc:74
-#: ../../../../inc/themes/material-blue/encryption.inc:86
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:102
msgid "Los usuarios deberán de introducir la nueva clave maestra."
msgstr "Gebruikers moeten het nieuwe master wachtwoord invoeren."
-#: ../../../../inc/themes/classic/encryption.inc:95
-#: ../../../../inc/themes/material-blue/encryption.inc:109
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:130
msgid ""
"La clave maestra es utilizada para encriptar las claves de las cuentas de "
"sysPass para mantenerlas seguras."
@@ -3758,8 +4363,7 @@ msgstr ""
"Het master wachtwoord word gebruikt om alle wachtwoorden veilig te "
"versleutelen."
-#: ../../../../inc/themes/classic/encryption.inc:97
-#: ../../../../inc/themes/material-blue/encryption.inc:111
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:132
msgid ""
"Es recomendable cambiarla cada cierto tiempo y utilizar una clave compleja "
"que incluya números, letras y símbolos."
@@ -3767,35 +4371,25 @@ msgstr ""
"Het advies is om dit geregeld te veranderen, gebruik hiervoor een sterk "
"wachtwoord."
-#: ../../../../inc/themes/classic/encryption.inc:105
-#: ../../../../inc/themes/material-blue/encryption.inc:121
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:146
msgid "Clave Temporal"
msgstr "Tijdelijk Wachtwoord"
-#: ../../../../inc/themes/classic/encryption.inc:116
-#: ../../../../inc/themes/classic/encryption.inc:127
-#: ../../../../inc/themes/material-blue/encryption.inc:131
-#: ../../../../inc/themes/material-blue/encryption.inc:142
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:160
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:171
msgid "No generada"
msgstr "Niet gegenereerd"
-#: ../../../../inc/themes/classic/encryption.inc:121
-#: ../../../../inc/themes/material-blue/encryption.inc:136
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:165
msgid "Válido hasta"
msgstr "Geldig tot"
-#: ../../../../inc/themes/classic/encryption.inc:133
-#: ../../../../inc/themes/material-blue/encryption.inc:156
-#: ../../../../inc/themes/material-blue/encryption.inc:162
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:177
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:186
msgid "Validez (s)"
msgstr "Leven(s)"
-#: ../../../../inc/themes/classic/encryption.inc:136
-msgid "Validez"
-msgstr "Leven"
-
-#: ../../../../inc/themes/classic/encryption.inc:164
-#: ../../../../inc/themes/material-blue/encryption.inc:191
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:218
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 "
@@ -3805,161 +4399,360 @@ msgstr ""
"gebruikers die dit moeten invoeren bij het inloggen. Hierdoor is het niet "
"nodig om hen het echte Master Password te vertellen."
-#: ../../../../inc/themes/classic/encryption.inc:166
-#: ../../../../inc/themes/material-blue/encryption.inc:195
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:224
msgid "Generar"
msgstr "Genereer"
-#: ../../../../inc/themes/classic/eventlog.inc:6
-#: ../../../../inc/themes/classic/search.inc:3
-#: ../../../../inc/themes/material-blue/eventlog.inc:6
-#: ../../../../inc/themes/material-blue/search.inc:3
-msgid "No se encontraron registros"
-msgstr "Geen records gevonden"
+#: ../../../../inc/themes/material-blue/views/config/general-accounts.inc:10
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:42
+msgid "Nombre de cuenta como enlace"
+msgstr "Account naam als link"
-#: ../../../../inc/themes/classic/eventlog.inc:17
-#: ../../../../inc/themes/material-blue/eventlog.inc:17
-msgid "Fecha / Hora"
-msgstr "Datum / Tijd"
-
-#: ../../../../inc/themes/classic/eventlog.inc:20
-#: ../../../../inc/themes/material-blue/eventlog.inc:20
-msgid "Evento"
-msgstr "Evenement"
-
-#: ../../../../inc/themes/classic/eventlog.inc:26
-#: ../../../../inc/themes/material-blue/eventlog.inc:26
-msgid "IP"
-msgstr "IP"
-
-#: ../../../../inc/themes/classic/eventlog.inc:84
-#: ../../../../inc/themes/classic/search.inc:20
-#: ../../../../inc/themes/classic/search.inc:199
-#: ../../../../inc/themes/material-blue/eventlog.inc:84
-#: ../../../../inc/themes/material-blue/search.inc:20
-#: ../../../../inc/themes/material-blue/search.inc:209
-msgid "Primera página"
-msgstr "Eerste pagina"
-
-#: ../../../../inc/themes/classic/eventlog.inc:86
-#: ../../../../inc/themes/classic/search.inc:22
-#: ../../../../inc/themes/classic/search.inc:201
-#: ../../../../inc/themes/material-blue/eventlog.inc:86
-#: ../../../../inc/themes/material-blue/search.inc:22
-#: ../../../../inc/themes/material-blue/search.inc:211
-msgid "Página anterior"
-msgstr "Vorige pagina"
-
-#: ../../../../inc/themes/classic/eventlog.inc:91
-#: ../../../../inc/themes/classic/search.inc:27
-#: ../../../../inc/themes/classic/search.inc:206
-#: ../../../../inc/themes/material-blue/eventlog.inc:91
-#: ../../../../inc/themes/material-blue/search.inc:27
-#: ../../../../inc/themes/material-blue/search.inc:216
-msgid "Página siguiente"
-msgstr "Volgende pagina"
-
-#: ../../../../inc/themes/classic/eventlog.inc:93
-#: ../../../../inc/themes/classic/search.inc:29
-#: ../../../../inc/themes/classic/search.inc:208
-#: ../../../../inc/themes/material-blue/eventlog.inc:93
-#: ../../../../inc/themes/material-blue/search.inc:29
-#: ../../../../inc/themes/material-blue/search.inc:218
-msgid "Última página"
-msgstr "Laatste pagina"
-
-#: ../../../../inc/themes/classic/files.inc:22
-#: ../../../../inc/themes/material-blue/files.inc:21
-msgid "Ver Archivo"
-msgstr "Bekijk bestand"
-
-#: ../../../../inc/themes/classic/footer.inc:6
-#: ../../../../inc/themes/material-blue/footer.inc:29
-msgid "Indica si la conexión utiliza HTTPS."
-msgstr "Laat zien of de verbinding HTTPS is"
-
-#: ../../../../inc/themes/classic/footer.inc:6
-#: ../../../../inc/themes/material-blue/footer.inc:29
+#: ../../../../inc/themes/material-blue/views/config/general-accounts.inc:14
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:47
msgid ""
-"Las claves de formularios enviados se encriptan mediante PKI, el resto de "
-"datos no."
+"Habilita el nombre de la cuenta de la búsqueda, como enlace a los detalles "
+"de la cuenta."
+msgstr "Activeer gebruikersnaam als link naar het account."
+
+#: ../../../../inc/themes/material-blue/views/config/general-accounts.inc:28
+msgid "Búsquedas globales"
+msgstr "Global zoek actie"
+
+#: ../../../../inc/themes/material-blue/views/config/general-accounts.inc:32
+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 ""
-"De verzonden wachtwoorden worden versleuteld via PKI, de andere data niet. "
+"Laat toe dat gebruikers kunnen zoeken, zodra zij geen rechten hebben zal het "
+"niet worden weergegeven."
-#: ../../../../inc/themes/classic/footer.inc:6
-msgid "Seguro"
-msgstr "Veilig"
+#: ../../../../inc/themes/material-blue/views/config/general-accounts.inc:46
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:62
+msgid "Resultados por página"
+msgstr "Resultaten per pagina"
-#: ../../../../inc/themes/classic/footer.inc:6
-msgid "Inseguro"
-msgstr "Onveilig"
+#: ../../../../inc/themes/material-blue/views/config/general-accounts.inc:50
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:67
+msgid "Número de resultados por página a mostrar, al realizar una búsqueda."
+msgstr "Aantal "
-#: ../../../../inc/themes/classic/footer.inc:11
-#: ../../../../inc/themes/material-blue/footer.inc:18
-msgid "Ayuda :: FAQ :: Changelog"
-msgstr "Help :: FAQ :: Changelog"
+#: ../../../../inc/themes/material-blue/views/config/general-accounts.inc:60
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:78
+msgid "Número de resultados por página"
+msgstr "Resultaten per pagina"
-#: ../../../../inc/themes/classic/footer.inc:14
-#: ../../../../inc/themes/material-blue/footer.inc:23
-msgid "Un proyecto de cygnux.org"
-msgstr "Een cygnux.org project"
+#: ../../../../inc/themes/material-blue/views/config/general-accounts.inc:66
+msgid "Imagen para mostrar clave"
+msgstr "Afbeelding om wachtwoord te tonen"
-#: ../../../../inc/themes/classic/groups.inc:10
-#: ../../../../inc/themes/material-blue/groups.inc:14
-msgid "Nombre del grupo"
-msgstr "Groep naam"
+#: ../../../../inc/themes/material-blue/views/config/general-accounts.inc:70
+msgid "Generar una imagen con el texto de la clave de la cuenta."
+msgstr "Genereerd een plaatje met de tekst van het wachtwoord van je account. "
-#: ../../../../inc/themes/classic/groups.inc:18
-#: ../../../../inc/themes/material-blue/groups.inc:26
-msgid "Descripción del grupo"
-msgstr "Groep omschrijving"
+#: ../../../../inc/themes/material-blue/views/config/general-accounts.inc:74
+msgid "Util para entornos donde copiar la clave supone un riesgo de seguridad."
+msgstr ""
+"Nuttig voor omgevingen waar het kopiëren van een wachtwoord naar het "
+"klembord "
-#: ../../../../inc/themes/classic/import.inc:4
-#: ../../../../inc/themes/material-blue/import.inc:4
+#: ../../../../inc/themes/material-blue/views/config/general-accounts.inc:89
+msgid "Resultados en Tarjetas"
+msgstr "Resultaat like Kaarten"
+
+#: ../../../../inc/themes/material-blue/views/config/general-accounts.inc:93
+msgid "Muestra los resultados de búsqueda de cuentas en formato tarjeta."
+msgstr ""
+" Maakt het mogelijk rekening te houden met de zoekresultaten als een "
+"kaartformaat te laten zien."
+
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:4
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:61
+msgid "Eventos"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:10
+msgid "Habilitar log de eventos"
+msgstr "Activeer Event Log"
+
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:14
+msgid "Guarda las acciones realizadas en la aplicación."
+msgstr "Slaat de acties van de applicatie op."
+
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:28
+msgid "Habilitar Syslog"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:40
+msgid "Habilitar Syslog Remoto"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:52
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:21
+#: ../../../../inc/themes/material-blue/views/config/info.inc:45
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:43
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:68
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:29
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:36
+msgid "Servidor"
+msgstr "Server"
+
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:60
+msgid "Nombre o dirección IP"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:66
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:74
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:35
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:42
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:49
+msgid "Puerto"
+msgstr "Poort"
+
+#: ../../../../inc/themes/material-blue/views/config/general-files.inc:10
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:226
+msgid "Gestión de archivos"
+msgstr "Bestands Management"
+
+#: ../../../../inc/themes/material-blue/views/config/general-files.inc:15
+msgid "Habilita la subida/descarga de archivos para las cuentas."
+msgstr "Activeer uploads/downloads van gebruikersbestanden"
+
+#: ../../../../inc/themes/material-blue/views/config/general-files.inc:30
+msgid "Extensiones de archivos permitidas"
+msgstr "Bestands extensies toegestaan"
+
+#: ../../../../inc/themes/material-blue/views/config/general-files.inc:35
+#, fuzzy
+msgid "Extensiones permitidas para la subida de archivos."
+msgstr "Extensies die zijn toegestaan om te uploaden."
+
+#: ../../../../inc/themes/material-blue/views/config/general-files.inc:39
+msgid "Se permite un máximo de 4 caracteres."
+msgstr "Max 4 karakters toegestaan"
+
+#: ../../../../inc/themes/material-blue/views/config/general-files.inc:43
+msgid ""
+"Escribir extensión y pulsar intro para añadir. Es necesario guardar la "
+"configuración."
+msgstr ""
+"Typ de extensie en druk op enter. Vergeet hierna niet de configuratie op te "
+"slaan."
+
+#: ../../../../inc/themes/material-blue/views/config/general-files.inc:54
+msgid "Tamaño máximo de archivo"
+msgstr "Maximale bestandsgrootte"
+
+#: ../../../../inc/themes/material-blue/views/config/general-files.inc:59
+msgid "Establece el tamaño máximo para subir archivos."
+msgstr "Stel de maximale grootte in voor uploads."
+
+#: ../../../../inc/themes/material-blue/views/config/general-files.inc:63
+msgid "El máximo absuluto es de 16MB."
+msgstr "De absolute maximale grootte is 16MB."
+
+#: ../../../../inc/themes/material-blue/views/config/general-files.inc:73
+msgid "Tamaño máximo de archivo en bytes"
+msgstr "Maximale bestandsgrootte in bytes"
+
+#: ../../../../inc/themes/material-blue/views/config/general-links.inc:4
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:212
+msgid "Enlaces Públicos"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/general-links.inc:10
+msgid "Habilitar Enlaces Públicos"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/general-links.inc:15
+msgid ""
+"Habilita la posibilidad de generar enlaces públicos para ver los detalles de "
+"una cuenta."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/general-links.inc:19
+msgid ""
+"Las cuentas enlazadas serán visibles por cualquiera que disponga del enlace."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/general-links.inc:23
+msgid ""
+"Para crear enlaces, los usuarios tienen que tener activada la opción en su "
+"perfl."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/general-links.inc:38
+msgid "Tiempo de caducidad"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/general-links.inc:46
+msgid "Tiempo en minutos"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/general-links.inc:52
+msgid "Número máximo de visitas"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/general-links.inc:64
+msgid "Usar imagen para clave"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/general-links.inc:69
+msgid "La clave de la cuenta es visualizada como una imagen."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:2
+msgid "Proxy"
+msgstr "Proxy"
+
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:8
+msgid "Usar Proxy"
+msgstr "Gebruik Proxy"
+
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:29
+msgid "Servidor proxy"
+msgstr "Proxy server"
+
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:43
+msgid "Puerto del servidor proxy"
+msgstr "Proxy server poort"
+
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:57
+msgid "Usuario del servidor proxy"
+msgstr "Proxy server gebruiker"
+
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:71
+msgid "Clave del servidor proxy"
+msgstr "Proxy server wachtwoord"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:4
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:7
+msgid "Sitio"
+msgstr "Site"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:10
+#: ../../../../inc/themes/material-blue/views/main/install.inc:135
+#: ../../../../inc/themes/material-blue/views/main/install.inc:136
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:18
+msgid "Idioma"
+msgstr "Taal"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:15
+msgid ""
+"Establece el idioma global de la aplicación. Es posible establecer un idioma "
+"por usuario en las preferencias."
+msgstr "Stel de algemene taal in. Per gebruiker is dit aan te passen."
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:19
+msgid ""
+"Para mejorar/añadir las traducciones, puede colaborar en http:://translate."
+"syspass.org"
+msgstr ""
+"Om vertalingen toe te voegen of aan te passen kun je naar http:://translate."
+"syspass.org surfen. "
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:34
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:29
+msgid "Tema Visual"
+msgstr "Visueel Thema"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:39
+msgid ""
+"Establece el tema visual global de la aplicación. Es posible establecer un "
+"tema visual por usuario en las preferencias."
+msgstr "Stel het algemene thema in, dit is per gebruiker aan te passen."
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:55
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:63
+msgid "Timeout de sesión (s)"
+msgstr "Sessie Timeout(s)"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:69
+msgid "Forzar HTTPS"
+msgstr "Forceer HTTPS"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:74
+msgid "Fuerza para que todas las conexiones sean a través de HTTPS."
+msgstr "Dit forceert het gebruik van HTTPS op alle verbindingen"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:89
+msgid "Habilitar depuración"
+msgstr "Activeer debugging"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:94
+msgid ""
+"Muestra información relativa a la configuración de la aplicación y "
+"rendimiento."
+msgstr "Laat informatie over de applicatie en prestaties."
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:108
+msgid "Modo mantenimiento"
+msgstr "Onderhouds mode"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:113
+msgid ""
+"En este modo no se puede acceder a la aplicación. Para deshabilitarlo es "
+"necesario modificar el archivo de configuración."
+msgstr "In deze modus kan niemand inloggen. Sla de configuratie wel op."
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:127
+msgid "Comprobar actualizaciones"
+msgstr "Chekc voor updates"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:132
+msgid ""
+"Comprobar actualizaciones de la aplicación (sólo para los usuarios "
+"administradores)."
+msgstr "Check voor applicatie updates (alleen voor administrators)"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:146
+msgid "Comprobar notificaciones"
+msgstr "Check voor mededelingen"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:151
+msgid ""
+"Comprobar si existen notificaciones de seguridad o avisos de sysPass (sólo "
+"para los usuarios administradores)."
+msgstr ""
+"Controleer syspass beveiligingsfouten of andere meldingen (Alleen voor "
+"administrators)"
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:8
msgid "Importar CSV/XML"
msgstr "CSV/XML Import"
-#: ../../../../inc/themes/classic/import.inc:11
-#: ../../../../inc/themes/material-blue/import.inc:11
+#: ../../../../inc/themes/material-blue/views/config/import.inc:15
msgid "Usuario por Defecto"
msgstr "Standaard Gebruiker"
-#: ../../../../inc/themes/classic/import.inc:15
-#: ../../../../inc/themes/material-blue/import.inc:15
+#: ../../../../inc/themes/material-blue/views/config/import.inc:20
msgid "Define el usuario por defecto para las cuentas importadas."
msgstr " Bepaalt de standaard gebruiker voor de geïmporteerde accounts."
-#: ../../../../inc/themes/classic/import.inc:32
-#: ../../../../inc/themes/classic/ldap.inc:144
-#: ../../../../inc/themes/material-blue/import.inc:33
-#: ../../../../inc/themes/material-blue/ldap.inc:170
+#: ../../../../inc/themes/material-blue/views/config/import.inc:39
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:188
msgid "Grupo por Defecto"
msgstr "Standaard Groep"
-#: ../../../../inc/themes/classic/import.inc:36
-#: ../../../../inc/themes/material-blue/import.inc:37
+#: ../../../../inc/themes/material-blue/views/config/import.inc:44
msgid "Define el grupo por defecto para las cuentas importadas."
msgstr " Bepaalt de standaard groep voor de geïmporteerde accounts."
-#: ../../../../inc/themes/classic/import.inc:53
-#: ../../../../inc/themes/material-blue/import.inc:55
-#: ../../../../inc/themes/material-blue/import.inc:61
+#: ../../../../inc/themes/material-blue/views/config/import.inc:63
+#: ../../../../inc/themes/material-blue/views/config/import.inc:71
msgid "Clave de Importación"
msgstr "Importeer Wachtwoord"
-#: ../../../../inc/themes/classic/import.inc:61
-#: ../../../../inc/themes/material-blue/import.inc:67
-#: ../../../../inc/themes/material-blue/import.inc:73
+#: ../../../../inc/themes/material-blue/views/config/import.inc:91
+#: ../../../../inc/themes/material-blue/views/config/import.inc:99
msgid "Delimitador CSV"
msgstr "CSV scheidingsteken"
-#: ../../../../inc/themes/classic/import.inc:75
-#: ../../../../inc/themes/material-blue/import.inc:85
+#: ../../../../inc/themes/material-blue/views/config/import.inc:112
msgid "Soltar archivo aquí o click para seleccionar"
msgstr "Sleep de bestanden naar hier of selecteer deze"
-#: ../../../../inc/themes/classic/import.inc:91
-#: ../../../../inc/themes/material-blue/import.inc:102
+#: ../../../../inc/themes/material-blue/views/config/import.inc:132
msgid ""
"Permite realizar la importación de Cuentas, Categorías y Clientes desde "
"archivos XML y CSV."
@@ -3967,23 +4760,20 @@ msgstr ""
"Laat toe dat je Accounts, Categories and Customers import from XML or CSV "
"files."
-#: ../../../../inc/themes/classic/import.inc:93
-#: ../../../../inc/themes/material-blue/import.inc:104
+#: ../../../../inc/themes/material-blue/views/config/import.inc:134
msgid ""
"Los formatos de archivos XML soportados son: sysPass, KeePass y KeePassX"
msgstr ""
" Hiermee kun je de accounts, categorieën en klanten importeren uit XML of "
"CSV -bestanden."
-#: ../../../../inc/themes/classic/import.inc:95
-#: ../../../../inc/themes/material-blue/import.inc:106
+#: ../../../../inc/themes/material-blue/views/config/import.inc:136
msgid ""
"Arrastar el archivo a importar a la zona indicada o hacer click sobre la "
"flecha."
msgstr " Drag & Drop het bestand naar de import zone of klik op de pijl."
-#: ../../../../inc/themes/classic/import.inc:97
-#: ../../../../inc/themes/material-blue/import.inc:108
+#: ../../../../inc/themes/material-blue/views/config/import.inc:138
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."
@@ -3991,18 +4781,15 @@ msgstr ""
" Voor KeePass of KeePassX bestanden, zal de naam van de klant zijn KeePass "
"of KeePassX en de categorie naam als de groepsnamen ."
-#: ../../../../inc/themes/classic/import.inc:99
-#: ../../../../inc/themes/material-blue/import.inc:110
+#: ../../../../inc/themes/material-blue/views/config/import.inc:140
msgid "La importación de archivos CSV se realiza con el siguiente formato:"
msgstr " Het CSV -bestand importeren moet aan het volgende format doen:"
-#: ../../../../inc/themes/classic/import.inc:101
-#: ../../../../inc/themes/material-blue/import.inc:112
+#: ../../../../inc/themes/material-blue/views/config/import.inc:142
msgid "nombre_de_cuenta;cliente;categoría;url;usuario;clave;notas"
msgstr " accountnaam;klant;categorie;url;gebruikersnaam;wachtwoord;notities"
-#: ../../../../inc/themes/classic/import.inc:103
-#: ../../../../inc/themes/material-blue/import.inc:114
+#: ../../../../inc/themes/material-blue/views/config/import.inc:144
msgid ""
"En todos los casos, si el cliente o la categoría no están creados, se crean "
"automáticamente."
@@ -4010,1025 +4797,149 @@ msgstr ""
"In alle gevallen, indien de klant of de categorie niet bestaat zal deze "
"automatisch worden aangemaakt."
-#: ../../../../inc/themes/classic/import.inc:108
-#: ../../../../inc/themes/material-blue/import.inc:119
-msgid "Importar phpPMS"
-msgstr "phpPMS Import"
-
-#: ../../../../inc/themes/classic/import.inc:115
-#: ../../../../inc/themes/classic/install.inc:63
-#: ../../../../inc/themes/classic/install.inc:64
-#: ../../../../inc/themes/material-blue/import.inc:126
-#: ../../../../inc/themes/material-blue/import.inc:138
-msgid "Usuario BBDD"
-msgstr "DB Gebruikersnaam"
-
-#: ../../../../inc/themes/classic/import.inc:119
-#: ../../../../inc/themes/material-blue/import.inc:130
-msgid "Indicar el usuario de conexión a la base de datos de phpPMS."
-msgstr "Geef de phpPMS database user op."
-
-#: ../../../../inc/themes/classic/import.inc:129
-#: ../../../../inc/themes/classic/install.inc:71
-#: ../../../../inc/themes/classic/install.inc:73
-#: ../../../../inc/themes/material-blue/import.inc:144
-#: ../../../../inc/themes/material-blue/import.inc:150
-msgid "Clave BBDD"
-msgstr "DB Wachtwoord"
-
-#: ../../../../inc/themes/classic/import.inc:137
-#: ../../../../inc/themes/classic/install.inc:78
-#: ../../../../inc/themes/classic/install.inc:79
-#: ../../../../inc/themes/material-blue/import.inc:156
-#: ../../../../inc/themes/material-blue/import.inc:168
-msgid "Nombre BBDD"
-msgstr "DB Naam"
-
-#: ../../../../inc/themes/classic/import.inc:141
-#: ../../../../inc/themes/material-blue/import.inc:160
-msgid "Indicar el nombre de la base de datos de phpPMS."
-msgstr "Geef de phpPMS database naam op."
-
-#: ../../../../inc/themes/classic/import.inc:151
-#: ../../../../inc/themes/classic/install.inc:87
-#: ../../../../inc/themes/classic/install.inc:88
-#: ../../../../inc/themes/material-blue/import.inc:174
-#: ../../../../inc/themes/material-blue/import.inc:186
-msgid "Servidor BBDD"
-msgstr "DB Server"
-
-#: ../../../../inc/themes/classic/import.inc:155
-#: ../../../../inc/themes/material-blue/import.inc:178
-msgid "Indicar el servidor de la base de datos de phpPMS."
-msgstr "Geef de phpPMS database server op."
-
-#: ../../../../inc/themes/classic/import.inc:165
-#: ../../../../inc/themes/material-blue/import.inc:192
-msgid "Confirmar"
-msgstr "Bevestig"
-
-#: ../../../../inc/themes/classic/import.inc:169
-#: ../../../../inc/themes/material-blue/import.inc:196
-msgid "Los datos actuales serán borrados (excepto el usuario actual)"
-msgstr "Huidige data wordt verwijderd (behalve huidige gebruiker)"
-
-#: ../../../../inc/themes/classic/import.inc:184
-msgid "Iniciar"
-msgstr "Start"
-
-#: ../../../../inc/themes/classic/info.inc:4
-#: ../../../../inc/themes/material-blue/info.inc:4
+#: ../../../../inc/themes/material-blue/views/config/info.inc:5
msgid "Información de la Aplicación"
msgstr "Applicatie Informatie"
-#: ../../../../inc/themes/classic/info.inc:10
-#: ../../../../inc/themes/material-blue/info.inc:10
+#: ../../../../inc/themes/material-blue/views/config/info.inc:11
msgid "Versión sysPass"
msgstr "sysPass versie"
-#: ../../../../inc/themes/classic/info.inc:18
-#: ../../../../inc/themes/material-blue/info.inc:18
+#: ../../../../inc/themes/material-blue/views/config/info.inc:19
msgid "Base de Datos"
msgstr "Database"
-#: ../../../../inc/themes/classic/info.inc:30
-#: ../../../../inc/themes/material-blue/info.inc:30
+#: ../../../../inc/themes/material-blue/views/config/info.inc:31
msgid "PHP"
msgstr "PHP"
-#: ../../../../inc/themes/classic/info.inc:35
-#: ../../../../inc/themes/material-blue/info.inc:35
+#: ../../../../inc/themes/material-blue/views/config/info.inc:36
msgid "Extensiones"
msgstr "Extensies"
-#: ../../../../inc/themes/classic/info.inc:37
-#: ../../../../inc/themes/material-blue/info.inc:37
+#: ../../../../inc/themes/material-blue/views/config/info.inc:38
msgid "Memoria Usada"
msgstr "Gebruikt geheugen"
-#: ../../../../inc/themes/classic/info.inc:44
-#: ../../../../inc/themes/classic/ldap.inc:32
-#: ../../../../inc/themes/classic/mail.inc:21
-#: ../../../../inc/themes/material-blue/config.inc:372
-#: ../../../../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/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 "Installatie"
-
-#: ../../../../inc/themes/classic/install.inc:25
-#: ../../../../inc/themes/material-blue/install.inc:26
-msgid "Crear cuenta de admin de sysPass"
-msgstr "Aanmaken sysPass admin account"
-
-#: ../../../../inc/themes/classic/install.inc:32
-#: ../../../../inc/themes/material-blue/install.inc:38
-msgid "Login del usuario administrador de sysPass"
-msgstr "sysPass administrator Login"
-
-#: ../../../../inc/themes/classic/install.inc:58
-#: ../../../../inc/themes/material-blue/install.inc:72
-msgid "Configurar BBDD"
-msgstr "DB Configuratie"
-
-#: ../../../../inc/themes/classic/install.inc:67
-msgid "Login de usuario con permisos de administrador de MySQL"
-msgstr "Gebruiker login met de database beheerdersrechten"
-
-#: ../../../../inc/themes/classic/install.inc:83
-#: ../../../../inc/themes/material-blue/install.inc:106
-msgid "Nombre de la base de datos para sysPass"
+#: ../../../../inc/themes/material-blue/views/config/info.inc:53
+msgid "Copia de Configuración"
msgstr ""
-#: ../../../../inc/themes/classic/install.inc:91
-msgid "Nombre del servidor de la base de datos de sysPass"
+#: ../../../../inc/themes/material-blue/views/config/info.inc:61
+msgid "Plugins Cargados"
msgstr ""
-#: ../../../../inc/themes/classic/install.inc:97
-#: ../../../../inc/themes/material-blue/install.inc:124
-msgid "Modo Hosting"
-msgstr ""
-
-#: ../../../../inc/themes/classic/install.inc:104
-#: ../../../../inc/themes/material-blue/install.inc:131
-msgid "No crea ni verifica los permisos del usuario sobre la BBDD"
-msgstr "Dit maakt of verifieerd niet de gebruikers rechten op de database."
-
-#: ../../../../inc/themes/classic/install.inc:108
-#: ../../../../inc/themes/material-blue/install.inc:138
-#: ../../../../inc/themes/material-blue/install.inc:139
-msgid "Instalar"
-msgstr "Installeer"
-
-#: ../../../../inc/themes/classic/ldap.inc:12
-#: ../../../../inc/themes/material-blue/ldap.inc:12
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:18
msgid "Habilitar LDAP"
msgstr "Activeer LDAP"
-#: ../../../../inc/themes/classic/ldap.inc:16
-#: ../../../../inc/themes/material-blue/ldap.inc:16
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:23
msgid "Habilita de autentificación mediante servidor LDAP."
msgstr "Schakelt verificatie in voor de LDAP-server."
-#: ../../../../inc/themes/classic/ldap.inc:20
-#: ../../../../inc/themes/material-blue/ldap.inc:20
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:27
msgid "Este método utilizará MySQL en caso de fallo."
msgstr "Deze methode zal MySQL gebruiken als fallback."
-#: ../../../../inc/themes/classic/ldap.inc:36
-#: ../../../../inc/themes/material-blue/ldap.inc:39
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:48
msgid "Nombre o dirección IP del servidor de LDAP."
msgstr "Hostnaam of IP adres van de 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
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:52
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:83
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:134
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:168
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:112
msgid "Ejemplos:"
msgstr "Voorbeelden:"
-#: ../../../../inc/themes/classic/ldap.inc:57
-#: ../../../../inc/themes/material-blue/ldap.inc:64
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:74
msgid "Usuario de conexión"
msgstr "Verbind Gebruiker"
-#: ../../../../inc/themes/classic/ldap.inc:61
-#: ../../../../inc/themes/material-blue/ldap.inc:68
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:79
msgid "Usuario para conectar con el servicio de LDAP."
msgstr "Gebruiker om verbinding te maken met de LDAP- service."
-#: ../../../../inc/themes/classic/ldap.inc:81
-#: ../../../../inc/themes/material-blue/ldap.inc:92
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:104
msgid "Clave de conexión"
msgstr "Verbind Wachtwoord"
-#: ../../../../inc/themes/classic/ldap.inc:92
-#: ../../../../inc/themes/material-blue/ldap.inc:111
-#: ../../../../inc/themes/material-blue/ldap.inc:133
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:109
+msgid "Clave del usuario de conexión a LDAP."
+msgstr "LDAP connectie gebruikers wachtwoord"
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:125
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:149
msgid "Base de búsqueda"
msgstr "Zoek basis."
-#: ../../../../inc/themes/classic/ldap.inc:96
-#: ../../../../inc/themes/material-blue/ldap.inc:115
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:130
msgid "Base en la que realizar la búsqueda de usuarios de LDAP."
msgstr " LDAP uitvalsbasis om de LDAP-gebruikers zoekopdrachten te doen."
-#: ../../../../inc/themes/classic/ldap.inc:120
-#: ../../../../inc/themes/material-blue/ldap.inc:143
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:160
msgid ""
"Grupo de LDAP al que debe de pertenecer el usuario para permitir el acceso."
msgstr "LDAP-groep waar de gebruiker in moet zitten om te kunnen inloggen."
-#: ../../../../inc/themes/classic/ldap.inc:124
-#: ../../../../inc/themes/material-blue/ldap.inc:147
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:164
msgid "Este grupo debe de estar ubicado en la base de búsquedas de LDAP."
msgstr " Deze groep moet in de LDAP-zoekbasis worden geplaatst ."
-#: ../../../../inc/themes/classic/ldap.inc:148
-#: ../../../../inc/themes/material-blue/ldap.inc:174
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:193
+#, fuzzy
msgid ""
"Define el grupo de usuarios por defecto para los nuevos usuarios de LDAP."
msgstr " Definieer de standaard gebruikers groep voor nieuwe LDAP-gebruikers."
-#: ../../../../inc/themes/classic/ldap.inc:165
-#: ../../../../inc/themes/material-blue/ldap.inc:190
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:210
msgid "Perfil por Defecto"
msgstr "Standaard Profiel"
-#: ../../../../inc/themes/classic/ldap.inc:169
-#: ../../../../inc/themes/material-blue/ldap.inc:194
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:215
msgid ""
"Define el perfil de usuarios por defecto para los nuevos usuarios de LDAP."
msgstr " Definieert het standaard profiel voor de nieuwe LDAP-gebruikers ."
-#: ../../../../inc/themes/classic/ldap.inc:186
-#: ../../../../inc/themes/material-blue/ldap.inc:210
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:232
msgid "Active Directory"
msgstr "Active Directory"
-#: ../../../../inc/themes/classic/ldap.inc:190
-#: ../../../../inc/themes/material-blue/ldap.inc:214
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:237
msgid "Habilita el modo de conexión con LDAP de Active Directory."
msgstr "Activeer Active Directory LDAP connectie mode"
-#: ../../../../inc/themes/classic/ldap.inc:202
-#: ../../../../inc/themes/material-blue/ldap.inc:228
-msgid "Comprobar"
-msgstr "Check"
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:253
+msgid "Resultados"
+msgstr ""
-#: ../../../../inc/themes/classic/ldap.inc:206
-#: ../../../../inc/themes/material-blue/ldap.inc:232
-msgid "Comprobar conexión con LDAP"
-msgstr "Check LDAP connectie"
-
-#: ../../../../inc/themes/classic/login.inc:46
-#: ../../../../inc/themes/material-blue/login.inc:74
-msgid "¿Olvidó su clave?"
-msgstr "Wachtwoord vergeten?"
-
-#: ../../../../inc/themes/classic/login.inc:63
-#: ../../../../inc/themes/material-blue/login.inc:90
-msgid "Aplicación actualizada correctamente"
-msgstr "Applicatie succesvol bijgewerkt"
-
-#: ../../../../inc/themes/classic/login.inc:68
-#: ../../../../inc/themes/classic/login.inc:69
-#: ../../../../inc/themes/material-blue/login.inc:95
-#: ../../../../inc/themes/material-blue/login.inc:96
-#: ../../../../inc/themes/material-blue/login.inc:98
-msgid "Nuevas Características"
-msgstr "Nieuwe features"
-
-#: ../../../../inc/themes/classic/mail.inc:11
-#: ../../../../inc/themes/material-blue/mail.inc:11
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:15
msgid "Habilitar notificaciones de correo"
msgstr "Activeer email notificaties"
-#: ../../../../inc/themes/classic/mail.inc:29
-#: ../../../../inc/themes/material-blue/config.inc:386
-#: ../../../../inc/themes/material-blue/mail.inc:36
-#: ../../../../inc/themes/material-blue/mail.inc:43
-msgid "Puerto"
-msgstr "Poort"
-
-#: ../../../../inc/themes/classic/mail.inc:37
-#: ../../../../inc/themes/material-blue/mail.inc:49
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:55
msgid "Habilitar Autentificación"
msgstr "Activeer Authenticatie"
-#: ../../../../inc/themes/classic/mail.inc:68
-#: ../../../../inc/themes/material-blue/mail.inc:91
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:94
+msgid "Seguridad"
+msgstr "Beveiliging"
+
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:98
msgid "Deshabilitada"
msgstr "Uitgeschakeld"
-#: ../../../../inc/themes/classic/mail.inc:77
-#: ../../../../inc/themes/material-blue/mail.inc:100
-#: ../../../../inc/themes/material-blue/mail.inc:107
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:108
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:116
msgid "Dirección de correo de envío"
msgstr "Emailadres ontvanger"
-#: ../../../../inc/themes/classic/mail.inc:85
-#: ../../../../inc/themes/material-blue/mail.inc:113
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:122
msgid "Habilitar peticiones por correo"
msgstr "Activeer aanvragen per email"
-#: ../../../../inc/themes/classic/mgmttabs.inc:70
-#: ../../../../inc/themes/classic/search.inc:150
-#: ../../../../inc/themes/material-blue/search.inc:160
-msgid "Más Acciones"
-msgstr "Meer acties"
-
-#: ../../../../inc/themes/classic/passreset.inc:13
-#: ../../../../inc/themes/material-blue/passreset.inc:7
-msgid "Solicitud de Cambio de Clave"
-msgstr "Aanvraag wachtwoord wijziging"
-
-#: ../../../../inc/themes/classic/passreset.inc:16
-msgid "Login del Usuario"
-msgstr "Login gebruiker"
-
-#: ../../../../inc/themes/classic/passreset.inc:21
-#: ../../../../inc/themes/material-blue/passreset.inc:21
-msgid "Email del Usuario"
-msgstr "Emailadres gebruiker"
-
-#: ../../../../inc/themes/classic/passreset.inc:27
-msgid "Nueva Clave"
-msgstr "Nieuw wachtwoord"
-
-#: ../../../../inc/themes/classic/passreset.inc:46
-#: ../../../../inc/themes/material-blue/passreset.inc:45
-msgid "Volver a iniciar sesión"
-msgstr "Terug naar login"
-
-#: ../../../../inc/themes/classic/passreset.inc:48
-#: ../../../../inc/themes/material-blue/passreset.inc:51
-#: ../../../../inc/themes/material-blue/passreset.inc:52
-msgid "Solicitar"
-msgstr "Aanvraag"
-
-#: ../../../../inc/themes/classic/passreset.inc:49
-msgid "Solicitar cambio de clave"
-msgstr "Aanvragen wachtwoord reset"
-
-#: ../../../../inc/themes/classic/passreset.inc:51
-#: ../../../../inc/themes/material-blue/passreset.inc:56
-#: ../../../../inc/themes/material-blue/passreset.inc:57
-msgid "Cambiar"
-msgstr "Wijzig"
-
-#: ../../../../inc/themes/classic/passreset.inc:52
-msgid "Cambiar Clave"
-msgstr "Wijzig Wachtwoord"
-
-#: ../../../../inc/themes/classic/preferences.inc:73
-#: ../../../../inc/themes/material-blue/preferences.inc:74
-msgid "Ordenar resultados por visitas"
-msgstr "Sorteer resultaten op bekeken door"
-
-#: ../../../../inc/themes/classic/preferences.inc:77
-#: ../../../../inc/themes/material-blue/preferences.inc:78
-msgid ""
-"Ordena los resultados de búsqueda por el número de visitas de las cuentas."
-msgstr ""
-"Soorteerd de account zoekresultaten op het aantal accountbezichtigingen."
-
-#: ../../../../inc/themes/classic/preferences.inc:90
-#: ../../../../inc/themes/material-blue/preferences.inc:91
-msgid "Barra de navegación superior"
-msgstr "Navigatie bar bovenin"
-
-#: ../../../../inc/themes/classic/preferences.inc:94
-#: ../../../../inc/themes/material-blue/preferences.inc:95
-msgid "Mostrar una barra de navegación superior en las búsquedas."
-msgstr "Toont een navigatie bar in de top van de zoek resultaten+"
-
-#: ../../../../inc/themes/classic/preferences.inc:107
-#: ../../../../inc/themes/material-blue/preferences.inc:108
-msgid "Mostrar Acciones Ocultas"
-msgstr "Toont Verborgen Acties"
-
-#: ../../../../inc/themes/classic/preferences.inc:111
-#: ../../../../inc/themes/material-blue/preferences.inc:112
-msgid ""
-"Mostrar las acciones ocultas para los elementos de la búsqueda de cuentas."
-msgstr "Toont altijd de verborgen acties op de accounts zoek pagina"
-
-#: ../../../../inc/themes/classic/profiles.inc:11
-#: ../../../../inc/themes/material-blue/profiles.inc:14
-msgid "Nombre del perfil"
-msgstr "Profiel naam"
-
-#: ../../../../inc/themes/classic/profiles.inc:19
-#: ../../../../inc/themes/material-blue/profiles.inc:30
-msgid "Ver detalles de cuenta"
-msgstr "Bekijk account details"
-
-#: ../../../../inc/themes/classic/profiles.inc:19
-#: ../../../../inc/themes/material-blue/profiles.inc:30
-msgid "Ver"
-msgstr "Bekijk"
-
-#: ../../../../inc/themes/classic/profiles.inc:23
-#: ../../../../inc/themes/material-blue/profiles.inc:35
-msgid "Ver clave de cuenta"
-msgstr "Bekijk account wachtwoord"
-
-#: ../../../../inc/themes/classic/profiles.inc:28
-#: ../../../../inc/themes/material-blue/profiles.inc:40
-msgid "Ver historial de cuenta"
-msgstr "Bekijk account geschiedenis"
-
-#: ../../../../inc/themes/classic/profiles.inc:32
-#: ../../../../inc/themes/material-blue/profiles.inc:45
-msgid "Editar cuenta"
-msgstr "Wijzig account"
-
-#: ../../../../inc/themes/classic/profiles.inc:32
-#: ../../../../inc/themes/material-blue/profiles.inc:45
-msgid "Editar"
-msgstr "Wijzig"
-
-#: ../../../../inc/themes/classic/profiles.inc:37
-#: ../../../../inc/themes/material-blue/profiles.inc:50
-msgid "Editar clave de cuenta"
-msgstr "Wijzig account wachtwoord"
-
-#: ../../../../inc/themes/classic/profiles.inc:37
-#: ../../../../inc/themes/material-blue/profiles.inc:50
-msgid "Editar Clave"
-msgstr "Wijzig Wachtwoord"
-
-#: ../../../../inc/themes/classic/profiles.inc:41
-msgid "Añadir nueva cuenta"
-msgstr "Aanmaken nieuw account"
-
-#: ../../../../inc/themes/classic/profiles.inc:41
-msgid "Añadir"
-msgstr "Voeg toe"
-
-#: ../../../../inc/themes/classic/profiles.inc:46
-msgid "Borrar cuenta"
-msgstr "Verwijder account"
-
-#: ../../../../inc/themes/classic/profiles.inc:46
-msgid "Borrar"
-msgstr "Verwijder"
-
-#: ../../../../inc/themes/classic/profiles.inc:50
-#: ../../../../inc/themes/material-blue/profiles.inc:60
-msgid "Ver archivos de cuenta"
-msgstr "Bekijk account bestanden"
-
-#: ../../../../inc/themes/classic/profiles.inc:61
-#: ../../../../inc/themes/material-blue/profiles.inc:72
-msgid "Configuración general"
-msgstr "Algemene instellingen"
-
-#: ../../../../inc/themes/classic/profiles.inc:65
-msgid "Cambiar clave maestra"
-msgstr "Wijzig Master Wachtwoord"
-
-#: ../../../../inc/themes/classic/profiles.inc:70
-msgid "Realizar copia de seguridad"
-msgstr "Backup maken"
-
-#: ../../../../inc/themes/classic/profiles.inc:70
-#: ../../../../inc/themes/material-blue/profiles.inc:82
-msgid "Backup"
-msgstr "Backup"
-
-#: ../../../../inc/themes/classic/profiles.inc:74
-#: ../../../../inc/themes/material-blue/profiles.inc:87
-msgid "Realizar importación de cuentas"
-msgstr "Importeer Accounts"
-
-#: ../../../../inc/themes/classic/profiles.inc:81
-#: ../../../../inc/themes/material-blue/profiles.inc:93
-msgid "Gestión"
-msgstr "Management"
-
-#: ../../../../inc/themes/classic/profiles.inc:85
-#: ../../../../inc/themes/material-blue/profiles.inc:99
-msgid "Gestión de usuarios"
-msgstr "Gebruikers management"
-
-#: ../../../../inc/themes/classic/profiles.inc:89
-#: ../../../../inc/themes/material-blue/profiles.inc:104
-msgid "Gestión de grupos"
-msgstr "Groepen management"
-
-#: ../../../../inc/themes/classic/profiles.inc:94
-#: ../../../../inc/themes/material-blue/profiles.inc:109
-msgid "Gestión de perfiles"
-msgstr "Profielen management"
-
-#: ../../../../inc/themes/classic/profiles.inc:94
-#: ../../../../inc/themes/material-blue/profiles.inc:109
-msgid "Perfiles"
-msgstr "Profielen"
-
-#: ../../../../inc/themes/classic/profiles.inc:98
-#: ../../../../inc/themes/material-blue/profiles.inc:114
-msgid "Gestión de categorías"
-msgstr "Categoriëen Management"
-
-#: ../../../../inc/themes/classic/profiles.inc:103
-#: ../../../../inc/themes/material-blue/profiles.inc:119
-msgid "Gestión de clientes"
-msgstr "Klanten management"
-
-#: ../../../../inc/themes/classic/profiles.inc:107
-#: ../../../../inc/themes/material-blue/profiles.inc:124
-msgid "Gestión de campos personalizados"
-msgstr "Aangepaste velden management"
-
-#: ../../../../inc/themes/classic/profiles.inc:112
-#: ../../../../inc/themes/material-blue/profiles.inc:129
-msgid "Gestión de autorizaciones API"
-msgstr "API autorisatie management"
-
-#: ../../../../inc/themes/classic/profiles.inc:112
-#: ../../../../inc/themes/material-blue/profiles.inc:129
-msgid "Autorizaciones API"
-msgstr "API Autorisaties"
-
-#: ../../../../inc/themes/classic/profiles.inc:120
-#: ../../../../inc/themes/material-blue/profiles.inc:135
-msgid "Otros"
-msgstr "Anderen"
-
-#: ../../../../inc/themes/classic/profiles.inc:124
-#: ../../../../inc/themes/material-blue/profiles.inc:141
-msgid "Ver log de eventos"
-msgstr "Bekijk Event Log"
-
-#: ../../../../inc/themes/classic/profiles.inc:124
-#: ../../../../inc/themes/material-blue/profiles.inc:141
-msgid "Log de Eventos"
-msgstr "Event Log"
-
-#: ../../../../inc/themes/classic/profiles.inc:132
-#: ../../../../inc/themes/material-blue/profiles.inc:148
-msgid "Usado por"
-msgstr "Gebruikt door"
-
-#: ../../../../inc/themes/classic/profiles.inc:139
-#: ../../../../inc/themes/material-blue/profiles.inc:155
-msgid "No usado"
-msgstr "Niet gebruikt"
-
-#: ../../../../inc/themes/classic/request.inc:1
-#: ../../../../inc/themes/material-blue/request.inc:1
-msgid "Solicitar Modificación de Cuenta"
-msgstr "Aanvraag Account Modificatie"
-
-#: ../../../../inc/themes/classic/request.inc:22
-#: ../../../../inc/themes/material-blue/request.inc:25
-msgid "Petición"
-msgstr "Aanvraag"
-
-#: ../../../../inc/themes/classic/request.inc:24
-#: ../../../../inc/themes/material-blue/request.inc:29
-msgid "Descripción de la petición"
-msgstr "Aanvraag beschrijving"
-
-#: ../../../../inc/themes/classic/request.inc:33
-#: ../../../../inc/themes/material-blue/account.inc:454
-#: ../../../../inc/themes/material-blue/editpass.inc:55
-#: ../../../../inc/themes/material-blue/mgmttabs.inc:13
-#: ../../../../inc/themes/material-blue/request.inc:42
-msgid "Atrás"
-msgstr "Terug"
-
-#: ../../../../inc/themes/classic/request.inc:38
-#: ../../../../inc/themes/material-blue/request.inc:48
-msgid "Enviar"
-msgstr "Verstuur"
-
-#: ../../../../inc/themes/classic/search.inc:10
-#: ../../../../inc/themes/classic/search.inc:189
-#: ../../../../inc/themes/material-blue/search.inc:10
-#: ../../../../inc/themes/material-blue/search.inc:199
-msgid "Filtro ON"
-msgstr "Filter AAN"
-
-#: ../../../../inc/themes/classic/search.inc:14
-#: ../../../../inc/themes/classic/search.inc:193
-#: ../../../../inc/themes/material-blue/search.inc:14
-#: ../../../../inc/themes/material-blue/search.inc:203
-msgid "Global ON"
-msgstr "Globaal AAN"
-
-#: ../../../../inc/themes/classic/search.inc:63
-#: ../../../../inc/themes/material-blue/search.inc:65
-msgid "Buscar en Wiki"
-msgstr "Zoek in de Wiki"
-
-#: ../../../../inc/themes/classic/search.inc:99
-#: ../../../../inc/themes/material-blue/search.inc:101
-msgid "Abrir enlace a"
-msgstr "Open link aar"
-
-#: ../../../../inc/themes/classic/search.inc:117
-#: ../../../../inc/themes/material-blue/search.inc:125
-msgid "Archivos adjuntos"
-msgstr "Bijlages"
-
-#: ../../../../inc/themes/classic/search.inc:124
-#: ../../../../inc/themes/material-blue/search.inc:134
-msgid "Enlace a Wiki"
-msgstr "Link naar Wiki"
-
-#: ../../../../inc/themes/classic/searchbox.inc:5
-#: ../../../../inc/themes/material-blue/searchbox.inc:5
-msgid "Limpiar"
-msgstr "Opschonen"
-
-#: ../../../../inc/themes/classic/searchbox.inc:7
-#: ../../../../inc/themes/material-blue/searchbox.inc:10
-msgid "Texto a buscar"
-msgstr "Zoek naar tekst"
-
-#: ../../../../inc/themes/classic/searchbox.inc:12
-#: ../../../../inc/themes/material-blue/searchbox.inc:15
-msgid "Parámetros especiales:"
-msgstr "Speciale parameters"
-
-#: ../../../../inc/themes/classic/searchbox.inc:15
-#: ../../../../inc/themes/material-blue/searchbox.inc:18
-msgid "Buscar cuentas a las que 'login' tenga acceso"
-msgstr "Zoek accounts met 'Login' toegangsrechten."
-
-#: ../../../../inc/themes/classic/searchbox.inc:17
-#: ../../../../inc/themes/material-blue/searchbox.inc:20
-msgid "Buscar cuentas a las que 'group_name' tenga acceso"
-msgstr "Zoek accounts met 'groep_naam' toegangsrechten."
-
-#: ../../../../inc/themes/classic/searchbox.inc:19
-#: ../../../../inc/themes/material-blue/searchbox.inc:22
-msgid "Buscar cuentas con archivos con el nombre 'file_name'"
-msgstr ""
-" Zoeken naar accounts waarbij een bestand is met de naam ' bestandsnaam ' "
-
-#: ../../../../inc/themes/classic/searchbox.inc:24
-#: ../../../../inc/themes/material-blue/searchbox.inc:28
-#: ../../../../inc/themes/material-blue/searchbox.inc:31
-msgid "Búsqueda global"
-msgstr "Globale zoek opdracht"
-
-#: ../../../../inc/themes/classic/searchbox.inc:50
-#: ../../../../inc/themes/material-blue/searchbox.inc:57
-msgid "CPP"
-msgstr "APP"
-
-#: ../../../../inc/themes/classic/searchbox.inc:51
-#: ../../../../inc/themes/material-blue/searchbox.inc:57
-msgid "Cuentas por página"
-msgstr "Accounts per pagina"
-
-#: ../../../../inc/themes/classic/security.inc:4
-msgid "Autenticación"
-msgstr "Authenticatie"
-
-#: ../../../../inc/themes/classic/security.inc:13
-msgid "Autenticación en 2 pasos"
-msgstr "Twee factor authenticatie"
-
-#: ../../../../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 "Scan de aangeboden QR code en vul de 6 cijfers in"
-
-#: ../../../../inc/themes/classic/security.inc:29
-#: ../../../../inc/themes/material-blue/security.inc:27
-msgid "Activar"
-msgstr "Activeer"
-
-#: ../../../../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 "Fout bij ophalen van de QR code"
-
-#: ../../../../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 ""
-"Indien geactiveerd, kunt u alleen inloggen indien u het apparaat heeft dat "
-"de code genereert."
-
-#: ../../../../inc/themes/classic/sessionbar.inc:6
-#: ../../../../inc/themes/material-blue/footer.inc:7
-msgid "Cambiar clave de usuario"
-msgstr "Wijzigen gebruikers wachtwoord"
-
-#: ../../../../inc/themes/classic/sessionbar.inc:15
-#: ../../../../inc/themes/material-blue/footer.inc:5
-msgid "Salir"
-msgstr "Uitloggen"
-
-#: ../../../../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 "Opties"
-
-#: ../../../../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 "Ververs Autorisatie"
-
-#: ../../../../inc/themes/classic/tokens.inc:43
-#: ../../../../inc/themes/material-blue/tokens.inc:46
-msgid "Token"
-msgstr "Sleutel"
-
-#: ../../../../inc/themes/classic/update.inc:18
-#: ../../../../inc/themes/material-blue/update.inc:20
-msgid "Actualizado"
-msgstr "Bijgewerkt"
-
-#: ../../../../inc/themes/classic/update.inc:23
-#: ../../../../inc/themes/material-blue/update.inc:22
-msgid "Error al comprobar actualizaciones"
-msgstr "Fout bij checken van updates"
-
-#: ../../../../inc/themes/classic/upgrade.inc:8
-#: ../../../../inc/themes/material-blue/upgrade.inc:6
-msgid "Actualización de BBDD"
-msgstr "DB Update"
-
-#: ../../../../inc/themes/classic/upgrade.inc:10
-msgid "Introducir Código de Seguridad"
-msgstr "Invullen beveiligingscode"
-
-#: ../../../../inc/themes/classic/upgrade.inc:11
-#: ../../../../inc/themes/material-blue/upgrade.inc:12
-msgid "Código de Seguridad"
-msgstr "Beveilingscode"
-
-#: ../../../../inc/themes/classic/upgrade.inc:21
-#: ../../../../inc/themes/material-blue/upgrade.inc:23
-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 "Volledige gebruikersnaam"
-
-#: ../../../../inc/themes/classic/users.inc:25
-#: ../../../../inc/themes/material-blue/users.inc:31
-msgid "Login de inicio de sesión"
-msgstr "Sessie login"
-
-#: ../../../../inc/themes/classic/users.inc:64
-#: ../../../../inc/themes/material-blue/users.inc:78
-msgid "Dirección de correo"
-msgstr "Emailadres"
-
-#: ../../../../inc/themes/classic/users.inc:103
-#: ../../../../inc/themes/material-blue/users.inc:136
-msgid "Administrador de la aplicación"
-msgstr "Applicatie Administrator"
-
-#: ../../../../inc/themes/classic/users.inc:103
-#: ../../../../inc/themes/material-blue/users.inc:139
-msgid "Admin. Aplicación"
-msgstr "Applicatie Admin"
-
-#: ../../../../inc/themes/classic/users.inc:107
-#: ../../../../inc/themes/material-blue/users.inc:143
-msgid "Administrador de cuentas"
-msgstr "Accounts administrator"
-
-#: ../../../../inc/themes/classic/users.inc:107
-#: ../../../../inc/themes/material-blue/users.inc:146
-msgid "Admin. Cuentas"
-msgstr "Accounts Admin"
-
-#: ../../../../inc/themes/classic/users.inc:117
-#: ../../../../inc/themes/material-blue/users.inc:158
-msgid "Forzar cambio de clave"
-msgstr "Forceer wachtwoord wijziging"
-
-#: ../../../../inc/themes/classic/users.inc:154
-#: ../../../../inc/themes/material-blue/users.inc:198
-msgid "Entradas"
-msgstr "Waarden"
-
-#: ../../../../inc/themes/classic/users.inc:159
-#: ../../../../inc/themes/material-blue/users.inc:203
-msgid "Último Acceso"
-msgstr "Laatste Toegang"
-
-#: ../../../../inc/themes/classic/users.inc:169
-#: ../../../../inc/themes/material-blue/users.inc:213
-msgid "Fecha Clave Maestra"
-msgstr "Master Wachtwoord datum"
-
-#: ../../../../inc/themes/classic/wiki.inc:11
-#: ../../../../inc/themes/material-blue/wiki.inc:11
-msgid "Habilitar enlaces Wiki"
-msgstr "Toestaan van Wiki links"
-
-#: ../../../../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 ""
-"Toestaan van de optie aan om een link voor zoek resultaten in een externe "
-"Wiki"
-
-#: ../../../../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 Zoek 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 "De Klantnaam is gebruikt als parameter"
-
-#: ../../../../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 "Voorbeeld:"
-
-#: ../../../../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 pagina 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 "URL waar gebruikers naar toe verwezen worden"
-
-#: ../../../../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 ""
-"De account naam is gebruikt als een parameter in een Wiki zoek variabele"
-
-#: ../../../../inc/themes/classic/wiki.inc:81
-#: ../../../../inc/themes/material-blue/wiki.inc:93
-msgid "Prefijo para nombre de cuenta"
-msgstr "Account naam voorvoegsel"
-
-#: ../../../../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 ""
-"Voorvoegsel om te bepalen welk account een link moet hebben naar de Wiki."
-
-#: ../../../../inc/themes/classic/wiki.inc:121
-#: ../../../../inc/themes/material-blue/wiki.inc:135
-msgid "Añadir filtro"
-msgstr "Toevoegen filter"
-
-#: ../../../../inc/themes/classic/wiki.inc:122
-#: ../../../../inc/themes/material-blue/wiki.inc:136
-msgid "Eliminar filtro"
-msgstr "Verwijder filter"
-
-#: ../../../../inc/themes/material-blue/account.inc:4
-msgid "Histórico"
-msgstr "Geschiedenis"
-
-#: ../../../../inc/themes/material-blue/account.inc:34
-msgid "> Usar texto y crear nuevo"
-msgstr "> Gebruik de text en maak een nieuwe"
-
-#: ../../../../inc/themes/material-blue/account.inc:43
-msgid "Seleccionar o escribir para crear uno nuevo"
-msgstr "Selecteer of wijzig om een nieuwe te maken"
-
-#: ../../../../inc/themes/material-blue/account.inc:114
-msgid "Clave (Repetir)"
-msgstr "Wachtwoord (Herhaal)"
-
-#: ../../../../inc/themes/material-blue/backup.inc:58
-#: ../../../../inc/themes/material-blue/backup.inc:144
-#: ../../../../inc/themes/material-blue/encryption.inc:115
-#: ../../../../inc/themes/material-blue/import.inc:215
-msgid "Realizar"
-msgstr "Uitvoeren"
-
-#: ../../../../inc/themes/material-blue/config.inc:67
-msgid "Forzar HTTPS"
-msgstr "Forceer HTTPS"
-
-#: ../../../../inc/themes/material-blue/config.inc:71
-msgid "Fuerza para que todas las conexiones sean a través de HTTPS."
-msgstr "Dit forceert het gebruik van HTTPS op alle verbindingen"
-
-#: ../../../../inc/themes/material-blue/config.inc:232
-#: ../../../../inc/themes/material-blue/preferences.inc:68
-msgid "Número de resultados por página"
-msgstr "Resultaten per pagina"
-
-#: ../../../../inc/themes/material-blue/config.inc:346
-msgid "Tamaño máximo de archivo en bytes"
-msgstr "Maximale bestandsgrootte in bytes"
-
-#: ../../../../inc/themes/material-blue/config.inc:353
-msgid "Proxy"
-msgstr "Proxy"
-
-#: ../../../../inc/themes/material-blue/config.inc:359
-msgid "Usar Proxy"
-msgstr "Gebruik Proxy"
-
-#: ../../../../inc/themes/material-blue/config.inc:380
-msgid "Servidor proxy"
-msgstr "Proxy server"
-
-#: ../../../../inc/themes/material-blue/config.inc:394
-msgid "Puerto del servidor proxy"
-msgstr "Proxy server poort"
-
-#: ../../../../inc/themes/material-blue/config.inc:408
-msgid "Usuario del servidor proxy"
-msgstr "Proxy server gebruiker"
-
-#: ../../../../inc/themes/material-blue/config.inc:422
-msgid "Clave del servidor proxy"
-msgstr "Proxy server wachtwoord"
-
-#: ../../../../inc/themes/material-blue/customfields.inc:14
-msgid "Nombre del campo"
-msgstr "Veld naam"
-
-#: ../../../../inc/themes/material-blue/customfields.inc:47
-msgid "Ayuda del campo"
-msgstr "Veld help"
-
-#: ../../../../inc/themes/material-blue/encryption.inc:148
-msgid "Intentos"
-msgstr ""
-
-#: ../../../../inc/themes/material-blue/footer.inc:11
-msgid "Preferencias de usuario"
-msgstr "Gebruiker voorkeuren"
-
-#: ../../../../inc/themes/material-blue/install.inc:33
-msgid "Usuario administrador de sysPass"
-msgstr "sysPass admin gebruiker"
-
-#: ../../../../inc/themes/material-blue/install.inc:81
-msgid "Usuario acceso BBDD"
-msgstr "DB gebruiker"
-
-#: ../../../../inc/themes/material-blue/install.inc:86
-msgid "Usuario con permisos de administrador de MySQL"
-msgstr "Een gebruiker met MySQL admin rechten"
-
-#: ../../../../inc/themes/material-blue/install.inc:94
-msgid "Clave acceso BBDD"
-msgstr "DB wachtwoord"
-
-#: ../../../../inc/themes/material-blue/install.inc:101
-msgid "Nombre BBDD para sysPass"
-msgstr "sysPass database naam"
-
-#: ../../../../inc/themes/material-blue/install.inc:113
-msgid "Servidor BBDD para sysPass"
-msgstr "sysPass database server"
-
-#: ../../../../inc/themes/material-blue/install.inc:118
-msgid "Nombre del servidor para instalar la base de datos de sysPass"
-msgstr "Servernaam waarop de sysPass database geinstalleerd wordt"
-
-#: ../../../../inc/themes/material-blue/ldap.inc:96
-msgid "Clave del usuario de conexión a LDAP."
-msgstr "LDAP connectie gebruikers wachtwoord"
-
-#: ../../../../inc/themes/material-blue/mail.inc:118
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:128
msgid ""
"Habilita que los usuarios puedan solicitar modificaciones o acceso a las "
"cuentas sin permisos."
@@ -5036,32 +4947,611 @@ msgstr ""
"Sta gebruikers toe om modificatie op bestaande accounts aan te vragen of "
"toegang te verlenen aan accounts waar ze geen rechten op hebben"
-#: ../../../../inc/themes/material-blue/profiles.inc:25
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:16
+msgid "Habilitar enlaces Wiki"
+msgstr "Toestaan van Wiki links"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:21
+msgid ""
+"Habilita la opción de añadir un enlace a Wiki externa para los resultados de "
+"la búsqueda."
+msgstr ""
+"Toestaan van de optie aan om een link voor zoek resultaten in een externe "
+"Wiki"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:37
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:64
+msgid "URL de búsqueda Wiki"
+msgstr "Wiki Zoek URL"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:42
+msgid "URL que utiliza la wiki para realizar una búsqueda de una página."
+msgstr "URL welke de Wiki gebruikt voor een zoek actie"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:46
+msgid "Como parámetro se utiliza el nombre del cliente."
+msgstr "De Klantnaam is gebruikt als parameter"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:50
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:83
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:163
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:190
+msgid "Ejemplo:"
+msgstr "Voorbeeld:"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:70
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:97
+msgid "URL de página en Wiki"
+msgstr "Wiki pagina URL"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:75
+msgid "URL que utiliza la wiki para acceder a los detalles de una página."
+msgstr "URL waar gebruikers naar toe verwezen worden"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:79
+msgid ""
+"El nombre de la cuenta se utiliza como parámetro de la variable de búsqueda "
+"de la Wiki."
+msgstr ""
+"De account naam is gebruikt als een parameter in een Wiki zoek variabele"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:103
+msgid "Prefijo para nombre de cuenta"
+msgstr "Account naam voorvoegsel"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:108
+msgid ""
+"Prefijo para determinar qué cuentas tienen un enlace a una página de la Wiki."
+msgstr ""
+"Voorvoegsel om te bepalen welk account een link moet hebben naar de Wiki."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:123
+msgid "DokuWiki API"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:129
+msgid "Habilitar API de DokuWiki"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:134
+msgid ""
+"Habilita la conexión a la API XML-RPC de DokuWiki para los enlaces Wiki."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:137
+msgid ""
+"Para que esta característica funcione, es necesario habilitar los enlaces "
+"Wiki para el filtrado de cuentas."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:154
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:175
+msgid "URL API"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:159
+msgid "URL de la API de DokuWiki."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:181
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:203
+msgid "URL Base"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:186
+msgid "URL base de DokuWiki."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:214
+msgid "Usuario para conectar a la API de DokuWiki."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:242
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:258
+msgid "Namespace"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:247
+msgid "Namespace utilizado para buscar las páginas."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:22
+msgid "Fecha / Hora"
+msgstr "Datum / Tijd"
+
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:25
+msgid "Nivel"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:28
+msgid "Evento"
+msgstr "Evenement"
+
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:34
+msgid "IP"
+msgstr "IP"
+
+#: ../../../../inc/themes/material-blue/views/grid/datagrid-nav-full.inc:11
+msgid "Filtro ON"
+msgstr "Filter AAN"
+
+#: ../../../../inc/themes/material-blue/views/grid/datatabs-grid.inc:102
+msgid "Eliminar Seleccionados"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:25
+msgid "Nombre del campo"
+msgstr "Veld naam"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:52
+msgid "Texto Ayuda"
+msgstr "Help Tekst"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:58
+msgid "Ayuda del campo"
+msgstr "Veld help"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:63
+msgid "Obligatorio"
+msgstr "Vereist"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:24
+msgid "Nombre del grupo"
+msgstr "Groep naam"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:37
+msgid "Descripción del grupo"
+msgstr "Groep omschrijving"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:20
+msgid "Nombre del plugin"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:32
+msgid "Versión del plugin"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:37
+msgid "Versión Compatible"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:44
+msgid "Versión de sysPass compatible"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:49
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:25
+msgid "Autor"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:56
+msgid "Autor del plugin"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:24
+msgid "Nombre del perfil"
+msgstr "Profiel naam"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:37
msgid "Crear nueva cuenta"
msgstr "Maak een nieuw account"
-#: ../../../../inc/themes/material-blue/profiles.inc:25
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:37
msgid "Crear"
msgstr "Maken"
-#: ../../../../inc/themes/material-blue/profiles.inc:55
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:44
+msgid "Ver detalles de cuenta"
+msgstr "Bekijk account details"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:44
+msgid "Ver"
+msgstr "Bekijk"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:51
+msgid "Ver clave de cuenta"
+msgstr "Bekijk account wachtwoord"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:58
+msgid "Ver historial de cuenta"
+msgstr "Bekijk account geschiedenis"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:65
+msgid "Editar cuenta"
+msgstr "Wijzig account"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:72
+msgid "Editar clave de cuenta"
+msgstr "Wijzig account wachtwoord"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:72
+msgid "Editar Clave"
+msgstr "Wijzig Wachtwoord"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:79
msgid "Eliminar cuenta"
msgstr "Verwijder account"
-#: ../../../../inc/themes/material-blue/profiles.inc:55
-msgid "Eliminar"
-msgstr "Verwijder"
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:86
+msgid "Ver archivos de cuenta"
+msgstr "Bekijk account bestanden"
-#: ../../../../inc/themes/material-blue/profiles.inc:77
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:93
+msgid "Publicar enlace a cuenta"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:93
+msgid "Publicar Enlace"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:100
+msgid "Crear cuenta privada"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:107
+msgid "Asignar permisos"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:135
msgid "Opciones de encriptación"
msgstr "Encryptie opties"
-#: ../../../../inc/themes/material-blue/profiles.inc:82
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:142
msgid "Realizar copia de seguridad y exportar"
msgstr "Maak een backup en exporteer"
-#~ msgid "Indicar la clave de la BBDD"
-#~ msgstr "Geef het database wachtwoord op"
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:142
+msgid "Backup"
+msgstr "Backup"
-#~ msgid "Clave del usuario administrador de la Base de Datos"
-#~ msgstr "Database administrator wachtwoord"
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:149
+msgid "Realizar importación de cuentas"
+msgstr "Importeer Accounts"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:155
+msgid "Gestión"
+msgstr "Management"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:163
+msgid "Gestión de usuarios"
+msgstr "Gebruikers management"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:170
+msgid "Gestión de grupos"
+msgstr "Groepen management"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:177
+msgid "Gestión de perfiles"
+msgstr "Profielen management"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:184
+msgid "Gestión de categorías"
+msgstr "Categoriëen Management"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:191
+msgid "Gestión de clientes"
+msgstr "Klanten management"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:198
+msgid "Gestión de campos personalizados"
+msgstr "Aangepaste velden management"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:205
+msgid "Gestión de autorizaciones API"
+msgstr "API autorisatie management"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:212
+msgid "Gestión de enlaces"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:219
+msgid "Gestión de cuentas"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:233
+msgid "Gestión de etiquetas"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:239
+msgid "Otros"
+msgstr "Anderen"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:247
+msgid "Ver log de eventos"
+msgstr "Bekijk Event Log"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:247
+msgid "Log de Eventos"
+msgstr "Event Log"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:254
+msgid "Usado por"
+msgstr "Gebruikt door"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:35
+msgid "Hash"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:39
+msgid "Uso"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/itemshow/tags.inc:22
+msgid "Nombre de la etiqueta"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:37
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:135
+msgid "Opciones"
+msgstr "Opties"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:40
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:44
+msgid "Regenerar Autorización"
+msgstr "Ververs Autorisatie"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:50
+msgid "Token"
+msgstr "Sleutel"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:25
+msgid "Nombre de usuario completo"
+msgstr "Volledige gebruikersnaam"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:39
+msgid "Login de inicio de sesión"
+msgstr "Sessie login"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:84
+msgid "Dirección de correo"
+msgstr "Emailadres"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:139
+msgid "Administrador de la aplicación"
+msgstr "Applicatie Administrator"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:146
+msgid "Administrador de cuentas"
+msgstr "Accounts administrator"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:161
+msgid "Forzar cambio de clave"
+msgstr "Forceer wachtwoord wijziging"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:175
+msgid "Entradas"
+msgstr "Waarden"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:180
+msgid "Último Acceso"
+msgstr "Laatste Toegang"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:190
+msgid "Fecha Clave Maestra"
+msgstr "Master Wachtwoord datum"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:11
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:61
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:64
+msgid "Salir"
+msgstr "Uitloggen"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:25
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:56
+msgid "Preferencias de usuario"
+msgstr "Gebruiker voorkeuren"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:34
+#, php-format
+msgid "Hay %d notificaciones pendientes"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:40
+#, fuzzy
+msgid "No hay noInes pendientes"
+msgstr "Er zijn geen toegestande extensies"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:73
+msgid "Indica si la conexión utiliza HTTPS."
+msgstr "Laat zien of de verbinding HTTPS is"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:73
+msgid ""
+"Las claves de formularios enviados se encriptan mediante PKI, el resto de "
+"datos no."
+msgstr ""
+"De verzonden wachtwoorden worden versleuteld via PKI, de andere data niet. "
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:78
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:74
+msgid "Demo"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:89
+msgid "Ayuda :: FAQ :: Changelog"
+msgstr "Help :: FAQ :: Changelog"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:93
+msgid "Un proyecto de cygnux.org"
+msgstr "Een cygnux.org project"
+
+#: ../../../../inc/themes/material-blue/views/main/body-start.inc:4
+msgid "Javascript es necesario para el correcto funcionamiento"
+msgstr "Javascript is benodigd om dit correct uit te voeren."
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:9
+#, php-format
+msgid "Instalación %s"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:19
+msgid "Admin de sysPass"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:27
+msgid "Usuario administrador de sysPass"
+msgstr "sysPass admin gebruiker"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:35
+msgid "Login del usuario administrador de sysPass"
+msgstr "sysPass administrator Login"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:67
+msgid "Configurar BBDD"
+msgstr "DB Configuratie"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:77
+msgid "Usuario acceso BBDD"
+msgstr "DB gebruiker"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:85
+msgid "Usuario con permisos de administrador de MySQL"
+msgstr "Een gebruiker met MySQL admin rechten"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:93
+msgid "Clave acceso BBDD"
+msgstr "DB wachtwoord"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:102
+msgid "Nombre BBDD para sysPass"
+msgstr "sysPass database naam"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:110
+msgid "Nombre de la base de datos para sysPass"
+msgstr "SysPass database naam"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:119
+msgid "Servidor BBDD para sysPass"
+msgstr "sysPass database server"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:127
+msgid "Nombre del servidor para instalar la base de datos de sysPass"
+msgstr "Servernaam waarop de sysPass database geinstalleerd wordt"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:145
+msgid "Modo Hosting"
+msgstr "Hosting mode"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:152
+msgid "No crea ni verifica los permisos del usuario sobre la BBDD"
+msgstr "Dit maakt of verifieerd niet de gebruikers rechten op de database."
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:166
+#: ../../../../inc/themes/material-blue/views/main/install.inc:168
+msgid "Instalar"
+msgstr "Installeer"
+
+#: ../../../../inc/themes/material-blue/views/main/login.inc:37
+msgid "Clave Anterior"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/main/login.inc:73
+msgid "¿Olvidó su clave?"
+msgstr "Wachtwoord vergeten?"
+
+#: ../../../../inc/themes/material-blue/views/main/login.inc:82
+msgid "Aplicación actualizada correctamente"
+msgstr "Applicatie succesvol bijgewerkt"
+
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:7
+msgid "Solicitud de Cambio de Clave"
+msgstr "Aanvraag wachtwoord wijziging"
+
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:25
+msgid "Email del Usuario"
+msgstr "Emailadres gebruiker"
+
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:55
+msgid "Volver a iniciar sesión"
+msgstr "Terug naar login"
+
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:61
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:63
+msgid "Solicitar"
+msgstr "Aanvraag"
+
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:67
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:69
+msgid "Cambiar"
+msgstr "Wijzig"
+
+#: ../../../../inc/themes/material-blue/views/main/update.inc:21
+msgid "Actualizado"
+msgstr "Bijgewerkt"
+
+#: ../../../../inc/themes/material-blue/views/main/update.inc:27
+msgid "Error al comprobar actualizaciones"
+msgstr "Fout bij checken van updates"
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:4
+#, php-format
+msgid "Actualización %s"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:9
+msgid "Actualización de BBDD"
+msgstr "DB Update"
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:15
+msgid "Código de Seguridad"
+msgstr "Beveilingscode"
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:23
+msgid ""
+"Este código se encuentra en el archivo de configuración de sysPass con la "
+"etiqueta \"upgradeKey\""
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:28
+#, fuzzy
+msgid "He realizado una copia de seguridad completa de sysPass"
+msgstr "Maak een backup en exporteer"
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:40
+msgid "Por favor espere mientras el proceso se ejecuta"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:50
+msgid "Iniciar Actualización"
+msgstr "Start Update"
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:84
+msgid "Ordenar resultados por visitas"
+msgstr "Sorteer resultaten op bekeken door"
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:89
+msgid ""
+"Ordena los resultados de búsqueda por el número de visitas de las cuentas."
+msgstr ""
+"Soorteerd de account zoekresultaten op het aantal accountbezichtigingen."
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:102
+msgid "Barra de navegación superior"
+msgstr "Navigatie bar bovenin"
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:107
+msgid "Mostrar una barra de navegación superior en las búsquedas."
+msgstr "Toont een navigatie bar in de top van de zoek resultaten+"
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:120
+msgid "Mostrar Acciones Ocultas"
+msgstr "Toont Verborgen Acties"
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:125
+msgid ""
+"Mostrar las acciones ocultas para los elementos de la búsqueda de cuentas."
+msgstr "Toont altijd de verborgen acties op de accounts zoek pagina"
+
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:2
+msgid "Ver Wiki"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:10
+#, php-format
+msgid "Resultados de búsqueda de '%s'"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:13
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:23
+msgid "Página"
+msgstr ""
diff --git a/inc/locales/po_PO/LC_MESSAGES/messages.mo b/inc/locales/po_PO/LC_MESSAGES/messages.mo
new file mode 100644
index 00000000..f521c9e7
Binary files /dev/null and b/inc/locales/po_PO/LC_MESSAGES/messages.mo differ
diff --git a/inc/locales/po_PO/LC_MESSAGES/messages.po b/inc/locales/po_PO/LC_MESSAGES/messages.po
new file mode 100644
index 00000000..fbb21f53
--- /dev/null
+++ b/inc/locales/po_PO/LC_MESSAGES/messages.po
@@ -0,0 +1,5835 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: sysPass\n"
+"POT-Creation-Date: 2017-02-13 00:13+0100\n"
+"PO-Revision-Date: \n"
+"Last-Translator: nuxsmin \n"
+"Language-Team: wseredynski\n"
+"Language: pl\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-SourceCharset: UTF-8\n"
+"X-Poedit-Basepath: .\n"
+"X-Poedit-KeywordsList: _;gettext;gettext_noop;__\n"
+"X-Poedit-SearchPath-0: ../../../..\n"
+
+#: ../../../../ajax/ajax_accGetFiles.php:43
+#: ../../../../ajax/ajax_filesMgmt.php:58
+msgid "Gestión de archivos deshabilitada"
+msgstr "Zarządzanie plikami zostało zablokowane"
+
+#: ../../../../ajax/ajax_accGetFiles.php:50
+#: ../../../../ajax/ajax_accSearch.php:44
+#: ../../../../ajax/ajax_filesMgmt.php:54
+#: ../../../../ajax/ajax_filesMgmt.php:70
+#: ../../../../ajax/ajax_passReset.php:49
+#: ../../../../ajax/ajax_userPrefsSave.php:58
+msgid "CONSULTA INVÁLIDA"
+msgstr "NIEPRAWIDŁOWE ZAPYTANIE"
+
+#: ../../../../ajax/ajax_accSearch.php:38
+#: ../../../../ajax/ajax_userPrefsSave.php:51
+#: ../../../../inc/SP/Controller/RequestControllerTrait.class.php:125
+msgid "La sesión no se ha iniciado o ha caducado"
+msgstr "Sesja nie została zainicjowana bądź wygasła"
+
+#: ../../../../ajax/ajax_filesMgmt.php:73
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:93
+msgid "Subir Archivo"
+msgstr "Wyślij plik"
+
+#: ../../../../ajax/ajax_filesMgmt.php:79
+#, fuzzy
+msgid "No hay extensiones permitidas"
+msgstr "Brak dowzwolonych typów plików"
+
+#: ../../../../ajax/ajax_filesMgmt.php:96
+#: ../../../../inc/SP/Import/FileImport.class.php:97
+msgid "Tipo de archivo no soportado"
+msgstr "Ten typ pliku nie jest dozwolony"
+
+#: ../../../../ajax/ajax_filesMgmt.php:97
+msgid "Extensión"
+msgstr "Rozszerzenie"
+
+#: ../../../../ajax/ajax_filesMgmt.php:103
+msgid "Archivo inválido"
+msgstr "Nieprawidłowy plik"
+
+#: ../../../../ajax/ajax_filesMgmt.php:104
+#: ../../../../ajax/ajax_filesMgmt.php:166
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:835
+#: ../../../../inc/SP/Core/Upgrade.class.php:285
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:95
+#: ../../../../inc/themes/material-blue/views/config/import.inc:66
+#: ../../../../inc/themes/material-blue/views/config/import.inc:69
+msgid "Archivo"
+msgstr "Plik"
+
+#: ../../../../ajax/ajax_filesMgmt.php:117
+#: ../../../../ajax/ajax_filesMgmt.php:135
+#: ../../../../inc/SP/Import/FileImport.class.php:113
+#: ../../../../inc/SP/Import/FileImport.class.php:157
+#: ../../../../inc/SP/Import/FileImport.class.php:185
+msgid "Error interno al leer el archivo"
+msgstr "Błąd podczas odczytywania pliku"
+
+#: ../../../../ajax/ajax_filesMgmt.php:124
+msgid "Tamaño de archivo superado"
+msgstr "Przekroczony rozmiar pliku"
+
+#: ../../../../ajax/ajax_filesMgmt.php:125
+#: ../../../../ajax/ajax_filesMgmt.php:168
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:284
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:97
+msgid "Tamaño"
+msgstr "Rozmiar"
+
+#: ../../../../ajax/ajax_filesMgmt.php:144
+msgid "Archivo guardado"
+msgstr "Plik został zapisany"
+
+#: ../../../../ajax/ajax_filesMgmt.php:146
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:77
+msgid "No se pudo guardar el archivo"
+msgstr "Błąd podczas zapisu pliku"
+
+#: ../../../../ajax/ajax_filesMgmt.php:154
+#: ../../../../ajax/ajax_filesMgmt.php:198
+msgid "No es un ID de archivo válido"
+msgstr "Nieprawidłowe ID pliku"
+
+#: ../../../../ajax/ajax_filesMgmt.php:160
+msgid "El archivo no existe"
+msgstr "Plik nie istnieje"
+
+#: ../../../../ajax/ajax_filesMgmt.php:163
+#: ../../../../inc/themes/material-blue/views/account/files-list.inc:34
+msgid "Descargar Archivo"
+msgstr "Pobierz plik"
+
+#: ../../../../ajax/ajax_filesMgmt.php:164
+#: ../../../../inc/SP/Api/SyspassApi.class.php:82
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:518
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:19
+msgid "ID"
+msgstr "ID"
+
+#: ../../../../ajax/ajax_filesMgmt.php:165
+#: ../../../../inc/SP/Api/SyspassApi.class.php:83
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:280
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:832
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:719
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:729
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:744
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:833
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1102
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:519
+#: ../../../../inc/SP/Controller/MainController.class.php:573
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:94
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:76
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:11
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:13
+msgid "Cuenta"
+msgstr "Konto"
+
+#: ../../../../ajax/ajax_filesMgmt.php:167
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:206
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:283
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:55
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:718
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:728
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:743
+#: ../../../../inc/SP/Controller/LoginController.class.php:344
+#: ../../../../inc/SP/Controller/LoginController.class.php:369
+#: ../../../../inc/SP/Controller/LoginController.class.php:407
+#: ../../../../inc/SP/Controller/LoginController.class.php:425
+#: ../../../../inc/SP/Controller/LoginController.class.php:431
+#: ../../../../inc/SP/Core/Init.class.php:430
+#: ../../../../inc/SP/Core/Init.class.php:670
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:96
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:75
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:31
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:33
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:39
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:46
+msgid "Tipo"
+msgstr "Typ"
+
+#: ../../../../ajax/ajax_filesMgmt.php:204
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:827
+msgid "Archivo eliminado"
+msgstr "Plik został usunięty"
+
+#: ../../../../ajax/ajax_filesMgmt.php:206
+#, fuzzy
+msgid "Error al eliminar el archivo"
+msgstr "Błąd poczas usuwania pliku"
+
+#: ../../../../ajax/ajax_filesMgmt.php:209
+#: ../../../../ajax/ajax_userPrefsSave.php:97
+#: ../../../../inc/SP/Api/ApiRequest.class.php:192
+#: ../../../../inc/SP/Controller/RequestControllerTrait.class.php:112
+msgid "Acción Inválida"
+msgstr "Nieprawidłowa akcja"
+
+#: ../../../../ajax/ajax_getContent.php:55
+#: ../../../../inc/SP/Api/ApiBase.class.php:156
+#: ../../../../inc/SP/Api/ApiRequest.class.php:178
+msgid "Parámetros incorrectos"
+msgstr "Nieprawidłowe parametry"
+
+#: ../../../../ajax/ajax_install.php:58
+msgid "Instalación finalizada"
+msgstr "Instalacja zakończona"
+
+#: ../../../../ajax/ajax_passReset.php:62
+msgid "Recuperación de Clave"
+msgstr "Odzyskiwanie hasła"
+
+#: ../../../../ajax/ajax_passReset.php:63
+msgid "Solicitado para"
+msgstr "Zgłoszony"
+
+#: ../../../../ajax/ajax_passReset.php:70
+msgid "Solicitud enviada"
+msgstr "Żądanie zostało wysłane"
+
+#: ../../../../ajax/ajax_passReset.php:74
+msgid "En breve recibirá un correo para completar la solicitud."
+msgstr "Wkrótce otrzymasz wiadomość email aby zrealizować żądanie."
+
+#: ../../../../ajax/ajax_passReset.php:78
+msgid "Solicitud no enviada"
+msgstr "Żądanie nie zostało wysłane"
+
+#: ../../../../ajax/ajax_passReset.php:79
+msgid "Compruebe datos de usuario o consulte con el administrador"
+msgstr "Sprawdź dane użytkownika lub skontaktuj się z administratorem"
+
+#: ../../../../ajax/ajax_passReset.php:88
+#: ../../../../inc/SP/Mgmt/Users/UserPass.class.php:151
+msgid "Modificar Clave Usuario"
+msgstr "Edytuj hasło użytkownika"
+
+#: ../../../../ajax/ajax_passReset.php:101
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:282
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:934
+msgid "Clave actualizada"
+msgstr "Hasło zostało zaktualizowane"
+
+#: ../../../../ajax/ajax_passReset.php:102
+#: ../../../../inc/SP/Auth/Database/Database.class.php:68
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:474
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:231
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:246
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:273
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:284
+#: ../../../../inc/SP/Mgmt/Users/UserMigrate.class.php:106
+#: ../../../../inc/SP/Mgmt/Users/UserPass.class.php:152
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:37
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:23
+msgid "Login"
+msgstr "Login"
+
+#: ../../../../ajax/ajax_passReset.php:109
+#, fuzzy
+msgid "La clave es incorrecta o no coincide"
+msgstr "Hasło jest niepoprawne"
+
+#: ../../../../ajax/ajax_userPrefsSave.php:90
+#: ../../../../inc/SP/Mgmt/Users/UserPreferencesUtil.class.php:85
+msgid "Preferencias actualizadas"
+msgstr "Ustawienia zostały zaktualizowane"
+
+#: ../../../../inc/SP/Account/Account.class.php:126
+#, fuzzy
+msgid "Error al modificar la cuenta"
+msgstr "Błąd podczas aktualizacji konta"
+
+#: ../../../../inc/SP/Account/Account.class.php:172
+#: ../../../../inc/SP/Account/AccountHistoryUtil.class.php:153
+msgid "Error al restaurar cuenta"
+msgstr "Błąd podczas odzyskiwania hasła"
+
+#: ../../../../inc/SP/Account/Account.class.php:200
+#: ../../../../inc/SP/Account/AccountHistory.class.php:216
+#: ../../../../inc/SP/Account/AccountHistory.class.php:503
+msgid "No se pudieron obtener los datos de la cuenta"
+msgstr "Błąd podczas pobierania danych konta"
+
+#: ../../../../inc/SP/Account/Account.class.php:202
+msgid "La cuenta no existe"
+msgstr "Konto nie istnieje"
+
+#: ../../../../inc/SP/Account/Account.class.php:267
+#, fuzzy
+msgid "Error al crear la cuenta"
+msgstr "Błąd podczas tworzenia konta"
+
+#: ../../../../inc/SP/Account/Account.class.php:339
+#: ../../../../inc/SP/Account/AccountHistory.class.php:626
+#, fuzzy
+msgid "Error al eliminar la cuenta"
+msgstr "Błąd podczas usuwania konta"
+
+#: ../../../../inc/SP/Account/Account.class.php:403
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:561
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:585
+msgid "Actualizar Clave Maestra"
+msgstr "Zaktualizuj główne hasło"
+
+#: ../../../../inc/SP/Account/Account.class.php:404
+#: ../../../../inc/SP/Account/AccountHistory.class.php:263
+msgid "Inicio"
+msgstr "Start"
+
+#: ../../../../inc/SP/Account/Account.class.php:408
+#: ../../../../inc/SP/Account/AccountHistory.class.php:268
+msgid "Error en el módulo de encriptación"
+msgstr "Błąd modułu szyfrowania"
+
+#: ../../../../inc/SP/Account/Account.class.php:417
+#: ../../../../inc/SP/Account/AccountHistory.class.php:277
+msgid "Error al obtener las claves de las cuentas"
+msgstr "Błąd podczas ładowania haseł związanych z kontem"
+
+#: ../../../../inc/SP/Account/Account.class.php:434
+#: ../../../../inc/SP/Account/AccountHistory.class.php:305
+msgid "Clave de cuenta vacía"
+msgstr "Hasło jest puste"
+
+#: ../../../../inc/SP/Account/Account.class.php:439
+#: ../../../../inc/SP/Account/AccountHistory.class.php:310
+msgid "IV de encriptación incorrecto"
+msgstr "Złe szyfrowanie IV"
+
+#: ../../../../inc/SP/Account/Account.class.php:448
+#: ../../../../inc/SP/Account/AccountHistory.class.php:319
+msgid "No es posible desencriptar la clave de la cuenta"
+msgstr "Nie można odszyfrować hasła dla konta"
+
+#: ../../../../inc/SP/Account/Account.class.php:457
+msgid "Fallo al actualizar la clave de la cuenta"
+msgstr "Błąd podczas aktualizacji hasła"
+
+#: ../../../../inc/SP/Account/Account.class.php:462
+#: ../../../../inc/SP/Account/AccountHistory.class.php:332
+msgid "Cuentas actualizadas"
+msgstr "Konta zostały zaktualizowane"
+
+#: ../../../../inc/SP/Account/Account.class.php:463
+#: ../../../../inc/SP/Account/AccountHistory.class.php:333
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1019
+msgid "Errores"
+msgstr "Błędy"
+
+#: ../../../../inc/SP/Account/Account.class.php:520
+#, fuzzy
+msgid "Error al actualizar la clave"
+msgstr "Błąd poczas aktualizacji hasła"
+
+#: ../../../../inc/SP/Account/AccountFavorites.class.php:80
+msgid "Error al añadir favorito"
+msgstr "Błąd podczas dodawania do ulubionych"
+
+#: ../../../../inc/SP/Account/AccountFavorites.class.php:102
+msgid "Error al eliminar favorito"
+msgstr "Błąd usuwania ulubionych"
+
+#: ../../../../inc/SP/Account/AccountHistory.class.php:192
+msgid "Error al actualizar el historial"
+msgstr "Błąd podczas aktualizacji historii"
+
+#: ../../../../inc/SP/Account/AccountHistory.class.php:262
+msgid "Actualizar Clave Maestra (H)"
+msgstr "Zaktualizuj hasło główne (H)"
+
+#: ../../../../inc/SP/Account/AccountHistory.class.php:300
+msgid "La clave maestra del registro no coincide"
+msgstr "Hasło główne dla rekordu nie zgadza się"
+
+#: ../../../../inc/SP/Account/AccountHistory.class.php:328
+msgid "Fallo al actualizar la clave del histórico"
+msgstr "Błąd podczas aktualizacji hasła głównego historii"
+
+#: ../../../../inc/SP/Account/AccountTags.class.php:90
+msgid "Error al añadir las etiquetas de la cuenta"
+msgstr ""
+
+#: ../../../../inc/SP/Account/AccountTags.class.php:129
+msgid "Error al eliminar las etiquetas de la cuenta"
+msgstr "Błąd przy usuwaniu tagów konta"
+
+#: ../../../../inc/SP/Account/AccountUtil.class.php:132
+msgid "No se pudieron obtener los datos de las cuentas"
+msgstr "Nie można odczytać danych konta"
+
+#: ../../../../inc/SP/Account/UserAccounts.class.php:89
+msgid "Error al eliminar usuarios asociados a la cuenta"
+msgstr "Błąd podczas usuwania użytkowników"
+
+#: ../../../../inc/SP/Account/UserAccounts.class.php:130
+msgid "Error al actualizar los usuarios de la cuenta"
+msgstr "Błąd podczas aktualizacji użytkowników związanych z kontem"
+
+#: ../../../../inc/SP/Api/ApiBase.class.php:95
+#: ../../../../inc/SP/Api/ApiBase.class.php:187
+#: ../../../../inc/SP/Api/ApiBase.class.php:199
+#: ../../../../inc/SP/Api/ApiBase.class.php:212
+#: ../../../../inc/SP/Api/ApiBase.class.php:244
+#: ../../../../inc/SP/Api/SyspassApi.class.php:74
+#: ../../../../inc/SP/Api/SyspassApi.class.php:143
+msgid "Acceso no permitido"
+msgstr "Nieautoryzowany dostęp"
+
+#: ../../../../inc/SP/Api/ApiRequest.class.php:145
+#: ../../../../inc/SP/Import/XmlImportTrait.class.php:75
+msgid "Método inválido"
+msgstr "Nieprawidłowa metoda"
+
+#: ../../../../inc/SP/Api/ApiRequest.class.php:162
+msgid "Datos inválidos"
+msgstr "Nieprawidłowe dane"
+
+#: ../../../../inc/SP/Api/ApiRequest.class.php:164
+msgid "Formato incorrecto"
+msgstr "Zły format"
+
+#: ../../../../inc/SP/Api/ApiTokens.class.php:97
+#: ../../../../inc/SP/Api/ApiTokens.class.php:125
+#: ../../../../inc/SP/Api/ApiTokens.class.php:150
+#: ../../../../inc/SP/Api/ApiTokens.class.php:183
+#: ../../../../inc/SP/Api/ApiTokens.class.php:224
+#: ../../../../inc/SP/Api/ApiTokens.class.php:242
+#: ../../../../inc/SP/Api/ApiTokens.class.php:262
+#: ../../../../inc/SP/Api/ApiTokensUtil.class.php:168
+#: ../../../../inc/SP/Controller/LoginController.class.php:182
+#: ../../../../inc/SP/Controller/LoginController.class.php:257
+#: ../../../../inc/SP/Controller/LoginController.class.php:360
+#: ../../../../inc/SP/Controller/LoginController.class.php:384
+#: ../../../../inc/SP/Core/Crypt.class.php:212
+#: ../../../../inc/SP/Core/Crypt.class.php:223
+#: ../../../../inc/SP/Import/XmlFileImport.class.php:106
+#: ../../../../inc/SP/Mgmt/Users/UserPassRecover.class.php:134
+msgid "Error interno"
+msgstr "Wewnętrzny błąd aplikacji"
+
+#: ../../../../inc/SP/Api/ApiTokens.class.php:129
+msgid "La autorización ya existe"
+msgstr "Upoważnienie już istnieje"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:81
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:222
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:223
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:517
+#: ../../../../inc/SP/Core/Acl.class.php:191
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:48
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:71
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:54
+msgid "Ver Clave"
+msgstr "Pokaż hasło"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:84
+#: ../../../../inc/SP/Api/SyspassApi.class.php:181
+#: ../../../../inc/SP/Api/SyspassApi.class.php:219
+#: ../../../../inc/SP/Api/SyspassApi.class.php:272
+#: ../../../../inc/SP/Api/SyspassApi.class.php:308
+#: ../../../../inc/SP/Api/SyspassApi.class.php:361
+#: ../../../../inc/SP/Api/SyspassApi.class.php:397
+#: ../../../../inc/SP/Controller/MainController.class.php:574
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApiBase.class.php:197
+msgid "Origen"
+msgstr ""
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:178
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:914
+msgid "Crear Cuenta"
+msgstr ""
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:179
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:915
+#: ../../../../inc/SP/Import/ImportBase.class.php:140
+msgid "Cuenta creada"
+msgstr "Konto zostało dodane"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:180
+#: ../../../../inc/SP/Api/SyspassApi.class.php:218
+#: ../../../../inc/SP/Api/SyspassApi.class.php:271
+#: ../../../../inc/SP/Api/SyspassApi.class.php:307
+#: ../../../../inc/SP/Api/SyspassApi.class.php:360
+#: ../../../../inc/SP/Api/SyspassApi.class.php:396
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:354
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:56
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:130
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:205
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:282
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:349
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:402
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:473
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:592
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:666
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:912
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:230
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:245
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:272
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:283
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:374
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:382
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:402
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:434
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:442
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:462
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:496
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:504
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:524
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:558
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:566
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:587
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:667
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:674
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:775
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:782
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:800
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:862
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:870
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:877
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:916
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:926
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:935
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:944
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:967
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:971
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1156
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1177
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1181
+#: ../../../../inc/SP/Core/Plugin/PluginDataStore.class.php:77
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:12
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:9
+#: ../../../../inc/themes/material-blue/views/account/account.inc:41
+#: ../../../../inc/themes/material-blue/views/account/request.inc:12
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:43
+#: ../../../../inc/themes/material-blue/views/config/info.inc:30
+#: ../../../../inc/themes/material-blue/views/itemshow/categories.inc:16
+#: ../../../../inc/themes/material-blue/views/itemshow/customers.inc:19
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:19
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:18
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:13
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:17
+#: ../../../../inc/themes/material-blue/views/itemshow/tags.inc:16
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:22
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:12
+msgid "Nombre"
+msgstr "Imię"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:209
+msgid "Cuenta no encontrada"
+msgstr ""
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:216
+#: ../../../../inc/SP/Controller/AccountController.class.php:551
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:277
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:278
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:383
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:384
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:454
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:455
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:961
+#: ../../../../inc/SP/Core/Acl.class.php:192
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:39
+msgid "Eliminar Cuenta"
+msgstr "Usuń konto"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:217
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:970
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1180
+msgid "Cuenta eliminada"
+msgstr "Konto zostało usunięte"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:269
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:556
+msgid "Crear Categoría"
+msgstr ""
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:270
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:557
+#: ../../../../inc/SP/Import/ImportBase.class.php:161
+msgid "Categoría creada"
+msgstr "Kategoria została dodana"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:299
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:127
+msgid "Categoría no encontrada"
+msgstr "Kategorii nie znaleziono"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:305
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:111
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:112
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:584
+#: ../../../../inc/SP/Core/Acl.class.php:200
+msgid "Eliminar Categoría"
+msgstr "Usuń kategorię"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:306
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:579
+msgid "Categoría eliminada"
+msgstr "Kategoria została usunięta"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:358
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:494
+msgid "Crear Cliente"
+msgstr ""
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:359
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:495
+#: ../../../../inc/SP/Import/ImportBase.class.php:183
+msgid "Cliente creado"
+msgstr "Klient został dodany"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:388
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:132
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:203
+msgid "Cliente no encontrado"
+msgstr "Nie znaleziono klienta"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:394
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:185
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:186
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:521
+#: ../../../../inc/SP/Core/Acl.class.php:205
+msgid "Eliminar Cliente"
+msgstr "Usuń klienta"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:395
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:516
+msgid "Cliente eliminado"
+msgstr "Klient został usunięty"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:418
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:709
+msgid "Proceso de backup finalizado"
+msgstr "Operacja wykonywania kopii zapasowych została ukończona"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:424
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:704
+#: ../../../../inc/SP/Core/Backup.class.php:75
+#, fuzzy
+msgid "Error al realizar el backup"
+msgstr "Bład podczas tworzenia kopii zapasowej"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:425
+#: ../../../../inc/SP/Controller/ChecksController.class.php:113
+#: ../../../../inc/SP/Controller/ChecksController.class.php:142
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:682
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:705
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1026
+#: ../../../../inc/SP/Import/Import.class.php:115
+msgid "Revise el registro de eventos para más detalles"
+msgstr "Sprawdź dziennik zdarzeń w celu uzyskania dodatkowych informacji"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:455
+#: ../../../../inc/SP/Api/SyspassApi.class.php:472
+#: ../../../../inc/SP/Api/SyspassApi.class.php:479
+msgid "Id de la cuenta"
+msgstr "Id konta"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:456
+#: ../../../../inc/SP/Api/SyspassApi.class.php:473
+#: ../../../../inc/SP/Api/SyspassApi.class.php:485
+msgid "Clave del usuario asociado al token"
+msgstr ""
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:457
+msgid "Devolver detalles en la respuesta"
+msgstr "Wyślij szczegóły w odpowiedzi"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:463
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:15
+msgid "Texto a buscar"
+msgstr "Tekst do wyszukania"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:464
+#: ../../../../inc/SP/Api/SyspassApi.class.php:503
+#: ../../../../inc/SP/Api/SyspassApi.class.php:523
+msgid "Número de resultados a mostrar"
+msgstr "Ilość wyników do wyświetlenia"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:465
+msgid "Id de categoría a filtrar"
+msgstr "Id kategorii do filtracji"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:466
+msgid "Id de cliente a filtrar"
+msgstr ""
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:486
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:18
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:16
+#: ../../../../inc/themes/material-blue/views/account/account.inc:48
+#: ../../../../inc/themes/material-blue/views/account/request.inc:19
+msgid "Nombre de cuenta"
+msgstr "Nazwa konta"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:487
+#: ../../../../inc/SP/Api/SyspassApi.class.php:516
+msgid "Id de categoría"
+msgstr "Id kategorii"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:488
+#: ../../../../inc/SP/Api/SyspassApi.class.php:536
+msgid "Id de cliente"
+msgstr "Id klienta"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:489
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:615
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:64
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:56
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:62
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:73
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:76
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:79
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:87
+#: ../../../../inc/themes/material-blue/views/account/account.inc:123
+#: ../../../../inc/themes/material-blue/views/account/account.inc:130
+#: ../../../../inc/themes/material-blue/views/account/viewpass.inc:31
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:254
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:257
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:61
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:138
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:77
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:84
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:229
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:236
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:102
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:109
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:35
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:41
+#: ../../../../inc/themes/material-blue/views/main/install.inc:43
+#: ../../../../inc/themes/material-blue/views/main/login.inc:27
+#: ../../../../inc/themes/material-blue/views/main/login.inc:88
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:34
+msgid "Clave"
+msgstr "Hasło"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:490
+#: ../../../../inc/themes/material-blue/views/account/account.inc:117
+msgid "Usuario de acceso"
+msgstr ""
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:491
+#: ../../../../inc/themes/material-blue/views/account/account.inc:105
+msgid "URL o IP de acceso"
+msgstr ""
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:492
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:72
+#: ../../../../inc/themes/material-blue/views/account/account.inc:172
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:135
+msgid "Notas sobre la cuenta"
+msgstr "Informacje o koncie"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:502
+msgid "Nombre de categoría a buscar"
+msgstr ""
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:509
+#: ../../../../inc/themes/material-blue/views/itemshow/categories.inc:23
+msgid "Nombre de la categoría"
+msgstr "Nazwa kategorii"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:510
+#: ../../../../inc/themes/material-blue/views/itemshow/categories.inc:35
+msgid "Descripción de la categoría"
+msgstr "Opis kategorii"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:522
+msgid "Nombre de cliente a buscar"
+msgstr ""
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:529
+#: ../../../../inc/themes/material-blue/views/itemshow/customers.inc:26
+msgid "Nombre del cliente"
+msgstr "Nazwa klienta"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:530
+#: ../../../../inc/themes/material-blue/views/itemshow/customers.inc:39
+msgid "Descripción del cliente"
+msgstr "Opis klienta"
+
+#: ../../../../inc/SP/Auth/Auth.class.php:87
+msgid "Método ya inicializado"
+msgstr "Metoda zainicjowana juz wcześniej"
+
+#: ../../../../inc/SP/Auth/Auth.class.php:89
+msgid "Método no disponible"
+msgstr "Metoda niedostępna"
+
+#: ../../../../inc/SP/Auth/AuthUtil.class.php:63
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:132
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:170
+msgid "Cambio de Clave"
+msgstr "Zmiana hasła"
+
+#: ../../../../inc/SP/Auth/AuthUtil.class.php:64
+msgid "Se ha solicitado el cambio de su clave de usuario."
+msgstr "Żądanie zmiany hasła użytkownika zostało wykonane"
+
+#: ../../../../inc/SP/Auth/AuthUtil.class.php:66
+msgid "Para completar el proceso es necesario que acceda a la siguiente URL:"
+msgstr "Aby zakończyć proces, przejdź na następującą stronę:"
+
+#: ../../../../inc/SP/Auth/AuthUtil.class.php:70
+msgid "Si no ha solicitado esta acción, ignore este mensaje."
+msgstr "Jeśli nie wysłałeś tego zgłoszenia, zignoruj tą wiadomość"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:118
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:432
+#: ../../../../inc/SP/Controller/ChecksController.class.php:92
+msgid "Los parámetros de LDAP no están configurados"
+msgstr "Parametry połączenie nie zostały ustawione (LDAP)"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:132
+#: ../../../../inc/SP/Controller/ChecksController.class.php:107
+msgid "Conexión a LDAP correcta"
+msgstr "Połączenie nawiązane (LDAP)"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:133
+#: ../../../../inc/SP/Mgmt/Users/UserLdapSync.class.php:67
+msgid "Objetos encontrados"
+msgstr "Znaleziono obiekty"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:169
+msgid "No es posible conectar con el servidor de LDAP"
+msgstr "Błąd połączenia z serwerem LDAP"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:170
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:49
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:19
+#: ../../../../inc/themes/material-blue/views/config/info.inc:58
+#: ../../../../inc/themes/material-blue/views/config/info.inc:61
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:62
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:87
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:27
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:34
+msgid "Servidor"
+msgstr "Serwer"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:214
+msgid "Error al conectar (BIND)"
+msgstr "Błąd połączenia (BIND)"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:247
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:259
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:269
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:679
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:691
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:701
+msgid "Error al buscar objetos en DN base"
+msgstr ""
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:533
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:556
+msgid "Error al buscar el DN del usuario"
+msgstr "Błąd wyszukiwania DN użytkownika"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:534
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:547
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:557
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:167
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:109
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:119
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:368
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:748
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:835
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:616
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:624
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:720
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:730
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:745
+#: ../../../../inc/SP/Controller/LoginController.class.php:196
+#: ../../../../inc/SP/Controller/LoginController.class.php:251
+#: ../../../../inc/SP/Controller/LoginController.class.php:345
+#: ../../../../inc/SP/Controller/LoginController.class.php:403
+#: ../../../../inc/SP/Controller/LoginController.class.php:426
+#: ../../../../inc/SP/Core/Init.class.php:591
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:77
+#: ../../../../inc/SP/Mgmt/Users/UserLdapSync.class.php:99
+#: ../../../../inc/SP/Mgmt/Users/UserPreferencesUtil.class.php:66
+#: ../../../../res/test.php:64
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:45
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:51
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:54
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:60
+#: ../../../../inc/themes/material-blue/views/account/account.inc:110
+#: ../../../../inc/themes/material-blue/views/account/viewpass.inc:20
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:63
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:47
+#: ../../../../inc/themes/material-blue/views/config/info.inc:46
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:117
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:64
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:71
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:209
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:223
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:31
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:35
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:37
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:12
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:14
+#: ../../../../inc/themes/material-blue/views/main/login.inc:15
+#: ../../../../inc/themes/material-blue/views/main/login.inc:87
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:16
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:90
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:92
+msgid "Usuario"
+msgstr "Użytkownik"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:546
+msgid "Error al localizar el usuario en LDAP"
+msgstr "Błąd podczas szukania użytkownika w LDAPie"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:587
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:600
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:611
+msgid "Error al buscar RDN de grupo"
+msgstr "Błąd podczas wyszukiwania grupy RDN"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:588
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:601
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:612
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:134
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:144
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:158
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:168
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:108
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:120
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:476
+#: ../../../../inc/SP/Controller/LoginController.class.php:253
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:236
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:239
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:174
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:201
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:71
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:73
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:47
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:61
+msgid "Grupo"
+msgstr "Grupa"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:121
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:157
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:93
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:126
+msgid "Usuario verificado en grupo"
+msgstr "Użytkownik zweryfikowany w grupie"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:133
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:107
+msgid "Error al buscar el grupo de usuarios"
+msgstr "Błąd podczas szukania grupy użytkowników"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:143
+msgid "No se encontró el grupo con ese nombre"
+msgstr "Nie znaleziono grupy o takiej nazwie"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:166
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:118
+msgid "Usuario no pertenece al grupo"
+msgstr "Użytkownik nie należy do tej grupy"
+
+#: ../../../../inc/SP/Config/ConfigDB.class.php:107
+#: ../../../../inc/SP/Config/ConfigDB.class.php:147
+#: ../../../../inc/SP/Controller/MainController.class.php:287
+#: ../../../../inc/SP/Core/Acl.class.php:215
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:75
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:216
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:218
+msgid "Configuración"
+msgstr "Ustawienie"
+
+#: ../../../../inc/SP/Config/ConfigDB.class.php:108
+#: ../../../../inc/SP/Config/ConfigDB.class.php:148
+msgid "Modificar configuración"
+msgstr "Aktualizuj kategorię"
+
+#: ../../../../inc/SP/Config/ConfigDB.class.php:149
+#: ../../../../inc/SP/Core/Upgrade.class.php:258
+#: ../../../../inc/SP/Core/Upgrade.class.php:264
+msgid "Parámetro"
+msgstr "Parametr"
+
+#: ../../../../inc/SP/Config/ConfigDB.class.php:152
+msgid "Valor"
+msgstr "Wartość"
+
+#: ../../../../inc/SP/Controller/AccountController.class.php:144
+#: ../../../../inc/SP/Controller/AccountController.class.php:467
+#: ../../../../inc/SP/Controller/AccountController.class.php:499
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:211
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:212
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:45
+msgid "Detalles de Cuenta"
+msgstr "Szczegóły konta"
+
+#: ../../../../inc/SP/Controller/AccountController.class.php:256
+#: ../../../../inc/SP/Controller/MainController.class.php:257
+#: ../../../../inc/SP/Core/Acl.class.php:187
+msgid "Nueva Cuenta"
+msgstr "Nowe konto"
+
+#: ../../../../inc/SP/Controller/AccountController.class.php:383
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:264
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:265
+#: ../../../../inc/SP/Core/Acl.class.php:186
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:101
+msgid "Copiar Cuenta"
+msgstr "Kopiuj konto"
+
+#: ../../../../inc/SP/Controller/AccountController.class.php:411
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:251
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:252
+#: ../../../../inc/SP/Core/Acl.class.php:188
+msgid "Editar Cuenta"
+msgstr "Edytuj konto"
+
+#: ../../../../inc/SP/Controller/AccountController.class.php:439
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:116
+msgid "Modificar Clave de Cuenta"
+msgstr "Zmień hasło do konta"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:237
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:238
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:86
+msgid "Copiar Clave en Portapapeles"
+msgstr "Kopiuj hasło do schowka"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:287
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:288
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:142
+msgid "Solicitar Modificación"
+msgstr "Żądanie modyfikacji"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:297
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:298
+msgid "Más Acciones"
+msgstr "Więcej akcji"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:347
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:281
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:350
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:403
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:834
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1103
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:23
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:29
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:21
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:27
+#: ../../../../inc/themes/material-blue/views/account/account.inc:53
+#: ../../../../inc/themes/material-blue/views/account/account.inc:55
+#: ../../../../inc/themes/material-blue/views/account/request.inc:24
+#: ../../../../inc/themes/material-blue/views/account/request.inc:31
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:21
+msgid "Cliente"
+msgstr "Klient"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:348
+msgid "Ordenar por Cliente"
+msgstr "Sortuj po kliencie"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:355
+msgid "Ordenar por Nombre"
+msgstr "Sortuj po nazwie"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:361
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:32
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:38
+#: ../../../../inc/themes/material-blue/views/account/account.inc:76
+#: ../../../../inc/themes/material-blue/views/account/account.inc:78
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:57
+msgid "Categoría"
+msgstr "Kategoria"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:362
+msgid "Ordenar por Categoría"
+msgstr "Sortuj po kategorii"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:369
+msgid "Ordenar por Usuario"
+msgstr "Sortuj po nazwie użytkownika"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:375
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:34
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:40
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:43
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:49
+#: ../../../../inc/themes/material-blue/views/account/account.inc:99
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:68
+msgid "URL / IP"
+msgstr "URL / IP"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:376
+msgid "Ordenar por URL / IP"
+msgstr "Sortuj po URL / IP"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:108
+#, php-format
+msgid "Objetos encontrados: %d"
+msgstr "Znalezione obiekty: %d"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:127
+msgid "Los parámetros de DokuWiki no están configurados"
+msgstr "Brak ustawionych parametrów DokuWiki"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:135
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:113
+#: ../../../../inc/SP/Import/ImportBase.class.php:144
+#: ../../../../inc/SP/Import/ImportBase.class.php:166
+#: ../../../../inc/SP/Import/ImportBase.class.php:188
+#: ../../../../inc/SP/Import/ImportBase.class.php:210
+#: ../../../../inc/SP/Log/Email.class.php:92
+#: ../../../../inc/SP/Log/Email.class.php:93
+#: ../../../../inc/SP/Log/Email.class.php:203
+#: ../../../../inc/SP/Log/Email.class.php:204
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApiBase.class.php:193
+msgid "Error"
+msgstr "Błąd"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:137
+msgid "Conexión correcta"
+msgstr "Połączenie ustanowione"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:138
+#: ../../../../inc/SP/Core/Init.class.php:429
+#: ../../../../inc/SP/Core/Init.class.php:669
+#: ../../../../inc/SP/Core/Upgrade.class.php:94
+#: ../../../../inc/SP/Core/Upgrade.class.php:278
+#: ../../../../inc/themes/material-blue/views/config/info.inc:40
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:25
+msgid "Versión"
+msgstr "Wersja"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:141
+msgid "Error de conexión a DokuWiki"
+msgstr "Błąd połączenia z DokuWiki"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:173
+msgid "Faltan parámetros de syslog remoto"
+msgstr "Brakujące parametry zdalnego syslogu"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:182
+msgid "Syslog remoto deshabilitado"
+msgstr "Zdalny syslog wyłączony"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:195
+msgid "Faltan parámetros de Proxy"
+msgstr "Brak parametrów proxy"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:204
+msgid "Proxy habiltado"
+msgstr "Proxy włączone"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:208
+msgid "Proxy deshabilitado"
+msgstr "Proxy wyłączone"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:211
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:300
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:364
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:411
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:465
+msgid "Sección"
+msgstr "Sekcja"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:211
+#: ../../../../inc/SP/Controller/ConfigController.class.php:151
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:226
+#: ../../../../inc/themes/material-blue/views/main/install.inc:132
+msgid "General"
+msgstr "Ogólne"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:228
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:511
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:581
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:649
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:699
+#: ../../../../inc/SP/Forms/UserForm.class.php:96
+#: ../../../../inc/SP/Forms/UserForm.class.php:108
+#: ../../../../inc/SP/Forms/UserForm.class.php:122
+msgid "Ey, esto es una DEMO!!"
+msgstr "UWAGA - to jest demo!!"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:242
+msgid "Configuración actualizada"
+msgstr "Konfiguracja została zaktualizowana"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:244
+msgid "Error al guardar la configuración"
+msgstr "Błąd zapisu konfiguracji"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:248
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:424
+msgid "Modificar Configuración"
+msgstr "Edytuj konfigurację"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:281
+msgid "El tamaño máximo por archivo es de 16MB"
+msgstr "Maksymalny rozmiar pliku to 16 MB"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:300
+#: ../../../../inc/SP/Controller/ConfigController.class.php:200
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:365
+#: ../../../../inc/SP/Controller/MainController.class.php:580
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:90
+#: ../../../../inc/themes/material-blue/views/account/linkedAccounts.inc:13
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:30
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:32
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:196
+msgid "Cuentas"
+msgstr "Konta"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:322
+msgid "Faltan parámetros de Wiki"
+msgstr "Brak parametrów Wiki"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:330
+msgid "Wiki habiltada"
+msgstr "Wiki włączone"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:334
+msgid "Wiki deshabilitada"
+msgstr "Wiki wyłączone"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:347
+msgid "Faltan parámetros de DokuWiki"
+msgstr "Brakujące parametry DokuWiki"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:357
+msgid "DokuWiki habiltada"
+msgstr "DokuWiki włączona"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:361
+msgid "DokuWiki deshabilitada"
+msgstr "DokuWiki wyłączona"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:364
+#: ../../../../inc/SP/Controller/ConfigController.class.php:232
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:63
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:10
+msgid "Wiki"
+msgstr "Wiki"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:391
+msgid "Faltan parámetros de LDAP"
+msgstr "Brak parametrów (LDAP)"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:404
+msgid "LDAP habiltado"
+msgstr "LDAP włączony"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:408
+msgid "LDAP deshabilitado"
+msgstr "LDAP wyłączony"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:411
+#: ../../../../inc/SP/Controller/ConfigController.class.php:265
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:7
+msgid "LDAP"
+msgstr "LDAP"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:440
+msgid "Faltan parámetros de Correo"
+msgstr "Brak parametów związanych z pocztą"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:456
+msgid "Correo habiltado"
+msgstr "Poczta jest aktywna"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:462
+msgid "Correo deshabilitado"
+msgstr "Poczta jest nieaktuwa"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:465
+#: ../../../../inc/SP/Controller/ConfigController.class.php:296
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:7
+msgid "Correo"
+msgstr "Poczta"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:487
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:564
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:279
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:507
+#: ../../../../inc/SP/Controller/LoginController.class.php:288
+#: ../../../../inc/SP/Controller/LoginController.class.php:298
+msgid "Clave maestra actualizada"
+msgstr "Główne hasło zostało zaktualizowane"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:488
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:566
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:279
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:507
+#, fuzzy
+msgid "Reinicie la sesión para cambiarla"
+msgstr "Zresatruj sesję aby zaktualizować"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:492
+msgid "Clave maestra no indicada"
+msgstr "Główne hasło jest wymagane"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:495
+msgid "Se ha de confirmar el cambio de clave"
+msgstr "Zmiana hasła musi zostać potwierdzona"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:500
+msgid "Las claves son idénticas"
+msgstr "Hasła są takie same"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:503
+msgid "Las claves maestras no coinciden"
+msgstr "Główne hasła nie pasują do siebie"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:506
+msgid "La clave maestra actual no coincide"
+msgstr "Obecne główne hasło nie jest poprawne"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:521
+#: ../../../../inc/SP/Import/Import.class.php:89
+msgid "No es posible iniciar una transacción"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:530
+#, fuzzy
+msgid "Errores al actualizar las claves de las cuentas"
+msgstr "Błąd podczas aktualizacji haseł dla kont"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:539
+msgid "Errores al actualizar las claves de las cuentas del histórico"
+msgstr "Błąd podczas akutalizacji haseł dla kont (historia)"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:546
+msgid "Errores al actualizar datos de campos personalizados"
+msgstr "Błąd podczas aktualizacji dany w polach niestandardowych "
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:551
+#: ../../../../inc/SP/Import/Import.class.php:95
+msgid "No es posible finalizar una transacción"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:569
+msgid "Error al guardar el hash de la clave maestra"
+msgstr "Błąd poczas zapisywania głównego hasła"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:588
+msgid "Hash de clave maestra actualizado"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:592
+msgid "Error al actualizar el hash de la clave maestra"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:611
+msgid "Generar Clave Temporal"
+msgstr "Wygeneruj hasło tymczasowe"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:614
+msgid "Clave Temporal Generada"
+msgstr "Hasło tymczasowe zostało wygenerowane"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:619
+#, php-format
+msgid "Clave Maestra %s"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:620
+msgid ""
+"Se ha generado una nueva clave para el acceso a sysPass y se solicitará en "
+"el siguiente inicio."
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:622
+#, php-format
+msgid "La nueva clave es: %s"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:624
+msgid "No olvide acceder lo antes posible para guardar los cambios."
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:635
+msgid "Error al generar clave temporal"
+msgstr "Błąd poczas generowania hasła tymczasowego"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:676
+#: ../../../../inc/SP/Forms/AccountForm.class.php:134
+#: ../../../../inc/SP/Forms/UserForm.class.php:112
+msgid "Las claves no coinciden"
+msgstr "Hasła nie pasują do siebie"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:681
+#, fuzzy
+msgid "Error al realizar la exportación"
+msgstr "Wystąpił błąd podczas eksportu"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:686
+msgid "Proceso de exportación finalizado"
+msgstr "Operacja eksportu została zakończona"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:322
+#: ../../../../inc/SP/Core/Acl.class.php:217
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:233
+msgid "Encriptación"
+msgstr "Szyfrowanie"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:367
+msgid "Último backup"
+msgstr "Ostatania kopia bezpieczeństwa"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:367
+msgid "No se encontraron backups"
+msgstr "Brak dostępnych kopii bezpieczeństwa"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:378
+msgid "Última exportación"
+msgstr "Ostani eksport"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:378
+msgid "No se encontró archivo de exportación"
+msgstr "Brak plików eksportu"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:380
+#: ../../../../inc/SP/Core/Acl.class.php:218
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:7
+msgid "Copia de Seguridad"
+msgstr "Kopia zapasowa"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:402
+#: ../../../../inc/SP/Import/Import.class.php:66
+#: ../../../../inc/SP/Import/ImportBase.class.php:77
+msgid "Importar Cuentas"
+msgstr "Importuj konta"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:425
+msgid "No instalado"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:427
+#: ../../../../inc/SP/Controller/MainController.class.php:582
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:77
+msgid "Información"
+msgstr "Informacja"
+
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:275
+msgid "Opción no disponible"
+msgstr "Opcja jest niedostępna"
+
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:275
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:276
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:277
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:278
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:280
+#: ../../../../inc/SP/Core/Init.class.php:293
+msgid "Consulte con el administrador"
+msgstr "Skontaktuj się z administratorem"
+
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:276
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:505
+msgid "No tiene permisos para acceder a esta cuenta"
+msgstr "Nie masz uprawnień do tego konta"
+
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:277
+msgid "No tiene permisos para acceder a esta página"
+msgstr "Nie masz uprawnień aby wejść na tą stronę"
+
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:278
+msgid "No tiene permisos para realizar esta operación"
+msgstr "Nie masz uprawnień aby wykonać tą operację"
+
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:280
+msgid "Se ha producido una excepción"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/EventlogController.class.php:102
+msgid "Vaciar Eventos"
+msgstr "Wyczyść zdarzenia"
+
+#: ../../../../inc/SP/Controller/EventlogController.class.php:102
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:144
+msgid "Vaciar registro de eventos"
+msgstr "Wyczyść dziennik zdarzeń"
+
+#: ../../../../inc/SP/Controller/EventlogController.class.php:104
+msgid "Registro de eventos vaciado"
+msgstr "Log wyczyszczony"
+
+#: ../../../../inc/SP/Controller/EventlogController.class.php:125
+msgid "Buscar Evento"
+msgstr "Szukaj zdarzenia"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:57
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:131
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:593
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:57
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1104
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:37
+#: ../../../../inc/themes/material-blue/views/itemshow/categories.inc:28
+#: ../../../../inc/themes/material-blue/views/itemshow/customers.inc:32
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:31
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:77
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:83
+msgid "Descripción"
+msgstr "Opis"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:72
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:91
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:161
+msgid "Categorías"
+msgstr "Kategorie"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:80
+msgid "Buscar Categoría"
+msgstr "Szukaj kategorii"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:90
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:91
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:188
+#: ../../../../inc/themes/material-blue/views/account/account.inc:89
+msgid "Nueva Categoría"
+msgstr "Nowa kategoria"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:101
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:102
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:184
+#: ../../../../inc/SP/Core/Acl.class.php:199
+msgid "Editar Categoría"
+msgstr "Edytuj kategorię"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:146
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:92
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:168
+msgid "Clientes"
+msgstr "Klienci"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:154
+msgid "Buscar Cliente"
+msgstr "Szukaj klienta"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:164
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:165
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:175
+#: ../../../../inc/themes/material-blue/views/account/account.inc:66
+msgid "Nuevo Cliente"
+msgstr "Nowy klient"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:175
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:176
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:171
+#: ../../../../inc/SP/Core/Acl.class.php:204
+msgid "Editar Cliente"
+msgstr "Edytuj klienta"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:204
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:44
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:46
+msgid "Módulo"
+msgstr "Moduł"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:222
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:69
+#: ../../../../inc/themes/material-blue/views/account/account.inc:256
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:175
+msgid "Campos Personalizados"
+msgstr "Dodatkowe pola"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:230
+msgid "Buscar Campo"
+msgstr "Szukaj pola"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:240
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:241
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:205
+msgid "Nuevo Campo"
+msgstr "Nowe pole"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:251
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:252
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:209
+msgid "Editar Campo"
+msgstr "Edytuj pole"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:261
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:262
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:687
+msgid "Eliminar Campo"
+msgstr "Usuń pole"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:302
+#: ../../../../inc/SP/Core/Acl.class.php:193
+#: ../../../../inc/themes/material-blue/views/account/files.inc:5
+#: ../../../../inc/themes/material-blue/views/account/files.inc:15
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:208
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:89
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:203
+msgid "Archivos"
+msgstr "Pliki"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:310
+msgid "Buscar Archivo"
+msgstr "Szukaj pliku"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:320
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:321
+#: ../../../../inc/themes/material-blue/views/account/files-list.inc:40
+msgid "Ver Archivo"
+msgstr "Pokaż plik"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:330
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:331
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:830
+#: ../../../../inc/themes/material-blue/views/account/files-list.inc:26
+msgid "Eliminar Archivo"
+msgstr "Usuń plik"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:373
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:434
+msgid "Buscar Cuenta"
+msgstr "Szukaj konta"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:404
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:54
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:65
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:85
+#: ../../../../inc/themes/material-blue/views/account/account.inc:156
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:64
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:71
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:24
+msgid "Fecha"
+msgstr "Data"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:405
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:985
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:58
+msgid "Estado"
+msgstr "Status"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:416
+#, fuzzy
+msgid "Modificada"
+msgstr "Aktualizuj hasło"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:417
+#, fuzzy
+msgid "Eliminada"
+msgstr "Usuń"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:426
+#, fuzzy
+msgid "Cuentas (H)"
+msgstr "Konta"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:444
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:445
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:942
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1154
+msgid "Restaurar Cuenta"
+msgstr "Odzyskaj konto"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:475
+#: ../../../../inc/SP/Controller/LoginController.class.php:252
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:55
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:57
+msgid "Perfil"
+msgstr "Profil"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:477
+msgid "Propiedades"
+msgstr "Właściwości"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:498
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:93
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:24
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:44
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:46
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:49
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:140
+msgid "Usuarios"
+msgstr "Użytkownicy"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:506
+msgid "Buscar Usuario"
+msgstr "Szukaj użytkownika"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:515
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:516
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:136
+msgid "Nuevo Usuario"
+msgstr "Nowy użytkownik"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:529
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:530
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1014
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:292
+msgid "Importar usuarios de LDAP"
+msgstr "Import użytkowników z LDAPa"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:542
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:543
+msgid "Ver Detalles de Usuario"
+msgstr "Pokaż szczegóły użytkownika"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:552
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:553
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:128
+msgid "Editar Usuario"
+msgstr "Edytuj użytkownika"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:562
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:563
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:20
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:46
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:52
+msgid "Cambiar Clave de Usuario"
+msgstr "Zmień hasło użytkownika"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:573
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:574
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:269
+msgid "Eliminar Usuario"
+msgstr "Usuń użytkownika"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:608
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:94
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:46
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:147
+msgid "Grupos"
+msgstr "Grupy"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:616
+msgid "Buscar Grupo"
+msgstr "Szukaj grupy"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:626
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:627
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:149
+msgid "Nuevo Grupo"
+msgstr "Nowa grupa"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:637
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:638
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:145
+msgid "Editar Grupo"
+msgstr "Edytuj grupę"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:647
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:648
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:399
+msgid "Eliminar Grupo"
+msgstr "Usuń grupę"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:680
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:154
+msgid "Perfiles"
+msgstr "Profile"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:688
+msgid "Buscar Perfil"
+msgstr "Szukaj profilu"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:698
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:699
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:162
+msgid "Nuevo Perfil"
+msgstr "Nowy profil"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:709
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:710
+msgid "Ver Detalles de Perfil"
+msgstr "Pokaż szczegóły profilu"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:719
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:720
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:158
+msgid "Editar Perfil"
+msgstr "Edytuj profil"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:729
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:730
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:459
+msgid "Eliminar Perfil"
+msgstr "Usuń profil"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:749
+#: ../../../../inc/SP/Log/Email.class.php:63
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:26
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:28
+msgid "Acción"
+msgstr "Akcja"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:764
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:182
+msgid "Autorizaciones API"
+msgstr "Poświadczenia API"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:772
+msgid "Buscar Token"
+msgstr "Szukaj tokenu"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:782
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:783
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:197
+msgid "Nueva Autorización"
+msgstr "Nowe upoważnienie"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:793
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:794
+msgid "Ver token de Autorización"
+msgstr "Pokaż token poświadczenia"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:803
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:804
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:201
+msgid "Editar Autorización"
+msgstr "Edytuj upoważnienie"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:813
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:814
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:639
+msgid "Eliminar Autorización"
+msgstr "Usuń upowaznienie"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:833
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:19
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:21
+msgid "Fecha Creación"
+msgstr "Data utworzenia"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:834
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:27
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:29
+msgid "Fecha Caducidad"
+msgstr "Data wygaśnięcia"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:836
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:43
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:45
+msgid "Notificar"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:837
+#: ../../../../inc/themes/material-blue/views/account/details.inc:18
+#: ../../../../inc/themes/material-blue/views/account/details.inc:20
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:51
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:53
+msgid "Visitas"
+msgstr "Wizyt"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:856
+msgid "Enlaces"
+msgstr "Linki"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:864
+msgid "Buscar Enlace"
+msgstr "Szukaj linku"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:874
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:875
+msgid "Ver Enlace"
+msgstr "Pokaż link"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:883
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:884
+msgid "Renovar Enlace"
+msgstr "Odśwież link"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:893
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:894
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:748
+msgid "Eliminar Enlace"
+msgstr "Usuń link"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:926
+#: ../../../../inc/themes/material-blue/views/account/account.inc:176
+#: ../../../../inc/themes/material-blue/views/account/account.inc:178
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:210
+msgid "Etiquetas"
+msgstr "Tagi"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:934
+msgid "Buscar Etiqueta"
+msgstr "Szukaj tagu"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:944
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:945
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:218
+msgid "Nueva Etiqueta"
+msgstr "Nowy tag"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:955
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:956
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:222
+msgid "Editar Etiqueta"
+msgstr "Edytuj tag"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:965
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:966
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:797
+msgid "Eliminar Etiqueta"
+msgstr "Usuń tag"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:984
+msgid "Plugin"
+msgstr "Plugin"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1001
+msgid "Plugins"
+msgstr "Pluginy"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1009
+msgid "Buscar Plugin"
+msgstr "Szukaj pluginów"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1019
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1020
+msgid "Ver Plugin"
+msgstr "Pokaż plugin"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1028
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1029
+msgid "Habilitar"
+msgstr "Włącz"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1038
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1039
+msgid "Deshabilitar"
+msgstr "Wyłącz"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1048
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1049
+msgid "Restablecer Datos"
+msgstr "Resetuj dane"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:56
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:51
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:58
+msgid "Componente"
+msgstr "Komponent"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:67
+msgid "Leída"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:76
+#: ../../../../inc/SP/Controller/MainController.class.php:306
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:79
+msgid "Notificaciones"
+msgstr "Powiadomienia"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:84
+msgid "Buscar Notificación"
+msgstr "Szukaj powiadomień"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:95
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:96
+#: ../../../../inc/SP/Controller/NoticeShowController.class.php:94
+msgid "Nueva Notificación"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:107
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:108
+#: ../../../../inc/SP/Controller/NoticeShowController.class.php:89
+msgid "Ver Notificación"
+msgstr "Wyświetl powiadomienia"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:116
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:117
+msgid "Marcar Notificación"
+msgstr "Sprawdź powiadomienia"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:126
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:127
+#: ../../../../inc/SP/Controller/NoticeShowController.class.php:98
+msgid "Editar Notificación"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:136
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:137
+msgid "Eliminar Notificación"
+msgstr "Usuń powiadomienia"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:228
+msgid "Crear Usuario"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:229
+msgid "Usuario creado"
+msgstr "Użytkownik został dodany"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:236
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:251
+msgid "No se pudo realizar la petición de cambio de clave."
+msgstr "Nie można wykonać żądania zmiany hasła"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:243
+msgid "Actualizar Usuario"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:244
+#: ../../../../inc/SP/Mgmt/Users/UserMigrate.class.php:105
+msgid "Usuario actualizado"
+msgstr "Użytkownik zostal zaktualizowany"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:258
+msgid "Usuarios eliminados"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:264
+msgid "Usuario eliminado"
+msgstr "Użytkownik został usunięty"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:281
+msgid "Actualizar Clave Usuario"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:372
+msgid "Crear Grupo"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:373
+msgid "Grupo creado"
+msgstr "Grupa została dodana"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:380
+msgid "Actualizar Grupo"
+msgstr "Aktualizacja grupy"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:381
+msgid "Grupo actualizado"
+msgstr "Grupa została zaktualizowana"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:388
+msgid "Grupos eliminados"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:394
+msgid "Grupo eliminado"
+msgstr "Grupa została usunięta"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:432
+msgid "Crear Perfil"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:433
+msgid "Perfil creado"
+msgstr "Profil został dodany"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:440
+msgid "Actualizar Perfil"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:441
+msgid "Perfil actualizado"
+msgstr "Profil został zaktualizowany"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:448
+msgid "Perfiles eliminados"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:454
+msgid "Perfil eliminado"
+msgstr "Profil został usunięty"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:502
+msgid "Actualizar Cliente"
+msgstr "Aktualizuj klienta"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:503
+msgid "Cliente actualizado"
+msgstr "Klient został zaktualizowany"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:510
+msgid "Clientes eliminados"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:564
+msgid "Actualizar Categoría"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:565
+msgid "Categoría actualizada"
+msgstr "Kategoria została zaktualizowana"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:573
+msgid "Categorías eliminadas"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:614
+msgid "Crear Autorización"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:615
+msgid "Autorización creada"
+msgstr "Upoważnienie zostało dodane"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:622
+msgid "Actualizar Autorización"
+msgstr "Aktaulizuj upoważnienie"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:623
+msgid "Autorización actualizada"
+msgstr "Upowanienie zostało zaktualizowane"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:632
+msgid "Autorizaciones eliminadas"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:636
+msgid "Autorización eliminada"
+msgstr "Upoważnienie zostało usunięte"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:665
+msgid "Crear Campo"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:666
+msgid "Campo creado"
+msgstr "Pole zostało dodane"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:672
+msgid "Actualizar Campo"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:673
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:216
+msgid "Campo actualizado"
+msgstr "Pole zostało zaktualizowane"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:680
+msgid "Campos eliminados"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:684
+msgid "Campo eliminado"
+msgstr "Pole zostało usunięte"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:716
+msgid "Crear Enlace"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:717
+msgid "Enlace creado"
+msgstr "Link utworzony"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:726
+msgid "Actualizar Enlace"
+msgstr "Aktualizuj link"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:727
+msgid "Enlace actualizado"
+msgstr "Link zaktualizowany"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:736
+msgid "Enlaces eliminados"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:742
+msgid "Enlace eliminado"
+msgstr "Link usunięty"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:773
+msgid "Crear Etiqueta"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:774
+#: ../../../../inc/SP/Import/ImportBase.class.php:205
+msgid "Etiqueta creada"
+msgstr "Tag dodany"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:780
+msgid "Actualizar Etiqueta"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:781
+msgid "Etiqueta actualizada"
+msgstr "Tag zaktualizowany"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:788
+msgid "Etiquetas eliminadas"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:794
+msgid "Etiqueta eliminada"
+msgstr "Tag usunięty"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:821
+msgid "Archivos eliminados"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:860
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:868
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:875
+msgid "Actualizar Plugin"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:861
+msgid "Plugin habilitado"
+msgstr "Plugin włączony"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:869
+msgid "Plugin deshabilitado"
+msgstr "Plugin wyłączony"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:876
+msgid "Plugin restablecido"
+msgstr "Resetuj plugin"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:924
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:933
+msgid "Actualizar Cuenta"
+msgstr "Aktualizuj konto"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:925
+msgid "Cuenta actualizada"
+msgstr "Konto zostało zaktualizowane"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:943
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1155
+msgid "Cuenta restaurada"
+msgstr "Konto zostało odzyskane"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:964
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1174
+msgid "Cuentas eliminadas"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:995
+msgid "Favorito añadido"
+msgstr "Dodano do ulubionych"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1000
+msgid "Favorito eliminado"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1017
+msgid "Importación de usuarios de LDAP realizada"
+msgstr "Zakończono import użytkowników LDAP"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1018
+msgid "Usuarios importados"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1023
+msgid "Error al importar usuarios de LDAP"
+msgstr "Błąd podczas imortowania użytkowników LDAP"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1041
+msgid "Notificación leída"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1049
+msgid "Notificación creada"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1057
+msgid "Notificación actualizada"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1063
+msgid "Notificaciones eliminadas"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1067
+msgid "Notificación eliminada"
+msgstr "Powiadomienie usunięto"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1085
+#: ../../../../inc/SP/Forms/NoticeForm.class.php:95
+msgid "Es necesaria una descripción"
+msgstr "Opis jest wymagany"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1100
+msgid "Solicitud de Modificación de Cuenta"
+msgstr "Zgłoszenie modyfikacji konta"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1101
+msgid "Solicitante"
+msgstr "Zgłaszający"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1119
+msgid "Solicitud enviada por correo"
+msgstr "Żądania wysłane mailem"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1121
+msgid "Solicitud no enviada por correo"
+msgstr "Żądanie mailem nie zostało wysłane"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1130
+msgid "Solicitud"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1137
+msgid "Solicitud realizada"
+msgstr "Żądanie wykonane"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1171
+#, fuzzy
+msgid "Eliminar Cuenta (H)"
+msgstr "Usuń konto"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:123
+msgid "Ver Usuario"
+msgstr "Pokaż szczegóły użytkownika"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:140
+msgid "Ver Grupo"
+msgstr "Pokaż szczegóły grupy"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:153
+msgid "Ver Perfil"
+msgstr "Pokaż szczegóły profilu"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:166
+msgid "Ver Cliente"
+msgstr "Pokaż szczegóły klienta"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:179
+msgid "Ver Categoría"
+msgstr "Pokaż szczegóły kategorii"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:192
+msgid "Ver Autorización"
+msgstr "Wyświetl upoważnienia"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:213
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:73
+msgid "Ver Enlace Público"
+msgstr "Pokaż publiczny link"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:226
+#: ../../../../js/strings.js.php:72
+msgid "Clave de Cuenta"
+msgstr "Hasło"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:230
+msgid "Detalles de Plugin"
+msgstr "Szczegóły pluginu"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:401
+msgid "Token de autorización visualizado"
+msgstr "Token poświadczenia wyświetlony"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:402
+msgid "Autorizaciones"
+msgstr "Poświadczenia"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:495
+msgid "La clave maestra no coincide"
+msgstr "Główne hasła nie pasują do siebie"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:93
+msgid "Inicio sesión"
+msgstr "Zaloguj się"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:109
+msgid "Usuario/Clave no introducidos"
+msgstr "Brak użytkownika bądź hasła"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:132
+#: ../../../../inc/SP/Controller/LoginController.class.php:348
+#: ../../../../inc/SP/Controller/LoginController.class.php:402
+#: ../../../../inc/SP/Controller/LoginController.class.php:424
+msgid "Login incorrecto"
+msgstr "Niepoprawny login"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:180
+msgid "Error al obtener los datos del usuario de la BBDD"
+msgstr "Błąd poczas pobierania danych o uzytkowniku z bazy"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:195
+#: ../../../../inc/SP/Controller/LoginController.class.php:198
+msgid "Usuario deshabilitado"
+msgstr "Użytkownik został zablokowany"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:255
+msgid "Error al obtener la clave maestra del usuario"
+msgstr "Błąd przy pobieraniu głównego hasła"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:276
+msgid "Usando clave temporal"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:282
+#: ../../../../inc/SP/Controller/LoginController.class.php:284
+#: ../../../../inc/SP/Controller/LoginController.class.php:292
+#: ../../../../inc/SP/Controller/LoginController.class.php:294
+msgid "Clave maestra incorrecta"
+msgstr "Nieprawidłowe główne hasło"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:305
+msgid "Es necesaria su clave anterior"
+msgstr "Twoje poprzednie hasło jest potrzebne"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:308
+msgid "La clave maestra no ha sido guardada o es incorrecta"
+msgstr "Główne hasło nie jest zapisane bądź jest niepoprawne"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:352
+msgid "Cuenta expirada"
+msgstr "Konto wygasło"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:356
+msgid "El usuario no tiene grupos asociados"
+msgstr "Użytkownik nie nalezy do jakiejkolwiek grupy"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:370
+msgid "Servidor LDAP"
+msgstr "Serwer LDAP"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:427
+msgid "Autentificación"
+msgstr "Autentykacja"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:248
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:72
+msgid "Buscar"
+msgstr "Szukaj"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:267
+msgid "Usuarios y Accesos"
+msgstr "Użytkownicy i dostęp"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:277
+msgid "Elementos y Personalización"
+msgstr "Elementy i kustomizacje"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:297
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:7
+msgid "Registro de Eventos"
+msgstr "Log"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:357
+#: ../../../../inc/SP/Core/Init.class.php:131
+msgid "Versión de PHP requerida >= "
+msgstr "Wymagana wersja PHP >="
+
+#: ../../../../inc/SP/Controller/MainController.class.php:358
+#: ../../../../inc/SP/Core/Init.class.php:132
+msgid ""
+"Actualice la versión de PHP para que la aplicación funcione correctamente"
+msgstr "SysPass wymaga wyższej wersji PHP"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:368
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:265
+msgid "Módulo no disponible"
+msgstr "Moduł niedostępny"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:369
+msgid "Sin este módulo la aplicación puede no funcionar correctamente."
+msgstr "Bez tego modułu aplikacja może działać nieprawidłowo"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:377
+msgid "La version de PHP es vulnerable al ataque NULL Byte (CVE-2006-7243)"
+msgstr "Ta wersja PHP jest podatna na atak NULL Byte (CVE-2006-7243)"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:378
+msgid "Actualice la versión de PHP para usar sysPass de forma segura"
+msgstr "Zaktualizuj PHP aby zapewnić bezpieczne używanie sysPass"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:384
+msgid "No se encuentra el generador de números aleatorios."
+msgstr "Nie znaleziono generatora liczb losowych"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:385
+msgid ""
+"Sin esta función un atacante puede utilizar su cuenta al resetear la clave"
+msgstr ""
+"Bez tej funkcji, atakujący może użyć twojego konta do zresetowania hasła"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:457
+msgid "Descargar nueva versión"
+msgstr "Pobierz nową wersję"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:469
+msgid "Avisos de sysPass"
+msgstr "Komunikaty sysPass"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:572
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:74
+msgid "Enlace visualizado"
+msgstr "Link wyświetlony"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:575
+msgid "Agente"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/UserPreferencesController.class.php:90
+msgid "Preferencias"
+msgstr "Ustawienia"
+
+#: ../../../../inc/SP/Core/Acl.class.php:166
+msgid "Acceso denegado"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Acl.class.php:184
+msgid "Buscar Cuentas"
+msgstr "Wyszukaj konta"
+
+#: ../../../../inc/SP/Core/Acl.class.php:185
+msgid "Ver Cuenta"
+msgstr "Pokaż konto"
+
+#: ../../../../inc/SP/Core/Acl.class.php:189
+msgid "Editar Clave de Cuenta"
+msgstr "Edytuj hasło dla konta"
+
+#: ../../../../inc/SP/Core/Acl.class.php:190
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:61
+msgid "Ver Historial"
+msgstr "Pokaż historię"
+
+#: ../../../../inc/SP/Core/Acl.class.php:194
+msgid "Peticiones"
+msgstr "Żądania"
+
+#: ../../../../inc/SP/Core/Acl.class.php:195
+msgid "Gestión Aplicación"
+msgstr "Zarządzanie aplikacjami"
+
+#: ../../../../inc/SP/Core/Acl.class.php:196
+msgid "Gestión Categorías"
+msgstr "Zarządzanie kategoriami"
+
+#: ../../../../inc/SP/Core/Acl.class.php:197
+msgid "Buscar Categorías"
+msgstr "Szukaj kategorii"
+
+#: ../../../../inc/SP/Core/Acl.class.php:198
+msgid "Añadir Categoría"
+msgstr "Dodaj kategorię"
+
+#: ../../../../inc/SP/Core/Acl.class.php:201
+msgid "Gestión Clientes"
+msgstr "Zarządzanie klientami"
+
+#: ../../../../inc/SP/Core/Acl.class.php:202
+msgid "Buscar Clientes"
+msgstr "Szukaj klienta"
+
+#: ../../../../inc/SP/Core/Acl.class.php:203
+msgid "Añadir Cliente"
+msgstr "Dodaj klienta"
+
+#: ../../../../inc/SP/Core/Acl.class.php:206
+msgid "Gestión Campos Personalizados"
+msgstr "Zarządzanie polami"
+
+#: ../../../../inc/SP/Core/Acl.class.php:207
+msgid "Gestión Autorizaciones API"
+msgstr "Zarządzanie dostępem do API"
+
+#: ../../../../inc/SP/Core/Acl.class.php:208
+msgid "Gestión de Archivos"
+msgstr "Zarządzanie plikami"
+
+#: ../../../../inc/SP/Core/Acl.class.php:209
+msgid "Gestión de Cuentas"
+msgstr "Zarządzanie kontami"
+
+#: ../../../../inc/SP/Core/Acl.class.php:210
+msgid "Gestión de Etiquetas"
+msgstr "Zarządzanie tagami"
+
+#: ../../../../inc/SP/Core/Acl.class.php:211
+#: ../../../../inc/SP/Core/Acl.class.php:212
+msgid "Gestión Usuarios"
+msgstr "Zarządzanie użytkownikami"
+
+#: ../../../../inc/SP/Core/Acl.class.php:213
+msgid "Gestión Grupos"
+msgstr "Zarządzanie grupami"
+
+#: ../../../../inc/SP/Core/Acl.class.php:214
+msgid "Gestión Perfiles"
+msgstr "Zarządzanie profilami"
+
+#: ../../../../inc/SP/Core/Acl.class.php:216
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:226
+msgid "Configuración General"
+msgstr "Ogólne ustawienie"
+
+#: ../../../../inc/SP/Core/Acl.class.php:219
+msgid "Exportar"
+msgstr "Eksport"
+
+#: ../../../../inc/SP/Core/Acl.class.php:220
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:247
+msgid "Importar"
+msgstr "Import"
+
+#: ../../../../inc/SP/Core/Acl.class.php:221
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:263
+msgid "Log de Eventos"
+msgstr "Dziennik zdarzeń"
+
+#: ../../../../inc/SP/Core/Backup.class.php:55
+msgid "Realizar Backup"
+msgstr "Wykonaj kopię zapasową"
+
+#: ../../../../inc/SP/Core/Backup.class.php:84
+msgid "Copia de la aplicación y base de datos realizada correctamente"
+msgstr "Kopie zapasowe bazy jak i aplikajci zostały wykonane pomyślnie"
+
+#: ../../../../inc/SP/Core/Backup.class.php:102
+#: ../../../../inc/SP/Core/XmlExport.class.php:515
+#, php-format
+msgid "No es posible crear el directorio de backups (\"%s\")"
+msgstr "Błąd tworzenia katalogu z kopiami bezpieczeństwa (\"%s\")"
+
+#: ../../../../inc/SP/Core/Backup.class.php:106
+#: ../../../../inc/SP/Core/XmlExport.class.php:521
+msgid "Compruebe los permisos del directorio de backups"
+msgstr "Sprawdź uprawnienia dla katalogu backup"
+
+#: ../../../../inc/SP/Core/Backup.class.php:249
+msgid "Esta operación sólo es posible en entornos Linux"
+msgstr "Ta operacja jest możliwa tylko w środowiskach Linux"
+
+#: ../../../../inc/SP/Core/Backup.class.php:251
+msgid "Error al realizar backup en modo compatibilidad"
+msgstr "Błąd podczas wykonywania kopii zapasowej (tryb kompatybilności)"
+
+#: ../../../../inc/SP/Core/Crypt.class.php:65
+#: ../../../../inc/SP/Core/Crypt.class.php:74
+#: ../../../../inc/SP/Log/Email.class.php:141
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:70
+#: ../../../../js/strings.js.php:85
+msgid "Aviso"
+msgstr "Ostrzeżenie"
+
+#: ../../../../inc/SP/Core/Crypt.class.php:65
+#: ../../../../inc/SP/Core/Crypt.class.php:74
+msgid ""
+"Se ha regenerado el HASH de clave maestra. No es necesaria ninguna acción."
+msgstr ""
+"HASH hasła głównego został ponownie wygenerowany. Nic więcej nie trzeba "
+"robić."
+
+#: ../../../../inc/SP/Core/Crypt.class.php:213
+msgid "No se puede usar el módulo de encriptación"
+msgstr "Nie można załadować modułu Crypto"
+
+#: ../../../../inc/SP/Core/Crypt.class.php:224
+msgid "Error al generar datos cifrados"
+msgstr "Błąd podczas tworzenia zaszyfrowanych danych"
+
+#: ../../../../inc/SP/Core/CryptMasterPass.class.php:93
+#: ../../../../inc/SP/Core/CryptMasterPass.class.php:106
+msgid "Clave temporal caducada"
+msgstr ""
+
+#: ../../../../inc/SP/Core/CryptPKI.class.php:48
+msgid "No es posible generar las claves RSA"
+msgstr "Nie można wygenerować kluczy RSA"
+
+#: ../../../../inc/SP/Core/CryptPKI.class.php:116
+#: ../../../../inc/SP/Core/CryptPKI.class.php:118
+#: ../../../../inc/SP/Core/CryptPKI.class.php:151
+#: ../../../../inc/SP/Core/CryptPKI.class.php:153
+msgid "El archivo de clave no existe"
+msgstr "Plik klucza nie istnieje"
+
+#: ../../../../inc/SP/Core/Events/EventDispatcherBase.class.php:80
+msgid "Observador no inicializado"
+msgstr "Obserwator nie został zainicjalizowany"
+
+#: ../../../../inc/SP/Core/Events/EventDispatcherBase.class.php:110
+msgid "Es necesario un objeto"
+msgstr "Objekt jest wymagany"
+
+#: ../../../../inc/SP/Core/Init.class.php:159
+msgid "Error en la verificación de la base de datos"
+msgstr "Błąd podczas sprawdzania bazy danych"
+
+#: ../../../../inc/SP/Core/Init.class.php:289
+msgid "Sesión"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Init.class.php:289
+#: ../../../../inc/SP/Core/Init.class.php:293
+msgid "La sesión no puede ser inicializada"
+msgstr "Sesja nie może zostać zainicjalizowana"
+
+#: ../../../../inc/SP/Core/Init.class.php:427
+#: ../../../../inc/SP/Core/Init.class.php:667
+msgid "Actualización"
+msgstr "Aktualizuj"
+
+#: ../../../../inc/SP/Core/Init.class.php:428
+#: ../../../../inc/SP/Core/Init.class.php:668 ../../../../res/upgrade.php:121
+msgid "Actualización de versión realizada."
+msgstr "Aktualizacja wersji została zakończona"
+
+#: ../../../../inc/SP/Core/Init.class.php:450
+msgid "El directorio \"/config\" no existe"
+msgstr "Katalog \"config\" nie istnieje"
+
+#: ../../../../inc/SP/Core/Init.class.php:455
+msgid "No es posible escribir en el directorio \"config\""
+msgstr "Nie można zapisywać do katalogu \"config\""
+
+#: ../../../../inc/SP/Core/Init.class.php:462
+#, fuzzy
+msgid "Los permisos del directorio \"/config\" son incorrectos"
+msgstr "Katalog \"config\" ma nieprawidłowe uprawnienia"
+
+#: ../../../../inc/SP/Core/Init.class.php:462
+msgid "Actual:"
+msgstr "Bieżący:"
+
+#: ../../../../inc/SP/Core/Init.class.php:462
+msgid "Necesario: 750"
+msgstr "Potrzeba: 750"
+
+#: ../../../../inc/SP/Core/Init.class.php:545
+msgid "Aplicación en mantenimiento"
+msgstr "Aplikacja w trybie serwisowania"
+
+#: ../../../../inc/SP/Core/Init.class.php:545
+msgid "En breve estará operativa"
+msgstr "Wkrótce będzie dostępna"
+
+#: ../../../../inc/SP/Core/Init.class.php:590
+msgid "Finalizar sesión"
+msgstr "Wyloguj sesję"
+
+#: ../../../../inc/SP/Core/Init.class.php:592
+msgid "Tiempo inactivo"
+msgstr "Czas nieaktywności"
+
+#: ../../../../inc/SP/Core/Init.class.php:593
+msgid "Tiempo total"
+msgstr "Czas całkowity"
+
+#: ../../../../inc/SP/Core/Init.class.php:636
+msgid "La aplicación necesita actualizarse"
+msgstr "Aplikacja wymaga aktualizacji"
+
+#: ../../../../inc/SP/Core/Init.class.php:636
+#, php-format
+msgid "Si es un administrador pulse en el enlace: %s"
+msgstr "Jeśli jesteś administratorem, kliknij w link: %s"
+
+#: ../../../../inc/SP/Core/Init.class.php:636
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:57
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:48
+msgid "Actualizar"
+msgstr "Aktualizuj"
+
+#: ../../../../inc/SP/Core/Init.class.php:654
+#: ../../../../inc/themes/material-blue/views/main/login.inc:65
+msgid "Acceder"
+msgstr "Zaloguj się"
+
+#: ../../../../inc/SP/Core/Installer.class.php:138
+msgid "Indicar nombre de usuario admin"
+msgstr "Nazwa administratora"
+
+#: ../../../../inc/SP/Core/Installer.class.php:139
+msgid "Usuario admin para acceso a la aplicación"
+msgstr "Użytkownik administracyjny do zalogowania się w aplikacji"
+
+#: ../../../../inc/SP/Core/Installer.class.php:143
+msgid "Indicar la clave de admin"
+msgstr "Podaj hasło administratora"
+
+#: ../../../../inc/SP/Core/Installer.class.php:144
+msgid "Clave del usuario admin de la aplicación"
+msgstr "Hasło administratora aplikacji"
+
+#: ../../../../inc/SP/Core/Installer.class.php:148
+msgid "Indicar la clave maestra"
+msgstr "Hasło główne"
+
+#: ../../../../inc/SP/Core/Installer.class.php:149
+msgid "Clave maestra para encriptar las claves"
+msgstr "Hasło główne do szyfrowania"
+
+#: ../../../../inc/SP/Core/Installer.class.php:153
+msgid "Clave maestra muy corta"
+msgstr "Hasło główne jest zbyt krótkie"
+
+#: ../../../../inc/SP/Core/Installer.class.php:154
+msgid "La longitud de la clave maestra ha de ser mayor de 11 caracteres"
+msgstr "Hasło główne musi mieć przynajmniej 11 znaków"
+
+#: ../../../../inc/SP/Core/Installer.class.php:158
+msgid "Indicar el usuario de la BBDD"
+msgstr "Użytkownik bazy danych"
+
+#: ../../../../inc/SP/Core/Installer.class.php:159
+msgid "Usuario con permisos de administrador de la Base de Datos"
+msgstr "Użytkownik bazy danych z uprawnieniami administracyjnymi"
+
+#: ../../../../inc/SP/Core/Installer.class.php:163
+msgid "Indicar la clave de la BBDD"
+msgstr "Podaj hasło bazy danych"
+
+#: ../../../../inc/SP/Core/Installer.class.php:164
+msgid "Clave del usuario administrador de la Base de Datos"
+msgstr "Hasło administratora bazy danych"
+
+#: ../../../../inc/SP/Core/Installer.class.php:168
+msgid "Indicar el nombre de la BBDD"
+msgstr "Nazwa bazy danych"
+
+#: ../../../../inc/SP/Core/Installer.class.php:169
+msgid "Nombre para la BBDD de la aplicación pej. syspass"
+msgstr "Nazwa bazy danych aplikacji, np. syspass"
+
+#: ../../../../inc/SP/Core/Installer.class.php:173
+msgid "El nombre de la BBDD no puede contener \".\""
+msgstr "Nazwa bazy danych nie może zawierać \".\""
+
+#: ../../../../inc/SP/Core/Installer.class.php:174
+msgid "Elimine los puntos del nombre de la Base de Datos"
+msgstr "Usuń kropki z nazwy bazy danych"
+
+#: ../../../../inc/SP/Core/Installer.class.php:178
+msgid "Indicar el servidor de la BBDD"
+msgstr "Podaj serwer bazy danych"
+
+#: ../../../../inc/SP/Core/Installer.class.php:179
+msgid "Servidor donde se instalará la Base de Datos"
+msgstr "Serwer na którym będzie zainstalowana baza danych"
+
+#: ../../../../inc/SP/Core/Installer.class.php:202
+#: ../../../../inc/SP/Storage/MySQLHandler.class.php:133
+#: ../../../../inc/SP/Storage/MySQLHandler.class.php:136
+#: ../../../../inc/SP/Storage/MySQLHandler.class.php:160
+msgid "No es posible conectar con la BD"
+msgstr "Nie udało połączyć się do bazy danych"
+
+#: ../../../../inc/SP/Core/Installer.class.php:203
+#: ../../../../inc/SP/Storage/MySQLHandler.class.php:133
+#: ../../../../inc/SP/Storage/MySQLHandler.class.php:137
+msgid "Compruebe los datos de conexión"
+msgstr "Sprawdź parametry połączenia"
+
+#: ../../../../inc/SP/Core/Installer.class.php:237
+msgid "No es posible comprobar el usuario de sysPass"
+msgstr "Brak możliwości sprawdzenia użytkownika sysPass"
+
+#: ../../../../inc/SP/Core/Installer.class.php:238
+msgid "Compruebe los permisos del usuario de conexión a la BD"
+msgstr "Sprawdź prawa dostępu połączenia do bazy danych"
+
+#: ../../../../inc/SP/Core/Installer.class.php:284
+#, php-format
+msgid "Error al crear el usuario de conexión a MySQL '%s'"
+msgstr "Błąd przy nawiązywaniu połączenia MySQL użytkownikiem '%s'"
+
+#: ../../../../inc/SP/Core/Installer.class.php:300
+msgid "La BBDD ya existe"
+msgstr "Baza danych już istnieje"
+
+#: ../../../../inc/SP/Core/Installer.class.php:301
+msgid "Indique una nueva Base de Datos o elimine la existente"
+msgstr "Podaj inną bazę danych lub usuń istniejącą"
+
+#: ../../../../inc/SP/Core/Installer.class.php:304
+msgid "La BBDD no existe"
+msgstr "Baza danych nie istnieje"
+
+#: ../../../../inc/SP/Core/Installer.class.php:305
+msgid "Es necesario crearla y asignar los permisos necesarios"
+msgstr "Stwórz i nadaj odpowiednie uprawnienia"
+
+#: ../../../../inc/SP/Core/Installer.class.php:315
+#: ../../../../inc/SP/Core/Installer.class.php:416
+msgid "Error al crear la BBDD"
+msgstr "Błąd przy tworzeniu bazy danych"
+
+#: ../../../../inc/SP/Core/Installer.class.php:316
+#: ../../../../inc/SP/Core/Installer.class.php:336
+msgid "Verifique los permisos del usuario de la Base de Datos"
+msgstr "Sprawdź prawa dostępu użytkownika bazy danych"
+
+#: ../../../../inc/SP/Core/Installer.class.php:335
+#, php-format
+msgid "Error al establecer permisos de la BBDD ('%s')"
+msgstr "Błąd przy ustawianiu uprawnień bazy danych ('%s')"
+
+#: ../../../../inc/SP/Core/Installer.class.php:389
+msgid "El archivo de estructura de la BBDD no existe"
+msgstr "Struktura plików bazy danych nie istnieje"
+
+#: ../../../../inc/SP/Core/Installer.class.php:390
+msgid "No es posible crear la BBDD de la aplicación. Descárguela de nuevo."
+msgstr "Błąd przy tworzeniu bazy danych. Proszę ściągnąć ponownie."
+
+#: ../../../../inc/SP/Core/Installer.class.php:398
+msgid "Error al seleccionar la BBDD"
+msgstr "Błąd wyboru bazy danych."
+
+#: ../../../../inc/SP/Core/Installer.class.php:399
+msgid ""
+"No es posible usar la Base de Datos para crear la estructura. Compruebe los "
+"permisos y que no exista."
+msgstr "Błąd tworzenia struktury w bazie danych. Sprawdź prawa dostępu."
+
+#: ../../../../inc/SP/Core/Installer.class.php:417
+msgid "Error al crear la estructura de la Base de Datos."
+msgstr "Błąd przy tworzeniu struktury bazy danych"
+
+#: ../../../../inc/SP/Core/Installer.class.php:435
+msgid "Error al comprobar la base de datos"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Installer.class.php:436
+msgid "Intente de nuevo la instalación"
+msgstr ""
+
+#: ../../../../inc/SP/Core/Installer.class.php:458
+msgid "Error al crear el grupo \"admin\""
+msgstr "Błąd podczas tworzenia grupy \"admin\""
+
+#: ../../../../inc/SP/Core/Installer.class.php:459
+#: ../../../../inc/SP/Core/Installer.class.php:471
+#: ../../../../inc/SP/Core/Installer.class.php:489
+#: ../../../../inc/SP/Core/Installer.class.php:502
+msgid "Informe al desarrollador"
+msgstr "Zgłoś developerowi"
+
+#: ../../../../inc/SP/Core/Installer.class.php:470
+msgid "Error al crear el perfil \"admin\""
+msgstr "Błąd podczas tworzenia profilu \"admin\""
+
+#: ../../../../inc/SP/Core/Installer.class.php:488
+msgid "Error al crear el usuario \"admin\""
+msgstr "Błąd podczas tworzenia użytkownika \"admin\""
+
+#: ../../../../inc/SP/Core/Installer.class.php:501
+msgid "Error al actualizar la clave maestra del usuario \"admin\""
+msgstr "Błąd aktualizacji głównego hasła dla użytkownika \"admin\""
+
+#: ../../../../inc/SP/Core/Plugin/PluginDataStore.class.php:76
+msgid "Nuevo Plugin"
+msgstr "Nowy plugin"
+
+#: ../../../../inc/SP/Core/Plugin/PluginUtil.class.php:106
+#: ../../../../inc/SP/Core/Plugin/PluginUtil.class.php:108
+#: ../../../../inc/SP/Core/Plugin/PluginUtil.class.php:161
+#, php-format
+msgid "No es posible cargar el plugin \"%s\""
+msgstr "Błąd ładowania pluginu \"%s\""
+
+#: ../../../../inc/SP/Core/Template.class.php:126
+#: ../../../../inc/SP/Core/Template.class.php:128
+#: ../../../../inc/SP/Html/DataGrid/DataGridBase.class.php:264
+#, php-format
+msgid "No es posible obtener la plantilla \"%s\" : %s"
+msgstr "Błąd przetwarzania \"%s\" szablonu: %s "
+
+#: ../../../../inc/SP/Core/Template.class.php:182
+#: ../../../../inc/SP/Core/Template.class.php:184
+#, php-format
+msgid "No es posible obtener la variable \"%s\""
+msgstr "Błąd pobierania zmiennej \"%s\""
+
+#: ../../../../inc/SP/Core/Template.class.php:227
+#: ../../../../inc/SP/Core/Template.class.php:229
+#, php-format
+msgid "No es posible destruir la variable \"%s\""
+msgstr "Nie można usunąć zmiennej \"%s\""
+
+#: ../../../../inc/SP/Core/Template.class.php:246
+msgid "La plantilla no contiene archivos"
+msgstr "Szablon nie zawiera plików"
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:65
+msgid "Error al aplicar la actualización de la Base de Datos"
+msgstr "Błąd aktualizacji bazy danych"
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:66
+#: ../../../../inc/SP/Core/Upgrade.class.php:74
+msgid "Compruebe el registro de eventos para más detalles"
+msgstr "Po więcej szczegółów zajrzyj do logu"
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:73
+msgid "Error al aplicar la actualización auxiliar"
+msgstr "Błąd podczas aktualizacji pomocniczej"
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:93
+msgid "Actualizar BBDD"
+msgstr "Aktualizacja bazy danych"
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:99
+msgid "No es necesario actualizar la Base de Datos."
+msgstr "Aktualizacja bazy danych jest zbędna"
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:111
+msgid "Error al aplicar la actualización de la Base de Datos."
+msgstr "Błąd aktualizacji bazy danych"
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:121
+msgid "Actualización de la Base de Datos realizada correctamente."
+msgstr "Aktualizacja bazy danych zakończona sukcesem"
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:245
+msgid "Actualizar Configuración"
+msgstr "Aktualizacja konfiguracji"
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:284
+msgid "Error al actualizar la configuración"
+msgstr "Błąd aktualizacji konfiguracji"
+
+#: ../../../../inc/SP/Core/XmlExport.class.php:130
+msgid "Exportar XML"
+msgstr "Eksport XML"
+
+#: ../../../../inc/SP/Core/XmlExport.class.php:143
+msgid "Error al realizar la exportación de cuentas"
+msgstr "Błąd poczas eksportowania kont"
+
+#: ../../../../inc/SP/Core/XmlExport.class.php:152
+msgid "Exportación de cuentas realizada correctamente"
+msgstr "Eksport zostały wykonany pomyślnie"
+
+#: ../../../../inc/SP/Core/XmlExport.class.php:478
+msgid "Error al crear el archivo XML"
+msgstr "Błąd tworzenia pliku XML"
+
+#: ../../../../inc/SP/Forms/AccountForm.class.php:132
+msgid "Es necesaria una clave"
+msgstr "Klucz jest wymagany"
+
+#: ../../../../inc/SP/Forms/AccountForm.class.php:144
+msgid "Es necesario un nombre de cuenta"
+msgstr "Nazwa konta jest wymagana"
+
+#: ../../../../inc/SP/Forms/AccountForm.class.php:146
+#: ../../../../inc/SP/Forms/CustomerForm.class.php:83
+msgid "Es necesario un nombre de cliente"
+msgstr "Nazwa klienta jest wymagana"
+
+#: ../../../../inc/SP/Forms/AccountForm.class.php:148
+msgid "Es necesario un usuario"
+msgstr "Nazwa użytkownika jest wymagana"
+
+#: ../../../../inc/SP/Forms/AccountForm.class.php:150
+msgid "Es necesario una categoría"
+msgstr "Kategoria jest wymagana"
+
+#: ../../../../inc/SP/Forms/ApiTokenForm.class.php:84
+msgid "Usuario no indicado"
+msgstr "Brak ustawionego użytkownika"
+
+#: ../../../../inc/SP/Forms/ApiTokenForm.class.php:86
+msgid "Acción no indicada"
+msgstr "Brak ustwionej akcji"
+
+#: ../../../../inc/SP/Forms/CategoryForm.class.php:83
+msgid "Es necesario un nombre de categoría"
+msgstr "Nazwa kategorii jest wymagana"
+
+#: ../../../../inc/SP/Forms/CustomFieldDefForm.class.php:87
+msgid "Nombre del campo no indicado"
+msgstr "Nazwa pola nie została ustawiona"
+
+#: ../../../../inc/SP/Forms/CustomFieldDefForm.class.php:89
+msgid "Tipo del campo no indicado"
+msgstr "Typ pola nie został ustawiony"
+
+#: ../../../../inc/SP/Forms/CustomFieldDefForm.class.php:91
+msgid "Módulo del campo no indicado"
+msgstr "Moduł pola nie został ustawiony"
+
+#: ../../../../inc/SP/Forms/GroupForm.class.php:84
+msgid "Es necesario un nombre de grupo"
+msgstr "Nazwa grupy jest wymagana"
+
+#: ../../../../inc/SP/Forms/NoticeForm.class.php:91
+msgid "Es necesario un componente"
+msgstr ""
+
+#: ../../../../inc/SP/Forms/NoticeForm.class.php:93
+msgid "Es necesario un tipo"
+msgstr ""
+
+#: ../../../../inc/SP/Forms/NoticeForm.class.php:100
+msgid "Es necesario un destinatario"
+msgstr ""
+
+#: ../../../../inc/SP/Forms/ProfileForm.class.php:111
+msgid "Es necesario un nombre de perfil"
+msgstr "Nazwa profilu jest wymagana"
+
+#: ../../../../inc/SP/Forms/TagForm.class.php:82
+msgid "Es necesario un nombre de etiqueta"
+msgstr "Nazwa tagu jest wymagana"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:86
+msgid "Es necesario un nombre de usuario"
+msgstr "Nazwa użytkownika jest wymagana"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:88
+msgid "Es necesario un login"
+msgstr "Login jest wymagany"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:90
+msgid "Es necesario un perfil"
+msgstr "Profil jest wymagany"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:92
+msgid "Es necesario un grupo"
+msgstr "Grupa jest wymagana"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:94
+msgid "Es necesario un email"
+msgstr "Adres e-mail jest wymagany"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:110
+msgid "La clave no puede estar en blanco"
+msgstr "Hasło nie może być puste"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:127
+msgid "No es posible eliminar, usuario en uso"
+msgstr "Nie udało się usunąć użytkownika (jest on obecnie wykorzystywany)"
+
+#: ../../../../inc/SP/Http/Request.class.php:51
+msgid "No es posible acceder directamente a este archivo"
+msgstr "Brak dostępu do pliku"
+
+#: ../../../../inc/SP/Http/XMLRPCResponseParse.class.php:68
+msgid "Respuesta XML-RPC inválida"
+msgstr "Nieprawidłowa odpowiedź XML-RPC"
+
+#: ../../../../inc/SP/Import/CsvImport.class.php:46
+#: ../../../../inc/SP/Import/XmlImport.class.php:99
+#, php-format
+msgid "Formato detectado: %s"
+msgstr "Wykryty format: %s"
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:84
+#, php-format
+msgid "El número de campos es incorrecto (%d)"
+msgstr "Zła ilość pól (%d)"
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:85
+#, php-format
+msgid "Compruebe el formato del archivo CSV en línea %s"
+msgstr "Sprawdź format pliku CSV w linii %s"
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:111
+msgid "Error importando cuenta"
+msgstr "Błąd podczas importu konta"
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:112
+msgid "Error procesando línea"
+msgstr ""
+
+#: ../../../../inc/SP/Import/FileImport.class.php:86
+msgid "Archivo no subido correctamente"
+msgstr "Plik został pomyslnie wysłany"
+
+#: ../../../../inc/SP/Import/FileImport.class.php:87
+msgid "Verifique los permisos del usuario del servidor web"
+msgstr "Sprawdź uprawnienia użytkownika serwera www"
+
+#: ../../../../inc/SP/Import/FileImport.class.php:98
+#, fuzzy
+msgid "Compruebe la extensión del archivo"
+msgstr "Sprawdź ustawienia rozszerzeń plików"
+
+#: ../../../../inc/SP/Import/FileImport.class.php:114
+#, fuzzy
+msgid "Compruebe la configuración de PHP para subir archivos"
+msgstr "Sprawdź ustawienia PHP dla wysyłania plików"
+
+#: ../../../../inc/SP/Import/FileImport.class.php:158
+#: ../../../../inc/SP/Import/FileImport.class.php:186
+#, fuzzy
+msgid "Compruebe los permisos del directorio temporal"
+msgstr "Sprawdź uprawnienia dla folderu tymczasowego"
+
+#: ../../../../inc/SP/Import/Import.class.php:83
+#, php-format
+msgid "Tipo mime no soportado (\"%s\")"
+msgstr "Niewspierany typ mime (\"%s\")"
+
+#: ../../../../inc/SP/Import/Import.class.php:84
+#, fuzzy
+msgid "Compruebe el formato del archivo"
+msgstr "Sprawdź format pliku"
+
+#: ../../../../inc/SP/Import/Import.class.php:98
+msgid "Cuentas importadas"
+msgstr ""
+
+#: ../../../../inc/SP/Import/Import.class.php:103
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:66
+#: ../../../../js/strings.js.php:79
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:70
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:127
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:287
+#: ../../../../inc/themes/material-blue/views/config/import.inc:101
+msgid "Ayuda"
+msgstr "Pomoc"
+
+#: ../../../../inc/SP/Import/Import.class.php:114
+msgid "Importación finalizada"
+msgstr "Import został zakończony"
+
+#: ../../../../inc/SP/Import/ImportBase.class.php:121
+msgid "Id de categoría no definido. No es posible importar cuenta."
+msgstr "Brak id kategorii. Brak możliwosci importu konta."
+
+#: ../../../../inc/SP/Import/ImportBase.class.php:124
+msgid "Id de cliente no definido. No es posible importar cuenta."
+msgstr "Brak id klienta. Nie można zaimportować konta."
+
+#: ../../../../inc/SP/Import/SyspassImport.class.php:73
+msgid "Clave de encriptación no indicada"
+msgstr "Brak hasła szyfrowania"
+
+#: ../../../../inc/SP/Import/SyspassImport.class.php:109
+#: ../../../../inc/SP/Import/SyspassImport.class.php:122
+#, fuzzy
+msgid "Clave de encriptación incorrecta"
+msgstr "Złe szyfrowanie IV"
+
+#: ../../../../inc/SP/Import/XmlFileImport.class.php:85
+msgid "Archivo XML no soportado"
+msgstr "Niewspierany plik XML"
+
+#: ../../../../inc/SP/Import/XmlFileImport.class.php:86
+msgid "No es posible detectar la aplicación que exportó los datos"
+msgstr "Nieznana aplikacja źródłowa eksportu"
+
+#: ../../../../inc/SP/Import/XmlFileImport.class.php:107
+msgid "No es posible procesar el archivo XML"
+msgstr "Błąd przetwarzania pliku XML"
+
+#: ../../../../inc/SP/Import/XmlImportTrait.class.php:69
+msgid "Formato de XML inválido"
+msgstr "Nieprawidłowy format XML"
+
+#: ../../../../inc/SP/Import/XmlImportTrait.class.php:70
+#, php-format
+msgid "El nodo \"%s\" no existe"
+msgstr "Węzeł \"%s\" nie istnieje"
+
+#: ../../../../inc/SP/Log/Email.class.php:62
+msgid "N/D"
+msgstr "Nie dotyczy"
+
+#: ../../../../inc/SP/Log/Email.class.php:64
+msgid "Realizado por"
+msgstr "Wykonana przez"
+
+#: ../../../../inc/SP/Log/Email.class.php:76
+#: ../../../../inc/SP/Log/Email.class.php:191
+msgid "Enviar Email"
+msgstr "Wyślij email"
+
+#: ../../../../inc/SP/Log/Email.class.php:81
+#: ../../../../inc/SP/Log/Email.class.php:198
+msgid "Correo enviado"
+msgstr "Email został wysłany"
+
+#: ../../../../inc/SP/Log/Email.class.php:82
+#: ../../../../inc/SP/Log/Email.class.php:192
+msgid "Destinatario"
+msgstr "Odbiorca"
+
+#: ../../../../inc/SP/Log/Email.class.php:85
+msgid "CC"
+msgstr "CC"
+
+#: ../../../../inc/SP/Log/Email.class.php:91
+#: ../../../../inc/SP/Log/Email.class.php:202
+msgid "Error al enviar correo"
+msgstr "Błąd podczas wysyłania wiadomości email"
+
+#: ../../../../inc/SP/Log/Log.class.php:91
+msgid "Error al vaciar el registro de eventos"
+msgstr "Błąd przy czyszczeniu logu"
+
+#: ../../../../inc/SP/Log/LogUtil.class.php:44
+#, php-format
+msgid "Extensión '%s' no cargada"
+msgstr "Rozszerzenie '%s' nie jest załadowane"
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:57
+msgid "Categoría duplicada"
+msgstr "Zduplikowana kategoria"
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:68
+msgid "Error al crear la categoría"
+msgstr "Błąd poczas tworzenia kategorii"
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:122
+msgid "Error al eliminar la categoría"
+msgstr "Błąd poczas usuwania kategorii"
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:177
+msgid "Nombre de categoría duplicado"
+msgstr "Ta nazwa kategorii już istnieje"
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:193
+msgid "Error al actualizar la categoría"
+msgstr "Błąd podczas aktualizacji kategorii"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:72
+msgid "Error al crear el campo personalizado"
+msgstr "Błąd przy tworzeniu własnego pola"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:87
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:96
+msgid "Error al eliminar el campo personalizado"
+msgstr "Błąd przy usuwaniu własnego pola"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:140
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:218
+msgid "Error al actualizar el campo personalizado"
+msgstr "Błąd przy aktualizacji własnego pola"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:174
+msgid "Campo personalizado no encontrado"
+msgstr "Nie znaleziono własnego pola"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:227
+msgid "No se encontraron campos personalizados"
+msgstr "Nie znaleziono własnych pól"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:62
+msgid "Texto"
+msgstr "Tekst"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:66
+msgid "Número"
+msgstr "Numer"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:67
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:60
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:87
+msgid "Email"
+msgstr "Email"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:68
+msgid "Teléfono"
+msgstr "Telefon"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:69
+msgid "Link"
+msgstr "Link"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:70
+msgid "Color"
+msgstr "Kolor"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:71
+msgid "Área de Texto"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:82
+msgid "No hay datos de campos personalizados"
+msgstr "Brak danych z własnych pól"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:87
+msgid "Actualizando datos encriptados"
+msgstr "Aktualizacja zaszyfrowanych danych"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:117
+#, fuzzy
+msgid "Registros no actualizados"
+msgstr "Brak zaktualizowanych rekordów"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:118
+msgid "Registros actualizados"
+msgstr "Rekordy zostały zaktualizowane"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:191
+msgid "Error al migrar campos personalizados"
+msgstr "Błąd migracji własnych pól"
+
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:58
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:182
+#, fuzzy
+msgid "Cliente duplicado"
+msgstr "Duplikat wpisu klienta"
+
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:72
+msgid "Error al crear el cliente"
+msgstr "Błąd podczas tworzenia klienta"
+
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:118
+msgid "No es posible eliminar"
+msgstr "Nie udało sie usunąć"
+
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:127
+#, fuzzy
+msgid "Error al eliminar el cliente"
+msgstr "Bład poczas usuwania klienta"
+
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:198
+msgid "Error al actualizar el cliente"
+msgstr "Błąd podczas aktualizacji klienta"
+
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:101
+msgid "Archivo subido"
+msgstr "Upload pliku"
+
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:123
+msgid "Error al eliminar archivo"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:128
+msgid "Archivo no encontrado"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Files/FileUtil.class.php:102
+msgid "Error al eliminar archivos asociados a la cuenta"
+msgstr "Błąd podczas usuwania plików"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:57
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:193
+msgid "Nombre de grupo duplicado"
+msgstr "Ta grupa już istnieje"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:67
+#, fuzzy
+msgid "Error al crear el grupo"
+msgstr "Błąd podczas tworzenia grupy"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:110
+msgid "Grupo en uso"
+msgstr "Grupa w użyciu"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:119
+#, fuzzy
+msgid "Error al eliminar el grupo"
+msgstr "Błąd poczas usuwania grupy"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:124
+msgid "Grupo no encontrado"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:204
+#, fuzzy
+msgid "Error al actualizar el grupo"
+msgstr "Błąd podczas aktualizacji grupy"
+
+#: ../../../../inc/SP/Mgmt/Groups/GroupAccounts.class.php:70
+msgid "Error al eliminar grupos asociados a la cuenta"
+msgstr "Błąd podczas usuwania grup"
+
+#: ../../../../inc/SP/Mgmt/Groups/GroupAccounts.class.php:100
+msgid "Error al actualizar los grupos secundarios"
+msgstr "Błąd podczas aktualizacji drugiej grupy"
+
+#: ../../../../inc/SP/Mgmt/Groups/GroupUsers.class.php:69
+msgid "Error al asignar los usuarios al grupo"
+msgstr "Błąd przypisywania użytkowników do grupy"
+
+#: ../../../../inc/SP/Mgmt/Groups/GroupUsers.class.php:89
+msgid "Error al eliminar los usuarios del grupo"
+msgstr "Błąd podczas usuwania grup użytkowników"
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:69
+msgid "Error al crear la notificación"
+msgstr "Błąd przy dodawaniu powiadomień"
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:94
+msgid "Error al eliminar la notificación"
+msgstr "Błąd przy usuwaniu powiadomień"
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:99
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:137
+msgid "Notificación no encontrada"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:132
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:248
+msgid "Error al modificar la notificación"
+msgstr "Błąd aktualizacji powiadomień"
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:171
+msgid "Error al obtener la notificación"
+msgstr "Błąd pobierania powiadomień"
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:202
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:288
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:322
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:358
+msgid "Error al obtener las notificaciones"
+msgstr "Błąd pobierania powiadomień"
+
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:59
+msgid "Error al crear el plugin"
+msgstr "Błąd przy dodawaniu pluginu"
+
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:83
+msgid "Error al eliminar el plugin"
+msgstr "Błąd przy usuwaniu pluginu"
+
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:88
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:120
+msgid "Plugin no encontrado"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:115
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:223
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:247
+msgid "Error al actualizar el plugin"
+msgstr "Błąd aktualizacji pluginu"
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:56
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:182
+msgid "Nombre de perfil duplicado"
+msgstr "Ta nazwa profiu już istnieje"
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:68
+msgid "Error al crear perfil"
+msgstr "Błąd tworzenia profilu"
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:105
+msgid "Perfil en uso"
+msgstr "Profil w użyciu"
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:114
+msgid "Error al eliminar perfil"
+msgstr "Błąd usuwania profilu"
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:119
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:201
+msgid "Perfil no encontrado"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:196
+msgid "Error al modificar perfil"
+msgstr "Błąd modyfikacji profilu"
+
+#: ../../../../inc/SP/Mgmt/Profiles/ProfileUtil.class.php:55
+msgid "Migrar Perfiles"
+msgstr "Migracja profili"
+
+#: ../../../../inc/SP/Mgmt/Profiles/ProfileUtil.class.php:85
+msgid "Error al obtener perfiles"
+msgstr "Błąd podczas przetwarzania profili"
+
+#: ../../../../inc/SP/Mgmt/Profiles/ProfileUtil.class.php:147
+msgid "Operación realizada correctamente"
+msgstr "Operacja zakończona sukcesem"
+
+#: ../../../../inc/SP/Mgmt/Profiles/ProfileUtil.class.php:152
+msgid "Fallo al realizar la operación"
+msgstr "Błąd podczas wykonywania operacji"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:104
+msgid "Error al actualizar enlace"
+msgstr "Błąd przy aktualizacji linku"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:109
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:185
+msgid "Enlace no encontrado"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:122
+msgid "Enlace ya creado"
+msgstr "Link już istnieje"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:143
+msgid "Error al crear enlace"
+msgstr "Błąd przy tworzeniu linku"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:180
+msgid "Error al eliminar enlace"
+msgstr "Błąd przy usuwaniu linku"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:214
+msgid "Error al renovar enlace"
+msgstr "Błąd przy odświeżaniu linku"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:243
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:342
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:376
+msgid "Error al obtener enlace"
+msgstr "Błąd pobierania linku"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:294
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLinkSearch.class.php:72
+msgid "ON"
+msgstr "Wł."
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:294
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLinkSearch.class.php:72
+msgid "OFF"
+msgstr "Wył."
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:53
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:126
+msgid "Etiqueta duplicada"
+msgstr "Zduplikowany tag"
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:63
+msgid "Error al crear etiqueta"
+msgstr "Błąd przy tworzeniu tagu"
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:108
+msgid "Error al eliminar etiqueta"
+msgstr "Błąd przy usuwaniu tagu"
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:113
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:142
+msgid "Etiqueta no encontrada"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:137
+msgid "Error al actualizar etiqueta"
+msgstr "Błąd przy aktualizacji tagu"
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:184
+msgid "Error al obtener etiqueta"
+msgstr "Błąd pobierania tagu"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:53
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:152
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:77
+msgid "Login/email de usuario duplicados"
+msgstr "Email/login istnieje"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:90
+#, fuzzy
+msgid "Error al crear el usuario"
+msgstr "Błąd podczas tworzenia użytkownika"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:132
+#, fuzzy
+msgid "Error al eliminar el usuario"
+msgstr "Błąd podczas usuwania użytkownika"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:137
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:188
+msgid "Usuario no encontrado"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:183
+#, fuzzy
+msgid "Error al actualizar el usuario"
+msgstr "Błąd podczas aktualizacji użytkownika"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:250
+msgid "Error al obtener los usuarios"
+msgstr "Błąd podczas przetwarzania użytkowników"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:286
+#: ../../../../inc/SP/Mgmt/Users/UserPass.class.php:145
+#, fuzzy
+msgid "Error al modificar la clave"
+msgstr "Błąd podczas aktualizacji hasła"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:339
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:386
+msgid "Error al obtener los datos del usuario"
+msgstr "Błąd pobierania danych użytkownika"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:108
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:54
+msgid "Usuario de LDAP"
+msgstr "Użytkownik LDAP"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:117
+#, fuzzy
+msgid "Error al guardar los datos de LDAP"
+msgstr "Błąd podczas zapisywania danych użytkownika LDAP"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:125
+msgid "Activación Cuenta"
+msgstr "Aktywacja konta"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:126
+msgid "Su cuenta está pendiente de activación."
+msgstr "Oczekujesz na aktywację konta"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:127
+msgid "En breve recibirá un email de confirmación."
+msgstr "Powinieneś wkrótce otrzymać powiadomienie emailem"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:134
+msgid "Nuevo usuario de LDAP"
+msgstr "Nowy użytkownik LDAP"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:198
+msgid "Error al actualizar la clave del usuario en la BBDD"
+msgstr "Błąd poczas aktualizacji hasła uzytkownika"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdapSync.class.php:60
+msgid "Sincronización LDAP"
+msgstr "Synchronizacja LDAP"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdapSync.class.php:110
+msgid "No se encontraron objetos para sincronizar"
+msgstr "Brak elementów do synchronizacji"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdapSync.class.php:116
+msgid "Sincronización finalizada"
+msgstr "Synchronizacja zakończona"
+
+#: ../../../../inc/SP/Mgmt/Users/UserMigrate.class.php:98
+msgid "Error al migrar cuenta de usuario"
+msgstr "Błąd przy migracji konta użytkownika"
+
+#: ../../../../inc/SP/Mgmt/Users/UserMigrate.class.php:133
+msgid "Error al obtener grupo de usuarios"
+msgstr "Błąd pobierania grup użytkowników"
+
+#: ../../../../inc/SP/Mgmt/Users/UserMigrate.class.php:148
+msgid "Error al migrar grupo del usuario"
+msgstr "Błąd przy migracji grupy użytkowników"
+
+#: ../../../../inc/SP/Mgmt/Users/UserPassRecover.class.php:110
+msgid "Error en comprobación de hash"
+msgstr "Błąd przy sprawdzaniu hasha"
+
+#: ../../../../inc/SP/Mgmt/Users/UserPassRecover.class.php:112
+msgid "Hash inválido o expirado"
+msgstr "Zły lub wygasły hash"
+
+#: ../../../../inc/SP/Mgmt/Users/UserPassRecover.class.php:158
+msgid "Error al generar el hash de recuperación"
+msgstr "Błąd podczas generowania hasha odzyskiwania"
+
+#: ../../../../inc/SP/Mgmt/Users/UserPreferences.class.php:79
+msgid "Error al actualizar preferencias"
+msgstr "Błąd podczas aktualizacji ustawień"
+
+#: ../../../../inc/SP/Mgmt/Users/UserPreferencesUtil.class.php:59
+msgid "Actualizando preferencias"
+msgstr "Aktualizacja ustawień"
+
+#: ../../../../inc/SP/Storage/DB.class.php:296
+#: ../../../../inc/SP/Storage/DB.class.php:336
+#: ../../../../js/strings.js.php:26
+msgid "Error en la consulta"
+msgstr "Błąd zapytania"
+
+#: ../../../../inc/SP/Storage/DB.class.php:342
+msgid "Consulta en blanco"
+msgstr ""
+
+#: ../../../../inc/SP/Storage/DB.class.php:354
+msgid "Restricción de integridad"
+msgstr ""
+
+#: ../../../../inc/SP/Storage/XmlHandler.class.php:77
+#, php-format
+msgid "No es posible leer/escribir el archivo: %s"
+msgstr "Błąd odczytu/zapisu pliku: %s"
+
+#: ../../../../inc/SP/Storage/XmlHandler.class.php:161
+msgid "No hay elementos para guardar"
+msgstr "Brak elementów do zapisania"
+
+#: ../../../../inc/SP/Util/Connection.class.php:120
+msgid "Socket no inicializado"
+msgstr "Gniazdo niezainicjalizowane"
+
+#: ../../../../inc/SP/Util/Connection.class.php:127
+msgid "Error al enviar datos"
+msgstr "Błąd podczas wysyłania danych"
+
+#: ../../../../inc/SP/Util/Json.class.php:63
+msgid "Error de codificación"
+msgstr "Błąd kodowania"
+
+#: ../../../../inc/SP/Util/Util.class.php:316
+msgid "Respuesta"
+msgstr "Odpowiedź"
+
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApi.class.php:68
+msgid "Fallo de autentificación"
+msgstr "Błąd poświadczeń"
+
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApiBase.class.php:173
+msgid "Error al realizar la consulta"
+msgstr "Błąd przy wykonywaniu zapytania"
+
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApiBase.class.php:219
+msgid "URL de conexión no establecida"
+msgstr "Nie podano URLa połączenia"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:46
+msgid "Añadir"
+msgstr "Dodaj"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:47
+msgid "Ver Detalles"
+msgstr "Pokaż szczegóły"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:49
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:68
+msgid "Editar"
+msgstr "Edycja"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:50
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:80
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:82
+msgid "Eliminar"
+msgstr "Usuń"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:51
+msgid "Cambiar Clave"
+msgstr "Zmień hasło"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:52
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:148
+msgid "Admin Aplicación"
+msgstr "Administrator aplikacji"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:53
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:155
+msgid "Admin Cuentas"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:55
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:160
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:163
+msgid "Deshabilitado"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:56
+msgid "Habilitado"
+msgstr "Włączone"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:58
+msgid "Copiar"
+msgstr "Kopiuj"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:63
+#: ../../../../inc/themes/material-blue/views/main/error.inc:12
+#: ../../../../inc/themes/material-blue/views/main/error.inc:13
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:56
+msgid "Volver"
+msgstr "Wstecz"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:64
+msgid "Restaurar"
+msgstr "Przywróć"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:65
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:109
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:160
+msgid "Guardar"
+msgstr "Zapisz"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:67
+msgid "Limpiar"
+msgstr "Wyczyść"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:68
+msgid "Realizar"
+msgstr "Wykonaj"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:69
+msgid "Descargar"
+msgstr "Pobierz"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:71
+msgid "Comprobar"
+msgstr "Sprawdź"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:78
+msgid "Crítico"
+msgstr "Krytyczne"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:83
+msgid "Página anterior"
+msgstr "Poprzednia strona"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:84
+msgid "Página siguiente"
+msgstr "Następna strona"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:85
+msgid "Primera página"
+msgstr "Pierwsza strona"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:86
+msgid "Última página"
+msgstr "Ostatnia strona"
+
+#: ../../../../js/strings.js.php:27
+msgid "Ha ocurrido un error"
+msgstr "Błąd"
+
+#: ../../../../js/strings.js.php:28 ../../../../js/strings.js.php:86
+msgid "Sesión finalizada"
+msgstr "Sesja wygasła"
+
+#: ../../../../js/strings.js.php:29
+msgid "Borrar la cuenta?"
+msgstr "Skasować konto?"
+
+#: ../../../../js/strings.js.php:30
+msgid "Borrar el usuario?"
+msgstr "Skasować użytkownika?"
+
+#: ../../../../js/strings.js.php:31
+msgid "Guarde la configuración para que sea efectiva"
+msgstr "Zapisz konfigurację by zmiany zostały zastosowane"
+
+#: ../../../../js/strings.js.php:32
+msgid "Clave Generada"
+msgstr "Wygeneruj hasło"
+
+#: ../../../../js/strings.js.php:33
+msgid "Nivel alto"
+msgstr "Wysoki poziom"
+
+#: ../../../../js/strings.js.php:34
+msgid "Nivel medio"
+msgstr "Średni poziom"
+
+#: ../../../../js/strings.js.php:35
+msgid "Nivel bajo"
+msgstr "Niski poziom"
+
+#: ../../../../js/strings.js.php:36
+msgid "Nivel muy alto"
+msgstr "Bardzo wysoki poziom"
+
+#: ../../../../js/strings.js.php:37
+msgid "Utilizar al menos 8 caracteres"
+msgstr "Podaj przynajmniej 8 znaków"
+
+#: ../../../../js/strings.js.php:38
+msgid "Borrar elemento?"
+msgstr "Usunąć element?"
+
+#: ../../../../js/strings.js.php:39
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:8
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:17
+msgid "Página no encontrada"
+msgstr "Nie znaleziono strony"
+
+#: ../../../../js/strings.js.php:40
+msgid "Archivo no soportado para visualizar"
+msgstr "Brak możliwości podglądu pliku"
+
+#: ../../../../js/strings.js.php:41
+msgid "Eliminar archivo?"
+msgstr "Usunąć plik?"
+
+#: ../../../../js/strings.js.php:42
+msgid "Su navegador no soporta subir archivos con HTML5"
+msgstr "Twoja przeglądarka nie wspiera uploadu HTML5"
+
+#: ../../../../js/strings.js.php:43
+msgid "Demasiados archivos"
+msgstr "Za dużo plików"
+
+#: ../../../../js/strings.js.php:44
+msgid "Tamaño de archivo no permitido"
+msgstr "Zły rozmiar pliku"
+
+#: ../../../../js/strings.js.php:45
+msgid "Extensión no permitida"
+msgstr "Niedozwolone rozszerzenie pliku"
+
+#: ../../../../js/strings.js.php:46
+msgid "Vaciar el registro de eventos?"
+msgstr "Wyczyścić log?"
+
+#: ../../../../js/strings.js.php:47
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:75
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:243
+#: ../../../../inc/themes/material-blue/views/config/import.inc:54
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:221
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:77
+msgid "Seleccionar Grupo"
+msgstr "Wybierz grupę"
+
+#: ../../../../js/strings.js.php:48
+#: ../../../../inc/themes/material-blue/views/config/import.inc:28
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:245
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:17
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:96
+msgid "Seleccionar Usuario"
+msgstr "Wybierz użytkownika"
+
+#: ../../../../js/strings.js.php:49
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:61
+msgid "Seleccionar Perfil"
+msgstr "Wybierz profil"
+
+#: ../../../../js/strings.js.php:50
+#: ../../../../inc/themes/material-blue/views/account/account.inc:59
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:49
+msgid "Seleccionar Cliente"
+msgstr "Wybierz klienta"
+
+#: ../../../../js/strings.js.php:51
+#: ../../../../inc/themes/material-blue/views/account/account.inc:82
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:57
+msgid "Seleccionar Categoría"
+msgstr "Wybierz kategorię"
+
+#: ../../../../js/strings.js.php:52
+msgid "Sin resultados"
+msgstr "Brak wyników"
+
+#: ../../../../js/strings.js.php:53
+msgid "Opciones de clave"
+msgstr "Opcje hasła"
+
+#: ../../../../js/strings.js.php:54
+msgid "Generar clave aleatoria"
+msgstr "Wygeneruj losowe hasło"
+
+#: ../../../../js/strings.js.php:55
+msgid "Complejidad"
+msgstr "Złożoność"
+
+#: ../../../../js/strings.js.php:56
+msgid "Restablecer"
+msgstr "Reset"
+
+#: ../../../../js/strings.js.php:57
+msgid "Nivel de fortaleza de la clave"
+msgstr "Siła hasła"
+
+#: ../../../../js/strings.js.php:58
+msgid "Mostrar Clave"
+msgstr "Pokaż hasło"
+
+#: ../../../../js/strings.js.php:59
+#: ../../../../inc/themes/material-blue/views/account/viewpass.inc:19
+msgid "Copiar Usuario"
+msgstr "Kopiuj nazwę użytkownika"
+
+#: ../../../../js/strings.js.php:60
+#: ../../../../inc/themes/material-blue/views/account/viewpass.inc:30
+msgid "Copiar Clave"
+msgstr "Kopiuj hasło"
+
+#: ../../../../js/strings.js.php:61
+msgid "Incluir Números"
+msgstr "Użyj liczb"
+
+#: ../../../../js/strings.js.php:62
+msgid "Incluir Mayúsculas"
+msgstr "Użyj wielkich liter"
+
+#: ../../../../js/strings.js.php:63
+msgid "Incluir Símbolos"
+msgstr "Użyj symboli"
+
+#: ../../../../js/strings.js.php:64
+msgid "Longitud"
+msgstr "Długość"
+
+#: ../../../../js/strings.js.php:65
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:32
+msgid "Seleccionar Acción"
+msgstr "Wybierz akcję"
+
+#: ../../../../js/strings.js.php:66
+msgid "SI"
+msgstr "Tak"
+
+#: ../../../../js/strings.js.php:67
+msgid "NO"
+msgstr "Nie"
+
+#: ../../../../js/strings.js.php:68
+msgid "Aceptar"
+msgstr "Akceptuję"
+
+#: ../../../../js/strings.js.php:69
+msgid "Cancelar"
+msgstr "Anuluj"
+
+#: ../../../../js/strings.js.php:70
+msgid "Clave Copiada al Portapapeles"
+msgstr "Hasło skopiowane do schowka"
+
+#: ../../../../js/strings.js.php:71
+msgid "Error al copiar al portapapeles"
+msgstr "Błąd podczas kopiowania do schowka"
+
+#: ../../../../js/strings.js.php:73
+msgid "Recibir notificaciones?"
+msgstr "Wysyłaj powiadomienia?"
+
+#: ../../../../js/strings.js.php:74
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:133
+msgid "Marcar Favorito"
+msgstr "Oznacz jako ulubione"
+
+#: ../../../../js/strings.js.php:75
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:123
+msgid "Eliminar Favorito"
+msgstr "Usuń ulubione"
+
+#: ../../../../js/strings.js.php:76
+msgid "Limpiar Selección"
+msgstr "Usuń zaznaczenie"
+
+#: ../../../../js/strings.js.php:77
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:68
+msgid "Mostrar Favoritos"
+msgstr "Pokaż ulubione"
+
+#: ../../../../js/strings.js.php:78
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:68
+msgid "Mostrar Todos"
+msgstr "Pokaż wszystkie"
+
+#: ../../../../js/strings.js.php:80
+msgid "Sin cambios"
+msgstr "Brak zmian"
+
+#: ../../../../js/strings.js.php:81
+msgid "Ahora"
+msgstr "Teraz"
+
+#: ../../../../js/strings.js.php:82
+msgid ""
+"Este proceso importará los usuarios de LDAP detectados. Desea continuar?"
+msgstr "Ten proces importuje wykrytych użytkowników LDAP. Chcesz kontynuować?"
+
+#: ../../../../js/strings.js.php:83
+msgid "Esta acción restablecerá todos los datos del plugin. Desea continuar?"
+msgstr "Ta akcja resetuje wszystkie dane pluginu. Chcesz kontynuować?"
+
+#: ../../../../js/strings.js.php:84
+msgid "Este proceso puede durar algo de tiempo. Desea continuar?"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:67
+#: ../../../../inc/themes/material-blue/views/account/account.inc:135
+#: ../../../../inc/themes/material-blue/views/account/account.inc:142
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:115
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:122
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:47
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:54
+#: ../../../../inc/themes/material-blue/views/main/install.inc:62
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:42
+msgid "Clave (repetir)"
+msgstr "Hasło (powtórz)"
+
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:78
+#: ../../../../inc/themes/material-blue/views/account/account.inc:149
+#: ../../../../inc/themes/material-blue/views/account/details.inc:131
+#: ../../../../inc/themes/material-blue/views/account/details.inc:133
+msgid "Fecha Caducidad Clave"
+msgstr "Data wygaśnięcia hasła"
+
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:88
+#: ../../../../inc/themes/material-blue/views/account/account.inc:160
+msgid "Seleccionar Fecha"
+msgstr "Wybierz datę"
+
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:102
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:25
+#: ../../../../inc/themes/material-blue/views/account/request.inc:58
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:297
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:167
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:274
+#: ../../../../inc/themes/material-blue/views/config/general.inc:29
+#: ../../../../inc/themes/material-blue/views/config/import.inc:89
+#: ../../../../inc/themes/material-blue/views/config/info.inc:128
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:283
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:150
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:276
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:137
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:172
+msgid "Atrás"
+msgstr "Powrót"
+
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:65
+#: ../../../../inc/themes/material-blue/views/account/account.inc:165
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:140
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:129
+msgid "Notas"
+msgstr "Notatki"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:9
+msgid "Accesos"
+msgstr "Dostęp"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:20
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:104
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:117
+msgid "Permisos"
+msgstr "Prawa"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:26
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:50
+msgid "Seleccionar Usuarios"
+msgstr "Wybierz użytkowników"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:40
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:62
+msgid "Hablitar edición"
+msgstr "Włącz edycję"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:48
+msgid "Seleccionar Grupos"
+msgstr "Wybierz grupy"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:72
+#: ../../../../inc/themes/material-blue/views/account/details.inc:52
+#: ../../../../inc/themes/material-blue/views/account/details.inc:54
+msgid "Grupo Principal"
+msgstr "Główna grupa"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:87
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:111
+msgid "Cuenta Privada"
+msgstr "Prywatne konto"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:92
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:103
+msgid "Privada"
+msgstr "Prywatne"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:100
+msgid "Cuenta Privada Grupo"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:105
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:110
+msgid "Privada Grupo"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:11
+msgid "Histórico"
+msgstr "Historia"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:182
+msgid "Seleccionar Etiquetas"
+msgstr "Wybierz tagi"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:193
+#: ../../../../inc/themes/material-blue/views/account/account.inc:195
+#: ../../../../inc/themes/material-blue/views/account/viewpass.inc:9
+msgid "Cuenta Vinculada"
+msgstr "Podlinkowane konto"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:203
+msgid "Seleccionar Cuenta"
+msgstr "Wybierz konto"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:210
+#: ../../../../inc/themes/material-blue/views/account/account.inc:212
+msgid "Historial"
+msgstr "Historia"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:217
+msgid "Seleccionar fecha"
+msgstr "Wybierz datę"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:229
+#: ../../../../inc/themes/material-blue/views/account/details.inc:35
+#: ../../../../inc/themes/material-blue/views/account/details.inc:37
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:199
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:201
+msgid "Última Modificación"
+msgstr "Ostania modyfikacja"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:236
+#: ../../../../inc/themes/material-blue/views/account/account.inc:238
+#: ../../../../inc/themes/material-blue/views/account/account.inc:241
+msgid "Enlace Público"
+msgstr "Publiczny link"
+
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:17
+msgid "Ver Actual"
+msgstr "Zobacz obecne"
+
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:54
+msgid "Crear Enlace Público"
+msgstr "Stwórz publiczny link"
+
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:130
+msgid "Modificar Cuenta"
+msgstr "Edytuj konto"
+
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:152
+msgid "Restaurar cuenta desde este punto"
+msgstr "Przywróć konta z tego miejsca"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:8
+msgid "Detalles"
+msgstr "Szczegóły"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:26
+#: ../../../../inc/themes/material-blue/views/account/details.inc:28
+msgid "Fecha Alta"
+msgstr "Data dodania"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:44
+#: ../../../../inc/themes/material-blue/views/account/details.inc:46
+msgid "Creador"
+msgstr "Autor"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:61
+#: ../../../../inc/themes/material-blue/views/account/details.inc:63
+msgid "Usuarios Secundarios"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:83
+#: ../../../../inc/themes/material-blue/views/account/details.inc:85
+msgid "Grupos Secundarios"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:106
+#: ../../../../inc/themes/material-blue/views/account/details.inc:108
+msgid "Fecha Edición"
+msgstr "Data modyfikacji"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:114
+#: ../../../../inc/themes/material-blue/views/account/details.inc:116
+msgid "Editor"
+msgstr "Edytor"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:123
+#: ../../../../inc/themes/material-blue/views/account/details.inc:125
+msgid "Fecha de Clave"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/account/files.inc:37
+msgid "Soltar archivos aquí (max. 5) o click para seleccionar"
+msgstr "Upuść pliki tutaj (maks. 5) albo kliknij by wybrać"
+
+#: ../../../../inc/themes/material-blue/views/account/files.inc:37
+#, php-format
+msgid "Tamaño máximo de archivo: %d MB"
+msgstr "Maksymalny rozmiar pliku: %d MB"
+
+#: ../../../../inc/themes/material-blue/views/account/linkedAccounts.inc:3
+msgid "Cuentas Vinculadas"
+msgstr "Podlinkowane konta"
+
+#: ../../../../inc/themes/material-blue/views/account/request.inc:4
+msgid "Solicitar Modificación de Cuenta"
+msgstr "Żądaj zmiany konta"
+
+#: ../../../../inc/themes/material-blue/views/account/request.inc:36
+msgid "Petición"
+msgstr "Żądanie"
+
+#: ../../../../inc/themes/material-blue/views/account/request.inc:42
+msgid "Descripción de la petición"
+msgstr "Wymagaj opisu"
+
+#: ../../../../inc/themes/material-blue/views/account/request.inc:65
+msgid "Enviar"
+msgstr "Wyślij"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/index.inc:11
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:11
+msgid "No se encontraron registros"
+msgstr "Nie znaleziono wpisów"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:24
+msgid "Buscar en Wiki"
+msgstr "Wyszukaj na Wiki"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:71
+msgid "Abrir enlace a"
+msgstr "Otwórz link w"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:95
+msgid "Clave Caducada"
+msgstr "Hasło wygasło"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:149
+msgid "Archivos adjuntos"
+msgstr "Załącznik"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:159
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:170
+msgid "Enlace a Wiki"
+msgstr "Link na Wiki"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:162
+msgid "Ver en Wiki"
+msgstr "Zobacz w Wiki"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:22
+msgid "Parámetros especiales:"
+msgstr "Parametry specjalne"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:25
+msgid "Buscar cuentas a las que 'login' tenga acceso"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:26
+msgid "Devolver las cuentas en las que 'login' es propietario"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:27
+msgid "Buscar cuentas a las que 'group_name' tenga acceso"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:28
+msgid "Devolver las cuentas con grupo principal 'group_name'"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:29
+msgid "Buscar cuentas con archivos con el nombre 'file_name'"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:30
+msgid "Buscar cuentas con la clave caducada"
+msgstr "Szukaj kont z wygasłym hasłem"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:31
+msgid "Devolver las cuentas privadas del usuario actual"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:39
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:43
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:124
+msgid "Búsqueda global"
+msgstr "Globalne wyszukiwanie"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:71
+msgid "Filtrar Favoritos"
+msgstr "Filtruj ulubione"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:85
+msgid "Cuentas por página"
+msgstr "Kont na stronę"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:91
+msgid "Más Filtros"
+msgstr "Więcej filtrów"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:96
+msgid "Seleccionar Etiqueta"
+msgstr "Wybierz tag"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:12
+msgid "Búsqueda"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:18
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:47
+msgid "Resultados por página"
+msgstr "Wyników na stronę"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:23
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:52
+msgid "Número de resultados por página a mostrar, al realizar una búsqueda."
+msgstr "Liczba wyników na strone przy wyszukiwaniu"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:34
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:63
+msgid "Número de resultados por página"
+msgstr "Wyników na stronie"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:44
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:73
+msgid ""
+"Habilita el nombre de la cuenta de la búsqueda, como enlace a los detalles "
+"de la cuenta."
+msgstr "Ustawia nazwę konta jako link do szczegółów."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:53
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:82
+msgid "Nombre de cuenta como enlace"
+msgstr "Nazwa konta jako link"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:63
+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 ""
+"Pozwala na wyszukiwanie wszyskich kont. Jeśli użytkownik nie ma odpowiednich "
+"praw to nadal nie będzie mógł wyświetlić szczegółów."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:72
+msgid "Búsquedas globales"
+msgstr "Globalne wyszukiwania"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:82
+msgid "Generar una imagen con el texto de la clave de la cuenta."
+msgstr "Generuj obrazek z hasłem."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:86
+msgid "Util para entornos donde copiar la clave supone un riesgo de seguridad."
+msgstr ""
+"Przydatne w środowiskach w których kopiowanie haseł do schowka jest "
+"naruszeniem bezpieczeństwa."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:96
+msgid "Imagen para mostrar clave"
+msgstr "Pokaż hasło w obrazku"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:106
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:146
+msgid "Muestra los resultados de búsqueda de cuentas en formato tarjeta."
+msgstr "Włącza pokazywanie wyników wyszukiwania w formie kart."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:116
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:155
+msgid "Resultados en Tarjetas"
+msgstr "Wyniki w formie kart"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:123
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:189
+msgid "Enlaces Públicos"
+msgstr "Linki publiczne"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:133
+msgid ""
+"Habilita la posibilidad de generar enlaces públicos para ver los detalles de "
+"una cuenta."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:137
+msgid ""
+"Las cuentas enlazadas serán visibles por cualquiera que disponga del enlace."
+msgstr "Podlinkowane konta będą widoczne dla wszystkich posiadających link."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:141
+msgid ""
+"Para crear enlaces, los usuarios tienen que tener activada la opción en su "
+"perfl."
+msgstr ""
+"Aby tworzyć linki, użytkownicy muszą aktywować ustawienie w swoich profilach."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:151
+msgid "Habilitar Enlaces Públicos"
+msgstr "Włącz publiczne linki"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:157
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:166
+msgid "Tiempo de caducidad"
+msgstr "Czas wygaśnięcia"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:172
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:181
+msgid "Número máximo de visitas"
+msgstr "Maksymalna ilość wyświetleń"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:191
+msgid "La clave de la cuenta es visualizada como una imagen."
+msgstr "Hasło jest wyświetlone jako obrazek"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:201
+msgid "Usar imagen para clave"
+msgstr "Używaj obrazków dla haseł"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:218
+msgid "Habilita la subida/descarga de archivos para las cuentas."
+msgstr "Włącza wysyłanie/pobieranie plików dla konta"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:228
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:203
+msgid "Gestión de archivos"
+msgstr "Zarządzanie plikami"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:234
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:252
+msgid "Extensiones de archivos permitidas"
+msgstr "Dozwolone rozszerzenia plików"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:239
+msgid "Extensiones permitidas para la subida de archivos."
+msgstr "Dozwolone rozszerzenia uploadowanych plików"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:243
+msgid "Se permite un máximo de 4 caracteres."
+msgstr "Maksymalnie 4 znaki"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:247
+msgid ""
+"Escribir extensión y pulsar intro para añadir. Es necesario guardar la "
+"configuración."
+msgstr ""
+"Podaj rozszerzenie i wciśnij enter aby dodać. Pamiętaj aby zapisać "
+"konfigurację."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:260
+msgid "Tamaño máximo de archivo"
+msgstr "Maksymalny rozmiar pliku"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:265
+msgid "Establece el tamaño máximo para subir archivos."
+msgstr "Ustaw maksymalny rozmiar uploadowanych plików."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:269
+msgid "El máximo absuluto es de 16MB."
+msgstr "Absolutne maksimum to 16MB."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:280
+msgid "Tamaño máximo de archivo en bytes"
+msgstr "Maksymalny rozmiar pliku w bajtach"
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:13
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:16
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:98
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:101
+msgid "Resultado"
+msgstr "Wynik"
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:24
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:27
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:109
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:112
+msgid "Descargar Actual"
+msgstr "Pobierz obecne"
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:33
+msgid "Copia BBDD"
+msgstr "Kopia bezpieczeństwa bazy danych"
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:40
+msgid "Copia sysPass"
+msgstr "Kopia bezpieczeństwa sysPass"
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:43
+msgid "No hay backups para descargar"
+msgstr "Brak kopii bezpieczeństwa do pobrania"
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:71
+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 ""
+"Kopia bezpieczeństwa pozwala na pobranie bazy danych sysPassa albo plików "
+"aplikacyjnych oraz konfiguracji"
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:73
+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 ""
+"Ten sposób pozwala zapisać wszystkie dane sysPassa w innym miejscu albo użyć "
+"w aplikacji przenośnej."
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:88
+msgid "Exportar Cuentas"
+msgstr "Eksport kont"
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:122
+msgid "No hay archivos XML para descargar"
+msgstr "Brak plików do pobrania"
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:129
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:137
+msgid "Clave de Exportación"
+msgstr "Hasło eksportu"
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:143
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:151
+msgid "Clave de Exportación (repetir)"
+msgstr "Hasło eksportu (ponownie)"
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:180
+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 ""
+"Eksport kont pozwala na zapisanie danych kont w formacie XML do dalszego "
+"importu w innych instancjach sysPass."
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:182
+msgid "Los elementos exportados son cuentas, clientes y categorías."
+msgstr "Wyeksportowane elementy to konta, klienci i kategorie."
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:184
+msgid ""
+"Las claves de las cuentas son exportadas de forma encriptada para mayor "
+"seguridad."
+msgstr ""
+"Hasła kont są eksportowane w zaszyfrowany sposób dla większego bezpieczeństwa"
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:186
+msgid ""
+"Es posible establecer una clave de exportación para guardar todos los datos "
+"encriptados en el archivo XML."
+msgstr ""
+"Istnieje możliwość ustawienia hasła eksportu by zapisać zaszyfrowane dane w "
+"pliku XML."
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:8
+#: ../../../../inc/themes/material-blue/views/config/import.inc:148
+#: ../../../../inc/themes/material-blue/views/config/import.inc:163
+#: ../../../../inc/themes/material-blue/views/main/install.inc:48
+#: ../../../../inc/themes/material-blue/views/main/install.inc:54
+#: ../../../../inc/themes/material-blue/views/main/login.inc:49
+#: ../../../../inc/themes/material-blue/views/main/login.inc:89
+msgid "Clave Maestra"
+msgstr "Główne hasło"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:18
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:21
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:167
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:170
+msgid "Último cambio"
+msgstr "Ostania zmiana"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:29
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:37
+msgid "Clave Maestra actual"
+msgstr "Obecne główne hasło"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:43
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:51
+msgid "Nueva Clave Maestra"
+msgstr "Nowe główne hasło"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:57
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:65
+msgid "Nueva Clave Maestra (repetir)"
+msgstr "Nowe hasło główne (powtórz)"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:75
+msgid "Establece una nueva clave maestra sin re-encriptar las cuentas"
+msgstr "Ustawia nowe hasło bez ponownego szyfrowania kont"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:83
+msgid "No modificar cuentas"
+msgstr "Nie modyfikuj kont"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:92
+msgid "Guarde la nueva clave en un lugar seguro."
+msgstr "Zapisz główne hasło w bezpiecznym miejscu"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:96
+msgid "Se volverán a encriptar las claves de todas las cuentas."
+msgstr "Wszystkie hasła będą zaszyfrowane ponownie."
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:100
+msgid "Los usuarios deberán de introducir la nueva clave maestra."
+msgstr "Użytkownicy będą musieli podać nowe hasło główne"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:106
+msgid "Confirmar cambio"
+msgstr "Potwierdź zmianę"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:128
+msgid ""
+"La clave maestra es utilizada para encriptar las claves de las cuentas de "
+"sysPass para mantenerlas seguras."
+msgstr ""
+"Główne hasło jest używane do zaszyfrowania haseł kont bezpiecznie "
+"przechowywanych w sysPassie."
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:130
+msgid ""
+"Es recomendable cambiarla cada cierto tiempo y utilizar una clave compleja "
+"que incluya números, letras y símbolos."
+msgstr ""
+"Zaleca się je zmieniać okresowo używając przy tym trudnych haseł "
+"zawierających cyfry, litery i symbole."
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:140
+msgid "Actualizar hash de clave maestra"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:156
+msgid "Clave Temporal"
+msgstr "Tymczasowe hasło"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:172
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:185
+msgid "No generada"
+msgstr "Nie wygenerowano"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:177
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:180
+msgid "Válido hasta"
+msgstr "Ważne do"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:191
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:194
+msgid "Intentos"
+msgstr "Próby"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:201
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:210
+msgid "Validez (s)"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:222
+msgid ""
+"Envía un correo a todos los usuarios o sólo a los del grupo seleccionado."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:230
+msgid "Enviar correo"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:288
+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 ""
+"Tymczasowe hasło jest używane zamiast hasła głównego podczas logowania "
+"użytkowników. Dzięki temu nie ma potrzeby zdradzać im głównego hasła."
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:294
+msgid "Generar"
+msgstr "Generuj"
+
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:4
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:61
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:63
+msgid "Eventos"
+msgstr "Zdarzenia"
+
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:13
+msgid "Guarda las acciones realizadas en la aplicación."
+msgstr "Zapisz akcje wykonane przez aplikację"
+
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:21
+msgid "Habilitar log de eventos"
+msgstr "Włącz log"
+
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:32
+msgid "Habilitar Syslog"
+msgstr "Włącz syslog"
+
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:43
+msgid "Habilitar Syslog Remoto"
+msgstr "Włącz zdalny syslog"
+
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:57
+msgid "Nombre o dirección IP"
+msgstr "Nazwa hosta lub IP"
+
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:63
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:71
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:33
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:40
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:47
+msgid "Puerto"
+msgstr "Port"
+
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:2
+msgid "Proxy"
+msgstr "Proxy"
+
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:13
+msgid "Usar Proxy"
+msgstr "Użyj proxy"
+
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:27
+msgid "Servidor proxy"
+msgstr "Serwer proxy"
+
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:41
+msgid "Puerto del servidor proxy"
+msgstr "Port serwera proxy"
+
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:55
+msgid "Usuario del servidor proxy"
+msgstr "Użytkownik serwera proxy"
+
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:69
+msgid "Clave del servidor proxy"
+msgstr "Hasło serwera proxy"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:4
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:7
+msgid "Sitio"
+msgstr "Strona"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:10
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:24
+#: ../../../../inc/themes/material-blue/views/config/info.inc:78
+#: ../../../../inc/themes/material-blue/views/config/info.inc:92
+#: ../../../../inc/themes/material-blue/views/main/install.inc:135
+#: ../../../../inc/themes/material-blue/views/main/install.inc:136
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:19
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:21
+msgid "Idioma"
+msgstr "Język"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:15
+msgid ""
+"Establece el idioma global de la aplicación. Es posible establecer un idioma "
+"por usuario en las preferencias."
+msgstr ""
+"Ustaw globalny język aplikacji. Możesz nadpisać język w ustawieniach "
+"użytkownika."
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:19
+msgid ""
+"Para mejorar/añadir las traducciones, puede colaborar en https://poeditor."
+"com/join/project/fmlsBuugyv"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:36
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:46
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:32
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:34
+msgid "Tema Visual"
+msgstr "Theme"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:41
+msgid ""
+"Establece el tema visual global de la aplicación. Es posible establecer un "
+"tema visual por usuario en las preferencias."
+msgstr ""
+"Ustaw globalny theme. Użytkownik może go nadpisać w ustawieniach profilu."
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:59
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:67
+msgid "Timeout de sesión (s)"
+msgstr "Timeout sesji"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:77
+msgid "Fuerza para que todas las conexiones sean a través de HTTPS."
+msgstr "Wymusza HTTPS dla wszystkich połączeń"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:86
+msgid "Forzar HTTPS"
+msgstr "Wymuś HTTPS"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:96
+msgid ""
+"Muestra información relativa a la configuración de la aplicación y "
+"rendimiento."
+msgstr "Pokazuje informacje o konfiguracji i wydajności aplikacji"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:104
+msgid "Habilitar depuración"
+msgstr "Włącz debugowanie"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:114
+msgid ""
+"En este modo no se puede acceder a la aplicación. Para deshabilitarlo es "
+"necesario modificar el archivo de configuración."
+msgstr ""
+"W tym trybie nikt nie może się zalogować. Aby go wyłączyć, musisz "
+"zmodyfikować plik konfiguracyjny."
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:122
+msgid "Modo mantenimiento"
+msgstr "Tryb serwisowania"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:132
+msgid ""
+"Comprobar actualizaciones de la aplicación (sólo para los usuarios "
+"administradores)."
+msgstr "Sprawdź akutalizację aplikacji (tylko dla administratora)."
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:140
+msgid "Comprobar actualizaciones"
+msgstr "Sprawdź aktualizacje"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:150
+msgid ""
+"Comprobar si existen notificaciones de seguridad o avisos de sysPass (sólo "
+"para los usuarios administradores)."
+msgstr ""
+"Sprawdz czy są dostępne ostrzeżenia dotyczące bezpieczeństwa sysPassa (tylko "
+"dla administratorów)."
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:158
+msgid "Comprobar notificaciones"
+msgstr "Sprawdź uwagi"
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:8
+msgid "Importar CSV/XML"
+msgstr "Import CSV/XML"
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:14
+#: ../../../../inc/themes/material-blue/views/config/import.inc:24
+msgid "Usuario por Defecto"
+msgstr "Domyślny urzytkownik"
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:19
+msgid "Define el usuario por defecto para las cuentas importadas."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:40
+#: ../../../../inc/themes/material-blue/views/config/import.inc:50
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:207
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:217
+msgid "Grupo por Defecto"
+msgstr "Domyślna grupa"
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:45
+msgid "Define el grupo por defecto para las cuentas importadas."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:74
+msgid "Soltar archivo aquí o click para seleccionar"
+msgstr "Przeciągnij plik tutaj lub kliknij aby wybrać"
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:102
+msgid ""
+"Permite realizar la importación de Cuentas, Categorías y Clientes desde "
+"archivos XML y CSV."
+msgstr ""
+"Pozwala na tworzenie kont, kategorii i klientów poprzez import z plików XML "
+"i CSV."
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:104
+msgid ""
+"Los formatos de archivos XML soportados son: sysPass, KeePass y KeePassX"
+msgstr "Wspierane formaty XML to sysPass, KeePass i KeePassX"
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:106
+msgid ""
+"Arrastar el archivo a importar a la zona indicada o hacer click sobre la "
+"flecha."
+msgstr "Przeciągnij i upuść plik do strefy importu albo klinij na strzałkę"
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:108
+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 ""
+"Dla plików KeePass i KeePassX, nazwami klientów będą KeePass i KeePassX a "
+"kategorie będą nazwane tak jak grupy."
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:110
+msgid "La importación de archivos CSV se realiza con el siguiente formato:"
+msgstr "Importowany plik CSV musi mieć następujący format:"
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:112
+msgid ""
+"\"nombre_de_cuenta\";\"cliente\";\"categoría\";\"url\";\"usuario\";\"clave\";"
+"\"notas\""
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:114
+msgid ""
+"En todos los casos, si el cliente o la categoría no están creados, se crean "
+"automáticamente."
+msgstr ""
+"Jeśli klient lub kategoria nie istnieją to zostaną dodane automatycznie."
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:121
+msgid "XML"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:127
+#: ../../../../inc/themes/material-blue/views/config/import.inc:142
+msgid "Clave de Importación"
+msgstr "Hasło importu"
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:132
+msgid "Sólo es necesaria para archivos XML de sysPass encriptados."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:153
+msgid ""
+"Sólo es necesaria para archivos XML de sysPass con clave maestra distinta de "
+"la actual."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:170
+msgid "CSV"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:176
+#: ../../../../inc/themes/material-blue/views/config/import.inc:191
+msgid "Delimitador CSV"
+msgstr "Separator CSV"
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:181
+msgid "Sólo es necesario para archivos CSV."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/info.inc:5
+msgid "Información de la Aplicación"
+msgstr "Informacje o aplikacji"
+
+#: ../../../../inc/themes/material-blue/views/config/info.inc:11
+#: ../../../../inc/themes/material-blue/views/config/info.inc:14
+msgid "Versión sysPass"
+msgstr "Wersja sysPass"
+
+#: ../../../../inc/themes/material-blue/views/config/info.inc:21
+#: ../../../../inc/themes/material-blue/views/config/info.inc:24
+msgid "Base de Datos"
+msgstr "Baza danych"
+
+#: ../../../../inc/themes/material-blue/views/config/info.inc:35
+#: ../../../../inc/themes/material-blue/views/config/info.inc:38
+msgid "PHP"
+msgstr "PHP"
+
+#: ../../../../inc/themes/material-blue/views/config/info.inc:42
+msgid "Extensiones"
+msgstr "Rozszerzenia"
+
+#: ../../../../inc/themes/material-blue/views/config/info.inc:44
+msgid "Memoria Usada"
+msgstr "Użycie pamięci"
+
+#: ../../../../inc/themes/material-blue/views/config/info.inc:49
+msgid "OP Cache"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/info.inc:68
+#: ../../../../inc/themes/material-blue/views/config/info.inc:71
+msgid "Copia de Configuración"
+msgstr "Kopia bezpieczeństwa konfiguracji"
+
+#: ../../../../inc/themes/material-blue/views/config/info.inc:83
+msgid "Indica si el idioma se encuentra disponible"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/info.inc:87
+msgid ""
+"Si no está instalado, es necesario instalar las locales en el sistema "
+"operativo. Más información en Wiki."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/info.inc:99
+#: ../../../../inc/themes/material-blue/views/config/info.inc:102
+msgid "Plugins Cargados"
+msgstr "Załadowane pluginy"
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:22
+msgid "Habilita de autentificación mediante servidor LDAP."
+msgstr "Włącz poświadczenia serwera LDAP"
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:26
+msgid "Este método utilizará MySQL en caso de fallo."
+msgstr "Ta metoda użyje MySQL jako fallbacku."
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:36
+msgid "Habilitar LDAP"
+msgstr "Włącz LDAP"
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:46
+msgid "Habilita el modo de conexión con LDAP de Active Directory."
+msgstr "Włącza tryb połączenia LDAP Active Directory"
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:56
+msgid "Active Directory"
+msgstr "Active Directory"
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:67
+msgid "Nombre o dirección IP del servidor de LDAP."
+msgstr "Nazwa hosta lub IP serwera LDAP"
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:71
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:102
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:153
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:187
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:111
+msgid "Ejemplos:"
+msgstr "Przykłady:"
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:93
+msgid "Usuario de conexión"
+msgstr "Przypisz użytkownika"
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:98
+msgid "Usuario para conectar con el servicio de LDAP."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:123
+msgid "Clave de conexión"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:128
+msgid "Clave del usuario de conexión a LDAP."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:144
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:168
+msgid "Base de búsqueda"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:149
+msgid "Base en la que realizar la búsqueda de usuarios de LDAP."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:179
+msgid ""
+"Grupo de LDAP al que debe de pertenecer el usuario para permitir el acceso."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:183
+msgid "Este grupo debe de estar ubicado en la base de búsquedas de LDAP."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:212
+msgid ""
+"Define el grupo de usuarios por defecto para los nuevos usuarios de LDAP."
+msgstr "Podaj domyślną grupę dla nowych użytkowników LDAP"
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:231
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:241
+msgid "Perfil por Defecto"
+msgstr "Domyślny profil"
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:236
+msgid ""
+"Define el perfil de usuarios por defecto para los nuevos usuarios de LDAP."
+msgstr "Definiuje domyślną grupę nowych użytkowników LDAP"
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:255
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:258
+msgid "Resultados"
+msgstr "Wyniki"
+
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:21
+msgid "Habilitar notificaciones de correo"
+msgstr "Włącz powiadomienia email"
+
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:58
+msgid "Habilitar Autentificación"
+msgstr "Włącz poświadczenia"
+
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:90
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:93
+msgid "Seguridad"
+msgstr "Bezpieczeństwo"
+
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:96
+msgid "Deshabilitada"
+msgstr "Wyłączone"
+
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:106
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:114
+msgid "Dirección de correo de envío"
+msgstr "Adres email odbiorcy"
+
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:124
+msgid ""
+"Habilita que los usuarios puedan solicitar modificaciones o acceso a las "
+"cuentas sin permisos."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:133
+msgid "Habilitar peticiones por correo"
+msgstr "Włącz żądania emailem"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:20
+msgid ""
+"Habilita la opción de añadir un enlace a Wiki externa para los resultados de "
+"la búsqueda."
+msgstr ""
+"Włącza opcję dodawania linku do wyników wyszukiwania w zewnętrznej Wiki"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:30
+msgid "Habilitar enlaces Wiki"
+msgstr "Włącz linki Wiki"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:36
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:63
+msgid "URL de búsqueda Wiki"
+msgstr "URL wyszukiwania Wiki"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:41
+msgid "URL que utiliza la wiki para realizar una búsqueda de una página."
+msgstr "URL używany przez Wiki do wykonania wyszukiwania"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:45
+msgid "Como parámetro se utiliza el nombre del cliente."
+msgstr "Nazwa klienta jest użyta jako parametr."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:49
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:82
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:163
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:190
+msgid "Ejemplo:"
+msgstr "Przykład:"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:69
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:96
+msgid "URL de página en Wiki"
+msgstr "URL strony Wiki"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:74
+msgid "URL que utiliza la wiki para acceder a los detalles de una página."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:78
+msgid ""
+"El nombre de la cuenta se utiliza como parámetro de la variable de búsqueda "
+"de la Wiki."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:102
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:116
+msgid "Prefijo para nombre de cuenta"
+msgstr "Prefix nazwy konta"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:107
+msgid ""
+"Prefijo para determinar qué cuentas tienen un enlace a una página de la Wiki."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:124
+msgid "DokuWiki API"
+msgstr "DokuWiki API"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:134
+msgid ""
+"Habilita la conexión a la API XML-RPC de DokuWiki para los enlaces Wiki."
+msgstr "Włącza DokuWki XML-RPC API dla linków Wiki"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:137
+msgid ""
+"Para que esta característica funcione, es necesario habilitar los enlaces "
+"Wiki para el filtrado de cuentas."
+msgstr "Aby to zadziałało, musisz włączyć linki Wiki dla filtrowania kont"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:147
+msgid "Habilitar API de DokuWiki"
+msgstr "Włącz DokuWiki API"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:154
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:175
+msgid "URL API"
+msgstr "API URL"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:159
+msgid "URL de la API de DokuWiki."
+msgstr "DokuWiki API URL"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:181
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:203
+msgid "URL Base"
+msgstr "Bazowy URL"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:186
+msgid "URL base de DokuWiki."
+msgstr "Bazowy URL DokuWiki"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:214
+msgid "Usuario para conectar a la API de DokuWiki."
+msgstr "Użytkownik API DokuWiki."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:242
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:258
+msgid "Namespace"
+msgstr "Namespace"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:247
+msgid "Namespace utilizado para buscar las páginas."
+msgstr "Namespace użyty do stron wyszukiwania."
+
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:22
+msgid "Fecha / Hora"
+msgstr "Data / czas"
+
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:25
+msgid "Nivel"
+msgstr "Poziom"
+
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:28
+msgid "Evento"
+msgstr "Zdarzenie"
+
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:34
+msgid "IP"
+msgstr "IP"
+
+#: ../../../../inc/themes/material-blue/views/grid/datagrid-nav-full.inc:11
+msgid "Filtro ON"
+msgstr "Filtr wł."
+
+#: ../../../../inc/themes/material-blue/views/grid/datatabs-grid.inc:102
+msgid "Eliminar Seleccionados"
+msgstr "Usuń zaznaczone"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:26
+msgid "Nombre del campo"
+msgstr "Nazwa pola"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:57
+msgid "Texto Ayuda"
+msgstr "Tekst pomocy"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:63
+msgid "Ayuda del campo"
+msgstr "Pomoc pola"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:74
+msgid "Obligatorio"
+msgstr "Wymagane"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:25
+msgid "Nombre del grupo"
+msgstr "Nazwa grupy"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:38
+msgid "Descripción del grupo"
+msgstr "Opis grupy"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:20
+msgid "Nombre del plugin"
+msgstr "Nazwa pluginu"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:32
+msgid "Versión del plugin"
+msgstr "Wersja pluginu"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:37
+msgid "Versión Compatible"
+msgstr "Zgodna wersja"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:44
+msgid "Versión de sysPass compatible"
+msgstr "zgodna wersja sysPass"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:49
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:25
+msgid "Autor"
+msgstr "Autor"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:56
+msgid "Autor del plugin"
+msgstr "Autor pluginu"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:25
+msgid "Nombre del perfil"
+msgstr "Nazwa profilu"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:40
+msgid "Crear nueva cuenta"
+msgstr "Stwórz nowe konto"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:40
+msgid "Crear"
+msgstr "Stwórz"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:47
+msgid "Ver detalles de cuenta"
+msgstr "Pokaż szczegóły konta"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:47
+msgid "Ver"
+msgstr "Pokaż"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:54
+msgid "Ver clave de cuenta"
+msgstr "Pokaż hasło"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:61
+msgid "Ver historial de cuenta"
+msgstr "Pokaż historię konta"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:68
+msgid "Editar cuenta"
+msgstr "Edytuj konto"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:75
+msgid "Editar clave de cuenta"
+msgstr "Edytuj hasło"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:75
+msgid "Editar Clave"
+msgstr "Edytuj hasło"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:82
+msgid "Eliminar cuenta"
+msgstr "Usuń konto"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:89
+msgid "Ver archivos de cuenta"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:96
+msgid "Publicar enlace a cuenta"
+msgstr "Udostępnij link do konta"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:96
+msgid "Publicar Enlace"
+msgstr "Udostępnij link"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:103
+msgid "Crear cuenta privada"
+msgstr "Utwórz prywatne konto"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:110
+msgid "Crear cuenta privada para grupo"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:117
+msgid "Asignar permisos"
+msgstr "Przydziel prawa"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:130
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:132
+msgid "Gestión"
+msgstr "Zarządzanie"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:140
+msgid "Gestión de usuarios"
+msgstr "Zarządzanie uzytkownikami"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:147
+msgid "Gestión de grupos"
+msgstr "Zarządzanie grupami"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:154
+msgid "Gestión de perfiles"
+msgstr "Zarządzanie profilami"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:161
+msgid "Gestión de categorías"
+msgstr "Zarządzenia kategoriami"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:168
+msgid "Gestión de clientes"
+msgstr "Zarządzanie klientami"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:175
+msgid "Gestión de campos personalizados"
+msgstr "Zarządzanie własnymi polami"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:182
+msgid "Gestión de autorizaciones API"
+msgstr "Zarządzanie poświadczeniami API"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:189
+msgid "Gestión de enlaces"
+msgstr "Zarządzanie linkami"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:196
+msgid "Gestión de cuentas"
+msgstr "Zarządzanie kontami"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:210
+msgid "Gestión de etiquetas"
+msgstr "Zarządzanie tagami"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:233
+msgid "Opciones de encriptación"
+msgstr "Opcje szyfrowania"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:240
+msgid "Realizar copia de seguridad y exportar"
+msgstr "Stwórz kopię i eksportuj"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:240
+msgid "Backup"
+msgstr "Kopie zapasowe"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:247
+msgid "Realizar importación de cuentas"
+msgstr "Importuj konta"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:253
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:255
+msgid "Otros"
+msgstr "Inne"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:263
+msgid "Ver log de eventos"
+msgstr "Zobacz dziennik zdarzeń"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:270
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:272
+msgid "Usado por"
+msgstr "Użyte przez"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:59
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:61
+msgid "Hash"
+msgstr "Hash"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:67
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:69
+msgid "Uso"
+msgstr "Użyj"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/tags.inc:23
+msgid "Nombre de la etiqueta"
+msgstr "Nazwa tagu"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:42
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:141
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:105
+msgid "Opciones"
+msgstr "Opcje"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:45
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:49
+msgid "Regenerar Autorización"
+msgstr "Odśwież autoryzację"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:55
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:57
+msgid "Token"
+msgstr "Token"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:31
+msgid "Nombre de usuario completo"
+msgstr "Pełna nazwa użytkownika"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:45
+msgid "Login de inicio de sesión"
+msgstr "Login sesji"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:94
+msgid "Dirección de correo"
+msgstr "Adres email"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:145
+msgid "Administrador de la aplicación"
+msgstr "Administrator aplikacji"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:152
+msgid "Administrador de cuentas"
+msgstr "Administrator kont"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:167
+msgid "Forzar cambio de clave"
+msgstr "Wymuś zmianę hasła"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:181
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:183
+msgid "Entradas"
+msgstr "Wpisy"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:190
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:192
+msgid "Último Acceso"
+msgstr "Ostatnie logowanie"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:208
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:210
+msgid "Fecha Clave Maestra"
+msgstr "Data głównego hasła"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:11
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:69
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:72
+msgid "Salir"
+msgstr "Wyloguj"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:25
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:56
+msgid "Preferencias de usuario"
+msgstr "Ustawienia użytkownika"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:34
+#, php-format
+msgid "Hay %d notificaciones pendientes"
+msgstr "Masz %d nieprzeczytanych powiadomień"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:41
+msgid "No hay no hay notificaciones pendientes"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:74
+msgid "Indica si la conexión utiliza HTTPS."
+msgstr "Informuje czy połączenie używa HTTPS"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:74
+msgid ""
+"Las claves de formularios enviados se encriptan mediante PKI, el resto de "
+"datos no."
+msgstr ""
+"Hasła wysyłane przez formularze są zaszyfrowane przez PKI, pozostałe dane "
+"nie są."
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:79
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:82
+msgid "Demo"
+msgstr "Demo"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:90
+msgid "Ayuda :: FAQ :: Changelog"
+msgstr "Pomoc :: FAQ :: Lista zmian"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:94
+msgid "Un proyecto de cygnux.org"
+msgstr "Projekt cygnux.org"
+
+#: ../../../../inc/themes/material-blue/views/main/body-start.inc:4
+msgid "Javascript es necesario para el correcto funcionamiento"
+msgstr "JavaSript jest wymagany do prawidłowego funkcjonowania"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:9
+#, php-format
+msgid "Instalación %s"
+msgstr "Instalacja %s"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:19
+msgid "Admin de sysPass"
+msgstr "Administrator sysPass"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:27
+msgid "Usuario administrador de sysPass"
+msgstr "admin sysPass"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:35
+msgid "Login del usuario administrador de sysPass"
+msgstr "Login administratora sysPass"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:67
+msgid "Configurar BBDD"
+msgstr "Konfiguracja bazy danych"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:77
+msgid "Usuario acceso BBDD"
+msgstr "Użytkownik bazy danych"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:85
+msgid "Usuario con permisos de administrador de MySQL"
+msgstr "Użytkownik MySQL z prawami admina"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:93
+msgid "Clave acceso BBDD"
+msgstr "Hasło do bazy danych"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:102
+msgid "Nombre BBDD para sysPass"
+msgstr "Nazwa bazy danych sysPass"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:110
+msgid "Nombre de la base de datos para sysPass"
+msgstr "Nazwa bazy danych sysPass"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:119
+msgid "Servidor BBDD para sysPass"
+msgstr "Serwer bazy danych sysPass"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:127
+msgid "Nombre del servidor para instalar la base de datos de sysPass"
+msgstr "Nazwa hosta do instalacji bazy sysPass"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:145
+msgid "Modo Hosting"
+msgstr "Typ hostingu"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:152
+msgid "No crea ni verifica los permisos del usuario sobre la BBDD"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:166
+#: ../../../../inc/themes/material-blue/views/main/install.inc:168
+msgid "Instalar"
+msgstr "Instalacja"
+
+#: ../../../../inc/themes/material-blue/views/main/login.inc:38
+msgid "Clave Anterior"
+msgstr "Poprzednie hasło"
+
+#: ../../../../inc/themes/material-blue/views/main/login.inc:74
+msgid "¿Olvidó su clave?"
+msgstr "Zapomniałeś hasła?"
+
+#: ../../../../inc/themes/material-blue/views/main/login.inc:81
+msgid "Aplicación actualizada correctamente"
+msgstr "Aktualizacja aplikacji zakończona sukcesem"
+
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:7
+msgid "Solicitud de Cambio de Clave"
+msgstr "Żądaj zmiany hasła"
+
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:25
+msgid "Email del Usuario"
+msgstr "Email użytkownika"
+
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:55
+msgid "Volver a iniciar sesión"
+msgstr "Wróć do logowania"
+
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:61
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:63
+msgid "Solicitar"
+msgstr "Żądanie"
+
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:67
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:69
+msgid "Cambiar"
+msgstr "Zmiana"
+
+#: ../../../../inc/themes/material-blue/views/main/update.inc:21
+msgid "Actualizado"
+msgstr "Zaktualizowano"
+
+#: ../../../../inc/themes/material-blue/views/main/update.inc:27
+msgid "Error al comprobar actualizaciones"
+msgstr "Błąd sprawdzania akutalizacji"
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:4
+#, php-format
+msgid "Actualización %s"
+msgstr "Aktualizuj %s"
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:9
+msgid "Actualización de BBDD"
+msgstr "Uaktualnienie bazy danych"
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:15
+msgid "Código de Seguridad"
+msgstr "Kod bezpieczeństwa"
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:23
+msgid ""
+"Este código se encuentra en el archivo de configuración de sysPass con la "
+"etiqueta \"upgradeKey\""
+msgstr ""
+"Ten kod jest podany w pliku koniguracyjnym sysPassa w polu \"upgradeKey\""
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:28
+msgid "He realizado una copia de seguridad completa de sysPass"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:40
+msgid "Por favor espere mientras el proceso se ejecuta"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:50
+msgid "Iniciar Actualización"
+msgstr "Start uaktualnienia"
+
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:108
+msgid "Notificación global"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:111
+msgid "Global"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:92
+msgid ""
+"Ordena los resultados de búsqueda por el número de visitas de las cuentas."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:100
+msgid "Ordenar resultados por visitas"
+msgstr "Sortuj wyniki po ilości wyświetleń"
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:110
+msgid "Mostrar una barra de navegación superior en las búsquedas."
+msgstr "Pokazuje pasek nawigacji nad wynikami wyszukiwania"
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:118
+msgid "Barra de navegación superior"
+msgstr "Pasek nawigacji u góry"
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:128
+msgid ""
+"Mostrar las acciones ocultas para los elementos de la búsqueda de cuentas."
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:137
+msgid "Mostrar Acciones Ocultas"
+msgstr "Pokaż ukryte akcje"
+
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:2
+msgid "Ver Wiki"
+msgstr "Zobacz Wiki"
+
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:10
+#, php-format
+msgid "Resultados de búsqueda de '%s'"
+msgstr "Wyniki wyszukiwania dla '%s'"
+
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:13
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:23
+msgid "Página"
+msgstr "Strona"
diff --git a/inc/locales/pt_BR/LC_MESSAGES/messages.po b/inc/locales/pt_BR/LC_MESSAGES/messages.po
new file mode 100644
index 00000000..5c2ad6b1
--- /dev/null
+++ b/inc/locales/pt_BR/LC_MESSAGES/messages.po
@@ -0,0 +1,6416 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: sysPass\n"
+"POT-Creation-Date: 2017-02-13 00:14+0100\n"
+"PO-Revision-Date: 2017-02-13 00:25+0100\n"
+"Last-Translator: nuxsmin \n"
+"Language-Team: \n"
+"Language: pt_BR\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-KeywordsList: _;gettext;gettext_noop;__\n"
+"X-Poedit-Basepath: .\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+"X-Generator: Poedit 1.6.10\n"
+"X-Poedit-SearchPath-0: ../../../..\n"
+
+#: ../../../../ajax/ajax_accGetFiles.php:43
+#: ../../../../ajax/ajax_filesMgmt.php:58
+msgid "Gestión de archivos deshabilitada"
+msgstr "Arquivos de gerenciamento desativado"
+
+#: ../../../../ajax/ajax_accGetFiles.php:50
+#: ../../../../ajax/ajax_accSearch.php:44
+#: ../../../../ajax/ajax_filesMgmt.php:54
+#: ../../../../ajax/ajax_filesMgmt.php:70
+#: ../../../../ajax/ajax_passReset.php:49
+#: ../../../../ajax/ajax_userPrefsSave.php:58
+msgid "CONSULTA INVÁLIDA"
+msgstr "Consulta inválida"
+
+#: ../../../../ajax/ajax_accSearch.php:38
+#: ../../../../ajax/ajax_userPrefsSave.php:51
+#: ../../../../inc/SP/Controller/RequestControllerTrait.class.php:125
+msgid "La sesión no se ha iniciado o ha caducado"
+msgstr "A sessão não foi iniciada ou expirou"
+
+#: ../../../../ajax/ajax_filesMgmt.php:73
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:93
+msgid "Subir Archivo"
+msgstr "Carregar arquivo"
+
+#: ../../../../ajax/ajax_filesMgmt.php:79
+msgid "No hay extensiones permitidas"
+msgstr "Não há extensões permitidas"
+
+#: ../../../../ajax/ajax_filesMgmt.php:96
+#: ../../../../inc/SP/Import/FileImport.class.php:97
+msgid "Tipo de archivo no soportado"
+msgstr "Tipo de arquivo não suportado"
+
+#: ../../../../ajax/ajax_filesMgmt.php:97
+msgid "Extensión"
+msgstr "Extensão"
+
+#: ../../../../ajax/ajax_filesMgmt.php:103
+msgid "Archivo inválido"
+msgstr "Arquivo inválido"
+
+#: ../../../../ajax/ajax_filesMgmt.php:104
+#: ../../../../ajax/ajax_filesMgmt.php:166
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:835
+#: ../../../../inc/SP/Core/Upgrade.class.php:285
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:95
+#: ../../../../inc/themes/material-blue/views/config/import.inc:66
+#: ../../../../inc/themes/material-blue/views/config/import.inc:69
+msgid "Archivo"
+msgstr "Arquivo"
+
+#: ../../../../ajax/ajax_filesMgmt.php:117
+#: ../../../../ajax/ajax_filesMgmt.php:135
+#: ../../../../inc/SP/Import/FileImport.class.php:113
+#: ../../../../inc/SP/Import/FileImport.class.php:157
+#: ../../../../inc/SP/Import/FileImport.class.php:185
+msgid "Error interno al leer el archivo"
+msgstr "Erro ao ler arquivo interno"
+
+#: ../../../../ajax/ajax_filesMgmt.php:124
+msgid "Tamaño de archivo superado"
+msgstr "Tamanho do arquivo excedeu"
+
+#: ../../../../ajax/ajax_filesMgmt.php:125
+#: ../../../../ajax/ajax_filesMgmt.php:168
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:284
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:97
+msgid "Tamaño"
+msgstr "Tamanho"
+
+#: ../../../../ajax/ajax_filesMgmt.php:144
+msgid "Archivo guardado"
+msgstr "Arquivo salvo"
+
+#: ../../../../ajax/ajax_filesMgmt.php:146
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:77
+msgid "No se pudo guardar el archivo"
+msgstr "Não foi possível salvar o arquivo"
+
+#: ../../../../ajax/ajax_filesMgmt.php:154
+#: ../../../../ajax/ajax_filesMgmt.php:198
+msgid "No es un ID de archivo válido"
+msgstr "Não é uma id de arquivo válido"
+
+#: ../../../../ajax/ajax_filesMgmt.php:160
+msgid "El archivo no existe"
+msgstr "O arquivo não existe"
+
+#: ../../../../ajax/ajax_filesMgmt.php:163
+#: ../../../../inc/themes/material-blue/views/account/files-list.inc:34
+msgid "Descargar Archivo"
+msgstr "O download do arquivo"
+
+#: ../../../../ajax/ajax_filesMgmt.php:164
+#: ../../../../inc/SP/Api/SyspassApi.class.php:82
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:518
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:19
+msgid "ID"
+msgstr "Identidade"
+
+#: ../../../../ajax/ajax_filesMgmt.php:165
+#: ../../../../inc/SP/Api/SyspassApi.class.php:83
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:280
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:832
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:719
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:729
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:744
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:833
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1102
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:519
+#: ../../../../inc/SP/Controller/MainController.class.php:573
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:94
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:76
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:11
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:13
+msgid "Cuenta"
+msgstr "Conta"
+
+#: ../../../../ajax/ajax_filesMgmt.php:167
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:206
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:283
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:55
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:718
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:728
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:743
+#: ../../../../inc/SP/Controller/LoginController.class.php:344
+#: ../../../../inc/SP/Controller/LoginController.class.php:369
+#: ../../../../inc/SP/Controller/LoginController.class.php:407
+#: ../../../../inc/SP/Controller/LoginController.class.php:425
+#: ../../../../inc/SP/Controller/LoginController.class.php:431
+#: ../../../../inc/SP/Core/Init.class.php:430
+#: ../../../../inc/SP/Core/Init.class.php:670
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:96
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:75
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:31
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:33
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:39
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:46
+msgid "Tipo"
+msgstr "Tipo"
+
+#: ../../../../ajax/ajax_filesMgmt.php:204
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:827
+msgid "Archivo eliminado"
+msgstr "Arquivo excluído"
+
+#: ../../../../ajax/ajax_filesMgmt.php:206
+msgid "Error al eliminar el archivo"
+msgstr "Erro ao excluir arquivo"
+
+#: ../../../../ajax/ajax_filesMgmt.php:209
+#: ../../../../ajax/ajax_userPrefsSave.php:97
+#: ../../../../inc/SP/Api/ApiRequest.class.php:192
+#: ../../../../inc/SP/Controller/RequestControllerTrait.class.php:112
+msgid "Acción Inválida"
+msgstr "Ação inválida"
+
+#: ../../../../ajax/ajax_getContent.php:55
+#: ../../../../inc/SP/Api/ApiBase.class.php:156
+#: ../../../../inc/SP/Api/ApiRequest.class.php:178
+msgid "Parámetros incorrectos"
+msgstr "Parâmetros incorretos"
+
+#: ../../../../ajax/ajax_install.php:58
+msgid "Instalación finalizada"
+msgstr "Instalação concluída"
+
+#: ../../../../ajax/ajax_passReset.php:62
+msgid "Recuperación de Clave"
+msgstr "Recuperação de senha"
+
+#: ../../../../ajax/ajax_passReset.php:63
+msgid "Solicitado para"
+msgstr "Solicitada para"
+
+#: ../../../../ajax/ajax_passReset.php:70
+msgid "Solicitud enviada"
+msgstr "Solicitação enviada"
+
+#: ../../../../ajax/ajax_passReset.php:74
+msgid "En breve recibirá un correo para completar la solicitud."
+msgstr "Você receberá um e-mail para completar o pedido."
+
+#: ../../../../ajax/ajax_passReset.php:78
+msgid "Solicitud no enviada"
+msgstr "Solicitar unsent"
+
+#: ../../../../ajax/ajax_passReset.php:79
+msgid "Compruebe datos de usuario o consulte con el administrador"
+msgstr "Verifique os dados do usuário ou consulte o administrador"
+
+#: ../../../../ajax/ajax_passReset.php:88
+#: ../../../../inc/SP/Mgmt/Users/UserPass.class.php:151
+msgid "Modificar Clave Usuario"
+msgstr "Modificar utilizador password"
+
+#: ../../../../ajax/ajax_passReset.php:101
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:282
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:934
+msgid "Clave actualizada"
+msgstr "Senha atualizada"
+
+#: ../../../../ajax/ajax_passReset.php:102
+#: ../../../../inc/SP/Auth/Database/Database.class.php:68
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:474
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:231
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:246
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:273
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:284
+#: ../../../../inc/SP/Mgmt/Users/UserMigrate.class.php:106
+#: ../../../../inc/SP/Mgmt/Users/UserPass.class.php:152
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:37
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:23
+msgid "Login"
+msgstr "Login"
+
+#: ../../../../ajax/ajax_passReset.php:109
+msgid "La clave es incorrecta o no coincide"
+msgstr "A senha está incorreta ou não corresponde"
+
+#: ../../../../ajax/ajax_userPrefsSave.php:90
+#: ../../../../inc/SP/Mgmt/Users/UserPreferencesUtil.class.php:85
+msgid "Preferencias actualizadas"
+msgstr "Preferências atualizada"
+
+#: ../../../../inc/SP/Account/Account.class.php:126
+msgid "Error al modificar la cuenta"
+msgstr "Falha ao modificar a conta"
+
+#: ../../../../inc/SP/Account/Account.class.php:172
+#: ../../../../inc/SP/Account/AccountHistoryUtil.class.php:153
+msgid "Error al restaurar cuenta"
+msgstr "Falha ao restaurar a conta"
+
+#: ../../../../inc/SP/Account/Account.class.php:200
+#: ../../../../inc/SP/Account/AccountHistory.class.php:216
+#: ../../../../inc/SP/Account/AccountHistory.class.php:503
+msgid "No se pudieron obtener los datos de la cuenta"
+msgstr "Eles não poderiam obter dados da conta"
+
+#: ../../../../inc/SP/Account/Account.class.php:202
+msgid "La cuenta no existe"
+msgstr "A conta não existe"
+
+#: ../../../../inc/SP/Account/Account.class.php:267
+msgid "Error al crear la cuenta"
+msgstr "Erro ao criar a conta"
+
+#: ../../../../inc/SP/Account/Account.class.php:339
+#: ../../../../inc/SP/Account/AccountHistory.class.php:626
+msgid "Error al eliminar la cuenta"
+msgstr "Falha ao excluir a conta"
+
+#: ../../../../inc/SP/Account/Account.class.php:403
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:561
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:585
+msgid "Actualizar Clave Maestra"
+msgstr "Atualização de Senha Mestre"
+
+#: ../../../../inc/SP/Account/Account.class.php:404
+#: ../../../../inc/SP/Account/AccountHistory.class.php:263
+msgid "Inicio"
+msgstr "Iniciação"
+
+#: ../../../../inc/SP/Account/Account.class.php:408
+#: ../../../../inc/SP/Account/AccountHistory.class.php:268
+msgid "Error en el módulo de encriptación"
+msgstr "Erro no módulo de criptografia"
+
+#: ../../../../inc/SP/Account/Account.class.php:417
+#: ../../../../inc/SP/Account/AccountHistory.class.php:277
+msgid "Error al obtener las claves de las cuentas"
+msgstr "Erro ao obter contas-senha"
+
+#: ../../../../inc/SP/Account/Account.class.php:434
+#: ../../../../inc/SP/Account/AccountHistory.class.php:305
+msgid "Clave de cuenta vacía"
+msgstr "Conta-senha vazia"
+
+#: ../../../../inc/SP/Account/Account.class.php:439
+#: ../../../../inc/SP/Account/AccountHistory.class.php:310
+msgid "IV de encriptación incorrecto"
+msgstr "Criptografia incorreta iv"
+
+#: ../../../../inc/SP/Account/Account.class.php:448
+#: ../../../../inc/SP/Account/AccountHistory.class.php:319
+msgid "No es posible desencriptar la clave de la cuenta"
+msgstr "Você não pode descriptografar a conta-senha"
+
+#: ../../../../inc/SP/Account/Account.class.php:457
+msgid "Fallo al actualizar la clave de la cuenta"
+msgstr "Falha ao atualizar a senha da conta"
+
+#: ../../../../inc/SP/Account/Account.class.php:462
+#: ../../../../inc/SP/Account/AccountHistory.class.php:332
+msgid "Cuentas actualizadas"
+msgstr "Contas atualizados"
+
+#: ../../../../inc/SP/Account/Account.class.php:463
+#: ../../../../inc/SP/Account/AccountHistory.class.php:333
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1019
+msgid "Errores"
+msgstr "Erros"
+
+#: ../../../../inc/SP/Account/Account.class.php:520
+msgid "Error al actualizar la clave"
+msgstr "Erro ao atualizar a senha"
+
+#: ../../../../inc/SP/Account/AccountFavorites.class.php:80
+msgid "Error al añadir favorito"
+msgstr "Erro ao adicionar favorito"
+
+#: ../../../../inc/SP/Account/AccountFavorites.class.php:102
+msgid "Error al eliminar favorito"
+msgstr "Falha ao remover favorito"
+
+#: ../../../../inc/SP/Account/AccountHistory.class.php:192
+msgid "Error al actualizar el historial"
+msgstr "História erro ao atualizar"
+
+#: ../../../../inc/SP/Account/AccountHistory.class.php:262
+msgid "Actualizar Clave Maestra (H)"
+msgstr "Atualização master key (h)"
+
+#: ../../../../inc/SP/Account/AccountHistory.class.php:300
+msgid "La clave maestra del registro no coincide"
+msgstr "O registro senha mestre não corresponde"
+
+#: ../../../../inc/SP/Account/AccountHistory.class.php:328
+msgid "Fallo al actualizar la clave del histórico"
+msgstr "Falha ao atualizar senha histórica"
+
+#: ../../../../inc/SP/Account/AccountTags.class.php:90
+msgid "Error al añadir las etiquetas de la cuenta"
+msgstr "Conta rótulos erro ao adicionar"
+
+#: ../../../../inc/SP/Account/AccountTags.class.php:129
+msgid "Error al eliminar las etiquetas de la cuenta"
+msgstr "Conta rótulos de erro removendo"
+
+#: ../../../../inc/SP/Account/AccountUtil.class.php:132
+msgid "No se pudieron obtener los datos de las cuentas"
+msgstr "Eles não poderiam obter os dados da conta"
+
+#: ../../../../inc/SP/Account/UserAccounts.class.php:89
+msgid "Error al eliminar usuarios asociados a la cuenta"
+msgstr "Erro ao excluir usuários associados à conta"
+
+#: ../../../../inc/SP/Account/UserAccounts.class.php:130
+msgid "Error al actualizar los usuarios de la cuenta"
+msgstr "Conta de usuário de atualização de erro"
+
+#: ../../../../inc/SP/Api/ApiBase.class.php:95
+#: ../../../../inc/SP/Api/ApiBase.class.php:187
+#: ../../../../inc/SP/Api/ApiBase.class.php:199
+#: ../../../../inc/SP/Api/ApiBase.class.php:212
+#: ../../../../inc/SP/Api/ApiBase.class.php:244
+#: ../../../../inc/SP/Api/SyspassApi.class.php:74
+#: ../../../../inc/SP/Api/SyspassApi.class.php:143
+msgid "Acceso no permitido"
+msgstr "Acesso não autorizado"
+
+#: ../../../../inc/SP/Api/ApiRequest.class.php:145
+#: ../../../../inc/SP/Import/XmlImportTrait.class.php:75
+msgid "Método inválido"
+msgstr "Método inválido"
+
+#: ../../../../inc/SP/Api/ApiRequest.class.php:162
+msgid "Datos inválidos"
+msgstr "Dados inválidos"
+
+#: ../../../../inc/SP/Api/ApiRequest.class.php:164
+msgid "Formato incorrecto"
+msgstr "Deformado"
+
+#: ../../../../inc/SP/Api/ApiTokens.class.php:97
+#: ../../../../inc/SP/Api/ApiTokens.class.php:125
+#: ../../../../inc/SP/Api/ApiTokens.class.php:150
+#: ../../../../inc/SP/Api/ApiTokens.class.php:183
+#: ../../../../inc/SP/Api/ApiTokens.class.php:224
+#: ../../../../inc/SP/Api/ApiTokens.class.php:242
+#: ../../../../inc/SP/Api/ApiTokens.class.php:262
+#: ../../../../inc/SP/Api/ApiTokensUtil.class.php:168
+#: ../../../../inc/SP/Controller/LoginController.class.php:182
+#: ../../../../inc/SP/Controller/LoginController.class.php:257
+#: ../../../../inc/SP/Controller/LoginController.class.php:360
+#: ../../../../inc/SP/Controller/LoginController.class.php:384
+#: ../../../../inc/SP/Core/Crypt.class.php:212
+#: ../../../../inc/SP/Core/Crypt.class.php:223
+#: ../../../../inc/SP/Import/XmlFileImport.class.php:106
+#: ../../../../inc/SP/Mgmt/Users/UserPassRecover.class.php:134
+msgid "Error interno"
+msgstr "Erro interno"
+
+#: ../../../../inc/SP/Api/ApiTokens.class.php:129
+msgid "La autorización ya existe"
+msgstr "A autorização já existe"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:81
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:222
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:223
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:517
+#: ../../../../inc/SP/Core/Acl.class.php:191
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:48
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:71
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:54
+msgid "Ver Clave"
+msgstr "Veja senha"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:84
+#: ../../../../inc/SP/Api/SyspassApi.class.php:181
+#: ../../../../inc/SP/Api/SyspassApi.class.php:219
+#: ../../../../inc/SP/Api/SyspassApi.class.php:272
+#: ../../../../inc/SP/Api/SyspassApi.class.php:308
+#: ../../../../inc/SP/Api/SyspassApi.class.php:361
+#: ../../../../inc/SP/Api/SyspassApi.class.php:397
+#: ../../../../inc/SP/Controller/MainController.class.php:574
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApiBase.class.php:197
+msgid "Origen"
+msgstr "Fonte"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:178
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:914
+msgid "Crear Cuenta"
+msgstr "Criar uma conta"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:179
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:915
+#: ../../../../inc/SP/Import/ImportBase.class.php:140
+msgid "Cuenta creada"
+msgstr "Conta criada"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:180
+#: ../../../../inc/SP/Api/SyspassApi.class.php:218
+#: ../../../../inc/SP/Api/SyspassApi.class.php:271
+#: ../../../../inc/SP/Api/SyspassApi.class.php:307
+#: ../../../../inc/SP/Api/SyspassApi.class.php:360
+#: ../../../../inc/SP/Api/SyspassApi.class.php:396
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:354
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:56
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:130
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:205
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:282
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:349
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:402
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:473
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:592
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:666
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:912
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:230
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:245
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:272
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:283
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:374
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:382
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:402
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:434
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:442
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:462
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:496
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:504
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:524
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:558
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:566
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:587
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:667
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:674
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:775
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:782
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:800
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:862
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:870
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:877
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:916
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:926
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:935
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:944
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:967
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:971
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1156
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1177
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1181
+#: ../../../../inc/SP/Core/Plugin/PluginDataStore.class.php:77
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:12
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:9
+#: ../../../../inc/themes/material-blue/views/account/account.inc:41
+#: ../../../../inc/themes/material-blue/views/account/request.inc:12
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:43
+#: ../../../../inc/themes/material-blue/views/config/info.inc:30
+#: ../../../../inc/themes/material-blue/views/itemshow/categories.inc:16
+#: ../../../../inc/themes/material-blue/views/itemshow/customers.inc:19
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:19
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:18
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:13
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:17
+#: ../../../../inc/themes/material-blue/views/itemshow/tags.inc:16
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:22
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:12
+msgid "Nombre"
+msgstr "Nome"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:209
+msgid "Cuenta no encontrada"
+msgstr "Conta não encontrada"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:216
+#: ../../../../inc/SP/Controller/AccountController.class.php:551
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:277
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:278
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:383
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:384
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:454
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:455
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:961
+#: ../../../../inc/SP/Core/Acl.class.php:192
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:39
+msgid "Eliminar Cuenta"
+msgstr "Eliminar conta"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:217
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:970
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1180
+msgid "Cuenta eliminada"
+msgstr "Conta excluída"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:269
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:556
+msgid "Crear Categoría"
+msgstr "Criar categoria"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:270
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:557
+#: ../../../../inc/SP/Import/ImportBase.class.php:161
+msgid "Categoría creada"
+msgstr "Categoria criada"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:299
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:127
+msgid "Categoría no encontrada"
+msgstr "Categoria não encontrada"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:305
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:111
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:112
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:584
+#: ../../../../inc/SP/Core/Acl.class.php:200
+msgid "Eliminar Categoría"
+msgstr "Remover categoria"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:306
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:579
+msgid "Categoría eliminada"
+msgstr "Categoria excluída"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:358
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:494
+msgid "Crear Cliente"
+msgstr "Criar cliente"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:359
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:495
+#: ../../../../inc/SP/Import/ImportBase.class.php:183
+msgid "Cliente creado"
+msgstr "Cliente criado"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:388
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:132
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:203
+msgid "Cliente no encontrado"
+msgstr "Cliente não encontrado"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:394
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:185
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:186
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:521
+#: ../../../../inc/SP/Core/Acl.class.php:205
+msgid "Eliminar Cliente"
+msgstr "Remover cliente"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:395
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:516
+msgid "Cliente eliminado"
+msgstr "Cliente removido"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:418
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:709
+msgid "Proceso de backup finalizado"
+msgstr "Processo de backup foi concluído"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:424
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:704
+#: ../../../../inc/SP/Core/Backup.class.php:75
+msgid "Error al realizar el backup"
+msgstr "Falha ao executar o backup"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:425
+#: ../../../../inc/SP/Controller/ChecksController.class.php:113
+#: ../../../../inc/SP/Controller/ChecksController.class.php:142
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:682
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:705
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1026
+#: ../../../../inc/SP/Import/Import.class.php:115
+msgid "Revise el registro de eventos para más detalles"
+msgstr "Verifique o log de eventos para obter detalhes"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:455
+#: ../../../../inc/SP/Api/SyspassApi.class.php:472
+#: ../../../../inc/SP/Api/SyspassApi.class.php:479
+msgid "Id de la cuenta"
+msgstr "Conta id"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:456
+#: ../../../../inc/SP/Api/SyspassApi.class.php:473
+#: ../../../../inc/SP/Api/SyspassApi.class.php:485
+msgid "Clave del usuario asociado al token"
+msgstr "User senha associada com o token"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:457
+msgid "Devolver detalles en la respuesta"
+msgstr "Detalhes do retorno na resposta"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:463
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:15
+msgid "Texto a buscar"
+msgstr "Texto de pesquisa"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:464
+#: ../../../../inc/SP/Api/SyspassApi.class.php:503
+#: ../../../../inc/SP/Api/SyspassApi.class.php:523
+msgid "Número de resultados a mostrar"
+msgstr "Número de resultados para mostrar"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:465
+msgid "Id de categoría a filtrar"
+msgstr "Filtro de id da categoria"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:466
+msgid "Id de cliente a filtrar"
+msgstr "Filtro de id do cliente"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:486
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:18
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:16
+#: ../../../../inc/themes/material-blue/views/account/account.inc:48
+#: ../../../../inc/themes/material-blue/views/account/request.inc:19
+msgid "Nombre de cuenta"
+msgstr "Nome da conta"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:487
+#: ../../../../inc/SP/Api/SyspassApi.class.php:516
+msgid "Id de categoría"
+msgstr "Categoria id"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:488
+#: ../../../../inc/SP/Api/SyspassApi.class.php:536
+msgid "Id de cliente"
+msgstr "Cliente id"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:489
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:615
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:64
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:56
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:62
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:73
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:76
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:79
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:87
+#: ../../../../inc/themes/material-blue/views/account/account.inc:123
+#: ../../../../inc/themes/material-blue/views/account/account.inc:130
+#: ../../../../inc/themes/material-blue/views/account/viewpass.inc:31
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:254
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:257
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:61
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:138
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:77
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:84
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:229
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:236
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:102
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:109
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:35
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:41
+#: ../../../../inc/themes/material-blue/views/main/install.inc:43
+#: ../../../../inc/themes/material-blue/views/main/login.inc:27
+#: ../../../../inc/themes/material-blue/views/main/login.inc:88
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:34
+msgid "Clave"
+msgstr "Senha"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:490
+#: ../../../../inc/themes/material-blue/views/account/account.inc:117
+msgid "Usuario de acceso"
+msgstr "O acesso do usuário"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:491
+#: ../../../../inc/themes/material-blue/views/account/account.inc:105
+msgid "URL o IP de acceso"
+msgstr "Url ou o acesso ip"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:492
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:72
+#: ../../../../inc/themes/material-blue/views/account/account.inc:172
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:135
+msgid "Notas sobre la cuenta"
+msgstr "Descrição"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:502
+msgid "Nombre de categoría a buscar"
+msgstr "Categoria nome para procurar"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:509
+#: ../../../../inc/themes/material-blue/views/itemshow/categories.inc:23
+msgid "Nombre de la categoría"
+msgstr "Nome da categoria"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:510
+#: ../../../../inc/themes/material-blue/views/itemshow/categories.inc:35
+msgid "Descripción de la categoría"
+msgstr "Descrição da categoria"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:522
+msgid "Nombre de cliente a buscar"
+msgstr "Nome do cliente para procurar"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:529
+#: ../../../../inc/themes/material-blue/views/itemshow/customers.inc:26
+msgid "Nombre del cliente"
+msgstr "Nome do cliente"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:530
+#: ../../../../inc/themes/material-blue/views/itemshow/customers.inc:39
+msgid "Descripción del cliente"
+msgstr "Descrição do cliente"
+
+#: ../../../../inc/SP/Auth/Auth.class.php:87
+msgid "Método ya inicializado"
+msgstr "Método já inicializado"
+
+#: ../../../../inc/SP/Auth/Auth.class.php:89
+msgid "Método no disponible"
+msgstr "Método não disponível"
+
+#: ../../../../inc/SP/Auth/AuthUtil.class.php:63
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:132
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:170
+msgid "Cambio de Clave"
+msgstr "Trocar senha"
+
+#: ../../../../inc/SP/Auth/AuthUtil.class.php:64
+msgid "Se ha solicitado el cambio de su clave de usuario."
+msgstr "Foi solicitada mudança de sua senha de usuário."
+
+#: ../../../../inc/SP/Auth/AuthUtil.class.php:66
+msgid "Para completar el proceso es necesario que acceda a la siguiente URL:"
+msgstr "Para concluir o processo precisa acessar o seguinte url:"
+
+#: ../../../../inc/SP/Auth/AuthUtil.class.php:70
+msgid "Si no ha solicitado esta acción, ignore este mensaje."
+msgstr "Se você não solicitou esta ação, ignorar esta mensagem."
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:118
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:432
+#: ../../../../inc/SP/Controller/ChecksController.class.php:92
+msgid "Los parámetros de LDAP no están configurados"
+msgstr "Parâmetros ldap não estão configurados"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:132
+#: ../../../../inc/SP/Controller/ChecksController.class.php:107
+msgid "Conexión a LDAP correcta"
+msgstr "Conexão ldap com sucesso"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:133
+#: ../../../../inc/SP/Mgmt/Users/UserLdapSync.class.php:67
+msgid "Objetos encontrados"
+msgstr "Objetos encontrados"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:169
+msgid "No es posible conectar con el servidor de LDAP"
+msgstr "Você não pode se conectar ao servidor ldap"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:170
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:49
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:19
+#: ../../../../inc/themes/material-blue/views/config/info.inc:58
+#: ../../../../inc/themes/material-blue/views/config/info.inc:61
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:62
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:87
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:27
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:34
+msgid "Servidor"
+msgstr "Servidor"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:214
+msgid "Error al conectar (BIND)"
+msgstr "Erro de ligação (bind)"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:247
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:259
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:269
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:679
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:691
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:701
+msgid "Error al buscar objetos en DN base"
+msgstr "Falha ao localizar objetos com base dn"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:533
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:556
+msgid "Error al buscar el DN del usuario"
+msgstr "Não foi possível encontrar o usuário dn"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:534
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:547
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:557
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:167
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:109
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:119
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:368
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:748
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:835
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:616
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:624
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:720
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:730
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:745
+#: ../../../../inc/SP/Controller/LoginController.class.php:196
+#: ../../../../inc/SP/Controller/LoginController.class.php:251
+#: ../../../../inc/SP/Controller/LoginController.class.php:345
+#: ../../../../inc/SP/Controller/LoginController.class.php:403
+#: ../../../../inc/SP/Controller/LoginController.class.php:426
+#: ../../../../inc/SP/Core/Init.class.php:591
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:77
+#: ../../../../inc/SP/Mgmt/Users/UserLdapSync.class.php:99
+#: ../../../../inc/SP/Mgmt/Users/UserPreferencesUtil.class.php:66
+#: ../../../../res/test.php:64
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:45
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:51
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:54
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:60
+#: ../../../../inc/themes/material-blue/views/account/account.inc:110
+#: ../../../../inc/themes/material-blue/views/account/viewpass.inc:20
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:63
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:47
+#: ../../../../inc/themes/material-blue/views/config/info.inc:46
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:117
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:64
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:71
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:209
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:223
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:31
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:35
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:37
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:12
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:14
+#: ../../../../inc/themes/material-blue/views/main/login.inc:15
+#: ../../../../inc/themes/material-blue/views/main/login.inc:87
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:16
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:90
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:92
+msgid "Usuario"
+msgstr "Usuário"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:546
+msgid "Error al localizar el usuario en LDAP"
+msgstr "Não conseguiu localizar o usuário em ldap"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:587
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:600
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:611
+msgid "Error al buscar RDN de grupo"
+msgstr "Falha ao localizar grupo rdn"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:588
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:601
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:612
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:134
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:144
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:158
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:168
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:108
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:120
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:476
+#: ../../../../inc/SP/Controller/LoginController.class.php:253
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:236
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:239
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:174
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:201
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:71
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:73
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:47
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:61
+msgid "Grupo"
+msgstr "Grupo"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:121
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:157
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:93
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:126
+msgid "Usuario verificado en grupo"
+msgstr "Grupo de usuários verificados"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:133
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:107
+msgid "Error al buscar el grupo de usuarios"
+msgstr "Não foi possível encontrar o grupo de usuários"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:143
+msgid "No se encontró el grupo con ese nombre"
+msgstr "Nenhum grupo descobriu que o nome"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:166
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:118
+msgid "Usuario no pertenece al grupo"
+msgstr "Usuário não pertence ao grupo"
+
+#: ../../../../inc/SP/Config/ConfigDB.class.php:107
+#: ../../../../inc/SP/Config/ConfigDB.class.php:147
+#: ../../../../inc/SP/Controller/MainController.class.php:287
+#: ../../../../inc/SP/Core/Acl.class.php:215
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:75
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:216
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:218
+msgid "Configuración"
+msgstr "Configuração"
+
+#: ../../../../inc/SP/Config/ConfigDB.class.php:108
+#: ../../../../inc/SP/Config/ConfigDB.class.php:148
+msgid "Modificar configuración"
+msgstr "Modificar as configurações"
+
+#: ../../../../inc/SP/Config/ConfigDB.class.php:149
+#: ../../../../inc/SP/Core/Upgrade.class.php:258
+#: ../../../../inc/SP/Core/Upgrade.class.php:264
+msgid "Parámetro"
+msgstr "Parâmetro"
+
+#: ../../../../inc/SP/Config/ConfigDB.class.php:152
+msgid "Valor"
+msgstr "Valor"
+
+#: ../../../../inc/SP/Controller/AccountController.class.php:144
+#: ../../../../inc/SP/Controller/AccountController.class.php:467
+#: ../../../../inc/SP/Controller/AccountController.class.php:499
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:211
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:212
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:45
+msgid "Detalles de Cuenta"
+msgstr "Detalhes da conta"
+
+#: ../../../../inc/SP/Controller/AccountController.class.php:256
+#: ../../../../inc/SP/Controller/MainController.class.php:257
+#: ../../../../inc/SP/Core/Acl.class.php:187
+msgid "Nueva Cuenta"
+msgstr "Nova conta"
+
+#: ../../../../inc/SP/Controller/AccountController.class.php:383
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:264
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:265
+#: ../../../../inc/SP/Core/Acl.class.php:186
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:101
+msgid "Copiar Cuenta"
+msgstr "Conta cópia"
+
+#: ../../../../inc/SP/Controller/AccountController.class.php:411
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:251
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:252
+#: ../../../../inc/SP/Core/Acl.class.php:188
+msgid "Editar Cuenta"
+msgstr "Editar conta"
+
+#: ../../../../inc/SP/Controller/AccountController.class.php:439
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:116
+msgid "Modificar Clave de Cuenta"
+msgstr "Key account modificar"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:237
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:238
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:86
+msgid "Copiar Clave en Portapapeles"
+msgstr "Copiar senha para a área de transferência"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:287
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:288
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:142
+msgid "Solicitar Modificación"
+msgstr "Solicitação de modificação"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:297
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:298
+msgid "Más Acciones"
+msgstr "Mais ações"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:347
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:281
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:350
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:403
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:834
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1103
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:23
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:29
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:21
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:27
+#: ../../../../inc/themes/material-blue/views/account/account.inc:53
+#: ../../../../inc/themes/material-blue/views/account/account.inc:55
+#: ../../../../inc/themes/material-blue/views/account/request.inc:24
+#: ../../../../inc/themes/material-blue/views/account/request.inc:31
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:21
+msgid "Cliente"
+msgstr "Cliente"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:348
+msgid "Ordenar por Cliente"
+msgstr "Classificar por cliente"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:355
+msgid "Ordenar por Nombre"
+msgstr "Classificar por nome"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:361
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:32
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:38
+#: ../../../../inc/themes/material-blue/views/account/account.inc:76
+#: ../../../../inc/themes/material-blue/views/account/account.inc:78
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:57
+msgid "Categoría"
+msgstr "Categoria"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:362
+msgid "Ordenar por Categoría"
+msgstr "Classificar por categoria"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:369
+msgid "Ordenar por Usuario"
+msgstr "Ordenar por usuário"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:375
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:34
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:40
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:43
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:49
+#: ../../../../inc/themes/material-blue/views/account/account.inc:99
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:68
+msgid "URL / IP"
+msgstr "Url / ip"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:376
+msgid "Ordenar por URL / IP"
+msgstr "Ordenar por url / ip"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:108
+#, php-format
+msgid "Objetos encontrados: %d"
+msgstr "Objetos encontrados: %d"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:127
+msgid "Los parámetros de DokuWiki no están configurados"
+msgstr "Parâmetros dokuwiki não estão definidas"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:135
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:113
+#: ../../../../inc/SP/Import/ImportBase.class.php:144
+#: ../../../../inc/SP/Import/ImportBase.class.php:166
+#: ../../../../inc/SP/Import/ImportBase.class.php:188
+#: ../../../../inc/SP/Import/ImportBase.class.php:210
+#: ../../../../inc/SP/Log/Email.class.php:92
+#: ../../../../inc/SP/Log/Email.class.php:93
+#: ../../../../inc/SP/Log/Email.class.php:203
+#: ../../../../inc/SP/Log/Email.class.php:204
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApiBase.class.php:193
+msgid "Error"
+msgstr "Erro"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:137
+msgid "Conexión correcta"
+msgstr "Conexão correta"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:138
+#: ../../../../inc/SP/Core/Init.class.php:429
+#: ../../../../inc/SP/Core/Init.class.php:669
+#: ../../../../inc/SP/Core/Upgrade.class.php:94
+#: ../../../../inc/SP/Core/Upgrade.class.php:278
+#: ../../../../inc/themes/material-blue/views/config/info.inc:40
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:25
+msgid "Versión"
+msgstr "Versão"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:141
+msgid "Error de conexión a DokuWiki"
+msgstr "Erro ao ligar ao dokuwiki"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:173
+msgid "Faltan parámetros de syslog remoto"
+msgstr "Parâmetros que faltam syslog remoto"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:182
+msgid "Syslog remoto deshabilitado"
+msgstr "Remoto syslog deficientes"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:195
+msgid "Faltan parámetros de Proxy"
+msgstr "Campos de proxy necessários"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:204
+msgid "Proxy habiltado"
+msgstr "Proxy habilitado"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:208
+msgid "Proxy deshabilitado"
+msgstr "Proxy desativado"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:211
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:300
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:364
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:411
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:465
+msgid "Sección"
+msgstr "Seção"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:211
+#: ../../../../inc/SP/Controller/ConfigController.class.php:151
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:226
+#: ../../../../inc/themes/material-blue/views/main/install.inc:132
+msgid "General"
+msgstr "Geral"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:228
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:511
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:581
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:649
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:699
+#: ../../../../inc/SP/Forms/UserForm.class.php:96
+#: ../../../../inc/SP/Forms/UserForm.class.php:108
+#: ../../../../inc/SP/Forms/UserForm.class.php:122
+msgid "Ey, esto es una DEMO!!"
+msgstr "Isto é uma DEMO!"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:242
+msgid "Configuración actualizada"
+msgstr "Configuração atualizada"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:244
+msgid "Error al guardar la configuración"
+msgstr "Falha ao salvar a configuração"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:248
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:424
+msgid "Modificar Configuración"
+msgstr "Modificar as configurações"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:281
+msgid "El tamaño máximo por archivo es de 16MB"
+msgstr "O tamanho máximo por arquivo é de 16 mb"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:300
+#: ../../../../inc/SP/Controller/ConfigController.class.php:200
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:365
+#: ../../../../inc/SP/Controller/MainController.class.php:580
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:90
+#: ../../../../inc/themes/material-blue/views/account/linkedAccounts.inc:13
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:30
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:32
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:196
+msgid "Cuentas"
+msgstr "Contas"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:322
+msgid "Faltan parámetros de Wiki"
+msgstr "Faltam parametros de wiki"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:330
+msgid "Wiki habiltada"
+msgstr "Wiki habilitada"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:334
+msgid "Wiki deshabilitada"
+msgstr "Wiki desativada"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:347
+msgid "Faltan parámetros de DokuWiki"
+msgstr "Parâmetros que faltam dokuwiki"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:357
+msgid "DokuWiki habiltada"
+msgstr "Dokuwiki habiltada"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:361
+msgid "DokuWiki deshabilitada"
+msgstr "Dokuwiki desativada"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:364
+#: ../../../../inc/SP/Controller/ConfigController.class.php:232
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:63
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:10
+msgid "Wiki"
+msgstr "Wiki"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:391
+msgid "Faltan parámetros de LDAP"
+msgstr "Verifique os parametros não preenchidos de Ldap"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:404
+msgid "LDAP habiltado"
+msgstr "LDAP habilitado"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:408
+msgid "LDAP deshabilitado"
+msgstr "LDAP desabilitado"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:411
+#: ../../../../inc/SP/Controller/ConfigController.class.php:265
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:7
+msgid "LDAP"
+msgstr "LDAP"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:440
+msgid "Faltan parámetros de Correo"
+msgstr "Verifique os parametros não preenchidos de e-mail"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:456
+msgid "Correo habiltado"
+msgstr "E-mail habilitado"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:462
+msgid "Correo deshabilitado"
+msgstr "E-mail desativado"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:465
+#: ../../../../inc/SP/Controller/ConfigController.class.php:296
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:7
+msgid "Correo"
+msgstr "E-mail"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:487
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:564
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:279
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:507
+#: ../../../../inc/SP/Controller/LoginController.class.php:288
+#: ../../../../inc/SP/Controller/LoginController.class.php:298
+msgid "Clave maestra actualizada"
+msgstr "Senha mestre atualizada"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:488
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:566
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:279
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:507
+msgid "Reinicie la sesión para cambiarla"
+msgstr "Reiniciar a sessão para alterar"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:492
+msgid "Clave maestra no indicada"
+msgstr "Senha mestre não indicada"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:495
+msgid "Se ha de confirmar el cambio de clave"
+msgstr "Confirmar troca da senha mestre"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:500
+msgid "Las claves son idénticas"
+msgstr "As senhas são idênticas"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:503
+msgid "Las claves maestras no coinciden"
+msgstr "As senhas mestres não correspondem"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:506
+msgid "La clave maestra actual no coincide"
+msgstr "A senha mestre atual não corresponde"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:521
+#: ../../../../inc/SP/Import/Import.class.php:89
+msgid "No es posible iniciar una transacción"
+msgstr "Você não pode iniciar uma transação"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:530
+msgid "Errores al actualizar las claves de las cuentas"
+msgstr "Erro ao atualizar as senhas das contas"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:539
+msgid "Errores al actualizar las claves de las cuentas del histórico"
+msgstr "Erro ao atualizar as senhas das contas do histórico"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:546
+msgid "Errores al actualizar datos de campos personalizados"
+msgstr "Erros ao atualizar dados do campo personalizado"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:551
+#: ../../../../inc/SP/Import/Import.class.php:95
+msgid "No es posible finalizar una transacción"
+msgstr "É possível concluir uma transação"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:569
+msgid "Error al guardar el hash de la clave maestra"
+msgstr "Erro ao salvar hash da senha mestre"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:588
+msgid "Hash de clave maestra actualizado"
+msgstr "Mestre atualizada hashing senha"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:592
+msgid "Error al actualizar el hash de la clave maestra"
+msgstr "Falha ao atualizar o hash de senha mestre"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:611
+msgid "Generar Clave Temporal"
+msgstr "Gerar senha temporária"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:614
+msgid "Clave Temporal Generada"
+msgstr "Senha Temporária Gerada"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:619
+#, php-format
+msgid "Clave Maestra %s"
+msgstr "Senha mestre %s"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:620
+msgid ""
+"Se ha generado una nueva clave para el acceso a sysPass y se solicitará en "
+"el siguiente inicio."
+msgstr ""
+"Tem gerado uma nova senha para o acesso a syspass e será solicitada na "
+"próxima inicialização."
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:622
+#, php-format
+msgid "La nueva clave es: %s"
+msgstr "A nova senha é: %s"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:624
+msgid "No olvide acceder lo antes posible para guardar los cambios."
+msgstr ""
+"Não se esqueça de introduzir o mais rapidamente possível para salvar as "
+"alterações."
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:635
+msgid "Error al generar clave temporal"
+msgstr "Falha ao gerar senha temporária"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:676
+#: ../../../../inc/SP/Forms/AccountForm.class.php:134
+#: ../../../../inc/SP/Forms/UserForm.class.php:112
+msgid "Las claves no coinciden"
+msgstr "As senhas não correspondem"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:681
+msgid "Error al realizar la exportación"
+msgstr "Erro ao exportar"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:686
+msgid "Proceso de exportación finalizado"
+msgstr "Processo de exportação terminou"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:322
+#: ../../../../inc/SP/Core/Acl.class.php:217
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:233
+msgid "Encriptación"
+msgstr "Criptografia"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:367
+msgid "Último backup"
+msgstr "Último backup"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:367
+msgid "No se encontraron backups"
+msgstr "Não há backups foram encontrados"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:378
+msgid "Última exportación"
+msgstr "Última exportação"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:378
+msgid "No se encontró archivo de exportación"
+msgstr "No arquivo de exportação encontrados"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:380
+#: ../../../../inc/SP/Core/Acl.class.php:218
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:7
+msgid "Copia de Seguridad"
+msgstr "Copia de segurança"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:402
+#: ../../../../inc/SP/Import/Import.class.php:66
+#: ../../../../inc/SP/Import/ImportBase.class.php:77
+msgid "Importar Cuentas"
+msgstr "Contas de importação"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:425
+msgid "No instalado"
+msgstr "Não instalado"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:427
+#: ../../../../inc/SP/Controller/MainController.class.php:582
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:77
+msgid "Información"
+msgstr "Informação"
+
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:275
+msgid "Opción no disponible"
+msgstr "Opção não disponível"
+
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:275
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:276
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:277
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:278
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:280
+#: ../../../../inc/SP/Core/Init.class.php:293
+msgid "Consulte con el administrador"
+msgstr "Consulte o seu gerente"
+
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:276
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:505
+msgid "No tiene permisos para acceder a esta cuenta"
+msgstr "Você não está autorizado a aceder a este"
+
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:277
+msgid "No tiene permisos para acceder a esta página"
+msgstr "Você não está autorizado a acessar esta página"
+
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:278
+msgid "No tiene permisos para realizar esta operación"
+msgstr "Você não está autorizado para executar esta operação"
+
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:280
+msgid "Se ha producido una excepción"
+msgstr "Houve uma exceção"
+
+#: ../../../../inc/SP/Controller/EventlogController.class.php:102
+msgid "Vaciar Eventos"
+msgstr "Eventos Vazias"
+
+#: ../../../../inc/SP/Controller/EventlogController.class.php:102
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:144
+msgid "Vaciar registro de eventos"
+msgstr "Log de eventos vazio"
+
+#: ../../../../inc/SP/Controller/EventlogController.class.php:104
+msgid "Registro de eventos vaciado"
+msgstr "Descarga de log de eventos"
+
+#: ../../../../inc/SP/Controller/EventlogController.class.php:125
+msgid "Buscar Evento"
+msgstr "Pesquisa evento"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:57
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:131
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:593
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:57
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1104
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:37
+#: ../../../../inc/themes/material-blue/views/itemshow/categories.inc:28
+#: ../../../../inc/themes/material-blue/views/itemshow/customers.inc:32
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:31
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:77
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:83
+msgid "Descripción"
+msgstr "Descrição"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:72
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:91
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:161
+msgid "Categorías"
+msgstr "Categorias"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:80
+msgid "Buscar Categoría"
+msgstr "Pesquisa categoria:"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:90
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:91
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:188
+#: ../../../../inc/themes/material-blue/views/account/account.inc:89
+msgid "Nueva Categoría"
+msgstr "Nova categoria"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:101
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:102
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:184
+#: ../../../../inc/SP/Core/Acl.class.php:199
+msgid "Editar Categoría"
+msgstr "Editar categoria"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:146
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:92
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:168
+msgid "Clientes"
+msgstr "Clientes"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:154
+msgid "Buscar Cliente"
+msgstr "Pesquisa de cliente"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:164
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:165
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:175
+#: ../../../../inc/themes/material-blue/views/account/account.inc:66
+msgid "Nuevo Cliente"
+msgstr "Novo cliente"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:175
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:176
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:171
+#: ../../../../inc/SP/Core/Acl.class.php:204
+msgid "Editar Cliente"
+msgstr "Editar cliente"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:204
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:44
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:46
+msgid "Módulo"
+msgstr "Módulo"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:222
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:69
+#: ../../../../inc/themes/material-blue/views/account/account.inc:256
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:175
+msgid "Campos Personalizados"
+msgstr "Campos personalizados"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:230
+msgid "Buscar Campo"
+msgstr "Campo de pesquisa"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:240
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:241
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:205
+msgid "Nuevo Campo"
+msgstr "Novo campo"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:251
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:252
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:209
+msgid "Editar Campo"
+msgstr "Editar campo"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:261
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:262
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:687
+msgid "Eliminar Campo"
+msgstr "Remover campo"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:302
+#: ../../../../inc/SP/Core/Acl.class.php:193
+#: ../../../../inc/themes/material-blue/views/account/files.inc:5
+#: ../../../../inc/themes/material-blue/views/account/files.inc:15
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:208
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:89
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:203
+msgid "Archivos"
+msgstr "Registros"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:310
+msgid "Buscar Archivo"
+msgstr "Localizar arquivo"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:320
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:321
+#: ../../../../inc/themes/material-blue/views/account/files-list.inc:40
+msgid "Ver Archivo"
+msgstr "Ver arquivo"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:330
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:331
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:830
+#: ../../../../inc/themes/material-blue/views/account/files-list.inc:26
+msgid "Eliminar Archivo"
+msgstr "Excluir arquivo"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:373
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:434
+msgid "Buscar Cuenta"
+msgstr "Pesquisa conta"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:404
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:54
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:65
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:85
+#: ../../../../inc/themes/material-blue/views/account/account.inc:156
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:64
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:71
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:24
+msgid "Fecha"
+msgstr "Data"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:405
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:985
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:58
+msgid "Estado"
+msgstr "Estado"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:416
+#, fuzzy
+msgid "Modificada"
+msgstr "Modificar key"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:417
+#, fuzzy
+msgid "Eliminada"
+msgstr "Remover"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:426
+#, fuzzy
+msgid "Cuentas (H)"
+msgstr "Contas"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:444
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:445
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:942
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1154
+msgid "Restaurar Cuenta"
+msgstr "Restaurar conta"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:475
+#: ../../../../inc/SP/Controller/LoginController.class.php:252
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:55
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:57
+msgid "Perfil"
+msgstr "Perfil"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:477
+msgid "Propiedades"
+msgstr "Propriedades"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:498
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:93
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:24
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:44
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:46
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:49
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:140
+msgid "Usuarios"
+msgstr "Usuários"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:506
+msgid "Buscar Usuario"
+msgstr "Encontrar usuário"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:515
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:516
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:136
+msgid "Nuevo Usuario"
+msgstr "Novo usuário"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:529
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:530
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1014
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:292
+msgid "Importar usuarios de LDAP"
+msgstr "Importar usuários de ldap"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:542
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:543
+msgid "Ver Detalles de Usuario"
+msgstr "Veja detalhes do usuário"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:552
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:553
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:128
+msgid "Editar Usuario"
+msgstr "Editar usuário"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:562
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:563
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:20
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:46
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:52
+msgid "Cambiar Clave de Usuario"
+msgstr "Alterar senha do usuário"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:573
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:574
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:269
+msgid "Eliminar Usuario"
+msgstr "Excluir"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:608
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:94
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:46
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:147
+msgid "Grupos"
+msgstr "Grupos"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:616
+msgid "Buscar Grupo"
+msgstr "Pesquisar grupo"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:626
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:627
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:149
+msgid "Nuevo Grupo"
+msgstr "Novo grupo"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:637
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:638
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:145
+msgid "Editar Grupo"
+msgstr "Editar grupo"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:647
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:648
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:399
+msgid "Eliminar Grupo"
+msgstr "Remover grupo"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:680
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:154
+msgid "Perfiles"
+msgstr "Perfis"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:688
+msgid "Buscar Perfil"
+msgstr "Pesquisa perfil"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:698
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:699
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:162
+msgid "Nuevo Perfil"
+msgstr "Novo perfil"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:709
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:710
+msgid "Ver Detalles de Perfil"
+msgstr "Ver detalhes do perfil"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:719
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:720
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:158
+msgid "Editar Perfil"
+msgstr "Editar perfil"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:729
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:730
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:459
+msgid "Eliminar Perfil"
+msgstr "Remover perfil"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:749
+#: ../../../../inc/SP/Log/Email.class.php:63
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:26
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:28
+msgid "Acción"
+msgstr "Ação"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:764
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:182
+msgid "Autorizaciones API"
+msgstr "Administrador API"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:772
+msgid "Buscar Token"
+msgstr "Pesquisa de token"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:782
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:783
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:197
+msgid "Nueva Autorización"
+msgstr "Nova autorização"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:793
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:794
+msgid "Ver token de Autorización"
+msgstr "Veja autorização símbolo"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:803
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:804
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:201
+msgid "Editar Autorización"
+msgstr "Editar autorização"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:813
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:814
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:639
+msgid "Eliminar Autorización"
+msgstr "Remover autorização"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:833
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:19
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:21
+msgid "Fecha Creación"
+msgstr "Data de criação"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:834
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:27
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:29
+msgid "Fecha Caducidad"
+msgstr "Data de vencimento"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:836
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:43
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:45
+msgid "Notificar"
+msgstr "Notificar"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:837
+#: ../../../../inc/themes/material-blue/views/account/details.inc:18
+#: ../../../../inc/themes/material-blue/views/account/details.inc:20
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:51
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:53
+msgid "Visitas"
+msgstr "Visitas"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:856
+msgid "Enlaces"
+msgstr "Ligações"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:864
+msgid "Buscar Enlace"
+msgstr "Procurar ligação"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:874
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:875
+msgid "Ver Enlace"
+msgstr "Ver site"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:883
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:884
+msgid "Renovar Enlace"
+msgstr "Renovar link"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:893
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:894
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:748
+msgid "Eliminar Enlace"
+msgstr "Remover o link"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:926
+#: ../../../../inc/themes/material-blue/views/account/account.inc:176
+#: ../../../../inc/themes/material-blue/views/account/account.inc:178
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:210
+msgid "Etiquetas"
+msgstr "Etiquetas"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:934
+msgid "Buscar Etiqueta"
+msgstr "Pesquisa tag"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:944
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:945
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:218
+msgid "Nueva Etiqueta"
+msgstr "Nova marca"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:955
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:956
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:222
+msgid "Editar Etiqueta"
+msgstr "Editar etiqueta"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:965
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:966
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:797
+msgid "Eliminar Etiqueta"
+msgstr "Remover o marcador"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:984
+msgid "Plugin"
+msgstr "Plug-in"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1001
+msgid "Plugins"
+msgstr "Plugins"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1009
+msgid "Buscar Plugin"
+msgstr "Pesquisa plugin"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1019
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1020
+msgid "Ver Plugin"
+msgstr "Ver plugin"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1028
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1029
+msgid "Habilitar"
+msgstr "Permitir"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1038
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1039
+msgid "Deshabilitar"
+msgstr "Incapacitar"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1048
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1049
+msgid "Restablecer Datos"
+msgstr "Restaurar dados"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:56
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:51
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:58
+msgid "Componente"
+msgstr "Componente"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:67
+msgid "Leída"
+msgstr "Ler"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:76
+#: ../../../../inc/SP/Controller/MainController.class.php:306
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:79
+msgid "Notificaciones"
+msgstr "Notificações"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:84
+msgid "Buscar Notificación"
+msgstr "Pesquisa notificação"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:95
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:96
+#: ../../../../inc/SP/Controller/NoticeShowController.class.php:94
+msgid "Nueva Notificación"
+msgstr "Nova notificação"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:107
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:108
+#: ../../../../inc/SP/Controller/NoticeShowController.class.php:89
+msgid "Ver Notificación"
+msgstr "Veja notificação"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:116
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:117
+msgid "Marcar Notificación"
+msgstr "Mark notificação"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:126
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:127
+#: ../../../../inc/SP/Controller/NoticeShowController.class.php:98
+msgid "Editar Notificación"
+msgstr "Editar notificação"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:136
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:137
+msgid "Eliminar Notificación"
+msgstr "Eliminar notificação"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:228
+msgid "Crear Usuario"
+msgstr "Criar usuário"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:229
+msgid "Usuario creado"
+msgstr "Usuário criado"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:236
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:251
+msgid "No se pudo realizar la petición de cambio de clave."
+msgstr "Não foi possível realizar a solicitação de alteração de senha."
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:243
+msgid "Actualizar Usuario"
+msgstr "Atualização do usuário"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:244
+#: ../../../../inc/SP/Mgmt/Users/UserMigrate.class.php:105
+msgid "Usuario actualizado"
+msgstr "Usuário atualizado"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:258
+msgid "Usuarios eliminados"
+msgstr "Usuários excluídos"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:264
+msgid "Usuario eliminado"
+msgstr "Usuário excluído"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:281
+msgid "Actualizar Clave Usuario"
+msgstr "senha de Usuário Atualização"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:372
+msgid "Crear Grupo"
+msgstr "Criar grupo"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:373
+msgid "Grupo creado"
+msgstr "Grupo criado"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:380
+msgid "Actualizar Grupo"
+msgstr "Grupo de atualização"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:381
+msgid "Grupo actualizado"
+msgstr "Grupo atualizado"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:388
+msgid "Grupos eliminados"
+msgstr "Grupos eliminado"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:394
+msgid "Grupo eliminado"
+msgstr "Grupo excluído"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:432
+msgid "Crear Perfil"
+msgstr "Criar perfil"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:433
+msgid "Perfil creado"
+msgstr "Perfil criado"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:440
+msgid "Actualizar Perfil"
+msgstr "Atualizar"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:441
+msgid "Perfil actualizado"
+msgstr "Perfil atualizado"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:448
+msgid "Perfiles eliminados"
+msgstr "Perfis apagados"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:454
+msgid "Perfil eliminado"
+msgstr "Perfil excluído"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:502
+msgid "Actualizar Cliente"
+msgstr "Atualização de Cliente"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:503
+msgid "Cliente actualizado"
+msgstr "Cliente atualizado"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:510
+msgid "Clientes eliminados"
+msgstr "Clientes eliminado"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:564
+msgid "Actualizar Categoría"
+msgstr "Update Categoria"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:565
+msgid "Categoría actualizada"
+msgstr "Categoria atualizada"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:573
+msgid "Categorías eliminadas"
+msgstr "Categorias removido"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:614
+msgid "Crear Autorización"
+msgstr "Criar autorização"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:615
+msgid "Autorización creada"
+msgstr "Autorização criada"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:622
+msgid "Actualizar Autorización"
+msgstr "Recarregar Autorização"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:623
+msgid "Autorización actualizada"
+msgstr "Data de autorização"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:632
+msgid "Autorizaciones eliminadas"
+msgstr "Lançado removido"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:636
+msgid "Autorización eliminada"
+msgstr "Autorização removida"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:665
+msgid "Crear Campo"
+msgstr "Criar campo"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:666
+msgid "Campo creado"
+msgstr "Campo criado"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:672
+msgid "Actualizar Campo"
+msgstr "Atualização de Campo"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:673
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:216
+msgid "Campo actualizado"
+msgstr "Campo atualizado"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:680
+msgid "Campos eliminados"
+msgstr "Campos excluídos"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:684
+msgid "Campo eliminado"
+msgstr "Campo removido"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:716
+msgid "Crear Enlace"
+msgstr "Criar link"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:717
+msgid "Enlace creado"
+msgstr "Link criado"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:726
+msgid "Actualizar Enlace"
+msgstr "Update fazer a ligação"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:727
+msgid "Enlace actualizado"
+msgstr "Link atualizado"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:736
+msgid "Enlaces eliminados"
+msgstr "Ligações removidas"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:742
+msgid "Enlace eliminado"
+msgstr "Ligação removido"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:773
+msgid "Crear Etiqueta"
+msgstr "Criar etiqueta"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:774
+#: ../../../../inc/SP/Import/ImportBase.class.php:205
+msgid "Etiqueta creada"
+msgstr "Etiqueta criada"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:780
+msgid "Actualizar Etiqueta"
+msgstr "Etiqueta de actualização"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:781
+msgid "Etiqueta actualizada"
+msgstr "Bula atualizada"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:788
+msgid "Etiquetas eliminadas"
+msgstr "Etiquetas removidas"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:794
+msgid "Etiqueta eliminada"
+msgstr "Tag removido"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:821
+msgid "Archivos eliminados"
+msgstr "Arquivos apagados"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:860
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:868
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:875
+msgid "Actualizar Plugin"
+msgstr "Atualização plugin"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:861
+msgid "Plugin habilitado"
+msgstr "Plug-in habilitado"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:869
+msgid "Plugin deshabilitado"
+msgstr "Plug-in desativado"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:876
+msgid "Plugin restablecido"
+msgstr "Plug-in restaurado"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:924
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:933
+msgid "Actualizar Cuenta"
+msgstr "Conta atualização"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:925
+msgid "Cuenta actualizada"
+msgstr "Conta atualizada"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:943
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1155
+msgid "Cuenta restaurada"
+msgstr "Conta restaurada"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:964
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1174
+msgid "Cuentas eliminadas"
+msgstr "Contas excluídas"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:995
+msgid "Favorito añadido"
+msgstr "Favorito acrescentado"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1000
+msgid "Favorito eliminado"
+msgstr "Removidas favorito"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1017
+msgid "Importación de usuarios de LDAP realizada"
+msgstr "Importação de usuários ldap feitas"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1018
+msgid "Usuarios importados"
+msgstr "Usuários Importados"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1023
+msgid "Error al importar usuarios de LDAP"
+msgstr "Usuários ldap erro ao importar"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1041
+msgid "Notificación leída"
+msgstr "Leia notificação"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1049
+msgid "Notificación creada"
+msgstr "Notificação criado"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1057
+msgid "Notificación actualizada"
+msgstr "Notificação actualizada"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1063
+msgid "Notificaciones eliminadas"
+msgstr "Notificações removido"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1067
+msgid "Notificación eliminada"
+msgstr "Notificação suprimido"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1085
+#: ../../../../inc/SP/Forms/NoticeForm.class.php:95
+msgid "Es necesaria una descripción"
+msgstr "Uma descrição é necessário"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1100
+msgid "Solicitud de Modificación de Cuenta"
+msgstr "Solicitação de mudança conta"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1101
+msgid "Solicitante"
+msgstr "Requerente"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1119
+msgid "Solicitud enviada por correo"
+msgstr "Pedido enviado pelo correio"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1121
+msgid "Solicitud no enviada por correo"
+msgstr "Pedido não enviado"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1130
+msgid "Solicitud"
+msgstr "Aplicação"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1137
+msgid "Solicitud realizada"
+msgstr "Pedido feito"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1171
+#, fuzzy
+msgid "Eliminar Cuenta (H)"
+msgstr "Eliminar conta"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:123
+msgid "Ver Usuario"
+msgstr "Ver usuário"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:140
+msgid "Ver Grupo"
+msgstr "Ver grupo"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:153
+msgid "Ver Perfil"
+msgstr "Ver perfil"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:166
+msgid "Ver Cliente"
+msgstr "Ver cliente"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:179
+msgid "Ver Categoría"
+msgstr "Ver categoria"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:192
+msgid "Ver Autorización"
+msgstr "Ver autorização"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:213
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:73
+msgid "Ver Enlace Público"
+msgstr "Ver relações públicas"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:226
+#: ../../../../js/strings.js.php:72
+msgid "Clave de Cuenta"
+msgstr "Senha de conta"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:230
+msgid "Detalles de Plugin"
+msgstr "Detalhes plugin"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:401
+msgid "Token de autorización visualizado"
+msgstr "Token de autorização apresentado"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:402
+msgid "Autorizaciones"
+msgstr "Lançado"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:495
+msgid "La clave maestra no coincide"
+msgstr "A senha mestre não corresponde"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:93
+msgid "Inicio sesión"
+msgstr "Entrar"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:109
+msgid "Usuario/Clave no introducidos"
+msgstr "Usuário/Senha não digitados"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:132
+#: ../../../../inc/SP/Controller/LoginController.class.php:348
+#: ../../../../inc/SP/Controller/LoginController.class.php:402
+#: ../../../../inc/SP/Controller/LoginController.class.php:424
+msgid "Login incorrecto"
+msgstr "Login não existe"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:180
+msgid "Error al obtener los datos del usuario de la BBDD"
+msgstr "Falha ao obter os dados do usuário a partir do db"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:195
+#: ../../../../inc/SP/Controller/LoginController.class.php:198
+msgid "Usuario deshabilitado"
+msgstr "Usuário desativado"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:255
+msgid "Error al obtener la clave maestra del usuario"
+msgstr "Falha ao obter a senha mestre do usuário"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:276
+msgid "Usando clave temporal"
+msgstr "Usando a senha temporária"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:282
+#: ../../../../inc/SP/Controller/LoginController.class.php:284
+#: ../../../../inc/SP/Controller/LoginController.class.php:292
+#: ../../../../inc/SP/Controller/LoginController.class.php:294
+msgid "Clave maestra incorrecta"
+msgstr "Senha mestre incorreta"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:305
+msgid "Es necesaria su clave anterior"
+msgstr "A sua senha anterior é necessária"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:308
+msgid "La clave maestra no ha sido guardada o es incorrecta"
+msgstr "A senha mestre não foi salva ou está incorreta"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:352
+msgid "Cuenta expirada"
+msgstr "Conta expirada"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:356
+msgid "El usuario no tiene grupos asociados"
+msgstr "O usuário não tem grupos associados"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:370
+msgid "Servidor LDAP"
+msgstr "Servidor ldap"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:427
+msgid "Autentificación"
+msgstr "Autenticação"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:248
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:72
+msgid "Buscar"
+msgstr "Pesquisa"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:267
+msgid "Usuarios y Accesos"
+msgstr "Usuários e Acesso"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:277
+msgid "Elementos y Personalización"
+msgstr "Elementos e personalização"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:297
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:7
+msgid "Registro de Eventos"
+msgstr "Registro de eventos"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:357
+#: ../../../../inc/SP/Core/Init.class.php:131
+msgid "Versión de PHP requerida >= "
+msgstr "Necessário versão do php> ="
+
+#: ../../../../inc/SP/Controller/MainController.class.php:358
+#: ../../../../inc/SP/Core/Init.class.php:132
+msgid ""
+"Actualice la versión de PHP para que la aplicación funcione correctamente"
+msgstr "Atualizar a versão do php para que o aplicativo funcione corretamente"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:368
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:265
+msgid "Módulo no disponible"
+msgstr "Módulo não disponível"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:369
+msgid "Sin este módulo la aplicación puede no funcionar correctamente."
+msgstr "Sem esse módulo, o aplicativo pode não funcionar corretamente."
+
+#: ../../../../inc/SP/Controller/MainController.class.php:377
+msgid "La version de PHP es vulnerable al ataque NULL Byte (CVE-2006-7243)"
+msgstr "A versão do php é vulnerável a ataques null byte (cve-2006-7243)"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:378
+msgid "Actualice la versión de PHP para usar sysPass de forma segura"
+msgstr "Atualizar a versão do php para usar com segurança syspass"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:384
+msgid "No se encuentra el generador de números aleatorios."
+msgstr "Você não pode encontrar gerador de números aleatórios."
+
+#: ../../../../inc/SP/Controller/MainController.class.php:385
+msgid ""
+"Sin esta función un atacante puede utilizar su cuenta al resetear la clave"
+msgstr ""
+"Sem esse recurso a um invasor pode usar sua conta para redefinir a senha"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:457
+msgid "Descargar nueva versión"
+msgstr "Baixar nova versão"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:469
+msgid "Avisos de sysPass"
+msgstr "Avisos syspass"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:572
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:74
+msgid "Enlace visualizado"
+msgstr "Link exibido"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:575
+msgid "Agente"
+msgstr "Agente"
+
+#: ../../../../inc/SP/Controller/UserPreferencesController.class.php:90
+msgid "Preferencias"
+msgstr "Preferências"
+
+#: ../../../../inc/SP/Core/Acl.class.php:166
+msgid "Acceso denegado"
+msgstr "Acesso negado"
+
+#: ../../../../inc/SP/Core/Acl.class.php:184
+msgid "Buscar Cuentas"
+msgstr "Pesquisa contas"
+
+#: ../../../../inc/SP/Core/Acl.class.php:185
+msgid "Ver Cuenta"
+msgstr "Ver conta"
+
+#: ../../../../inc/SP/Core/Acl.class.php:189
+msgid "Editar Clave de Cuenta"
+msgstr "Editar key account"
+
+#: ../../../../inc/SP/Core/Acl.class.php:190
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:61
+msgid "Ver Historial"
+msgstr "Ver histórico"
+
+#: ../../../../inc/SP/Core/Acl.class.php:194
+msgid "Peticiones"
+msgstr "Petições"
+
+#: ../../../../inc/SP/Core/Acl.class.php:195
+msgid "Gestión Aplicación"
+msgstr "Gerenciamento de aplicativos"
+
+#: ../../../../inc/SP/Core/Acl.class.php:196
+msgid "Gestión Categorías"
+msgstr "Gestão de categorias"
+
+#: ../../../../inc/SP/Core/Acl.class.php:197
+msgid "Buscar Categorías"
+msgstr "Pesquisa categorias"
+
+#: ../../../../inc/SP/Core/Acl.class.php:198
+msgid "Añadir Categoría"
+msgstr "Adicionar categoria"
+
+#: ../../../../inc/SP/Core/Acl.class.php:201
+msgid "Gestión Clientes"
+msgstr "Gestão de clientes"
+
+#: ../../../../inc/SP/Core/Acl.class.php:202
+msgid "Buscar Clientes"
+msgstr "Procurar os clientes"
+
+#: ../../../../inc/SP/Core/Acl.class.php:203
+msgid "Añadir Cliente"
+msgstr "Adicionar ao cliente"
+
+#: ../../../../inc/SP/Core/Acl.class.php:206
+msgid "Gestión Campos Personalizados"
+msgstr "Gestão de campos personalizados"
+
+#: ../../../../inc/SP/Core/Acl.class.php:207
+msgid "Gestión Autorizaciones API"
+msgstr "Api de gerenciamento liberado"
+
+#: ../../../../inc/SP/Core/Acl.class.php:208
+msgid "Gestión de Archivos"
+msgstr "Gerenciador de arquivos"
+
+#: ../../../../inc/SP/Core/Acl.class.php:209
+msgid "Gestión de Cuentas"
+msgstr "Gerenciamento de contas"
+
+#: ../../../../inc/SP/Core/Acl.class.php:210
+msgid "Gestión de Etiquetas"
+msgstr "Gestão etiquetas"
+
+#: ../../../../inc/SP/Core/Acl.class.php:211
+#: ../../../../inc/SP/Core/Acl.class.php:212
+msgid "Gestión Usuarios"
+msgstr "Gerenciamento de usuários"
+
+#: ../../../../inc/SP/Core/Acl.class.php:213
+msgid "Gestión Grupos"
+msgstr "Grupos de gestão"
+
+#: ../../../../inc/SP/Core/Acl.class.php:214
+msgid "Gestión Perfiles"
+msgstr "Perfis de gestão"
+
+#: ../../../../inc/SP/Core/Acl.class.php:216
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:226
+msgid "Configuración General"
+msgstr "As definições gerais"
+
+#: ../../../../inc/SP/Core/Acl.class.php:219
+msgid "Exportar"
+msgstr "Exportação"
+
+#: ../../../../inc/SP/Core/Acl.class.php:220
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:247
+msgid "Importar"
+msgstr "Assunto"
+
+#: ../../../../inc/SP/Core/Acl.class.php:221
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:263
+msgid "Log de Eventos"
+msgstr "Registro de eventos"
+
+#: ../../../../inc/SP/Core/Backup.class.php:55
+msgid "Realizar Backup"
+msgstr "Executar operações de backup"
+
+#: ../../../../inc/SP/Core/Backup.class.php:84
+msgid "Copia de la aplicación y base de datos realizada correctamente"
+msgstr "Uma cópia da aplicação e banco de dados foi concluído com êxito"
+
+#: ../../../../inc/SP/Core/Backup.class.php:102
+#: ../../../../inc/SP/Core/XmlExport.class.php:515
+#, php-format
+msgid "No es posible crear el directorio de backups (\"%s\")"
+msgstr "Você não pode criar o diretório de backup ( \"%s\")"
+
+#: ../../../../inc/SP/Core/Backup.class.php:106
+#: ../../../../inc/SP/Core/XmlExport.class.php:521
+msgid "Compruebe los permisos del directorio de backups"
+msgstr "Confira os backups permissões de diretório"
+
+#: ../../../../inc/SP/Core/Backup.class.php:249
+msgid "Esta operación sólo es posible en entornos Linux"
+msgstr "Esta operação só é possível em ambientes linux"
+
+#: ../../../../inc/SP/Core/Backup.class.php:251
+msgid "Error al realizar backup en modo compatibilidad"
+msgstr "Falha ao executar o backup em modo de compatibilidade"
+
+#: ../../../../inc/SP/Core/Crypt.class.php:65
+#: ../../../../inc/SP/Core/Crypt.class.php:74
+#: ../../../../inc/SP/Log/Email.class.php:141
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:70
+#: ../../../../js/strings.js.php:85
+msgid "Aviso"
+msgstr "Aviso"
+
+#: ../../../../inc/SP/Core/Crypt.class.php:65
+#: ../../../../inc/SP/Core/Crypt.class.php:74
+msgid ""
+"Se ha regenerado el HASH de clave maestra. No es necesaria ninguna acción."
+msgstr "Hash regenerou a senha mestre. Nenhuma ação é necessária."
+
+#: ../../../../inc/SP/Core/Crypt.class.php:213
+msgid "No se puede usar el módulo de encriptación"
+msgstr "Você não pode usar o módulo de criptografia"
+
+#: ../../../../inc/SP/Core/Crypt.class.php:224
+msgid "Error al generar datos cifrados"
+msgstr "Falha ao gerar dados criptografados"
+
+#: ../../../../inc/SP/Core/CryptMasterPass.class.php:93
+#: ../../../../inc/SP/Core/CryptMasterPass.class.php:106
+msgid "Clave temporal caducada"
+msgstr "Senha temporal expired"
+
+#: ../../../../inc/SP/Core/CryptPKI.class.php:48
+msgid "No es posible generar las claves RSA"
+msgstr "Não foi possível gerar senhas rsa"
+
+#: ../../../../inc/SP/Core/CryptPKI.class.php:116
+#: ../../../../inc/SP/Core/CryptPKI.class.php:118
+#: ../../../../inc/SP/Core/CryptPKI.class.php:151
+#: ../../../../inc/SP/Core/CryptPKI.class.php:153
+msgid "El archivo de clave no existe"
+msgstr "O arquivo de senha não existe"
+
+#: ../../../../inc/SP/Core/Events/EventDispatcherBase.class.php:80
+msgid "Observador no inicializado"
+msgstr "Observer não inicializado"
+
+#: ../../../../inc/SP/Core/Events/EventDispatcherBase.class.php:110
+msgid "Es necesario un objeto"
+msgstr "Um objeto necessário"
+
+#: ../../../../inc/SP/Core/Init.class.php:159
+msgid "Error en la verificación de la base de datos"
+msgstr "Banco de dados de verificação de erros"
+
+#: ../../../../inc/SP/Core/Init.class.php:289
+msgid "Sesión"
+msgstr "Sessão"
+
+#: ../../../../inc/SP/Core/Init.class.php:289
+#: ../../../../inc/SP/Core/Init.class.php:293
+msgid "La sesión no puede ser inicializada"
+msgstr "A sessão não pode ser inicializado"
+
+#: ../../../../inc/SP/Core/Init.class.php:427
+#: ../../../../inc/SP/Core/Init.class.php:667
+msgid "Actualización"
+msgstr "Atualizar"
+
+#: ../../../../inc/SP/Core/Init.class.php:428
+#: ../../../../inc/SP/Core/Init.class.php:668 ../../../../res/upgrade.php:121
+msgid "Actualización de versión realizada."
+msgstr "Atualização de versão realizada."
+
+#: ../../../../inc/SP/Core/Init.class.php:450
+msgid "El directorio \"/config\" no existe"
+msgstr "O diretório \"/ config\" não existe"
+
+#: ../../../../inc/SP/Core/Init.class.php:455
+msgid "No es posible escribir en el directorio \"config\""
+msgstr "Você não pode escrever no diretório \"config\""
+
+#: ../../../../inc/SP/Core/Init.class.php:462
+msgid "Los permisos del directorio \"/config\" son incorrectos"
+msgstr "Permissões de diretório \"/ config\" são incorretos"
+
+#: ../../../../inc/SP/Core/Init.class.php:462
+msgid "Actual:"
+msgstr "Atual:"
+
+#: ../../../../inc/SP/Core/Init.class.php:462
+msgid "Necesario: 750"
+msgstr "Necessário: 750"
+
+#: ../../../../inc/SP/Core/Init.class.php:545
+msgid "Aplicación en mantenimiento"
+msgstr "Manutenção de aplicações"
+
+#: ../../../../inc/SP/Core/Init.class.php:545
+msgid "En breve estará operativa"
+msgstr "Em breve será operacional"
+
+#: ../../../../inc/SP/Core/Init.class.php:590
+msgid "Finalizar sesión"
+msgstr "Sessão final"
+
+#: ../../../../inc/SP/Core/Init.class.php:592
+msgid "Tiempo inactivo"
+msgstr "Downtime"
+
+#: ../../../../inc/SP/Core/Init.class.php:593
+msgid "Tiempo total"
+msgstr "O tempo total de"
+
+#: ../../../../inc/SP/Core/Init.class.php:636
+msgid "La aplicación necesita actualizarse"
+msgstr "O aplicativo precisa ser atualizado"
+
+#: ../../../../inc/SP/Core/Init.class.php:636
+#, php-format
+msgid "Si es un administrador pulse en el enlace: %s"
+msgstr "Se você for um administrador pode clicar no link: %s"
+
+#: ../../../../inc/SP/Core/Init.class.php:636
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:57
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:48
+msgid "Actualizar"
+msgstr "Atualizar"
+
+#: ../../../../inc/SP/Core/Init.class.php:654
+#: ../../../../inc/themes/material-blue/views/main/login.inc:65
+msgid "Acceder"
+msgstr "Entrar"
+
+#: ../../../../inc/SP/Core/Installer.class.php:138
+msgid "Indicar nombre de usuario admin"
+msgstr "Indicar nome de usuário administrador"
+
+#: ../../../../inc/SP/Core/Installer.class.php:139
+msgid "Usuario admin para acceso a la aplicación"
+msgstr "Usuário admin para acessar o aplicativo"
+
+#: ../../../../inc/SP/Core/Installer.class.php:143
+msgid "Indicar la clave de admin"
+msgstr "Indicar o administrador senha"
+
+#: ../../../../inc/SP/Core/Installer.class.php:144
+msgid "Clave del usuario admin de la aplicación"
+msgstr "Administrador de usuário do aplicativo key"
+
+#: ../../../../inc/SP/Core/Installer.class.php:148
+msgid "Indicar la clave maestra"
+msgstr "Indique a senha mestre"
+
+#: ../../../../inc/SP/Core/Installer.class.php:149
+msgid "Clave maestra para encriptar las claves"
+msgstr "Senha mestre para criptografar as senhas"
+
+#: ../../../../inc/SP/Core/Installer.class.php:153
+msgid "Clave maestra muy corta"
+msgstr "senha mestre curta"
+
+#: ../../../../inc/SP/Core/Installer.class.php:154
+msgid "La longitud de la clave maestra ha de ser mayor de 11 caracteres"
+msgstr "O comprimento da senha mestre deve ser maior do que 11 caracteres"
+
+#: ../../../../inc/SP/Core/Installer.class.php:158
+msgid "Indicar el usuario de la BBDD"
+msgstr "Indique o usuário bbdd"
+
+#: ../../../../inc/SP/Core/Installer.class.php:159
+msgid "Usuario con permisos de administrador de la Base de Datos"
+msgstr "Usuário com permissões de administrador de banco de dados"
+
+#: ../../../../inc/SP/Core/Installer.class.php:163
+msgid "Indicar la clave de la BBDD"
+msgstr "Indicar o bbdd senha"
+
+#: ../../../../inc/SP/Core/Installer.class.php:164
+msgid "Clave del usuario administrador de la Base de Datos"
+msgstr "Banco de dados password manager do usuário"
+
+#: ../../../../inc/SP/Core/Installer.class.php:168
+msgid "Indicar el nombre de la BBDD"
+msgstr "Indique o nome do db"
+
+#: ../../../../inc/SP/Core/Installer.class.php:169
+msgid "Nombre para la BBDD de la aplicación pej. syspass"
+msgstr "Nome db para o pej aplicação. Syspass"
+
+#: ../../../../inc/SP/Core/Installer.class.php:173
+msgid "El nombre de la BBDD no puede contener \".\""
+msgstr "O nome do db não pode conter \".\""
+
+#: ../../../../inc/SP/Core/Installer.class.php:174
+msgid "Elimine los puntos del nombre de la Base de Datos"
+msgstr "Remover os pontos o nome da base de dados"
+
+#: ../../../../inc/SP/Core/Installer.class.php:178
+msgid "Indicar el servidor de la BBDD"
+msgstr "Indicar o servidor db"
+
+#: ../../../../inc/SP/Core/Installer.class.php:179
+msgid "Servidor donde se instalará la Base de Datos"
+msgstr "Servidor onde está instalado o banco de dados"
+
+#: ../../../../inc/SP/Core/Installer.class.php:202
+#: ../../../../inc/SP/Storage/MySQLHandler.class.php:133
+#: ../../../../inc/SP/Storage/MySQLHandler.class.php:136
+#: ../../../../inc/SP/Storage/MySQLHandler.class.php:160
+msgid "No es posible conectar con la BD"
+msgstr "Você não pode conectar-se ao DB"
+
+#: ../../../../inc/SP/Core/Installer.class.php:203
+#: ../../../../inc/SP/Storage/MySQLHandler.class.php:133
+#: ../../../../inc/SP/Storage/MySQLHandler.class.php:137
+msgid "Compruebe los datos de conexión"
+msgstr "Verifique a conexão de dados"
+
+#: ../../../../inc/SP/Core/Installer.class.php:237
+msgid "No es posible comprobar el usuario de sysPass"
+msgstr "Não é possível verificar o usuário syspass"
+
+#: ../../../../inc/SP/Core/Installer.class.php:238
+msgid "Compruebe los permisos del usuario de conexión a la BD"
+msgstr "Verifique as permissões do usuário para a conexão de banco de dados"
+
+#: ../../../../inc/SP/Core/Installer.class.php:284
+#, php-format
+msgid "Error al crear el usuario de conexión a MySQL '%s'"
+msgstr "Erro ao criar o usuário de conexão mysql '%s'"
+
+#: ../../../../inc/SP/Core/Installer.class.php:300
+msgid "La BBDD ya existe"
+msgstr "O db já existe"
+
+#: ../../../../inc/SP/Core/Installer.class.php:301
+msgid "Indique una nueva Base de Datos o elimine la existente"
+msgstr "Introduza um novo banco de dados ou excluir os existentes"
+
+#: ../../../../inc/SP/Core/Installer.class.php:304
+msgid "La BBDD no existe"
+msgstr "O db não existe"
+
+#: ../../../../inc/SP/Core/Installer.class.php:305
+msgid "Es necesario crearla y asignar los permisos necesarios"
+msgstr "É necessário criar e atribuir as permissões necessárias"
+
+#: ../../../../inc/SP/Core/Installer.class.php:315
+#: ../../../../inc/SP/Core/Installer.class.php:416
+msgid "Error al crear la BBDD"
+msgstr "Erro ao criar db"
+
+#: ../../../../inc/SP/Core/Installer.class.php:316
+#: ../../../../inc/SP/Core/Installer.class.php:336
+msgid "Verifique los permisos del usuario de la Base de Datos"
+msgstr "Verifique as permissões de usuário de banco de dados"
+
+#: ../../../../inc/SP/Core/Installer.class.php:335
+#, php-format
+msgid "Error al establecer permisos de la BBDD ('%s')"
+msgstr "Falha ao definir permissões bbdd ( '%s')"
+
+#: ../../../../inc/SP/Core/Installer.class.php:389
+msgid "El archivo de estructura de la BBDD no existe"
+msgstr "A estrutura do db arquivo não existe"
+
+#: ../../../../inc/SP/Core/Installer.class.php:390
+msgid "No es posible crear la BBDD de la aplicación. Descárguela de nuevo."
+msgstr "Você não pode criar o aplicativo db. Baixá-lo novamente."
+
+#: ../../../../inc/SP/Core/Installer.class.php:398
+msgid "Error al seleccionar la BBDD"
+msgstr "Erro selecionando bbdd"
+
+#: ../../../../inc/SP/Core/Installer.class.php:399
+msgid ""
+"No es posible usar la Base de Datos para crear la estructura. Compruebe los "
+"permisos y que no exista."
+msgstr ""
+"Você não pode usar o banco de dados para criar a estrutura. Verifique as "
+"permissões e não existe."
+
+#: ../../../../inc/SP/Core/Installer.class.php:417
+msgid "Error al crear la estructura de la Base de Datos."
+msgstr "Falha ao criar a estrutura do banco de dados."
+
+#: ../../../../inc/SP/Core/Installer.class.php:435
+msgid "Error al comprobar la base de datos"
+msgstr "Falha ao verificar o banco de dados"
+
+#: ../../../../inc/SP/Core/Installer.class.php:436
+msgid "Intente de nuevo la instalación"
+msgstr "Tente a instalação novamente"
+
+#: ../../../../inc/SP/Core/Installer.class.php:458
+msgid "Error al crear el grupo \"admin\""
+msgstr "Erro ao criar o grupo \"admin\""
+
+#: ../../../../inc/SP/Core/Installer.class.php:459
+#: ../../../../inc/SP/Core/Installer.class.php:471
+#: ../../../../inc/SP/Core/Installer.class.php:489
+#: ../../../../inc/SP/Core/Installer.class.php:502
+msgid "Informe al desarrollador"
+msgstr "Desenvolvedor relatório"
+
+#: ../../../../inc/SP/Core/Installer.class.php:470
+msgid "Error al crear el perfil \"admin\""
+msgstr "Erro ao criar o perfil \"admin\""
+
+#: ../../../../inc/SP/Core/Installer.class.php:488
+msgid "Error al crear el usuario \"admin\""
+msgstr "Erro ao criar o usuário \"admin\""
+
+#: ../../../../inc/SP/Core/Installer.class.php:501
+msgid "Error al actualizar la clave maestra del usuario \"admin\""
+msgstr "Falha ao atualizar o mestre senha de usuário \"admin\""
+
+#: ../../../../inc/SP/Core/Plugin/PluginDataStore.class.php:76
+msgid "Nuevo Plugin"
+msgstr "Novo plugin"
+
+#: ../../../../inc/SP/Core/Plugin/PluginUtil.class.php:106
+#: ../../../../inc/SP/Core/Plugin/PluginUtil.class.php:108
+#: ../../../../inc/SP/Core/Plugin/PluginUtil.class.php:161
+#, php-format
+msgid "No es posible cargar el plugin \"%s\""
+msgstr "Não é possível carregar a \"%s\" plug-in"
+
+#: ../../../../inc/SP/Core/Template.class.php:126
+#: ../../../../inc/SP/Core/Template.class.php:128
+#: ../../../../inc/SP/Html/DataGrid/DataGridBase.class.php:264
+#, php-format
+msgid "No es posible obtener la plantilla \"%s\" : %s"
+msgstr "Não é possível obter o modelo \"%s\":%s"
+
+#: ../../../../inc/SP/Core/Template.class.php:182
+#: ../../../../inc/SP/Core/Template.class.php:184
+#, php-format
+msgid "No es posible obtener la variable \"%s\""
+msgstr "Não é possível obter a variável \"%s\""
+
+#: ../../../../inc/SP/Core/Template.class.php:227
+#: ../../../../inc/SP/Core/Template.class.php:229
+#, php-format
+msgid "No es posible destruir la variable \"%s\""
+msgstr "Você não pode destruir a variável \"%s\""
+
+#: ../../../../inc/SP/Core/Template.class.php:246
+msgid "La plantilla no contiene archivos"
+msgstr "O modelo contém nenhum arquivo"
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:65
+msgid "Error al aplicar la actualización de la Base de Datos"
+msgstr "Erro ao aplicar atualização de banco de dados"
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:66
+#: ../../../../inc/SP/Core/Upgrade.class.php:74
+msgid "Compruebe el registro de eventos para más detalles"
+msgstr "Verifique o log de eventos para obter detalhes"
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:73
+msgid "Error al aplicar la actualización auxiliar"
+msgstr "Erro ao aplicar atualização auxiliar"
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:93
+msgid "Actualizar BBDD"
+msgstr "Recarregar BBDD"
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:99
+msgid "No es necesario actualizar la Base de Datos."
+msgstr "Não é necessário para atualizar o banco de dados."
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:111
+msgid "Error al aplicar la actualización de la Base de Datos."
+msgstr "Erro ao aplicar a atualização do banco de dados."
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:121
+msgid "Actualización de la Base de Datos realizada correctamente."
+msgstr "Atualizando o banco de dados realizado corretamente."
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:245
+msgid "Actualizar Configuración"
+msgstr "Configurações de atualização"
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:284
+msgid "Error al actualizar la configuración"
+msgstr "Falha ao atualizar as configurações"
+
+#: ../../../../inc/SP/Core/XmlExport.class.php:130
+msgid "Exportar XML"
+msgstr "Xml exportação"
+
+#: ../../../../inc/SP/Core/XmlExport.class.php:143
+msgid "Error al realizar la exportación de cuentas"
+msgstr "Erro ao exportar conta"
+
+#: ../../../../inc/SP/Core/XmlExport.class.php:152
+msgid "Exportación de cuentas realizada correctamente"
+msgstr "Exportação de contas com sucesso"
+
+#: ../../../../inc/SP/Core/XmlExport.class.php:478
+msgid "Error al crear el archivo XML"
+msgstr "Erro ao criar o arquivo xml"
+
+#: ../../../../inc/SP/Forms/AccountForm.class.php:132
+msgid "Es necesaria una clave"
+msgstr "Uma senha é necessária"
+
+#: ../../../../inc/SP/Forms/AccountForm.class.php:144
+msgid "Es necesario un nombre de cuenta"
+msgstr "Um nome de conta é necessário"
+
+#: ../../../../inc/SP/Forms/AccountForm.class.php:146
+#: ../../../../inc/SP/Forms/CustomerForm.class.php:83
+msgid "Es necesario un nombre de cliente"
+msgstr "Um nome de cliente é exigido"
+
+#: ../../../../inc/SP/Forms/AccountForm.class.php:148
+msgid "Es necesario un usuario"
+msgstr "Um usuário é necessário"
+
+#: ../../../../inc/SP/Forms/AccountForm.class.php:150
+msgid "Es necesario una categoría"
+msgstr "Uma categoria é necessária"
+
+#: ../../../../inc/SP/Forms/ApiTokenForm.class.php:84
+msgid "Usuario no indicado"
+msgstr "O usuário não indicaram"
+
+#: ../../../../inc/SP/Forms/ApiTokenForm.class.php:86
+msgid "Acción no indicada"
+msgstr "Ação não indicaram"
+
+#: ../../../../inc/SP/Forms/CategoryForm.class.php:83
+msgid "Es necesario un nombre de categoría"
+msgstr "Um nome de categoria é necessário"
+
+#: ../../../../inc/SP/Forms/CustomFieldDefForm.class.php:87
+msgid "Nombre del campo no indicado"
+msgstr "Nome do campo não indicado"
+
+#: ../../../../inc/SP/Forms/CustomFieldDefForm.class.php:89
+msgid "Tipo del campo no indicado"
+msgstr "Tipo de campo não indicado"
+
+#: ../../../../inc/SP/Forms/CustomFieldDefForm.class.php:91
+msgid "Módulo del campo no indicado"
+msgstr "Módulo do campo não indicado"
+
+#: ../../../../inc/SP/Forms/GroupForm.class.php:84
+msgid "Es necesario un nombre de grupo"
+msgstr "Um nome de grupo é necessário"
+
+#: ../../../../inc/SP/Forms/NoticeForm.class.php:91
+msgid "Es necesario un componente"
+msgstr "Um componente necessário"
+
+#: ../../../../inc/SP/Forms/NoticeForm.class.php:93
+msgid "Es necesario un tipo"
+msgstr "Um tipo é necessária"
+
+#: ../../../../inc/SP/Forms/NoticeForm.class.php:100
+msgid "Es necesario un destinatario"
+msgstr "Um receptor é necessário"
+
+#: ../../../../inc/SP/Forms/ProfileForm.class.php:111
+msgid "Es necesario un nombre de perfil"
+msgstr "Um nome de perfil é necessário"
+
+#: ../../../../inc/SP/Forms/TagForm.class.php:82
+msgid "Es necesario un nombre de etiqueta"
+msgstr "Um nome de marca é necessária"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:86
+msgid "Es necesario un nombre de usuario"
+msgstr "Um nome de usuário é necessário"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:88
+msgid "Es necesario un login"
+msgstr "Um login é necessário"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:90
+msgid "Es necesario un perfil"
+msgstr "Um perfil é necessário"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:92
+msgid "Es necesario un grupo"
+msgstr "Um grupo é necessário"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:94
+msgid "Es necesario un email"
+msgstr "Um e-mail é necessário"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:110
+msgid "La clave no puede estar en blanco"
+msgstr "A senha não pode estar em branco"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:127
+msgid "No es posible eliminar, usuario en uso"
+msgstr "Erro, usuário conectado"
+
+#: ../../../../inc/SP/Http/Request.class.php:51
+msgid "No es posible acceder directamente a este archivo"
+msgstr "Você não pode acessar diretamente esse arquivo"
+
+#: ../../../../inc/SP/Http/XMLRPCResponseParse.class.php:68
+msgid "Respuesta XML-RPC inválida"
+msgstr "Inválida resposta xml-rpc"
+
+#: ../../../../inc/SP/Import/CsvImport.class.php:46
+#: ../../../../inc/SP/Import/XmlImport.class.php:99
+#, php-format
+msgid "Formato detectado: %s"
+msgstr "Formato detectada:%s"
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:84
+#, php-format
+msgid "El número de campos es incorrecto (%d)"
+msgstr "O número de campos estiver incorreto (%d)"
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:85
+#, php-format
+msgid "Compruebe el formato del archivo CSV en línea %s"
+msgstr "Verifique o formato do arquivo csv on-line %s"
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:111
+msgid "Error importando cuenta"
+msgstr "Erro ao importar conta"
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:112
+msgid "Error procesando línea"
+msgstr "Linha de processamento de erro"
+
+#: ../../../../inc/SP/Import/FileImport.class.php:86
+msgid "Archivo no subido correctamente"
+msgstr "Arquivo não carregado corretamente"
+
+#: ../../../../inc/SP/Import/FileImport.class.php:87
+msgid "Verifique los permisos del usuario del servidor web"
+msgstr "Verifique as permissões do usuário do servidor web"
+
+#: ../../../../inc/SP/Import/FileImport.class.php:98
+msgid "Compruebe la extensión del archivo"
+msgstr "Verificar a extensão de arquivo"
+
+#: ../../../../inc/SP/Import/FileImport.class.php:114
+msgid "Compruebe la configuración de PHP para subir archivos"
+msgstr "Verifique a configuração do php para fazer upload de arquivos"
+
+#: ../../../../inc/SP/Import/FileImport.class.php:158
+#: ../../../../inc/SP/Import/FileImport.class.php:186
+msgid "Compruebe los permisos del directorio temporal"
+msgstr "Verifique as permissões do diretório temporário"
+
+#: ../../../../inc/SP/Import/Import.class.php:83
+#, php-format
+msgid "Tipo mime no soportado (\"%s\")"
+msgstr "Tipo de mime não suportado ( \"%s\")"
+
+#: ../../../../inc/SP/Import/Import.class.php:84
+msgid "Compruebe el formato del archivo"
+msgstr "Verifique o formato de arquivo"
+
+#: ../../../../inc/SP/Import/Import.class.php:98
+msgid "Cuentas importadas"
+msgstr "Contas importadas"
+
+#: ../../../../inc/SP/Import/Import.class.php:103
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:66
+#: ../../../../js/strings.js.php:79
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:70
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:127
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:287
+#: ../../../../inc/themes/material-blue/views/config/import.inc:101
+msgid "Ayuda"
+msgstr "Ajudar"
+
+#: ../../../../inc/SP/Import/Import.class.php:114
+msgid "Importación finalizada"
+msgstr "Importação concluída"
+
+#: ../../../../inc/SP/Import/ImportBase.class.php:121
+msgid "Id de categoría no definido. No es posible importar cuenta."
+msgstr "Categoria id indefinido. Você não pode importar conta."
+
+#: ../../../../inc/SP/Import/ImportBase.class.php:124
+msgid "Id de cliente no definido. No es posible importar cuenta."
+msgstr "Cliente id indefinido. Você não pode importar conta."
+
+#: ../../../../inc/SP/Import/SyspassImport.class.php:73
+msgid "Clave de encriptación no indicada"
+msgstr "senha de criptografia não cotadas"
+
+#: ../../../../inc/SP/Import/SyspassImport.class.php:109
+#: ../../../../inc/SP/Import/SyspassImport.class.php:122
+#, fuzzy
+msgid "Clave de encriptación incorrecta"
+msgstr "Criptografia incorreta iv"
+
+#: ../../../../inc/SP/Import/XmlFileImport.class.php:85
+msgid "Archivo XML no soportado"
+msgstr "Arquivo xml não é suportada"
+
+#: ../../../../inc/SP/Import/XmlFileImport.class.php:86
+msgid "No es posible detectar la aplicación que exportó los datos"
+msgstr "Não é possível detectar os dados de aplicativos exportados"
+
+#: ../../../../inc/SP/Import/XmlFileImport.class.php:107
+msgid "No es posible procesar el archivo XML"
+msgstr "Não é possível processar o arquivo xml"
+
+#: ../../../../inc/SP/Import/XmlImportTrait.class.php:69
+msgid "Formato de XML inválido"
+msgstr "Formato xml inválido"
+
+#: ../../../../inc/SP/Import/XmlImportTrait.class.php:70
+#, php-format
+msgid "El nodo \"%s\" no existe"
+msgstr "O nó \"%s\" não existe"
+
+#: ../../../../inc/SP/Log/Email.class.php:62
+msgid "N/D"
+msgstr "N/D"
+
+#: ../../../../inc/SP/Log/Email.class.php:64
+msgid "Realizado por"
+msgstr "Realizado por"
+
+#: ../../../../inc/SP/Log/Email.class.php:76
+#: ../../../../inc/SP/Log/Email.class.php:191
+msgid "Enviar Email"
+msgstr "Enviar e-mail"
+
+#: ../../../../inc/SP/Log/Email.class.php:81
+#: ../../../../inc/SP/Log/Email.class.php:198
+msgid "Correo enviado"
+msgstr "Sentmail"
+
+#: ../../../../inc/SP/Log/Email.class.php:82
+#: ../../../../inc/SP/Log/Email.class.php:192
+msgid "Destinatario"
+msgstr "Destinatário"
+
+#: ../../../../inc/SP/Log/Email.class.php:85
+msgid "CC"
+msgstr "Cc"
+
+#: ../../../../inc/SP/Log/Email.class.php:91
+#: ../../../../inc/SP/Log/Email.class.php:202
+msgid "Error al enviar correo"
+msgstr "Erro de envio de e-mail"
+
+#: ../../../../inc/SP/Log/Log.class.php:91
+msgid "Error al vaciar el registro de eventos"
+msgstr "Falha ao limpar o log de eventos"
+
+#: ../../../../inc/SP/Log/LogUtil.class.php:44
+#, php-format
+msgid "Extensión '%s' no cargada"
+msgstr "Extensão '%s' não foi carregado"
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:57
+msgid "Categoría duplicada"
+msgstr "Categoria duplicado"
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:68
+msgid "Error al crear la categoría"
+msgstr "Erro categoria criando"
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:122
+msgid "Error al eliminar la categoría"
+msgstr "Erro categoria exclusão"
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:177
+msgid "Nombre de categoría duplicado"
+msgstr "Nome da categoria duplicado"
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:193
+msgid "Error al actualizar la categoría"
+msgstr "Erro categoria atualização"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:72
+msgid "Error al crear el campo personalizado"
+msgstr "Erro ao criar o campo personalizado"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:87
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:96
+msgid "Error al eliminar el campo personalizado"
+msgstr "Falha ao excluir o campo personalizado"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:140
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:218
+msgid "Error al actualizar el campo personalizado"
+msgstr "Campo personalizado erro ao atualizar"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:174
+msgid "Campo personalizado no encontrado"
+msgstr "Campo personalizado não encontrado"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:227
+msgid "No se encontraron campos personalizados"
+msgstr "Não há campos personalizados são encontrados"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:62
+msgid "Texto"
+msgstr "Texto"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:66
+msgid "Número"
+msgstr "Número"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:67
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:60
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:87
+msgid "Email"
+msgstr "E-mail"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:68
+msgid "Teléfono"
+msgstr "Telefone"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:69
+msgid "Link"
+msgstr "Link"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:70
+msgid "Color"
+msgstr "Cor"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:71
+msgid "Área de Texto"
+msgstr ""
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:82
+msgid "No hay datos de campos personalizados"
+msgstr "Não há dados de campo personalizado"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:87
+msgid "Actualizando datos encriptados"
+msgstr "Atualizando dados criptografados"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:117
+msgid "Registros no actualizados"
+msgstr "Registros desatualizados"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:118
+msgid "Registros actualizados"
+msgstr "Registros atualizados"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:191
+msgid "Error al migrar campos personalizados"
+msgstr "Falha ao migrar campos personalizados"
+
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:58
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:182
+msgid "Cliente duplicado"
+msgstr "Duplicado cliente"
+
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:72
+msgid "Error al crear el cliente"
+msgstr "Erro cliente criando"
+
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:118
+msgid "No es posible eliminar"
+msgstr "Você não pode excluir"
+
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:127
+msgid "Error al eliminar el cliente"
+msgstr "Falha ao remover o cliente"
+
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:198
+msgid "Error al actualizar el cliente"
+msgstr "Cliente erro ao atualizar"
+
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:101
+msgid "Archivo subido"
+msgstr "Arquivo carregado"
+
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:123
+msgid "Error al eliminar archivo"
+msgstr "Erro de arquivo excluindo"
+
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:128
+msgid "Archivo no encontrado"
+msgstr "Arquivo não encontrado"
+
+#: ../../../../inc/SP/Mgmt/Files/FileUtil.class.php:102
+msgid "Error al eliminar archivos asociados a la cuenta"
+msgstr "Erro ao excluir os arquivos associados à conta"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:57
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:193
+msgid "Nombre de grupo duplicado"
+msgstr "Nome do grupo duplicado"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:67
+msgid "Error al crear el grupo"
+msgstr "Erro na criação do grupo"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:110
+msgid "Grupo en uso"
+msgstr "Grupo em uso"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:119
+msgid "Error al eliminar el grupo"
+msgstr "Falha ao excluir grupo"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:124
+msgid "Grupo no encontrado"
+msgstr "Grupo não encontrado"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:204
+msgid "Error al actualizar el grupo"
+msgstr "Falha ao atualizar o grupo"
+
+#: ../../../../inc/SP/Mgmt/Groups/GroupAccounts.class.php:70
+msgid "Error al eliminar grupos asociados a la cuenta"
+msgstr "Grupos de erro exclusão associados à conta"
+
+#: ../../../../inc/SP/Mgmt/Groups/GroupAccounts.class.php:100
+msgid "Error al actualizar los grupos secundarios"
+msgstr "Auxiliares de atualização de erro"
+
+#: ../../../../inc/SP/Mgmt/Groups/GroupUsers.class.php:69
+msgid "Error al asignar los usuarios al grupo"
+msgstr "Falha ao atribuir usuários para agrupar"
+
+#: ../../../../inc/SP/Mgmt/Groups/GroupUsers.class.php:89
+msgid "Error al eliminar los usuarios del grupo"
+msgstr "Grupo de erro exclusão de usuários"
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:69
+msgid "Error al crear la notificación"
+msgstr "Erro ao criar a notificação"
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:94
+msgid "Error al eliminar la notificación"
+msgstr "Falha ao remover a notificação"
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:99
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:137
+msgid "Notificación no encontrada"
+msgstr "Notificação não encontrada"
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:132
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:248
+msgid "Error al modificar la notificación"
+msgstr "Falha ao modificar a notificação"
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:171
+msgid "Error al obtener la notificación"
+msgstr "Falha ao receber uma notificação"
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:202
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:288
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:322
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:358
+msgid "Error al obtener las notificaciones"
+msgstr "Falha ao receber notificações"
+
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:59
+msgid "Error al crear el plugin"
+msgstr "Erro ao criar plug-in"
+
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:83
+msgid "Error al eliminar el plugin"
+msgstr "Erro plugin de remoção"
+
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:88
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:120
+msgid "Plugin no encontrado"
+msgstr "Plugin não encontrado"
+
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:115
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:223
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:247
+msgid "Error al actualizar el plugin"
+msgstr "Falha ao atualizar o plugin"
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:56
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:182
+msgid "Nombre de perfil duplicado"
+msgstr "Duplicar nome de perfil"
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:68
+msgid "Error al crear perfil"
+msgstr "Falha ao criar perfil"
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:105
+msgid "Perfil en uso"
+msgstr "Perfil em uso"
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:114
+msgid "Error al eliminar perfil"
+msgstr "Erro perfil exclusão"
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:119
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:201
+msgid "Perfil no encontrado"
+msgstr "Perfil não encontrado"
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:196
+msgid "Error al modificar perfil"
+msgstr "Falha ao modificar o perfil"
+
+#: ../../../../inc/SP/Mgmt/Profiles/ProfileUtil.class.php:55
+msgid "Migrar Perfiles"
+msgstr "Migrar profiles"
+
+#: ../../../../inc/SP/Mgmt/Profiles/ProfileUtil.class.php:85
+msgid "Error al obtener perfiles"
+msgstr "Falha ao obter perfis"
+
+#: ../../../../inc/SP/Mgmt/Profiles/ProfileUtil.class.php:147
+msgid "Operación realizada correctamente"
+msgstr "Operação bem sucedida"
+
+#: ../../../../inc/SP/Mgmt/Profiles/ProfileUtil.class.php:152
+msgid "Fallo al realizar la operación"
+msgstr "A incapacidade de realizar a operação"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:104
+msgid "Error al actualizar enlace"
+msgstr "Falha ao atualizar ligação"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:109
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:185
+msgid "Enlace no encontrado"
+msgstr "Link não encontrado"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:122
+msgid "Enlace ya creado"
+msgstr "Link já criado"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:143
+msgid "Error al crear enlace"
+msgstr "Erro ao criar a ligação"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:180
+msgid "Error al eliminar enlace"
+msgstr "Ligação erro ao eliminar"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:214
+msgid "Error al renovar enlace"
+msgstr "Não conseguiu renovar vínculo"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:243
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:342
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:376
+msgid "Error al obtener enlace"
+msgstr "Erro ao obter a ligação"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:294
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLinkSearch.class.php:72
+msgid "ON"
+msgstr "On"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:294
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLinkSearch.class.php:72
+msgid "OFF"
+msgstr "Off"
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:53
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:126
+msgid "Etiqueta duplicada"
+msgstr "Tag duplicada"
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:63
+msgid "Error al crear etiqueta"
+msgstr "Etiqueta criando erro"
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:108
+msgid "Error al eliminar etiqueta"
+msgstr "Falha ao remover tag"
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:113
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:142
+msgid "Etiqueta no encontrada"
+msgstr "Rotular não encontrado"
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:137
+msgid "Error al actualizar etiqueta"
+msgstr "Tag erro ao atualizar"
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:184
+msgid "Error al obtener etiqueta"
+msgstr "Erro ao obter a tag"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:53
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:152
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:77
+msgid "Login/email de usuario duplicados"
+msgstr "Login / usuário duplicado e-mail"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:90
+msgid "Error al crear el usuario"
+msgstr "Erro ao criar usuário"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:132
+msgid "Error al eliminar el usuario"
+msgstr "Falha ao excluir o usuário"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:137
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:188
+msgid "Usuario no encontrado"
+msgstr "Usuário não encontrado"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:183
+msgid "Error al actualizar el usuario"
+msgstr "Erro ao atualizar o usuário"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:250
+msgid "Error al obtener los usuarios"
+msgstr "Usuários de erro obtendo"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:286
+#: ../../../../inc/SP/Mgmt/Users/UserPass.class.php:145
+msgid "Error al modificar la clave"
+msgstr "Falha ao alterar a senha"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:339
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:386
+msgid "Error al obtener los datos del usuario"
+msgstr "Não foi possível obter os dados do usuário"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:108
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:54
+msgid "Usuario de LDAP"
+msgstr "Do usuário ldap"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:117
+msgid "Error al guardar los datos de LDAP"
+msgstr "Falha ao salvar dados ldap"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:125
+msgid "Activación Cuenta"
+msgstr "Ativação da conta"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:126
+msgid "Su cuenta está pendiente de activación."
+msgstr "A sua conta está pendente de ativação."
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:127
+msgid "En breve recibirá un email de confirmación."
+msgstr "Você receberá um e-mail de confirmação."
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:134
+msgid "Nuevo usuario de LDAP"
+msgstr "Novo para ldap"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:198
+msgid "Error al actualizar la clave del usuario en la BBDD"
+msgstr "Falha ao atualizar a senha do usuário no db"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdapSync.class.php:60
+msgid "Sincronización LDAP"
+msgstr "Sincronização ldap"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdapSync.class.php:110
+msgid "No se encontraron objetos para sincronizar"
+msgstr "Nenhum objeto foi encontrado para sincronizar"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdapSync.class.php:116
+msgid "Sincronización finalizada"
+msgstr "Sincronização completa"
+
+#: ../../../../inc/SP/Mgmt/Users/UserMigrate.class.php:98
+msgid "Error al migrar cuenta de usuario"
+msgstr "Falha ao migrar conta de usuário"
+
+#: ../../../../inc/SP/Mgmt/Users/UserMigrate.class.php:133
+msgid "Error al obtener grupo de usuarios"
+msgstr "Não foi possível obter grupo de usuários"
+
+#: ../../../../inc/SP/Mgmt/Users/UserMigrate.class.php:148
+msgid "Error al migrar grupo del usuario"
+msgstr "Falha ao migrar grupo de usuários"
+
+#: ../../../../inc/SP/Mgmt/Users/UserPassRecover.class.php:110
+msgid "Error en comprobación de hash"
+msgstr "Erro de hash verificação"
+
+#: ../../../../inc/SP/Mgmt/Users/UserPassRecover.class.php:112
+msgid "Hash inválido o expirado"
+msgstr "Hash inválido ou expirou"
+
+#: ../../../../inc/SP/Mgmt/Users/UserPassRecover.class.php:158
+msgid "Error al generar el hash de recuperación"
+msgstr "Falha ao gerar a recuperação de hash"
+
+#: ../../../../inc/SP/Mgmt/Users/UserPreferences.class.php:79
+msgid "Error al actualizar preferencias"
+msgstr "Falha ao atualizar preferências"
+
+#: ../../../../inc/SP/Mgmt/Users/UserPreferencesUtil.class.php:59
+msgid "Actualizando preferencias"
+msgstr "Preferências de atualização"
+
+#: ../../../../inc/SP/Storage/DB.class.php:296
+#: ../../../../inc/SP/Storage/DB.class.php:336
+#: ../../../../js/strings.js.php:26
+msgid "Error en la consulta"
+msgstr "Falha na consulta"
+
+#: ../../../../inc/SP/Storage/DB.class.php:342
+msgid "Consulta en blanco"
+msgstr "Consulta em branco"
+
+#: ../../../../inc/SP/Storage/DB.class.php:354
+msgid "Restricción de integridad"
+msgstr "Restrição de integridade"
+
+#: ../../../../inc/SP/Storage/XmlHandler.class.php:77
+#, php-format
+msgid "No es posible leer/escribir el archivo: %s"
+msgstr "Não é possível ler / gravar o arquivo:%s"
+
+#: ../../../../inc/SP/Storage/XmlHandler.class.php:161
+msgid "No hay elementos para guardar"
+msgstr "Nenhum item para salvar"
+
+#: ../../../../inc/SP/Util/Connection.class.php:120
+msgid "Socket no inicializado"
+msgstr "Soquete não inicializado"
+
+#: ../../../../inc/SP/Util/Connection.class.php:127
+msgid "Error al enviar datos"
+msgstr "Falha ao enviar dados"
+
+#: ../../../../inc/SP/Util/Json.class.php:63
+msgid "Error de codificación"
+msgstr "Codificação de erro"
+
+#: ../../../../inc/SP/Util/Util.class.php:316
+msgid "Respuesta"
+msgstr "Resposta"
+
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApi.class.php:68
+msgid "Fallo de autentificación"
+msgstr "Falha de autenticação"
+
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApiBase.class.php:173
+msgid "Error al realizar la consulta"
+msgstr "Consulta a realização de erro"
+
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApiBase.class.php:219
+msgid "URL de conexión no establecida"
+msgstr "Conexão url não estabelecido"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:46
+msgid "Añadir"
+msgstr "Adicionar"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:47
+msgid "Ver Detalles"
+msgstr "Ver detalhes"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:49
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:68
+msgid "Editar"
+msgstr "Editar"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:50
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:80
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:82
+msgid "Eliminar"
+msgstr "Remover"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:51
+msgid "Cambiar Clave"
+msgstr "Alteração de senha"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:52
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:148
+msgid "Admin Aplicación"
+msgstr "Aplicação de admin"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:53
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:155
+msgid "Admin Cuentas"
+msgstr "Contas de administrador"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:55
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:160
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:163
+msgid "Deshabilitado"
+msgstr "Inválido"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:56
+msgid "Habilitado"
+msgstr "Ativado"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:58
+msgid "Copiar"
+msgstr "Cópia"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:63
+#: ../../../../inc/themes/material-blue/views/main/error.inc:12
+#: ../../../../inc/themes/material-blue/views/main/error.inc:13
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:56
+msgid "Volver"
+msgstr "Retorno"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:64
+msgid "Restaurar"
+msgstr "Restaurar"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:65
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:109
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:160
+msgid "Guardar"
+msgstr "Salvar"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:67
+msgid "Limpiar"
+msgstr "Limpar"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:68
+msgid "Realizar"
+msgstr "Realizar"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:69
+msgid "Descargar"
+msgstr "Baixar"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:71
+msgid "Comprobar"
+msgstr "Verificar"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:78
+msgid "Crítico"
+msgstr "Crítico"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:83
+msgid "Página anterior"
+msgstr "Página anterior"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:84
+msgid "Página siguiente"
+msgstr "Página seguinte"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:85
+msgid "Primera página"
+msgstr "Primeira página"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:86
+msgid "Última página"
+msgstr "Última página"
+
+#: ../../../../js/strings.js.php:27
+msgid "Ha ocurrido un error"
+msgstr "Ocorreu um erro"
+
+#: ../../../../js/strings.js.php:28 ../../../../js/strings.js.php:86
+msgid "Sesión finalizada"
+msgstr "Sessão terminou"
+
+#: ../../../../js/strings.js.php:29
+msgid "Borrar la cuenta?"
+msgstr "Excluir conta?"
+
+#: ../../../../js/strings.js.php:30
+msgid "Borrar el usuario?"
+msgstr "Excluir o usuário?"
+
+#: ../../../../js/strings.js.php:31
+msgid "Guarde la configuración para que sea efectiva"
+msgstr "Salve a configuração para ser eficaz"
+
+#: ../../../../js/strings.js.php:32
+msgid "Clave Generada"
+msgstr "Geração de senha"
+
+#: ../../../../js/strings.js.php:33
+msgid "Nivel alto"
+msgstr "Alto nível"
+
+#: ../../../../js/strings.js.php:34
+msgid "Nivel medio"
+msgstr "Nível médio"
+
+#: ../../../../js/strings.js.php:35
+msgid "Nivel bajo"
+msgstr "Nível baixo"
+
+#: ../../../../js/strings.js.php:36
+msgid "Nivel muy alto"
+msgstr "Nível muito elevado"
+
+#: ../../../../js/strings.js.php:37
+msgid "Utilizar al menos 8 caracteres"
+msgstr "Use pelo menos 8 caracteres"
+
+#: ../../../../js/strings.js.php:38
+msgid "Borrar elemento?"
+msgstr "Remover produto?"
+
+#: ../../../../js/strings.js.php:39
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:8
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:17
+msgid "Página no encontrada"
+msgstr "Página não encontrada"
+
+#: ../../../../js/strings.js.php:40
+msgid "Archivo no soportado para visualizar"
+msgstr "Ficheiro não suportado para exibir"
+
+#: ../../../../js/strings.js.php:41
+msgid "Eliminar archivo?"
+msgstr "Excluir arquivo?"
+
+#: ../../../../js/strings.js.php:42
+msgid "Su navegador no soporta subir archivos con HTML5"
+msgstr "Seu navegador não suporta upload de arquivos html5"
+
+#: ../../../../js/strings.js.php:43
+msgid "Demasiados archivos"
+msgstr "Muitos arquivos"
+
+#: ../../../../js/strings.js.php:44
+msgid "Tamaño de archivo no permitido"
+msgstr "O tamanho do arquivo não permitidos"
+
+#: ../../../../js/strings.js.php:45
+msgid "Extensión no permitida"
+msgstr "Extensão não permitida"
+
+#: ../../../../js/strings.js.php:46
+msgid "Vaciar el registro de eventos?"
+msgstr "Esvaziar o log de eventos?"
+
+#: ../../../../js/strings.js.php:47
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:75
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:243
+#: ../../../../inc/themes/material-blue/views/config/import.inc:54
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:221
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:77
+msgid "Seleccionar Grupo"
+msgstr "Selecionar grupo"
+
+#: ../../../../js/strings.js.php:48
+#: ../../../../inc/themes/material-blue/views/config/import.inc:28
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:245
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:17
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:96
+msgid "Seleccionar Usuario"
+msgstr "Selecionar usuário"
+
+#: ../../../../js/strings.js.php:49
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:61
+msgid "Seleccionar Perfil"
+msgstr "Selecionar perfil"
+
+#: ../../../../js/strings.js.php:50
+#: ../../../../inc/themes/material-blue/views/account/account.inc:59
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:49
+msgid "Seleccionar Cliente"
+msgstr "Selecione o cliente"
+
+#: ../../../../js/strings.js.php:51
+#: ../../../../inc/themes/material-blue/views/account/account.inc:82
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:57
+msgid "Seleccionar Categoría"
+msgstr "Selecione a categoria"
+
+#: ../../../../js/strings.js.php:52
+msgid "Sin resultados"
+msgstr "Nenhum resultado"
+
+#: ../../../../js/strings.js.php:53
+msgid "Opciones de clave"
+msgstr "Opções de senhas"
+
+#: ../../../../js/strings.js.php:54
+msgid "Generar clave aleatoria"
+msgstr "Gerar senha aleatória"
+
+#: ../../../../js/strings.js.php:55
+msgid "Complejidad"
+msgstr "Complexidade"
+
+#: ../../../../js/strings.js.php:56
+msgid "Restablecer"
+msgstr "Restaurar"
+
+#: ../../../../js/strings.js.php:57
+msgid "Nivel de fortaleza de la clave"
+msgstr "Nível de força da senha"
+
+#: ../../../../js/strings.js.php:58
+msgid "Mostrar Clave"
+msgstr "Mostrar key"
+
+#: ../../../../js/strings.js.php:59
+#: ../../../../inc/themes/material-blue/views/account/viewpass.inc:19
+msgid "Copiar Usuario"
+msgstr "Cópia do usuário"
+
+#: ../../../../js/strings.js.php:60
+#: ../../../../inc/themes/material-blue/views/account/viewpass.inc:30
+msgid "Copiar Clave"
+msgstr "Cópia key"
+
+#: ../../../../js/strings.js.php:61
+msgid "Incluir Números"
+msgstr "Incluir números"
+
+#: ../../../../js/strings.js.php:62
+msgid "Incluir Mayúsculas"
+msgstr "Incluem a tecla shift"
+
+#: ../../../../js/strings.js.php:63
+msgid "Incluir Símbolos"
+msgstr "Incluem símbolos"
+
+#: ../../../../js/strings.js.php:64
+msgid "Longitud"
+msgstr "Comprimento"
+
+#: ../../../../js/strings.js.php:65
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:32
+msgid "Seleccionar Acción"
+msgstr "Selecionar ação"
+
+#: ../../../../js/strings.js.php:66
+msgid "SI"
+msgstr "SI"
+
+#: ../../../../js/strings.js.php:67
+msgid "NO"
+msgstr "No"
+
+#: ../../../../js/strings.js.php:68
+msgid "Aceptar"
+msgstr "Aceitar"
+
+#: ../../../../js/strings.js.php:69
+msgid "Cancelar"
+msgstr "Cancelar"
+
+#: ../../../../js/strings.js.php:70
+msgid "Clave Copiada al Portapapeles"
+msgstr "Key copiados para o clipboard"
+
+#: ../../../../js/strings.js.php:71
+msgid "Error al copiar al portapapeles"
+msgstr "Erro ao copiar para a área de transferência"
+
+#: ../../../../js/strings.js.php:73
+msgid "Recibir notificaciones?"
+msgstr "Receber notificações?"
+
+#: ../../../../js/strings.js.php:74
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:133
+msgid "Marcar Favorito"
+msgstr "Mark favorita"
+
+#: ../../../../js/strings.js.php:75
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:123
+msgid "Eliminar Favorito"
+msgstr "Remover favorito"
+
+#: ../../../../js/strings.js.php:76
+msgid "Limpiar Selección"
+msgstr "Limpar seleção"
+
+#: ../../../../js/strings.js.php:77
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:68
+msgid "Mostrar Favoritos"
+msgstr "Mostrar favoritos"
+
+#: ../../../../js/strings.js.php:78
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:68
+msgid "Mostrar Todos"
+msgstr "Mostrar todos"
+
+#: ../../../../js/strings.js.php:80
+msgid "Sin cambios"
+msgstr "Sem alterações"
+
+#: ../../../../js/strings.js.php:81
+msgid "Ahora"
+msgstr "Agora"
+
+#: ../../../../js/strings.js.php:82
+msgid ""
+"Este proceso importará los usuarios de LDAP detectados. Desea continuar?"
+msgstr "Este processo irá importar usuários ldap detectados. Continuar?"
+
+#: ../../../../js/strings.js.php:83
+msgid "Esta acción restablecerá todos los datos del plugin. Desea continuar?"
+msgstr "Isso irá redefinir todos plug-in de dados. Continuar?"
+
+#: ../../../../js/strings.js.php:84
+msgid "Este proceso puede durar algo de tiempo. Desea continuar?"
+msgstr "Este processo pode demorar algum tempo. Continuar?"
+
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:67
+#: ../../../../inc/themes/material-blue/views/account/account.inc:135
+#: ../../../../inc/themes/material-blue/views/account/account.inc:142
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:115
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:122
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:47
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:54
+#: ../../../../inc/themes/material-blue/views/main/install.inc:62
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:42
+msgid "Clave (repetir)"
+msgstr "Senha (repetir)"
+
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:78
+#: ../../../../inc/themes/material-blue/views/account/account.inc:149
+#: ../../../../inc/themes/material-blue/views/account/details.inc:131
+#: ../../../../inc/themes/material-blue/views/account/details.inc:133
+msgid "Fecha Caducidad Clave"
+msgstr "Key data de validade"
+
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:88
+#: ../../../../inc/themes/material-blue/views/account/account.inc:160
+msgid "Seleccionar Fecha"
+msgstr "Selecione data"
+
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:102
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:25
+#: ../../../../inc/themes/material-blue/views/account/request.inc:58
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:297
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:167
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:274
+#: ../../../../inc/themes/material-blue/views/config/general.inc:29
+#: ../../../../inc/themes/material-blue/views/config/import.inc:89
+#: ../../../../inc/themes/material-blue/views/config/info.inc:128
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:283
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:150
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:276
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:137
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:172
+msgid "Atrás"
+msgstr "Voltar"
+
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:65
+#: ../../../../inc/themes/material-blue/views/account/account.inc:165
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:140
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:129
+msgid "Notas"
+msgstr "Notas"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:9
+msgid "Accesos"
+msgstr "Acesso"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:20
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:104
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:117
+msgid "Permisos"
+msgstr "Permissões"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:26
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:50
+msgid "Seleccionar Usuarios"
+msgstr "Selecionar usuários"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:40
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:62
+msgid "Hablitar edición"
+msgstr "Habilitar edição"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:48
+msgid "Seleccionar Grupos"
+msgstr "Selecione grupos"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:72
+#: ../../../../inc/themes/material-blue/views/account/details.inc:52
+#: ../../../../inc/themes/material-blue/views/account/details.inc:54
+msgid "Grupo Principal"
+msgstr "Grupo principal"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:87
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:111
+msgid "Cuenta Privada"
+msgstr "Conta particular"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:92
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:103
+msgid "Privada"
+msgstr "Privado"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:100
+msgid "Cuenta Privada Grupo"
+msgstr "Grupo conta privada"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:105
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:110
+msgid "Privada Grupo"
+msgstr "Grupo privado"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:11
+msgid "Histórico"
+msgstr "Histórico"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:182
+msgid "Seleccionar Etiquetas"
+msgstr "Selecione marcas"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:193
+#: ../../../../inc/themes/material-blue/views/account/account.inc:195
+#: ../../../../inc/themes/material-blue/views/account/viewpass.inc:9
+msgid "Cuenta Vinculada"
+msgstr "Conta vinculada"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:203
+msgid "Seleccionar Cuenta"
+msgstr "Seleccione conta"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:210
+#: ../../../../inc/themes/material-blue/views/account/account.inc:212
+msgid "Historial"
+msgstr "Registro"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:217
+msgid "Seleccionar fecha"
+msgstr "Selecionar data"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:229
+#: ../../../../inc/themes/material-blue/views/account/details.inc:35
+#: ../../../../inc/themes/material-blue/views/account/details.inc:37
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:199
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:201
+msgid "Última Modificación"
+msgstr "Modificada pela última vez"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:236
+#: ../../../../inc/themes/material-blue/views/account/account.inc:238
+#: ../../../../inc/themes/material-blue/views/account/account.inc:241
+msgid "Enlace Público"
+msgstr "Liaison pública"
+
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:17
+msgid "Ver Actual"
+msgstr "Vista actual"
+
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:54
+msgid "Crear Enlace Público"
+msgstr "Criar link pública"
+
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:130
+msgid "Modificar Cuenta"
+msgstr "Modificar conta"
+
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:152
+msgid "Restaurar cuenta desde este punto"
+msgstr "Restaurar conta a partir deste ponto"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:8
+msgid "Detalles"
+msgstr "Detalhes"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:26
+#: ../../../../inc/themes/material-blue/views/account/details.inc:28
+msgid "Fecha Alta"
+msgstr "Data adicionado"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:44
+#: ../../../../inc/themes/material-blue/views/account/details.inc:46
+msgid "Creador"
+msgstr "Criador"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:61
+#: ../../../../inc/themes/material-blue/views/account/details.inc:63
+msgid "Usuarios Secundarios"
+msgstr "Usuários Secundários"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:83
+#: ../../../../inc/themes/material-blue/views/account/details.inc:85
+msgid "Grupos Secundarios"
+msgstr "Grupos secundários"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:106
+#: ../../../../inc/themes/material-blue/views/account/details.inc:108
+msgid "Fecha Edición"
+msgstr "Data de emissão"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:114
+#: ../../../../inc/themes/material-blue/views/account/details.inc:116
+msgid "Editor"
+msgstr "Editor"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:123
+#: ../../../../inc/themes/material-blue/views/account/details.inc:125
+msgid "Fecha de Clave"
+msgstr "Key data"
+
+#: ../../../../inc/themes/material-blue/views/account/files.inc:37
+msgid "Soltar archivos aquí (max. 5) o click para seleccionar"
+msgstr "Soltar arquivos aqui (máx. 5) ou clique para seleccionar"
+
+#: ../../../../inc/themes/material-blue/views/account/files.inc:37
+#, php-format
+msgid "Tamaño máximo de archivo: %d MB"
+msgstr "Tamanho máximo do arquivo:% d mb"
+
+#: ../../../../inc/themes/material-blue/views/account/linkedAccounts.inc:3
+msgid "Cuentas Vinculadas"
+msgstr "Contas vinculadas"
+
+#: ../../../../inc/themes/material-blue/views/account/request.inc:4
+msgid "Solicitar Modificación de Cuenta"
+msgstr "Solicitar modificação de conta"
+
+#: ../../../../inc/themes/material-blue/views/account/request.inc:36
+msgid "Petición"
+msgstr "Petição"
+
+#: ../../../../inc/themes/material-blue/views/account/request.inc:42
+msgid "Descripción de la petición"
+msgstr "Descrição da petição"
+
+#: ../../../../inc/themes/material-blue/views/account/request.inc:65
+msgid "Enviar"
+msgstr "Enviar"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/index.inc:11
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:11
+msgid "No se encontraron registros"
+msgstr "Nenhum registro encontrado"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:24
+msgid "Buscar en Wiki"
+msgstr "Pesquisa wiki"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:71
+msgid "Abrir enlace a"
+msgstr "Abrir link para"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:95
+msgid "Clave Caducada"
+msgstr "senha lapsed"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:149
+msgid "Archivos adjuntos"
+msgstr "Arquivos adjuntos"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:159
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:170
+msgid "Enlace a Wiki"
+msgstr "Link para a wiki"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:162
+msgid "Ver en Wiki"
+msgstr "Veja wiki"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:22
+msgid "Parámetros especiales:"
+msgstr "Parâmetros especiais:"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:25
+msgid "Buscar cuentas a las que 'login' tenga acceso"
+msgstr "Pesquisa contas que 'login' para o acesso"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:26
+#, fuzzy
+msgid "Devolver las cuentas en las que 'login' es propietario"
+msgstr "Pesquisa contas que 'login' para o acesso"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:27
+msgid "Buscar cuentas a las que 'group_name' tenga acceso"
+msgstr "Pesquisa contas que 'group_name' têm acesso"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:28
+msgid "Devolver las cuentas con grupo principal 'group_name'"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:29
+msgid "Buscar cuentas con archivos con el nombre 'file_name'"
+msgstr "Pesquisa contas com arquivos chamados 'file_name'"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:30
+msgid "Buscar cuentas con la clave caducada"
+msgstr "Pesquisa contas com senha expirada"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:31
+msgid "Devolver las cuentas privadas del usuario actual"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:39
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:43
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:124
+msgid "Búsqueda global"
+msgstr "Pesquisa global"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:71
+msgid "Filtrar Favoritos"
+msgstr "Filtre seus favoritos"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:85
+msgid "Cuentas por página"
+msgstr "Página contas"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:91
+msgid "Más Filtros"
+msgstr "Mais filtros"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:96
+msgid "Seleccionar Etiqueta"
+msgstr "Selecione rótulo"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:12
+msgid "Búsqueda"
+msgstr "Pesquisa"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:18
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:47
+msgid "Resultados por página"
+msgstr "Resultados por página"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:23
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:52
+msgid "Número de resultados por página a mostrar, al realizar una búsqueda."
+msgstr "Número de resultados por página para exibir ao realizar uma pesquisa."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:34
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:63
+msgid "Número de resultados por página"
+msgstr "Número de resultados por página"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:44
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:73
+msgid ""
+"Habilita el nombre de la cuenta de la búsqueda, como enlace a los detalles "
+"de la cuenta."
+msgstr "Permite a busca nome da conta, como um link para os detalhes da conta."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:53
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:82
+msgid "Nombre de cuenta como enlace"
+msgstr "Nome da conta como ligação"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:63
+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 ""
+"Ele permite que todos os usuários pesquisem em todas as contas, mas não pode "
+"ver o conteúdo do que aqueles sem licenças."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:72
+msgid "Búsquedas globales"
+msgstr "Pesquisa global"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:82
+msgid "Generar una imagen con el texto de la clave de la cuenta."
+msgstr "Gerar uma imagem com conta-senha texto."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:86
+msgid "Util para entornos donde copiar la clave supone un riesgo de seguridad."
+msgstr "Útil para ambientes onde copiar a senha é um risco de segurança."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:96
+msgid "Imagen para mostrar clave"
+msgstr "Imagem tecla de display"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:106
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:146
+msgid "Muestra los resultados de búsqueda de cuentas en formato tarjeta."
+msgstr "Displays procurar contas de resultados de cartão de formato."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:116
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:155
+msgid "Resultados en Tarjetas"
+msgstr "Resultados cartões"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:123
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:189
+msgid "Enlaces Públicos"
+msgstr "Ligações públicas"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:133
+msgid ""
+"Habilita la posibilidad de generar enlaces públicos para ver los detalles de "
+"una cuenta."
+msgstr ""
+"Permite que a capacidade de gerar links públicos para ver os detalhes de uma "
+"conta."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:137
+msgid ""
+"Las cuentas enlazadas serán visibles por cualquiera que disponga del enlace."
+msgstr "Contas vinculadas será visível para qualquer pessoa com o link."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:141
+msgid ""
+"Para crear enlaces, los usuarios tienen que tener activada la opción en su "
+"perfl."
+msgstr ""
+"Para criar links, os usuários têm a opção de ser activado no seu perfl."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:151
+msgid "Habilitar Enlaces Públicos"
+msgstr "Activar ligações públicas"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:157
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:166
+msgid "Tiempo de caducidad"
+msgstr "O tempo de expiração"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:172
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:181
+msgid "Número máximo de visitas"
+msgstr "O número máximo de visitas"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:191
+msgid "La clave de la cuenta es visualizada como una imagen."
+msgstr "A senha da conta é exibido como uma imagem."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:201
+msgid "Usar imagen para clave"
+msgstr "Use imagem para cravo"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:218
+msgid "Habilita la subida/descarga de archivos para las cuentas."
+msgstr "Permite que os arquivos de upload / download para as contas."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:228
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:203
+msgid "Gestión de archivos"
+msgstr "Gerenciador de arquivos"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:234
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:252
+msgid "Extensiones de archivos permitidas"
+msgstr "As extensões de arquivo permitido"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:239
+msgid "Extensiones permitidas para la subida de archivos."
+msgstr "Extensões permitidas para o upload de arquivos."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:243
+msgid "Se permite un máximo de 4 caracteres."
+msgstr "É permitido um máximo de 4 caracteres."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:247
+msgid ""
+"Escribir extensión y pulsar intro para añadir. Es necesario guardar la "
+"configuración."
+msgstr ""
+"Escrever ramal e pressione enter para adicionar. É necessário salvar as "
+"configurações."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:260
+msgid "Tamaño máximo de archivo"
+msgstr "Tamanho máximo de arquivo"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:265
+msgid "Establece el tamaño máximo para subir archivos."
+msgstr "Define o tamanho máximo para upload de arquivos."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:269
+msgid "El máximo absuluto es de 16MB."
+msgstr "Máxima absuluto é 16mb."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:280
+msgid "Tamaño máximo de archivo en bytes"
+msgstr "Tamanho máximo de arquivo em bytes"
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:13
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:16
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:98
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:101
+msgid "Resultado"
+msgstr "Resultado"
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:24
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:27
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:109
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:112
+msgid "Descargar Actual"
+msgstr "Faça o download agora"
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:33
+msgid "Copia BBDD"
+msgstr "Cópia bbdd"
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:40
+msgid "Copia sysPass"
+msgstr "Cópia syspass"
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:43
+msgid "No hay backups para descargar"
+msgstr "Não há backups para o download"
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:71
+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 ""
+"Backup permite salvar e baixar tanto o syspass banco de dados como arquivos "
+"e configurações do aplicativo."
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:73
+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 ""
+"Com este método é possível salvar todos syspass dados em outro lugar ou usá-"
+"los para fazer a aplicação portátil."
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:88
+msgid "Exportar Cuentas"
+msgstr "Contas de exportação"
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:122
+msgid "No hay archivos XML para descargar"
+msgstr "Não há arquivos XML para download"
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:129
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:137
+msgid "Clave de Exportación"
+msgstr "Exportar senha"
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:143
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:151
+msgid "Clave de Exportación (repetir)"
+msgstr "De exportação senha (repetir)"
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:180
+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 ""
+"Contas de exportação e contas pode salvar seus dados em formato xml para "
+"mais tarde ser importado para outros casos de syspass."
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:182
+msgid "Los elementos exportados son cuentas, clientes y categorías."
+msgstr "Os itens exportados são contas, clientes e categorias."
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:184
+msgid ""
+"Las claves de las cuentas son exportadas de forma encriptada para mayor "
+"seguridad."
+msgstr ""
+"As contas-senha são exportados de forma criptografada para maior segurança."
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:186
+msgid ""
+"Es posible establecer una clave de exportación para guardar todos los datos "
+"encriptados en el archivo XML."
+msgstr ""
+"Você pode definir uma exportação senha para salvar todos os dados "
+"criptografados no arquivo xml."
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:8
+#: ../../../../inc/themes/material-blue/views/config/import.inc:148
+#: ../../../../inc/themes/material-blue/views/config/import.inc:163
+#: ../../../../inc/themes/material-blue/views/main/install.inc:48
+#: ../../../../inc/themes/material-blue/views/main/install.inc:54
+#: ../../../../inc/themes/material-blue/views/main/login.inc:49
+#: ../../../../inc/themes/material-blue/views/main/login.inc:89
+msgid "Clave Maestra"
+msgstr "Senha-mestre"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:18
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:21
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:167
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:170
+msgid "Último cambio"
+msgstr "Última atualização"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:29
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:37
+msgid "Clave Maestra actual"
+msgstr "Senha mestre atual"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:43
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:51
+msgid "Nueva Clave Maestra"
+msgstr "Nova senha mestre"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:57
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:65
+msgid "Nueva Clave Maestra (repetir)"
+msgstr "Nova senha mestre (repetir)"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:75
+msgid "Establece una nueva clave maestra sin re-encriptar las cuentas"
+msgstr "Estabelece uma nova senha mestre sem re-criptografar as contas"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:83
+msgid "No modificar cuentas"
+msgstr "Não modifique contas"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:92
+msgid "Guarde la nueva clave en un lugar seguro."
+msgstr "Salve a nova senha em um lugar seguro."
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:96
+msgid "Se volverán a encriptar las claves de todas las cuentas."
+msgstr "Eles vão ser re-criptografar as senhas para todas as contas."
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:100
+msgid "Los usuarios deberán de introducir la nueva clave maestra."
+msgstr "Os utilizadores terão de introduzir a nova senha mestre."
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:106
+msgid "Confirmar cambio"
+msgstr "Confirmar a alteração"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:128
+msgid ""
+"La clave maestra es utilizada para encriptar las claves de las cuentas de "
+"sysPass para mantenerlas seguras."
+msgstr ""
+"A senha mestre é usada para criptografar contas senhas syspass para mantê-"
+"los seguros."
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:130
+msgid ""
+"Es recomendable cambiarla cada cierto tiempo y utilizar una clave compleja "
+"que incluya números, letras y símbolos."
+msgstr ""
+"É aconselhável mudá-lo de vez em quando e usar uma senha complexa que inclui "
+"números, letras e símbolos."
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:140
+msgid "Actualizar hash de clave maestra"
+msgstr "Atualização de hash senha mestre"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:156
+msgid "Clave Temporal"
+msgstr "Senha Temporal"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:172
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:185
+msgid "No generada"
+msgstr "Não gerado"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:177
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:180
+msgid "Válido hasta"
+msgstr "Valido ate"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:191
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:194
+msgid "Intentos"
+msgstr "Tries"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:201
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:210
+msgid "Validez (s)"
+msgstr "Validade (s)"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:222
+msgid ""
+"Envía un correo a todos los usuarios o sólo a los del grupo seleccionado."
+msgstr ""
+"Enviar um e-mail para todos os usuários ou apenas para o grupo selecionado."
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:230
+msgid "Enviar correo"
+msgstr "Enviar e-mail"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:288
+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 ""
+"A senha temporária é usado como uma senha mestre para usuários que precisam "
+"para entrar no log, por isso não é necessário fornecer a senha mestre "
+"original."
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:294
+msgid "Generar"
+msgstr "Gerar"
+
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:4
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:61
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:63
+msgid "Eventos"
+msgstr "Eventos"
+
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:13
+msgid "Guarda las acciones realizadas en la aplicación."
+msgstr "Salve as ações na aplicação."
+
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:21
+msgid "Habilitar log de eventos"
+msgstr "Ativar log de eventos"
+
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:32
+msgid "Habilitar Syslog"
+msgstr "Permitir syslog"
+
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:43
+msgid "Habilitar Syslog Remoto"
+msgstr "Habilitar syslog remoto"
+
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:57
+msgid "Nombre o dirección IP"
+msgstr "Nome ou endereço IP"
+
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:63
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:71
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:33
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:40
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:47
+msgid "Puerto"
+msgstr "Porto"
+
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:2
+msgid "Proxy"
+msgstr "Procuração"
+
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:13
+msgid "Usar Proxy"
+msgstr "Usar proxy"
+
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:27
+msgid "Servidor proxy"
+msgstr "Servidor proxy"
+
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:41
+msgid "Puerto del servidor proxy"
+msgstr "Porta do servidor proxy"
+
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:55
+msgid "Usuario del servidor proxy"
+msgstr "User proxy"
+
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:69
+msgid "Clave del servidor proxy"
+msgstr "Senha servidor proxy"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:4
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:7
+msgid "Sitio"
+msgstr "Local"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:10
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:24
+#: ../../../../inc/themes/material-blue/views/config/info.inc:78
+#: ../../../../inc/themes/material-blue/views/config/info.inc:92
+#: ../../../../inc/themes/material-blue/views/main/install.inc:135
+#: ../../../../inc/themes/material-blue/views/main/install.inc:136
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:19
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:21
+msgid "Idioma"
+msgstr "Idioma"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:15
+msgid ""
+"Establece el idioma global de la aplicación. Es posible establecer un idioma "
+"por usuario en las preferencias."
+msgstr ""
+"Define o idioma global da aplicação. Você pode definir preferências de "
+"idioma do usuário."
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:19
+msgid ""
+"Para mejorar/añadir las traducciones, puede colaborar en https://poeditor."
+"com/join/project/fmlsBuugyv"
+msgstr ""
+"Para melhorar / adicionar traduções, você pode colaborar na https://poeditor."
+"com/join/project/fmlsbuugyv"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:36
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:46
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:32
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:34
+msgid "Tema Visual"
+msgstr "Tema visual"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:41
+msgid ""
+"Establece el tema visual global de la aplicación. Es posible establecer un "
+"tema visual por usuario en las preferencias."
+msgstr ""
+"Define o tema visual geral do aplicativo. Você pode definir um tema visual "
+"para as preferências do usuário."
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:59
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:67
+msgid "Timeout de sesión (s)"
+msgstr "Session timeout (s)"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:77
+msgid "Fuerza para que todas las conexiones sean a través de HTTPS."
+msgstr "Força de modo que todas as ligações são através de https."
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:86
+msgid "Forzar HTTPS"
+msgstr "Forçando https"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:96
+msgid ""
+"Muestra información relativa a la configuración de la aplicación y "
+"rendimiento."
+msgstr "Exibe informações sobre a configuração e desempenho do aplicativo."
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:104
+msgid "Habilitar depuración"
+msgstr "Habilitar a depuração"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:114
+msgid ""
+"En este modo no se puede acceder a la aplicación. Para deshabilitarlo es "
+"necesario modificar el archivo de configuración."
+msgstr ""
+"Neste modo, você não pode acessar o aplicativo. Para desativá-la é "
+"necessário modificar o arquivo de configuração."
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:122
+msgid "Modo mantenimiento"
+msgstr "Modo de manutenção"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:132
+msgid ""
+"Comprobar actualizaciones de la aplicación (sólo para los usuarios "
+"administradores)."
+msgstr "Verifique as atualizações do aplicativo (apenas para administradores)."
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:140
+msgid "Comprobar actualizaciones"
+msgstr "Verificar se há atualizações"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:150
+msgid ""
+"Comprobar si existen notificaciones de seguridad o avisos de sysPass (sólo "
+"para los usuarios administradores)."
+msgstr ""
+"Verifique se há notificações de segurança ou avisos syspass (apenas para "
+"administradores)."
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:158
+msgid "Comprobar notificaciones"
+msgstr "Verifique notificações"
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:8
+msgid "Importar CSV/XML"
+msgstr "Import csv / xml"
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:14
+#: ../../../../inc/themes/material-blue/views/config/import.inc:24
+msgid "Usuario por Defecto"
+msgstr "Usuário Padrão"
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:19
+msgid "Define el usuario por defecto para las cuentas importadas."
+msgstr "Define o usuário padrão para contas importadas."
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:40
+#: ../../../../inc/themes/material-blue/views/config/import.inc:50
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:207
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:217
+msgid "Grupo por Defecto"
+msgstr "Grupo padrão"
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:45
+msgid "Define el grupo por defecto para las cuentas importadas."
+msgstr "Define o grupo padrão para contas importadas."
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:74
+msgid "Soltar archivo aquí o click para seleccionar"
+msgstr "Gota arquivo aqui ou clique para seleccionar"
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:102
+msgid ""
+"Permite realizar la importación de Cuentas, Categorías y Clientes desde "
+"archivos XML y CSV."
+msgstr ""
+"Ele permite a importação de Contas, Categorias e Clientes de XML e CSV."
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:104
+msgid ""
+"Los formatos de archivos XML soportados son: sysPass, KeePass y KeePassX"
+msgstr "Formatos de arquivos xml suportados são: sysPass, KeePass e KeePassX"
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:106
+msgid ""
+"Arrastar el archivo a importar a la zona indicada o hacer click sobre la "
+"flecha."
+msgstr ""
+"Arraste o arquivo a ser importado para a área indicada ou clique na seta."
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:108
+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 para arquivos ou keepassx, o nome do cliente será igual ou keepassx "
+"keepass ea categoria igual ao nome dos grupos."
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:110
+msgid "La importación de archivos CSV se realiza con el siguiente formato:"
+msgstr "A importação de arquivos CSV é feito com o seguinte formato:"
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:112
+msgid ""
+"\"nombre_de_cuenta\";\"cliente\";\"categoría\";\"url\";\"usuario\";\"clave\";"
+"\"notas\""
+msgstr ""
+"\"Account_name\";\"cliente\";\"categoria\"; \"url\"; \"usuário\"; \"senha\"; "
+"\"notas\""
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:114
+msgid ""
+"En todos los casos, si el cliente o la categoría no están creados, se crean "
+"automáticamente."
+msgstr ""
+"Em todos os casos, se o cliente ou categoria não são criados, eles são "
+"criados automaticamente."
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:121
+msgid "XML"
+msgstr "Xml"
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:127
+#: ../../../../inc/themes/material-blue/views/config/import.inc:142
+msgid "Clave de Importación"
+msgstr "Import key"
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:132
+msgid "Sólo es necesaria para archivos XML de sysPass encriptados."
+msgstr "É necessário apenas para arquivos xml criptografados syspass."
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:153
+msgid ""
+"Sólo es necesaria para archivos XML de sysPass con clave maestra distinta de "
+"la actual."
+msgstr ""
+"É necessário apenas para arquivos xml syspass com diferentes senha mestre da "
+"corrente."
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:170
+msgid "CSV"
+msgstr "Csv"
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:176
+#: ../../../../inc/themes/material-blue/views/config/import.inc:191
+msgid "Delimitador CSV"
+msgstr "Csv delimitador"
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:181
+msgid "Sólo es necesario para archivos CSV."
+msgstr "Você precisa somente de arquivos csv."
+
+#: ../../../../inc/themes/material-blue/views/config/info.inc:5
+msgid "Información de la Aplicación"
+msgstr "Informações sobre a aplicação"
+
+#: ../../../../inc/themes/material-blue/views/config/info.inc:11
+#: ../../../../inc/themes/material-blue/views/config/info.inc:14
+msgid "Versión sysPass"
+msgstr "Versão syspass"
+
+#: ../../../../inc/themes/material-blue/views/config/info.inc:21
+#: ../../../../inc/themes/material-blue/views/config/info.inc:24
+msgid "Base de Datos"
+msgstr "Base de dados"
+
+#: ../../../../inc/themes/material-blue/views/config/info.inc:35
+#: ../../../../inc/themes/material-blue/views/config/info.inc:38
+msgid "PHP"
+msgstr "Php"
+
+#: ../../../../inc/themes/material-blue/views/config/info.inc:42
+msgid "Extensiones"
+msgstr "Extensões"
+
+#: ../../../../inc/themes/material-blue/views/config/info.inc:44
+msgid "Memoria Usada"
+msgstr "Memória usada"
+
+#: ../../../../inc/themes/material-blue/views/config/info.inc:49
+msgid "OP Cache"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/info.inc:68
+#: ../../../../inc/themes/material-blue/views/config/info.inc:71
+msgid "Copia de Configuración"
+msgstr "Configurações de cópia"
+
+#: ../../../../inc/themes/material-blue/views/config/info.inc:83
+msgid "Indica si el idioma se encuentra disponible"
+msgstr "Ele indica se o idioma está disponível"
+
+#: ../../../../inc/themes/material-blue/views/config/info.inc:87
+msgid ""
+"Si no está instalado, es necesario instalar las locales en el sistema "
+"operativo. Más información en Wiki."
+msgstr ""
+"Se ele não estiver instalado, é necessário instalar no sistema operacional "
+"local. Mais informações sobre wiki."
+
+#: ../../../../inc/themes/material-blue/views/config/info.inc:99
+#: ../../../../inc/themes/material-blue/views/config/info.inc:102
+msgid "Plugins Cargados"
+msgstr "Plugins carregados"
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:22
+msgid "Habilita de autentificación mediante servidor LDAP."
+msgstr "Permite a autenticação usando o servidor ldap."
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:26
+msgid "Este método utilizará MySQL en caso de fallo."
+msgstr "Este método irá usar o mysql em caso de falha."
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:36
+msgid "Habilitar LDAP"
+msgstr "Ativar o ldap"
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:46
+msgid "Habilita el modo de conexión con LDAP de Active Directory."
+msgstr "Ativa o modo de conexão ldap com o active directory."
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:56
+msgid "Active Directory"
+msgstr "Active directory"
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:67
+msgid "Nombre o dirección IP del servidor de LDAP."
+msgstr "Nome ou endereço ip do servidor ldap."
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:71
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:102
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:153
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:187
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:111
+msgid "Ejemplos:"
+msgstr "Exemplos:"
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:93
+msgid "Usuario de conexión"
+msgstr "De conexão do usuário"
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:98
+msgid "Usuario para conectar con el servicio de LDAP."
+msgstr "Do usuário para se conectar ao serviço LDAP."
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:123
+msgid "Clave de conexión"
+msgstr "Key connection"
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:128
+msgid "Clave del usuario de conexión a LDAP."
+msgstr "Conexão ldap senha de usuário."
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:144
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:168
+msgid "Base de búsqueda"
+msgstr "Base de pesquisa"
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:149
+msgid "Base en la que realizar la búsqueda de usuarios de LDAP."
+msgstr "Com base no que o usuário busca ldap."
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:179
+msgid ""
+"Grupo de LDAP al que debe de pertenecer el usuario para permitir el acceso."
+msgstr "Grupo ldap ao qual o usuário deve pertencer a permitir o acesso."
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:183
+msgid "Este grupo debe de estar ubicado en la base de búsquedas de LDAP."
+msgstr "Esse grupo deve estar localizado na base de pesquisa ldap."
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:212
+msgid ""
+"Define el grupo de usuarios por defecto para los nuevos usuarios de LDAP."
+msgstr "Define o grupo de usuários padrão para novos usuários do ldap."
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:231
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:241
+msgid "Perfil por Defecto"
+msgstr "Perfil padrão"
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:236
+msgid ""
+"Define el perfil de usuarios por defecto para los nuevos usuarios de LDAP."
+msgstr "Define o perfil de usuário padrão para novos usuários do ldap."
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:255
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:258
+msgid "Resultados"
+msgstr "Resultados"
+
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:21
+msgid "Habilitar notificaciones de correo"
+msgstr "Ativar notificações de correio"
+
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:58
+msgid "Habilitar Autentificación"
+msgstr "Habilitar a autenticação"
+
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:90
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:93
+msgid "Seguridad"
+msgstr "Segurança"
+
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:96
+msgid "Deshabilitada"
+msgstr "Desativado"
+
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:106
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:114
+msgid "Dirección de correo de envío"
+msgstr "E-mail para envio"
+
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:124
+msgid ""
+"Habilita que los usuarios puedan solicitar modificaciones o acceso a las "
+"cuentas sin permisos."
+msgstr ""
+"Ele permite aos usuários solicitar modificações ou acesso a contas sem "
+"permissão."
+
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:133
+msgid "Habilitar peticiones por correo"
+msgstr "Ativar solicitações de email"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:20
+msgid ""
+"Habilita la opción de añadir un enlace a Wiki externa para los resultados de "
+"la búsqueda."
+msgstr ""
+"Habilitar a opção de adicionar um link para um wiki externo para resultados "
+"de pesquisa."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:30
+msgid "Habilitar enlaces Wiki"
+msgstr "Activar ligações wiki"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:36
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:63
+msgid "URL de búsqueda Wiki"
+msgstr "Pesquisa wiki url"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:41
+msgid "URL que utiliza la wiki para realizar una búsqueda de una página."
+msgstr "Url usando o wiki para procurar em uma página."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:45
+msgid "Como parámetro se utiliza el nombre del cliente."
+msgstr "Como o parâmetro nome do cliente é usado."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:49
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:82
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:163
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:190
+msgid "Ejemplo:"
+msgstr "Exemplo:"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:69
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:96
+msgid "URL de página en Wiki"
+msgstr "Url da página wiki"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:74
+msgid "URL que utiliza la wiki para acceder a los detalles de una página."
+msgstr "Você está usando o url wiki para acessar os detalhes de uma página."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:78
+msgid ""
+"El nombre de la cuenta se utiliza como parámetro de la variable de búsqueda "
+"de la Wiki."
+msgstr ""
+"O nome da conta é usada como um parâmetro da pesquisa variável do wiki."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:102
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:116
+msgid "Prefijo para nombre de cuenta"
+msgstr "Nome da conta de prefixo"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:107
+msgid ""
+"Prefijo para determinar qué cuentas tienen un enlace a una página de la Wiki."
+msgstr ""
+"Prefixo para determinar quais contas têm um link para uma página na wiki."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:124
+msgid "DokuWiki API"
+msgstr "Dokuwiki api"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:134
+msgid ""
+"Habilita la conexión a la API XML-RPC de DokuWiki para los enlaces Wiki."
+msgstr "Permite a conexão à api xml-rpc para links dokuwiki wiki."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:137
+msgid ""
+"Para que esta característica funcione, es necesario habilitar los enlaces "
+"Wiki para el filtrado de cuentas."
+msgstr ""
+"Para que esse recurso funcione, você deve habilitar ligações wiki para "
+"contas de filtragem."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:147
+msgid "Habilitar API de DokuWiki"
+msgstr "Ativar api dokuwiki"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:154
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:175
+msgid "URL API"
+msgstr "Api url"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:159
+msgid "URL de la API de DokuWiki."
+msgstr "Api url dokuwiki."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:181
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:203
+msgid "URL Base"
+msgstr "Url base"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:186
+msgid "URL base de DokuWiki."
+msgstr "Dokuwiki url base."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:214
+msgid "Usuario para conectar a la API de DokuWiki."
+msgstr "Do usuário para se conectar à API DokuWiki."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:242
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:258
+msgid "Namespace"
+msgstr "Namespace"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:247
+msgid "Namespace utilizado para buscar las páginas."
+msgstr "Namespace usado para procurar as páginas."
+
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:22
+msgid "Fecha / Hora"
+msgstr "Data / hora"
+
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:25
+msgid "Nivel"
+msgstr "Nível"
+
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:28
+msgid "Evento"
+msgstr "Evento"
+
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:34
+msgid "IP"
+msgstr "Ip"
+
+#: ../../../../inc/themes/material-blue/views/grid/datagrid-nav-full.inc:11
+msgid "Filtro ON"
+msgstr "Filtro ligado"
+
+#: ../../../../inc/themes/material-blue/views/grid/datatabs-grid.inc:102
+msgid "Eliminar Seleccionados"
+msgstr "Remover selecionados"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:26
+msgid "Nombre del campo"
+msgstr "Nome do campo"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:57
+msgid "Texto Ayuda"
+msgstr "Texto de ajuda"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:63
+msgid "Ayuda del campo"
+msgstr "Suporte de campo"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:74
+msgid "Obligatorio"
+msgstr "Obrigatório"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:25
+msgid "Nombre del grupo"
+msgstr "Nome do grupo"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:38
+msgid "Descripción del grupo"
+msgstr "Descrição do grupo"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:20
+msgid "Nombre del plugin"
+msgstr "Nome do plugin"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:32
+msgid "Versión del plugin"
+msgstr "Versão do plugin"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:37
+msgid "Versión Compatible"
+msgstr "Versão compatível"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:44
+msgid "Versión de sysPass compatible"
+msgstr "Versão suportada syspass"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:49
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:25
+msgid "Autor"
+msgstr "Autor"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:56
+msgid "Autor del plugin"
+msgstr "Autor do plugin"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:25
+msgid "Nombre del perfil"
+msgstr "Nome do perfil"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:40
+msgid "Crear nueva cuenta"
+msgstr "Criar uma nova conta"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:40
+msgid "Crear"
+msgstr "Criar"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:47
+msgid "Ver detalles de cuenta"
+msgstr "Ver detalhes da conta"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:47
+msgid "Ver"
+msgstr "Ver"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:54
+msgid "Ver clave de cuenta"
+msgstr "Veja senha de conta"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:61
+msgid "Ver historial de cuenta"
+msgstr "Histórico da conta ver"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:68
+msgid "Editar cuenta"
+msgstr "Editar conta"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:75
+msgid "Editar clave de cuenta"
+msgstr "Editar conta-senha"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:75
+msgid "Editar Clave"
+msgstr "Editar key"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:82
+msgid "Eliminar cuenta"
+msgstr "Excluir a conta"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:89
+msgid "Ver archivos de cuenta"
+msgstr "Visualizar arquivos de contas"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:96
+msgid "Publicar enlace a cuenta"
+msgstr "Link para a conta de pós"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:96
+msgid "Publicar Enlace"
+msgstr "Link do post"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:103
+msgid "Crear cuenta privada"
+msgstr "Criar uma conta privada"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:110
+msgid "Crear cuenta privada para grupo"
+msgstr "Criar conta particular para o grupo"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:117
+msgid "Asignar permisos"
+msgstr "Atribuir permissões"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:130
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:132
+msgid "Gestión"
+msgstr "Gestão"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:140
+msgid "Gestión de usuarios"
+msgstr "Gerenciamento de usuários"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:147
+msgid "Gestión de grupos"
+msgstr "Grupo de gestão"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:154
+msgid "Gestión de perfiles"
+msgstr "Gestão de perfis"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:161
+msgid "Gestión de categorías"
+msgstr "Gestão de categorias"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:168
+msgid "Gestión de clientes"
+msgstr "Gestão de clientes"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:175
+msgid "Gestión de campos personalizados"
+msgstr "Gerenciando campos personalizados"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:182
+msgid "Gestión de autorizaciones API"
+msgstr "Autorização api de gerenciamento"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:189
+msgid "Gestión de enlaces"
+msgstr "Gerenciamento de link"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:196
+msgid "Gestión de cuentas"
+msgstr "Gerenciamento de contas"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:210
+msgid "Gestión de etiquetas"
+msgstr "Gerenciamento de tags"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:233
+msgid "Opciones de encriptación"
+msgstr "Opções de criptografia"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:240
+msgid "Realizar copia de seguridad y exportar"
+msgstr "Backup e exportação"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:240
+msgid "Backup"
+msgstr "Backup"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:247
+msgid "Realizar importación de cuentas"
+msgstr "Execute conta de importação"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:253
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:255
+msgid "Otros"
+msgstr "Outros"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:263
+msgid "Ver log de eventos"
+msgstr "Log de eventos ver"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:270
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:272
+msgid "Usado por"
+msgstr "Usado por"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:59
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:61
+msgid "Hash"
+msgstr "De hash"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:67
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:69
+msgid "Uso"
+msgstr "Uso"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/tags.inc:23
+msgid "Nombre de la etiqueta"
+msgstr "Name tag"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:42
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:141
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:105
+msgid "Opciones"
+msgstr "Opções"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:45
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:49
+msgid "Regenerar Autorización"
+msgstr "Autorizar novamente"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:55
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:57
+msgid "Token"
+msgstr "Símbolo"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:31
+msgid "Nombre de usuario completo"
+msgstr "Nome completo do usuário"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:45
+msgid "Login de inicio de sesión"
+msgstr "Login login"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:94
+msgid "Dirección de correo"
+msgstr "Endereço para correspondência"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:145
+msgid "Administrador de la aplicación"
+msgstr "Aplicativo gerenciador"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:152
+msgid "Administrador de cuentas"
+msgstr "Gerente de contas"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:167
+msgid "Forzar cambio de clave"
+msgstr "Forçar mudança de senha"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:181
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:183
+msgid "Entradas"
+msgstr "Acessos"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:190
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:192
+msgid "Último Acceso"
+msgstr "Conectado última"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:208
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:210
+msgid "Fecha Clave Maestra"
+msgstr "Data da senha mestre"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:11
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:69
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:72
+msgid "Salir"
+msgstr "Saída"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:25
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:56
+msgid "Preferencias de usuario"
+msgstr "Preferências do usuário"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:34
+#, fuzzy, php-format
+msgid "Hay %d notificaciones pendientes"
+msgstr "Há% notificações pendentes d"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:41
+msgid "No hay no hay notificaciones pendientes"
+msgstr "Não há notificações pendentes"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:74
+msgid "Indica si la conexión utiliza HTTPS."
+msgstr "Indica se a conexão usa HTTPS."
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:74
+msgid ""
+"Las claves de formularios enviados se encriptan mediante PKI, el resto de "
+"datos no."
+msgstr "Os envios de senhas são criptografados, os outros dados não."
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:79
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:82
+msgid "Demo"
+msgstr "Programa demonstrativo"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:90
+msgid "Ayuda :: FAQ :: Changelog"
+msgstr "Ajuda :: FAQ :: Mudanças"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:94
+msgid "Un proyecto de cygnux.org"
+msgstr "Um projecto de cygnux.org"
+
+#: ../../../../inc/themes/material-blue/views/main/body-start.inc:4
+msgid "Javascript es necesario para el correcto funcionamiento"
+msgstr "Javascript é necessário para o funcionamento adequado"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:9
+#, php-format
+msgid "Instalación %s"
+msgstr "Instalando %s"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:19
+msgid "Admin de sysPass"
+msgstr "Syspass de admin"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:27
+msgid "Usuario administrador de sysPass"
+msgstr "Syspass user manager"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:35
+msgid "Login del usuario administrador de sysPass"
+msgstr "Administrador syspass login do usuário"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:67
+msgid "Configurar BBDD"
+msgstr "Definir bbdd"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:77
+msgid "Usuario acceso BBDD"
+msgstr "Bbdd acesso do usuário"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:85
+msgid "Usuario con permisos de administrador de MySQL"
+msgstr "Usuário com permissões de administrador mysql"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:93
+msgid "Clave acceso BBDD"
+msgstr "Bbdd senha de acesso"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:102
+msgid "Nombre BBDD para sysPass"
+msgstr "Nome bbdd para syspass"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:110
+msgid "Nombre de la base de datos para sysPass"
+msgstr "Syspass banco de dados nome"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:119
+msgid "Servidor BBDD para sysPass"
+msgstr "Servidor de banco de dados para syspass"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:127
+msgid "Nombre del servidor para instalar la base de datos de sysPass"
+msgstr "Servidor de nomes para instalar o banco de dados syspass"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:145
+msgid "Modo Hosting"
+msgstr "Modo de hospedagem"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:152
+msgid "No crea ni verifica los permisos del usuario sobre la BBDD"
+msgstr "Não cria nem verificar as permissões do usuário na bbdd"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:166
+#: ../../../../inc/themes/material-blue/views/main/install.inc:168
+msgid "Instalar"
+msgstr "Instalar"
+
+#: ../../../../inc/themes/material-blue/views/main/login.inc:38
+msgid "Clave Anterior"
+msgstr "Tecla anterior"
+
+#: ../../../../inc/themes/material-blue/views/main/login.inc:74
+msgid "¿Olvidó su clave?"
+msgstr "Esqueceu sua senha?"
+
+#: ../../../../inc/themes/material-blue/views/main/login.inc:81
+msgid "Aplicación actualizada correctamente"
+msgstr "Aplicação atualizada com sucesso"
+
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:7
+msgid "Solicitud de Cambio de Clave"
+msgstr "Solicitação de troca de senha"
+
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:25
+msgid "Email del Usuario"
+msgstr "E-mail do usuário"
+
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:55
+msgid "Volver a iniciar sesión"
+msgstr "Voltar para o login"
+
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:61
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:63
+msgid "Solicitar"
+msgstr "Pedido"
+
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:67
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:69
+msgid "Cambiar"
+msgstr "Mudança"
+
+#: ../../../../inc/themes/material-blue/views/main/update.inc:21
+msgid "Actualizado"
+msgstr "Atualizado"
+
+#: ../../../../inc/themes/material-blue/views/main/update.inc:27
+msgid "Error al comprobar actualizaciones"
+msgstr "Falha ao verificar se há atualizações"
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:4
+#, php-format
+msgid "Actualización %s"
+msgstr "Atualizar %s"
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:9
+msgid "Actualización de BBDD"
+msgstr "Atualização BBDD"
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:15
+msgid "Código de Seguridad"
+msgstr "Código de segurança"
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:23
+msgid ""
+"Este código se encuentra en el archivo de configuración de sysPass con la "
+"etiqueta \"upgradeKey\""
+msgstr ""
+"Esse código está no syspass arquivo de configuração com etiqueta \"upgradekey"
+"\""
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:28
+msgid "He realizado una copia de seguridad completa de sysPass"
+msgstr "Eu fiz um backup completo do syspass"
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:40
+msgid "Por favor espere mientras el proceso se ejecuta"
+msgstr "Aguarde enquanto o processo é executado"
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:50
+msgid "Iniciar Actualización"
+msgstr "Iniciar a actualização"
+
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:108
+msgid "Notificación global"
+msgstr "Notificação global"
+
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:111
+msgid "Global"
+msgstr "Global"
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:92
+msgid ""
+"Ordena los resultados de búsqueda por el número de visitas de las cuentas."
+msgstr "Organizar os resultados da pesquisa pelo número de visitas das contas."
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:100
+msgid "Ordenar resultados por visitas"
+msgstr "Ordenar por visitas"
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:110
+msgid "Mostrar una barra de navegación superior en las búsquedas."
+msgstr "Exibir um top pesquisas barra de navegação."
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:118
+msgid "Barra de navegación superior"
+msgstr "Barra de navegação superior"
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:128
+msgid ""
+"Mostrar las acciones ocultas para los elementos de la búsqueda de cuentas."
+msgstr "Mostrar ações ocultas para conta de itens de busca."
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:137
+msgid "Mostrar Acciones Ocultas"
+msgstr "Mostrar partes escondidas"
+
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:2
+msgid "Ver Wiki"
+msgstr "Veja wiki"
+
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:10
+#, php-format
+msgid "Resultados de búsqueda de '%s'"
+msgstr "Resultados da pesquisa '%s'"
+
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:13
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:23
+msgid "Página"
+msgstr "Página"
+
+#~ msgid "Código correcto"
+#~ msgstr "Código correto"
+
+#~ msgid "Código incorrecto"
+#~ msgstr "Código incorreto"
+
+#~ msgid "Id inválido"
+#~ msgstr "ID inválido"
+
+#~ msgid "Login de usuario duplicado"
+#~ msgstr "Login do usuário duplicado"
+
+#~ msgid "Email de usuario duplicado"
+#~ msgstr "E-mail de usuário duplicado"
+
+#~ msgid "Grupo en uso por:"
+#~ msgstr "Usuário do grupo:"
+
+#~ msgid "Error al crear el perfil"
+#~ msgstr "Falha ao criar perfil"
+
+#~ msgid "Error al actualizar el perfil"
+#~ msgstr "Falha ao atualizar perfil"
+
+#~ msgid "Perfil en uso por:"
+#~ msgstr "Perfil em uso por:"
+
+#~ msgid "Error al eliminar el perfil"
+#~ msgstr "Erro ao excluir perfil"
+
+#~ msgid "Usuario o acción no indicado"
+#~ msgstr "Ação não indicada"
+
+#~ msgid "Realizar Exportación"
+#~ msgstr "Exportar"
+
+#~ msgid "Error de conexión a LDAP"
+#~ msgstr "Falha de conexão ldap"
+
+#~ msgid "Servidor Login"
+#~ msgstr "Servidor de logon"
+
+#~ msgid "Usuario/Clave incorrectos"
+#~ msgstr "Usuário / senha incorreta"
+
+#~ msgid "El archivo es mayor de "
+#~ msgstr "O arquivo é maior do que"
+
+#~ msgid "Confirmar la importación de cuentas"
+#~ msgstr "Confirmar contas importadores"
+
+#~ msgid "Es necesario un usuario de conexión"
+#~ msgstr "Uma conexão do usuário é necessário"
+
+#~ msgid "Es necesaria una clave de conexión"
+#~ msgstr "Uma senha de conexão é necessária"
+
+#~ msgid "Es necesario el nombre de la BBDD"
+#~ msgstr "O nome do db é necessário"
+
+#~ msgid "Es necesario un nombre de host"
+#~ msgstr "Um nome de host é necessária"
+
+#~ msgid ""
+#~ "No se ha podido realizar la solicitud. Consulte con el administrador."
+#~ msgstr "Não foi possível fazer a solicitação. Consulte seu gerente."
+
+#~ msgid "Error al enviar la solicitud"
+#~ msgstr "Erro de solicitação de envio"
+
+#~ msgid "Ayuda Parámetros"
+#~ msgstr "Parâmetros ajuda"
+
+#~ msgid "ERROR: Error en la operación."
+#~ msgstr "Erro: a operação falhou."
+
+#~ msgid "Fin"
+#~ msgstr "Final"
+
+#~ msgid "Denegado acceso a"
+#~ msgstr "Acesso negado a"
+
+#~ msgid "Token de autorización"
+#~ msgstr "Autorização símbolo"
+
+#~ msgid "Acción a realizar"
+#~ msgstr "Ação a ser tomada"
+
+#~ msgid "Clave de usuario (opcional)"
+#~ msgstr "Senha do usuário (opcional)"
+
+#~ msgid "Cadena a buscar"
+#~ msgstr "Sequência de pesquisa"
+
+#~ msgid "Numero de cuentas a mostar en la búsqueda"
+#~ msgstr "Número de contas no mostrar pesquisa"
+
+#~ msgid "Item a devolver"
+#~ msgstr "Item para retornar"
+
+#~ msgid "No es posible crear el directorio de backups"
+#~ msgstr "Você não pode criar cópias de segurança de diretório"
+
+#~ msgid "Categoría en uso por:"
+#~ msgstr "Em uso por categoria:"
+
+#~ msgid "Modificar Categoría"
+#~ msgstr "Mudança categoria"
+
+#~ msgid "No es posible escribir el archivo de configuración"
+#~ msgstr "Não é possível gravar o arquivo de configuração"
+
+#~ msgid "Compruebe los permisos del directorio \"config\""
+#~ msgstr "Verifique as permissões do diretório \"config\""
+
+#~ msgid "Error procesando línea %s"
+#~ msgstr "Erro linha de processamento% s"
+
+#~ msgid "Cuenta importada: %s"
+#~ msgstr "Conta importado:% s"
+
+#~ msgid "Cliente en uso por:"
+#~ msgstr "Uso do cliente:"
+
+#~ msgid "Error al añadir los usuarios del grupo"
+#~ msgstr "Grupo de erro adicionar usuários"
+
+#~ msgid "Error al actualizar los usuarios del grupo"
+#~ msgstr "Falha ao atualizar o grupo usuários"
+
+#~ msgid "Tipo mime no soportado"
+#~ msgstr "Tipo mime não suportado"
+
+#~ msgid "Sesion"
+#~ msgstr "Sessão"
+
+#~ msgid "El usuario de MySQL ya existe"
+#~ msgstr "O usuário mysql já existe"
+
+#~ msgid "Indique un nuevo usuario o elimine el existente"
+#~ msgstr "Introduza um novo usuário ou excluir o existente"
+
+#~ msgid "Error al establecer permisos de la BBDD"
+#~ msgstr "Falha ao definir permissões bbdd"
+
+#~ msgid "Faltan parámetros"
+#~ msgstr "Parâmetros que faltam"
+
+#~ msgid "La versión no es compatible"
+#~ msgstr "A versão não é compatível"
+
+#~ msgid "Actualice a la última versión de phpPMS"
+#~ msgstr "Atualizar para a versão mais recente do phppms"
+
+#~ msgid "Error al obtener la configuración"
+#~ msgstr "Falha ao obter a configuração"
+
+#~ msgid "Error al vaciar tabla"
+#~ msgstr "Falha ao liberar a tabela"
+
+#~ msgid "Usuario actual no es administrador de la aplicación"
+#~ msgstr "Usuário atual não é um administrador do aplicativo"
+
+#~ msgid "No es posible crear el cliente"
+#~ msgstr "Você não pode criar o cliente"
+
+#~ msgid "Contacte con el desarrollador"
+#~ msgstr "Entre em contato com o desenvolvedor"
+
+#~ msgid "Importar Clientes"
+#~ msgstr "Clientes de importação"
+
+#~ msgid "Registros"
+#~ msgstr "Registros"
+
+#~ msgid "Error al obtener los clientes"
+#~ msgstr "Falha ao obter clientes"
+
+#~ msgid "Error al obtener cuentas"
+#~ msgstr "Falha ao obter contas"
+
+#~ msgid "Error al migrar cuenta"
+#~ msgstr "Falha ao migrar conta"
+
+#~ msgid "Error al obtener los grupos de cuentas"
+#~ msgstr "Falha ao obter os grupos de contas"
+
+#~ msgid "Importar Grupos de Cuentas"
+#~ msgstr "Grupos de importação conta"
+
+#~ msgid "Error al crear grupos de cuentas"
+#~ msgstr "Grupos de contas erro ao criar"
+
+#~ msgid "Error al obtener el historico de cuentas"
+#~ msgstr "Falha ao obter os relatos históricos"
+
+#~ msgid "Importar Histórico de Cuentas"
+#~ msgstr "Import contas história"
+
+#~ msgid "Error al crear historico de cuentas"
+#~ msgstr "Erro ao criar relatos históricos"
+
+#~ msgid "Error al obtener los archivos de cuentas"
+#~ msgstr "Arquivos de contas erro ao obter"
+
+#~ msgid "Importar Archivos de Cuentas"
+#~ msgstr "Importar contas de arquivos"
+
+#~ msgid "Error al crear archivos de cuentas"
+#~ msgstr "Arquivos de contas erro ao criar"
+
+#~ msgid "Error al obtener las categorías de cuentas"
+#~ msgstr "Falha ao obter as categorias de contas"
+
+#~ msgid "Importar Categorías de Cuentas"
+#~ msgstr "Categorias importar contas"
+
+#~ msgid "Error al crear categorías de cuentas"
+#~ msgstr "Erro ao criar categorias de contas"
+
+#~ msgid "Importar Usuarios"
+#~ msgstr "Usuários de importação"
+
+#~ msgid "Error al crear usuarios"
+#~ msgstr "Usuários erro ao criar"
+
+#~ msgid "Error al obtener los grupos de usuarios"
+#~ msgstr "Falha ao obter os grupos de usuários"
+
+#~ msgid "Importar Grupos de Usuarios"
+#~ msgstr "Grupos de importação de usuários"
+
+#~ msgid "Error al crear los grupos de usuarios"
+#~ msgstr "Grupos de usuários erro ao criar"
+
+#~ msgid "Importar Configuración"
+#~ msgstr "Configurações de importação"
+
+#~ msgid "Datos de perfil incorrectos"
+#~ msgstr "Dados de perfil incorreta"
+
+#~ msgid "Modificar Perfil"
+#~ msgstr "Modificar perfil"
+
+#~ msgid "No hay categorías para importar"
+#~ msgstr "Não há categorias para importar"
+
+#~ msgid "No hay clientes para importar"
+#~ msgstr "Não há clientes para importar"
+
+#~ msgid "No hay cuentas para importar"
+#~ msgstr "Não há contas para importar"
+
+#~ msgid "Actualización de la Configuración realizada correctamente."
+#~ msgstr "Configurações de atualização feita corretamente."
+
+#~ msgid "Modificar Usuario"
+#~ msgstr "Modificar usuário"
+
+#~ msgid "Migrar Grupos"
+#~ msgstr "Migrar grupos"
+
+#~ msgid "Formato detectado"
+#~ msgstr "Formato detectado"
+
+#~ msgid "Gestión de Categorías"
+#~ msgstr "Categoria gestão"
+
+#~ msgid "Gestión de Clientes"
+#~ msgstr "Gestão de clientes"
+
+#~ msgid "Nuevo estilo visual basado en Material Design Lite by Google"
+#~ msgstr "Estilo visual novo com base no material design lite pelo google"
+
+#~ msgid "Usuarios en múltiples grupos"
+#~ msgstr "Usuários em vários grupos"
+
+#~ msgid "Previsualización de imágenes"
+#~ msgstr "Imagens de visualização"
+
+#~ msgid "Mostrar claves como imágenes"
+#~ msgstr "Mostrar-senha como imagens"
+
+#~ msgid "Campos personalizados"
+#~ msgstr "Campos personalizados"
+
+#~ msgid "API de consultas"
+#~ msgstr "Consulta api"
+
+#~ msgid "Autentificación en 2 pasos"
+#~ msgstr "Autenticação 2-etapa"
+
+#~ msgid "Complejidad de generador de claves"
+#~ msgstr "Complexidade do gerador de senhas"
+
+#~ msgid "Consultas especiales"
+#~ msgstr "Consultas especiais"
+
+#~ msgid "Exportación a XML"
+#~ msgstr "Exportar para xml"
+
+#~ msgid "Clave maestra temporal"
+#~ msgstr "Professor temporário key"
+
+#~ msgid "Importación de cuentas desde sysPass, KeePass, KeePassX y CSV"
+#~ msgstr "Importação de contas de syspass, keepass, keepassx e csv"
+
+#~ msgid "Optimización del código y mayor rapidez de carga"
+#~ msgstr "Otimização de código e carregamento mais rápido"
+
+#~ msgid "Mejoras de seguridad en XSS e inyección SQL"
+#~ msgstr "Melhorias de segurança em xss e sql injection"
+
+#~ msgid "Pulse aquí para acceder"
+#~ msgstr ""
+#~ "Clique aqui para acessar "
+
+#~ msgid "Gestión de Usuarios"
+#~ msgstr "Gerenciamento de usuários"
+
+#~ msgid "Gestión de Grupos"
+#~ msgstr "Grupo de gestão"
+
+#~ msgid "Gestión de Perfiles"
+#~ msgstr "Perfis de gestão"
+
+#~ msgid "Gestión de Autorizaciones API"
+#~ msgstr "Autorização api de gerenciamento"
+
+#~ msgid "Introducir código"
+#~ msgstr "Introduza"
+
+#~ msgid "Verificar"
+#~ msgstr "Verificar"
+
+#~ msgid "Buscar en desplegable o introducir"
+#~ msgstr "Pesquisa drop-down ou digite"
+
+#~ msgid "por"
+#~ msgstr "Por"
+
+#~ msgid "Seleccionar grupos secundarios"
+#~ msgstr "Seleccione auxiliares"
+
+#~ msgid "Seleccionar usuarios"
+#~ msgstr "Selecione usuários"
+
+#~ msgid ""
+#~ "Para mejorar/añadir las traducciones, puede colaborar en http:://"
+#~ "translate.syspass.org"
+#~ msgstr ""
+#~ "Para melhorar / adicionar traduções, você pode colaborar em http :: //"
+#~ "translate.syspass.org"
+
+#~ msgid "Añadir extensión"
+#~ msgstr "Adicionar extensão"
+
+#~ msgid "Eliminar extensión"
+#~ msgstr "Remover extensão"
+
+#~ msgid "Atención"
+#~ msgstr "Atenção"
+
+#~ msgid "Validez"
+#~ msgstr "Validade"
+
+#~ msgid "Seguro"
+#~ msgstr "Seguro"
+
+#~ msgid "Inseguro"
+#~ msgstr "Inseguro"
+
+#~ msgid "nombre_de_cuenta;cliente;categoría;url;usuario;clave;notas"
+#~ msgstr "Account_name, cliente, categoria, url, usuário, senha; notas"
+
+#~ msgid "Importar phpPMS"
+#~ msgstr "Phppms importação"
+
+#~ msgid "Usuario BBDD"
+#~ msgstr "Bbdd usuário"
+
+#~ msgid "Indicar el usuario de conexión a la base de datos de phpPMS."
+#~ msgstr "Indicar a conexão do usuário para os phppms banco de dados."
+
+#~ msgid "Clave BBDD"
+#~ msgstr "Bbdd senha"
+
+#~ msgid "Nombre BBDD"
+#~ msgstr "Nomear bbdd"
+
+#~ msgid "Indicar el nombre de la base de datos de phpPMS."
+#~ msgstr "Indicar o nome das phppms banco de dados."
+
+#~ msgid "Servidor BBDD"
+#~ msgstr "Servidor de db"
+
+#~ msgid "Indicar el servidor de la base de datos de phpPMS."
+#~ msgstr "Indique os phppms banco de dados do servidor."
+
+#~ msgid "Confirmar"
+#~ msgstr "Confirmar"
+
+#~ msgid "Los datos actuales serán borrados (excepto el usuario actual)"
+#~ msgstr "Os dados atuais serão apagados (exceto o usuário atual)"
+
+#~ msgid "Iniciar"
+#~ msgstr "Começo"
+
+#~ msgid "Instalación "
+#~ msgstr "Instalação"
+
+#~ msgid "Crear cuenta de admin de sysPass"
+#~ msgstr "Criar conta de administrador syspass"
+
+#~ msgid "Login de usuario con permisos de administrador de MySQL"
+#~ msgstr "Login do usuário com permissões de administrador mysql"
+
+#~ msgid "Nombre del servidor de la base de datos de sysPass"
+#~ msgstr "Syspass banco de dados servidor de nomes"
+
+#~ msgid "Comprobar conexión con LDAP"
+#~ msgstr "Verifique a conexão com ldap"
+
+#~ msgid "Nuevas Características"
+#~ msgstr "Novas funcionalidades"
+
+#~ msgid "Login del Usuario"
+#~ msgstr "Acesso usuário"
+
+#~ msgid "Nueva Clave"
+#~ msgstr "Nova senha"
+
+#~ msgid "Solicitar cambio de clave"
+#~ msgstr "Solicitar troca de senha"
+
+#~ msgid "Añadir nueva cuenta"
+#~ msgstr "Adicionar nova conta"
+
+#~ msgid "Borrar cuenta"
+#~ msgstr "Excluir a conta"
+
+#~ msgid "Borrar"
+#~ msgstr "Excluir"
+
+#~ msgid "Configuración general"
+#~ msgstr "As definições gerais"
+
+#~ msgid "Cambiar clave maestra"
+#~ msgstr "Trocar senha mestre"
+
+#~ msgid "Realizar copia de seguridad"
+#~ msgstr "Backup"
+
+#~ msgid "No usado"
+#~ msgstr "Não usado"
+
+#~ msgid "Global ON"
+#~ msgstr "Global ligado"
+
+#~ msgid "CPP"
+#~ msgstr "Cpp"
+
+#~ msgid "Autenticación"
+#~ msgstr "Autenticação"
+
+#~ msgid "Autenticación en 2 pasos"
+#~ msgstr "Autenticação 2-etapa"
+
+#~ 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 ""
+#~ "2 permite passos de autenticação requer a introdução de um sinal gerado "
+#~ "por um aplicativo como o google authenticator."
+
+#~ msgid ""
+#~ "Escanee el código QR proporcionado y a continuación introduzca la clave "
+#~ "de 6 dígitos."
+#~ msgstr ""
+#~ "Digitalizar o código qr fornecido e, em seguida, digite a senha de 6 "
+#~ "dígitos."
+
+#~ msgid "Activar"
+#~ msgstr "Ativar"
+
+#~ msgid "Error al obtener el código QR. Inténtelo de nuevo"
+#~ msgstr "Falha ao obter o código qr. Tente de novo"
+
+#~ msgid "Código"
+#~ msgstr "Código"
+
+#~ msgid ""
+#~ "Una vez activada, sólo es posible acceder si se dispone del dispositivo "
+#~ "generador de códigos asociado."
+#~ msgstr ""
+#~ "Uma vez ativado, você só pode acessar se gerador disponível associado "
+#~ "códigos de dispositivo."
+
+#~ msgid "Cambiar clave de usuario"
+#~ msgstr "Alterar senha"
+
+#~ msgid "Introducir Código de Seguridad"
+#~ msgstr "Digite o código de segurança"
+
+#~ msgid "Admin. Aplicación"
+#~ msgstr "Admin. Aplicação"
+
+#~ msgid "Admin. Cuentas"
+#~ msgstr "Admin. Contas"
+
+#~ msgid "Añadir filtro"
+#~ msgstr "Adicionar filtro"
+
+#~ msgid "Eliminar filtro"
+#~ msgstr "Retire o filtro"
+
+#~ msgid "> Usar texto y crear nuevo"
+#~ msgstr "> use texto e criar novos"
+
+#~ msgid "Seleccionar o escribir para crear uno nuevo"
+#~ msgstr "Selecione ou digite para criar um novo"
+
+#~ msgid "Clave (Repetir)"
+#~ msgstr "Key (repetição)"
+
+#~ msgid "Archivo actualizado"
+#~ msgstr "Arquivo atualizado"
+
+#~ msgid "Usuarios importados %d/%d"
+#~ msgstr "Os usuários importados% d /% d"
+
+#~ msgid "Errores: %d"
+#~ msgstr "Erros:% d"
+
+#~ msgid "Denegado acceso a %s"
+#~ msgstr "Acesso negado a% s"
+
+#~ msgid "Eliminar Plugin"
+#~ msgstr "Remover plugin"
+
+#~ msgid "Modificar Plugin"
+#~ msgstr "Modificar plugin"
+
+#~ msgid "Nuevo Enlace"
+#~ msgstr "Novo link"
+
+#~ msgid "Creando usuario '%s (%s)'"
+#~ msgstr "Criando o usuário '% s (% s)'"
+
+#~ msgid "Buscar cuentas con la etiqueta 'tag_name'"
+#~ msgstr "Pesquisa contas tagged 'tag_name'"
+
+#~ msgid "Tiempo en minutos"
+#~ msgstr "Tempo em minutos"
+
+#~ msgid "No hay notificaciones pendientes"
+#~ msgstr "Não há notificações pendentes"
+
+#~ msgid "Registro en uso"
+#~ msgstr "Registro atual"
+
+#~ msgid "Sólo para administradores de la aplicación"
+#~ msgstr "Somente administradores de aplicativo"
+
+#~ msgid "Solo Admins"
+#~ msgstr "Somente administradores"
+
+#~ msgid "Aviso Caducidad"
+#~ msgstr "Aviso de expiração"
+
+#~ msgid "El código 2FA se ha de restablecer en %d días"
+#~ msgstr "O código 2fa deve ser restaurada em %d dias"
+
+#~ msgid ""
+#~ "El código 2FA ha caducado. Es necesario restablecerlo desde las "
+#~ "preferencias"
+#~ msgstr "O código 2fa deve ser restaurada em %d dias"
+
+#~ msgid "Días Caducidad"
+#~ msgstr "Dias de validade"
+
+#~ msgid "Días"
+#~ msgstr "Dias"
diff --git a/inc/locales/ru_RU/LC_MESSAGES/messages.mo b/inc/locales/ru_RU/LC_MESSAGES/messages.mo
index 2bf0dff8..60bf51f4 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 e54b0314..c43018b5 100644
--- a/inc/locales/ru_RU/LC_MESSAGES/messages.po
+++ b/inc/locales/ru_RU/LC_MESSAGES/messages.po
@@ -1,2067 +1,2871 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-#
-# Translators:
-# Rubén D. , 2012-2015
msgid ""
msgstr ""
"Project-Id-Version: sysPass\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-12-13 18:34+0100\n"
-"PO-Revision-Date: 2015-12-14 12:37+0300\n"
-"Last-Translator: Alexander Titov\n"
-"Language-Team: nuxsmin@syspass.org\n"
-"Language: ru_RU\n"
+"POT-Creation-Date: 2017-02-13 00:27+0100\n"
+"PO-Revision-Date: \n"
+"Last-Translator: nuxsmin \n"
+"Language-Team: Alexander Titov,Alex Us\n"
+"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-KeywordsList: _;gettext;gettext_noop\n"
-"X-Poedit-Basepath: .\n"
+"X-Generator: Poedit 1.6.10\n"
"X-Poedit-SourceCharset: UTF-8\n"
-"X-Generator: Poedit 1.8.6\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Poedit-KeywordsList: _;gettext;gettext_noop;__\n"
+"X-Poedit-Basepath: .\n"
"X-Poedit-SearchPath-0: ../../../..\n"
+"X-Poedit-SearchPathExcluded-0: ../../../../inc/Plugins\n"
-#: ../../../../ajax/ajax_2fa.php:37 ../../../../ajax/ajax_accountSave.php:42
-#: ../../../../ajax/ajax_appMgmtSave.php:43 ../../../../ajax/ajax_backup.php:41
-#: ../../../../ajax/ajax_checkLdap.php:42
-#: ../../../../ajax/ajax_configSave.php:44 ../../../../ajax/ajax_files.php:42
-#: ../../../../ajax/ajax_files.php:57 ../../../../ajax/ajax_getFiles.php:47
-#: ../../../../ajax/ajax_import.php:50 ../../../../ajax/ajax_migrate.php:46
-#: ../../../../ajax/ajax_passReset.php:40 ../../../../ajax/ajax_search.php:42
-#: ../../../../ajax/ajax_sendRequest.php:42
-#: ../../../../ajax/ajax_userPrefsSave.php:43
-msgid "CONSULTA INVÁLIDA"
-msgstr "ОШИБОЧНЫЙ ЗАПРОС"
-
-#: ../../../../ajax/ajax_2fa.php:48
-msgid "Código correcto"
-msgstr "Правильный код"
-
-#: ../../../../ajax/ajax_2fa.php:51 ../../../../ajax/ajax_userPrefsSave.php:99
-msgid "Código incorrecto"
-msgstr "Неправильный код"
-
-#: ../../../../ajax/ajax_accountSave.php:36
-#: ../../../../ajax/ajax_appMgmtSave.php:37 ../../../../ajax/ajax_backup.php:35
-#: ../../../../ajax/ajax_checkLdap.php:36
-#: ../../../../ajax/ajax_configSave.php:38 ../../../../ajax/ajax_import.php:36
-#: ../../../../ajax/ajax_migrate.php:36
-#: ../../../../ajax/ajax_sendRequest.php:36
-#: ../../../../ajax/ajax_userPrefsSave.php:37
-#: ../../../../ajax/ajax_viewpass.php:37
-msgid "La sesión no se ha iniciado o ha caducado"
-msgstr "Сессия истекла или ошибка сессии"
-
-#: ../../../../ajax/ajax_accountSave.php:78
-#: ../../../../ajax/ajax_accountSave.php:93
-msgid "Es necesario un nombre de cuenta"
-msgstr "Необходимо имя учетной записи"
-
-#: ../../../../ajax/ajax_accountSave.php:80
-#: ../../../../ajax/ajax_accountSave.php:91
-#: ../../../../ajax/ajax_appMgmtSave.php:329
-msgid "Es necesario un nombre de cliente"
-msgstr "Необходимо имя заказчика"
-
-#: ../../../../ajax/ajax_accountSave.php:82
-#: ../../../../ajax/ajax_accountSave.php:95
-msgid "Es necesario un usuario"
-msgstr "Необходимо имя пользователя"
-
-#: ../../../../ajax/ajax_accountSave.php:84
-#: ../../../../ajax/ajax_accountSave.php:106
-msgid "Es necesaria una clave"
-msgstr "Необходим пароль"
-
-#: ../../../../ajax/ajax_accountSave.php:86
-#: ../../../../ajax/ajax_accountSave.php:97
-msgid "Es necesario una categoría"
-msgstr "Необходима категория"
-
-#: ../../../../ajax/ajax_accountSave.php:101
-#: ../../../../ajax/ajax_accountSave.php:110
-msgid "Id inválido"
-msgstr "Ошибочный ID"
-
-#: ../../../../ajax/ajax_accountSave.php:113
-#: ../../../../ajax/ajax_accountSave.php:263
-#: ../../../../ajax/ajax_appMgmtSave.php:535
-#: ../../../../ajax/ajax_configSave.php:334
-#: ../../../../ajax/ajax_userPrefsSave.php:113 ../../../../api.php:53
-msgid "Acción Inválida"
-msgstr "Ошибочное действие"
-
-#: ../../../../ajax/ajax_accountSave.php:121
-#: ../../../../ajax/ajax_appMgmtSave.php:112
-#: ../../../../ajax/ajax_appMgmtSave.php:149
-#: ../../../../ajax/ajax_backup.php:68
-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:153
-#: ../../../../ajax/ajax_passReset.php:75
-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:137
-msgid "Editar Usuario"
-msgstr "Редактировать пользователя"
-
-#: ../../../../ajax/ajax_appMgmtData.php:67
-#: ../../../../inc/UserBase.class.php:383
-#: ../../../../web/UsersMgmtC.class.php:122
-msgid "Nuevo Usuario"
-msgstr "Создать пользователя"
-
-#: ../../../../ajax/ajax_appMgmtData.php:73
-msgid "Ver Grupo"
-msgstr "Показать группу"
-
-#: ../../../../ajax/ajax_appMgmtData.php:80
-#: ../../../../web/UsersMgmtC.class.php:203
-msgid "Editar Grupo"
-msgstr "Редактировать группу"
-
-#: ../../../../ajax/ajax_appMgmtData.php:86
-#: ../../../../inc/Groups.class.php:152 ../../../../inc/Groups.class.php:253
-#: ../../../../web/UsersMgmtC.class.php:195
-msgid "Nuevo Grupo"
-msgstr "Создать группу"
-
-#: ../../../../ajax/ajax_appMgmtData.php:92
-msgid "Ver Perfil"
-msgstr "Показать профиль"
-
-#: ../../../../ajax/ajax_appMgmtData.php:99
-#: ../../../../web/UsersMgmtC.class.php:268
-msgid "Editar Perfil"
-msgstr "Редактировать профиль"
-
-#: ../../../../ajax/ajax_appMgmtData.php:105
-#: ../../../../inc/ProfileBase.class.php:512
-#: ../../../../web/UsersMgmtC.class.php:253
-msgid "Nuevo Perfil"
-msgstr "Создать профиль"
-
-#: ../../../../ajax/ajax_appMgmtData.php:111
-msgid "Ver Cliente"
-msgstr "Показать заказчика"
-
-#: ../../../../ajax/ajax_appMgmtData.php:118
-#: ../../../../web/AccountsMgmtC.class.php:153
-msgid "Editar Cliente"
-msgstr "Редактировать заказчика"
-
-#: ../../../../ajax/ajax_appMgmtData.php:124
-#: ../../../../inc/Customer.class.php:65
-#: ../../../../web/AccountsMgmtC.class.php:146
-msgid "Nuevo Cliente"
-msgstr "Новый заказчик"
-
-#: ../../../../ajax/ajax_appMgmtData.php:130
-msgid "Ver Categoría"
-msgstr "Показать категорию"
-
-#: ../../../../ajax/ajax_appMgmtData.php:137
-#: ../../../../web/AccountsMgmtC.class.php:95
-msgid "Editar Categoría"
-msgstr "Редактировать категорию"
-
-#: ../../../../ajax/ajax_appMgmtData.php:143
-#: ../../../../inc/Category.class.php:83
-#: ../../../../web/AccountsMgmtC.class.php:87
-#: ../../../../inc/themes/classic/account.inc:53
-#: ../../../../inc/themes/material-blue/account.inc:62
-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:400
-msgid "Nueva Autorización"
-msgstr "Создать авторизацию"
-
-#: ../../../../ajax/ajax_appMgmtData.php:162
-#: ../../../../web/UsersMgmtC.class.php:415
-msgid "Editar Autorización"
-msgstr "Редактировать авторизацию"
-
-#: ../../../../ajax/ajax_appMgmtData.php:168
-#: ../../../../web/AccountsMgmtC.class.php:274
-msgid "Nuevo Campo"
-msgstr "Создать поле"
-
-#: ../../../../ajax/ajax_appMgmtData.php:174
-#: ../../../../web/AccountsMgmtC.class.php:281
-msgid "Editar Campo"
-msgstr "Изменить поле"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:86
-msgid "Es necesario un nombre de usuario"
-msgstr "Необходимо имя пользователя"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:88
-msgid "Es necesario un login"
-msgstr "Необходим логин"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:90
-msgid "Es necesario un perfil"
-msgstr "Необходим профиль"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:92
-msgid "Es necesario un grupo"
-msgstr "Необходима группа"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:94
-msgid "Es necesario un email"
-msgstr "Необходим email"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:96
-#: ../../../../ajax/ajax_appMgmtSave.php:145
-#: ../../../../ajax/ajax_appMgmtSave.php:160
-#: ../../../../ajax/ajax_backup.php:54 ../../../../ajax/ajax_configSave.php:307
-#: ../../../../ajax/ajax_import.php:40 ../../../../ajax/ajax_migrate.php:40
-#: ../../../../ajax/ajax_userPrefsSave.php:88
-msgid "Ey, esto es una DEMO!!"
-msgstr "Ey, это DEMO!!"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:101
-msgid "Login de usuario duplicado"
-msgstr "Указанный логин уже существует"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:104
-msgid "Email de usuario duplicado"
-msgstr "Указанный email уже существует"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:110
-#: ../../../../ajax/ajax_appMgmtSave.php:147
-msgid "La clave no puede estar en blanco"
-msgstr "Пароль не может быть пустым"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:123
-msgid "Usuario creado"
-msgstr "Пользователь создан"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:126
-msgid "Error al crear el usuario"
-msgstr "Ошибка при создании пользователя"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:136
-#: ../../../../inc/UserMigrate.class.php:89
-msgid "Usuario actualizado"
-msgstr "Данные пользователя обновлены"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:139
-msgid "Error al actualizar el usuario"
-msgstr "Ошибка при обновлении данных пользователя"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:156
-#: ../../../../ajax/ajax_passReset.php:79
-msgid "Error al modificar la clave"
-msgstr "Ошибка изменения пароля"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:162
-msgid "No es posible eliminar, usuario en uso"
-msgstr "Не могу удалить, пользователь работает"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:166
-msgid "Usuario eliminado"
-msgstr "Пользователь удален"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:169
-msgid "Error al eliminar el usuario"
-msgstr "Ошибка удаления пользователя"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:184
-msgid "Es necesario un nombre de grupo"
-msgstr "Необходимо имя группы"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:192
-msgid "Nombre de grupo duplicado"
-msgstr "Указанное имя группы уже существует"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:204
-msgid "Grupo creado"
-msgstr "Группа создана"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:206
-msgid "Error al crear el grupo"
-msgstr "Ошибка при создании группы"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:217
-msgid "Grupo actualizado"
-msgstr "Группа обновлена"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:220
-msgid "Error al actualizar el grupo"
-msgstr "Ошибка при обновлении группы"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:229
-#: ../../../../ajax/ajax_appMgmtSave.php:306
-#: ../../../../inc/CustomFieldsBase.class.php:109
-#: ../../../../inc/themes/classic/account.inc:112
-#: ../../../../inc/themes/classic/groups.inc:24
-#: ../../../../inc/themes/classic/profiles.inc:85
-#: ../../../../inc/themes/material-blue/account.inc:138
-#: ../../../../inc/themes/material-blue/groups.inc:32
-#: ../../../../inc/themes/material-blue/profiles.inc:99
-msgid "Usuarios"
-msgstr "Пользователи"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:233
-#: ../../../../inc/Category.class.php:266
-#: ../../../../inc/CustomFieldsBase.class.php:106
-#: ../../../../inc/Customer.class.php:150
-#: ../../../../inc/themes/classic/profiles.inc:15
-#: ../../../../inc/themes/material-blue/config.inc:176
-#: ../../../../inc/themes/material-blue/profiles.inc:19
-msgid "Cuentas"
-msgstr "Учетные записи"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:236
-#: ../../../../ajax/ajax_appMgmtSave.php:308
-#: ../../../../inc/Category.class.php:119
-#: ../../../../inc/Customer.class.php:150
-msgid "No es posible eliminar"
-msgstr "Невозможно удалить"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:236
-msgid "Grupo en uso por:"
-msgstr "Группа используется:"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:241
-msgid "Grupo eliminado"
-msgstr "Группа удалена"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:244
-msgid "Error al eliminar el grupo"
-msgstr "Ошибка при удалении группы"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:283
-msgid "Es necesario un nombre de perfil"
-msgstr "Необходимо имя профиля"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:285
-msgid "Nombre de perfil duplicado"
-msgstr "Профиль с таким именем уже существует"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:290
-msgid "Perfil creado"
-msgstr "Профиль создан"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:293
-msgid "Error al crear el perfil"
-msgstr "Ошибка при создании профиля"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:296
-msgid "Perfil actualizado"
-msgstr "Профиль изменен"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:299
-msgid "Error al actualizar el perfil"
-msgstr "Ошибка при изменении профиля"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:308
-msgid "Perfil en uso por:"
-msgstr "Профиль используется:"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:311
-msgid "Perfil eliminado"
-msgstr "Профиль удален"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:314
-msgid "Error al eliminar el perfil"
-msgstr "Ошибка при удалении профиля"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:349
-msgid "Cliente creado"
-msgstr "Заказчик добавлен"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:364
-msgid "Cliente actualizado"
-msgstr "Информация о заказчике обновлена"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:374
-msgid "Cliente eliminado"
-msgstr "Заказчик удален"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:388
-msgid "Es necesario un nombre de categoría"
-msgstr "Необходимо имя категории"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:408
-msgid "Categoría creada"
-msgstr "Категория создана"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:423
-msgid "Categoría actualizada"
-msgstr "Информация о категории изменена"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:434
-msgid "Categoría eliminada"
-msgstr "Категория удалена"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:450
-msgid "Usuario o acción no indicado"
-msgstr "Пользователь или действие не указано"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:460
-msgid "Autorización creada"
-msgstr "Авторизация создана"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:468
-msgid "Autorización actualizada"
-msgstr "Авторизация изменена"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:478
-msgid "Autorización eliminada"
-msgstr "Авторизация удалена"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:495
-msgid "Nombre del campo no indicado"
-msgstr "Имя поля не задано"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:497
-msgid "Tipo del campo no indicado"
-msgstr "Тип поля не указан"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:499
-msgid "Módulo del campo no indicado"
-msgstr "Для поля не указан модуль"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:513
-msgid "Campo creado"
-msgstr "Поле создано"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:522
-msgid "Campo actualizado"
-msgstr "Поле обновлено"
-
-#: ../../../../ajax/ajax_appMgmtSave.php:532
-msgid "Campo eliminado"
-msgstr "Поле удалено"
-
-#: ../../../../ajax/ajax_backup.php:58 ../../../../ajax/ajax_backup.php:63
-#: ../../../../inc/themes/classic/backup.inc:54
-msgid "Realizar Backup"
-msgstr "Выполнить резервное копирование"
-
-#: ../../../../ajax/ajax_backup.php:58 ../../../../ajax/ajax_backup.php:60
-msgid "Error al realizar el backup"
-msgstr "Ошибка при выполнении резервной копии"
-
-#: ../../../../ajax/ajax_backup.php:60 ../../../../ajax/ajax_backup.php:74
-#: ../../../../ajax/ajax_checkLdap.php:58 ../../../../inc/Import.class.php:128
-#: ../../../../inc/Migrate.class.php:92
-msgid "Revise el registro de eventos para más detalles"
-msgstr "Проверьте журнал событий для деталей"
-
-#: ../../../../ajax/ajax_backup.php:63
-msgid "Copia de la aplicación y base de datos realizada correctamente"
-msgstr "Резервная копия программы и базы успешно создана"
-
-#: ../../../../ajax/ajax_backup.php:65
-msgid "Proceso de backup finalizado"
-msgstr "Процесс резервного копирования закончен"
-
-#: ../../../../ajax/ajax_backup.php:72 ../../../../ajax/ajax_backup.php:77
-msgid "Realizar Exportación"
-msgstr "Выполнить экспорт"
-
-#: ../../../../ajax/ajax_backup.php:72
-msgid "Error al realizar la exportación de cuentas"
-msgstr "Ошибка при экспорте учетных записей"
-
-#: ../../../../ajax/ajax_backup.php:74
-msgid "Error al realizar la exportación"
-msgstr "Ошибка при экспорте"
-
-#: ../../../../ajax/ajax_backup.php:77
-msgid "Exportación de cuentas realizada correctamente"
-msgstr "Экспорт успешно выполнен"
-
-#: ../../../../ajax/ajax_backup.php:79
-msgid "Proceso de exportación finalizado"
-msgstr "Процесс экспорта закончен"
-
-#: ../../../../ajax/ajax_checkLdap.php:52 ../../../../inc/Ldap.class.php:264
-msgid "Los parámetros de LDAP no están configurados"
-msgstr "Параметры LDAP не указаны"
-
-#: ../../../../ajax/ajax_checkLdap.php:58
-msgid "Error de conexión a LDAP"
-msgstr "Ошибка подключения к LDAP"
-
-#: ../../../../ajax/ajax_checkLdap.php:60
-msgid "Conexión a LDAP correcta"
-msgstr "Подключение к LDAP успешно"
-
-#: ../../../../ajax/ajax_checkLdap.php:60
-msgid "Objetos encontrados"
-msgstr "Найдено объектов"
-
-#: ../../../../ajax/ajax_configSave.php:58
-msgid "Modificar Configuración"
-msgstr "Изменить конфигурацию"
-
-#: ../../../../ajax/ajax_configSave.php:101
-msgid "El tamaño máximo por archivo es de 16MB"
-msgstr "Максимальный размер файла 16MB"
-
-#: ../../../../ajax/ajax_configSave.php:109 ../../../../js/strings.js.php:46
-msgid "Extensión no permitida"
-msgstr "Данный тип файла заблокирован"
-
-#: ../../../../ajax/ajax_configSave.php:128
-msgid "Faltan parámetros de Proxy"
-msgstr "Не указаны все параметры прокси"
-
-#: ../../../../ajax/ajax_configSave.php:136
-msgid "Proxy habiltado"
-msgstr "Прокси включен"
-
-#: ../../../../ajax/ajax_configSave.php:140
-msgid "Proxy deshabilitado"
-msgstr "Прокси выключен"
-
-#: ../../../../ajax/ajax_configSave.php:143
-#: ../../../../ajax/ajax_configSave.php:167
-#: ../../../../ajax/ajax_configSave.php:201
-#: ../../../../ajax/ajax_configSave.php:240
-msgid "Sección"
-msgstr "Раздел"
-
-#: ../../../../ajax/ajax_configSave.php:143
-#: ../../../../web/ConfigC.class.php:108
-#: ../../../../inc/themes/classic/profiles.inc:61
-#: ../../../../inc/themes/material-blue/profiles.inc:72
-msgid "General"
-msgstr "Основное"
-
-#: ../../../../ajax/ajax_configSave.php:153
-msgid "Faltan parámetros de Wiki"
-msgstr "Пропущены настройки Wiki"
-
-#: ../../../../ajax/ajax_configSave.php:160
-msgid "Wiki habiltada"
-msgstr "WiKi включен"
-
-#: ../../../../ajax/ajax_configSave.php:164
-msgid "Wiki deshabilitada"
-msgstr "WiKi выключен"
-
-#: ../../../../ajax/ajax_configSave.php:167
-#: ../../../../web/ConfigC.class.php:244
-#: ../../../../inc/themes/classic/wiki.inc:4
-#: ../../../../inc/themes/material-blue/wiki.inc:4
-msgid "Wiki"
-msgstr "Wiki"
-
-#: ../../../../ajax/ajax_configSave.php:182
-msgid "Faltan parámetros de LDAP"
-msgstr "Пропущены настройки LDAP"
-
-#: ../../../../ajax/ajax_configSave.php:194
-msgid "LDAP habiltado"
-msgstr "LDAP включен"
-
-#: ../../../../ajax/ajax_configSave.php:198
-msgid "LDAP deshabilitado"
-msgstr "LDAP выключен"
-
-#: ../../../../ajax/ajax_configSave.php:201
-#: ../../../../web/ConfigC.class.php:276
-#: ../../../../inc/themes/classic/ldap.inc:4
-#: ../../../../inc/themes/material-blue/ldap.inc:4
-msgid "LDAP"
-msgstr "LDAP"
-
-#: ../../../../ajax/ajax_configSave.php:216
-msgid "Faltan parámetros de Correo"
-msgstr "Пропущены настройки почты"
-
-#: ../../../../ajax/ajax_configSave.php:231
-msgid "Correo habiltado"
-msgstr "Email включен"
-
-#: ../../../../ajax/ajax_configSave.php:237
-msgid "Correo deshabilitado"
-msgstr "Email выключен"
-
-#: ../../../../ajax/ajax_configSave.php:240
-#: ../../../../web/ConfigC.class.php:306
-#: ../../../../inc/themes/classic/mail.inc:4
-#: ../../../../inc/themes/material-blue/mail.inc:4
-msgid "Correo"
-msgstr "Mail"
-
-#: ../../../../ajax/ajax_configSave.php:262
-msgid "Configuración actualizada"
-msgstr "Конфигурация изменена"
-
-#: ../../../../ajax/ajax_configSave.php:271
-#: ../../../../ajax/ajax_configSave.php:317
-#: ../../../../ajax/ajax_viewpass.php:61
-#: ../../../../inc/Controller.class.php:169
-msgid "Clave maestra actualizada"
-msgstr "Мастер-пароль изменен"
-
-#: ../../../../ajax/ajax_configSave.php:271
-#: ../../../../ajax/ajax_viewpass.php:61
-#: ../../../../inc/Controller.class.php:169
-msgid "Reinicie la sesión para cambiarla"
-msgstr "Перезайдите для вступления изменений"
-
-#: ../../../../ajax/ajax_configSave.php:273
-msgid "Clave maestra no indicada"
-msgstr "Необходим мастер-пароль"
-
-#: ../../../../ajax/ajax_configSave.php:275
-msgid "Se ha de confirmar el cambio de clave"
-msgstr "Изменение пароля должно быть подтверждено"
-
-#: ../../../../ajax/ajax_configSave.php:279
-msgid "Las claves son idénticas"
-msgstr "Пароли одинаковы"
-
-#: ../../../../ajax/ajax_configSave.php:281
-msgid "Las claves maestras no coinciden"
-msgstr "Мастер-пароль не совпадает"
-
-#: ../../../../ajax/ajax_configSave.php:283
-msgid "La clave maestra actual no coincide"
-msgstr "Текущий мастер-пароль ошибочен"
-
-#: ../../../../ajax/ajax_configSave.php:292
-msgid "Errores al actualizar las claves de las cuentas"
-msgstr "Ошибка при изменении паролей учетной записи"
-
-#: ../../../../ajax/ajax_configSave.php:298
-msgid "Errores al actualizar las claves de las cuentas del histórico"
-msgstr "Ошибка при обновлении истории паролей учетной записи"
-
-#: ../../../../ajax/ajax_configSave.php:302
-msgid "Errores al actualizar datos de campos personalizados"
-msgstr "Ошибка при изменении свободных полей учетной записи"
-
-#: ../../../../ajax/ajax_configSave.php:315
-#: ../../../../inc/Account.class.php:512
-msgid "Actualizar Clave Maestra"
-msgstr "Изменить мастер-пароль"
-
-#: ../../../../ajax/ajax_configSave.php:319
-msgid "Error al guardar el hash de la clave maestra"
-msgstr "Ошибка при сохранении хеша мастер-пароля"
-
-#: ../../../../ajax/ajax_configSave.php:327
-msgid "Generar Clave Temporal"
-msgstr "Сгенерировать временный пароль"
-
-#: ../../../../ajax/ajax_configSave.php:327
-#: ../../../../inc/CustomFieldsBase.class.php:87
-#: ../../../../inc/themes/classic/account.inc:86
-#: ../../../../inc/themes/classic/editpass.inc:25
-#: ../../../../inc/themes/classic/encryption.inc:143
-#: ../../../../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/passreset.inc:34
-#: ../../../../inc/themes/classic/users.inc:75
-#: ../../../../inc/themes/classic/userspass.inc:8
-#: ../../../../inc/themes/classic/userspass.inc:11
-#: ../../../../inc/themes/material-blue/account.inc:99
-#: ../../../../inc/themes/material-blue/account.inc:104
-#: ../../../../inc/themes/material-blue/config.inc:414
-#: ../../../../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/encryption.inc:161
-#: ../../../../inc/themes/material-blue/install.inc:47
-#: ../../../../inc/themes/material-blue/ldap.inc:105
-#: ../../../../inc/themes/material-blue/login.inc:18
-#: ../../../../inc/themes/material-blue/login.inc:41
-#: ../../../../inc/themes/material-blue/mail.inc:73
-#: ../../../../inc/themes/material-blue/mail.inc:80
-#: ../../../../inc/themes/material-blue/passreset.inc:30
-#: ../../../../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:329
-msgid "Clave Temporal Generada"
-msgstr "Временный пароль"
-
-#: ../../../../ajax/ajax_configSave.php:331
-msgid "Error al generar clave temporal"
-msgstr "Ошибка генерации временного пароля"
-
-#: ../../../../ajax/ajax_doLogin.php:49
-msgid "Usuario/Clave no introducidos"
-msgstr "Пользователь / пароль не введены"
-
-#: ../../../../ajax/ajax_doLogin.php:61
-msgid "Inicio sesión"
-msgstr "Начало сессии"
-
-#: ../../../../ajax/ajax_doLogin.php:66
-msgid "Servidor Login"
-msgstr "Сервер входа"
-
-#: ../../../../ajax/ajax_doLogin.php:72
-msgid "Error al guardar los datos de LDAP"
-msgstr "Ошибка сохранении данных пользователя из LDAP"
-
-#: ../../../../ajax/ajax_doLogin.php:75 ../../../../ajax/ajax_doLogin.php:83
-#: ../../../../ajax/ajax_doLogin.php:135 ../../../../ajax/ajax_doLogin.php:179
-#: ../../../../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:188
-#: ../../../../inc/Crypt.class.php:199
-#: ../../../../inc/XmlImportBase.class.php:79
-msgid "Error interno"
-msgstr "Внутренняя ошибка"
-
-#: ../../../../ajax/ajax_doLogin.php:80
-msgid "Error al actualizar la clave del usuario en la BBDD"
-msgstr "Ошибка изменения пароля пользователя в БД"
-
-#: ../../../../ajax/ajax_doLogin.php:88 ../../../../ajax/ajax_doLogin.php:113
-msgid "Login incorrecto"
-msgstr "Ошибка входа"
-
-#: ../../../../ajax/ajax_doLogin.php:89 ../../../../ajax/ajax_doLogin.php:96
-#: ../../../../ajax/ajax_doLogin.php:103 ../../../../ajax/ajax_doLogin.php:114
-#: ../../../../ajax/ajax_doLogin.php:124 ../../../../ajax/ajax_doLogin.php:174
-#: ../../../../inc/ApiTokens.class.php:190
-#: ../../../../inc/ApiTokens.class.php:308 ../../../../inc/Auth.class.php:108
-#: ../../../../inc/Init.class.php:466 ../../../../inc/Ldap.class.php:295
-#: ../../../../inc/Ldap.class.php:308 ../../../../inc/Ldap.class.php:316
-#: ../../../../inc/UserBase.class.php:384
-#: ../../../../inc/UserBase.class.php:528 ../../../../res/test.php:64
-#: ../../../../web/SearchC.class.php:305
-#: ../../../../web/UsersMgmtC.class.php:393
-#: ../../../../inc/themes/classic/account.inc:73
-#: ../../../../inc/themes/classic/editpass.inc:21
-#: ../../../../inc/themes/classic/eventlog.inc:23
-#: ../../../../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:89
-#: ../../../../inc/themes/classic/tokens.inc:8
-#: ../../../../inc/themes/material-blue/account.inc:84
-#: ../../../../inc/themes/material-blue/config.inc:400
-#: ../../../../inc/themes/material-blue/editpass.inc:22
-#: ../../../../inc/themes/material-blue/eventlog.inc:23
-#: ../../../../inc/themes/material-blue/info.inc:39
-#: ../../../../inc/themes/material-blue/ldap.inc:86
-#: ../../../../inc/themes/material-blue/login.inc:11
-#: ../../../../inc/themes/material-blue/login.inc:34
-#: ../../../../inc/themes/material-blue/mail.inc:61
-#: ../../../../inc/themes/material-blue/mail.inc:67
-#: ../../../../inc/themes/material-blue/passreset.inc:16
-#: ../../../../inc/themes/material-blue/request.inc:20
-#: ../../../../inc/themes/material-blue/search.inc:91
-#: ../../../../inc/themes/material-blue/tokens.inc:8
-msgid "Usuario"
-msgstr "Пользователь"
-
-#: ../../../../ajax/ajax_doLogin.php:92 ../../../../ajax/ajax_doLogin.php:106
-#: ../../../../ajax/ajax_doLogin.php:117
-msgid "Usuario/Clave incorrectos"
-msgstr "Неправильный пользователь / пароль"
-
-#: ../../../../ajax/ajax_doLogin.php:95 ../../../../ajax/ajax_doLogin.php:99
-msgid "Cuenta expirada"
-msgstr "Учетная запись просрочена"
-
-#: ../../../../ajax/ajax_doLogin.php:102
-msgid "El usuario no tiene grupos asociados"
-msgstr "Для пользователя не указаны группы"
-
-#: ../../../../ajax/ajax_doLogin.php:123 ../../../../ajax/ajax_doLogin.php:127
-msgid "Usuario deshabilitado"
-msgstr "Пользователь отключен"
-
-#: ../../../../ajax/ajax_doLogin.php:132
-msgid "Error al obtener los datos del usuario de la BBDD"
-msgstr "Ошибка получения данных о пользователе из DB"
-
-#: ../../../../ajax/ajax_doLogin.php:142
-msgid "La clave maestra no ha sido guardada o es incorrecta"
-msgstr "Мастер-пароль не сохранен или ошибочен"
-
-#: ../../../../ajax/ajax_doLogin.php:149 ../../../../ajax/ajax_doLogin.php:152
-msgid "Clave maestra incorrecta"
-msgstr "Неправильный мастер-пароль"
-
-#: ../../../../ajax/ajax_doLogin.php:175
-#: ../../../../inc/ProfileBase.class.php:512
-#: ../../../../inc/ProfileBase.class.php:550
-#: ../../../../inc/ProfileBase.class.php:593
-#: ../../../../web/UsersMgmtC.class.php:90
-#: ../../../../inc/themes/classic/users.inc:37
-#: ../../../../inc/themes/material-blue/users.inc:43
-msgid "Perfil"
-msgstr "Профиль"
-
-#: ../../../../ajax/ajax_doLogin.php:176 ../../../../inc/Groups.class.php:158
-#: ../../../../inc/Groups.class.php:259 ../../../../inc/Groups.class.php:375
-#: ../../../../inc/Ldap.class.php:218 ../../../../inc/Ldap.class.php:231
-#: ../../../../inc/Ldap.class.php:241 ../../../../inc/Ldap.class.php:390
-#: ../../../../web/UsersMgmtC.class.php:91
-#: ../../../../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:46 ../../../../ajax/ajax_getFiles.php:40
+#: ../../../../ajax/ajax_accGetFiles.php:43
+#: ../../../../ajax/ajax_filesMgmt.php:58
msgid "Gestión de archivos deshabilitada"
msgstr "Управление файлами отключено"
-#: ../../../../ajax/ajax_files.php:60 ../../../../inc/Files.class.php:63
+#: ../../../../ajax/ajax_accGetFiles.php:50
+#: ../../../../ajax/ajax_accSearch.php:44
+#: ../../../../ajax/ajax_filesMgmt.php:54
+#: ../../../../ajax/ajax_filesMgmt.php:70
+#: ../../../../ajax/ajax_passReset.php:49
+#: ../../../../ajax/ajax_userPrefsSave.php:58
+msgid "CONSULTA INVÁLIDA"
+msgstr "ОШИБОЧНЫЙ ЗАПРОС"
+
+#: ../../../../ajax/ajax_accSearch.php:38
+#: ../../../../ajax/ajax_userPrefsSave.php:51
+#: ../../../../inc/SP/Controller/RequestControllerTrait.class.php:125
+msgid "La sesión no se ha iniciado o ha caducado"
+msgstr "Сессия истекла или ошибка сессии"
+
+#: ../../../../ajax/ajax_filesMgmt.php:73
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:93
msgid "Subir Archivo"
msgstr "Загрузить файл"
-#: ../../../../ajax/ajax_files.php:69
+#: ../../../../ajax/ajax_filesMgmt.php:79
msgid "No hay extensiones permitidas"
-msgstr "Нет доступных расширений файлов"
+msgstr "Нет доступных расширений"
-#: ../../../../ajax/ajax_files.php:80 ../../../../inc/FileImport.class.php:115
+#: ../../../../ajax/ajax_filesMgmt.php:96
+#: ../../../../inc/SP/Import/FileImport.class.php:97
msgid "Tipo de archivo no soportado"
msgstr "Данный тип файлов запрещен"
-#: ../../../../ajax/ajax_files.php:86
+#: ../../../../ajax/ajax_filesMgmt.php:97
+msgid "Extensión"
+msgstr "Расширение"
+
+#: ../../../../ajax/ajax_filesMgmt.php:103
msgid "Archivo inválido"
msgstr "Ошибочный файл"
-#: ../../../../ajax/ajax_files.php:102 ../../../../ajax/ajax_files.php:119
-#: ../../../../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:109
-msgid "El archivo es mayor de "
-msgstr "Файл больше чем"
-
-#: ../../../../ajax/ajax_files.php:126
-msgid "Archivo guardado"
-msgstr "Файл сохранен"
-
-#: ../../../../ajax/ajax_files.php:131
-msgid "No se pudo guardar el archivo"
-msgstr "Ошибка сохранения файла"
-
-#: ../../../../ajax/ajax_files.php:141 ../../../../ajax/ajax_files.php:200
-msgid "No es un ID de archivo válido"
-msgstr "Ошибочный ID файла"
-
-#: ../../../../ajax/ajax_files.php:149
-msgid "El archivo no existe"
-msgstr "Файл не существует"
-
-#: ../../../../ajax/ajax_files.php:158
-#: ../../../../inc/themes/classic/files.inc:19
-#: ../../../../inc/themes/material-blue/files.inc:19
-msgid "Descargar Archivo"
-msgstr "Скачать файл"
-
-#: ../../../../ajax/ajax_files.php:159 ../../../../ajax/ajax_viewpass.php:70
-#: ../../../../inc/Files.class.php:112
-#: ../../../../inc/themes/classic/eventlog.inc:14
-#: ../../../../inc/themes/material-blue/eventlog.inc:14
-msgid "ID"
-msgstr "ID"
-
-#: ../../../../ajax/ajax_files.php:160 ../../../../inc/Files.class.php:65
-#: ../../../../inc/Files.class.php:113
-#: ../../../../inc/themes/classic/import.inc:152
-#: ../../../../inc/themes/material-blue/import.inc:80
+#: ../../../../ajax/ajax_filesMgmt.php:104
+#: ../../../../ajax/ajax_filesMgmt.php:166
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:835
+#: ../../../../inc/SP/Core/Upgrade.class.php:285
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:95
+#: ../../../../inc/themes/material-blue/views/config/import.inc:66
+#: ../../../../inc/themes/material-blue/views/config/import.inc:69
msgid "Archivo"
msgstr "Файл"
-#: ../../../../ajax/ajax_files.php:161 ../../../../inc/Files.class.php:66
-#: ../../../../inc/Files.class.php:114
-#: ../../../../web/AccountsMgmtC.class.php:267
-#: ../../../../inc/themes/classic/customfields.inc:16
-#: ../../../../inc/themes/material-blue/customfields.inc:19
-msgid "Tipo"
-msgstr "Тип"
+#: ../../../../ajax/ajax_filesMgmt.php:117
+#: ../../../../ajax/ajax_filesMgmt.php:135
+#: ../../../../inc/SP/Import/FileImport.class.php:113
+#: ../../../../inc/SP/Import/FileImport.class.php:157
+#: ../../../../inc/SP/Import/FileImport.class.php:185
+msgid "Error interno al leer el archivo"
+msgstr "Внутренняя ошибка чтения файла"
-#: ../../../../ajax/ajax_files.php:162 ../../../../inc/Files.class.php:67
-#: ../../../../inc/Files.class.php:115
+#: ../../../../ajax/ajax_filesMgmt.php:124
+msgid "Tamaño de archivo superado"
+msgstr "Слишком большой размер файла"
+
+#: ../../../../ajax/ajax_filesMgmt.php:125
+#: ../../../../ajax/ajax_filesMgmt.php:168
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:284
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:97
msgid "Tamaño"
msgstr "Размер"
-#: ../../../../ajax/ajax_files.php:204
-msgid "Archivo eliminado"
-msgstr "Файл удален"
+#: ../../../../ajax/ajax_filesMgmt.php:144
+msgid "Archivo guardado"
+msgstr "Файл сохранен"
-#: ../../../../ajax/ajax_files.php:209
-msgid "Error al eliminar el archivo"
-msgstr "Ошибка при удалении файла"
+#: ../../../../ajax/ajax_filesMgmt.php:146
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:77
+msgid "No se pudo guardar el archivo"
+msgstr "Ошибка сохранения файла"
-#: ../../../../ajax/ajax_getContent.php:42
-#: ../../../../inc/ApiRequest.class.php:55
-#: ../../../../inc/CustomFieldDef.class.php:45
-#: ../../../../inc/CustomFields.class.php:54
-msgid "Parámetros incorrectos"
-msgstr "Ошибочные параметры"
+#: ../../../../ajax/ajax_filesMgmt.php:154
+#: ../../../../ajax/ajax_filesMgmt.php:198
+msgid "No es un ID de archivo válido"
+msgstr "Ошибочный ID файла"
-#: ../../../../ajax/ajax_migrate.php:56
-msgid "Confirmar la importación de cuentas"
-msgstr "Подтвердите импорт учетной записи"
+#: ../../../../ajax/ajax_filesMgmt.php:160
+msgid "El archivo no existe"
+msgstr "Файл не существует"
-#: ../../../../ajax/ajax_migrate.php:58
-msgid "Es necesario un usuario de conexión"
-msgstr "Требуется имя пользовтеля для подключения"
+#: ../../../../ajax/ajax_filesMgmt.php:163
+#: ../../../../inc/themes/material-blue/views/account/files-list.inc:34
+msgid "Descargar Archivo"
+msgstr "Скачать файл"
-#: ../../../../ajax/ajax_migrate.php:60
-msgid "Es necesaria una clave de conexión"
-msgstr "Требуется пароль для подключения"
+#: ../../../../ajax/ajax_filesMgmt.php:164
+#: ../../../../inc/SP/Api/SyspassApi.class.php:82
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:518
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:19
+msgid "ID"
+msgstr "ID"
-#: ../../../../ajax/ajax_migrate.php:62
-msgid "Es necesario el nombre de la BBDD"
-msgstr "Необходимо имя базы данных"
-
-#: ../../../../ajax/ajax_migrate.php:64
-msgid "Es necesario un nombre de host"
-msgstr "Необходимо имя сервера"
-
-#: ../../../../ajax/ajax_passReset.php:50
-#: ../../../../ajax/ajax_passReset.php:53
-msgid "Recuperación de Clave"
-msgstr "Восстановление пароля"
-
-#: ../../../../ajax/ajax_passReset.php:56
-#: ../../../../ajax/ajax_passReset.php:61
-msgid "Solicitado para"
-msgstr "Запрошено для"
-
-#: ../../../../ajax/ajax_passReset.php:58
-#: ../../../../ajax/ajax_sendRequest.php:76
-msgid "Solicitud enviada"
-msgstr "Запрос отправлен"
-
-#: ../../../../ajax/ajax_passReset.php:58
-msgid "En breve recibirá un correo para completar la solicitud."
-msgstr "В скором времени вы получите email для завершения запроса."
-
-#: ../../../../ajax/ajax_passReset.php:63
-msgid "No se ha podido realizar la solicitud. Consulte con el administrador."
-msgstr ""
-"Запрос не может быть выполнен. Пожалуйста, свяжитесь с администратором."
-
-#: ../../../../ajax/ajax_passReset.php:73
-#: ../../../../inc/UserBase.class.php:570
-#: ../../../../inc/UserPass.class.php:127
-msgid "Modificar Clave Usuario"
-msgstr "Изменить пароль пользователя"
-
-#: ../../../../ajax/ajax_passReset.php:73
-#: ../../../../inc/UserBase.class.php:570
-#: ../../../../inc/UserBase.class.php:594
-#: ../../../../inc/UserPass.class.php:127
-#: ../../../../web/UsersMgmtC.class.php:89
-#: ../../../../inc/themes/classic/users.inc:21
-#: ../../../../inc/themes/material-blue/users.inc:24
-msgid "Login"
-msgstr "Логин"
-
-#: ../../../../ajax/ajax_passReset.php:81
-msgid "La clave es incorrecta o no coincide"
-msgstr "Ошибка пароля"
-
-#: ../../../../ajax/ajax_sendRequest.php:49
-msgid "Es necesaria una descripción"
-msgstr "Необходимо описание"
-
-#: ../../../../ajax/ajax_sendRequest.php:62
-msgid "Solicitud de Modificación de Cuenta"
-msgstr "Запрос на изменение учетной записи"
-
-#: ../../../../ajax/ajax_sendRequest.php:63
-msgid "Solicitante"
-msgstr "Запросил"
-
-#: ../../../../ajax/ajax_sendRequest.php:64
-#: ../../../../ajax/ajax_viewpass.php:71 ../../../../inc/Account.class.php:181
-#: ../../../../inc/Account.class.php:236 ../../../../inc/Account.class.php:417
-#: ../../../../inc/Account.class.php:440 ../../../../inc/Account.class.php:684
-#: ../../../../inc/Files.class.php:64
+#: ../../../../ajax/ajax_filesMgmt.php:165
+#: ../../../../inc/SP/Api/SyspassApi.class.php:83
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:280
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:832
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:719
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:729
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:744
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:833
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1102
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:519
+#: ../../../../inc/SP/Controller/MainController.class.php:573
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:94
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:76
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:11
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:13
msgid "Cuenta"
msgstr "Учетная запись"
-#: ../../../../ajax/ajax_sendRequest.php:65
-#: ../../../../inc/Account.class.php:180 ../../../../inc/Account.class.php:235
-#: ../../../../inc/Account.class.php:416 ../../../../inc/Account.class.php:439
-#: ../../../../inc/Account.class.php:683 ../../../../inc/Customer.class.php:65
-#: ../../../../inc/Customer.class.php:115
-#: ../../../../inc/Customer.class.php:163 ../../../../web/SearchC.class.php:287
-#: ../../../../inc/themes/classic/account.inc:23
-#: ../../../../inc/themes/classic/editpass.inc:12
-#: ../../../../inc/themes/classic/request.inc:9
-#: ../../../../inc/themes/classic/search.inc:58
-#: ../../../../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:60
-msgid "Cliente"
-msgstr "Заказчик"
+#: ../../../../ajax/ajax_filesMgmt.php:167
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:206
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:283
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:55
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:718
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:728
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:743
+#: ../../../../inc/SP/Controller/LoginController.class.php:344
+#: ../../../../inc/SP/Controller/LoginController.class.php:369
+#: ../../../../inc/SP/Controller/LoginController.class.php:407
+#: ../../../../inc/SP/Controller/LoginController.class.php:425
+#: ../../../../inc/SP/Controller/LoginController.class.php:431
+#: ../../../../inc/SP/Core/Init.class.php:430
+#: ../../../../inc/SP/Core/Init.class.php:670
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:96
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:75
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:31
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:33
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:39
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:46
+msgid "Tipo"
+msgstr "Тип"
-#: ../../../../ajax/ajax_sendRequest.php:66
-#: ../../../../web/AccountsMgmtC.class.php:80
-#: ../../../../web/AccountsMgmtC.class.php:139
-#: ../../../../web/UsersMgmtC.class.php:188
-#: ../../../../inc/themes/classic/categories.inc:16
-#: ../../../../inc/themes/classic/customers.inc:16
-#: ../../../../inc/themes/classic/eventlog.inc:29
-#: ../../../../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:29
-#: ../../../../inc/themes/material-blue/groups.inc:20
-msgid "Descripción"
-msgstr "Описание"
+#: ../../../../ajax/ajax_filesMgmt.php:204
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:827
+msgid "Archivo eliminado"
+msgstr "Файл удален"
-#: ../../../../ajax/ajax_sendRequest.php:79
-msgid "Error al enviar la solicitud"
-msgstr "Ошибка при отправке запроса"
+#: ../../../../ajax/ajax_filesMgmt.php:206
+msgid "Error al eliminar el archivo"
+msgstr "Ошибка при удалении файла"
-#: ../../../../ajax/ajax_userPrefsSave.php:75
-#: ../../../../ajax/ajax_userPrefsSave.php:108
-msgid "Error al actualizar preferencias"
-msgstr "Ошибка изменения настроек"
+#: ../../../../ajax/ajax_filesMgmt.php:209
+#: ../../../../ajax/ajax_userPrefsSave.php:97
+#: ../../../../inc/SP/Api/ApiRequest.class.php:192
+#: ../../../../inc/SP/Controller/RequestControllerTrait.class.php:112
+msgid "Acción Inválida"
+msgstr "Ошибочное действие"
-#: ../../../../ajax/ajax_userPrefsSave.php:85
-#: ../../../../ajax/ajax_userPrefsSave.php:111
+#: ../../../../ajax/ajax_getContent.php:55
+#: ../../../../inc/SP/Api/ApiBase.class.php:156
+#: ../../../../inc/SP/Api/ApiRequest.class.php:178
+msgid "Parámetros incorrectos"
+msgstr "Ошибочные параметры"
+
+#: ../../../../ajax/ajax_install.php:58
+msgid "Instalación finalizada"
+msgstr "Установка завершена"
+
+#: ../../../../ajax/ajax_passReset.php:62
+msgid "Recuperación de Clave"
+msgstr "Восстановление пароля"
+
+#: ../../../../ajax/ajax_passReset.php:63
+msgid "Solicitado para"
+msgstr "Запрошено для"
+
+#: ../../../../ajax/ajax_passReset.php:70
+msgid "Solicitud enviada"
+msgstr "Запрос отправлен"
+
+#: ../../../../ajax/ajax_passReset.php:74
+msgid "En breve recibirá un correo para completar la solicitud."
+msgstr "В скором времени вы получите email для завершения запроса."
+
+#: ../../../../ajax/ajax_passReset.php:78
+msgid "Solicitud no enviada"
+msgstr "Запрос не отправлен"
+
+#: ../../../../ajax/ajax_passReset.php:79
+msgid "Compruebe datos de usuario o consulte con el administrador"
+msgstr ""
+"Пожалуйста, проверьте данные пользователя или свяжитесь с администратором"
+
+#: ../../../../ajax/ajax_passReset.php:88
+#: ../../../../inc/SP/Mgmt/Users/UserPass.class.php:151
+msgid "Modificar Clave Usuario"
+msgstr "Изменить пароль пользователя"
+
+#: ../../../../ajax/ajax_passReset.php:101
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:282
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:934
+msgid "Clave actualizada"
+msgstr "Пароль изменен"
+
+#: ../../../../ajax/ajax_passReset.php:102
+#: ../../../../inc/SP/Auth/Database/Database.class.php:68
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:474
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:231
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:246
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:273
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:284
+#: ../../../../inc/SP/Mgmt/Users/UserMigrate.class.php:106
+#: ../../../../inc/SP/Mgmt/Users/UserPass.class.php:152
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:37
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:23
+msgid "Login"
+msgstr "Логин"
+
+#: ../../../../ajax/ajax_passReset.php:109
+msgid "La clave es incorrecta o no coincide"
+msgstr "Ошибка пароля"
+
+#: ../../../../ajax/ajax_userPrefsSave.php:90
+#: ../../../../inc/SP/Mgmt/Users/UserPreferencesUtil.class.php:85
msgid "Preferencias actualizadas"
msgstr "Настройки изменены"
-#: ../../../../ajax/ajax_viewpass.php:55
-msgid "La clave maestra no coincide"
-msgstr "Неверный мастер-пароль"
+#: ../../../../inc/SP/Account/Account.class.php:126
+msgid "Error al modificar la cuenta"
+msgstr "Ошибка при изменении учетной записи"
-#: ../../../../ajax/ajax_viewpass.php:59
-#: ../../../../inc/Controller.class.php:166
-msgid "No tiene permisos para acceder a esta cuenta"
-msgstr "Нет прав для доступа к данной учетной записи"
+#: ../../../../inc/SP/Account/Account.class.php:172
+#: ../../../../inc/SP/Account/AccountHistoryUtil.class.php:153
+msgid "Error al restaurar cuenta"
+msgstr "Ошибка восстановления учетной записи"
-#: ../../../../ajax/ajax_viewpass.php:69 ../../../../inc/Acl.class.php:133
-#: ../../../../inc/themes/classic/account.inc:389
-#: ../../../../inc/themes/classic/profiles.inc:23
-#: ../../../../inc/themes/classic/search.inc:139
-#: ../../../../inc/themes/material-blue/account.inc:433
-#: ../../../../inc/themes/material-blue/profiles.inc:35
-#: ../../../../inc/themes/material-blue/search.inc:149
-msgid "Ver Clave"
-msgstr "Показать пароль"
-
-#: ../../../../ajax/ajax_viewpass.php:80 ../../../../js/strings.js.php:73
-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:33 ../../../../inc/Backup.class.php:28
-#: ../../../../inc/Base.php:26 ../../../../inc/Cache.class.php:28
-#: ../../../../inc/Category.class.php:29 ../../../../inc/Config.class.php:28
-#: ../../../../inc/ConfigDB.class.php:28
-#: ../../../../inc/ConfigInterface.class.php:28
-#: ../../../../inc/Controller.class.php:31 ../../../../inc/Crypt.class.php:28
-#: ../../../../inc/CryptMasterPass.class.php:28
-#: ../../../../inc/CryptPKI.class.php:28 ../../../../inc/CsvImport.class.php:28
-#: ../../../../inc/CsvImportBase.class.php:28
-#: ../../../../inc/CustomFieldDef.class.php:28
-#: ../../../../inc/CustomFields.class.php:28
-#: ../../../../inc/CustomFieldsBase.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/Language.class.php:28 ../../../../inc/Ldap.class.php:29
-#: ../../../../inc/LdapADS.class.php:28 ../../../../inc/Log.class.php:28
-#: ../../../../inc/Migrate.class.php:28 ../../../../inc/Minify.class.php:30
-#: ../../../../inc/Profile.class.php:29
-#: ../../../../inc/ProfileBase.class.php:28
-#: ../../../../inc/Request.class.php:46 ../../../../inc/Response.class.php:28
-#: ../../../../inc/SPException.class.php:28
-#: ../../../../inc/Session.class.php:28
-#: ../../../../inc/SessionUtil.class.php:28
-#: ../../../../inc/SyspassImport.class.php:28
-#: ../../../../inc/Template.class.php:27 ../../../../inc/Themes.class.php:28
-#: ../../../../inc/Upgrade.class.php:29 ../../../../inc/User.class.php:28
-#: ../../../../inc/UserAccounts.class.php:28
-#: ../../../../inc/UserBase.class.php:28 ../../../../inc/UserLdap.class.php:28
-#: ../../../../inc/UserMigrate.class.php:28
-#: ../../../../inc/UserPass.class.php:28
-#: ../../../../inc/UserPassRecover.class.php:28
-#: ../../../../inc/UserPreferences.class.php:28
-#: ../../../../inc/UserUtil.class.php:28 ../../../../inc/Util.class.php:28
-#: ../../../../inc/XmlExport.class.php:28
-#: ../../../../inc/XmlImport.class.php:28
-#: ../../../../inc/XmlImportBase.class.php:28
-#: ../../../../web/AccountC.class.php:41
-#: ../../../../web/AccountsMgmtC.class.php:33
-#: ../../../../web/ConfigC.class.php:35 ../../../../web/EventlogC.class.php:30
-#: ../../../../web/SearchC.class.php:33 ../../../../web/UsersMgmtC.class.php:40
-#: ../../../../web/UsersPrefsC.class.php:35
-msgid "No es posible acceder directamente a este archivo"
-msgstr "Невозможно обратиться к файлу"
-
-#: ../../../../inc/Account.class.php:112 ../../../../inc/Account.class.php:201
-#: ../../../../inc/Account.class.php:653
-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:398
-msgid "Error al actualizar los grupos secundarios"
-msgstr "Ошибка изменения вторичных групп"
-
-#: ../../../../inc/Account.class.php:126 ../../../../inc/Account.class.php:406
-msgid "Error al actualizar los usuarios de la cuenta"
-msgstr "Ошибка изменения пользователей с доступом к учетной записи"
-
-#: ../../../../inc/Account.class.php:234
-msgid "Restaurar Cuenta"
-msgstr "Восстановление учетной записи"
-
-#: ../../../../inc/Account.class.php:341
-#: ../../../../inc/AccountHistory.class.php:348
-#: ../../../../inc/AccountHistory.class.php:508
+#: ../../../../inc/SP/Account/Account.class.php:200
+#: ../../../../inc/SP/Account/AccountHistory.class.php:216
+#: ../../../../inc/SP/Account/AccountHistory.class.php:503
msgid "No se pudieron obtener los datos de la cuenta"
msgstr "Ошибка получения данных для учетной записи"
-#: ../../../../inc/Account.class.php:415 ../../../../inc/Acl.class.php:129
-#: ../../../../web/AccountC.class.php:150 ../../../../web/MainC.class.php:183
-msgid "Nueva Cuenta"
-msgstr "Новая учетная запись"
+#: ../../../../inc/SP/Account/Account.class.php:202
+msgid "La cuenta no existe"
+msgstr "Учетная запись не существует"
-#: ../../../../inc/Account.class.php:433
-msgid "ERROR: Error en la operación."
-msgstr "ОШИБКА: Сбой операции"
+#: ../../../../inc/SP/Account/Account.class.php:267
+msgid "Error al crear la cuenta"
+msgstr "Ошибка при создании учетной записи"
-#: ../../../../inc/Account.class.php:438 ../../../../inc/Acl.class.php:134
-#: ../../../../web/AccountC.class.php:358
-#: ../../../../inc/themes/classic/account.inc:376
-#: ../../../../inc/themes/classic/search.inc:167
-#: ../../../../inc/themes/material-blue/account.inc:427
-#: ../../../../inc/themes/material-blue/search.inc:178
-msgid "Eliminar Cuenta"
-msgstr "Удалить учетную запись"
+#: ../../../../inc/SP/Account/Account.class.php:339
+#: ../../../../inc/SP/Account/AccountHistory.class.php:626
+msgid "Error al eliminar la cuenta"
+msgstr "Ошибка при удалении учетной записи"
-#: ../../../../inc/Account.class.php:451
-msgid "Error al eliminar grupos asociados a la cuenta"
-msgstr "Ошибка удаления групп учетной записи"
+#: ../../../../inc/SP/Account/Account.class.php:403
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:561
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:585
+msgid "Actualizar Clave Maestra"
+msgstr "Изменить мастер-пароль"
-#: ../../../../inc/Account.class.php:455
-msgid "Error al eliminar usuarios asociados a la cuenta"
-msgstr "Ошибка удаления пользователей учетной записи"
-
-#: ../../../../inc/Account.class.php:459
-msgid "Error al eliminar archivos asociados a la cuenta"
-msgstr "Ошибка удаления файлов учетной записи"
-
-#: ../../../../inc/Account.class.php:513
-#: ../../../../inc/AccountHistory.class.php:129
-#: ../../../../inc/XmlImport.class.php:62
+#: ../../../../inc/SP/Account/Account.class.php:404
+#: ../../../../inc/SP/Account/AccountHistory.class.php:263
msgid "Inicio"
msgstr "Старт"
-#: ../../../../inc/Account.class.php:518
-#: ../../../../inc/AccountHistory.class.php:135
+#: ../../../../inc/SP/Account/Account.class.php:408
+#: ../../../../inc/SP/Account/AccountHistory.class.php:268
msgid "Error en el módulo de encriptación"
msgstr "Ошибка в модуле шифрования"
-#: ../../../../inc/Account.class.php:526
-#: ../../../../inc/AccountHistory.class.php:143
+#: ../../../../inc/SP/Account/Account.class.php:417
+#: ../../../../inc/SP/Account/AccountHistory.class.php:277
msgid "Error al obtener las claves de las cuentas"
msgstr "Ошибка получения паролей для учетной записи"
-#: ../../../../inc/Account.class.php:542
-#: ../../../../inc/AccountHistory.class.php:165
+#: ../../../../inc/SP/Account/Account.class.php:434
+#: ../../../../inc/SP/Account/AccountHistory.class.php:305
msgid "Clave de cuenta vacía"
msgstr "Пустой пароль учетной записи"
-#: ../../../../inc/Account.class.php:547
-#: ../../../../inc/AccountHistory.class.php:170
+#: ../../../../inc/SP/Account/Account.class.php:439
+#: ../../../../inc/SP/Account/AccountHistory.class.php:310
msgid "IV de encriptación incorrecto"
msgstr "Ошибочное шифрование IV"
-#: ../../../../inc/Account.class.php:556
-#: ../../../../inc/AccountHistory.class.php:179
+#: ../../../../inc/SP/Account/Account.class.php:448
+#: ../../../../inc/SP/Account/AccountHistory.class.php:319
msgid "No es posible desencriptar la clave de la cuenta"
msgstr "Невозможно расшифровать пароль учетной записи"
-#: ../../../../inc/Account.class.php:562
+#: ../../../../inc/SP/Account/Account.class.php:457
msgid "Fallo al actualizar la clave de la cuenta"
msgstr "Ошибка изменения пароля учетной записи"
-#: ../../../../inc/Account.class.php:576
+#: ../../../../inc/SP/Account/Account.class.php:462
+#: ../../../../inc/SP/Account/AccountHistory.class.php:332
msgid "Cuentas actualizadas"
msgstr "Обновлены учетные записи"
-#: ../../../../inc/Account.class.php:581
-#: ../../../../inc/AccountHistory.class.php:204
-#: ../../../../inc/CustomFields.class.php:285
-#: ../../../../inc/CustomFields.class.php:327
-msgid "Fin"
-msgstr "Конец"
+#: ../../../../inc/SP/Account/Account.class.php:463
+#: ../../../../inc/SP/Account/AccountHistory.class.php:333
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1019
+msgid "Errores"
+msgstr "Ошибки"
-#: ../../../../inc/Account.class.php:682
-msgid "Modificar Clave"
-msgstr "Изменить пароль"
+#: ../../../../inc/SP/Account/Account.class.php:520
+msgid "Error al actualizar la clave"
+msgstr "Ошибка при изменении пароля"
-#: ../../../../inc/Account.class.php:717
-msgid "No se pudieron obtener los datos de las cuentas"
-msgstr "Ошибка получения информации о учетной записи"
+#: ../../../../inc/SP/Account/AccountFavorites.class.php:80
+msgid "Error al añadir favorito"
+msgstr "Ошибка добавления в избранное"
-#: ../../../../inc/AccountHistory.class.php:128
+#: ../../../../inc/SP/Account/AccountFavorites.class.php:102
+msgid "Error al eliminar favorito"
+msgstr "Ошибка удаления из избранного"
+
+#: ../../../../inc/SP/Account/AccountHistory.class.php:192
+msgid "Error al actualizar el historial"
+msgstr "Ошибка при обновлении истории"
+
+#: ../../../../inc/SP/Account/AccountHistory.class.php:262
msgid "Actualizar Clave Maestra (H)"
msgstr "Изменить мастер-пароль (H)"
-#: ../../../../inc/AccountHistory.class.php:160
+#: ../../../../inc/SP/Account/AccountHistory.class.php:300
msgid "La clave maestra del registro no coincide"
msgstr "Мастер-пароль не совпадает"
-#: ../../../../inc/AccountHistory.class.php:185
+#: ../../../../inc/SP/Account/AccountHistory.class.php:328
msgid "Fallo al actualizar la clave del histórico"
msgstr "Ошибка обновления истории мастер-паролей"
-#: ../../../../inc/AccountHistory.class.php:199
-#: ../../../../inc/CustomFields.class.php:323
-msgid "Registros actualizados"
-msgstr "Записи изменены"
+#: ../../../../inc/SP/Account/AccountTags.class.php:90
+msgid "Error al añadir las etiquetas de la cuenta"
+msgstr "Ошибка при добавлении тэгов учетной записи"
-#: ../../../../inc/Acl.class.php:112
-msgid "Denegado acceso a"
-msgstr "Доступ запрещен к"
+#: ../../../../inc/SP/Account/AccountTags.class.php:129
+msgid "Error al eliminar las etiquetas de la cuenta"
+msgstr "Ошибка при удалении тегов для учетной записи"
-#: ../../../../inc/Acl.class.php:126
-msgid "Buscar Cuentas"
-msgstr "Поиск"
+#: ../../../../inc/SP/Account/AccountUtil.class.php:132
+msgid "No se pudieron obtener los datos de las cuentas"
+msgstr "Ошибка получения информации о учетной записи"
-#: ../../../../inc/Acl.class.php:127
-msgid "Ver Cuenta"
-msgstr "Просмотр деталей учетной записи"
+#: ../../../../inc/SP/Account/UserAccounts.class.php:89
+msgid "Error al eliminar usuarios asociados a la cuenta"
+msgstr "Ошибка удаления пользователей учетной записи"
-#: ../../../../inc/Acl.class.php:128 ../../../../web/AccountC.class.php:265
-#: ../../../../inc/themes/classic/search.inc:161
-#: ../../../../inc/themes/material-blue/search.inc:172
-msgid "Copiar Cuenta"
-msgstr "Скопировать учетную запись"
+#: ../../../../inc/SP/Account/UserAccounts.class.php:130
+msgid "Error al actualizar los usuarios de la cuenta"
+msgstr "Ошибка изменения пользователей с доступом к учетной записи"
-#: ../../../../inc/Acl.class.php:130 ../../../../web/AccountC.class.php:329
-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:191
-#: ../../../../inc/themes/classic/profiles.inc:50
-#: ../../../../inc/themes/material-blue/account.inc:234
-#: ../../../../inc/themes/material-blue/config.inc:280
-#: ../../../../inc/themes/material-blue/profiles.inc:60
-msgid "Archivos"
-msgstr "Файлы"
-
-#: ../../../../inc/Acl.class.php:136
-msgid "Peticiones"
-msgstr "Включить запросы по email"
-
-#: ../../../../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 "Управление API авторизации"
-
-#: ../../../../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/ConfigDB.class.php:91
-#: ../../../../inc/ConfigDB.class.php:119 ../../../../web/MainC.class.php:201
-#: ../../../../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:132
-#: ../../../../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:177
-#: ../../../../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
-msgid "Importar"
-msgstr "Импорт"
-
-#: ../../../../inc/Api.class.php:65 ../../../../inc/Api.class.php:88
-#: ../../../../inc/Api.class.php:126
+#: ../../../../inc/SP/Api/ApiBase.class.php:95
+#: ../../../../inc/SP/Api/ApiBase.class.php:187
+#: ../../../../inc/SP/Api/ApiBase.class.php:199
+#: ../../../../inc/SP/Api/ApiBase.class.php:212
+#: ../../../../inc/SP/Api/ApiBase.class.php:244
+#: ../../../../inc/SP/Api/SyspassApi.class.php:74
+#: ../../../../inc/SP/Api/SyspassApi.class.php:143
msgid "Acceso no permitido"
msgstr "Доступ запрещен к"
-#: ../../../../inc/Api.class.php:166
-msgid "Error de codificación"
-msgstr "Ошибка кодирования"
+#: ../../../../inc/SP/Api/ApiRequest.class.php:145
+#: ../../../../inc/SP/Import/XmlImportTrait.class.php:75
+msgid "Método inválido"
+msgstr "Ошибочный метод"
-#: ../../../../inc/ApiRequest.class.php:102
-msgid "Token de autorización"
-msgstr "Токен авторизации"
+#: ../../../../inc/SP/Api/ApiRequest.class.php:162
+msgid "Datos inválidos"
+msgstr "Ошибочные данные"
-#: ../../../../inc/ApiRequest.class.php:103
-msgid "Acción a realizar"
-msgstr "Действие"
+#: ../../../../inc/SP/Api/ApiRequest.class.php:164
+msgid "Formato incorrecto"
+msgstr "Ошибочный формат"
-#: ../../../../inc/ApiRequest.class.php:104
-msgid "Clave de usuario (opcional)"
-msgstr "Проль пользователя (опционально)"
+#: ../../../../inc/SP/Api/ApiTokens.class.php:97
+#: ../../../../inc/SP/Api/ApiTokens.class.php:125
+#: ../../../../inc/SP/Api/ApiTokens.class.php:150
+#: ../../../../inc/SP/Api/ApiTokens.class.php:183
+#: ../../../../inc/SP/Api/ApiTokens.class.php:224
+#: ../../../../inc/SP/Api/ApiTokens.class.php:242
+#: ../../../../inc/SP/Api/ApiTokens.class.php:262
+#: ../../../../inc/SP/Api/ApiTokensUtil.class.php:168
+#: ../../../../inc/SP/Controller/LoginController.class.php:182
+#: ../../../../inc/SP/Controller/LoginController.class.php:257
+#: ../../../../inc/SP/Controller/LoginController.class.php:360
+#: ../../../../inc/SP/Controller/LoginController.class.php:384
+#: ../../../../inc/SP/Core/Crypt.class.php:212
+#: ../../../../inc/SP/Core/Crypt.class.php:223
+#: ../../../../inc/SP/Import/XmlFileImport.class.php:106
+#: ../../../../inc/SP/Mgmt/Users/UserPassRecover.class.php:134
+msgid "Error interno"
+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
+#: ../../../../inc/SP/Api/ApiTokens.class.php:129
msgid "La autorización ya existe"
msgstr "Авторизация уже существует"
-#: ../../../../inc/ApiTokens.class.php:307
-msgid "Actualizar Autorización"
-msgstr "Обновить авторизацию"
+#: ../../../../inc/SP/Api/SyspassApi.class.php:81
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:222
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:223
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:517
+#: ../../../../inc/SP/Core/Acl.class.php:191
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:48
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:71
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:54
+msgid "Ver Clave"
+msgstr "Показать пароль"
-#: ../../../../inc/ApiTokens.class.php:331
-#: ../../../../web/UsersMgmtC.class.php:422
-msgid "Eliminar Autorización"
-msgstr "Удалить авторизацию"
+#: ../../../../inc/SP/Api/SyspassApi.class.php:84
+#: ../../../../inc/SP/Api/SyspassApi.class.php:181
+#: ../../../../inc/SP/Api/SyspassApi.class.php:219
+#: ../../../../inc/SP/Api/SyspassApi.class.php:272
+#: ../../../../inc/SP/Api/SyspassApi.class.php:308
+#: ../../../../inc/SP/Api/SyspassApi.class.php:361
+#: ../../../../inc/SP/Api/SyspassApi.class.php:397
+#: ../../../../inc/SP/Controller/MainController.class.php:574
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApiBase.class.php:197
+msgid "Origen"
+msgstr "Источник"
-#: ../../../../inc/Auth.class.php:107
-msgid "Usuario no pertenece al grupo"
-msgstr "Пользователь не состоит в группе"
+#: ../../../../inc/SP/Api/SyspassApi.class.php:178
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:914
+msgid "Crear Cuenta"
+msgstr "Добавить учетную запись"
-#: ../../../../inc/Auth.class.php:186
-#: ../../../../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
+#: ../../../../inc/SP/Api/SyspassApi.class.php:179
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:915
+#: ../../../../inc/SP/Import/ImportBase.class.php:140
+msgid "Cuenta creada"
+msgstr "Учетная запись создана"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:180
+#: ../../../../inc/SP/Api/SyspassApi.class.php:218
+#: ../../../../inc/SP/Api/SyspassApi.class.php:271
+#: ../../../../inc/SP/Api/SyspassApi.class.php:307
+#: ../../../../inc/SP/Api/SyspassApi.class.php:360
+#: ../../../../inc/SP/Api/SyspassApi.class.php:396
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:354
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:56
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:130
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:205
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:282
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:349
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:402
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:473
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:592
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:666
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:912
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:230
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:245
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:272
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:283
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:374
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:382
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:402
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:434
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:442
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:462
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:496
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:504
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:524
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:558
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:566
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:587
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:667
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:674
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:775
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:782
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:800
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:862
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:870
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:877
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:916
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:926
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:935
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:944
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:967
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:971
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1156
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1177
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1181
+#: ../../../../inc/SP/Core/Plugin/PluginDataStore.class.php:77
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:12
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:9
+#: ../../../../inc/themes/material-blue/views/account/account.inc:41
+#: ../../../../inc/themes/material-blue/views/account/request.inc:12
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:43
+#: ../../../../inc/themes/material-blue/views/config/info.inc:30
+#: ../../../../inc/themes/material-blue/views/itemshow/categories.inc:16
+#: ../../../../inc/themes/material-blue/views/itemshow/customers.inc:19
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:19
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:18
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:13
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:17
+#: ../../../../inc/themes/material-blue/views/itemshow/tags.inc:16
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:22
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:12
+msgid "Nombre"
+msgstr "Имя"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:209
+msgid "Cuenta no encontrada"
+msgstr ""
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:216
+#: ../../../../inc/SP/Controller/AccountController.class.php:551
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:277
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:278
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:383
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:384
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:454
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:455
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:961
+#: ../../../../inc/SP/Core/Acl.class.php:192
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:39
+msgid "Eliminar Cuenta"
+msgstr "Удалить учетную запись"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:217
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:970
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1180
+msgid "Cuenta eliminada"
+msgstr "Учетная запись удалена"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:269
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:556
+msgid "Crear Categoría"
+msgstr "Добавить категорию"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:270
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:557
+#: ../../../../inc/SP/Import/ImportBase.class.php:161
+msgid "Categoría creada"
+msgstr "Категория создана"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:299
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:127
+msgid "Categoría no encontrada"
+msgstr "Категория не найдена"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:305
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:111
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:112
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:584
+#: ../../../../inc/SP/Core/Acl.class.php:200
+msgid "Eliminar Categoría"
+msgstr "Удалить категорию"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:306
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:579
+msgid "Categoría eliminada"
+msgstr "Категория удалена"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:358
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:494
+msgid "Crear Cliente"
+msgstr "Добавить заказчика"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:359
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:495
+#: ../../../../inc/SP/Import/ImportBase.class.php:183
+msgid "Cliente creado"
+msgstr "Заказчик добавлен"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:388
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:132
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:203
+msgid "Cliente no encontrado"
+msgstr "Заказчик не найден"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:394
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:185
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:186
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:521
+#: ../../../../inc/SP/Core/Acl.class.php:205
+msgid "Eliminar Cliente"
+msgstr "Удалить заказчика"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:395
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:516
+msgid "Cliente eliminado"
+msgstr "Заказчик удален"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:418
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:709
+msgid "Proceso de backup finalizado"
+msgstr "Процесс резервного копирования закончен"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:424
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:704
+#: ../../../../inc/SP/Core/Backup.class.php:75
+msgid "Error al realizar el backup"
+msgstr "Ошибка при выполнении резервной копии"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:425
+#: ../../../../inc/SP/Controller/ChecksController.class.php:113
+#: ../../../../inc/SP/Controller/ChecksController.class.php:142
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:682
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:705
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1026
+#: ../../../../inc/SP/Import/Import.class.php:115
+msgid "Revise el registro de eventos para más detalles"
+msgstr "Проверьте журнал событий для деталей"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:455
+#: ../../../../inc/SP/Api/SyspassApi.class.php:472
+#: ../../../../inc/SP/Api/SyspassApi.class.php:479
+msgid "Id de la cuenta"
+msgstr "ID учетной записи"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:456
+#: ../../../../inc/SP/Api/SyspassApi.class.php:473
+#: ../../../../inc/SP/Api/SyspassApi.class.php:485
+msgid "Clave del usuario asociado al token"
+msgstr "Токен пароля пользователя"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:457
+msgid "Devolver detalles en la respuesta"
+msgstr "Отправлены детали по запросу"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:463
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:15
+msgid "Texto a buscar"
+msgstr "Текст для поиска"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:464
+#: ../../../../inc/SP/Api/SyspassApi.class.php:503
+#: ../../../../inc/SP/Api/SyspassApi.class.php:523
+msgid "Número de resultados a mostrar"
+msgstr "Количество результатов для отображения"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:465
+msgid "Id de categoría a filtrar"
+msgstr "ID категории для фильтра"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:466
+msgid "Id de cliente a filtrar"
+msgstr "ID заказчика для фильтра"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:486
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:18
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:16
+#: ../../../../inc/themes/material-blue/views/account/account.inc:48
+#: ../../../../inc/themes/material-blue/views/account/request.inc:19
+msgid "Nombre de cuenta"
+msgstr "Имя учетной записи"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:487
+#: ../../../../inc/SP/Api/SyspassApi.class.php:516
+msgid "Id de categoría"
+msgstr "ID категории"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:488
+#: ../../../../inc/SP/Api/SyspassApi.class.php:536
+msgid "Id de cliente"
+msgstr "ID заказчика"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:489
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:615
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:64
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:56
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:62
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:73
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:76
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:79
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:87
+#: ../../../../inc/themes/material-blue/views/account/account.inc:123
+#: ../../../../inc/themes/material-blue/views/account/account.inc:130
+#: ../../../../inc/themes/material-blue/views/account/viewpass.inc:31
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:254
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:257
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:61
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:138
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:77
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:84
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:229
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:236
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:102
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:109
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:35
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:41
+#: ../../../../inc/themes/material-blue/views/main/install.inc:43
+#: ../../../../inc/themes/material-blue/views/main/login.inc:27
+#: ../../../../inc/themes/material-blue/views/main/login.inc:88
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:34
+msgid "Clave"
+msgstr "Пароль"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:490
+#: ../../../../inc/themes/material-blue/views/account/account.inc:117
+msgid "Usuario de acceso"
+msgstr "Пользователь доступа"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:491
+#: ../../../../inc/themes/material-blue/views/account/account.inc:105
+msgid "URL o IP de acceso"
+msgstr "URL или IP доступа"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:492
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:72
+#: ../../../../inc/themes/material-blue/views/account/account.inc:172
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:135
+msgid "Notas sobre la cuenta"
+msgstr "Заметки по учетной записи"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:502
+msgid "Nombre de categoría a buscar"
+msgstr "Название категории для поиска"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:509
+#: ../../../../inc/themes/material-blue/views/itemshow/categories.inc:23
+msgid "Nombre de la categoría"
+msgstr "Имя категории"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:510
+#: ../../../../inc/themes/material-blue/views/itemshow/categories.inc:35
+msgid "Descripción de la categoría"
+msgstr "Описание категории"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:522
+msgid "Nombre de cliente a buscar"
+msgstr "Название заказчика для поиска"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:529
+#: ../../../../inc/themes/material-blue/views/itemshow/customers.inc:26
+msgid "Nombre del cliente"
+msgstr "Имя заказчика"
+
+#: ../../../../inc/SP/Api/SyspassApi.class.php:530
+#: ../../../../inc/themes/material-blue/views/itemshow/customers.inc:39
+msgid "Descripción del cliente"
+msgstr "Описание заказчика"
+
+#: ../../../../inc/SP/Auth/Auth.class.php:87
+msgid "Método ya inicializado"
+msgstr "Метод уже инициализирован"
+
+#: ../../../../inc/SP/Auth/Auth.class.php:89
+msgid "Método no disponible"
+msgstr "Метод недоступен"
+
+#: ../../../../inc/SP/Auth/AuthUtil.class.php:63
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:132
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:170
msgid "Cambio de Clave"
msgstr "Изменение пароля"
-#: ../../../../inc/Auth.class.php:188
+#: ../../../../inc/SP/Auth/AuthUtil.class.php:64
msgid "Se ha solicitado el cambio de su clave de usuario."
msgstr "Запрос на смену пароля выполнен."
-#: ../../../../inc/Auth.class.php:190
+#: ../../../../inc/SP/Auth/AuthUtil.class.php:66
msgid "Para completar el proceso es necesario que acceda a la siguiente URL:"
msgstr "Для завершения, пожалуйста пройдите по ссылке :"
-#: ../../../../inc/Auth.class.php:194
+#: ../../../../inc/SP/Auth/AuthUtil.class.php:70
msgid "Si no ha solicitado esta acción, ignore este mensaje."
msgstr ""
"Если Вы не запрашивали данное действие, пожалуйста, проигнорируйте данное "
"письмо."
-#: ../../../../inc/Backup.class.php:167
-msgid "Esta operación sólo es posible en entornos Linux"
-msgstr "Данная операция возможна только в Linux"
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:118
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:432
+#: ../../../../inc/SP/Controller/ChecksController.class.php:92
+msgid "Los parámetros de LDAP no están configurados"
+msgstr "Параметры LDAP не указаны"
-#: ../../../../inc/Backup.class.php:169
-msgid "Error al realizar backup en modo compatibilidad"
-msgstr "Ошибка при создании резервной копии в режиме совместимости"
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:132
+#: ../../../../inc/SP/Controller/ChecksController.class.php:107
+msgid "Conexión a LDAP correcta"
+msgstr "Подключение к LDAP успешно"
-#: ../../../../inc/Backup.class.php:223 ../../../../inc/XmlExport.class.php:467
-msgid "No es posible crear el directorio de backups"
-msgstr "Невозможно создать директорию резервной копии"
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:133
+#: ../../../../inc/SP/Mgmt/Users/UserLdapSync.class.php:67
+msgid "Objetos encontrados"
+msgstr "Найдено объектов"
-#: ../../../../inc/Backup.class.php:228 ../../../../inc/XmlExport.class.php:472
-msgid "Compruebe los permisos del directorio de backups"
-msgstr "Проверьте права на папку резервных копий"
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:169
+msgid "No es posible conectar con el servidor de LDAP"
+msgstr "Невозможно подключиться к серверу LDAP"
-#: ../../../../inc/Category.class.php:69 ../../../../inc/Category.class.php:165
-msgid "Nombre de categoría duplicado"
-msgstr "Категория с таким именем уже существует"
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:170
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:49
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:19
+#: ../../../../inc/themes/material-blue/views/config/info.inc:58
+#: ../../../../inc/themes/material-blue/views/config/info.inc:61
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:62
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:87
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:27
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:34
+msgid "Servidor"
+msgstr "Сервер"
-#: ../../../../inc/Category.class.php:78
-msgid "Error al crear la categoría"
-msgstr "Ошибка при создании категории"
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:214
+msgid "Error al conectar (BIND)"
+msgstr "Ошибка подключения (BIND)"
-#: ../../../../inc/Category.class.php:83 ../../../../inc/Category.class.php:132
-#: ../../../../inc/Category.class.php:182 ../../../../web/SearchC.class.php:299
-#: ../../../../inc/themes/classic/account.inc:42
-#: ../../../../inc/themes/classic/search.inc:83
-#: ../../../../inc/themes/material-blue/account.inc:51
-#: ../../../../inc/themes/material-blue/search.inc:85
-msgid "Categoría"
-msgstr "Категория"
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:247
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:259
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:269
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:679
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:691
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:701
+msgid "Error al buscar objetos en DN base"
+msgstr "Ошибка поиска объектов в DN"
-#: ../../../../inc/Category.class.php:119
-msgid "Categoría en uso por:"
-msgstr "Категория используется:"
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:533
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:556
+msgid "Error al buscar el DN del usuario"
+msgstr "Ошибка поиска пользователя в DN"
-#: ../../../../inc/Category.class.php:129
-msgid "Error al eliminar la categoría"
-msgstr "Ошибка при удалении категории"
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:534
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:547
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:557
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:167
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:109
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:119
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:368
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:748
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:835
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:616
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:624
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:720
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:730
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:745
+#: ../../../../inc/SP/Controller/LoginController.class.php:196
+#: ../../../../inc/SP/Controller/LoginController.class.php:251
+#: ../../../../inc/SP/Controller/LoginController.class.php:345
+#: ../../../../inc/SP/Controller/LoginController.class.php:403
+#: ../../../../inc/SP/Controller/LoginController.class.php:426
+#: ../../../../inc/SP/Core/Init.class.php:591
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:77
+#: ../../../../inc/SP/Mgmt/Users/UserLdapSync.class.php:99
+#: ../../../../inc/SP/Mgmt/Users/UserPreferencesUtil.class.php:66
+#: ../../../../res/test.php:64
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:45
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:51
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:54
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:60
+#: ../../../../inc/themes/material-blue/views/account/account.inc:110
+#: ../../../../inc/themes/material-blue/views/account/viewpass.inc:20
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:63
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:47
+#: ../../../../inc/themes/material-blue/views/config/info.inc:46
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:117
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:64
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:71
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:209
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:223
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:31
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:35
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:37
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:12
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:14
+#: ../../../../inc/themes/material-blue/views/main/login.inc:15
+#: ../../../../inc/themes/material-blue/views/main/login.inc:87
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:16
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:90
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:92
+msgid "Usuario"
+msgstr "Пользователь"
-#: ../../../../inc/Category.class.php:132
-#: ../../../../web/AccountsMgmtC.class.php:102
-msgid "Eliminar Categoría"
-msgstr "Удалить категорию"
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:546
+msgid "Error al localizar el usuario en LDAP"
+msgstr "Ошибка поиска пользователя в LDAP"
-#: ../../../../inc/Category.class.php:179
-msgid "Error al actualizar la categoría"
-msgstr "Ошибка изменения информации о категории"
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:587
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:600
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:611
+msgid "Error al buscar RDN de grupo"
+msgstr "Ошибка поиска группы в RDN"
-#: ../../../../inc/Category.class.php:182
-msgid "Modificar Categoría"
-msgstr "Изменить категорию"
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:588
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:601
+#: ../../../../inc/SP/Auth/Ldap/LdapBase.class.php:612
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:134
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:144
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:158
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:168
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:108
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:120
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:476
+#: ../../../../inc/SP/Controller/LoginController.class.php:253
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:236
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:239
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:174
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:201
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:71
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:73
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:47
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:61
+msgid "Grupo"
+msgstr "Группа"
-#: ../../../../inc/Config.class.php:148
-msgid "No es posible escribir el archivo de configuración"
-msgstr "Ошибка записи файла конфигурации"
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:121
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:157
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:93
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:126
+msgid "Usuario verificado en grupo"
+msgstr "Членство пользователя в группе проверено"
-#: ../../../../inc/Config.class.php:148
-msgid "Compruebe los permisos del directorio \"config\""
-msgstr "Пожалуйста, проверьте права на папку \"config\""
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:133
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:107
+msgid "Error al buscar el grupo de usuarios"
+msgstr "Ошибка поиска групп пользователя"
-#: ../../../../inc/ConfigDB.class.php:91 ../../../../inc/ConfigDB.class.php:120
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:143
+msgid "No se encontró el grupo con ese nombre"
+msgstr "Не найдено группы с таким именем"
+
+#: ../../../../inc/SP/Auth/Ldap/LdapMsAds.class.php:166
+#: ../../../../inc/SP/Auth/Ldap/LdapStd.class.php:118
+msgid "Usuario no pertenece al grupo"
+msgstr "Пользователь не состоит в группе"
+
+#: ../../../../inc/SP/Config/ConfigDB.class.php:107
+#: ../../../../inc/SP/Config/ConfigDB.class.php:147
+#: ../../../../inc/SP/Controller/MainController.class.php:287
+#: ../../../../inc/SP/Core/Acl.class.php:215
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:75
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:216
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:218
+msgid "Configuración"
+msgstr "Конфигурация"
+
+#: ../../../../inc/SP/Config/ConfigDB.class.php:108
+#: ../../../../inc/SP/Config/ConfigDB.class.php:148
msgid "Modificar configuración"
msgstr "Изменить конфигурацию"
-#: ../../../../inc/ConfigDB.class.php:121
+#: ../../../../inc/SP/Config/ConfigDB.class.php:149
+#: ../../../../inc/SP/Core/Upgrade.class.php:258
+#: ../../../../inc/SP/Core/Upgrade.class.php:264
msgid "Parámetro"
msgstr "Параметр"
-#: ../../../../inc/ConfigDB.class.php:122
+#: ../../../../inc/SP/Config/ConfigDB.class.php:152
msgid "Valor"
msgstr "Значение"
-#: ../../../../inc/Controller.class.php:165
+#: ../../../../inc/SP/Controller/AccountController.class.php:144
+#: ../../../../inc/SP/Controller/AccountController.class.php:467
+#: ../../../../inc/SP/Controller/AccountController.class.php:499
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:211
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:212
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:45
+msgid "Detalles de Cuenta"
+msgstr "Детали учетной записи"
+
+#: ../../../../inc/SP/Controller/AccountController.class.php:256
+#: ../../../../inc/SP/Controller/MainController.class.php:257
+#: ../../../../inc/SP/Core/Acl.class.php:187
+msgid "Nueva Cuenta"
+msgstr "Новая учетная запись"
+
+#: ../../../../inc/SP/Controller/AccountController.class.php:383
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:264
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:265
+#: ../../../../inc/SP/Core/Acl.class.php:186
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:101
+msgid "Copiar Cuenta"
+msgstr "Скопировать учетную запись"
+
+#: ../../../../inc/SP/Controller/AccountController.class.php:411
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:251
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:252
+#: ../../../../inc/SP/Core/Acl.class.php:188
+msgid "Editar Cuenta"
+msgstr "Изменить учетную запись"
+
+#: ../../../../inc/SP/Controller/AccountController.class.php:439
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:116
+msgid "Modificar Clave de Cuenta"
+msgstr "Изменить пароль учетной записи"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:237
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:238
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:86
+msgid "Copiar Clave en Portapapeles"
+msgstr "Копировать пароль в буфер"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:287
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:288
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:142
+msgid "Solicitar Modificación"
+msgstr "Запросить изменение"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:297
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:298
+msgid "Más Acciones"
+msgstr "Другие действия"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:347
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:281
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:350
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:403
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:834
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1103
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:23
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:29
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:21
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:27
+#: ../../../../inc/themes/material-blue/views/account/account.inc:53
+#: ../../../../inc/themes/material-blue/views/account/account.inc:55
+#: ../../../../inc/themes/material-blue/views/account/request.inc:24
+#: ../../../../inc/themes/material-blue/views/account/request.inc:31
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:21
+msgid "Cliente"
+msgstr "Заказчик"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:348
+msgid "Ordenar por Cliente"
+msgstr "Сортировать по заказчику"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:355
+msgid "Ordenar por Nombre"
+msgstr "Сортировать по имени"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:361
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:32
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:38
+#: ../../../../inc/themes/material-blue/views/account/account.inc:76
+#: ../../../../inc/themes/material-blue/views/account/account.inc:78
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:57
+msgid "Categoría"
+msgstr "Категория"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:362
+msgid "Ordenar por Categoría"
+msgstr "Сортировать по категории"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:369
+msgid "Ordenar por Usuario"
+msgstr "Сортировать по имени пользователя"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:375
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:34
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:40
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:43
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:49
+#: ../../../../inc/themes/material-blue/views/account/account.inc:99
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:68
+msgid "URL / IP"
+msgstr "URL / IP"
+
+#: ../../../../inc/SP/Controller/AccountSearchController.class.php:376
+msgid "Ordenar por URL / IP"
+msgstr "Сортировать по URL / IP"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:108
+#, php-format
+msgid "Objetos encontrados: %d"
+msgstr "Найдено объектов: %d"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:127
+msgid "Los parámetros de DokuWiki no están configurados"
+msgstr "Параметры DokuWiki не заданы"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:135
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:113
+#: ../../../../inc/SP/Import/ImportBase.class.php:144
+#: ../../../../inc/SP/Import/ImportBase.class.php:166
+#: ../../../../inc/SP/Import/ImportBase.class.php:188
+#: ../../../../inc/SP/Import/ImportBase.class.php:210
+#: ../../../../inc/SP/Log/Email.class.php:92
+#: ../../../../inc/SP/Log/Email.class.php:93
+#: ../../../../inc/SP/Log/Email.class.php:203
+#: ../../../../inc/SP/Log/Email.class.php:204
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApiBase.class.php:193
+msgid "Error"
+msgstr "Ошибка"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:137
+msgid "Conexión correcta"
+msgstr "Успешное подключение"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:138
+#: ../../../../inc/SP/Core/Init.class.php:429
+#: ../../../../inc/SP/Core/Init.class.php:669
+#: ../../../../inc/SP/Core/Upgrade.class.php:94
+#: ../../../../inc/SP/Core/Upgrade.class.php:278
+#: ../../../../inc/themes/material-blue/views/config/info.inc:40
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:25
+msgid "Versión"
+msgstr "Версия"
+
+#: ../../../../inc/SP/Controller/ChecksController.class.php:141
+msgid "Error de conexión a DokuWiki"
+msgstr "Ошибка при подключении к DokuWiki"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:173
+msgid "Faltan parámetros de syslog remoto"
+msgstr "Пропущены параметры удаленного syslog"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:182
+msgid "Syslog remoto deshabilitado"
+msgstr "Удаленный syslog отключен"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:195
+msgid "Faltan parámetros de Proxy"
+msgstr "Не указаны все параметры прокси"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:204
+msgid "Proxy habiltado"
+msgstr "Прокси включен"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:208
+msgid "Proxy deshabilitado"
+msgstr "Прокси выключен"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:211
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:300
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:364
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:411
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:465
+msgid "Sección"
+msgstr "Раздел"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:211
+#: ../../../../inc/SP/Controller/ConfigController.class.php:151
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:226
+#: ../../../../inc/themes/material-blue/views/main/install.inc:132
+msgid "General"
+msgstr "Основное"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:228
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:511
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:581
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:649
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:699
+#: ../../../../inc/SP/Forms/UserForm.class.php:96
+#: ../../../../inc/SP/Forms/UserForm.class.php:108
+#: ../../../../inc/SP/Forms/UserForm.class.php:122
+msgid "Ey, esto es una DEMO!!"
+msgstr "Ey, это DEMO!!"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:242
+msgid "Configuración actualizada"
+msgstr "Конфигурация изменена"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:244
+msgid "Error al guardar la configuración"
+msgstr "Ошибка при сохранении конфигурации"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:248
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:424
+msgid "Modificar Configuración"
+msgstr "Изменить конфигурацию"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:281
+msgid "El tamaño máximo por archivo es de 16MB"
+msgstr "Максимальный размер файла 16MB"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:300
+#: ../../../../inc/SP/Controller/ConfigController.class.php:200
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:365
+#: ../../../../inc/SP/Controller/MainController.class.php:580
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:90
+#: ../../../../inc/themes/material-blue/views/account/linkedAccounts.inc:13
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:30
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:32
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:196
+msgid "Cuentas"
+msgstr "Учетные записи"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:322
+msgid "Faltan parámetros de Wiki"
+msgstr "Пропущены настройки Wiki"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:330
+msgid "Wiki habiltada"
+msgstr "WiKi включен"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:334
+msgid "Wiki deshabilitada"
+msgstr "WiKi выключен"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:347
+msgid "Faltan parámetros de DokuWiki"
+msgstr "Пропущены параметры DokuWiki"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:357
+msgid "DokuWiki habiltada"
+msgstr "DokuWiki включен"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:361
+msgid "DokuWiki deshabilitada"
+msgstr "DokuWiki выключен"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:364
+#: ../../../../inc/SP/Controller/ConfigController.class.php:232
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:63
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:10
+msgid "Wiki"
+msgstr "Wiki"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:391
+msgid "Faltan parámetros de LDAP"
+msgstr "Пропущены настройки LDAP"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:404
+msgid "LDAP habiltado"
+msgstr "LDAP включен"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:408
+msgid "LDAP deshabilitado"
+msgstr "LDAP выключен"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:411
+#: ../../../../inc/SP/Controller/ConfigController.class.php:265
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:7
+msgid "LDAP"
+msgstr "LDAP"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:440
+msgid "Faltan parámetros de Correo"
+msgstr "Пропущены настройки почты"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:456
+msgid "Correo habiltado"
+msgstr "Email включен"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:462
+msgid "Correo deshabilitado"
+msgstr "Email выключен"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:465
+#: ../../../../inc/SP/Controller/ConfigController.class.php:296
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:7
+msgid "Correo"
+msgstr "Mail"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:487
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:564
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:279
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:507
+#: ../../../../inc/SP/Controller/LoginController.class.php:288
+#: ../../../../inc/SP/Controller/LoginController.class.php:298
+msgid "Clave maestra actualizada"
+msgstr "Мастер-пароль изменен"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:488
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:566
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:279
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:507
+#, fuzzy
+msgid "Reinicie la sesión para cambiarla"
+msgstr "Перезайдите для вступления изменений"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:492
+msgid "Clave maestra no indicada"
+msgstr "Необходим мастер-пароль"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:495
+msgid "Se ha de confirmar el cambio de clave"
+msgstr "Изменение пароля должно быть подтверждено"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:500
+msgid "Las claves son idénticas"
+msgstr "Пароли одинаковы"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:503
+msgid "Las claves maestras no coinciden"
+msgstr "Мастер-пароль не совпадает"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:506
+msgid "La clave maestra actual no coincide"
+msgstr "Текущий мастер-пароль ошибочен"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:521
+#: ../../../../inc/SP/Import/Import.class.php:89
+msgid "No es posible iniciar una transacción"
+msgstr "Невозможно начать транзакцию"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:530
+msgid "Errores al actualizar las claves de las cuentas"
+msgstr "Ошибка при изменении паролей учетных записей"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:539
+msgid "Errores al actualizar las claves de las cuentas del histórico"
+msgstr "Ошибка при обновлении истории паролей учетной записи"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:546
+msgid "Errores al actualizar datos de campos personalizados"
+msgstr "Ошибка при изменении свободных полей учетной записи"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:551
+#: ../../../../inc/SP/Import/Import.class.php:95
+msgid "No es posible finalizar una transacción"
+msgstr "Невозможно закончить транзакцию"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:569
+msgid "Error al guardar el hash de la clave maestra"
+msgstr "Ошибка при сохранении хеша мастер-пароля"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:588
+msgid "Hash de clave maestra actualizado"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:592
+msgid "Error al actualizar el hash de la clave maestra"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:611
+msgid "Generar Clave Temporal"
+msgstr "Сгенерировать временный пароль"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:614
+msgid "Clave Temporal Generada"
+msgstr "Временный пароль"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:619
+#, php-format
+msgid "Clave Maestra %s"
+msgstr "Мастер пароль %s"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:620
+msgid ""
+"Se ha generado una nueva clave para el acceso a sysPass y se solicitará en "
+"el siguiente inicio."
+msgstr ""
+"Был сгенерирован новый мастер пароль, который необходимо будет ввести при "
+"следующей авторизации в приложении"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:622
+#, php-format
+msgid "La nueva clave es: %s"
+msgstr "Новый мастер пароль: %s"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:624
+msgid "No olvide acceder lo antes posible para guardar los cambios."
+msgstr "Пожалуйста, не забудьте залогиниться для сохранения изменений."
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:635
+msgid "Error al generar clave temporal"
+msgstr "Ошибка генерации временного пароля"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:676
+#: ../../../../inc/SP/Forms/AccountForm.class.php:134
+#: ../../../../inc/SP/Forms/UserForm.class.php:112
+msgid "Las claves no coinciden"
+msgstr "Пароль и подтверждение не совпадают"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:681
+msgid "Error al realizar la exportación"
+msgstr "Ошибка при экспорте"
+
+#: ../../../../inc/SP/Controller/ConfigActionController.class.php:686
+msgid "Proceso de exportación finalizado"
+msgstr "Процесс экспорта закончен"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:322
+#: ../../../../inc/SP/Core/Acl.class.php:217
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:233
+msgid "Encriptación"
+msgstr "Шифрование"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:367
+msgid "Último backup"
+msgstr "Последняя резервная копия"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:367
+msgid "No se encontraron backups"
+msgstr "Нет доступных резервных копий"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:378
+msgid "Última exportación"
+msgstr "Последний экспорт"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:378
+msgid "No se encontró archivo de exportación"
+msgstr "Файл экспорта не найден"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:380
+#: ../../../../inc/SP/Core/Acl.class.php:218
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:7
+msgid "Copia de Seguridad"
+msgstr "Backup"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:402
+#: ../../../../inc/SP/Import/Import.class.php:66
+#: ../../../../inc/SP/Import/ImportBase.class.php:77
+msgid "Importar Cuentas"
+msgstr "Импорт учетных записей"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:425
+msgid "No instalado"
+msgstr "Не установлено"
+
+#: ../../../../inc/SP/Controller/ConfigController.class.php:427
+#: ../../../../inc/SP/Controller/MainController.class.php:582
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:77
+msgid "Información"
+msgstr "Информация"
+
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:275
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:282
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:275
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:276
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:277
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:278
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:280
+#: ../../../../inc/SP/Core/Init.class.php:293
msgid "Consulte con el administrador"
msgstr "Пожалуйста, свяжитесь с администратором"
-#: ../../../../inc/Controller.class.php:167
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:276
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:505
+msgid "No tiene permisos para acceder a esta cuenta"
+msgstr "Нет прав для доступа к данной учетной записи"
+
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:277
msgid "No tiene permisos para acceder a esta página"
msgstr "Нет прав для доступа к данной странице"
-#: ../../../../inc/Controller.class.php:168
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:278
msgid "No tiene permisos para realizar esta operación"
msgstr "Нет прав для данной операции"
-#: ../../../../inc/Crypt.class.php:125 ../../../../inc/Email.class.php:148
+#: ../../../../inc/SP/Controller/ControllerBase.class.php:280
+msgid "Se ha producido una excepción"
+msgstr "Произошла ошибка"
+
+#: ../../../../inc/SP/Controller/EventlogController.class.php:102
+msgid "Vaciar Eventos"
+msgstr "Очистить записи"
+
+#: ../../../../inc/SP/Controller/EventlogController.class.php:102
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:144
+msgid "Vaciar registro de eventos"
+msgstr "Очистить журнал событий"
+
+#: ../../../../inc/SP/Controller/EventlogController.class.php:104
+msgid "Registro de eventos vaciado"
+msgstr "Журнал очищен"
+
+#: ../../../../inc/SP/Controller/EventlogController.class.php:125
+msgid "Buscar Evento"
+msgstr "Поиск событий"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:57
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:131
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:593
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:57
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1104
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:37
+#: ../../../../inc/themes/material-blue/views/itemshow/categories.inc:28
+#: ../../../../inc/themes/material-blue/views/itemshow/customers.inc:32
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:31
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:77
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:83
+msgid "Descripción"
+msgstr "Описание"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:72
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:91
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:161
+msgid "Categorías"
+msgstr "Категории"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:80
+msgid "Buscar Categoría"
+msgstr "Поиск категории"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:90
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:91
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:188
+#: ../../../../inc/themes/material-blue/views/account/account.inc:89
+msgid "Nueva Categoría"
+msgstr "Создать категорию"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:101
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:102
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:184
+#: ../../../../inc/SP/Core/Acl.class.php:199
+msgid "Editar Categoría"
+msgstr "Редактировать категорию"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:146
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:92
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:168
+msgid "Clientes"
+msgstr "Заказчики"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:154
+msgid "Buscar Cliente"
+msgstr "Поиск заказчика"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:164
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:165
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:175
+#: ../../../../inc/themes/material-blue/views/account/account.inc:66
+msgid "Nuevo Cliente"
+msgstr "Новый заказчик"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:175
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:176
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:171
+#: ../../../../inc/SP/Core/Acl.class.php:204
+msgid "Editar Cliente"
+msgstr "Редактировать заказчика"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:204
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:44
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:46
+msgid "Módulo"
+msgstr "Модуль"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:222
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:69
+#: ../../../../inc/themes/material-blue/views/account/account.inc:256
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:175
+msgid "Campos Personalizados"
+msgstr "Настраиваемые поля"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:230
+msgid "Buscar Campo"
+msgstr "Поиск поля"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:240
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:241
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:205
+msgid "Nuevo Campo"
+msgstr "Создать поле"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:251
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:252
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:209
+msgid "Editar Campo"
+msgstr "Изменить поле"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:261
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:262
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:687
+msgid "Eliminar Campo"
+msgstr "Удалить поле"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:302
+#: ../../../../inc/SP/Core/Acl.class.php:193
+#: ../../../../inc/themes/material-blue/views/account/files.inc:5
+#: ../../../../inc/themes/material-blue/views/account/files.inc:15
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:208
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:89
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:203
+msgid "Archivos"
+msgstr "Файлы"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:310
+msgid "Buscar Archivo"
+msgstr "Поиск файла"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:320
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:321
+#: ../../../../inc/themes/material-blue/views/account/files-list.inc:40
+msgid "Ver Archivo"
+msgstr "Показать файл"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:330
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:331
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:830
+#: ../../../../inc/themes/material-blue/views/account/files-list.inc:26
+msgid "Eliminar Archivo"
+msgstr "Удалить файл"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:373
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:434
+msgid "Buscar Cuenta"
+msgstr "Поиск учетной записи"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:404
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:54
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:65
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:85
+#: ../../../../inc/themes/material-blue/views/account/account.inc:156
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:64
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:71
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:24
+msgid "Fecha"
+msgstr "Дата"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:405
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:985
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:58
+msgid "Estado"
+msgstr "Статус"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:416
+#, fuzzy
+msgid "Modificada"
+msgstr "Изменить пароль"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:417
+#, fuzzy
+msgid "Eliminada"
+msgstr "Удалить"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:426
+#, fuzzy
+msgid "Cuentas (H)"
+msgstr "Учетные записи"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:444
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:445
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:942
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1154
+msgid "Restaurar Cuenta"
+msgstr "Восстановление учетной записи"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:475
+#: ../../../../inc/SP/Controller/LoginController.class.php:252
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:55
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:57
+msgid "Perfil"
+msgstr "Профиль"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:477
+msgid "Propiedades"
+msgstr "Настройки"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:498
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:93
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:24
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:44
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:46
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:49
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:140
+msgid "Usuarios"
+msgstr "Пользователи"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:506
+msgid "Buscar Usuario"
+msgstr "Поиск пользователя"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:515
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:516
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:136
+msgid "Nuevo Usuario"
+msgstr "Создать пользователя"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:529
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:530
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1014
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:292
+msgid "Importar usuarios de LDAP"
+msgstr "Импорт пользователей из LDAP"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:542
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:543
+msgid "Ver Detalles de Usuario"
+msgstr "Просмотр информации пользователя"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:552
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:553
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:128
+msgid "Editar Usuario"
+msgstr "Редактировать пользователя"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:562
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:563
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:20
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:46
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:52
+msgid "Cambiar Clave de Usuario"
+msgstr "Изменить пароль пользователя"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:573
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:574
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:269
+msgid "Eliminar Usuario"
+msgstr "Удалить пользователя"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:608
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:94
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:46
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:147
+msgid "Grupos"
+msgstr "Группы"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:616
+msgid "Buscar Grupo"
+msgstr "Поиск группы"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:626
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:627
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:149
+msgid "Nuevo Grupo"
+msgstr "Создать группу"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:637
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:638
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:145
+msgid "Editar Grupo"
+msgstr "Редактировать группу"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:647
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:648
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:399
+msgid "Eliminar Grupo"
+msgstr "Удалить группу"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:680
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:154
+msgid "Perfiles"
+msgstr "Профили"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:688
+msgid "Buscar Perfil"
+msgstr "Поиск профиля"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:698
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:699
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:162
+msgid "Nuevo Perfil"
+msgstr "Создать профиль"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:709
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:710
+msgid "Ver Detalles de Perfil"
+msgstr "Просмотр информации о профиле"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:719
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:720
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:158
+msgid "Editar Perfil"
+msgstr "Редактировать профиль"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:729
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:730
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:459
+msgid "Eliminar Perfil"
+msgstr "Удалить профиль"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:749
+#: ../../../../inc/SP/Log/Email.class.php:63
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:26
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:28
+msgid "Acción"
+msgstr "Действие"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:764
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:182
+msgid "Autorizaciones API"
+msgstr "API авторизации"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:772
+msgid "Buscar Token"
+msgstr "Поиск токена"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:782
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:783
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:197
+msgid "Nueva Autorización"
+msgstr "Создать авторизацию"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:793
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:794
+msgid "Ver token de Autorización"
+msgstr "Просмотр токена авторизации"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:803
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:804
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:201
+msgid "Editar Autorización"
+msgstr "Редактировать авторизацию"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:813
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:814
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:639
+msgid "Eliminar Autorización"
+msgstr "Удалить авторизацию"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:833
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:19
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:21
+msgid "Fecha Creación"
+msgstr "Дата создания"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:834
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:27
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:29
+msgid "Fecha Caducidad"
+msgstr "Действует до"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:836
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:43
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:45
+msgid "Notificar"
+msgstr "Уведомление"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:837
+#: ../../../../inc/themes/material-blue/views/account/details.inc:18
+#: ../../../../inc/themes/material-blue/views/account/details.inc:20
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:51
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:53
+msgid "Visitas"
+msgstr "Просмотров"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:856
+msgid "Enlaces"
+msgstr "Ссылки"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:864
+msgid "Buscar Enlace"
+msgstr "Поиск ссылок"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:874
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:875
+msgid "Ver Enlace"
+msgstr "Показать ссылку"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:883
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:884
+msgid "Renovar Enlace"
+msgstr "Обновить ссылку"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:893
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:894
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:748
+msgid "Eliminar Enlace"
+msgstr "Удалить ссылку"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:926
+#: ../../../../inc/themes/material-blue/views/account/account.inc:176
+#: ../../../../inc/themes/material-blue/views/account/account.inc:178
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:210
+msgid "Etiquetas"
+msgstr "Теги"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:934
+msgid "Buscar Etiqueta"
+msgstr "Поиск тегов"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:944
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:945
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:218
+msgid "Nueva Etiqueta"
+msgstr "Новый тег"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:955
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:956
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:222
+msgid "Editar Etiqueta"
+msgstr "Редактировать тег"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:965
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:966
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:797
+msgid "Eliminar Etiqueta"
+msgstr "Удалить тег"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:984
+msgid "Plugin"
+msgstr "Плагин"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1001
+msgid "Plugins"
+msgstr "Плагины"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1009
+msgid "Buscar Plugin"
+msgstr "Поиск плагинов"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1019
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1020
+msgid "Ver Plugin"
+msgstr "Показать плагин"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1028
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1029
+msgid "Habilitar"
+msgstr "Включить"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1038
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1039
+msgid "Deshabilitar"
+msgstr "Отключить"
+
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1048
+#: ../../../../inc/SP/Controller/Grids/Items.class.php:1049
+msgid "Restablecer Datos"
+msgstr "Сбросить данные"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:56
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:51
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:58
+msgid "Componente"
+msgstr "Компонент"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:67
+msgid "Leída"
+msgstr "Чтение"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:76
+#: ../../../../inc/SP/Controller/MainController.class.php:306
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:79
+msgid "Notificaciones"
+msgstr "Уведомления"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:84
+msgid "Buscar Notificación"
+msgstr "Поиск уведомления"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:95
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:96
+#: ../../../../inc/SP/Controller/NoticeShowController.class.php:94
+msgid "Nueva Notificación"
+msgstr "Новое уведомление"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:107
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:108
+#: ../../../../inc/SP/Controller/NoticeShowController.class.php:89
+msgid "Ver Notificación"
+msgstr "Показать уведомление"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:116
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:117
+msgid "Marcar Notificación"
+msgstr "Проверить уведомление"
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:126
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:127
+#: ../../../../inc/SP/Controller/NoticeShowController.class.php:98
+msgid "Editar Notificación"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:136
+#: ../../../../inc/SP/Controller/Grids/Notices.class.php:137
+msgid "Eliminar Notificación"
+msgstr "Удалить уведомление"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:228
+msgid "Crear Usuario"
+msgstr "Добавить пользователя"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:229
+msgid "Usuario creado"
+msgstr "Пользователь создан"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:236
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:251
+msgid "No se pudo realizar la petición de cambio de clave."
+msgstr "Выполнить запрос на смену пароля невозможно."
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:243
+msgid "Actualizar Usuario"
+msgstr "Изменить пользователя"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:244
+#: ../../../../inc/SP/Mgmt/Users/UserMigrate.class.php:105
+msgid "Usuario actualizado"
+msgstr "Данные пользователя обновлены"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:258
+msgid "Usuarios eliminados"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:264
+msgid "Usuario eliminado"
+msgstr "Пользователь удален"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:281
+msgid "Actualizar Clave Usuario"
+msgstr "Изменить пароль пользователя"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:372
+msgid "Crear Grupo"
+msgstr "Добавить группу"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:373
+msgid "Grupo creado"
+msgstr "Группа создана"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:380
+msgid "Actualizar Grupo"
+msgstr "Обновить группу"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:381
+msgid "Grupo actualizado"
+msgstr "Группа обновлена"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:388
+msgid "Grupos eliminados"
+msgstr "Группы удалены"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:394
+msgid "Grupo eliminado"
+msgstr "Группа удалена"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:432
+msgid "Crear Perfil"
+msgstr "Добавить профиль"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:433
+msgid "Perfil creado"
+msgstr "Профиль создан"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:440
+msgid "Actualizar Perfil"
+msgstr "Изменить профиль"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:441
+msgid "Perfil actualizado"
+msgstr "Профиль изменен"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:448
+msgid "Perfiles eliminados"
+msgstr "Профили удалены"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:454
+msgid "Perfil eliminado"
+msgstr "Профиль удален"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:502
+msgid "Actualizar Cliente"
+msgstr "Изменить заказчика"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:503
+msgid "Cliente actualizado"
+msgstr "Информация о заказчике обновлена"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:510
+msgid "Clientes eliminados"
+msgstr "Клиенты удалены"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:564
+msgid "Actualizar Categoría"
+msgstr "Изменить категорию"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:565
+msgid "Categoría actualizada"
+msgstr "Информация о категории изменена"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:573
+msgid "Categorías eliminadas"
+msgstr "Категории удалены"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:614
+msgid "Crear Autorización"
+msgstr "Добавить авторизацию"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:615
+msgid "Autorización creada"
+msgstr "Авторизация создана"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:622
+msgid "Actualizar Autorización"
+msgstr "Обновить авторизацию"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:623
+msgid "Autorización actualizada"
+msgstr "Авторизация изменена"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:632
+msgid "Autorizaciones eliminadas"
+msgstr "Авторизация удалена"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:636
+msgid "Autorización eliminada"
+msgstr "Авторизация удалена"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:665
+msgid "Crear Campo"
+msgstr "Добавить поле"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:666
+msgid "Campo creado"
+msgstr "Поле создано"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:672
+msgid "Actualizar Campo"
+msgstr "Изменить поле"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:673
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:216
+msgid "Campo actualizado"
+msgstr "Поле обновлено"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:680
+msgid "Campos eliminados"
+msgstr "Поля удалены"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:684
+msgid "Campo eliminado"
+msgstr "Поле удалено"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:716
+msgid "Crear Enlace"
+msgstr "Добавить ссылку"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:717
+msgid "Enlace creado"
+msgstr "Ссылка создана"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:726
+msgid "Actualizar Enlace"
+msgstr "Обновить ссылку"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:727
+msgid "Enlace actualizado"
+msgstr "Ссылка обновлена"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:736
+msgid "Enlaces eliminados"
+msgstr "Ссылки удалены"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:742
+msgid "Enlace eliminado"
+msgstr "Ссылка удалена"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:773
+msgid "Crear Etiqueta"
+msgstr "Добавить тег"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:774
+#: ../../../../inc/SP/Import/ImportBase.class.php:205
+msgid "Etiqueta creada"
+msgstr "Тег добавлен"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:780
+msgid "Actualizar Etiqueta"
+msgstr "Изменить тег"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:781
+msgid "Etiqueta actualizada"
+msgstr "Тег обновлен"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:788
+msgid "Etiquetas eliminadas"
+msgstr "Тэги удалены"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:794
+msgid "Etiqueta eliminada"
+msgstr "Тег удален"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:821
+msgid "Archivos eliminados"
+msgstr "Файлы удалены"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:860
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:868
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:875
+msgid "Actualizar Plugin"
+msgstr "Обновить плагин"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:861
+msgid "Plugin habilitado"
+msgstr "Плагин включен"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:869
+msgid "Plugin deshabilitado"
+msgstr "Плагин отключен"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:876
+msgid "Plugin restablecido"
+msgstr "Плагин сброшен"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:924
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:933
+msgid "Actualizar Cuenta"
+msgstr "Редактировать учетную запись"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:925
+msgid "Cuenta actualizada"
+msgstr "Информация об учетной записи изменена"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:943
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1155
+msgid "Cuenta restaurada"
+msgstr "Учетная запись восстановлена"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:964
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1174
+msgid "Cuentas eliminadas"
+msgstr "Учетные записи удалены"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:995
+msgid "Favorito añadido"
+msgstr "Добавлено в избранное"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1000
+msgid "Favorito eliminado"
+msgstr "Удалено из избранного"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1017
+msgid "Importación de usuarios de LDAP realizada"
+msgstr "Импорт пользователей из LDAP завершен"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1018
+msgid "Usuarios importados"
+msgstr "Импортированные пользователи"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1023
+msgid "Error al importar usuarios de LDAP"
+msgstr "Ошибка при импорте пользователей из LDAP"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1041
+msgid "Notificación leída"
+msgstr "Уведомление прочитано"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1049
+msgid "Notificación creada"
+msgstr "Создано уведомление"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1057
+msgid "Notificación actualizada"
+msgstr ""
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1063
+msgid "Notificaciones eliminadas"
+msgstr "Уведомление удалено"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1067
+msgid "Notificación eliminada"
+msgstr "Уведомление удалено"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1085
+#: ../../../../inc/SP/Forms/NoticeForm.class.php:95
+msgid "Es necesaria una descripción"
+msgstr "Необходимо описание"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1100
+msgid "Solicitud de Modificación de Cuenta"
+msgstr "Запрос на изменение учетной записи"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1101
+msgid "Solicitante"
+msgstr "Запросил"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1119
+msgid "Solicitud enviada por correo"
+msgstr "Запрос отправлен по email"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1121
+msgid "Solicitud no enviada por correo"
+msgstr "Запрос не отправлен по email"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1130
+msgid "Solicitud"
+msgstr "Запрос"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1137
+msgid "Solicitud realizada"
+msgstr "Запрос выполнен"
+
+#: ../../../../inc/SP/Controller/ItemActionController.class.php:1171
+#, fuzzy
+msgid "Eliminar Cuenta (H)"
+msgstr "Удалить учетную запись"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:123
+msgid "Ver Usuario"
+msgstr "Показать пользователя"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:140
+msgid "Ver Grupo"
+msgstr "Показать группу"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:153
+msgid "Ver Perfil"
+msgstr "Показать профиль"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:166
+msgid "Ver Cliente"
+msgstr "Показать заказчика"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:179
+msgid "Ver Categoría"
+msgstr "Показать категорию"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:192
+msgid "Ver Autorización"
+msgstr "Показать авторизацию"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:213
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:73
+msgid "Ver Enlace Público"
+msgstr "Показать публичную ссылку"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:226
+#: ../../../../js/strings.js.php:72
+msgid "Clave de Cuenta"
+msgstr "Пароль учетной записи"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:230
+msgid "Detalles de Plugin"
+msgstr "Детали плагина"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:401
+msgid "Token de autorización visualizado"
+msgstr "Отображение токена авторизации"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:402
+msgid "Autorizaciones"
+msgstr "Авторизации"
+
+#: ../../../../inc/SP/Controller/ItemShowController.class.php:495
+msgid "La clave maestra no coincide"
+msgstr "Неверный мастер-пароль"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:93
+msgid "Inicio sesión"
+msgstr "Начало сессии"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:109
+msgid "Usuario/Clave no introducidos"
+msgstr "Пользователь / пароль не введены"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:132
+#: ../../../../inc/SP/Controller/LoginController.class.php:348
+#: ../../../../inc/SP/Controller/LoginController.class.php:402
+#: ../../../../inc/SP/Controller/LoginController.class.php:424
+msgid "Login incorrecto"
+msgstr "Ошибка входа"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:180
+msgid "Error al obtener los datos del usuario de la BBDD"
+msgstr "Ошибка получения данных о пользователе из DB"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:195
+#: ../../../../inc/SP/Controller/LoginController.class.php:198
+msgid "Usuario deshabilitado"
+msgstr "Пользователь отключен"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:255
+msgid "Error al obtener la clave maestra del usuario"
+msgstr "Ошибка при получении мастер-пароля пользователя"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:276
+msgid "Usando clave temporal"
+msgstr "Использование временного пароля"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:282
+#: ../../../../inc/SP/Controller/LoginController.class.php:284
+#: ../../../../inc/SP/Controller/LoginController.class.php:292
+#: ../../../../inc/SP/Controller/LoginController.class.php:294
+msgid "Clave maestra incorrecta"
+msgstr "Неправильный мастер-пароль"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:305
+msgid "Es necesaria su clave anterior"
+msgstr "Необходим Ваш прошлый пароль"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:308
+msgid "La clave maestra no ha sido guardada o es incorrecta"
+msgstr "Мастер-пароль не сохранен или ошибочен"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:352
+msgid "Cuenta expirada"
+msgstr "Учетная запись просрочена"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:356
+msgid "El usuario no tiene grupos asociados"
+msgstr "Для пользователя не указаны группы"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:370
+msgid "Servidor LDAP"
+msgstr "Сервер LDAP"
+
+#: ../../../../inc/SP/Controller/LoginController.class.php:427
+msgid "Autentificación"
+msgstr "Аутентификация"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:248
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:72
+msgid "Buscar"
+msgstr "Поиск"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:267
+msgid "Usuarios y Accesos"
+msgstr "Пользователи и доступы"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:277
+msgid "Elementos y Personalización"
+msgstr "Элементы персонализации"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:297
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:7
+msgid "Registro de Eventos"
+msgstr "Журнал событий"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:357
+#: ../../../../inc/SP/Core/Init.class.php:131
+msgid "Versión de PHP requerida >= "
+msgstr "Необходим PHP версии >= "
+
+#: ../../../../inc/SP/Controller/MainController.class.php:358
+#: ../../../../inc/SP/Core/Init.class.php:132
+msgid ""
+"Actualice la versión de PHP para que la aplicación funcione correctamente"
+msgstr "Пожалуйста, обновите PHP для использования sysPass"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:368
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:265
+msgid "Módulo no disponible"
+msgstr "Модуль недоступен"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:369
+msgid "Sin este módulo la aplicación puede no funcionar correctamente."
+msgstr "Без этого модуля программа не может работать корректно"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:377
+msgid "La version de PHP es vulnerable al ataque NULL Byte (CVE-2006-7243)"
+msgstr "Данная версия PHP уязвима NULL Byte attack (CVE-2006-7243)"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:378
+msgid "Actualice la versión de PHP para usar sysPass de forma segura"
+msgstr "Пожалуйста, обновите версию PHP для безопасного использования sysPass"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:384
+msgid "No se encuentra el generador de números aleatorios."
+msgstr "Не могу найти генератор случайных чисел."
+
+#: ../../../../inc/SP/Controller/MainController.class.php:385
+msgid ""
+"Sin esta función un atacante puede utilizar su cuenta al resetear la clave"
+msgstr ""
+"Без этой функции, атакующий может завладеть вашим аккаунтом при сбросе "
+"пароля."
+
+#: ../../../../inc/SP/Controller/MainController.class.php:457
+msgid "Descargar nueva versión"
+msgstr "Скачать новую версию"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:469
+msgid "Avisos de sysPass"
+msgstr "Уведомления sysPass"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:572
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:74
+msgid "Enlace visualizado"
+msgstr "Ссылка показана"
+
+#: ../../../../inc/SP/Controller/MainController.class.php:575
+msgid "Agente"
+msgstr "Агент"
+
+#: ../../../../inc/SP/Controller/UserPreferencesController.class.php:90
+msgid "Preferencias"
+msgstr "Настройки"
+
+#: ../../../../inc/SP/Core/Acl.class.php:166
+msgid "Acceso denegado"
+msgstr "Доступ запрещен"
+
+#: ../../../../inc/SP/Core/Acl.class.php:184
+msgid "Buscar Cuentas"
+msgstr "Поиск"
+
+#: ../../../../inc/SP/Core/Acl.class.php:185
+msgid "Ver Cuenta"
+msgstr "Просмотр деталей учетной записи"
+
+#: ../../../../inc/SP/Core/Acl.class.php:189
+msgid "Editar Clave de Cuenta"
+msgstr "Изменить пароль учетной записи"
+
+#: ../../../../inc/SP/Core/Acl.class.php:190
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:61
+msgid "Ver Historial"
+msgstr "Показать историю"
+
+#: ../../../../inc/SP/Core/Acl.class.php:194
+msgid "Peticiones"
+msgstr "Включить запросы по email"
+
+#: ../../../../inc/SP/Core/Acl.class.php:195
+msgid "Gestión Aplicación"
+msgstr "Управление"
+
+#: ../../../../inc/SP/Core/Acl.class.php:196
+msgid "Gestión Categorías"
+msgstr "Управление категориями"
+
+#: ../../../../inc/SP/Core/Acl.class.php:197
+msgid "Buscar Categorías"
+msgstr "Поиск категорий"
+
+#: ../../../../inc/SP/Core/Acl.class.php:198
+msgid "Añadir Categoría"
+msgstr "Добавить категорию"
+
+#: ../../../../inc/SP/Core/Acl.class.php:201
+msgid "Gestión Clientes"
+msgstr "Управление заказчиками"
+
+#: ../../../../inc/SP/Core/Acl.class.php:202
+msgid "Buscar Clientes"
+msgstr "Поиск заказчиков"
+
+#: ../../../../inc/SP/Core/Acl.class.php:203
+msgid "Añadir Cliente"
+msgstr "Добавить заказчика"
+
+#: ../../../../inc/SP/Core/Acl.class.php:206
+msgid "Gestión Campos Personalizados"
+msgstr "Управление свободными полями"
+
+#: ../../../../inc/SP/Core/Acl.class.php:207
+msgid "Gestión Autorizaciones API"
+msgstr "Управление API авторизации"
+
+#: ../../../../inc/SP/Core/Acl.class.php:208
+msgid "Gestión de Archivos"
+msgstr "Управление файлами"
+
+#: ../../../../inc/SP/Core/Acl.class.php:209
+msgid "Gestión de Cuentas"
+msgstr "Управление учетными записями"
+
+#: ../../../../inc/SP/Core/Acl.class.php:210
+msgid "Gestión de Etiquetas"
+msgstr "Управление тегами"
+
+#: ../../../../inc/SP/Core/Acl.class.php:211
+#: ../../../../inc/SP/Core/Acl.class.php:212
+msgid "Gestión Usuarios"
+msgstr "Управление пользователями"
+
+#: ../../../../inc/SP/Core/Acl.class.php:213
+msgid "Gestión Grupos"
+msgstr "Управление группами"
+
+#: ../../../../inc/SP/Core/Acl.class.php:214
+msgid "Gestión Perfiles"
+msgstr "Управление профилями"
+
+#: ../../../../inc/SP/Core/Acl.class.php:216
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:226
+msgid "Configuración General"
+msgstr "Основная конфигурация"
+
+#: ../../../../inc/SP/Core/Acl.class.php:219
+msgid "Exportar"
+msgstr "Экспорт"
+
+#: ../../../../inc/SP/Core/Acl.class.php:220
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:247
+msgid "Importar"
+msgstr "Импорт"
+
+#: ../../../../inc/SP/Core/Acl.class.php:221
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:263
+msgid "Log de Eventos"
+msgstr "Журнал событий"
+
+#: ../../../../inc/SP/Core/Backup.class.php:55
+msgid "Realizar Backup"
+msgstr "Выполнить резервное копирование"
+
+#: ../../../../inc/SP/Core/Backup.class.php:84
+msgid "Copia de la aplicación y base de datos realizada correctamente"
+msgstr "Резервная копия программы и базы успешно создана"
+
+#: ../../../../inc/SP/Core/Backup.class.php:102
+#: ../../../../inc/SP/Core/XmlExport.class.php:515
+#, php-format
+msgid "No es posible crear el directorio de backups (\"%s\")"
+msgstr "Невозможно создать каталог резервных копий (\"%s\")"
+
+#: ../../../../inc/SP/Core/Backup.class.php:106
+#: ../../../../inc/SP/Core/XmlExport.class.php:521
+msgid "Compruebe los permisos del directorio de backups"
+msgstr "Проверьте права на папку резервных копий"
+
+#: ../../../../inc/SP/Core/Backup.class.php:249
+msgid "Esta operación sólo es posible en entornos Linux"
+msgstr "Данная операция возможна только в Linux"
+
+#: ../../../../inc/SP/Core/Backup.class.php:251
+msgid "Error al realizar backup en modo compatibilidad"
+msgstr "Ошибка при создании резервной копии в режиме совместимости"
+
+#: ../../../../inc/SP/Core/Crypt.class.php:65
+#: ../../../../inc/SP/Core/Crypt.class.php:74
+#: ../../../../inc/SP/Log/Email.class.php:141
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:70
+#: ../../../../js/strings.js.php:85
msgid "Aviso"
msgstr "Предупреждение"
-#: ../../../../inc/Crypt.class.php:125
+#: ../../../../inc/SP/Core/Crypt.class.php:65
+#: ../../../../inc/SP/Core/Crypt.class.php:74
msgid ""
"Se ha regenerado el HASH de clave maestra. No es necesaria ninguna acción."
msgstr "HASH возродил мастер-пароль. Дополнительных действий не требуется."
-#: ../../../../inc/Crypt.class.php:189
+#: ../../../../inc/SP/Core/Crypt.class.php:213
msgid "No se puede usar el módulo de encriptación"
msgstr "Модуль криптографии не может быть загружен"
-#: ../../../../inc/Crypt.class.php:200
+#: ../../../../inc/SP/Core/Crypt.class.php:224
msgid "Error al generar datos cifrados"
msgstr "Ошибка при создании шифрованных данных"
-#: ../../../../inc/CryptPKI.class.php:46
+#: ../../../../inc/SP/Core/CryptMasterPass.class.php:93
+#: ../../../../inc/SP/Core/CryptMasterPass.class.php:106
+msgid "Clave temporal caducada"
+msgstr "Временный пароль недействителен"
+
+#: ../../../../inc/SP/Core/CryptPKI.class.php:48
msgid "No es posible generar las claves RSA"
msgstr "Невозможно создать RSA ключи"
-#: ../../../../inc/CryptPKI.class.php:112
-#: ../../../../inc/CryptPKI.class.php:143
+#: ../../../../inc/SP/Core/CryptPKI.class.php:116
+#: ../../../../inc/SP/Core/CryptPKI.class.php:118
+#: ../../../../inc/SP/Core/CryptPKI.class.php:151
+#: ../../../../inc/SP/Core/CryptPKI.class.php:153
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 "Неправильное количество полей (%d)"
+#: ../../../../inc/SP/Core/Events/EventDispatcherBase.class.php:80
+msgid "Observador no inicializado"
+msgstr "Наблюдатель не инициализирован"
-#: ../../../../inc/CsvImportBase.class.php:110
-#, php-format
-msgid "Compruebe el formato del archivo CSV en línea %s"
-msgstr "Пожалуйста, проверьте формат файла CSV в строке %s"
+#: ../../../../inc/SP/Core/Events/EventDispatcherBase.class.php:110
+msgid "Es necesario un objeto"
+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:348 ../../../../inc/XmlImport.class.php:62
-#: ../../../../inc/XmlImport.class.php:63 ../../../../web/ConfigC.class.php:199
-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 "Ошибка обработки в строке %s"
-
-#: ../../../../inc/CsvImportBase.class.php:145
-#, php-format
-msgid "Cuenta importada: %s"
-msgstr "Прогресс импорта: %s"
-
-#: ../../../../inc/CustomFields.class.php:276
-#: ../../../../web/AccountsMgmtC.class.php:301
-#: ../../../../inc/themes/classic/profiles.inc:107
-#: ../../../../inc/themes/material-blue/profiles.inc:124
-msgid "Campos Personalizados"
-msgstr "Настраиваемые поля"
-
-#: ../../../../inc/CustomFields.class.php:291
-msgid "Actualizando datos encriptados"
-msgstr "Обновление зашифрованных данных"
-
-#: ../../../../inc/CustomFields.class.php:318
-msgid "Registros no actualizados"
-msgstr "Нет обновленных записей"
-
-#: ../../../../inc/CustomFieldsBase.class.php:86
-msgid "Texto"
-msgstr "Текст"
-
-#: ../../../../inc/CustomFieldsBase.class.php:88
-msgid "Fecha"
-msgstr "Дата"
-
-#: ../../../../inc/CustomFieldsBase.class.php:89
-msgid "Número"
-msgstr "Цифры"
-
-#: ../../../../inc/CustomFieldsBase.class.php:90
-#: ../../../../inc/themes/classic/passreset.inc:22
-#: ../../../../inc/themes/classic/users.inc:61
-#: ../../../../inc/themes/material-blue/users.inc:71
-msgid "Email"
-msgstr "Email"
-
-#: ../../../../inc/CustomFieldsBase.class.php:91
-msgid "Teléfono"
-msgstr "Телефон"
-
-#: ../../../../inc/CustomFieldsBase.class.php:92
-msgid "Link"
-msgstr "Ссылка"
-
-#: ../../../../inc/CustomFieldsBase.class.php:93
-msgid "Color"
-msgstr "Цвет"
-
-#: ../../../../inc/CustomFieldsBase.class.php:107
-#: ../../../../inc/themes/classic/profiles.inc:98
-#: ../../../../inc/themes/material-blue/profiles.inc:114
-msgid "Categorías"
-msgstr "Категории"
-
-#: ../../../../inc/CustomFieldsBase.class.php:108
-#: ../../../../inc/themes/classic/profiles.inc:103
-#: ../../../../inc/themes/material-blue/profiles.inc:119
-msgid "Clientes"
-msgstr "Заказчики"
-
-#: ../../../../inc/CustomFieldsBase.class.php:110
-#: ../../../../inc/themes/classic/account.inc:143
-#: ../../../../inc/themes/classic/profiles.inc:89
-#: ../../../../inc/themes/material-blue/account.inc:170
-#: ../../../../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:160
-msgid "Eliminar Cliente"
-msgstr "Удалить заказчика"
-
-#: ../../../../inc/DBConnectionFactory.class.php:83
-#: ../../../../inc/DBConnectionFactory.class.php:85
-#: ../../../../inc/DBConnectionFactory.class.php:99
-#: ../../../../inc/Installer.class.php:235
-#: ../../../../inc/Migrate.class.php:114
-msgid "No es posible conectar con la BD"
-msgstr "Невозможно подключиться к базе данных"
-
-#: ../../../../inc/DBConnectionFactory.class.php:83
-#: ../../../../inc/DBConnectionFactory.class.php:85
-#: ../../../../inc/Installer.class.php:236
-#: ../../../../inc/Migrate.class.php:115
-msgid "Compruebe los datos de conexión"
-msgstr "Пожалуйста, проверьте параметры подключения"
-
-#: ../../../../inc/Email.class.php:59 ../../../../inc/UserUtil.class.php:182
-msgid "N/D"
-msgstr "N/A"
-
-#: ../../../../inc/Email.class.php:60 ../../../../web/UsersMgmtC.class.php:393
-#: ../../../../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/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
-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:210
-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 "Тип 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:91
-msgid "Importación finalizada"
-msgstr "Импорт завершен"
-
-#: ../../../../inc/Init.class.php:182
+#: ../../../../inc/SP/Core/Init.class.php:159
msgid "Error en la verificación de la base de datos"
msgstr "Ошибка проверки базы данных"
-#: ../../../../inc/Init.class.php:278
-msgid "Sesion"
+#: ../../../../inc/SP/Core/Init.class.php:289
+msgid "Sesión"
msgstr "Сессия"
-#: ../../../../inc/Init.class.php:278 ../../../../inc/Init.class.php:282
+#: ../../../../inc/SP/Core/Init.class.php:289
+#: ../../../../inc/SP/Core/Init.class.php:293
msgid "La sesión no puede ser inicializada"
msgstr "Сессия не может быть запущена"
-#: ../../../../inc/Init.class.php:366
+#: ../../../../inc/SP/Core/Init.class.php:427
+#: ../../../../inc/SP/Core/Init.class.php:667
+msgid "Actualización"
+msgstr "Обновить"
+
+#: ../../../../inc/SP/Core/Init.class.php:428
+#: ../../../../inc/SP/Core/Init.class.php:668 ../../../../res/upgrade.php:121
+msgid "Actualización de versión realizada."
+msgstr "Обновление версии завершено."
+
+#: ../../../../inc/SP/Core/Init.class.php:450
msgid "El directorio \"/config\" no existe"
msgstr "Папка \"/config\" не существует."
-#: ../../../../inc/Init.class.php:371
+#: ../../../../inc/SP/Core/Init.class.php:455
msgid "No es posible escribir en el directorio \"config\""
msgstr "Невозможно произвести запись в папку \"/config\""
-#: ../../../../inc/Init.class.php:379
+#: ../../../../inc/SP/Core/Init.class.php:462
msgid "Los permisos del directorio \"/config\" son incorrectos"
-msgstr "Права для папки \"/config\" заданы неверно "
+msgstr "Права для папки \"/config\" заданы неверно"
-#: ../../../../inc/Init.class.php:379
+#: ../../../../inc/SP/Core/Init.class.php:462
msgid "Actual:"
msgstr "Текущие:"
-#: ../../../../inc/Init.class.php:379
+#: ../../../../inc/SP/Core/Init.class.php:462
msgid "Necesario: 750"
msgstr "Требуемые: 750"
-#: ../../../../inc/Init.class.php:428
+#: ../../../../inc/SP/Core/Init.class.php:545
msgid "Aplicación en mantenimiento"
msgstr "Программа на ослуживании"
-#: ../../../../inc/Init.class.php:428
+#: ../../../../inc/SP/Core/Init.class.php:545
msgid "En breve estará operativa"
msgstr "Скоро работа будет возобновлена"
-#: ../../../../inc/Init.class.php:465
+#: ../../../../inc/SP/Core/Init.class.php:590
msgid "Finalizar sesión"
msgstr "Завершить сессию"
-#: ../../../../inc/Init.class.php:467
+#: ../../../../inc/SP/Core/Init.class.php:592
msgid "Tiempo inactivo"
msgstr "Время бездействия"
-#: ../../../../inc/Init.class.php:468
+#: ../../../../inc/SP/Core/Init.class.php:593
msgid "Tiempo total"
msgstr "Общее время"
-#: ../../../../inc/Init.class.php:507
+#: ../../../../inc/SP/Core/Init.class.php:636
msgid "La aplicación necesita actualizarse"
msgstr "Необходимо обновить программу"
-#: ../../../../inc/Init.class.php:507
+#: ../../../../inc/SP/Core/Init.class.php:636
#, php-format
msgid "Si es un administrador pulse en el enlace: %s"
msgstr "Если Вы администратор, нажмите на ссылку: %s"
-#: ../../../../inc/Init.class.php:507
-#: ../../../../inc/themes/classic/upgrade.inc:20
-#: ../../../../inc/themes/material-blue/upgrade.inc:22
+#: ../../../../inc/SP/Core/Init.class.php:636
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:57
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:48
msgid "Actualizar"
msgstr "Обновить"
-#: ../../../../inc/Init.class.php:538
-msgid "Actualización"
-msgstr "Обновить"
+#: ../../../../inc/SP/Core/Init.class.php:654
+#: ../../../../inc/themes/material-blue/views/main/login.inc:65
+msgid "Acceder"
+msgstr "Войти"
-#: ../../../../inc/Init.class.php:539
-msgid "Actualización de versión realizada."
-msgstr "Обновление версии завершено."
-
-#: ../../../../inc/Init.class.php:540
-#: ../../../../inc/themes/classic/info.inc:33
-#: ../../../../inc/themes/material-blue/info.inc:33
-msgid "Versión"
-msgstr "Версия"
-
-#: ../../../../inc/Installer.class.php:127
+#: ../../../../inc/SP/Core/Installer.class.php:138
msgid "Indicar nombre de usuario admin"
msgstr "Ввведи имя пользователя администратора"
-#: ../../../../inc/Installer.class.php:128
+#: ../../../../inc/SP/Core/Installer.class.php:139
msgid "Usuario admin para acceso a la aplicación"
msgstr "Пользователь администратора для входа в программу"
-#: ../../../../inc/Installer.class.php:132
+#: ../../../../inc/SP/Core/Installer.class.php:143
msgid "Indicar la clave de admin"
msgstr "Введите административный пароль"
-#: ../../../../inc/Installer.class.php:133
+#: ../../../../inc/SP/Core/Installer.class.php:144
msgid "Clave del usuario admin de la aplicación"
msgstr "Пароль администратора программы"
-#: ../../../../inc/Installer.class.php:137
+#: ../../../../inc/SP/Core/Installer.class.php:148
msgid "Indicar la clave maestra"
msgstr "Введите мастер-пароль"
-#: ../../../../inc/Installer.class.php:138
+#: ../../../../inc/SP/Core/Installer.class.php:149
msgid "Clave maestra para encriptar las claves"
msgstr "Матер-пароль для шифрования паролей "
-#: ../../../../inc/Installer.class.php:142
+#: ../../../../inc/SP/Core/Installer.class.php:153
msgid "Clave maestra muy corta"
msgstr "Длина мастер-пароля мала"
-#: ../../../../inc/Installer.class.php:143
+#: ../../../../inc/SP/Core/Installer.class.php:154
msgid "La longitud de la clave maestra ha de ser mayor de 11 caracteres"
msgstr "Мастер-пароль должен быть не менее 11 символов"
-#: ../../../../inc/Installer.class.php:147
+#: ../../../../inc/SP/Core/Installer.class.php:158
msgid "Indicar el usuario de la BBDD"
msgstr "Введите пользователя базы данных"
-#: ../../../../inc/Installer.class.php:148
+#: ../../../../inc/SP/Core/Installer.class.php:159
msgid "Usuario con permisos de administrador de la Base de Datos"
msgstr "Пользователь с правами администратора для базы данных"
-#: ../../../../inc/Installer.class.php:152
+#: ../../../../inc/SP/Core/Installer.class.php:163
msgid "Indicar la clave de la BBDD"
msgstr "Введите пароль базы данных"
-#: ../../../../inc/Installer.class.php:153
+#: ../../../../inc/SP/Core/Installer.class.php:164
msgid "Clave del usuario administrador de la Base de Datos"
msgstr "Пароль администратора базы данных"
-#: ../../../../inc/Installer.class.php:157
+#: ../../../../inc/SP/Core/Installer.class.php:168
msgid "Indicar el nombre de la BBDD"
msgstr "Введите имя базы данных"
-#: ../../../../inc/Installer.class.php:158
+#: ../../../../inc/SP/Core/Installer.class.php:169
msgid "Nombre para la BBDD de la aplicación pej. syspass"
msgstr "Имя базы данных программы. Например, syspass"
-#: ../../../../inc/Installer.class.php:162
+#: ../../../../inc/SP/Core/Installer.class.php:173
msgid "El nombre de la BBDD no puede contener \".\""
msgstr "Имя базы данных не может содержать \".\""
-#: ../../../../inc/Installer.class.php:163
+#: ../../../../inc/SP/Core/Installer.class.php:174
msgid "Elimine los puntos del nombre de la Base de Datos"
msgstr "Пожалуйста, уберите точки из имени базы данных"
-#: ../../../../inc/Installer.class.php:167
+#: ../../../../inc/SP/Core/Installer.class.php:178
msgid "Indicar el servidor de la BBDD"
msgstr "Введите сервер баз данных"
-#: ../../../../inc/Installer.class.php:168
+#: ../../../../inc/SP/Core/Installer.class.php:179
msgid "Servidor donde se instalará la Base de Datos"
msgstr "Сервер, на котором будет создана база данных"
-#: ../../../../inc/Installer.class.php:267
+#: ../../../../inc/SP/Core/Installer.class.php:202
+#: ../../../../inc/SP/Storage/MySQLHandler.class.php:133
+#: ../../../../inc/SP/Storage/MySQLHandler.class.php:136
+#: ../../../../inc/SP/Storage/MySQLHandler.class.php:160
+msgid "No es posible conectar con la BD"
+msgstr "Невозможно подключиться к базе данных"
+
+#: ../../../../inc/SP/Core/Installer.class.php:203
+#: ../../../../inc/SP/Storage/MySQLHandler.class.php:133
+#: ../../../../inc/SP/Storage/MySQLHandler.class.php:137
+msgid "Compruebe los datos de conexión"
+msgstr "Пожалуйста, проверьте параметры подключения"
+
+#: ../../../../inc/SP/Core/Installer.class.php:237
msgid "No es posible comprobar el usuario de sysPass"
msgstr "Не могу проверить пользователя sysPass"
-#: ../../../../inc/Installer.class.php:268
+#: ../../../../inc/SP/Core/Installer.class.php:238
+#, fuzzy
msgid "Compruebe los permisos del usuario de conexión a la BD"
msgstr "Пожалуйста, проверьте права на базу данных"
-#: ../../../../inc/Installer.class.php:319
-msgid "El usuario de MySQL ya existe"
-msgstr "Пользователь MySQL уже существует"
+#: ../../../../inc/SP/Core/Installer.class.php:284
+#, php-format
+msgid "Error al crear el usuario de conexión a MySQL '%s'"
+msgstr "Ошибка при создании подключения к MySQL под пользователем '%s'"
-#: ../../../../inc/Installer.class.php:320
-msgid "Indique un nuevo usuario o elimine el existente"
-msgstr "Введите новое имя пользователя или удалите существующего"
-
-#: ../../../../inc/Installer.class.php:333
+#: ../../../../inc/SP/Core/Installer.class.php:300
msgid "La BBDD ya existe"
msgstr "База данных уже существует"
-#: ../../../../inc/Installer.class.php:334
+#: ../../../../inc/SP/Core/Installer.class.php:301
msgid "Indique una nueva Base de Datos o elimine la existente"
msgstr "Введите новую базу данных или удалите существующую"
-#: ../../../../inc/Installer.class.php:343
-#: ../../../../inc/Installer.class.php:414
+#: ../../../../inc/SP/Core/Installer.class.php:304
+msgid "La BBDD no existe"
+msgstr "База данных не существует"
+
+#: ../../../../inc/SP/Core/Installer.class.php:305
+msgid "Es necesario crearla y asignar los permisos necesarios"
+msgstr "Необходимо создать его и назначить нужные права"
+
+#: ../../../../inc/SP/Core/Installer.class.php:315
+#: ../../../../inc/SP/Core/Installer.class.php:416
msgid "Error al crear la BBDD"
msgstr "Ошибка при создании БД"
-#: ../../../../inc/Installer.class.php:344
-#: ../../../../inc/Installer.class.php:355
+#: ../../../../inc/SP/Core/Installer.class.php:316
+#: ../../../../inc/SP/Core/Installer.class.php:336
msgid "Verifique los permisos del usuario de la Base de Datos"
msgstr "Пожалуйста, проверьте права доступа к базе данных "
-#: ../../../../inc/Installer.class.php:354
-msgid "Error al establecer permisos de la BBDD"
-msgstr "Ошибка при установке прав доступа к базе данных"
+#: ../../../../inc/SP/Core/Installer.class.php:335
+#, php-format
+msgid "Error al establecer permisos de la BBDD ('%s')"
+msgstr "Ошибка при установке прав базы данных ('%s')"
-#: ../../../../inc/Installer.class.php:387
+#: ../../../../inc/SP/Core/Installer.class.php:389
msgid "El archivo de estructura de la BBDD no existe"
msgstr "Файл структуры базы данных не существует"
-#: ../../../../inc/Installer.class.php:388
+#: ../../../../inc/SP/Core/Installer.class.php:390
msgid "No es posible crear la BBDD de la aplicación. Descárguela de nuevo."
msgstr ""
"Невозможно создать базу данных программы. Пожалуйста, скачайте её заново."
-#: ../../../../inc/Installer.class.php:396
+#: ../../../../inc/SP/Core/Installer.class.php:398
msgid "Error al seleccionar la BBDD"
msgstr "Ошибка выбора базы данных."
-#: ../../../../inc/Installer.class.php:397
+#: ../../../../inc/SP/Core/Installer.class.php:399
msgid ""
"No es posible usar la Base de Datos para crear la estructura. Compruebe los "
"permisos y que no exista."
@@ -2069,1488 +2873,1560 @@ msgstr ""
"Невозможно использовать базу данных для создания её структуры. Проверьте "
"права доступа к базе данных."
-#: ../../../../inc/Installer.class.php:415
+#: ../../../../inc/SP/Core/Installer.class.php:417
msgid "Error al crear la estructura de la Base de Datos."
msgstr "Ошибка создания структуры базы данных."
-#: ../../../../inc/Installer.class.php:438
+#: ../../../../inc/SP/Core/Installer.class.php:435
+msgid "Error al comprobar la base de datos"
+msgstr "Ошибка при проверке базы данных"
+
+#: ../../../../inc/SP/Core/Installer.class.php:436
+msgid "Intente de nuevo la instalación"
+msgstr "Пожалуйста, повторите попытку установки еще раз"
+
+#: ../../../../inc/SP/Core/Installer.class.php:458
msgid "Error al crear el grupo \"admin\""
msgstr "Ошибка создания группы \"admin\""
-#: ../../../../inc/Installer.class.php:439
-#: ../../../../inc/Installer.class.php:472
-#: ../../../../inc/Installer.class.php:489
-#: ../../../../inc/Installer.class.php:502
+#: ../../../../inc/SP/Core/Installer.class.php:459
+#: ../../../../inc/SP/Core/Installer.class.php:471
+#: ../../../../inc/SP/Core/Installer.class.php:489
+#: ../../../../inc/SP/Core/Installer.class.php:502
msgid "Informe al desarrollador"
msgstr "Предупреждение разработчику"
-#: ../../../../inc/Installer.class.php:471
+#: ../../../../inc/SP/Core/Installer.class.php:470
msgid "Error al crear el perfil \"admin\""
msgstr "Ошибка создания профиля \"admin\""
-#: ../../../../inc/Installer.class.php:488
+#: ../../../../inc/SP/Core/Installer.class.php:488
msgid "Error al crear el usuario \"admin\""
msgstr "Ошибка создания пользователя \"admin\""
-#: ../../../../inc/Installer.class.php:501
+#: ../../../../inc/SP/Core/Installer.class.php:501
msgid "Error al actualizar la clave maestra del usuario \"admin\""
msgstr "Ошибка обновления мастер-пароля для пользователя \"admin\""
-#: ../../../../inc/Ldap.class.php:132 ../../../../inc/Ldap.class.php:136
-msgid "No es posible conectar con el servidor de LDAP"
-msgstr "Невозможно подключиться к серверу LDAP"
+#: ../../../../inc/SP/Core/Plugin/PluginDataStore.class.php:76
+msgid "Nuevo Plugin"
+msgstr "Новый плагин"
-#: ../../../../inc/Ldap.class.php:161 ../../../../inc/Ldap.class.php:166
-msgid "Error al conectar (BIND)"
-msgstr "Ошибка подключения (BIND)"
+#: ../../../../inc/SP/Core/Plugin/PluginUtil.class.php:106
+#: ../../../../inc/SP/Core/Plugin/PluginUtil.class.php:108
+#: ../../../../inc/SP/Core/Plugin/PluginUtil.class.php:161
+#, php-format
+msgid "No es posible cargar el plugin \"%s\""
+msgstr "Невозможно загрузить плагин \"%s\""
-#: ../../../../inc/Ldap.class.php:189 ../../../../inc/Ldap.class.php:194
-msgid "Error al buscar objetos en DN base"
-msgstr "Ошибка поиска объектов в DN"
-
-#: ../../../../inc/Ldap.class.php:217 ../../../../inc/Ldap.class.php:223
-#: ../../../../inc/Ldap.class.php:230 ../../../../inc/Ldap.class.php:235
-#: ../../../../inc/Ldap.class.php:240 ../../../../inc/Ldap.class.php:245
-msgid "Error al buscar RDN de grupo"
-msgstr "Ошибка поиска группы в RDN"
-
-#: ../../../../inc/Ldap.class.php:294 ../../../../inc/Ldap.class.php:300
-#: ../../../../inc/Ldap.class.php:315 ../../../../inc/Ldap.class.php:320
-msgid "Error al buscar el DN del usuario"
-msgstr "Ошибка поиска пользователя в DN"
-
-#: ../../../../inc/Ldap.class.php:307 ../../../../inc/Ldap.class.php:312
-msgid "Error al localizar el usuario en LDAP"
-msgstr "Ошибка поиска пользователя в LDAP"
-
-#: ../../../../inc/Ldap.class.php:389 ../../../../inc/Ldap.class.php:395
-#: ../../../../inc/LdapADS.class.php:103 ../../../../inc/LdapADS.class.php:108
-msgid "Error al buscar el grupo de usuarios"
-msgstr "Ошибка поиска групп пользователя"
-
-#: ../../../../inc/Ldap.class.php:402
-msgid "Usuario verificado en grupo"
-msgstr "Членство пользователя в группе проверено"
-
-#: ../../../../inc/LdapADS.class.php:112 ../../../../inc/LdapADS.class.php:117
-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:98
-#: ../../../../inc/themes/material-blue/eventlog.inc:99
-msgid "Vaciar registro de eventos"
-msgstr "Очистить журнал событий"
-
-#: ../../../../inc/Migrate.class.php:51
-msgid "Faltan parámetros"
-msgstr "Пропущены параметры"
-
-#: ../../../../inc/Migrate.class.php:148
-msgid "La versión no es compatible"
-msgstr "Несовместимая версия"
-
-#: ../../../../inc/Migrate.class.php:149
-msgid "Actualice a la última versión de phpPMS"
-msgstr "Пожалуйста, обновите phpPMS до последней версии"
-
-#: ../../../../inc/Migrate.class.php:167
-msgid "Error al obtener la configuración"
-msgstr "Ошибка получения конфигурации"
-
-#: ../../../../inc/Migrate.class.php:210 ../../../../inc/Migrate.class.php:223
-msgid "Error al vaciar tabla"
-msgstr "Ошибка очистки таблицы"
-
-#: ../../../../inc/Migrate.class.php:228
-msgid "Usuario actual no es administrador de la aplicación"
-msgstr "Текущий пользователь не является администратором программы"
-
-#: ../../../../inc/Migrate.class.php:273
-msgid "No es posible crear el cliente"
-msgstr "Невозможно создать заказчика"
-
-#: ../../../../inc/Migrate.class.php:274
-msgid "Contacte con el desarrollador"
-msgstr "Пожалуйста, свяжитесь с разработчиком"
-
-#: ../../../../inc/Migrate.class.php:278
-msgid "Importar Clientes"
-msgstr "Импорт заказчиков"
-
-#: ../../../../inc/Migrate.class.php:280 ../../../../inc/Migrate.class.php:350
-#: ../../../../inc/Migrate.class.php:451 ../../../../inc/Migrate.class.php:524
-#: ../../../../inc/Migrate.class.php:632 ../../../../inc/Migrate.class.php:697
-#: ../../../../inc/Migrate.class.php:771 ../../../../inc/Migrate.class.php:861
-#: ../../../../inc/Migrate.class.php:932
-msgid "Registros"
-msgstr "Записи"
-
-#: ../../../../inc/Migrate.class.php:302
-msgid "Error al obtener los clientes"
-msgstr "Ошибка получения заказчика"
-
-#: ../../../../inc/Migrate.class.php:344
-msgid "Error al obtener cuentas"
-msgstr "Ошибка получения учетных записей"
-
-#: ../../../../inc/Migrate.class.php:373
-msgid "Cliente no encontrado"
-msgstr "Заказчик не найден"
-
-#: ../../../../inc/Migrate.class.php:416
-msgid "Error al migrar cuenta"
-msgstr "Ошибка импорта учетной записи"
-
-#: ../../../../inc/Migrate.class.php:445
-msgid "Error al obtener los grupos de cuentas"
-msgstr "Ошибка получения групп учетных записей"
-
-#: ../../../../inc/Migrate.class.php:449
-msgid "Importar Grupos de Cuentas"
-msgstr "Импорт групп учетных записей"
-
-#: ../../../../inc/Migrate.class.php:471
-msgid "Error al crear grupos de cuentas"
-msgstr "Ошибка при создании групп учетных записей"
-
-#: ../../../../inc/Migrate.class.php:518
-msgid "Error al obtener el historico de cuentas"
-msgstr "Ошибка при получении истории учетных записей"
-
-#: ../../../../inc/Migrate.class.php:522
-msgid "Importar Histórico de Cuentas"
-msgstr "Импорт истории учетных записей"
-
-#: ../../../../inc/Migrate.class.php:591
-msgid "Error al crear historico de cuentas"
-msgstr "Ошибка создания истории учетных записей"
-
-#: ../../../../inc/Migrate.class.php:626
-msgid "Error al obtener los archivos de cuentas"
-msgstr "Ошибка получения файлов учетных записей"
-
-#: ../../../../inc/Migrate.class.php:630
-msgid "Importar Archivos de Cuentas"
-msgstr "Импорт файлов учетных записей"
-
-#: ../../../../inc/Migrate.class.php:662
-msgid "Error al crear archivos de cuentas"
-msgstr "Ошибка создания файлов учетных записей"
-
-#: ../../../../inc/Migrate.class.php:691
-msgid "Error al obtener las categorías de cuentas"
-msgstr "Ошибка получения категорий учетных записей"
-
-#: ../../../../inc/Migrate.class.php:695
-msgid "Importar Categorías de Cuentas"
-msgstr "Импорт категорий учетных записей"
-
-#: ../../../../inc/Migrate.class.php:717
-msgid "Error al crear categorías de cuentas"
-msgstr "Ошибка получения категорий учетных записей"
-
-#: ../../../../inc/Migrate.class.php:765
-msgid "Error al obtener los usuarios"
-msgstr "Ошибка получения пользователей"
-
-#: ../../../../inc/Migrate.class.php:769
-msgid "Importar Usuarios"
-msgstr "Импорт пользователей"
-
-#: ../../../../inc/Migrate.class.php:826
-msgid "Error al crear usuarios"
-msgstr "Ошибка создания пользователей"
-
-#: ../../../../inc/Migrate.class.php:855
-msgid "Error al obtener los grupos de usuarios"
-msgstr "Ошибка получения групп пользователей"
-
-#: ../../../../inc/Migrate.class.php:859
-msgid "Importar Grupos de Usuarios"
-msgstr "Импорт групп пользователей"
-
-#: ../../../../inc/Migrate.class.php:885
-msgid "Error al crear los grupos de usuarios"
-msgstr "Ошибка добавления групп пользователей"
-
-#: ../../../../inc/Migrate.class.php:930
-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:275
-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 "Ошибка в формате XML"
-
-#: ../../../../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/Template.class.php:91
+#: ../../../../inc/SP/Core/Template.class.php:126
+#: ../../../../inc/SP/Core/Template.class.php:128
+#: ../../../../inc/SP/Html/DataGrid/DataGridBase.class.php:264
#, php-format
msgid "No es posible obtener la plantilla \"%s\" : %s"
msgstr "Не могу получить шаблон \"%s\" : %s"
-#: ../../../../inc/Template.class.php:130
+#: ../../../../inc/SP/Core/Template.class.php:182
+#: ../../../../inc/SP/Core/Template.class.php:184
#, php-format
msgid "No es posible obtener la variable \"%s\""
msgstr "Не могу получить переменную \"%s\""
-#: ../../../../inc/Template.class.php:173
+#: ../../../../inc/SP/Core/Template.class.php:227
+#: ../../../../inc/SP/Core/Template.class.php:229
#, php-format
msgid "No es posible destruir la variable \"%s\""
msgstr "Нельзя удалить переменную \"%s\""
-#: ../../../../inc/Upgrade.class.php:51
+#: ../../../../inc/SP/Core/Template.class.php:246
+msgid "La plantilla no contiene archivos"
+msgstr "Шаблон не содержит файлов"
+
+#: ../../../../inc/SP/Core/Upgrade.class.php:65
msgid "Error al aplicar la actualización de la Base de Datos"
msgstr "Ошибка обновления базы данных"
-#: ../../../../inc/Upgrade.class.php:52 ../../../../inc/Upgrade.class.php:58
+#: ../../../../inc/SP/Core/Upgrade.class.php:66
+#: ../../../../inc/SP/Core/Upgrade.class.php:74
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:24
-#: ../../../../inc/themes/material-blue/login.inc:65
-msgid "Acceder"
-msgstr "Войти"
-
-#: ../../../../inc/Upgrade.class.php:57
+#: ../../../../inc/SP/Core/Upgrade.class.php:73
msgid "Error al aplicar la actualización auxiliar"
msgstr "Ошибка применения дополнительного обновления"
-#: ../../../../inc/Upgrade.class.php:74
+#: ../../../../inc/SP/Core/Upgrade.class.php:93
msgid "Actualizar BBDD"
msgstr "Обновление БД"
-#: ../../../../inc/Upgrade.class.php:127
+#: ../../../../inc/SP/Core/Upgrade.class.php:99
msgid "No es necesario actualizar la Base de Datos."
msgstr "Обновление базы данных не требуется."
-#: ../../../../inc/Upgrade.class.php:135
+#: ../../../../inc/SP/Core/Upgrade.class.php:111
msgid "Error al aplicar la actualización de la Base de Datos."
msgstr "Ошибка обновления базы данных."
-#: ../../../../inc/Upgrade.class.php:144
+#: ../../../../inc/SP/Core/Upgrade.class.php:121
msgid "Actualización de la Base de Datos realizada correctamente."
msgstr "Обновление базы данных завершено успешно."
-#: ../../../../inc/Upgrade.class.php:221
+#: ../../../../inc/SP/Core/Upgrade.class.php:245
msgid "Actualizar Configuración"
msgstr "Обновить конфигурацию"
-#: ../../../../inc/Upgrade.class.php:221
-msgid "Actualización de la Configuración realizada correctamente."
-msgstr "Конфигурация была успешно обновлена."
+#: ../../../../inc/SP/Core/Upgrade.class.php:284
+msgid "Error al actualizar la configuración"
+msgstr "Ошибка при обновлении конфигурации"
-#: ../../../../inc/UserBase.class.php:388
-#: ../../../../inc/UserBase.class.php:532
-msgid "No se pudo realizar la petición de cambio de clave."
-msgstr "Выполнить запрос на смену пароля невозможно."
-
-#: ../../../../inc/UserBase.class.php:527
-msgid "Modificar Usuario"
-msgstr "Изменить пользователя"
-
-#: ../../../../inc/UserBase.class.php:594
-#: ../../../../web/UsersMgmtC.class.php:151
-msgid "Eliminar Usuario"
-msgstr "Удалить пользователя"
-
-#: ../../../../inc/UserLdap.class.php:68
-#: ../../../../web/UsersMgmtC.class.php:109
-#: ../../../../inc/themes/classic/users.inc:28
-#: ../../../../inc/themes/material-blue/users.inc:34
-msgid "Usuario de LDAP"
-msgstr "Пользователь LDAP"
-
-#: ../../../../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 "Пользователь LDAP"
-
-#: ../../../../inc/UserMigrate.class.php:113
-msgid "Migrar Grupos"
-msgstr "Миграция групп"
-
-#: ../../../../inc/UserMigrate.class.php:113
-msgid "Error al migrar grupo del usuario"
-msgstr "Ошибка миграции группы пользователя"
-
-#: ../../../../inc/Util.class.php:119
-msgid "Versión de PHP requerida >= "
-msgstr "Необходим PHP версии >= "
-
-#: ../../../../inc/Util.class.php:120
-msgid ""
-"Actualice la versión de PHP para que la aplicación funcione correctamente"
-msgstr "Пожалуйста, обновите PHP для использования sysPass"
-
-#: ../../../../inc/Util.class.php:156
-#: ../../../../inc/themes/classic/ldap.inc:212
-#: ../../../../inc/themes/material-blue/ldap.inc:238
-msgid "Módulo no disponible"
-msgstr "Модуль недоступен"
-
-#: ../../../../inc/Util.class.php:157
-msgid "Sin este módulo la aplicación puede no funcionar correctamente."
-msgstr "Без этого модуля программа не может работать корректно"
-
-#: ../../../../inc/XmlExport.class.php:127
+#: ../../../../inc/SP/Core/XmlExport.class.php:130
msgid "Exportar XML"
msgstr "Экспорт XML"
-#: ../../../../inc/XmlExport.class.php:412
+#: ../../../../inc/SP/Core/XmlExport.class.php:143
+msgid "Error al realizar la exportación de cuentas"
+msgstr "Ошибка при экспорте учетных записей"
+
+#: ../../../../inc/SP/Core/XmlExport.class.php:152
+msgid "Exportación de cuentas realizada correctamente"
+msgstr "Экспорт успешно выполнен"
+
+#: ../../../../inc/SP/Core/XmlExport.class.php:478
msgid "Error al crear el archivo XML"
msgstr "Ошибка создания файла XML"
-#: ../../../../inc/XmlImport.class.php:63
-msgid "Formato detectado"
-msgstr "Обнаружен формат"
-
-#: ../../../../inc/XmlImportBase.class.php:80
-msgid "No es posible procesar el archivo XML"
-msgstr "Невозможно обработать файл XML"
-
-#: ../../../../inc/XmlImportBase.class.php:108
-msgid "Archivo XML no soportado"
-msgstr "Файл XML не поддерживается"
-
-#: ../../../../inc/XmlImportBase.class.php:109
-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:78
-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 "Необходимо использовать минимум 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
-msgid "Tamaño de archivo no permitido"
-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 "Restablecer"
-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:136
-#: ../../../../inc/themes/classic/account.inc:167
-#: ../../../../inc/themes/classic/account.inc:458
-#: ../../../../inc/themes/classic/config.inc:70
-#: ../../../../inc/themes/classic/config.inc:86
-#: ../../../../inc/themes/classic/config.inc:102
-#: ../../../../inc/themes/classic/config.inc:118
-#: ../../../../inc/themes/classic/config.inc:134
-#: ../../../../inc/themes/classic/config.inc:150
-#: ../../../../inc/themes/classic/config.inc:166
-#: ../../../../inc/themes/classic/config.inc:182
-#: ../../../../inc/themes/classic/config.inc:255
-#: ../../../../inc/themes/classic/config.inc:274
-#: ../../../../inc/themes/classic/customfields.inc:46
-#: ../../../../inc/themes/classic/install.inc:99
-#: ../../../../inc/themes/classic/ldap.inc:25
-#: ../../../../inc/themes/classic/ldap.inc:195
-#: ../../../../inc/themes/classic/mail.inc:14
-#: ../../../../inc/themes/classic/mail.inc:40
-#: ../../../../inc/themes/classic/mail.inc:88
-#: ../../../../inc/themes/classic/preferences.inc:48
-#: ../../../../inc/themes/classic/preferences.inc:82
-#: ../../../../inc/themes/classic/preferences.inc:99
-#: ../../../../inc/themes/classic/preferences.inc:116
-#: ../../../../inc/themes/classic/security.inc:26
-#: ../../../../inc/themes/classic/wiki.inc:20
-msgid "SI"
-msgstr "ДА"
-
-#: ../../../../js/strings.js.php:68
-#: ../../../../inc/themes/classic/account.inc:136
-#: ../../../../inc/themes/classic/account.inc:167
-#: ../../../../inc/themes/classic/account.inc:456
-#: ../../../../inc/themes/classic/config.inc:70
-#: ../../../../inc/themes/classic/config.inc:86
-#: ../../../../inc/themes/classic/config.inc:102
-#: ../../../../inc/themes/classic/config.inc:118
-#: ../../../../inc/themes/classic/config.inc:134
-#: ../../../../inc/themes/classic/config.inc:150
-#: ../../../../inc/themes/classic/config.inc:166
-#: ../../../../inc/themes/classic/config.inc:182
-#: ../../../../inc/themes/classic/config.inc:255
-#: ../../../../inc/themes/classic/config.inc:274
-#: ../../../../inc/themes/classic/customfields.inc:46
-#: ../../../../inc/themes/classic/encryption.inc:58
-#: ../../../../inc/themes/classic/encryption.inc:77
-#: ../../../../inc/themes/classic/import.inc:67
-#: ../../../../inc/themes/classic/install.inc:99
-#: ../../../../inc/themes/classic/ldap.inc:25
-#: ../../../../inc/themes/classic/ldap.inc:195
-#: ../../../../inc/themes/classic/mail.inc:14
-#: ../../../../inc/themes/classic/mail.inc:40
-#: ../../../../inc/themes/classic/mail.inc:88
-#: ../../../../inc/themes/classic/preferences.inc:48
-#: ../../../../inc/themes/classic/preferences.inc:82
-#: ../../../../inc/themes/classic/preferences.inc:99
-#: ../../../../inc/themes/classic/preferences.inc:116
-#: ../../../../inc/themes/classic/security.inc:26
-#: ../../../../inc/themes/classic/tokens.inc:36
-#: ../../../../inc/themes/classic/wiki.inc:20
-msgid "NO"
-msgstr "НЕТ"
-
-#: ../../../../js/strings.js.php:69
-msgid "Aceptar"
-msgstr "Принять"
-
-#: ../../../../js/strings.js.php:70
-msgid "Cancelar"
-msgstr "Отклонить"
-
-#: ../../../../js/strings.js.php:71
-msgid "Clave Copiada al Portapapeles"
-msgstr "Пароль скопирован в буфер"
-
-#: ../../../../js/strings.js.php:72
-msgid "Error al copiar al portapapeles"
-msgstr "Ошибка копирования в буфер"
-
-#: ../../../../web/AccountC.class.php:386
-#: ../../../../web/AccountC.class.php:417
-#: ../../../../inc/themes/classic/search.inc:75
-#: ../../../../inc/themes/classic/search.inc:134
-#: ../../../../inc/themes/material-blue/search.inc:77
-#: ../../../../inc/themes/material-blue/search.inc:144
-msgid "Detalles de Cuenta"
-msgstr "Детали учетной записи"
-
-#: ../../../../web/AccountC.class.php:474
-#: ../../../../inc/themes/classic/account.inc:403
-#: ../../../../inc/themes/material-blue/account.inc:444
-msgid "Modificar Clave de Cuenta"
-msgstr "Изменить пароль учетной записи"
-
-#: ../../../../web/AccountsMgmtC.class.php:80
-#: ../../../../web/AccountsMgmtC.class.php:139
-#: ../../../../web/AccountsMgmtC.class.php:267
-#: ../../../../web/SearchC.class.php:293
-#: ../../../../web/UsersMgmtC.class.php:88
-#: ../../../../web/UsersMgmtC.class.php:188
-#: ../../../../web/UsersMgmtC.class.php:246
-#: ../../../../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:73
-#: ../../../../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:75
-#: ../../../../inc/themes/material-blue/users.inc:8
-msgid "Nombre"
-msgstr "Имя"
-
-#: ../../../../web/AccountsMgmtC.class.php:116
-msgid "Gestión de Categorías"
-msgstr "Управление категориями"
-
-#: ../../../../web/AccountsMgmtC.class.php:173
-msgid "Gestión de Clientes"
-msgstr "Управление заказчиками"
-
-#: ../../../../web/AccountsMgmtC.class.php:267
-#: ../../../../inc/themes/classic/customfields.inc:27
-#: ../../../../inc/themes/material-blue/customfields.inc:30
-msgid "Módulo"
-msgstr "Модуль"
-
-#: ../../../../web/AccountsMgmtC.class.php:288
-msgid "Eliminar Campo"
-msgstr "Удалить поле"
-
-#: ../../../../web/ConfigC.class.php:168
-msgid "Último backup"
-msgstr "Последняя резервная копия"
-
-#: ../../../../web/ConfigC.class.php:168
-msgid "No se encontraron backups"
-msgstr "Резервные копии не найдены"
-
-#: ../../../../web/ConfigC.class.php:175
-msgid "Última exportación"
-msgstr "Последний экспорт"
-
-#: ../../../../web/ConfigC.class.php:175
-msgid "No se encontró archivo de exportación"
-msgstr "Файл экспорта не найден"
-
-#: ../../../../web/ConfigC.class.php:220
-msgid "Información"
-msgstr "Информация"
-
-#: ../../../../web/EventlogC.class.php:95
-msgid "Registro de eventos vaciado"
-msgstr "Журнал очищен"
-
-#: ../../../../web/EventlogC.class.php:97
-msgid "Error al vaciar el registro de eventos"
-msgstr "Ошибка очистки журнала"
-
-#: ../../../../web/MainC.class.php:159 ../../../../web/UsersMgmtC.class.php:101
-msgid "Admin Aplicación"
-msgstr "Администратор программы"
-
-#: ../../../../web/MainC.class.php:177
-msgid "Buscar"
-msgstr "Поиск"
-
-#: ../../../../web/MainC.class.php:189
-msgid "Usuarios y Accesos"
-msgstr "Пользователи и доступы"
-
-#: ../../../../web/MainC.class.php:195
-msgid "Elementos y Personalización"
-msgstr "Элементы персонализации"
-
-#: ../../../../web/MainC.class.php:207
-#: ../../../../inc/themes/classic/eventlog.inc:2
-#: ../../../../inc/themes/material-blue/eventlog.inc:2
-msgid "Registro de Eventos"
-msgstr "Журнал событий"
-
-#: ../../../../web/MainC.class.php:228
-msgid "Nuevo estilo visual basado en Material Design Lite by Google"
-msgstr "Новый стиль, основанный на Material Design Lite by Google"
-
-#: ../../../../web/MainC.class.php:229
-msgid "Usuarios en múltiples grupos"
-msgstr "Пользователи могут состоять в нескольких группах"
-
-#: ../../../../web/MainC.class.php:230
-msgid "Previsualización de imágenes"
-msgstr "Предварительный просмотр изображений"
-
-#: ../../../../web/MainC.class.php:231
-msgid "Mostrar claves como imágenes"
-msgstr "Показать пароли в виде изображений"
-
-#: ../../../../web/MainC.class.php:232
-msgid "Campos personalizados"
-msgstr "Настраиваемые поля"
-
-#: ../../../../web/MainC.class.php:233
-msgid "API de consultas"
-msgstr "Запросы API"
-
-#: ../../../../web/MainC.class.php:234 ../../../../inc/themes/classic/2fa.inc:9
-#: ../../../../inc/themes/material-blue/2fa.inc:7
-#: ../../../../inc/themes/material-blue/security.inc:11
-msgid "Autentificación en 2 pasos"
-msgstr "Двухфакторная аутентификация"
-
-#: ../../../../web/MainC.class.php:235
-msgid "Complejidad de generador de claves"
-msgstr "Сложность генератора паролей"
-
-#: ../../../../web/MainC.class.php:236
-msgid "Consultas especiales"
-msgstr "Специальные запросы"
-
-#: ../../../../web/MainC.class.php:237
-msgid "Exportación a XML"
-msgstr "Экспорт в XML"
-
-#: ../../../../web/MainC.class.php:238
-msgid "Clave maestra temporal"
-msgstr "Временный мастер-пароль"
-
-#: ../../../../web/MainC.class.php:239
-msgid "Importación de cuentas desde sysPass, KeePass, KeePassX y CSV"
-msgstr "Импорт учетных записей из sysPass, KeePass, KeePassX и CSV"
-
-#: ../../../../web/MainC.class.php:240
-msgid "Optimización del código y mayor rapidez de carga"
-msgstr "Оптимизация кода и загрузки"
-
-#: ../../../../web/MainC.class.php:241
-msgid "Mejoras de seguridad en XSS e inyección SQL"
-msgstr "Улучшена защита от XSS и SQL инъекций"
-
-#: ../../../../web/MainC.class.php:282
-msgid "La version de PHP es vulnerable al ataque NULL Byte (CVE-2006-7243)"
-msgstr "Данная версия PHP уязвима NULL Byte attack (CVE-2006-7243)"
-
-#: ../../../../web/MainC.class.php:283
-msgid "Actualice la versión de PHP para usar sysPass de forma segura"
-msgstr "Пожалуйста, обновите версию PHP для безопасного использования sysPass"
-
-#: ../../../../web/MainC.class.php:290
-msgid "No se encuentra el generador de números aleatorios."
-msgstr "Не могу найти генератор случайных чисел."
-
-#: ../../../../web/MainC.class.php:291
-msgid ""
-"Sin esta función un atacante puede utilizar su cuenta al resetear la clave"
-msgstr ""
-"Без этой функции, атакующий может завладеть вашим аккаунтом при сбросе "
-"пароля."
-
-#: ../../../../web/MainC.class.php:310
-msgid "Instalación finalizada"
-msgstr "Установка завершена"
-
-#: ../../../../web/MainC.class.php:311
-msgid "Pulse aquí para acceder"
-msgstr "Назмите здесь для входа"
-
-#: ../../../../web/MainC.class.php:408
-msgid "Descargar nueva versión"
-msgstr "Скачать новую версию"
-
-#: ../../../../web/MainC.class.php:419
-msgid "Avisos de sysPass"
-msgstr "Уведомления sysPass"
-
-#: ../../../../web/SearchC.class.php:286
-msgid "Ordenar por Cliente"
-msgstr "Сортировать по заказчику"
-
-#: ../../../../web/SearchC.class.php:292
-msgid "Ordenar por Nombre"
-msgstr "Сортировать по имени"
-
-#: ../../../../web/SearchC.class.php:298
-msgid "Ordenar por Categoría"
-msgstr "Сортировать по категории"
-
-#: ../../../../web/SearchC.class.php:304
-msgid "Ordenar por Usuario"
-msgstr "Сортировать по имени пользователя"
-
-#: ../../../../web/SearchC.class.php:310
-msgid "Ordenar por URL / IP"
-msgstr "Сортировать по URL / IP"
-
-#: ../../../../web/SearchC.class.php:311
-#: ../../../../inc/themes/classic/account.inc:61
-#: ../../../../inc/themes/classic/editpass.inc:16
-#: ../../../../inc/themes/classic/request.inc:13
-#: ../../../../inc/themes/classic/search.inc:96
-#: ../../../../inc/themes/material-blue/account.inc:70
-#: ../../../../inc/themes/material-blue/editpass.inc:17
-#: ../../../../inc/themes/material-blue/request.inc:15
-#: ../../../../inc/themes/material-blue/search.inc:98
-msgid "URL / IP"
-msgstr "URL / IP"
-
-#: ../../../../web/UsersMgmtC.class.php:92
-msgid "Propiedades"
-msgstr "Настройки"
-
-#: ../../../../web/UsersMgmtC.class.php:105
-msgid "Admin Cuentas"
-msgstr "Администратор учетных записей"
-
-#: ../../../../web/UsersMgmtC.class.php:113
-#: ../../../../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:130
-msgid "Ver Detalles de Usuario"
-msgstr "Просмотр информации пользователя"
-
-#: ../../../../web/UsersMgmtC.class.php:144
-msgid "Cambiar Clave de Usuario"
-msgstr "Изменить пароль пользователя"
-
-#: ../../../../web/UsersMgmtC.class.php:164
-msgid "Gestión de Usuarios"
-msgstr "Управление пользователями"
-
-#: ../../../../web/UsersMgmtC.class.php:223
-msgid "Gestión de Grupos"
-msgstr "Управление группами"
-
-#: ../../../../web/UsersMgmtC.class.php:261
-msgid "Ver Detalles de Perfil"
-msgstr "Просмотр информации о профиле"
-
-#: ../../../../web/UsersMgmtC.class.php:288
-msgid "Gestión de Perfiles"
-msgstr "Управление профилями"
-
-#: ../../../../web/UsersMgmtC.class.php:408
-msgid "Ver token de Autorización"
-msgstr "Просмотр токена авторизации"
-
-#: ../../../../web/UsersMgmtC.class.php:435
-msgid "Gestión de Autorizaciones API"
-msgstr "Управление API для авторизации"
-
-#: ../../../../web/UsersMgmtC.class.php:457
-msgid "Token de autorización visualizado"
-msgstr "Отображение токена авторизации"
-
-#: ../../../../web/UsersMgmtC.class.php:458
-msgid "Autorizaciones"
-msgstr "Авторизации"
-
-#: ../../../../web/UsersPrefsC.class.php:93
-#: ../../../../inc/themes/classic/mail.inc:63
-#: ../../../../inc/themes/material-blue/mail.inc:86
-msgid "Seguridad"
-msgstr "Безопасность"
-
-#: ../../../../web/UsersPrefsC.class.php:118
-#: ../../../../inc/themes/classic/sessionbar.inc:9
-msgid "Preferencias"
-msgstr "Настройки"
-
-#: ../../../../inc/themes/classic/2fa.inc:14
-#: ../../../../inc/themes/material-blue/2fa.inc:12
-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:64
-#: ../../../../inc/themes/material-blue/account.inc:76
-msgid "URL o IP de acceso"
-msgstr "URL или IP доступа"
-
-#: ../../../../inc/themes/classic/account.inc:76
-#: ../../../../inc/themes/material-blue/account.inc:90
-msgid "Usuario de acceso"
-msgstr "Пользователь доступа"
-
-#: ../../../../inc/themes/classic/account.inc:93
-#: ../../../../inc/themes/classic/editpass.inc:31
-#: ../../../../inc/themes/classic/passreset.inc:35
-#: ../../../../inc/themes/classic/users.inc:83
-#: ../../../../inc/themes/classic/userspass.inc:19
-#: ../../../../inc/themes/classic/userspass.inc:21
-#: ../../../../inc/themes/material-blue/account.inc:109
-#: ../../../../inc/themes/material-blue/editpass.inc:36
-#: ../../../../inc/themes/material-blue/install.inc:67
-#: ../../../../inc/themes/material-blue/passreset.inc:36
-#: ../../../../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:100
-#: ../../../../inc/themes/classic/search.inc:112
-#: ../../../../inc/themes/classic/users.inc:91
-#: ../../../../inc/themes/material-blue/account.inc:120
-#: ../../../../inc/themes/material-blue/search.inc:118
-#: ../../../../inc/themes/material-blue/users.inc:116
-msgid "Notas"
-msgstr "Заметки"
-
-#: ../../../../inc/themes/classic/account.inc:102
-#: ../../../../inc/themes/material-blue/account.inc:125
-#: ../../../../inc/themes/material-blue/users.inc:123
-msgid "Notas sobre la cuenta"
-msgstr "Заметки по учетной записи"
-
-#: ../../../../inc/themes/classic/account.inc:108
-#: ../../../../inc/themes/material-blue/account.inc:134
-#: ../../../../inc/themes/material-blue/search.inc:111
-msgid "Permisos"
-msgstr "Разрешения"
-
-#: ../../../../inc/themes/classic/account.inc:135
-#: ../../../../inc/themes/classic/account.inc:166
-#: ../../../../inc/themes/material-blue/account.inc:163
-#: ../../../../inc/themes/material-blue/account.inc:195
-msgid "Hablitar edición"
-msgstr "Разрешить изменения"
-
-#: ../../../../inc/themes/classic/account.inc:201
-#: ../../../../inc/themes/material-blue/account.inc:245
-msgid "Soltar archivos aquí (max. 5) o click para seleccionar"
-msgstr "Перетащите файлы сюда (не более 5) или нажмите для выбора"
-
-#: ../../../../inc/themes/classic/account.inc:201
-#: ../../../../inc/themes/classic/config.inc:212
-#: ../../../../inc/themes/material-blue/account.inc:245
-#: ../../../../inc/themes/material-blue/config.inc:328
-msgid "Tamaño máximo de archivo"
-msgstr "Максимальный размер файла"
-
-#: ../../../../inc/themes/classic/account.inc:223
-#: ../../../../inc/themes/material-blue/account.inc:267
-msgid "Historial"
-msgstr "История"
-
-#: ../../../../inc/themes/classic/account.inc:242
-#: ../../../../inc/themes/material-blue/account.inc:287
-msgid "Seleccionar fecha"
-msgstr "Выберите дату"
-
-#: ../../../../inc/themes/classic/account.inc:251
-#: ../../../../inc/themes/classic/users.inc:164
-#: ../../../../inc/themes/material-blue/account.inc:296
-#: ../../../../inc/themes/material-blue/users.inc:208
-msgid "Última Modificación"
-msgstr "Последнее изменение"
-
-#: ../../../../inc/themes/classic/account.inc:253
-#: ../../../../inc/themes/material-blue/account.inc:298
-msgid "por"
-msgstr "выполнено"
-
-#: ../../../../inc/themes/classic/account.inc:296
-#: ../../../../inc/themes/material-blue/account.inc:347
-msgid "Visitas"
-msgstr "Просмотров"
-
-#: ../../../../inc/themes/classic/account.inc:300
-#: ../../../../inc/themes/material-blue/account.inc:351
-msgid "Fecha Alta"
-msgstr "Дата создания"
-
-#: ../../../../inc/themes/classic/account.inc:304
-#: ../../../../inc/themes/material-blue/account.inc:355
-msgid "Creador"
-msgstr "Создатель"
-
-#: ../../../../inc/themes/classic/account.inc:308
-#: ../../../../inc/themes/material-blue/account.inc:204
-#: ../../../../inc/themes/material-blue/account.inc:359
-msgid "Grupo Principal"
-msgstr "Основная группа"
-
-#: ../../../../inc/themes/classic/account.inc:313
-#: ../../../../inc/themes/material-blue/account.inc:364
-msgid "Usuarios Secundarios"
-msgstr "Вторичные пользователи"
-
-#: ../../../../inc/themes/classic/account.inc:332
-#: ../../../../inc/themes/material-blue/account.inc:383
-msgid "Grupos Secundarios"
-msgstr "Вторичные группы"
-
-#: ../../../../inc/themes/classic/account.inc:352
-#: ../../../../inc/themes/material-blue/account.inc:403
-msgid "Fecha Edición"
-msgstr "Дата изменения"
-
-#: ../../../../inc/themes/classic/account.inc:356
-#: ../../../../inc/themes/material-blue/account.inc:407
-msgid "Editor"
-msgstr "Изменил"
-
-#: ../../../../inc/themes/classic/account.inc:383
-#: ../../../../inc/themes/material-blue/account.inc:470
-msgid "Restaurar cuenta desde este punto"
-msgstr "Восстановить учетную запись из текущей точки"
-
-#: ../../../../inc/themes/classic/account.inc:395
-#: ../../../../inc/themes/classic/search.inc:143
-#: ../../../../inc/themes/material-blue/account.inc:437
-#: ../../../../inc/themes/material-blue/search.inc:154
-msgid "Copiar Clave en Portapapeles"
-msgstr "Копировать пароль в буфер"
-
-#: ../../../../inc/themes/classic/account.inc:410
-#: ../../../../inc/themes/material-blue/account.inc:450
-msgid "Ver Actual"
-msgstr "Просмотр текущей версии"
-
-#: ../../../../inc/themes/classic/account.inc:415
-#: ../../../../inc/themes/classic/editpass.inc:45
-#: ../../../../inc/themes/classic/mgmttabs.inc:4
-#: ../../../../inc/themes/classic/passreset.inc:46
-#: ../../../../inc/themes/material-blue/passreset.inc:48
-msgid "Volver"
-msgstr "Назад"
-
-#: ../../../../inc/themes/classic/account.inc:422
-#: ../../../../inc/themes/classic/search.inc:155
-#: ../../../../inc/themes/material-blue/account.inc:460
-#: ../../../../inc/themes/material-blue/search.inc:166
-msgid "Modificar Cuenta"
-msgstr "Редактировать учетную запись"
-
-#: ../../../../inc/themes/classic/account.inc:427
-#: ../../../../inc/themes/classic/search.inc:176
-#: ../../../../inc/themes/material-blue/account.inc:464
-#: ../../../../inc/themes/material-blue/search.inc:187
-msgid "Solicitar Modificación"
-msgstr "Запросить изменение"
-
-#: ../../../../inc/themes/classic/account.inc:434
-#: ../../../../inc/themes/classic/categories.inc:62
-#: ../../../../inc/themes/classic/config.inc:294
-#: ../../../../inc/themes/classic/customers.inc:62
-#: ../../../../inc/themes/classic/customfields.inc:63
-#: ../../../../inc/themes/classic/editpass.inc:50
-#: ../../../../inc/themes/classic/encryption.inc:99
-#: ../../../../inc/themes/classic/groups.inc:77
-#: ../../../../inc/themes/classic/ldap.inc:229
-#: ../../../../inc/themes/classic/mail.inc:107
-#: ../../../../inc/themes/classic/preferences.inc:130
-#: ../../../../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:476
-#: ../../../../inc/themes/material-blue/categories.inc:72
-#: ../../../../inc/themes/material-blue/config.inc:444
-#: ../../../../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/preferences.inc:134
-#: ../../../../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:444
-#: ../../../../inc/themes/material-blue/account.inc:486
-msgid "Seleccionar grupos secundarios"
-msgstr "Выберите вторичные группы"
-
-#: ../../../../inc/themes/classic/account.inc:448
-#: ../../../../inc/themes/material-blue/account.inc:489
-msgid "Seleccionar usuarios"
-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:90
-#: ../../../../inc/themes/classic/encryption.inc:94
-#: ../../../../inc/themes/classic/encryption.inc:159
-#: ../../../../inc/themes/classic/encryption.inc:163
-#: ../../../../inc/themes/classic/import.inc:12
-#: ../../../../inc/themes/classic/import.inc:34
-#: ../../../../inc/themes/classic/import.inc:48
-#: ../../../../inc/themes/classic/import.inc:94
-#: ../../../../inc/themes/classic/import.inc:115
-#: ../../../../inc/themes/classic/import.inc:168
-#: ../../../../inc/themes/classic/import.inc:172
-#: ../../../../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:104
-#: ../../../../inc/themes/material-blue/encryption.inc:108
-#: ../../../../inc/themes/material-blue/encryption.inc:178
-#: ../../../../inc/themes/material-blue/encryption.inc:182
-#: ../../../../inc/themes/material-blue/import.inc:97
-#: ../../../../inc/themes/material-blue/import.inc:101
-#: ../../../../inc/themes/material-blue/js-common.inc:11
+#: ../../../../inc/SP/Forms/AccountForm.class.php:132
+msgid "Es necesaria una clave"
+msgstr "Необходим пароль"
+
+#: ../../../../inc/SP/Forms/AccountForm.class.php:144
+msgid "Es necesario un nombre de cuenta"
+msgstr "Необходимо имя учетной записи"
+
+#: ../../../../inc/SP/Forms/AccountForm.class.php:146
+#: ../../../../inc/SP/Forms/CustomerForm.class.php:83
+msgid "Es necesario un nombre de cliente"
+msgstr "Необходимо имя заказчика"
+
+#: ../../../../inc/SP/Forms/AccountForm.class.php:148
+msgid "Es necesario un usuario"
+msgstr "Необходимо имя пользователя"
+
+#: ../../../../inc/SP/Forms/AccountForm.class.php:150
+msgid "Es necesario una categoría"
+msgstr "Необходима категория"
+
+#: ../../../../inc/SP/Forms/ApiTokenForm.class.php:84
+msgid "Usuario no indicado"
+msgstr "Пользователь не установлен"
+
+#: ../../../../inc/SP/Forms/ApiTokenForm.class.php:86
+msgid "Acción no indicada"
+msgstr "Действие не установлено"
+
+#: ../../../../inc/SP/Forms/CategoryForm.class.php:83
+msgid "Es necesario un nombre de categoría"
+msgstr "Необходимо имя категории"
+
+#: ../../../../inc/SP/Forms/CustomFieldDefForm.class.php:87
+msgid "Nombre del campo no indicado"
+msgstr "Имя поля не задано"
+
+#: ../../../../inc/SP/Forms/CustomFieldDefForm.class.php:89
+msgid "Tipo del campo no indicado"
+msgstr "Тип поля не указан"
+
+#: ../../../../inc/SP/Forms/CustomFieldDefForm.class.php:91
+msgid "Módulo del campo no indicado"
+msgstr "Для поля не указан модуль"
+
+#: ../../../../inc/SP/Forms/GroupForm.class.php:84
+msgid "Es necesario un nombre de grupo"
+msgstr "Необходимо имя группы"
+
+#: ../../../../inc/SP/Forms/NoticeForm.class.php:91
+msgid "Es necesario un componente"
+msgstr "Нужен компонент"
+
+#: ../../../../inc/SP/Forms/NoticeForm.class.php:93
+msgid "Es necesario un tipo"
+msgstr "Нужен тип"
+
+#: ../../../../inc/SP/Forms/NoticeForm.class.php:100
+msgid "Es necesario un destinatario"
+msgstr "Нужна цель"
+
+#: ../../../../inc/SP/Forms/ProfileForm.class.php:111
+msgid "Es necesario un nombre de perfil"
+msgstr "Необходимо имя профиля"
+
+#: ../../../../inc/SP/Forms/TagForm.class.php:82
+msgid "Es necesario un nombre de etiqueta"
+msgstr "Необходимо название тега"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:86
+msgid "Es necesario un nombre de usuario"
+msgstr "Необходимо имя пользователя"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:88
+msgid "Es necesario un login"
+msgstr "Необходим логин"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:90
+msgid "Es necesario un perfil"
+msgstr "Необходим профиль"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:92
+msgid "Es necesario un grupo"
+msgstr "Необходима группа"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:94
+msgid "Es necesario un email"
+msgstr "Необходим email"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:110
+msgid "La clave no puede estar en blanco"
+msgstr "Пароль не может быть пустым"
+
+#: ../../../../inc/SP/Forms/UserForm.class.php:127
+msgid "No es posible eliminar, usuario en uso"
+msgstr "Не могу удалить, пользователь работает"
+
+#: ../../../../inc/SP/Http/Request.class.php:51
+msgid "No es posible acceder directamente a este archivo"
+msgstr "Невозможно обратиться к файлу"
+
+#: ../../../../inc/SP/Http/XMLRPCResponseParse.class.php:68
+msgid "Respuesta XML-RPC inválida"
+msgstr "Ошибочный XML-RPC ответ"
+
+#: ../../../../inc/SP/Import/CsvImport.class.php:46
+#: ../../../../inc/SP/Import/XmlImport.class.php:99
+#, php-format
+msgid "Formato detectado: %s"
+msgstr "Определен формат: %s"
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:84
+#, php-format
+msgid "El número de campos es incorrecto (%d)"
+msgstr "Неправильное количество полей (%d)"
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:85
+#, php-format
+msgid "Compruebe el formato del archivo CSV en línea %s"
+msgstr "Пожалуйста, проверьте формат файла CSV в строке %s"
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:111
+msgid "Error importando cuenta"
+msgstr "Ошибка импорта учетной записи"
+
+#: ../../../../inc/SP/Import/CsvImportBase.class.php:112
+msgid "Error procesando línea"
+msgstr "Ошибка при обработке линии"
+
+#: ../../../../inc/SP/Import/FileImport.class.php:86
+msgid "Archivo no subido correctamente"
+msgstr "Файл успешно закачан"
+
+#: ../../../../inc/SP/Import/FileImport.class.php:87
+msgid "Verifique los permisos del usuario del servidor web"
+msgstr "Пожалуйста, проверьте права пользователя веб-сервера "
+
+#: ../../../../inc/SP/Import/FileImport.class.php:98
+msgid "Compruebe la extensión del archivo"
+msgstr "Пожалуйста, проверьте расширение файла"
+
+#: ../../../../inc/SP/Import/FileImport.class.php:114
+msgid "Compruebe la configuración de PHP para subir archivos"
+msgstr "Пожалуйста, проверьте конфигурацию PHP для загрузки файлов"
+
+#: ../../../../inc/SP/Import/FileImport.class.php:158
+#: ../../../../inc/SP/Import/FileImport.class.php:186
+msgid "Compruebe los permisos del directorio temporal"
+msgstr "Пожалуйста, проверьте права для временной папки"
+
+#: ../../../../inc/SP/Import/Import.class.php:83
+#, php-format
+msgid "Tipo mime no soportado (\"%s\")"
+msgstr "Тип mime не поддерживается (\"%s\")"
+
+#: ../../../../inc/SP/Import/Import.class.php:84
+msgid "Compruebe el formato del archivo"
+msgstr "Пожалуйста, проверьте формат файла"
+
+#: ../../../../inc/SP/Import/Import.class.php:98
+msgid "Cuentas importadas"
+msgstr "Учетные записи импортированы"
+
+#: ../../../../inc/SP/Import/Import.class.php:103
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:66
+#: ../../../../js/strings.js.php:79
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:70
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:127
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:287
+#: ../../../../inc/themes/material-blue/views/config/import.inc:101
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."
+#: ../../../../inc/SP/Import/Import.class.php:114
+msgid "Importación finalizada"
+msgstr "Импорт завершен"
+
+#: ../../../../inc/SP/Import/ImportBase.class.php:121
+msgid "Id de categoría no definido. No es posible importar cuenta."
+msgstr "ID категории не задано. Невозможно импортировать учетную запись."
+
+#: ../../../../inc/SP/Import/ImportBase.class.php:124
+msgid "Id de cliente no definido. No es posible importar cuenta."
+msgstr "ID заказчика не задано. Невозможно импортировать учетную запись."
+
+#: ../../../../inc/SP/Import/SyspassImport.class.php:73
+msgid "Clave de encriptación no indicada"
+msgstr "Пароль шифрования не задан"
+
+#: ../../../../inc/SP/Import/SyspassImport.class.php:109
+#: ../../../../inc/SP/Import/SyspassImport.class.php:122
+#, fuzzy
+msgid "Clave de encriptación incorrecta"
+msgstr "Ошибочное шифрование IV"
+
+#: ../../../../inc/SP/Import/XmlFileImport.class.php:85
+msgid "Archivo XML no soportado"
+msgstr "Файл XML не поддерживается"
+
+#: ../../../../inc/SP/Import/XmlFileImport.class.php:86
+msgid "No es posible detectar la aplicación que exportó los datos"
+msgstr "Невозможно определить программу, из которой были экспортированы данные"
+
+#: ../../../../inc/SP/Import/XmlFileImport.class.php:107
+msgid "No es posible procesar el archivo XML"
+msgstr "Невозможно обработать файл XML"
+
+#: ../../../../inc/SP/Import/XmlImportTrait.class.php:69
+msgid "Formato de XML inválido"
+msgstr "Ошибка в формате XML"
+
+#: ../../../../inc/SP/Import/XmlImportTrait.class.php:70
+#, php-format
+msgid "El nodo \"%s\" no existe"
+msgstr "Узел \"%s\" не существует"
+
+#: ../../../../inc/SP/Log/Email.class.php:62
+msgid "N/D"
+msgstr "N/A"
+
+#: ../../../../inc/SP/Log/Email.class.php:64
+msgid "Realizado por"
+msgstr "Выполнено"
+
+#: ../../../../inc/SP/Log/Email.class.php:76
+#: ../../../../inc/SP/Log/Email.class.php:191
+msgid "Enviar Email"
+msgstr "Отправить email"
+
+#: ../../../../inc/SP/Log/Email.class.php:81
+#: ../../../../inc/SP/Log/Email.class.php:198
+msgid "Correo enviado"
+msgstr "Email выслан"
+
+#: ../../../../inc/SP/Log/Email.class.php:82
+#: ../../../../inc/SP/Log/Email.class.php:192
+msgid "Destinatario"
+msgstr "Получатель"
+
+#: ../../../../inc/SP/Log/Email.class.php:85
+msgid "CC"
+msgstr "CC"
+
+#: ../../../../inc/SP/Log/Email.class.php:91
+#: ../../../../inc/SP/Log/Email.class.php:202
+msgid "Error al enviar correo"
+msgstr "Ошибка отправка email"
+
+#: ../../../../inc/SP/Log/Log.class.php:91
+msgid "Error al vaciar el registro de eventos"
+msgstr "Ошибка очистки журнала"
+
+#: ../../../../inc/SP/Log/LogUtil.class.php:44
+#, php-format
+msgid "Extensión '%s' no cargada"
+msgstr "Расширение '%s' не загружено"
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:57
+msgid "Categoría duplicada"
+msgstr "Категория существует"
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:68
+msgid "Error al crear la categoría"
+msgstr "Ошибка при создании категории"
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:122
+msgid "Error al eliminar la categoría"
+msgstr "Ошибка при удалении категории"
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:177
+msgid "Nombre de categoría duplicado"
+msgstr "Категория с таким именем уже существует"
+
+#: ../../../../inc/SP/Mgmt/Categories/Category.class.php:193
+msgid "Error al actualizar la categoría"
+msgstr "Ошибка изменения информации о категории"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:72
+msgid "Error al crear el campo personalizado"
+msgstr "Ошибка при создании свободного поля"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:87
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:96
+msgid "Error al eliminar el campo personalizado"
+msgstr "Ошибка при удалении свободного поля"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:140
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:218
+msgid "Error al actualizar el campo personalizado"
+msgstr "Ошибка при обновлении свободного поля"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:174
+msgid "Campo personalizado no encontrado"
+msgstr "Свободное поле не найдено"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldDef.class.php:227
+msgid "No se encontraron campos personalizados"
+msgstr "Свободные поля не найдены"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:62
+msgid "Texto"
+msgstr "Текст"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:66
+msgid "Número"
+msgstr "Цифры"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:67
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:60
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:87
+msgid "Email"
+msgstr "Email"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:68
+msgid "Teléfono"
+msgstr "Телефон"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:69
+msgid "Link"
+msgstr "Ссылка"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:70
+msgid "Color"
+msgstr "Цвет"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldTypes.class.php:71
+msgid "Área de Texto"
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."
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:82
+msgid "No hay datos de campos personalizados"
+msgstr "Нет данных из свободных полей"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:87
+msgid "Actualizando datos encriptados"
+msgstr "Обновление зашифрованных данных"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:117
+msgid "Registros no actualizados"
+msgstr "Записи не обновлены"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:118
+msgid "Registros actualizados"
+msgstr "Записи изменены"
+
+#: ../../../../inc/SP/Mgmt/CustomFields/CustomFieldsUtil.class.php:191
+msgid "Error al migrar campos personalizados"
+msgstr "Ошибка при миграции свободных полей"
+
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:58
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:182
+msgid "Cliente duplicado"
+msgstr "Заказчик существует"
+
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:72
+msgid "Error al crear el cliente"
+msgstr "Ошибка при создании заказчика"
+
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:118
+msgid "No es posible eliminar"
+msgstr "Невозможно удалить"
+
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:127
+msgid "Error al eliminar el cliente"
+msgstr "Ошибка при удалении заказчика"
+
+#: ../../../../inc/SP/Mgmt/Customers/Customer.class.php:198
+msgid "Error al actualizar el cliente"
+msgstr "Ошибка при изменении информации о заказчике"
+
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:101
+msgid "Archivo subido"
+msgstr "Файл загружен"
+
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:123
+msgid "Error al eliminar archivo"
+msgstr "Ошибка при удалении файла"
+
+#: ../../../../inc/SP/Mgmt/Files/File.class.php:128
+msgid "Archivo no encontrado"
+msgstr "Файл не найден"
+
+#: ../../../../inc/SP/Mgmt/Files/FileUtil.class.php:102
+msgid "Error al eliminar archivos asociados a la cuenta"
+msgstr "Ошибка удаления файлов учетной записи"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:57
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:193
+msgid "Nombre de grupo duplicado"
+msgstr "Указанное имя группы уже существует"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:67
+msgid "Error al crear el grupo"
+msgstr "Ошибка при создании группы"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:110
+msgid "Grupo en uso"
+msgstr "Группа используется"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:119
+msgid "Error al eliminar el grupo"
+msgstr "Ошибка при удалении группы"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:124
+msgid "Grupo no encontrado"
+msgstr "Группа не найдена"
+
+#: ../../../../inc/SP/Mgmt/Groups/Group.class.php:204
+msgid "Error al actualizar el grupo"
+msgstr "Ошибка при обновлении группы"
+
+#: ../../../../inc/SP/Mgmt/Groups/GroupAccounts.class.php:70
+msgid "Error al eliminar grupos asociados a la cuenta"
+msgstr "Ошибка удаления групп учетной записи"
+
+#: ../../../../inc/SP/Mgmt/Groups/GroupAccounts.class.php:100
+msgid "Error al actualizar los grupos secundarios"
+msgstr "Ошибка изменения вторичных групп"
+
+#: ../../../../inc/SP/Mgmt/Groups/GroupUsers.class.php:69
+msgid "Error al asignar los usuarios al grupo"
+msgstr "Ошибка при настройке пользователей в группе"
+
+#: ../../../../inc/SP/Mgmt/Groups/GroupUsers.class.php:89
+msgid "Error al eliminar los usuarios del grupo"
+msgstr "Ошибка удаления пользователей из группы"
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:69
+msgid "Error al crear la notificación"
+msgstr "Ошибка при добавлении уведомления"
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:94
+msgid "Error al eliminar la notificación"
+msgstr "Ошибка при удалении уведомления"
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:99
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:137
+msgid "Notificación no encontrada"
+msgstr "Уведомление не найдено"
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:132
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:248
+msgid "Error al modificar la notificación"
+msgstr "Ошибка при обновлении уведомления"
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:171
+msgid "Error al obtener la notificación"
+msgstr "Ошибка при получении уведомления"
+
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:202
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:288
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:322
+#: ../../../../inc/SP/Mgmt/Notices/Notice.class.php:358
+msgid "Error al obtener las notificaciones"
+msgstr "Ошибка при получении уведомлений"
+
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:59
+msgid "Error al crear el plugin"
+msgstr "Ошибка при добавлении плагина"
+
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:83
+msgid "Error al eliminar el plugin"
+msgstr "Ошибка при удалении плагина"
+
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:88
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:120
+msgid "Plugin no encontrado"
+msgstr "Плагин не найден"
+
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:115
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:223
+#: ../../../../inc/SP/Mgmt/Plugins/Plugin.class.php:247
+msgid "Error al actualizar el plugin"
+msgstr "Ошибка при обновлении плагина"
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:56
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:182
+msgid "Nombre de perfil duplicado"
+msgstr "Профиль с таким именем уже существует"
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:68
+msgid "Error al crear perfil"
+msgstr "Ошибка при создании профиля"
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:105
+msgid "Perfil en uso"
+msgstr "Профиль используется"
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:114
+msgid "Error al eliminar perfil"
+msgstr "Ошибка при удалении профиля"
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:119
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:201
+msgid "Perfil no encontrado"
+msgstr "Профиль не найден"
+
+#: ../../../../inc/SP/Mgmt/Profiles/Profile.class.php:196
+msgid "Error al modificar perfil"
+msgstr "Ошибка при изменении профиля"
+
+#: ../../../../inc/SP/Mgmt/Profiles/ProfileUtil.class.php:55
+msgid "Migrar Perfiles"
+msgstr "Миграция профилей"
+
+#: ../../../../inc/SP/Mgmt/Profiles/ProfileUtil.class.php:85
+msgid "Error al obtener perfiles"
+msgstr "Ошибка получения профилей"
+
+#: ../../../../inc/SP/Mgmt/Profiles/ProfileUtil.class.php:147
+msgid "Operación realizada correctamente"
+msgstr "Успешно"
+
+#: ../../../../inc/SP/Mgmt/Profiles/ProfileUtil.class.php:152
+msgid "Fallo al realizar la operación"
+msgstr "Не удалось выполнить операцию"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:104
+msgid "Error al actualizar enlace"
+msgstr "Ошибка при обновлении ссылки"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:109
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:185
+msgid "Enlace no encontrado"
+msgstr "Ссылка не найдена"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:122
+msgid "Enlace ya creado"
+msgstr "Ссылка уже создана"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:143
+msgid "Error al crear enlace"
+msgstr "Ошибка при создании ссылки"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:180
+msgid "Error al eliminar enlace"
+msgstr "Ошибка при удалении ссылки"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:214
+msgid "Error al renovar enlace"
+msgstr "Ошибка при обновлении ссылки"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:243
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:342
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:376
+msgid "Error al obtener enlace"
+msgstr "Ошибка при получении ссылки"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:294
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLinkSearch.class.php:72
+msgid "ON"
+msgstr "Включить"
+
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLink.class.php:294
+#: ../../../../inc/SP/Mgmt/PublicLinks/PublicLinkSearch.class.php:72
+msgid "OFF"
+msgstr "Выключить"
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:53
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:126
+msgid "Etiqueta duplicada"
+msgstr "Дублированный тег"
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:63
+msgid "Error al crear etiqueta"
+msgstr "Ошибка при создании тега"
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:108
+msgid "Error al eliminar etiqueta"
+msgstr "Ошибка при удалении тега"
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:113
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:142
+msgid "Etiqueta no encontrada"
+msgstr "Тэг не найден"
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:137
+msgid "Error al actualizar etiqueta"
+msgstr "Ошибка при обновлении тега"
+
+#: ../../../../inc/SP/Mgmt/Tags/Tag.class.php:184
+msgid "Error al obtener etiqueta"
+msgstr "Ошибка при получении тега"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:53
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:152
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:77
+msgid "Login/email de usuario duplicados"
+msgstr "Дублированный login/email"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:90
+msgid "Error al crear el usuario"
+msgstr "Ошибка при создании пользователя"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:132
+msgid "Error al eliminar el usuario"
+msgstr "Ошибка удаления пользователя"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:137
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:188
+msgid "Usuario no encontrado"
+msgstr "Пользователь не найден"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:183
+msgid "Error al actualizar el usuario"
+msgstr "Ошибка при обновлении данных пользователя"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:250
+msgid "Error al obtener los usuarios"
+msgstr "Ошибка получения пользователей"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:286
+#: ../../../../inc/SP/Mgmt/Users/UserPass.class.php:145
+msgid "Error al modificar la clave"
+msgstr "Ошибка изменения пароля"
+
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:339
+#: ../../../../inc/SP/Mgmt/Users/User.class.php:386
+msgid "Error al obtener los datos del usuario"
+msgstr "Ошибка при получении данных пользователя"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:108
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:54
+msgid "Usuario de LDAP"
+msgstr "Пользователь LDAP"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:117
+msgid "Error al guardar los datos de LDAP"
+msgstr "Ошибка при сохранении данных пользователя из LDAP"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:125
+msgid "Activación Cuenta"
+msgstr "Активация учетной записи"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:126
+msgid "Su cuenta está pendiente de activación."
+msgstr "Активация Вашей учетной записи в процессе."
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:127
+msgid "En breve recibirá un email de confirmación."
+msgstr "Вы получите письмо в скором времени."
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:134
+msgid "Nuevo usuario de LDAP"
+msgstr "Пользователь LDAP"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdap.class.php:198
+msgid "Error al actualizar la clave del usuario en la BBDD"
+msgstr "Ошибка изменения пароля пользователя в БД"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdapSync.class.php:60
+msgid "Sincronización LDAP"
+msgstr "Синхронизация LDAP"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdapSync.class.php:110
+msgid "No se encontraron objetos para sincronizar"
+msgstr "Нет объектов для синхронизации"
+
+#: ../../../../inc/SP/Mgmt/Users/UserLdapSync.class.php:116
+msgid "Sincronización finalizada"
+msgstr "Синхронизация завершена"
+
+#: ../../../../inc/SP/Mgmt/Users/UserMigrate.class.php:98
+msgid "Error al migrar cuenta de usuario"
+msgstr "Ошибка при миграции учетной записи пользователя"
+
+#: ../../../../inc/SP/Mgmt/Users/UserMigrate.class.php:133
+msgid "Error al obtener grupo de usuarios"
+msgstr "Ошибка при получении группы пользователей"
+
+#: ../../../../inc/SP/Mgmt/Users/UserMigrate.class.php:148
+msgid "Error al migrar grupo del usuario"
+msgstr "Ошибка миграции группы пользователя"
+
+#: ../../../../inc/SP/Mgmt/Users/UserPassRecover.class.php:110
+msgid "Error en comprobación de hash"
+msgstr "Ошибка при проверке хэша"
+
+#: ../../../../inc/SP/Mgmt/Users/UserPassRecover.class.php:112
+msgid "Hash inválido o expirado"
+msgstr "Хэш ошибочен или просрочен"
+
+#: ../../../../inc/SP/Mgmt/Users/UserPassRecover.class.php:158
+msgid "Error al generar el hash de recuperación"
+msgstr "Ошибка при генерации восстановительного хеша"
+
+#: ../../../../inc/SP/Mgmt/Users/UserPreferences.class.php:79
+msgid "Error al actualizar preferencias"
+msgstr "Ошибка изменения настроек"
+
+#: ../../../../inc/SP/Mgmt/Users/UserPreferencesUtil.class.php:59
+msgid "Actualizando preferencias"
+msgstr "Обновление предпочтений"
+
+#: ../../../../inc/SP/Storage/DB.class.php:296
+#: ../../../../inc/SP/Storage/DB.class.php:336
+#: ../../../../js/strings.js.php:26
+msgid "Error en la consulta"
+msgstr "Ошибка при запросе"
+
+#: ../../../../inc/SP/Storage/DB.class.php:342
+msgid "Consulta en blanco"
+msgstr "Пустой запрос"
+
+#: ../../../../inc/SP/Storage/DB.class.php:354
+msgid "Restricción de integridad"
msgstr ""
-"Используя данный метод возможно сохранить все данные sysPass и использовать "
-"их в portable версии"
-#: ../../../../inc/themes/classic/backup.inc:60
-#: ../../../../inc/themes/classic/backup.inc:126
-#: ../../../../inc/themes/material-blue/backup.inc:64
-msgid "Exportar Cuentas"
-msgstr "Экспорт учетных записей"
+#: ../../../../inc/SP/Storage/XmlHandler.class.php:77
+#, php-format
+msgid "No es posible leer/escribir el archivo: %s"
+msgstr "Невозможно прочитать/записать файл: %s"
-#: ../../../../inc/themes/classic/backup.inc:84
-#: ../../../../inc/themes/material-blue/backup.inc:88
-msgid "No hay archivos XML para descargar"
-msgstr "Нет резервных копий для скачивания"
+#: ../../../../inc/SP/Storage/XmlHandler.class.php:161
+msgid "No hay elementos para guardar"
+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/SP/Util/Connection.class.php:120
+msgid "Socket no inicializado"
+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/SP/Util/Connection.class.php:127
+msgid "Error al enviar datos"
+msgstr "Ошибка при отправке данных"
-#: ../../../../inc/themes/classic/backup.inc:118
-#: ../../../../inc/themes/material-blue/backup.inc:134
+#: ../../../../inc/SP/Util/Json.class.php:63
+msgid "Error de codificación"
+msgstr "Ошибка кодирования"
+
+#: ../../../../inc/SP/Util/Util.class.php:316
+msgid "Respuesta"
+msgstr "Ответ"
+
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApi.class.php:68
+msgid "Fallo de autentificación"
+msgstr "Ошибка аутентификации"
+
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApiBase.class.php:173
+msgid "Error al realizar la consulta"
+msgstr "Ошибка при выполнении запроса"
+
+#: ../../../../inc/SP/Util/Wiki/DokuWikiApiBase.class.php:219
+msgid "URL de conexión no establecida"
+msgstr "URL подключения не задан"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:46
+msgid "Añadir"
+msgstr "Добавить"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:47
+msgid "Ver Detalles"
+msgstr "Показать детали"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:49
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:68
+msgid "Editar"
+msgstr "Изменить"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:50
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:80
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:82
+msgid "Eliminar"
+msgstr "Удалить"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:51
+msgid "Cambiar Clave"
+msgstr "Изменение пароля"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:52
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:148
+msgid "Admin Aplicación"
+msgstr "Администратор программы"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:53
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:155
+msgid "Admin Cuentas"
+msgstr "Администратор учетных записей"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:55
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:160
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:163
+msgid "Deshabilitado"
+msgstr "Отключен"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:56
+msgid "Habilitado"
+msgstr "Включен"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:58
+msgid "Copiar"
+msgstr "Копировать"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:63
+#: ../../../../inc/themes/material-blue/views/main/error.inc:12
+#: ../../../../inc/themes/material-blue/views/main/error.inc:13
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:56
+msgid "Volver"
+msgstr "Назад"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:64
+msgid "Restaurar"
+msgstr "Восстановить"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:65
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:109
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:160
+msgid "Guardar"
+msgstr "Сохранить"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:67
+msgid "Limpiar"
+msgstr "Очистить"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:68
+msgid "Realizar"
+msgstr "Выполнить"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:69
+msgid "Descargar"
+msgstr "Скачать"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:71
+msgid "Comprobar"
+msgstr "Проверить"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:78
+msgid "Crítico"
+msgstr "Критично"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:83
+msgid "Página anterior"
+msgstr "Прошлая страница"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:84
+msgid "Página siguiente"
+msgstr "Следующая страница"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:85
+msgid "Primera página"
+msgstr "Первая страница"
+
+#: ../../../../inc/themes/material-blue/inc/Icons.class.php:86
+msgid "Última página"
+msgstr "Последняя страница"
+
+#: ../../../../js/strings.js.php:27
+msgid "Ha ocurrido un error"
+msgstr "Произошла ошибка"
+
+#: ../../../../js/strings.js.php:28 ../../../../js/strings.js.php:86
+msgid "Sesión finalizada"
+msgstr "Сессия завершена"
+
+#: ../../../../js/strings.js.php:29
+msgid "Borrar la cuenta?"
+msgstr "Удалить учетную запись?"
+
+#: ../../../../js/strings.js.php:30
+msgid "Borrar el usuario?"
+msgstr "Удалить пользователя?"
+
+#: ../../../../js/strings.js.php:31
+msgid "Guarde la configuración para que sea efectiva"
+msgstr "Необходимо сохранить конфигурацию для вступления изменений в силу"
+
+#: ../../../../js/strings.js.php:32
+msgid "Clave Generada"
+msgstr "Сгенерированный пароль"
+
+#: ../../../../js/strings.js.php:33
+msgid "Nivel alto"
+msgstr "Высокий уровень"
+
+#: ../../../../js/strings.js.php:34
+msgid "Nivel medio"
+msgstr "Средний уровень"
+
+#: ../../../../js/strings.js.php:35
+msgid "Nivel bajo"
+msgstr "Низкий уровень"
+
+#: ../../../../js/strings.js.php:36
+msgid "Nivel muy alto"
+msgstr "Очень высокий уровень"
+
+#: ../../../../js/strings.js.php:37
+msgid "Utilizar al menos 8 caracteres"
+msgstr "Необходимо использовать минимум 8 символов"
+
+#: ../../../../js/strings.js.php:38
+msgid "Borrar elemento?"
+msgstr "Удалить элемент?"
+
+#: ../../../../js/strings.js.php:39
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:8
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:17
+msgid "Página no encontrada"
+msgstr "Страница не найдена"
+
+#: ../../../../js/strings.js.php:40
+msgid "Archivo no soportado para visualizar"
+msgstr "Предпросмотр файла недоступен"
+
+#: ../../../../js/strings.js.php:41
+msgid "Eliminar archivo?"
+msgstr "Удалить файл?"
+
+#: ../../../../js/strings.js.php:42
+msgid "Su navegador no soporta subir archivos con HTML5"
+msgstr "Ваш браузер не поддерживает загрузку файлов с HTML5"
+
+#: ../../../../js/strings.js.php:43
+msgid "Demasiados archivos"
+msgstr "Слишком много файлов"
+
+#: ../../../../js/strings.js.php:44
+msgid "Tamaño de archivo no permitido"
+msgstr "Размер файла вне разрешений"
+
+#: ../../../../js/strings.js.php:45
+msgid "Extensión no permitida"
+msgstr "Данный тип файла заблокирован"
+
+#: ../../../../js/strings.js.php:46
+msgid "Vaciar el registro de eventos?"
+msgstr "Очистить журнал событий?"
+
+#: ../../../../js/strings.js.php:47
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:75
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:243
+#: ../../../../inc/themes/material-blue/views/config/import.inc:54
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:221
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:77
+msgid "Seleccionar Grupo"
+msgstr "Выбрать группу"
+
+#: ../../../../js/strings.js.php:48
+#: ../../../../inc/themes/material-blue/views/config/import.inc:28
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:245
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:17
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:96
+msgid "Seleccionar Usuario"
+msgstr "Выбрать пользователя"
+
+#: ../../../../js/strings.js.php:49
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:61
+msgid "Seleccionar Perfil"
+msgstr "Выбрать профиль"
+
+#: ../../../../js/strings.js.php:50
+#: ../../../../inc/themes/material-blue/views/account/account.inc:59
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:49
+msgid "Seleccionar Cliente"
+msgstr "Выбрать заказчика"
+
+#: ../../../../js/strings.js.php:51
+#: ../../../../inc/themes/material-blue/views/account/account.inc:82
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:57
+msgid "Seleccionar Categoría"
+msgstr "Выбрать категорию"
+
+#: ../../../../js/strings.js.php:52
+msgid "Sin resultados"
+msgstr "Нет результатов"
+
+#: ../../../../js/strings.js.php:53
+msgid "Opciones de clave"
+msgstr "Опции пароля"
+
+#: ../../../../js/strings.js.php:54
+msgid "Generar clave aleatoria"
+msgstr "Сгенерировать пароль"
+
+#: ../../../../js/strings.js.php:55
+msgid "Complejidad"
+msgstr "Сложность"
+
+#: ../../../../js/strings.js.php:56
+msgid "Restablecer"
+msgstr "Сбросить"
+
+#: ../../../../js/strings.js.php:57
+msgid "Nivel de fortaleza de la clave"
+msgstr "Уровень надежности пароля"
+
+#: ../../../../js/strings.js.php:58
+msgid "Mostrar Clave"
+msgstr "Показать пароль"
+
+#: ../../../../js/strings.js.php:59
+#: ../../../../inc/themes/material-blue/views/account/viewpass.inc:19
+msgid "Copiar Usuario"
+msgstr "Скопировать пользователя"
+
+#: ../../../../js/strings.js.php:60
+#: ../../../../inc/themes/material-blue/views/account/viewpass.inc:30
+msgid "Copiar Clave"
+msgstr "Скопировать пароль"
+
+#: ../../../../js/strings.js.php:61
+msgid "Incluir Números"
+msgstr "Включать цифры"
+
+#: ../../../../js/strings.js.php:62
+msgid "Incluir Mayúsculas"
+msgstr "Включать заглавные буквы"
+
+#: ../../../../js/strings.js.php:63
+msgid "Incluir Símbolos"
+msgstr "Включать символы"
+
+#: ../../../../js/strings.js.php:64
+msgid "Longitud"
+msgstr "Длина"
+
+#: ../../../../js/strings.js.php:65
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:32
+msgid "Seleccionar Acción"
+msgstr "Действие"
+
+#: ../../../../js/strings.js.php:66
+msgid "SI"
+msgstr "ДА"
+
+#: ../../../../js/strings.js.php:67
+msgid "NO"
+msgstr "НЕТ"
+
+#: ../../../../js/strings.js.php:68
+msgid "Aceptar"
+msgstr "Принять"
+
+#: ../../../../js/strings.js.php:69
+msgid "Cancelar"
+msgstr "Отклонить"
+
+#: ../../../../js/strings.js.php:70
+msgid "Clave Copiada al Portapapeles"
+msgstr "Пароль скопирован в буфер"
+
+#: ../../../../js/strings.js.php:71
+msgid "Error al copiar al portapapeles"
+msgstr "Ошибка копирования в буфер"
+
+#: ../../../../js/strings.js.php:73
+msgid "Recibir notificaciones?"
+msgstr "Отправить уведомления?"
+
+#: ../../../../js/strings.js.php:74
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:133
+msgid "Marcar Favorito"
+msgstr "Пометить как избранное"
+
+#: ../../../../js/strings.js.php:75
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:123
+msgid "Eliminar Favorito"
+msgstr "Удалить избранное"
+
+#: ../../../../js/strings.js.php:76
+msgid "Limpiar Selección"
+msgstr "Очистить выбор"
+
+#: ../../../../js/strings.js.php:77
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:68
+msgid "Mostrar Favoritos"
+msgstr "Показать избранное"
+
+#: ../../../../js/strings.js.php:78
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:68
+msgid "Mostrar Todos"
+msgstr "Показать все"
+
+#: ../../../../js/strings.js.php:80
+msgid "Sin cambios"
+msgstr "Нет изменений"
+
+#: ../../../../js/strings.js.php:81
+msgid "Ahora"
+msgstr "Сейчас"
+
+#: ../../../../js/strings.js.php:82
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."
+"Este proceso importará los usuarios de LDAP detectados. Desea continuar?"
+msgstr "Этот процесс импортирует найденных пользователей из LDAP. Продолжить?"
+
+#: ../../../../js/strings.js.php:83
+msgid "Esta acción restablecerá todos los datos del plugin. Desea continuar?"
+msgstr "Это действие сбросит все данные плагина. Продолжить?"
+
+#: ../../../../js/strings.js.php:84
+msgid "Este proceso puede durar algo de tiempo. Desea continuar?"
+msgstr "Это длительный процесс. Продолжить?"
+
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:67
+#: ../../../../inc/themes/material-blue/views/account/account.inc:135
+#: ../../../../inc/themes/material-blue/views/account/account.inc:142
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:115
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:122
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:47
+#: ../../../../inc/themes/material-blue/views/itemshow/userspass.inc:54
+#: ../../../../inc/themes/material-blue/views/main/install.inc:62
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:42
+msgid "Clave (repetir)"
+msgstr "Подтверждение пароля"
+
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:78
+#: ../../../../inc/themes/material-blue/views/account/account.inc:149
+#: ../../../../inc/themes/material-blue/views/account/details.inc:131
+#: ../../../../inc/themes/material-blue/views/account/details.inc:133
+msgid "Fecha Caducidad Clave"
+msgstr "Срок действия пароля"
+
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:88
+#: ../../../../inc/themes/material-blue/views/account/account.inc:160
+msgid "Seleccionar Fecha"
+msgstr "Выберите дату"
+
+#: ../../../../inc/themes/material-blue/views/account/account-editpass.inc:102
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:25
+#: ../../../../inc/themes/material-blue/views/account/request.inc:58
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:297
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:167
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:274
+#: ../../../../inc/themes/material-blue/views/config/general.inc:29
+#: ../../../../inc/themes/material-blue/views/config/import.inc:89
+#: ../../../../inc/themes/material-blue/views/config/info.inc:128
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:283
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:150
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:276
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:137
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:172
+msgid "Atrás"
+msgstr "Назад"
+
+#: ../../../../inc/themes/material-blue/views/account/account-link.inc:65
+#: ../../../../inc/themes/material-blue/views/account/account.inc:165
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:140
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:129
+msgid "Notas"
+msgstr "Заметки"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:9
+msgid "Accesos"
+msgstr "Доступы"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:20
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:104
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:117
+msgid "Permisos"
+msgstr "Разрешения"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:26
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:50
+msgid "Seleccionar Usuarios"
+msgstr "Выберите пользователей"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:40
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:62
+msgid "Hablitar edición"
+msgstr "Разрешить изменения"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:48
+msgid "Seleccionar Grupos"
+msgstr "Выберите группы"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:72
+#: ../../../../inc/themes/material-blue/views/account/details.inc:52
+#: ../../../../inc/themes/material-blue/views/account/details.inc:54
+msgid "Grupo Principal"
+msgstr "Основная группа"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:87
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:111
+msgid "Cuenta Privada"
+msgstr "Приватная учетная запись"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:92
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:103
+msgid "Privada"
+msgstr "Приват"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:100
+msgid "Cuenta Privada Grupo"
+msgstr "Приватный аккаунт для группы"
+
+#: ../../../../inc/themes/material-blue/views/account/account-permissions.inc:105
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:110
+msgid "Privada Grupo"
+msgstr "Приват для группы"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:11
+msgid "Histórico"
+msgstr "История"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:182
+msgid "Seleccionar Etiquetas"
+msgstr "Выберите теги"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:193
+#: ../../../../inc/themes/material-blue/views/account/account.inc:195
+#: ../../../../inc/themes/material-blue/views/account/viewpass.inc:9
+msgid "Cuenta Vinculada"
+msgstr "Связанная учетная запись"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:203
+msgid "Seleccionar Cuenta"
+msgstr "Выберите учетную запись"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:210
+#: ../../../../inc/themes/material-blue/views/account/account.inc:212
+msgid "Historial"
+msgstr "История"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:217
+msgid "Seleccionar fecha"
+msgstr "Выберите дату"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:229
+#: ../../../../inc/themes/material-blue/views/account/details.inc:35
+#: ../../../../inc/themes/material-blue/views/account/details.inc:37
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:199
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:201
+msgid "Última Modificación"
+msgstr "Последнее изменение"
+
+#: ../../../../inc/themes/material-blue/views/account/account.inc:236
+#: ../../../../inc/themes/material-blue/views/account/account.inc:238
+#: ../../../../inc/themes/material-blue/views/account/account.inc:241
+msgid "Enlace Público"
+msgstr "Публичная ссылка"
+
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:17
+msgid "Ver Actual"
+msgstr "Просмотр текущей версии"
+
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:54
+msgid "Crear Enlace Público"
+msgstr "Создать публичную ссылку"
+
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:130
+msgid "Modificar Cuenta"
+msgstr "Редактировать учетную запись"
+
+#: ../../../../inc/themes/material-blue/views/account/actions.inc:152
+msgid "Restaurar cuenta desde este punto"
+msgstr "Восстановить учетную запись из текущей точки"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:8
+msgid "Detalles"
+msgstr "Детали"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:26
+#: ../../../../inc/themes/material-blue/views/account/details.inc:28
+msgid "Fecha Alta"
+msgstr "Дата создания"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:44
+#: ../../../../inc/themes/material-blue/views/account/details.inc:46
+msgid "Creador"
+msgstr "Создатель"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:61
+#: ../../../../inc/themes/material-blue/views/account/details.inc:63
+msgid "Usuarios Secundarios"
+msgstr "Вторичные пользователи"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:83
+#: ../../../../inc/themes/material-blue/views/account/details.inc:85
+msgid "Grupos Secundarios"
+msgstr "Вторичные группы"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:106
+#: ../../../../inc/themes/material-blue/views/account/details.inc:108
+msgid "Fecha Edición"
+msgstr "Дата изменения"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:114
+#: ../../../../inc/themes/material-blue/views/account/details.inc:116
+msgid "Editor"
+msgstr "Изменил"
+
+#: ../../../../inc/themes/material-blue/views/account/details.inc:123
+#: ../../../../inc/themes/material-blue/views/account/details.inc:125
+msgid "Fecha de Clave"
+msgstr "Дата пароля"
+
+#: ../../../../inc/themes/material-blue/views/account/files.inc:37
+msgid "Soltar archivos aquí (max. 5) o click para seleccionar"
+msgstr "Перетащите файлы сюда (не более 5) или нажмите для выбора"
+
+#: ../../../../inc/themes/material-blue/views/account/files.inc:37
+#, php-format
+msgid "Tamaño máximo de archivo: %d MB"
+msgstr "Максимальный размер файла: %d MB "
+
+#: ../../../../inc/themes/material-blue/views/account/linkedAccounts.inc:3
+msgid "Cuentas Vinculadas"
+msgstr "Связанные учетные записи"
+
+#: ../../../../inc/themes/material-blue/views/account/request.inc:4
+msgid "Solicitar Modificación de Cuenta"
+msgstr "Запрос изменения учетной записи"
+
+#: ../../../../inc/themes/material-blue/views/account/request.inc:36
+msgid "Petición"
+msgstr "Запрос"
+
+#: ../../../../inc/themes/material-blue/views/account/request.inc:42
+msgid "Descripción de la petición"
+msgstr "Описание запроса"
+
+#: ../../../../inc/themes/material-blue/views/account/request.inc:65
+msgid "Enviar"
+msgstr "Отправить"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/index.inc:11
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:11
+msgid "No se encontraron registros"
+msgstr "Записи не найдены"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:24
+msgid "Buscar en Wiki"
+msgstr "Поиск в Wiki"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:71
+msgid "Abrir enlace a"
+msgstr "Открыть ссылку"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:95
+msgid "Clave Caducada"
+msgstr "Пароль просрочен"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:149
+msgid "Archivos adjuntos"
+msgstr "Вложения"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:159
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:170
+msgid "Enlace a Wiki"
+msgstr "Ссылка на Wiki"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/rows.inc:162
+msgid "Ver en Wiki"
+msgstr "Посмотреть в WiKi"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:22
+msgid "Parámetros especiales:"
+msgstr "Специальные параметры"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:25
+msgid "Buscar cuentas a las que 'login' tenga acceso"
+msgstr "Найти учетные записи, к которым есть доступ у указанного пользователя"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:26
+#, fuzzy
+msgid "Devolver las cuentas en las que 'login' es propietario"
+msgstr "Найти учетные записи, к которым есть доступ у указанного пользователя"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:27
+msgid "Buscar cuentas a las que 'group_name' tenga acceso"
+msgstr "Найти учетные записи, к которым есть доступ у указанной группы"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:28
+msgid "Devolver las cuentas con grupo principal 'group_name'"
msgstr ""
-"Экспорт учетных записей позволяет сохранить данные в формат XML для "
-"дальнейшего импорта в другие инсталляции sysPass."
-#: ../../../../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/material-blue/views/accountsearch/searchbox.inc:29
+msgid "Buscar cuentas con archivos con el nombre 'file_name'"
+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."
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:30
+msgid "Buscar cuentas con la clave caducada"
+msgstr "Поиск учетных записей с просроченным паролем"
+
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:31
+msgid "Devolver las cuentas privadas del usuario actual"
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 ""
-"Можно задать пароль для экспорта, которым будет зашифрована вся информация в "
-"файле XML."
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:39
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:43
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:124
+msgid "Búsqueda global"
+msgstr "Глобальный поиск"
-#: ../../../../inc/themes/classic/body-start.inc:4
-#: ../../../../inc/themes/material-blue/body-start.inc:4
-msgid "Javascript es necesario para el correcto funcionamiento"
-msgstr "Javascript необходим для корректной работы"
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:71
+msgid "Filtrar Favoritos"
+msgstr "Фильтр избранного"
-#: ../../../../inc/themes/classic/categories.inc:10
-#: ../../../../inc/themes/material-blue/categories.inc:14
-msgid "Nombre de la categoría"
-msgstr "Имя категории"
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:85
+msgid "Cuentas por página"
+msgstr "Учетных записей на страницу"
-#: ../../../../inc/themes/classic/categories.inc:18
-#: ../../../../inc/themes/material-blue/categories.inc:26
-msgid "Descripción de la categoría"
-msgstr "Описание категории"
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:91
+msgid "Más Filtros"
+msgstr "Больше фильтров"
-#: ../../../../inc/themes/classic/config.inc:4
-#: ../../../../inc/themes/classic/preferences.inc:4
-#: ../../../../inc/themes/material-blue/config.inc:4
-#: ../../../../inc/themes/material-blue/preferences.inc:4
-msgid "Sitio"
-msgstr "Сайт"
+#: ../../../../inc/themes/material-blue/views/accountsearch/searchbox.inc:96
+msgid "Seleccionar Etiqueta"
+msgstr "Выберите теги"
-#: ../../../../inc/themes/classic/config.inc:11
-#: ../../../../inc/themes/classic/preferences.inc:12
-#: ../../../../inc/themes/material-blue/config.inc:12
-#: ../../../../inc/themes/material-blue/preferences.inc:12
-msgid "Idioma"
-msgstr "Язык"
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:12
+msgid "Búsqueda"
+msgstr "Поиск"
-#: ../../../../inc/themes/classic/config.inc:15
-#: ../../../../inc/themes/material-blue/config.inc:16
-msgid ""
-"Establece el idioma global de la aplicación. Es posible establecer un idioma "
-"por usuario en las preferencias."
-msgstr ""
-"Устанавливает глобальную настройку языка программы. Каждый пользователь "
-"может изменить язык в своих настройках."
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:18
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:47
+msgid "Resultados por página"
+msgstr "Результатов на страницу"
-#: ../../../../inc/themes/classic/config.inc:18
-#: ../../../../inc/themes/material-blue/config.inc:19
-msgid ""
-"Para mejorar/añadir las traducciones, puede colaborar en http:://translate."
-"syspass.org"
-msgstr ""
-"Можно улучшить или добавить перевод на сайте http://translate.syspass.org"
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:23
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:52
+msgid "Número de resultados por página a mostrar, al realizar una búsqueda."
+msgstr "Число результатов поиска на страницу"
-#: ../../../../inc/themes/classic/config.inc:33
-#: ../../../../inc/themes/classic/preferences.inc:24
-#: ../../../../inc/themes/material-blue/config.inc:34
-#: ../../../../inc/themes/material-blue/preferences.inc:23
-msgid "Tema Visual"
-msgstr "Тема"
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:34
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:63
+msgid "Número de resultados por página"
+msgstr "Число результатов поиска на страницу"
-#: ../../../../inc/themes/classic/config.inc:37
-#: ../../../../inc/themes/material-blue/config.inc:38
-msgid ""
-"Establece el tema visual global de la aplicación. Es posible establecer un "
-"tema visual por usuario en las preferencias."
-msgstr ""
-"Устанавливает тему визуального оформления приложения. Каждый пользователь "
-"может изменить тему в своих настройках."
-
-#: ../../../../inc/themes/classic/config.inc:52
-#: ../../../../inc/themes/material-blue/config.inc:53
-#: ../../../../inc/themes/material-blue/config.inc:61
-msgid "Timeout de sesión (s)"
-msgstr "Таймаут сессии (секунды)"
-
-#: ../../../../inc/themes/classic/config.inc:61
-#: ../../../../inc/themes/material-blue/config.inc:85
-msgid "Habilitar log de eventos"
-msgstr "Включить журнал событий"
-
-#: ../../../../inc/themes/classic/config.inc:65
-#: ../../../../inc/themes/material-blue/config.inc:89
-msgid "Guarda las acciones realizadas en la aplicación."
-msgstr "Вести запись действий в программе."
-
-#: ../../../../inc/themes/classic/config.inc:77
-#: ../../../../inc/themes/material-blue/config.inc:103
-msgid "Habilitar depuración"
-msgstr "Включить отладку"
-
-#: ../../../../inc/themes/classic/config.inc:81
-#: ../../../../inc/themes/material-blue/config.inc:107
-msgid ""
-"Muestra información relativa a la configuración de la aplicación y "
-"rendimiento."
-msgstr "Показывает информацию о программе и производительности."
-
-#: ../../../../inc/themes/classic/config.inc:93
-#: ../../../../inc/themes/material-blue/config.inc:121
-msgid "Modo mantenimiento"
-msgstr "Режим обслуживания"
-
-#: ../../../../inc/themes/classic/config.inc:97
-#: ../../../../inc/themes/material-blue/config.inc:125
-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:109
-#: ../../../../inc/themes/material-blue/config.inc:139
-msgid "Comprobar actualizaciones"
-msgstr "Проверка обновлений"
-
-#: ../../../../inc/themes/classic/config.inc:113
-#: ../../../../inc/themes/material-blue/config.inc:143
-msgid ""
-"Comprobar actualizaciones de la aplicación (sólo para los usuarios "
-"administradores)."
-msgstr "Проверяет обновления программы (только для администраторов)."
-
-#: ../../../../inc/themes/classic/config.inc:125
-#: ../../../../inc/themes/material-blue/config.inc:157
-msgid "Comprobar notificaciones"
-msgstr "Проверка уведомлений"
-
-#: ../../../../inc/themes/classic/config.inc:129
-#: ../../../../inc/themes/material-blue/config.inc:161
-msgid ""
-"Comprobar si existen notificaciones de seguridad o avisos de sysPass (sólo "
-"para los usuarios administradores)."
-msgstr ""
-"Проверяет на наличие уведомлений безопасности (только для администраторов)."
-
-#: ../../../../inc/themes/classic/config.inc:141
-#: ../../../../inc/themes/classic/preferences.inc:38
-#: ../../../../inc/themes/material-blue/config.inc:182
-#: ../../../../inc/themes/material-blue/preferences.inc:36
-msgid "Nombre de cuenta como enlace"
-msgstr "Имя учетной записи как ссылка"
-
-#: ../../../../inc/themes/classic/config.inc:145
-#: ../../../../inc/themes/classic/preferences.inc:43
-#: ../../../../inc/themes/material-blue/config.inc:186
-#: ../../../../inc/themes/material-blue/preferences.inc:40
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:44
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:73
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:157
-#: ../../../../inc/themes/material-blue/config.inc:286
-msgid "Gestión de archivos"
-msgstr "Управление файлами"
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:53
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:82
+msgid "Nombre de cuenta como enlace"
+msgstr "Имя учетной записи как ссылка"
-#: ../../../../inc/themes/classic/config.inc:161
-#: ../../../../inc/themes/material-blue/config.inc:290
-msgid "Habilita la subida/descarga de archivos para las cuentas."
-msgstr ""
-"Включает загрузку/скачивание файлов, которые могут прикрепляться к учетным "
-"записям."
-
-#: ../../../../inc/themes/classic/config.inc:173
-#: ../../../../inc/themes/material-blue/config.inc:200
-msgid "Búsquedas globales"
-msgstr "Глобальные поиски"
-
-#: ../../../../inc/themes/classic/config.inc:177
-#: ../../../../inc/themes/material-blue/config.inc:204
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:63
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."
@@ -3558,23 +4434,105 @@ msgstr ""
"Позволяет пользователям производить поиск по всем учетным записям, но при "
"этом содержимое учетных записей, к которым нет доступа, не будет показано."
-#: ../../../../inc/themes/classic/config.inc:189
-#: ../../../../inc/themes/material-blue/config.inc:305
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:72
+msgid "Búsquedas globales"
+msgstr "Глобальные поиски"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:82
+msgid "Generar una imagen con el texto de la clave de la cuenta."
+msgstr "Генерирует изображение с паролем учетной записи."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:86
+msgid "Util para entornos donde copiar la clave supone un riesgo de seguridad."
+msgstr "Полезно для ситуаций, когда копирование паролей не безопасно."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:96
+msgid "Imagen para mostrar clave"
+msgstr "Показать пароль в виде изображения"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:106
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:146
+msgid "Muestra los resultados de búsqueda de cuentas en formato tarjeta."
+msgstr "Включает показ учетных записей в результатах поиска в виде карточек."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:116
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:155
+msgid "Resultados en Tarjetas"
+msgstr "Результаты в виде карточек"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:123
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:189
+msgid "Enlaces Públicos"
+msgstr "Публичные ссылки"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:133
+msgid ""
+"Habilita la posibilidad de generar enlaces públicos para ver los detalles de "
+"una cuenta."
+msgstr ""
+"Включает возможность создания публичных ссылок для просмотра деталей учетной "
+"записи"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:137
+msgid ""
+"Las cuentas enlazadas serán visibles por cualquiera que disponga del enlace."
+msgstr "Связанные учетные записи будут видны для всех, у кого есть ссылка."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:141
+msgid ""
+"Para crear enlaces, los usuarios tienen que tener activada la opción en su "
+"perfl."
+msgstr ""
+"Для создания ссылок пользователи должны включить соответствующую опцию в "
+"своем профиле."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:151
+msgid "Habilitar Enlaces Públicos"
+msgstr "Включить публичные ссылки"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:157
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:166
+msgid "Tiempo de caducidad"
+msgstr "Срок действия"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:172
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:181
+msgid "Número máximo de visitas"
+msgstr "Максимум переходов"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:191
+msgid "La clave de la cuenta es visualizada como una imagen."
+msgstr "Пароль учетной записи показан как картинка."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:201
+msgid "Usar imagen para clave"
+msgstr "Использовать картинку для пароля"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:218
+msgid "Habilita la subida/descarga de archivos para las cuentas."
+msgstr ""
+"Включает загрузку/скачивание файлов, которые могут прикрепляться к учетным "
+"записям."
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:228
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:203
+msgid "Gestión de archivos"
+msgstr "Управление файлами"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:234
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:252
msgid "Extensiones de archivos permitidas"
msgstr "Разрешенные расширения файлов"
-#: ../../../../inc/themes/classic/config.inc:193
-#: ../../../../inc/themes/material-blue/config.inc:309
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:239
msgid "Extensiones permitidas para la subida de archivos."
msgstr "Разрешенные расширения файлов для загрузки."
-#: ../../../../inc/themes/classic/config.inc:197
-#: ../../../../inc/themes/material-blue/config.inc:313
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:243
msgid "Se permite un máximo de 4 caracteres."
msgstr "Максимальная длина расширения 4 символа."
-#: ../../../../inc/themes/classic/config.inc:201
-#: ../../../../inc/themes/material-blue/config.inc:317
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:247
msgid ""
"Escribir extensión y pulsar intro para añadir. Es necesario guardar la "
"configuración."
@@ -3582,164 +4540,167 @@ msgstr ""
"Введите расширение и нажмите Enter для добавления. Не забудьте сохранить "
"настройки."
-#: ../../../../inc/themes/classic/config.inc:216
-#: ../../../../inc/themes/material-blue/config.inc:332
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:260
+msgid "Tamaño máximo de archivo"
+msgstr "Максимальный размер файла"
+
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:265
msgid "Establece el tamaño máximo para subir archivos."
msgstr "Максимальный размер загружаемого файла."
-#: ../../../../inc/themes/classic/config.inc:220
-#: ../../../../inc/themes/material-blue/config.inc:336
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:269
msgid "El máximo absuluto es de 16MB."
msgstr "Абсолютный максимум 16MB."
-#: ../../../../inc/themes/classic/config.inc:231
-#: ../../../../inc/themes/classic/preferences.inc:56
-#: ../../../../inc/themes/material-blue/config.inc:218
-#: ../../../../inc/themes/material-blue/preferences.inc:54
-msgid "Resultados por página"
-msgstr "Результатов на страницу"
+#: ../../../../inc/themes/material-blue/views/config/accounts.inc:280
+msgid "Tamaño máximo de archivo en bytes"
+msgstr "Максимальный размер файла в байтах"
-#: ../../../../inc/themes/classic/config.inc:235
-#: ../../../../inc/themes/classic/preferences.inc:61
-#: ../../../../inc/themes/material-blue/config.inc:222
-#: ../../../../inc/themes/material-blue/preferences.inc:58
-msgid "Número de resultados por página a mostrar, al realizar una búsqueda."
-msgstr "Число результатов поиска на страницу"
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:13
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:16
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:98
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:101
+msgid "Resultado"
+msgstr "Результат"
-#: ../../../../inc/themes/classic/config.inc:246
-#: ../../../../inc/themes/material-blue/config.inc:260
-msgid "Resultados en Tarjetas"
-msgstr "Результаты в виде карточек"
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:24
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:27
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:109
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:112
+msgid "Descargar Actual"
+msgstr "Скачать текущий"
-#: ../../../../inc/themes/classic/config.inc:250
-#: ../../../../inc/themes/material-blue/config.inc:264
-msgid "Muestra los resultados de búsqueda de cuentas en formato tarjeta."
-msgstr "Включает показ учетных записей в результатах поиска в виде карточек."
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:33
+msgid "Copia BBDD"
+msgstr "Резервная копия БД"
-#: ../../../../inc/themes/classic/config.inc:262
-#: ../../../../inc/themes/material-blue/config.inc:238
-msgid "Imagen para mostrar clave"
-msgstr "Показать пароль в виде изображения"
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:40
+msgid "Copia sysPass"
+msgstr "Резервная копия sysPass"
-#: ../../../../inc/themes/classic/config.inc:266
-#: ../../../../inc/themes/material-blue/config.inc:242
-msgid "Generar una imagen con el texto de la clave de la cuenta."
-msgstr "Генерирует изображение с паролем учетной записи."
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:43
+msgid "No hay backups para descargar"
+msgstr "Нет резервных копий для скачивания"
-#: ../../../../inc/themes/classic/config.inc:269
-#: ../../../../inc/themes/material-blue/config.inc:245
-msgid "Util para entornos donde copiar la clave supone un riesgo de seguridad."
-msgstr "Полезно для ситуаций, когда копирование паролей не безопасно."
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:71
+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/config.inc:304
-#: ../../../../inc/themes/material-blue/config.inc:454
-msgid "Añadir extensión"
-msgstr "Добавить расширение"
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:73
+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 ""
+"Используя данный метод возможно сохранить все данные sysPass и использовать "
+"их в portable версии"
-#: ../../../../inc/themes/classic/config.inc:305
-#: ../../../../inc/themes/material-blue/config.inc:455
-msgid "Eliminar extensión"
-msgstr "Удалить расширение"
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:88
+msgid "Exportar Cuentas"
+msgstr "Экспорт учетных записей"
-#: ../../../../inc/themes/classic/customers.inc:10
-#: ../../../../inc/themes/material-blue/customers.inc:14
-msgid "Nombre del cliente"
-msgstr "Имя заказчика"
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:122
+#, fuzzy
+msgid "No hay archivos XML para descargar"
+msgstr "Нет XML файлов для загрузки"
-#: ../../../../inc/themes/classic/customers.inc:18
-#: ../../../../inc/themes/material-blue/customers.inc:26
-msgid "Descripción del cliente"
-msgstr "Описание заказчика"
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:129
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:137
+msgid "Clave de Exportación"
+msgstr "Пароль экспорта"
-#: ../../../../inc/themes/classic/customfields.inc:38
-#: ../../../../inc/themes/material-blue/customfields.inc:41
-msgid "Texto Ayuda"
-msgstr "Текст помощи"
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:143
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:151
+msgid "Clave de Exportación (repetir)"
+msgstr "Пароль экспорта (подтверждение)"
-#: ../../../../inc/themes/classic/customfields.inc:44
-#: ../../../../inc/themes/material-blue/customfields.inc:52
-msgid "Obligatorio"
-msgstr "Обязательно"
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:180
+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 ""
+"Экспорт учетных записей позволяет сохранить данные в формат XML для "
+"дальнейшего импорта в другие инсталляции sysPass."
-#: ../../../../inc/themes/classic/encryption.inc:5
-#: ../../../../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:5
-#: ../../../../inc/themes/material-blue/install.inc:52
-#: ../../../../inc/themes/material-blue/install.inc:59
-#: ../../../../inc/themes/material-blue/login.inc:26
-#: ../../../../inc/themes/material-blue/login.inc:49
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:182
+msgid "Los elementos exportados son cuentas, clientes y categorías."
+msgstr "Экспортируются учетные записи, заказчики и категории."
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:184
+msgid ""
+"Las claves de las cuentas son exportadas de forma encriptada para mayor "
+"seguridad."
+msgstr ""
+"Пароли учетных записей экспортируются в зашифрованном виде для улучшения "
+"защиты."
+
+#: ../../../../inc/themes/material-blue/views/config/backup.inc:186
+msgid ""
+"Es posible establecer una clave de exportación para guardar todos los datos "
+"encriptados en el archivo XML."
+msgstr ""
+"Можно задать пароль для экспорта, которым будет зашифрована вся информация в "
+"файле XML."
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:8
+#: ../../../../inc/themes/material-blue/views/config/import.inc:148
+#: ../../../../inc/themes/material-blue/views/config/import.inc:163
+#: ../../../../inc/themes/material-blue/views/main/install.inc:48
+#: ../../../../inc/themes/material-blue/views/main/install.inc:54
+#: ../../../../inc/themes/material-blue/views/main/login.inc:49
+#: ../../../../inc/themes/material-blue/views/main/login.inc:89
msgid "Clave Maestra"
msgstr "Мастер-пароль"
-#: ../../../../inc/themes/classic/encryption.inc:13
-#: ../../../../inc/themes/classic/encryption.inc:113
-#: ../../../../inc/themes/material-blue/encryption.inc:13
-#: ../../../../inc/themes/material-blue/encryption.inc:128
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:18
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:21
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:167
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:170
msgid "Último cambio"
msgstr "Последнее изменение"
-#: ../../../../inc/themes/classic/encryption.inc:22
-#: ../../../../inc/themes/material-blue/encryption.inc:22
-#: ../../../../inc/themes/material-blue/encryption.inc:28
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:29
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:37
msgid "Clave Maestra actual"
msgstr "Текущий мастер-пароль"
-#: ../../../../inc/themes/classic/encryption.inc:31
-#: ../../../../inc/themes/material-blue/encryption.inc:34
-#: ../../../../inc/themes/material-blue/encryption.inc:40
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:43
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:51
msgid "Nueva Clave Maestra"
msgstr "Новый мастер-пароль"
-#: ../../../../inc/themes/classic/encryption.inc:40
-#: ../../../../inc/themes/material-blue/encryption.inc:46
-#: ../../../../inc/themes/material-blue/encryption.inc:52
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:57
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:65
msgid "Nueva Clave Maestra (repetir)"
msgstr "Новый мастер-пароль (подтверждение)"
-#: ../../../../inc/themes/classic/encryption.inc:48
-#: ../../../../inc/themes/material-blue/encryption.inc:58
-msgid "No modificar cuentas"
-msgstr "Не изменять учетные записи"
-
-#: ../../../../inc/themes/classic/encryption.inc:53
-#: ../../../../inc/themes/material-blue/encryption.inc:63
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:75
msgid "Establece una nueva clave maestra sin re-encriptar las cuentas"
msgstr "Устанавливает мастер-пароль без повторного шифрования учетных записей."
-#: ../../../../inc/themes/classic/encryption.inc:64
-#: ../../../../inc/themes/material-blue/encryption.inc:76
-msgid "Confirmar cambio"
-msgstr "Подтвердите изменение"
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:83
+msgid "No modificar cuentas"
+msgstr "Не изменять учетные записи"
-#: ../../../../inc/themes/classic/encryption.inc:67
-#: ../../../../inc/themes/classic/encryption.inc:70
-#: ../../../../inc/themes/classic/encryption.inc:73
-#: ../../../../inc/themes/classic/import.inc:64
-#: ../../../../inc/themes/classic/security.inc:43
-msgid "Atención"
-msgstr "Предупреждение"
-
-#: ../../../../inc/themes/classic/encryption.inc:68
-#: ../../../../inc/themes/material-blue/encryption.inc:80
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:92
msgid "Guarde la nueva clave en un lugar seguro."
msgstr "Необходимо сохранить новый пароль в надежном месте"
-#: ../../../../inc/themes/classic/encryption.inc:71
-#: ../../../../inc/themes/material-blue/encryption.inc:83
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:96
msgid "Se volverán a encriptar las claves de todas las cuentas."
msgstr "Все пароли учетных записей будут зашифрованы вновь."
-#: ../../../../inc/themes/classic/encryption.inc:74
-#: ../../../../inc/themes/material-blue/encryption.inc:86
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:100
msgid "Los usuarios deberán de introducir la nueva clave maestra."
msgstr "Пользователям потребуется ввести новый мастер-пароль."
-#: ../../../../inc/themes/classic/encryption.inc:95
-#: ../../../../inc/themes/material-blue/encryption.inc:109
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:106
+msgid "Confirmar cambio"
+msgstr "Подтвердите изменение"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:128
msgid ""
"La clave maestra es utilizada para encriptar las claves de las cuentas de "
"sysPass para mantenerlas seguras."
@@ -3747,8 +4708,7 @@ msgstr ""
"Мастер-пароль используется для шифрования паролей учетных записей в целях "
"повышения безопасности."
-#: ../../../../inc/themes/classic/encryption.inc:97
-#: ../../../../inc/themes/material-blue/encryption.inc:111
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:130
msgid ""
"Es recomendable cambiarla cada cierto tiempo y utilizar una clave compleja "
"que incluya números, letras y símbolos."
@@ -3756,35 +4716,44 @@ msgstr ""
"Рекомендуется регулярная смена и одновременное использование цифр, букв и "
"символов."
-#: ../../../../inc/themes/classic/encryption.inc:105
-#: ../../../../inc/themes/material-blue/encryption.inc:121
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:140
+msgid "Actualizar hash de clave maestra"
+msgstr ""
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:156
msgid "Clave Temporal"
msgstr "Временный пароль"
-#: ../../../../inc/themes/classic/encryption.inc:116
-#: ../../../../inc/themes/classic/encryption.inc:127
-#: ../../../../inc/themes/material-blue/encryption.inc:131
-#: ../../../../inc/themes/material-blue/encryption.inc:142
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:172
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:185
msgid "No generada"
msgstr "Не сгенерирован"
-#: ../../../../inc/themes/classic/encryption.inc:121
-#: ../../../../inc/themes/material-blue/encryption.inc:136
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:177
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:180
msgid "Válido hasta"
msgstr "Действителен до"
-#: ../../../../inc/themes/classic/encryption.inc:133
-#: ../../../../inc/themes/material-blue/encryption.inc:148
-#: ../../../../inc/themes/material-blue/encryption.inc:154
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:191
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:194
+msgid "Intentos"
+msgstr "Попыток"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:201
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:210
msgid "Validez (s)"
msgstr "Срок действия (секунды)"
-#: ../../../../inc/themes/classic/encryption.inc:136
-msgid "Validez"
-msgstr "Срок действия"
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:222
+msgid ""
+"Envía un correo a todos los usuarios o sólo a los del grupo seleccionado."
+msgstr "Отправить письмо всем пользователям или выбранным группам"
-#: ../../../../inc/themes/classic/encryption.inc:164
-#: ../../../../inc/themes/material-blue/encryption.inc:183
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:230
+msgid "Enviar correo"
+msgstr "Отправить письмо"
+
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:288
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 "
@@ -3793,248 +4762,219 @@ msgstr ""
"Временный пароль используется как мастер-пароль для пользователей, которым "
"необходимо войти и которым не предоставляется мастер-пароль."
-#: ../../../../inc/themes/classic/encryption.inc:166
-#: ../../../../inc/themes/material-blue/encryption.inc:187
+#: ../../../../inc/themes/material-blue/views/config/encryption.inc:294
msgid "Generar"
msgstr "Сгенерировать пароль"
-#: ../../../../inc/themes/classic/eventlog.inc:6
-#: ../../../../inc/themes/classic/search.inc:3
-#: ../../../../inc/themes/material-blue/eventlog.inc:6
-#: ../../../../inc/themes/material-blue/search.inc:3
-msgid "No se encontraron registros"
-msgstr "Записи не найдены"
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:4
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:61
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:63
+msgid "Eventos"
+msgstr "События"
-#: ../../../../inc/themes/classic/eventlog.inc:17
-#: ../../../../inc/themes/material-blue/eventlog.inc:17
-msgid "Fecha / Hora"
-msgstr "Дата / Время"
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:13
+msgid "Guarda las acciones realizadas en la aplicación."
+msgstr "Вести запись действий в программе."
-#: ../../../../inc/themes/classic/eventlog.inc:20
-#: ../../../../inc/themes/material-blue/eventlog.inc:20
-msgid "Evento"
-msgstr "Событие"
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:21
+msgid "Habilitar log de eventos"
+msgstr "Включить журнал событий"
-#: ../../../../inc/themes/classic/eventlog.inc:26
-#: ../../../../inc/themes/material-blue/eventlog.inc:26
-msgid "IP"
-msgstr "IP"
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:32
+msgid "Habilitar Syslog"
+msgstr "Включить Syslog"
-#: ../../../../inc/themes/classic/eventlog.inc:84
-#: ../../../../inc/themes/classic/search.inc:20
-#: ../../../../inc/themes/classic/search.inc:199
-#: ../../../../inc/themes/material-blue/eventlog.inc:84
-#: ../../../../inc/themes/material-blue/search.inc:20
-#: ../../../../inc/themes/material-blue/search.inc:209
-msgid "Primera página"
-msgstr "Первая страница"
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:43
+msgid "Habilitar Syslog Remoto"
+msgstr "Включить удаленный Syslog"
-#: ../../../../inc/themes/classic/eventlog.inc:86
-#: ../../../../inc/themes/classic/search.inc:22
-#: ../../../../inc/themes/classic/search.inc:201
-#: ../../../../inc/themes/material-blue/eventlog.inc:86
-#: ../../../../inc/themes/material-blue/search.inc:22
-#: ../../../../inc/themes/material-blue/search.inc:211
-msgid "Página anterior"
-msgstr "Прошлая страница"
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:57
+msgid "Nombre o dirección IP"
+msgstr "Хост или IP-адрес"
-#: ../../../../inc/themes/classic/eventlog.inc:91
-#: ../../../../inc/themes/classic/search.inc:27
-#: ../../../../inc/themes/classic/search.inc:206
-#: ../../../../inc/themes/material-blue/eventlog.inc:91
-#: ../../../../inc/themes/material-blue/search.inc:27
-#: ../../../../inc/themes/material-blue/search.inc:216
-msgid "Página siguiente"
-msgstr "Следующая страница"
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:63
+#: ../../../../inc/themes/material-blue/views/config/general-events.inc:71
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:33
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:40
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:47
+msgid "Puerto"
+msgstr "Порт"
-#: ../../../../inc/themes/classic/eventlog.inc:93
-#: ../../../../inc/themes/classic/search.inc:29
-#: ../../../../inc/themes/classic/search.inc:208
-#: ../../../../inc/themes/material-blue/eventlog.inc:93
-#: ../../../../inc/themes/material-blue/search.inc:29
-#: ../../../../inc/themes/material-blue/search.inc:218
-msgid "Última página"
-msgstr "Последняя страница"
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:2
+msgid "Proxy"
+msgstr "Прокси"
-#: ../../../../inc/themes/classic/files.inc:22
-#: ../../../../inc/themes/material-blue/files.inc:21
-msgid "Ver Archivo"
-msgstr "Показать файл"
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:13
+msgid "Usar Proxy"
+msgstr "Использовать прокси"
-#: ../../../../inc/themes/classic/footer.inc:6
-#: ../../../../inc/themes/material-blue/footer.inc:29
-msgid "Indica si la conexión utiliza HTTPS."
-msgstr "Указывает, используется ли соединение по протоколу HTTPS."
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:27
+msgid "Servidor proxy"
+msgstr "Прокси-сервер"
-#: ../../../../inc/themes/classic/footer.inc:6
-#: ../../../../inc/themes/material-blue/footer.inc:29
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:41
+msgid "Puerto del servidor proxy"
+msgstr "Порт прокси-сервера"
+
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:55
+msgid "Usuario del servidor proxy"
+msgstr "Пользователь для прокси-сервера"
+
+#: ../../../../inc/themes/material-blue/views/config/general-proxy.inc:69
+msgid "Clave del servidor proxy"
+msgstr "Пароль для прокси-сервера"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:4
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:7
+msgid "Sitio"
+msgstr "Сайт"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:10
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:24
+#: ../../../../inc/themes/material-blue/views/config/info.inc:78
+#: ../../../../inc/themes/material-blue/views/config/info.inc:92
+#: ../../../../inc/themes/material-blue/views/main/install.inc:135
+#: ../../../../inc/themes/material-blue/views/main/install.inc:136
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:19
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:21
+msgid "Idioma"
+msgstr "Язык"
+
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:15
msgid ""
-"Las claves de formularios enviados se encriptan mediante PKI, el resto de "
-"datos no."
-msgstr "В этом случае пароли при передаче шифруются, остальные данные - нет."
+"Establece el idioma global de la aplicación. Es posible establecer un idioma "
+"por usuario en las preferencias."
+msgstr ""
+"Устанавливает глобальную настройку языка программы. Каждый пользователь "
+"может изменить язык в своих настройках."
-#: ../../../../inc/themes/classic/footer.inc:6
-msgid "Seguro"
-msgstr "Безопасно"
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:19
+msgid ""
+"Para mejorar/añadir las traducciones, puede colaborar en https://poeditor."
+"com/join/project/fmlsBuugyv"
+msgstr ""
+"Для улучшения/добавления переводов Вы можете перейти по ссылке https://"
+"poeditor.com/join/project/fmlsBuugyv"
-#: ../../../../inc/themes/classic/footer.inc:6
-msgid "Inseguro"
-msgstr "Небезопасно"
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:36
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:46
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:32
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:34
+msgid "Tema Visual"
+msgstr "Тема"
-#: ../../../../inc/themes/classic/footer.inc:11
-#: ../../../../inc/themes/material-blue/footer.inc:18
-msgid "Ayuda :: FAQ :: Changelog"
-msgstr "Help :: FAQ :: Changelog"
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:41
+msgid ""
+"Establece el tema visual global de la aplicación. Es posible establecer un "
+"tema visual por usuario en las preferencias."
+msgstr ""
+"Устанавливает тему визуального оформления приложения. Каждый пользователь "
+"может изменить тему в своих настройках."
-#: ../../../../inc/themes/classic/footer.inc:14
-#: ../../../../inc/themes/material-blue/footer.inc:23
-msgid "Un proyecto de cygnux.org"
-msgstr "Проект cygnux.org"
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:59
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:67
+msgid "Timeout de sesión (s)"
+msgstr "Таймаут сессии (секунды)"
-#: ../../../../inc/themes/classic/groups.inc:10
-#: ../../../../inc/themes/material-blue/groups.inc:14
-msgid "Nombre del grupo"
-msgstr "Имя группы"
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:77
+msgid "Fuerza para que todas las conexiones sean a través de HTTPS."
+msgstr "Форсировать все соединения через HTTPS."
-#: ../../../../inc/themes/classic/groups.inc:18
-#: ../../../../inc/themes/material-blue/groups.inc:26
-msgid "Descripción del grupo"
-msgstr "Описание группы"
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:86
+msgid "Forzar HTTPS"
+msgstr "Форсировать HTTPS"
-#: ../../../../inc/themes/classic/import.inc:4
-#: ../../../../inc/themes/material-blue/import.inc:119
-msgid "Importar phpPMS"
-msgstr "Импорт phpPMS"
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:96
+msgid ""
+"Muestra información relativa a la configuración de la aplicación y "
+"rendimiento."
+msgstr "Показывает информацию о программе и производительности."
-#: ../../../../inc/themes/classic/import.inc:11
-#: ../../../../inc/themes/classic/install.inc:63
-#: ../../../../inc/themes/classic/install.inc:64
-#: ../../../../inc/themes/material-blue/import.inc:126
-#: ../../../../inc/themes/material-blue/import.inc:138
-msgid "Usuario BBDD"
-msgstr "Имя пользователя DB"
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:104
+msgid "Habilitar depuración"
+msgstr "Включить отладку"
-#: ../../../../inc/themes/classic/import.inc:15
-#: ../../../../inc/themes/material-blue/import.inc:130
-msgid "Indicar el usuario de conexión a la base de datos de phpPMS."
-msgstr "Укажите пользователя для подключения к базе данных phpPMS."
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:114
+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/import.inc:25
-#: ../../../../inc/themes/classic/install.inc:71
-#: ../../../../inc/themes/classic/install.inc:73
-#: ../../../../inc/themes/material-blue/import.inc:144
-#: ../../../../inc/themes/material-blue/import.inc:150
-msgid "Clave BBDD"
-msgstr "Пароль DB"
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:122
+msgid "Modo mantenimiento"
+msgstr "Режим обслуживания"
-#: ../../../../inc/themes/classic/import.inc:33
-#: ../../../../inc/themes/classic/install.inc:78
-#: ../../../../inc/themes/classic/install.inc:79
-#: ../../../../inc/themes/material-blue/import.inc:156
-#: ../../../../inc/themes/material-blue/import.inc:168
-msgid "Nombre BBDD"
-msgstr "Имя DB"
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:132
+msgid ""
+"Comprobar actualizaciones de la aplicación (sólo para los usuarios "
+"administradores)."
+msgstr "Проверяет обновления программы (только для администраторов)."
-#: ../../../../inc/themes/classic/import.inc:37
-#: ../../../../inc/themes/material-blue/import.inc:160
-msgid "Indicar el nombre de la base de datos de phpPMS."
-msgstr "Введите имя базы phpPMS."
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:140
+msgid "Comprobar actualizaciones"
+msgstr "Проверка обновлений"
-#: ../../../../inc/themes/classic/import.inc:47
-#: ../../../../inc/themes/classic/install.inc:87
-#: ../../../../inc/themes/classic/install.inc:88
-#: ../../../../inc/themes/material-blue/import.inc:174
-#: ../../../../inc/themes/material-blue/import.inc:186
-msgid "Servidor BBDD"
-msgstr "Сервер DB"
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:150
+msgid ""
+"Comprobar si existen notificaciones de seguridad o avisos de sysPass (sólo "
+"para los usuarios administradores)."
+msgstr ""
+"Проверяет на наличие уведомлений безопасности (только для администраторов)."
-#: ../../../../inc/themes/classic/import.inc:51
-#: ../../../../inc/themes/material-blue/import.inc:178
-msgid "Indicar el servidor de la base de datos de phpPMS."
-msgstr "Введите имя сервера с базой phpPMS."
+#: ../../../../inc/themes/material-blue/views/config/general-site.inc:158
+msgid "Comprobar notificaciones"
+msgstr "Проверка уведомлений"
-#: ../../../../inc/themes/classic/import.inc:61
-#: ../../../../inc/themes/material-blue/import.inc:192
-msgid "Confirmar"
-msgstr "Подтвердить"
-
-#: ../../../../inc/themes/classic/import.inc:65
-#: ../../../../inc/themes/material-blue/import.inc:196
-msgid "Los datos actuales serán borrados (excepto el usuario actual)"
-msgstr "Текущие данные будут удалены (кроме текущего пользователя)"
-
-#: ../../../../inc/themes/classic/import.inc:80
-msgid "Iniciar"
-msgstr "Старт"
-
-#: ../../../../inc/themes/classic/import.inc:86
-#: ../../../../inc/themes/material-blue/import.inc:4
+#: ../../../../inc/themes/material-blue/views/config/import.inc:8
msgid "Importar CSV/XML"
msgstr "Импорт CSV/XML"
-#: ../../../../inc/themes/classic/import.inc:93
-#: ../../../../inc/themes/material-blue/import.inc:11
+#: ../../../../inc/themes/material-blue/views/config/import.inc:14
+#: ../../../../inc/themes/material-blue/views/config/import.inc:24
msgid "Usuario por Defecto"
msgstr "Пользователь по умолчанию"
-#: ../../../../inc/themes/classic/import.inc:97
-#: ../../../../inc/themes/material-blue/import.inc:15
+#: ../../../../inc/themes/material-blue/views/config/import.inc:19
msgid "Define el usuario por defecto para las cuentas importadas."
msgstr "Задает пользователя по умолчанию для импортируемых учетных записей."
-#: ../../../../inc/themes/classic/import.inc:114
-#: ../../../../inc/themes/classic/ldap.inc:144
-#: ../../../../inc/themes/material-blue/import.inc:33
-#: ../../../../inc/themes/material-blue/ldap.inc:170
+#: ../../../../inc/themes/material-blue/views/config/import.inc:40
+#: ../../../../inc/themes/material-blue/views/config/import.inc:50
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:207
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:217
msgid "Grupo por Defecto"
msgstr "Группа по умолчанию"
-#: ../../../../inc/themes/classic/import.inc:118
-#: ../../../../inc/themes/material-blue/import.inc:37
+#: ../../../../inc/themes/material-blue/views/config/import.inc:45
msgid "Define el grupo por defecto para las cuentas importadas."
msgstr "Задает группу по умолчанию для импортируемых учетных записей."
-#: ../../../../inc/themes/classic/import.inc:135
-#: ../../../../inc/themes/material-blue/import.inc:55
-#: ../../../../inc/themes/material-blue/import.inc:61
-msgid "Clave de Importación"
-msgstr "Пароль для импорта (если требуется)"
-
-#: ../../../../inc/themes/classic/import.inc:143
-#: ../../../../inc/themes/material-blue/import.inc:67
-#: ../../../../inc/themes/material-blue/import.inc:73
-msgid "Delimitador CSV"
-msgstr "Разделитель CSV"
-
-#: ../../../../inc/themes/classic/import.inc:157
-#: ../../../../inc/themes/material-blue/import.inc:85
+#: ../../../../inc/themes/material-blue/views/config/import.inc:74
msgid "Soltar archivo aquí o click para seleccionar"
msgstr "Перетащите файл сюда или нажмите для выбора"
-#: ../../../../inc/themes/classic/import.inc:173
-#: ../../../../inc/themes/material-blue/import.inc:102
+#: ../../../../inc/themes/material-blue/views/config/import.inc:102
msgid ""
"Permite realizar la importación de Cuentas, Categorías y Clientes desde "
"archivos XML y CSV."
msgstr ""
"Выполняет импорт учетных записей, категорий и заказчиков из файлов XML и CSV."
-#: ../../../../inc/themes/classic/import.inc:175
-#: ../../../../inc/themes/material-blue/import.inc:104
+#: ../../../../inc/themes/material-blue/views/config/import.inc:104
msgid ""
"Los formatos de archivos XML soportados son: sysPass, KeePass y KeePassX"
msgstr "Поддерживаемые форматы файлов XML: sysPass, KeePass и KeePassX"
-#: ../../../../inc/themes/classic/import.inc:177
-#: ../../../../inc/themes/material-blue/import.inc:106
+#: ../../../../inc/themes/material-blue/views/config/import.inc:106
msgid ""
"Arrastar el archivo a importar a la zona indicada o hacer click sobre la "
"flecha."
msgstr ""
"Перетащите файл для импорта в выделенную зону или нажмите на стрелочку."
-#: ../../../../inc/themes/classic/import.inc:179
-#: ../../../../inc/themes/material-blue/import.inc:108
+#: ../../../../inc/themes/material-blue/views/config/import.inc:108
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."
@@ -4042,977 +4982,224 @@ msgstr ""
"При импорте из KeePass или KeePassX, имя заказчика будет KeePass или "
"KeePassX, а в качестве категории будет указано имя группы."
-#: ../../../../inc/themes/classic/import.inc:181
-#: ../../../../inc/themes/material-blue/import.inc:110
+#: ../../../../inc/themes/material-blue/views/config/import.inc:110
msgid "La importación de archivos CSV se realiza con el siguiente formato:"
msgstr "Файл CSV должен быть в формате:"
-#: ../../../../inc/themes/classic/import.inc:183
-#: ../../../../inc/themes/material-blue/import.inc:112
-msgid "nombre_de_cuenta;cliente;categoría;url;usuario;clave;notas"
-msgstr "account_name;customer;category;url;user;password;notes"
+#: ../../../../inc/themes/material-blue/views/config/import.inc:112
+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:185
-#: ../../../../inc/themes/material-blue/import.inc:114
+#: ../../../../inc/themes/material-blue/views/config/import.inc:114
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
+#: ../../../../inc/themes/material-blue/views/config/import.inc:121
+msgid "XML"
+msgstr "XML"
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:127
+#: ../../../../inc/themes/material-blue/views/config/import.inc:142
+msgid "Clave de Importación"
+msgstr "Пароль для импорта (если требуется)"
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:132
+msgid "Sólo es necesaria para archivos XML de sysPass encriptados."
+msgstr "Это необходимо только для зашифрованных XML файлов syspass'а "
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:153
+msgid ""
+"Sólo es necesaria para archivos XML de sysPass con clave maestra distinta de "
+"la actual."
+msgstr ""
+"Это необходимо только для XML файлов syspass'а, зашифрованных мастер-паролем "
+"отличным от текущего."
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:170
+msgid "CSV"
+msgstr "CSV"
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:176
+#: ../../../../inc/themes/material-blue/views/config/import.inc:191
+msgid "Delimitador CSV"
+msgstr "Разделитель CSV"
+
+#: ../../../../inc/themes/material-blue/views/config/import.inc:181
+msgid "Sólo es necesario para archivos CSV."
+msgstr "Это необходимо только для CSV файлов."
+
+#: ../../../../inc/themes/material-blue/views/config/info.inc:5
msgid "Información de la Aplicación"
msgstr "О программе"
-#: ../../../../inc/themes/classic/info.inc:10
-#: ../../../../inc/themes/material-blue/info.inc:10
+#: ../../../../inc/themes/material-blue/views/config/info.inc:11
+#: ../../../../inc/themes/material-blue/views/config/info.inc:14
msgid "Versión sysPass"
msgstr "Версия sysPass"
-#: ../../../../inc/themes/classic/info.inc:18
-#: ../../../../inc/themes/material-blue/info.inc:18
+#: ../../../../inc/themes/material-blue/views/config/info.inc:21
+#: ../../../../inc/themes/material-blue/views/config/info.inc:24
msgid "Base de Datos"
msgstr "База данных"
-#: ../../../../inc/themes/classic/info.inc:30
-#: ../../../../inc/themes/material-blue/info.inc:30
+#: ../../../../inc/themes/material-blue/views/config/info.inc:35
+#: ../../../../inc/themes/material-blue/views/config/info.inc:38
msgid "PHP"
msgstr "PHP"
-#: ../../../../inc/themes/classic/info.inc:35
-#: ../../../../inc/themes/material-blue/info.inc:35
+#: ../../../../inc/themes/material-blue/views/config/info.inc:42
msgid "Extensiones"
msgstr "Расширения"
-#: ../../../../inc/themes/classic/info.inc:37
-#: ../../../../inc/themes/material-blue/info.inc:37
+#: ../../../../inc/themes/material-blue/views/config/info.inc:44
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:372
-#: ../../../../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/mail.inc:24
-#: ../../../../inc/themes/material-blue/mail.inc:30
-msgid "Servidor"
-msgstr "Сервер"
+#: ../../../../inc/themes/material-blue/views/config/info.inc:49
+msgid "OP Cache"
+msgstr ""
-#: ../../../../inc/themes/classic/install.inc:4
-#: ../../../../inc/themes/material-blue/install.inc:4
-msgid "Instalación "
-msgstr "Установка"
+#: ../../../../inc/themes/material-blue/views/config/info.inc:68
+#: ../../../../inc/themes/material-blue/views/config/info.inc:71
+msgid "Copia de Configuración"
+msgstr "Резервная копия конфигурации"
-#: ../../../../inc/themes/classic/install.inc:25
-#: ../../../../inc/themes/material-blue/install.inc:26
-msgid "Crear cuenta de admin de sysPass"
-msgstr "Создать аккаунт администратора sysPass"
+#: ../../../../inc/themes/material-blue/views/config/info.inc:83
+msgid "Indica si el idioma se encuentra disponible"
+msgstr "Сообщает доступен язык или нет."
-#: ../../../../inc/themes/classic/install.inc:32
-#: ../../../../inc/themes/material-blue/install.inc:38
-msgid "Login del usuario administrador de sysPass"
-msgstr "Учетная запись администратора sysPass"
+#: ../../../../inc/themes/material-blue/views/config/info.inc:87
+msgid ""
+"Si no está instalado, es necesario instalar las locales en el sistema "
+"operativo. Más información en Wiki."
+msgstr ""
+"Если не установлено, то необходимо установить правильные локали в ОС. "
+"Подробности в WiKi."
-#: ../../../../inc/themes/classic/install.inc:58
-#: ../../../../inc/themes/material-blue/install.inc:72
-msgid "Configurar BBDD"
-msgstr "Конфигурация БД"
+#: ../../../../inc/themes/material-blue/views/config/info.inc:99
+#: ../../../../inc/themes/material-blue/views/config/info.inc:102
+msgid "Plugins Cargados"
+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:106
-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:124
-msgid "Modo Hosting"
-msgstr "Режим хостинга"
-
-#: ../../../../inc/themes/classic/install.inc:104
-#: ../../../../inc/themes/material-blue/install.inc:131
-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:138
-#: ../../../../inc/themes/material-blue/install.inc:139
-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
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:22
msgid "Habilita de autentificación mediante servidor LDAP."
msgstr "Включает аутентификацию по LDAP"
-#: ../../../../inc/themes/classic/ldap.inc:20
-#: ../../../../inc/themes/material-blue/ldap.inc:20
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:26
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
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:36
+msgid "Habilitar LDAP"
+msgstr "Включить LDAP"
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:46
+msgid "Habilita el modo de conexión con LDAP de Active Directory."
+msgstr "Включает режим подключения Active Directory к серверу LDAP."
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:56
+msgid "Active Directory"
+msgstr "Active Directory"
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:67
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
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:71
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:102
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:153
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:187
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:111
msgid "Ejemplos:"
msgstr "Примеры:"
-#: ../../../../inc/themes/classic/ldap.inc:57
-#: ../../../../inc/themes/material-blue/ldap.inc:64
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:93
msgid "Usuario de conexión"
msgstr "Пользователь для подключения"
-#: ../../../../inc/themes/classic/ldap.inc:61
-#: ../../../../inc/themes/material-blue/ldap.inc:68
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:98
msgid "Usuario para conectar con el servicio de LDAP."
msgstr "Пользователь для подключения к серверу LDAP."
-#: ../../../../inc/themes/classic/ldap.inc:81
-#: ../../../../inc/themes/material-blue/ldap.inc:92
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:123
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
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:128
+msgid "Clave del usuario de conexión a LDAP."
+msgstr "Пароль пользователя для подключения к LDAP."
+
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:144
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:168
msgid "Base de búsqueda"
msgstr "Начинать поиск с"
-#: ../../../../inc/themes/classic/ldap.inc:96
-#: ../../../../inc/themes/material-blue/ldap.inc:115
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:149
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
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:179
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
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:183
msgid "Este grupo debe de estar ubicado en la base de búsquedas de LDAP."
msgstr ""
"Эта группа должна быть расположена в пространстве, в котором осуществляется "
"поиск в LDAP."
-#: ../../../../inc/themes/classic/ldap.inc:148
-#: ../../../../inc/themes/material-blue/ldap.inc:174
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:212
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
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:231
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:241
msgid "Perfil por Defecto"
msgstr "Профиль по умолчанию"
-#: ../../../../inc/themes/classic/ldap.inc:169
-#: ../../../../inc/themes/material-blue/ldap.inc:194
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:236
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/material-blue/views/config/ldap.inc:255
+#: ../../../../inc/themes/material-blue/views/config/ldap.inc:258
+msgid "Resultados"
+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 "Включает режим подключения 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:74
-msgid "¿Olvidó su clave?"
-msgstr "Забыли пароль?"
-
-#: ../../../../inc/themes/classic/login.inc:63
-#: ../../../../inc/themes/material-blue/login.inc:90
-msgid "Aplicación actualizada correctamente"
-msgstr "Программа успешно обновлена"
-
-#: ../../../../inc/themes/classic/login.inc:68
-#: ../../../../inc/themes/classic/login.inc:69
-#: ../../../../inc/themes/material-blue/login.inc:95
-#: ../../../../inc/themes/material-blue/login.inc:96
-#: ../../../../inc/themes/material-blue/login.inc:98
-msgid "Nuevas Características"
-msgstr "Новые возможности"
-
-#: ../../../../inc/themes/classic/mail.inc:11
-#: ../../../../inc/themes/material-blue/mail.inc:11
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:21
msgid "Habilitar notificaciones de correo"
msgstr "Включить уведомления по email"
-#: ../../../../inc/themes/classic/mail.inc:29
-#: ../../../../inc/themes/material-blue/config.inc:386
-#: ../../../../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
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:58
msgid "Habilitar Autentificación"
msgstr "Включить аутентификацию"
-#: ../../../../inc/themes/classic/mail.inc:68
-#: ../../../../inc/themes/material-blue/mail.inc:91
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:90
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:93
+msgid "Seguridad"
+msgstr "Безопасность"
+
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:96
msgid "Deshabilitada"
msgstr "Отключена"
-#: ../../../../inc/themes/classic/mail.inc:77
-#: ../../../../inc/themes/material-blue/mail.inc:100
-#: ../../../../inc/themes/material-blue/mail.inc:107
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:106
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:114
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:70
-#: ../../../../inc/themes/classic/search.inc:150
-#: ../../../../inc/themes/material-blue/search.inc:160
-msgid "Más Acciones"
-msgstr "Другие действия"
-
-#: ../../../../inc/themes/classic/passreset.inc:13
-#: ../../../../inc/themes/material-blue/passreset.inc:9
-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:23
-msgid "Email del Usuario"
-msgstr "Email"
-
-#: ../../../../inc/themes/classic/passreset.inc:27
-msgid "Nueva Clave"
-msgstr "Новый пароль"
-
-#: ../../../../inc/themes/classic/passreset.inc:46
-#: ../../../../inc/themes/material-blue/passreset.inc:47
-msgid "Volver a iniciar sesión"
-msgstr "Назад ко входу"
-
-#: ../../../../inc/themes/classic/passreset.inc:48
-#: ../../../../inc/themes/material-blue/2fa.inc:25
-#: ../../../../inc/themes/material-blue/passreset.inc:53
-#: ../../../../inc/themes/material-blue/passreset.inc:54
-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:58
-#: ../../../../inc/themes/material-blue/passreset.inc:59
-msgid "Cambiar"
-msgstr "Изменение"
-
-#: ../../../../inc/themes/classic/passreset.inc:52
-msgid "Cambiar Clave"
-msgstr "Изменение пароля"
-
-#: ../../../../inc/themes/classic/preferences.inc:73
-#: ../../../../inc/themes/material-blue/preferences.inc:74
-msgid "Ordenar resultados por visitas"
-msgstr "Сортировать результаты поиска по числу просмотров"
-
-#: ../../../../inc/themes/classic/preferences.inc:77
-#: ../../../../inc/themes/material-blue/preferences.inc:78
-msgid ""
-"Ordena los resultados de búsqueda por el número de visitas de las cuentas."
-msgstr ""
-"Включает показ результатов поиска учетных записей с сортировкой по числу "
-"просмотров."
-
-#: ../../../../inc/themes/classic/preferences.inc:90
-#: ../../../../inc/themes/material-blue/preferences.inc:91
-msgid "Barra de navegación superior"
-msgstr "Верхняя навигация"
-
-#: ../../../../inc/themes/classic/preferences.inc:94
-#: ../../../../inc/themes/material-blue/preferences.inc:95
-msgid "Mostrar una barra de navegación superior en las búsquedas."
-msgstr "Закрепить панель навигации в верху страницы."
-
-#: ../../../../inc/themes/classic/preferences.inc:107
-#: ../../../../inc/themes/material-blue/preferences.inc:108
-msgid "Mostrar Acciones Ocultas"
-msgstr "Показывать скрытые действия"
-
-#: ../../../../inc/themes/classic/preferences.inc:111
-#: ../../../../inc/themes/material-blue/preferences.inc:112
-msgid ""
-"Mostrar las acciones ocultas para los elementos de la búsqueda de cuentas."
-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
-#: ../../../../inc/themes/material-blue/profiles.inc:60
-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 "Управление API авторизации"
-
-#: ../../../../inc/themes/classic/profiles.inc:112
-#: ../../../../inc/themes/material-blue/profiles.inc:129
-msgid "Autorizaciones API"
-msgstr "API авторизации"
-
-#: ../../../../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:454
-#: ../../../../inc/themes/material-blue/editpass.inc:55
-#: ../../../../inc/themes/material-blue/mgmttabs.inc:13
-#: ../../../../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:10
-#: ../../../../inc/themes/classic/search.inc:189
-#: ../../../../inc/themes/material-blue/search.inc:10
-#: ../../../../inc/themes/material-blue/search.inc:199
-msgid "Filtro ON"
-msgstr "Включен фильтр"
-
-#: ../../../../inc/themes/classic/search.inc:14
-#: ../../../../inc/themes/classic/search.inc:193
-#: ../../../../inc/themes/material-blue/search.inc:14
-#: ../../../../inc/themes/material-blue/search.inc:203
-msgid "Global ON"
-msgstr "Глобальный"
-
-#: ../../../../inc/themes/classic/search.inc:63
-#: ../../../../inc/themes/material-blue/search.inc:65
-msgid "Buscar en Wiki"
-msgstr "Поиск в Wiki"
-
-#: ../../../../inc/themes/classic/search.inc:99
-#: ../../../../inc/themes/material-blue/search.inc:101
-msgid "Abrir enlace a"
-msgstr "Открыть ссылку"
-
-#: ../../../../inc/themes/classic/search.inc:117
-#: ../../../../inc/themes/material-blue/search.inc:125
-msgid "Archivos adjuntos"
-msgstr "Вложения"
-
-#: ../../../../inc/themes/classic/search.inc:124
-#: ../../../../inc/themes/material-blue/search.inc:134
-msgid "Enlace a Wiki"
-msgstr "Ссылка на Wiki"
-
-#: ../../../../inc/themes/classic/searchbox.inc:5
-#: ../../../../inc/themes/material-blue/searchbox.inc:5
-msgid "Limpiar"
-msgstr "Очистить"
-
-#: ../../../../inc/themes/classic/searchbox.inc:7
-#: ../../../../inc/themes/material-blue/searchbox.inc:10
-msgid "Texto a buscar"
-msgstr "Текст для поиска"
-
-#: ../../../../inc/themes/classic/searchbox.inc:12
-#: ../../../../inc/themes/material-blue/searchbox.inc:15
-msgid "Parámetros especiales:"
-msgstr "Специальные параметры"
-
-#: ../../../../inc/themes/classic/searchbox.inc:15
-#: ../../../../inc/themes/material-blue/searchbox.inc:18
-msgid "Buscar cuentas a las que 'login' tenga acceso"
-msgstr "Найти учетные записи, к которым есть доступ у указанного пользователя"
-
-#: ../../../../inc/themes/classic/searchbox.inc:17
-#: ../../../../inc/themes/material-blue/searchbox.inc:19
-msgid "Buscar cuentas a las que 'group_name' tenga acceso"
-msgstr "Найти учетные записи, к которым есть доступ у указанной группы"
-
-#: ../../../../inc/themes/classic/searchbox.inc:19
-#: ../../../../inc/themes/material-blue/searchbox.inc:20
-msgid "Buscar cuentas con archivos con el nombre 'file_name'"
-msgstr "Найти учетные записи с прикрепленным файлом"
-
-#: ../../../../inc/themes/classic/searchbox.inc:24
-#: ../../../../inc/themes/material-blue/searchbox.inc:25
-#: ../../../../inc/themes/material-blue/searchbox.inc:28
-msgid "Búsqueda global"
-msgstr "Глобальный поиск"
-
-#: ../../../../inc/themes/classic/searchbox.inc:50
-#: ../../../../inc/themes/material-blue/searchbox.inc:54
-msgid "CPP"
-msgstr "APP"
-
-#: ../../../../inc/themes/classic/searchbox.inc:51
-#: ../../../../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 "Включает двухфакторную аутентификацию, например Google Authenticator."
-
-#: ../../../../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 "Отсканируйте QR-код и затем введите шестизначный пароль."
-
-#: ../../../../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 "Ошибка получения QR-кода. Попробуйте еще раз."
-
-#: ../../../../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: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:6
-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:12
-msgid "Código de Seguridad"
-msgstr "Код безопасности"
-
-#: ../../../../inc/themes/classic/upgrade.inc:21
-#: ../../../../inc/themes/material-blue/upgrade.inc:23
-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 "Адрес email"
-
-#: ../../../../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 "Включить ссылки 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 ""
-"Включает возможность добавления внешней ссылки на страницу результатов "
-"поиска учетной записи в Wiki."
-
-#: ../../../../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"
-
-#: ../../../../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 системы поиска в WiKi."
-
-#: ../../../../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 "URL на страницы 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 "URL страницы с данными из WiKi."
-
-#: ../../../../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 "Имя учетной записи используется как параметр поиска в WiKi."
-
-#: ../../../../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 "Префикс учетных записей, для которых создавать ссылку на WiKi."
-
-#: ../../../../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:34
-msgid "> Usar texto y crear nuevo"
-msgstr "> Если ввести в поле ниже - создастся новый"
-
-#: ../../../../inc/themes/material-blue/account.inc:43
-msgid "Seleccionar o escribir para crear uno nuevo"
-msgstr "Выберите или введите для создания нового"
-
-#: ../../../../inc/themes/material-blue/account.inc:114
-msgid "Clave (Repetir)"
-msgstr "Подтверждение пароля"
-
-#: ../../../../inc/themes/material-blue/backup.inc:58
-#: ../../../../inc/themes/material-blue/backup.inc:144
-#: ../../../../inc/themes/material-blue/encryption.inc:115
-#: ../../../../inc/themes/material-blue/import.inc:215
-msgid "Realizar"
-msgstr "Выполнить"
-
-#: ../../../../inc/themes/material-blue/config.inc:67
-msgid "Forzar HTTPS"
-msgstr "Форсировать HTTPS"
-
-#: ../../../../inc/themes/material-blue/config.inc:71
-msgid "Fuerza para que todas las conexiones sean a través de HTTPS."
-msgstr "Форсировать все соединения через HTTPS."
-
-#: ../../../../inc/themes/material-blue/config.inc:232
-#: ../../../../inc/themes/material-blue/preferences.inc:68
-msgid "Número de resultados por página"
-msgstr "Число результатов поиска на страницу"
-
-#: ../../../../inc/themes/material-blue/config.inc:346
-msgid "Tamaño máximo de archivo en bytes"
-msgstr "Максимальный размер файла в байтах"
-
-#: ../../../../inc/themes/material-blue/config.inc:353
-msgid "Proxy"
-msgstr "Прокси"
-
-#: ../../../../inc/themes/material-blue/config.inc:359
-msgid "Usar Proxy"
-msgstr "Использовать прокси"
-
-#: ../../../../inc/themes/material-blue/config.inc:380
-msgid "Servidor proxy"
-msgstr "Прокси-сервер"
-
-#: ../../../../inc/themes/material-blue/config.inc:394
-msgid "Puerto del servidor proxy"
-msgstr "Порт прокси-сервера"
-
-#: ../../../../inc/themes/material-blue/config.inc:408
-msgid "Usuario del servidor proxy"
-msgstr "Пользователь для прокси-сервера"
-
-#: ../../../../inc/themes/material-blue/config.inc:422
-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/install.inc:33
-msgid "Usuario administrador de sysPass"
-msgstr "Учетная запись администратора sysPass"
-
-#: ../../../../inc/themes/material-blue/install.inc:81
-msgid "Usuario acceso BBDD"
-msgstr "Пользователь DB"
-
-#: ../../../../inc/themes/material-blue/install.inc:86
-msgid "Usuario con permisos de administrador de MySQL"
-msgstr "Используйте учетную запись с правами администратора базы данных"
-
-#: ../../../../inc/themes/material-blue/install.inc:94
-msgid "Clave acceso BBDD"
-msgstr "Пароль DB"
-
-#: ../../../../inc/themes/material-blue/install.inc:101
-msgid "Nombre BBDD para sysPass"
-msgstr "Имя базы данных sysPass"
-
-#: ../../../../inc/themes/material-blue/install.inc:113
-msgid "Servidor BBDD para sysPass"
-msgstr "Сервер DB"
-
-#: ../../../../inc/themes/material-blue/install.inc:118
-msgid "Nombre del servidor para instalar la base de datos de sysPass"
-msgstr "Имя сервера базы данных sysPass"
-
-#: ../../../../inc/themes/material-blue/ldap.inc:96
-msgid "Clave del usuario de conexión a LDAP."
-msgstr "Пароль пользователя для подключения к LDAP."
-
-#: ../../../../inc/themes/material-blue/mail.inc:118
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:124
msgid ""
"Habilita que los usuarios puedan solicitar modificaciones o acceso a las "
"cuentas sin permisos."
@@ -5020,37 +5207,1215 @@ msgstr ""
"Включить возможность создания запроса на изменение учетных записей, к "
"которым у пользователя нет прав доступа."
-#: ../../../../inc/themes/material-blue/profiles.inc:25
+#: ../../../../inc/themes/material-blue/views/config/mail.inc:133
+msgid "Habilitar peticiones por correo"
+msgstr "Включить запросы по email"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:20
+msgid ""
+"Habilita la opción de añadir un enlace a Wiki externa para los resultados de "
+"la búsqueda."
+msgstr ""
+"Включает возможность добавления внешней ссылки на страницу результатов "
+"поиска учетной записи в Wiki."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:30
+msgid "Habilitar enlaces Wiki"
+msgstr "Включить ссылки Wiki"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:36
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:63
+msgid "URL de búsqueda Wiki"
+msgstr "URL для поиска в Wiki"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:41
+msgid "URL que utiliza la wiki para realizar una búsqueda de una página."
+msgstr "URL системы поиска в WiKi."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:45
+msgid "Como parámetro se utiliza el nombre del cliente."
+msgstr "Использует имя заказчика как параметр."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:49
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:82
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:163
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:190
+msgid "Ejemplo:"
+msgstr "Пример:"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:69
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:96
+msgid "URL de página en Wiki"
+msgstr "URL на страницы Wiki"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:74
+msgid "URL que utiliza la wiki para acceder a los detalles de una página."
+msgstr "URL страницы с данными из WiKi."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:78
+msgid ""
+"El nombre de la cuenta se utiliza como parámetro de la variable de búsqueda "
+"de la Wiki."
+msgstr "Имя учетной записи используется как параметр поиска в WiKi."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:102
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:116
+msgid "Prefijo para nombre de cuenta"
+msgstr "Префикс учетной записи"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:107
+msgid ""
+"Prefijo para determinar qué cuentas tienen un enlace a una página de la Wiki."
+msgstr "Префикс учетных записей, для которых создавать ссылку на WiKi."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:124
+msgid "DokuWiki API"
+msgstr "DokuWiki API"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:134
+msgid ""
+"Habilita la conexión a la API XML-RPC de DokuWiki para los enlaces Wiki."
+msgstr "Включает DokuWiki XML-RPC API для ссылок на WiKi."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:137
+msgid ""
+"Para que esta característica funcione, es necesario habilitar los enlaces "
+"Wiki para el filtrado de cuentas."
+msgstr ""
+"Для работы данной функции необходимо включить ссылки на WiKi для фильтрации "
+"учетных записей"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:147
+msgid "Habilitar API de DokuWiki"
+msgstr "Включить DokuWiki API"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:154
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:175
+msgid "URL API"
+msgstr "API URL"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:159
+msgid "URL de la API de DokuWiki."
+msgstr "DokuWiki API URL"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:181
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:203
+msgid "URL Base"
+msgstr "Base URL"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:186
+msgid "URL base de DokuWiki."
+msgstr "DokuWiki base URL"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:214
+msgid "Usuario para conectar a la API de DokuWiki."
+msgstr "Пользователь для подключения к DokuWiki API."
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:242
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:258
+msgid "Namespace"
+msgstr "Пространство имен"
+
+#: ../../../../inc/themes/material-blue/views/config/wiki.inc:247
+msgid "Namespace utilizado para buscar las páginas."
+msgstr "Пространство имен для поиска страниц."
+
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:22
+msgid "Fecha / Hora"
+msgstr "Дата / Время"
+
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:25
+msgid "Nivel"
+msgstr "Уровень"
+
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:28
+msgid "Evento"
+msgstr "Событие"
+
+#: ../../../../inc/themes/material-blue/views/eventlog/eventlog.inc:34
+msgid "IP"
+msgstr "IP"
+
+#: ../../../../inc/themes/material-blue/views/grid/datagrid-nav-full.inc:11
+msgid "Filtro ON"
+msgstr "Включен фильтр"
+
+#: ../../../../inc/themes/material-blue/views/grid/datatabs-grid.inc:102
+msgid "Eliminar Seleccionados"
+msgstr "Удалить выбранные"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:26
+msgid "Nombre del campo"
+msgstr "Имя поля"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:57
+msgid "Texto Ayuda"
+msgstr "Текст помощи"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:63
+msgid "Ayuda del campo"
+msgstr "Подсказка"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/customfields.inc:74
+msgid "Obligatorio"
+msgstr "Обязательно"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:25
+msgid "Nombre del grupo"
+msgstr "Имя группы"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/groups.inc:38
+msgid "Descripción del grupo"
+msgstr "Описание группы"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:20
+msgid "Nombre del plugin"
+msgstr "Имя плагина"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:32
+msgid "Versión del plugin"
+msgstr "Версия плагина"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:37
+msgid "Versión Compatible"
+msgstr "Совместимые версии"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:44
+msgid "Versión de sysPass compatible"
+msgstr "Совместимые версии sysPass"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:49
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:25
+msgid "Autor"
+msgstr "Автор"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/plugins.inc:56
+msgid "Autor del plugin"
+msgstr "Автор плагина"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:25
+msgid "Nombre del perfil"
+msgstr "Имя профиля"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:40
msgid "Crear nueva cuenta"
msgstr "Новая учетная запись"
-#: ../../../../inc/themes/material-blue/profiles.inc:25
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:40
msgid "Crear"
msgstr "Создать"
-#: ../../../../inc/themes/material-blue/profiles.inc:55
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:47
+msgid "Ver detalles de cuenta"
+msgstr "Просмотр деталей учетной записи"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:47
+msgid "Ver"
+msgstr "Показать"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:54
+msgid "Ver clave de cuenta"
+msgstr "Показать пароль учетной записи"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:61
+msgid "Ver historial de cuenta"
+msgstr "Показать историю учетной записи"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:68
+msgid "Editar cuenta"
+msgstr "Изменить учетную запись"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:75
+msgid "Editar clave de cuenta"
+msgstr "Изменить пароль учетной записи"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:75
+msgid "Editar Clave"
+msgstr "Изменить пароль"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:82
msgid "Eliminar cuenta"
msgstr "Удалить учетную запись"
-#: ../../../../inc/themes/material-blue/profiles.inc:55
-msgid "Eliminar"
-msgstr "Удалить"
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:89
+msgid "Ver archivos de cuenta"
+msgstr "Просмотр файлов учетной записи"
-#: ../../../../inc/themes/material-blue/profiles.inc:77
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:96
+msgid "Publicar enlace a cuenta"
+msgstr "Поделиться ссылкой на учетную запись"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:96
+msgid "Publicar Enlace"
+msgstr "Поделиться ссылкой"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:103
+msgid "Crear cuenta privada"
+msgstr "Создать приватную учетную запись"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:110
+msgid "Crear cuenta privada para grupo"
+msgstr "Создать приватный аккаунт для группы"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:117
+msgid "Asignar permisos"
+msgstr "Назначить права"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:130
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:132
+msgid "Gestión"
+msgstr "Управление"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:140
+msgid "Gestión de usuarios"
+msgstr "Управление пользователями"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:147
+msgid "Gestión de grupos"
+msgstr "Управление группами"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:154
+msgid "Gestión de perfiles"
+msgstr "Управление профилями"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:161
+msgid "Gestión de categorías"
+msgstr "Управление категориями"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:168
+msgid "Gestión de clientes"
+msgstr "Управление заказчиками"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:175
+msgid "Gestión de campos personalizados"
+msgstr "Управление свободными полями"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:182
+msgid "Gestión de autorizaciones API"
+msgstr "Управление API авторизации"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:189
+msgid "Gestión de enlaces"
+msgstr "Управление ссылками"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:196
+msgid "Gestión de cuentas"
+msgstr "Управление учетными записями"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:210
+msgid "Gestión de etiquetas"
+msgstr "Управление тегами"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:233
msgid "Opciones de encriptación"
msgstr "Настройки шифрования"
-#: ../../../../inc/themes/material-blue/profiles.inc:82
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:240
msgid "Realizar copia de seguridad y exportar"
msgstr "Резервное копирование и экспорт"
-#: ../../../../inc/themes/material-blue/security.inc:4
-msgid "Autentificación"
-msgstr "Аутентификация"
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:240
+msgid "Backup"
+msgstr "Резервное копирование"
-#~ msgid "No es posible guardar el archivo \"%s\" Tamaño máximo:"
-#~ msgstr "Невозможно сохранить файл \"%s\" . Максимальный размер:"
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:247
+msgid "Realizar importación de cuentas"
+msgstr "Выполнить импорт учетной записи"
-#, fuzzy
-#~ msgid "Error al actualizar datos encriptados"
-#~ msgstr "Ошибка изменения пароля"
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:253
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:255
+msgid "Otros"
+msgstr "Другие"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:263
+msgid "Ver log de eventos"
+msgstr "Просмотр журнала событий"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:270
+#: ../../../../inc/themes/material-blue/views/itemshow/profiles.inc:272
+msgid "Usado por"
+msgstr "Используется"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:59
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:61
+msgid "Hash"
+msgstr "Хэш"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:67
+#: ../../../../inc/themes/material-blue/views/itemshow/publiclinks.inc:69
+msgid "Uso"
+msgstr "Использовать"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/tags.inc:23
+msgid "Nombre de la etiqueta"
+msgstr "Имя тега"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:42
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:141
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:105
+msgid "Opciones"
+msgstr "Опции"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:45
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:49
+msgid "Regenerar Autorización"
+msgstr "Обновить авторизацию"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:55
+#: ../../../../inc/themes/material-blue/views/itemshow/tokens.inc:57
+msgid "Token"
+msgstr "Токен"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:31
+msgid "Nombre de usuario completo"
+msgstr "Полное имя пользователя"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:45
+msgid "Login de inicio de sesión"
+msgstr "Логин"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:94
+msgid "Dirección de correo"
+msgstr "Адрес email"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:145
+msgid "Administrador de la aplicación"
+msgstr "Администратор программы"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:152
+msgid "Administrador de cuentas"
+msgstr "Администратор учетных записей"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:167
+msgid "Forzar cambio de clave"
+msgstr "Запросить изменение пароля при следующем входе в систему"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:181
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:183
+msgid "Entradas"
+msgstr "Записи"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:190
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:192
+msgid "Último Acceso"
+msgstr "Последний доступ"
+
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:208
+#: ../../../../inc/themes/material-blue/views/itemshow/users.inc:210
+msgid "Fecha Clave Maestra"
+msgstr "Дата мастер-пароля"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:11
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:69
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:72
+msgid "Salir"
+msgstr "Выйти"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:25
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:56
+msgid "Preferencias de usuario"
+msgstr "Настройки пользователя"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:34
+#, php-format
+msgid "Hay %d notificaciones pendientes"
+msgstr "%d непрочитанных уведомлений"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:41
+msgid "No hay no hay notificaciones pendientes"
+msgstr "Нет ожидающих уведомлений"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:74
+msgid "Indica si la conexión utiliza HTTPS."
+msgstr "Указывает, используется ли соединение по протоколу HTTPS."
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:74
+msgid ""
+"Las claves de formularios enviados se encriptan mediante PKI, el resto de "
+"datos no."
+msgstr "Пароли при передаче форм шифруются с PKI, остальные данные - нет."
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:79
+#: ../../../../inc/themes/material-blue/views/main/body-header-menu.inc:82
+msgid "Demo"
+msgstr "Демо"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:90
+msgid "Ayuda :: FAQ :: Changelog"
+msgstr "Help :: FAQ :: Changelog"
+
+#: ../../../../inc/themes/material-blue/views/main/body-footer.inc:94
+msgid "Un proyecto de cygnux.org"
+msgstr "Проект cygnux.org"
+
+#: ../../../../inc/themes/material-blue/views/main/body-start.inc:4
+msgid "Javascript es necesario para el correcto funcionamiento"
+msgstr "Javascript необходим для корректной работы"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:9
+#, php-format
+msgid "Instalación %s"
+msgstr "Установка %s"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:19
+msgid "Admin de sysPass"
+msgstr "sysPass Admin"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:27
+msgid "Usuario administrador de sysPass"
+msgstr "Учетная запись администратора sysPass"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:35
+msgid "Login del usuario administrador de sysPass"
+msgstr "Учетная запись администратора sysPass"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:67
+msgid "Configurar BBDD"
+msgstr "Конфигурация БД"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:77
+msgid "Usuario acceso BBDD"
+msgstr "Пользователь DB"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:85
+msgid "Usuario con permisos de administrador de MySQL"
+msgstr "Используйте учетную запись с правами администратора базы данных"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:93
+msgid "Clave acceso BBDD"
+msgstr "Пароль DB"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:102
+msgid "Nombre BBDD para sysPass"
+msgstr "Имя базы данных sysPass"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:110
+msgid "Nombre de la base de datos para sysPass"
+msgstr "Имя базы данных sysPass"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:119
+msgid "Servidor BBDD para sysPass"
+msgstr "Сервер DB"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:127
+msgid "Nombre del servidor para instalar la base de datos de sysPass"
+msgstr "Имя сервера базы данных sysPass"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:145
+msgid "Modo Hosting"
+msgstr "Режим хостинга"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:152
+msgid "No crea ni verifica los permisos del usuario sobre la BBDD"
+msgstr "Права доступа к БД не создаются и не проеряются"
+
+#: ../../../../inc/themes/material-blue/views/main/install.inc:166
+#: ../../../../inc/themes/material-blue/views/main/install.inc:168
+msgid "Instalar"
+msgstr "Установка"
+
+#: ../../../../inc/themes/material-blue/views/main/login.inc:38
+msgid "Clave Anterior"
+msgstr "Прошлый пароль"
+
+#: ../../../../inc/themes/material-blue/views/main/login.inc:74
+msgid "¿Olvidó su clave?"
+msgstr "Забыли пароль?"
+
+#: ../../../../inc/themes/material-blue/views/main/login.inc:81
+msgid "Aplicación actualizada correctamente"
+msgstr "Программа успешно обновлена"
+
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:7
+msgid "Solicitud de Cambio de Clave"
+msgstr "Запросить смену пароля"
+
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:25
+msgid "Email del Usuario"
+msgstr "Email"
+
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:55
+msgid "Volver a iniciar sesión"
+msgstr "Назад ко входу"
+
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:61
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:63
+msgid "Solicitar"
+msgstr "Запрос"
+
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:67
+#: ../../../../inc/themes/material-blue/views/main/passreset.inc:69
+msgid "Cambiar"
+msgstr "Изменение"
+
+#: ../../../../inc/themes/material-blue/views/main/update.inc:21
+msgid "Actualizado"
+msgstr "Обновлено"
+
+#: ../../../../inc/themes/material-blue/views/main/update.inc:27
+msgid "Error al comprobar actualizaciones"
+msgstr "Ошибка проверки обновлений"
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:4
+#, php-format
+msgid "Actualización %s"
+msgstr "Обновить %s"
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:9
+msgid "Actualización de BBDD"
+msgstr "Обновление БД"
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:15
+msgid "Código de Seguridad"
+msgstr "Код безопасности"
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:23
+msgid ""
+"Este código se encuentra en el archivo de configuración de sysPass con la "
+"etiqueta \"upgradeKey\""
+msgstr ""
+"Этот код задан в конфигурационном файле sysPass вместе с тегом \"upgradekey\""
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:28
+msgid "He realizado una copia de seguridad completa de sysPass"
+msgstr "Полная резервная копия sysPass выполнена"
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:40
+msgid "Por favor espere mientras el proceso se ejecuta"
+msgstr "Пожалуйста, подождите пока процесс в работе"
+
+#: ../../../../inc/themes/material-blue/views/main/upgrade.inc:50
+msgid "Iniciar Actualización"
+msgstr "Начать обновление"
+
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:108
+msgid "Notificación global"
+msgstr "Глобальное уведомление"
+
+#: ../../../../inc/themes/material-blue/views/noticeshow/notices.inc:111
+msgid "Global"
+msgstr "Общее"
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:92
+msgid ""
+"Ordena los resultados de búsqueda por el número de visitas de las cuentas."
+msgstr ""
+"Включает показ результатов поиска учетных записей с сортировкой по числу "
+"просмотров."
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:100
+msgid "Ordenar resultados por visitas"
+msgstr "Сортировать результаты поиска по числу просмотров"
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:110
+msgid "Mostrar una barra de navegación superior en las búsquedas."
+msgstr "Закрепить панель навигации в верху страницы."
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:118
+msgid "Barra de navegación superior"
+msgstr "Верхняя навигация"
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:128
+msgid ""
+"Mostrar las acciones ocultas para los elementos de la búsqueda de cuentas."
+msgstr ""
+"Всегда показывать скрытые действия на странице результатов поиска учетных "
+"записей."
+
+#: ../../../../inc/themes/material-blue/views/userpreferences/preferences-site.inc:137
+msgid "Mostrar Acciones Ocultas"
+msgstr "Показывать скрытые действия"
+
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:2
+msgid "Ver Wiki"
+msgstr "Показать WiKi"
+
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:10
+#, php-format
+msgid "Resultados de búsqueda de '%s'"
+msgstr "Результаты поиска '%s'"
+
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:13
+#: ../../../../inc/themes/material-blue/views/wiki/wikipage.inc:23
+msgid "Página"
+msgstr "Страница"
+
+#~ msgid "Código correcto"
+#~ msgstr "Правильный код"
+
+#~ msgid "Código incorrecto"
+#~ msgstr "Неправильный код"
+
+#~ msgid "Id inválido"
+#~ msgstr "Ошибочный ID"
+
+#~ msgid "Login de usuario duplicado"
+#~ msgstr "Указанный логин уже существует"
+
+#~ msgid "Email de usuario duplicado"
+#~ msgstr "Указанный email уже существует"
+
+#~ msgid "Grupo en uso por:"
+#~ msgstr "Группа используется:"
+
+#~ msgid "Error al crear el perfil"
+#~ msgstr "Ошибка при создании профиля"
+
+#~ msgid "Error al actualizar el perfil"
+#~ msgstr "Ошибка при изменении профиля"
+
+#~ msgid "Perfil en uso por:"
+#~ msgstr "Профиль используется:"
+
+#~ msgid "Error al eliminar el perfil"
+#~ msgstr "Ошибка при удалении профиля"
+
+#~ msgid "Usuario o acción no indicado"
+#~ msgstr "Пользователь или действие не указано"
+
+#~ msgid "Realizar Exportación"
+#~ msgstr "Выполнить экспорт"
+
+#~ msgid "Error de conexión a LDAP"
+#~ msgstr "Ошибка подключения к LDAP"
+
+#~ msgid "Servidor Login"
+#~ msgstr "Сервер входа"
+
+#~ msgid "Usuario/Clave incorrectos"
+#~ msgstr "Неправильный пользователь / пароль"
+
+#~ msgid "El archivo es mayor de "
+#~ msgstr "Файл больше чем"
+
+#~ msgid "Confirmar la importación de cuentas"
+#~ msgstr "Подтвердите импорт учетной записи"
+
+#~ msgid "Es necesario un usuario de conexión"
+#~ msgstr "Требуется имя пользовтеля для подключения"
+
+#~ msgid "Es necesaria una clave de conexión"
+#~ msgstr "Требуется пароль для подключения"
+
+#~ msgid "Es necesario el nombre de la BBDD"
+#~ msgstr "Необходимо имя базы данных"
+
+#~ msgid "Es necesario un nombre de host"
+#~ msgstr "Необходимо имя сервера"
+
+#~ msgid ""
+#~ "No se ha podido realizar la solicitud. Consulte con el administrador."
+#~ msgstr ""
+#~ "Запрос не может быть выполнен. Пожалуйста, свяжитесь с администратором."
+
+#~ msgid "Error al enviar la solicitud"
+#~ msgstr "Ошибка при отправке запроса"
+
+#~ msgid "Ayuda Parámetros"
+#~ msgstr "Помощь"
+
+#~ msgid "ERROR: Error en la operación."
+#~ msgstr "ОШИБКА: Сбой операции"
+
+#~ msgid "Fin"
+#~ msgstr "Конец"
+
+#~ msgid "Denegado acceso a"
+#~ msgstr "Доступ запрещен к"
+
+#~ msgid "Token de autorización"
+#~ msgstr "Токен авторизации"
+
+#~ msgid "Acción a realizar"
+#~ msgstr "Действие"
+
+#~ msgid "Clave de usuario (opcional)"
+#~ msgstr "Проль пользователя (опционально)"
+
+#~ msgid "Cadena a buscar"
+#~ msgstr "Строка поиска"
+
+#~ msgid "Numero de cuentas a mostar en la búsqueda"
+#~ msgstr "Число результатов поиска на страницу"
+
+#~ msgid "Item a devolver"
+#~ msgstr "Пункт для возврата"
+
+#~ msgid "No es posible crear el directorio de backups"
+#~ msgstr "Невозможно создать директорию резервной копии"
+
+#~ msgid "Categoría en uso por:"
+#~ msgstr "Категория используется:"
+
+#~ msgid "Modificar Categoría"
+#~ msgstr "Изменить категорию"
+
+#~ msgid "No es posible escribir el archivo de configuración"
+#~ msgstr "Ошибка записи файла конфигурации"
+
+#~ msgid "Compruebe los permisos del directorio \"config\""
+#~ msgstr "Пожалуйста, проверьте права на папку \"config\""
+
+#~ msgid "Error procesando línea %s"
+#~ msgstr "Ошибка обработки в строке %s"
+
+#~ msgid "Cuenta importada: %s"
+#~ msgstr "Прогресс импорта: %s"
+
+#~ msgid "Cliente en uso por:"
+#~ msgstr "Заказчик используется:"
+
+#~ msgid "Error al añadir los usuarios del grupo"
+#~ msgstr "Ошибка при добавлении пользователей в группу"
+
+#~ msgid "Error al actualizar los usuarios del grupo"
+#~ msgstr "Ошибка изменения членства в группе"
+
+#~ msgid "Tipo mime no soportado"
+#~ msgstr "Тип MIME не поддерживается"
+
+#~ msgid "Sesion"
+#~ msgstr "Сессия"
+
+#~ msgid "El usuario de MySQL ya existe"
+#~ msgstr "Пользователь MySQL уже существует"
+
+#~ msgid "Indique un nuevo usuario o elimine el existente"
+#~ msgstr "Введите новое имя пользователя или удалите существующего"
+
+#~ msgid "Error al establecer permisos de la BBDD"
+#~ msgstr "Ошибка при установке прав доступа к базе данных"
+
+#~ msgid "Faltan parámetros"
+#~ msgstr "Пропущены параметры"
+
+#~ msgid "La versión no es compatible"
+#~ msgstr "Несовместимая версия"
+
+#~ msgid "Actualice a la última versión de phpPMS"
+#~ msgstr "Пожалуйста, обновите phpPMS до последней версии"
+
+#~ msgid "Error al obtener la configuración"
+#~ msgstr "Ошибка получения конфигурации"
+
+#~ msgid "Error al vaciar tabla"
+#~ msgstr "Ошибка очистки таблицы"
+
+#~ msgid "Usuario actual no es administrador de la aplicación"
+#~ msgstr "Текущий пользователь не является администратором программы"
+
+#~ msgid "No es posible crear el cliente"
+#~ msgstr "Невозможно создать заказчика"
+
+#~ msgid "Contacte con el desarrollador"
+#~ msgstr "Пожалуйста, свяжитесь с разработчиком"
+
+#~ msgid "Importar Clientes"
+#~ msgstr "Импорт заказчиков"
+
+#~ msgid "Registros"
+#~ msgstr "Записи"
+
+#~ msgid "Error al obtener los clientes"
+#~ msgstr "Ошибка получения заказчика"
+
+#~ msgid "Error al obtener cuentas"
+#~ msgstr "Ошибка получения учетных записей"
+
+#~ msgid "Error al migrar cuenta"
+#~ msgstr "Ошибка импорта учетной записи"
+
+#~ msgid "Error al obtener los grupos de cuentas"
+#~ msgstr "Ошибка получения групп учетных записей"
+
+#~ msgid "Importar Grupos de Cuentas"
+#~ msgstr "Импорт групп учетных записей"
+
+#~ msgid "Error al crear grupos de cuentas"
+#~ msgstr "Ошибка при создании групп учетных записей"
+
+#~ msgid "Error al obtener el historico de cuentas"
+#~ msgstr "Ошибка при получении истории учетных записей"
+
+#~ msgid "Importar Histórico de Cuentas"
+#~ msgstr "Импорт истории учетных записей"
+
+#~ msgid "Error al crear historico de cuentas"
+#~ msgstr "Ошибка создания истории учетных записей"
+
+#~ msgid "Error al obtener los archivos de cuentas"
+#~ msgstr "Ошибка получения файлов учетных записей"
+
+#~ msgid "Importar Archivos de Cuentas"
+#~ msgstr "Импорт файлов учетных записей"
+
+#~ msgid "Error al crear archivos de cuentas"
+#~ msgstr "Ошибка создания файлов учетных записей"
+
+#~ msgid "Error al obtener las categorías de cuentas"
+#~ msgstr "Ошибка получения категорий учетных записей"
+
+#~ msgid "Importar Categorías de Cuentas"
+#~ msgstr "Импорт категорий учетных записей"
+
+#~ msgid "Error al crear categorías de cuentas"
+#~ msgstr "Ошибка получения категорий учетных записей"
+
+#~ msgid "Importar Usuarios"
+#~ msgstr "Импорт пользователей"
+
+#~ msgid "Error al crear usuarios"
+#~ msgstr "Ошибка создания пользователей"
+
+#~ msgid "Error al obtener los grupos de usuarios"
+#~ msgstr "Ошибка получения групп пользователей"
+
+#~ msgid "Importar Grupos de Usuarios"
+#~ msgstr "Импорт групп пользователей"
+
+#~ msgid "Error al crear los grupos de usuarios"
+#~ msgstr "Ошибка добавления групп пользователей"
+
+#~ msgid "Importar Configuración"
+#~ msgstr "Импорт конфигурации"
+
+#~ msgid "Datos de perfil incorrectos"
+#~ msgstr "Ошибка данных в профиле"
+
+#~ msgid "Modificar Perfil"
+#~ msgstr "Редактировать профиль"
+
+#~ msgid "No hay categorías para importar"
+#~ msgstr "Нет категорий для импорта"
+
+#~ msgid "No hay clientes para importar"
+#~ msgstr "Нет заказчиков для импорта"
+
+#~ msgid "No hay cuentas para importar"
+#~ msgstr "Нет учетных записей для импорта"
+
+#~ msgid "Actualización de la Configuración realizada correctamente."
+#~ msgstr "Конфигурация была успешно обновлена."
+
+#~ msgid "Modificar Usuario"
+#~ msgstr "Изменить пользователя"
+
+#~ msgid "Migrar Grupos"
+#~ msgstr "Миграция групп"
+
+#~ msgid "Formato detectado"
+#~ msgstr "Обнаружен формат"
+
+#~ msgid "Gestión de Categorías"
+#~ msgstr "Управление категориями"
+
+#~ msgid "Gestión de Clientes"
+#~ msgstr "Управление заказчиками"
+
+#~ msgid "Nuevo estilo visual basado en Material Design Lite by Google"
+#~ msgstr "Новый стиль, основанный на Material Design Lite by Google"
+
+#~ msgid "Usuarios en múltiples grupos"
+#~ msgstr "Пользователи могут состоять в нескольких группах"
+
+#~ msgid "Previsualización de imágenes"
+#~ msgstr "Предварительный просмотр изображений"
+
+#~ msgid "Mostrar claves como imágenes"
+#~ msgstr "Показать пароли в виде изображений"
+
+#~ msgid "Campos personalizados"
+#~ msgstr "Настраиваемые поля"
+
+#~ msgid "API de consultas"
+#~ msgstr "Запросы API"
+
+#~ msgid "Autentificación en 2 pasos"
+#~ msgstr "Двухфакторная аутентификация"
+
+#~ msgid "Complejidad de generador de claves"
+#~ msgstr "Сложность генератора паролей"
+
+#~ msgid "Consultas especiales"
+#~ msgstr "Специальные запросы"
+
+#~ msgid "Exportación a XML"
+#~ msgstr "Экспорт в XML"
+
+#~ msgid "Clave maestra temporal"
+#~ msgstr "Временный мастер-пароль"
+
+#~ msgid "Importación de cuentas desde sysPass, KeePass, KeePassX y CSV"
+#~ msgstr "Импорт учетных записей из sysPass, KeePass, KeePassX и CSV"
+
+#~ msgid "Optimización del código y mayor rapidez de carga"
+#~ msgstr "Оптимизация кода и загрузки"
+
+#~ msgid "Mejoras de seguridad en XSS e inyección SQL"
+#~ msgstr "Улучшена защита от XSS и SQL инъекций"
+
+#~ msgid "Pulse aquí para acceder"
+#~ msgstr "Назмите здесь для входа"
+
+#~ msgid "Gestión de Usuarios"
+#~ msgstr "Управление пользователями"
+
+#~ msgid "Gestión de Grupos"
+#~ msgstr "Управление группами"
+
+#~ msgid "Gestión de Perfiles"
+#~ msgstr "Управление профилями"
+
+#~ msgid "Gestión de Autorizaciones API"
+#~ msgstr "Управление API для авторизации"
+
+#~ msgid "Introducir código"
+#~ msgstr "Введите код"
+
+#~ msgid "Verificar"
+#~ msgstr "Пароль (подтверждение)"
+
+#~ msgid "Buscar en desplegable o introducir"
+#~ msgstr "Выберите снизу или введите"
+
+#~ msgid "por"
+#~ msgstr "выполнено"
+
+#~ msgid "Seleccionar grupos secundarios"
+#~ msgstr "Выберите вторичные группы"
+
+#~ msgid "Seleccionar usuarios"
+#~ msgstr "Выберите пользователей"
+
+#~ msgid ""
+#~ "Para mejorar/añadir las traducciones, puede colaborar en http:://"
+#~ "translate.syspass.org"
+#~ msgstr ""
+#~ "Можно улучшить или добавить перевод на сайте http://translate.syspass.org"
+
+#~ msgid "Añadir extensión"
+#~ msgstr "Добавить расширение"
+
+#~ msgid "Eliminar extensión"
+#~ msgstr "Удалить расширение"
+
+#~ msgid "Atención"
+#~ msgstr "Предупреждение"
+
+#~ msgid "Validez"
+#~ msgstr "Срок действия"
+
+#~ msgid "Seguro"
+#~ msgstr "Безопасно"
+
+#~ msgid "Inseguro"
+#~ msgstr "Небезопасно"
+
+#~ msgid "nombre_de_cuenta;cliente;categoría;url;usuario;clave;notas"
+#~ msgstr "account_name;customer;category;url;user;password;notes"
+
+#~ msgid "Importar phpPMS"
+#~ msgstr "Импорт phpPMS"
+
+#~ msgid "Usuario BBDD"
+#~ msgstr "Имя пользователя DB"
+
+#~ msgid "Indicar el usuario de conexión a la base de datos de phpPMS."
+#~ msgstr "Укажите пользователя для подключения к базе данных phpPMS."
+
+#~ msgid "Clave BBDD"
+#~ msgstr "Пароль DB"
+
+#~ msgid "Nombre BBDD"
+#~ msgstr "Имя DB"
+
+#~ msgid "Indicar el nombre de la base de datos de phpPMS."
+#~ msgstr "Введите имя базы phpPMS."
+
+#~ msgid "Servidor BBDD"
+#~ msgstr "Сервер DB"
+
+#~ msgid "Indicar el servidor de la base de datos de phpPMS."
+#~ msgstr "Введите имя сервера с базой phpPMS."
+
+#~ msgid "Confirmar"
+#~ msgstr "Подтвердить"
+
+#~ msgid "Los datos actuales serán borrados (excepto el usuario actual)"
+#~ msgstr "Текущие данные будут удалены (кроме текущего пользователя)"
+
+#~ msgid "Iniciar"
+#~ msgstr "Старт"
+
+#~ msgid "Instalación "
+#~ msgstr "Установка"
+
+#~ msgid "Crear cuenta de admin de sysPass"
+#~ msgstr "Создать аккаунт администратора sysPass"
+
+#~ msgid "Login de usuario con permisos de administrador de MySQL"
+#~ msgstr "Учетная запись с правами администратора базы данных"
+
+#~ msgid "Nombre del servidor de la base de datos de sysPass"
+#~ msgstr "Имя сервера базы данных sysPass"
+
+#~ msgid "Comprobar conexión con LDAP"
+#~ msgstr "Проверить подключение к LDAP"
+
+#~ msgid "Nuevas Características"
+#~ msgstr "Новые возможности"
+
+#~ msgid "Login del Usuario"
+#~ msgstr "Логин"
+
+#~ msgid "Nueva Clave"
+#~ msgstr "Новый пароль"
+
+#~ msgid "Solicitar cambio de clave"
+#~ msgstr "Запрос на изменение пароля"
+
+#~ msgid "Añadir nueva cuenta"
+#~ msgstr "Добавить новую учетную запись"
+
+#~ msgid "Borrar cuenta"
+#~ msgstr "Удалить учетную запись"
+
+#~ msgid "Borrar"
+#~ msgstr "Удалить"
+
+#~ msgid "Configuración general"
+#~ msgstr "Основная конфигурация"
+
+#~ msgid "Cambiar clave maestra"
+#~ msgstr "Изменить мастер-пароль"
+
+#~ msgid "Realizar copia de seguridad"
+#~ msgstr "Выполнить резервное копирование"
+
+#~ msgid "No usado"
+#~ msgstr "Не используется"
+
+#~ msgid "Global ON"
+#~ msgstr "Глобальный"
+
+#~ msgid "CPP"
+#~ msgstr "APP"
+
+#~ msgid "Autenticación"
+#~ msgstr "Аутентификация"
+
+#~ msgid "Autenticación en 2 pasos"
+#~ msgstr "Двухфакторная аутентификация"
+
+#~ 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 ""
+#~ "Включает двухфакторную аутентификацию, например Google Authenticator."
+
+#~ msgid ""
+#~ "Escanee el código QR proporcionado y a continuación introduzca la clave "
+#~ "de 6 dígitos."
+#~ msgstr "Отсканируйте QR-код и затем введите шестизначный пароль."
+
+#~ msgid "Activar"
+#~ msgstr "Активировать"
+
+#~ msgid "Error al obtener el código QR. Inténtelo de nuevo"
+#~ msgstr "Ошибка получения QR-кода. Попробуйте еще раз."
+
+#~ msgid "Código"
+#~ msgstr "Пароль"
+
+#~ msgid ""
+#~ "Una vez activada, sólo es posible acceder si se dispone del dispositivo "
+#~ "generador de códigos asociado."
+#~ msgstr ""
+#~ "После включения, Вы можете получить доступ только при наличии "
+#~ "привязанного устройства."
+
+#~ msgid "Cambiar clave de usuario"
+#~ msgstr "Изменение пароля пользователя"
+
+#~ msgid "Introducir Código de Seguridad"
+#~ msgstr "Введите код безопасности"
+
+#~ msgid "Admin. Aplicación"
+#~ msgstr "Администратор программы"
+
+#~ msgid "Admin. Cuentas"
+#~ msgstr "Администратор учетных записей"
+
+#~ msgid "Añadir filtro"
+#~ msgstr "Добавить фильтр"
+
+#~ msgid "Eliminar filtro"
+#~ msgstr "Удалить фильтр"
+
+#~ msgid "> Usar texto y crear nuevo"
+#~ msgstr "> Если ввести в поле ниже - создастся новый"
+
+#~ msgid "Seleccionar o escribir para crear uno nuevo"
+#~ msgstr "Выберите или введите для создания нового"
+
+#~ msgid "Clave (Repetir)"
+#~ msgstr "Подтверждение пароля"
+
+#~ msgid "Archivo actualizado"
+#~ msgstr "Файл обновлен"
+
+#~ msgid "Usuarios importados %d/%d"
+#~ msgstr "Импортировано пользователей %d/%d"
+
+#~ msgid "Errores: %d"
+#~ msgstr "Ошибок: %d"
+
+#~ msgid "Denegado acceso a %s"
+#~ msgstr "Доступ к %s запрещен"
+
+#~ msgid "Eliminar Plugin"
+#~ msgstr "Удалить плагин"
+
+#~ msgid "Modificar Plugin"
+#~ msgstr "Изменить плагин"
+
+#~ msgid "Nuevo Enlace"
+#~ msgstr "Новая ссылка"
+
+#~ msgid "Creando usuario '%s (%s)'"
+#~ msgstr "Создание пользователя '%s (%s)'"
+
+#~ msgid "Buscar cuentas con la etiqueta 'tag_name'"
+#~ msgstr "Поиск учетных записей с тегом 'tag_name'"
+
+#~ msgid "Tiempo en minutos"
+#~ msgstr "Время в минутах"
+
+#~ msgid "No hay notificaciones pendientes"
+#~ msgstr "Нет ожидающих уведомлений"
+
+#~ msgid "Registro en uso"
+#~ msgstr "Запись используется"
+
+#~ msgid "Sólo para administradores de la aplicación"
+#~ msgstr "Только для администраторов приложения"
+
+#~ msgid "Solo Admins"
+#~ msgstr "Только для админов"
+
+#~ msgid "Aviso Caducidad"
+#~ msgstr "Просроченное уведомление"
+
+#~ msgid "El código 2FA se ha de restablecer en %d días"
+#~ msgstr "2FA код будет сброшен через %d дней."
+
+#~ msgid ""
+#~ "El código 2FA ha caducado. Es necesario restablecerlo desde las "
+#~ "preferencias"
+#~ msgstr "2FA код просрочен. Вам нужно сбросить его на странице настроек"
+
+#~ msgid "Días Caducidad"
+#~ msgstr "Дней до истечения"
+
+#~ msgid "Días"
+#~ msgstr "Дни"
diff --git a/inc/sql/110.sql b/inc/sql/110.sql
new file mode 100644
index 00000000..86b91ad7
--- /dev/null
+++ b/inc/sql/110.sql
@@ -0,0 +1,23 @@
+-- To 1.1.0;
+ALTER TABLE `accFiles`
+ CHANGE COLUMN `accfile_name` `accfile_name` VARCHAR(100) NOT NULL;
+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`;
+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;
+ALTER TABLE `accHistory`
+ ADD COLUMN `accHistory_otherUserEdit` BIT NULL
+ AFTER `acchistory_mPassHash`,
+ ADD COLUMN `accHistory_otherGroupEdit` VARCHAR(45) NULL
+ AFTER `accHistory_otherUserEdit`;
+ALTER TABLE `accFiles`
+ CHANGE COLUMN `accfile_type` `accfile_type` VARCHAR(100) NOT NULL;
\ No newline at end of file
diff --git a/inc/sql/1121.sql b/inc/sql/1121.sql
new file mode 100644
index 00000000..379ff3e8
--- /dev/null
+++ b/inc/sql/1121.sql
@@ -0,0 +1,11 @@
+-- To 1.1.21;
+ALTER TABLE `categories`
+ ADD COLUMN `category_description` VARCHAR(255) NULL
+ AFTER `category_name`;
+ALTER TABLE `usrProfiles`
+ ADD COLUMN `userProfile_pAppMgmtMenu` BIT(1) NULL DEFAULT b'0'
+ AFTER `userProfile_pUsersMenu`,
+ CHANGE COLUMN `userProfile_pConfigCategories` `userProfile_pAppMgmtCategories` BIT(1) NULL DEFAULT b'0'
+ AFTER `userProfile_pAppMgmtMenu`,
+ ADD COLUMN `userProfile_pAppMgmtCustomers` BIT(1) NULL DEFAULT b'0'
+ AFTER `userProfile_pAppMgmtCategories`;
\ No newline at end of file
diff --git a/inc/sql/11213.sql b/inc/sql/11213.sql
new file mode 100644
index 00000000..6dcb79d2
--- /dev/null
+++ b/inc/sql/11213.sql
@@ -0,0 +1,8 @@
+-- To 1.1.2.13;
+ALTER TABLE `usrData`
+ CHANGE COLUMN `user_mPass` `user_mPass` VARBINARY(32) NULL DEFAULT NULL,
+ CHANGE COLUMN `user_lastLogin` `user_lastLogin` DATETIME NULL DEFAULT NULL,
+ CHANGE COLUMN `user_lastUpdate` `user_lastUpdate` DATETIME NULL DEFAULT NULL,
+ CHANGE COLUMN `user_mIV` `user_mIV` VARBINARY(32) NULL;
+ALTER TABLE `accounts`
+ CHANGE COLUMN `account_login` `account_login` VARCHAR(50) NULL DEFAULT NULL;
\ No newline at end of file
diff --git a/inc/sql/11219.sql b/inc/sql/11219.sql
new file mode 100644
index 00000000..34fa8a37
--- /dev/null
+++ b/inc/sql/11219.sql
@@ -0,0 +1,5 @@
+-- To 1.1.2.19;
+ALTER TABLE `accounts`
+ CHANGE COLUMN `account_pass` `account_pass` VARBINARY(255) NOT NULL;
+ALTER TABLE `accHistory`
+ CHANGE COLUMN `acchistory_pass` `acchistory_pass` VARBINARY(255) NOT NULL;
\ No newline at end of file
diff --git a/inc/sql/1122.sql b/inc/sql/1122.sql
new file mode 100644
index 00000000..04f40187
--- /dev/null
+++ b/inc/sql/1122.sql
@@ -0,0 +1,4 @@
+-- To 1.1.22;
+ALTER TABLE `usrData`
+ CHANGE COLUMN `user_login` `user_login` VARCHAR(50) NOT NULL,
+ CHANGE COLUMN `user_email` `user_email` VARCHAR(80) NULL DEFAULT NULL;
\ No newline at end of file
diff --git a/inc/sql/11220.sql b/inc/sql/11220.sql
new file mode 100644
index 00000000..c9810ac1
--- /dev/null
+++ b/inc/sql/11220.sql
@@ -0,0 +1,4 @@
+-- To 1.1.2.20;
+ALTER TABLE `usrData`
+ CHANGE COLUMN `user_pass` `user_pass` VARBINARY(255) NOT NULL,
+ CHANGE COLUMN `user_mPass` `user_mPass` VARBINARY(255) DEFAULT NULL;
\ No newline at end of file
diff --git a/inc/sql/1123.sql b/inc/sql/1123.sql
new file mode 100644
index 00000000..24d56b03
--- /dev/null
+++ b/inc/sql/1123.sql
@@ -0,0 +1,17 @@
+-- To 1.1.23;
+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;
+ALTER TABLE `log`
+ ADD COLUMN `log_ipAddress` VARCHAR(45) NOT NULL
+ AFTER `log_userId`;
+ALTER TABLE `usrData`
+ ADD COLUMN `user_isChangePass` BIT(1) NULL DEFAULT b'0'
+ AFTER `user_isMigrate`;
\ No newline at end of file
diff --git a/inc/sql/12001.sql b/inc/sql/12001.sql
new file mode 100644
index 00000000..b9633d60
--- /dev/null
+++ b/inc/sql/12001.sql
@@ -0,0 +1,60 @@
+-- To 1.2.0.0.1;
+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;
+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;
+ALTER TABLE `accHistory`
+ CHANGE COLUMN `accHistory_otherGroupEdit` `accHistory_otherGroupEdit` BIT NULL DEFAULT b'0';
+ALTER TABLE `usrProfiles`
+ ADD COLUMN `userProfile_profile` BLOB NOT NULL;
+ALTER TABLE `usrData`
+ ADD `user_preferences` BLOB NULL;
+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;
+CREATE INDEX IDX_accountId
+ ON usrToGroups (usertogroup_userId);
+ALTER TABLE `accFiles`
+ ADD `accFile_thumb` BLOB NULL;
+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;
+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;
+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;
\ No newline at end of file
diff --git a/inc/sql/12002.sql b/inc/sql/12002.sql
new file mode 100644
index 00000000..1310ad32
--- /dev/null
+++ b/inc/sql/12002.sql
@@ -0,0 +1,9 @@
+-- To 1.2.0.0.2;
+ALTER TABLE config
+ CHANGE config_value config_value VARCHAR(255);
+ALTER TABLE usrData
+ CHANGE user_pass user_pass VARBINARY(255);
+ALTER TABLE usrData
+ CHANGE user_hashSalt user_hashSalt VARBINARY(128);
+ALTER TABLE accHistory
+ CHANGE acchistory_mPassHash acchistory_mPassHash VARBINARY(255);
\ No newline at end of file
diff --git a/inc/sql/1316011001.sql b/inc/sql/1316011001.sql
new file mode 100644
index 00000000..e1cdf62b
--- /dev/null
+++ b/inc/sql/1316011001.sql
@@ -0,0 +1,51 @@
+-- To 1.3.16011001;
+ALTER TABLE `log`
+ ADD log_level VARCHAR(20) NOT NULL;
+CREATE TABLE `publicLinks` (
+ publicLink_id INT UNSIGNED PRIMARY KEY NOT NULL AUTO_INCREMENT,
+ publicLink_itemId INT UNSIGNED,
+ publicLink_hash VARBINARY(100) NOT NULL,
+ publicLink_linkData LONGBLOB
+);
+ALTER TABLE `accounts` DROP INDEX `IDX_searchTxt`;
+ALTER TABLE `usrData`
+ ENGINE = InnoDB;
+ALTER TABLE `accFiles`
+ ENGINE = InnoDB;
+ALTER TABLE `accGroups`
+ ENGINE = InnoDB;
+ALTER TABLE `accHistory`
+ ENGINE = InnoDB;
+ALTER TABLE `accUsers`
+ ENGINE = InnoDB;
+ALTER TABLE `categories`
+ ENGINE = InnoDB;
+ALTER TABLE `config`
+ ENGINE = InnoDB;
+ALTER TABLE `customers`
+ ENGINE = InnoDB;
+ALTER TABLE `log`
+ ENGINE = InnoDB;
+ALTER TABLE `usrGroups`
+ ENGINE = InnoDB;
+ALTER TABLE `usrPassRecover`
+ ENGINE = InnoDB;
+ALTER TABLE `usrProfiles`
+ ENGINE = InnoDB;
+ALTER TABLE `accounts`
+ ENGINE = InnoDB;
+CREATE UNIQUE INDEX unique_publicLink_accountId
+ ON publicLinks (publicLink_itemId);
+CREATE UNIQUE INDEX unique_publicLink_hash
+ ON publicLinks (publicLink_hash);
+ALTER TABLE `config`
+ CHANGE config_value config_value VARCHAR(2000);
+CREATE TABLE `accFavorites` (
+ `accfavorite_accountId` SMALLINT UNSIGNED NOT NULL,
+ `accfavorite_userId` SMALLINT UNSIGNED NOT NULL,
+ INDEX `fk_accFavorites_accounts_idx` (`accfavorite_accountId` ASC),
+ INDEX `fk_accFavorites_users_idx` (`accfavorite_userId` ASC),
+ INDEX `search_idx` (`accfavorite_accountId` ASC, `accfavorite_userId` ASC)
+)
+ ENGINE = InnoDB
+ DEFAULT CHARSET = utf8;
\ No newline at end of file
diff --git a/inc/sql/1316020501.sql b/inc/sql/1316020501.sql
new file mode 100644
index 00000000..02d93d9d
--- /dev/null
+++ b/inc/sql/1316020501.sql
@@ -0,0 +1,18 @@
+-- To 1.3.16020501;
+CREATE TABLE `tags` (
+ `tag_id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
+ `tag_name` VARCHAR(45) NOT NULL,
+ `tag_hash` BINARY(20) NOT NULL,
+ PRIMARY KEY (`tag_id`),
+ INDEX `IDX_name` (`tag_name` ASC),
+ UNIQUE INDEX `tag_hash_UNIQUE` (`tag_hash` ASC)
+)
+ ENGINE = InnoDB
+ DEFAULT CHARSET = utf8;
+CREATE TABLE `accTags` (
+ `acctag_accountId` INT UNSIGNED NOT NULL,
+ `acctag_tagId` INT UNSIGNED NOT NULL,
+ INDEX `IDX_id` (`acctag_accountId` ASC, `acctag_tagId` ASC)
+)
+ ENGINE = InnoDB
+ DEFAULT CHARSET = utf8;
\ No newline at end of file
diff --git a/inc/sql/1316100601.sql b/inc/sql/1316100601.sql
new file mode 100644
index 00000000..3b0bfcc1
--- /dev/null
+++ b/inc/sql/1316100601.sql
@@ -0,0 +1,387 @@
+-- To 1.3.16100601;
+ALTER TABLE `accHistory`
+ CHANGE COLUMN `acchistory_userId` `acchistory_userId` SMALLINT(5) UNSIGNED NOT NULL,
+ CHANGE COLUMN `acchistory_userEditId` `acchistory_userEditId` SMALLINT(5) UNSIGNED NOT NULL,
+ CHANGE COLUMN `acchistory_customerId` `acchistory_customerId` INT(10) UNSIGNED NOT NULL,
+ CHANGE COLUMN `acchistory_categoryId` `acchistory_categoryId` SMALLINT(5) UNSIGNED NOT NULL,
+ CHANGE COLUMN `acchistory_dateEdit` `acchistory_dateEdit` DATETIME NULL DEFAULT NULL,
+ CHANGE COLUMN `acchistory_userGroupId` `acchistory_userGroupId` SMALLINT(5) UNSIGNED NOT NULL,
+ ADD INDEX `fk_accHistory_users_id_idx` (`acchistory_userId` ASC),
+ ADD INDEX `fk_accHistory_users_edit_id_idx` (`acchistory_userEditId` ASC),
+ ADD INDEX `fk_accHistory_categories_id_idx` (`acchistory_categoryId` ASC),
+ ADD INDEX `fk_accHistory_customers_id_idx` (`acchistory_customerId` ASC);
+
+ALTER TABLE `accTags`
+ CHANGE COLUMN `acctag_accountId` `acctag_accountId` SMALLINT(10) UNSIGNED NOT NULL,
+ DROP INDEX `IDX_id`,
+ ADD INDEX `IDX_id` (`acctag_accountId` ASC),
+ ADD INDEX `fk_accTags_tags_id_idx` (`acctag_tagId` ASC);
+
+ALTER TABLE `accUsers`
+ DROP COLUMN `accuser_id`,
+ CHANGE COLUMN `accuser_accountId` `accuser_accountId` SMALLINT(5) UNSIGNED NOT NULL,
+ CHANGE COLUMN `accuser_userId` `accuser_userId` SMALLINT(5) UNSIGNED NOT NULL,
+ ADD INDEX `fk_accUsers_users_id_idx` (`accuser_userId` ASC),
+ DROP PRIMARY KEY;
+
+ALTER TABLE `accounts`
+ CHANGE COLUMN `account_id` `account_id` SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
+ CHANGE COLUMN `account_userId` `account_userId` SMALLINT(5) UNSIGNED NOT NULL,
+ CHANGE COLUMN `account_userEditId` `account_userEditId` SMALLINT(5) UNSIGNED NOT NULL,
+ CHANGE COLUMN `account_categoryId` `account_categoryId` SMALLINT(5) UNSIGNED NOT NULL,
+ CHANGE COLUMN `account_dateEdit` `account_dateEdit` DATETIME NULL DEFAULT NULL,
+ CHANGE COLUMN `account_userGroupId` `account_userGroupId` SMALLINT(5) UNSIGNED NOT NULL,
+ ADD INDEX `fk_accounts_user_id_idx` (`account_userId` ASC),
+ ADD INDEX `fk_accounts_user__edit_id_idx` (`account_userEditId` ASC);
+
+ALTER TABLE `authTokens`
+ CHANGE COLUMN `authtoken_userId` `authtoken_userId` SMALLINT(5) UNSIGNED NOT NULL,
+ ADD INDEX `fk_authTokens_users_id_idx` (`authtoken_userId` ASC, `authtoken_createdBy` ASC);
+ALTER TABLE `log`
+ CHANGE COLUMN `log_userId` `log_userId` SMALLINT(5) UNSIGNED NOT NULL,
+ CHANGE COLUMN `log_description` `log_description` TEXT NULL DEFAULT NULL,
+ ADD INDEX `fk_log_users_id_idx` (`log_userId` ASC);
+
+ALTER TABLE `usrData`
+ CHANGE COLUMN `user_groupId` `user_groupId` SMALLINT(3) UNSIGNED NOT NULL,
+ CHANGE COLUMN `user_secGroupId` `user_secGroupId` SMALLINT(3) UNSIGNED NULL DEFAULT NULL,
+ CHANGE COLUMN `user_profileId` `user_profileId` SMALLINT(5) UNSIGNED NOT NULL,
+ CHANGE COLUMN `user_isAdminApp` `user_isAdminApp` BIT(1) NULL DEFAULT b'0',
+ CHANGE COLUMN `user_isAdminAcc` `user_isAdminAcc` BIT(1) NULL DEFAULT b'0',
+ CHANGE COLUMN `user_isLdap` `user_isLdap` BIT(1) NULL DEFAULT b'0',
+ CHANGE COLUMN `user_isDisabled` `user_isDisabled` BIT(1) NULL DEFAULT b'0',
+ ADD INDEX `fk_usrData_groups_id_idx` (`user_groupId` ASC),
+ ADD INDEX `fk_usrData_profiles_id_idx` (`user_profileId` ASC);
+
+ALTER TABLE `usrPassRecover`
+ CHANGE COLUMN `userpassr_used` `userpassr_used` BIT(1) NULL DEFAULT b'0';
+
+ALTER TABLE `usrToGroups`
+ DROP COLUMN `usertogroup_id`,
+ CHANGE COLUMN `usertogroup_userId` `usertogroup_userId` SMALLINT(5) UNSIGNED NOT NULL,
+ CHANGE COLUMN `usertogroup_groupId` `usertogroup_groupId` SMALLINT(5) UNSIGNED NOT NULL,
+ ADD INDEX `fk_usrToGroups_groups_id_idx` (`usertogroup_groupId` ASC),
+ DROP PRIMARY KEY;
+
+ALTER TABLE `accGroups`
+CHANGE COLUMN `accgroup_accountId` `accgroup_accountId` SMALLINT(5) UNSIGNED NOT NULL ,
+CHANGE COLUMN `accgroup_groupId` `accgroup_groupId` SMALLINT(5) UNSIGNED NOT NULL;
+
+ALTER TABLE `accFavorites`
+ ADD CONSTRAINT `fk_accFavorites_accounts_id`
+FOREIGN KEY (`accfavorite_accountId`)
+REFERENCES `accounts` (`account_id`)
+ ON DELETE CASCADE
+ ON UPDATE NO ACTION;
+
+ALTER TABLE `accFavorites`
+ ADD CONSTRAINT `fk_accFavorites_users_id`
+FOREIGN KEY (`accfavorite_userId`)
+REFERENCES `usrData` (`user_id`)
+ ON DELETE CASCADE
+ ON UPDATE NO ACTION;
+
+ALTER TABLE `accFiles`
+ ADD CONSTRAINT `fk_accFiles_accounts_id`
+FOREIGN KEY (`accfile_accountId`)
+REFERENCES `accounts` (`account_id`)
+ ON DELETE NO ACTION
+ ON UPDATE NO ACTION;
+
+ALTER TABLE `accGroups`
+ ADD CONSTRAINT `fk_accGroups_accounts_id`
+FOREIGN KEY (`accgroup_accountId`)
+REFERENCES `accounts` (`account_id`)
+ ON DELETE CASCADE
+ ON UPDATE CASCADE;
+
+ALTER TABLE `accGroups`
+ ADD CONSTRAINT `fk_accGroups_groups_id`
+FOREIGN KEY (`accgroup_groupId`)
+REFERENCES `usrGroups` (`usergroup_id`)
+ ON DELETE CASCADE
+ ON UPDATE CASCADE;
+
+ALTER TABLE `accHistory`
+ ADD CONSTRAINT `fk_accHistory_user_id`
+FOREIGN KEY (`acchistory_userId`)
+REFERENCES `usrData` (`user_id`)
+ ON DELETE RESTRICT
+ ON UPDATE RESTRICT;
+
+ALTER TABLE `accHistory`
+ ADD CONSTRAINT `fk_accHistory_users_edit_id`
+FOREIGN KEY (`acchistory_userEditId`)
+REFERENCES `usrData` (`user_id`)
+ ON DELETE RESTRICT
+ ON UPDATE RESTRICT;
+
+ALTER TABLE `accHistory`
+ ADD CONSTRAINT `fk_accHistory_category_id`
+FOREIGN KEY (`acchistory_categoryId`)
+REFERENCES `categories` (`category_id`)
+ ON DELETE RESTRICT
+ ON UPDATE RESTRICT;
+
+ALTER TABLE `accHistory`
+ ADD CONSTRAINT `fk_accHistory_customer_id`
+FOREIGN KEY (`acchistory_customerId`)
+REFERENCES `customers` (`customer_id`)
+ ON DELETE RESTRICT
+ ON UPDATE RESTRICT;
+
+ALTER TABLE `accHistory`
+ ADD CONSTRAINT `fk_accHistory_userGroup_id`
+FOREIGN KEY (`acchistory_userGroupId`)
+REFERENCES `usrGroups` (`usergroup_id`)
+ ON DELETE NO ACTION
+ ON UPDATE NO ACTION;
+
+ALTER TABLE `accTags`
+ ADD CONSTRAINT `fk_accTags_accounts_id`
+FOREIGN KEY (`acctag_accountId`)
+REFERENCES `accounts` (`account_id`)
+ ON DELETE CASCADE
+ ON UPDATE CASCADE;
+
+ALTER TABLE `accTags`
+ ADD CONSTRAINT `fk_accTags_tags_id`
+FOREIGN KEY (`acctag_tagId`)
+REFERENCES `tags` (`tag_id`)
+ ON DELETE CASCADE
+ ON UPDATE CASCADE;
+
+ALTER TABLE `accUsers`
+ ADD CONSTRAINT `fk_accUsers_accounts_id`
+FOREIGN KEY (`accuser_accountId`)
+REFERENCES `accounts` (`account_id`)
+ ON DELETE CASCADE
+ ON UPDATE CASCADE;
+
+ALTER TABLE `accUsers`
+ ADD CONSTRAINT `fk_accUsers_users_id`
+FOREIGN KEY (`accuser_userId`)
+REFERENCES `usrData` (`user_id`)
+ ON DELETE CASCADE
+ ON UPDATE CASCADE;
+
+ALTER TABLE `accounts`
+ ADD CONSTRAINT `fk_accounts_category_id`
+FOREIGN KEY (`account_categoryId`)
+REFERENCES `categories` (`category_id`)
+ ON DELETE RESTRICT
+ ON UPDATE CASCADE;
+
+ALTER TABLE `accounts`
+ ADD CONSTRAINT `fk_accounts_user_id`
+FOREIGN KEY (`account_userId`)
+REFERENCES `usrData` (`user_id`)
+ ON DELETE RESTRICT
+ ON UPDATE RESTRICT;
+
+ALTER TABLE `accounts`
+ ADD CONSTRAINT `fk_accounts_user_edit_id`
+FOREIGN KEY (`account_userEditId`)
+REFERENCES `usrData` (`user_id`)
+ ON DELETE RESTRICT
+ ON UPDATE RESTRICT;
+
+ALTER TABLE `accounts`
+ ADD CONSTRAINT `fk_accounts_customer_id`
+FOREIGN KEY (`account_customerId`)
+REFERENCES `customers` (`customer_id`)
+ ON DELETE RESTRICT
+ ON UPDATE RESTRICT;
+
+ALTER TABLE `accounts`
+ ADD CONSTRAINT `fk_accounts_userGroup_id`
+FOREIGN KEY (`account_userGroupId`)
+REFERENCES `usrGroups` (`usergroup_id`)
+ ON DELETE NO ACTION
+ ON UPDATE NO ACTION;
+
+ALTER TABLE `authTokens`
+ ADD CONSTRAINT `fk_authTokens_user_id`
+FOREIGN KEY (`authtoken_userId`)
+REFERENCES `usrData` (`user_id`)
+ ON DELETE CASCADE
+ ON UPDATE CASCADE;
+
+ALTER TABLE `authTokens`
+ ADD CONSTRAINT `fk_authTokens_createdBy_id`
+FOREIGN KEY (`authtoken_createdBy`)
+REFERENCES `usrData` (`user_id`)
+ ON DELETE CASCADE
+ ON UPDATE CASCADE;
+
+ALTER TABLE `customFieldsData`
+ ADD CONSTRAINT `fk_customFieldsData_def_id`
+FOREIGN KEY (`customfielddata_defId`)
+REFERENCES `customFieldsDef` (`customfielddef_id`)
+ ON DELETE CASCADE
+ ON UPDATE CASCADE;
+
+ALTER TABLE `usrData`
+ ADD CONSTRAINT `fk_usrData_groups_id`
+FOREIGN KEY (`user_groupId`)
+REFERENCES `usrGroups` (`usergroup_id`)
+ ON DELETE RESTRICT
+ ON UPDATE RESTRICT;
+
+ALTER TABLE `usrData`
+ ADD CONSTRAINT `fk_usrData_profiles_id`
+FOREIGN KEY (`user_profileId`)
+REFERENCES `usrProfiles` (`userprofile_id`)
+ ON DELETE RESTRICT
+ ON UPDATE RESTRICT;
+
+ALTER TABLE `usrPassRecover`
+ ADD CONSTRAINT `fk_usrPassRecover_users`
+FOREIGN KEY (`userpassr_userId`)
+REFERENCES `usrData` (`user_id`)
+ ON DELETE CASCADE
+ ON UPDATE CASCADE;
+
+ALTER TABLE `usrToGroups`
+ ADD CONSTRAINT `fk_usrToGroups_users_id`
+FOREIGN KEY (`usertogroup_userId`)
+REFERENCES `usrData` (`user_id`)
+ ON DELETE CASCADE
+ ON UPDATE CASCADE;
+
+ALTER TABLE `usrToGroups`
+ ADD CONSTRAINT `fk_usrToGroups_groups_id`
+FOREIGN KEY (`usertogroup_groupId`)
+REFERENCES `usrGroups` (`usergroup_id`)
+ ON DELETE CASCADE
+ ON UPDATE CASCADE;
+
+ALTER TABLE `accounts`
+ ADD COLUMN `account_isPrivate` BIT(1) NULL DEFAULT b'0'
+ AFTER `account_otherUserEdit`;
+
+ALTER TABLE `accounts`
+ ADD COLUMN `account_passDate` INT UNSIGNED NULL
+ AFTER `account_isPrivate`,
+ ADD COLUMN `account_passDateChange` INT UNSIGNED NULL
+ AFTER `account_passDate`;
+
+ALTER TABLE `accHistory`
+ ADD COLUMN `accHistory_passDate` INT UNSIGNED NULL
+ AFTER `accHistory_otherGroupEdit`,
+ ADD COLUMN `accHistory_passDateChange` INT UNSIGNED NULL
+ AFTER `accHistory_passDate`;
+
+ALTER TABLE `accounts`
+ ADD COLUMN `account_parentId` SMALLINT(5) UNSIGNED NULL
+ AFTER `account_passDateChange`;
+
+ALTER TABLE `accHistory`
+ ADD COLUMN `accHistory_parentId` SMALLINT(5) UNSIGNED NULL
+ AFTER `accHistory_passDateChange`,
+ ADD INDEX `fk_accHistory_userGroup_id_idx` (`acchistory_userGroupId` ASC);
+
+CREATE OR REPLACE ALGORITHM = UNDEFINED
+ DEFINER = CURRENT_USER
+ SQL SECURITY DEFINER VIEW `account_data_v` AS
+ SELECT
+ `accounts`.`account_id` AS `account_id`,
+ `accounts`.`account_name` AS `account_name`,
+ `accounts`.`account_categoryId` AS `account_categoryId`,
+ `accounts`.`account_userId` AS `account_userId`,
+ `accounts`.`account_customerId` AS `account_customerId`,
+ `accounts`.`account_userGroupId` AS `account_userGroupId`,
+ `accounts`.`account_userEditId` AS `account_userEditId`,
+ `accounts`.`account_login` AS `account_login`,
+ `accounts`.`account_url` AS `account_url`,
+ `accounts`.`account_notes` AS `account_notes`,
+ `accounts`.`account_countView` AS `account_countView`,
+ `accounts`.`account_countDecrypt` AS `account_countDecrypt`,
+ `accounts`.`account_dateAdd` AS `account_dateAdd`,
+ `accounts`.`account_dateEdit` AS `account_dateEdit`,
+ conv(`accounts`.`account_otherUserEdit`, 10, 2) AS `account_otherUserEdit`,
+ conv(`accounts`.`account_otherGroupEdit`, 10, 2) AS `account_otherGroupEdit`,
+ conv(`accounts`.`account_isPrivate`, 10, 2) AS `account_isPrivate`,
+ `accounts`.`account_passDate` AS `account_passDate`,
+ `accounts`.`account_passDateChange` AS `account_passDateChange`,
+ `accounts`.`account_parentId` AS `account_parentId`,
+ `categories`.`category_name` AS `category_name`,
+ `customers`.`customer_name` AS `customer_name`,
+ `ug`.`usergroup_name` AS `usergroup_name`,
+ `u1`.`user_name` AS `user_name`,
+ `u1`.`user_login` AS `user_login`,
+ `u2`.`user_name` AS `user_editName`,
+ `u2`.`user_login` AS `user_editLogin`,
+ `publicLinks`.`publicLink_hash` AS `publicLink_hash`
+ FROM ((((((`accounts`
+ LEFT JOIN `categories` ON ((`accounts`.`account_categoryId` = `categories`.`category_id`))) LEFT JOIN
+ `usrGroups` `ug` ON ((`accounts`.`account_userGroupId` = `ug`.`usergroup_id`))) LEFT JOIN `usrData` `u1`
+ ON ((`accounts`.`account_userId` = `u1`.`user_id`))) LEFT JOIN `usrData` `u2`
+ ON ((`accounts`.`account_userEditId` = `u2`.`user_id`))) LEFT JOIN `customers`
+ ON ((`accounts`.`account_customerId` = `customers`.`customer_id`))) LEFT JOIN `publicLinks`
+ ON ((`accounts`.`account_id` = `publicLinks`.`publicLink_itemId`)));
+
+CREATE OR REPLACE ALGORITHM = UNDEFINED
+ DEFINER = CURRENT_USER
+ SQL SECURITY DEFINER VIEW `account_search_v` AS
+ SELECT DISTINCT
+ `accounts`.`account_id` AS `account_id`,
+ `accounts`.`account_customerId` AS `account_customerId`,
+ `accounts`.`account_categoryId` AS `account_categoryId`,
+ `accounts`.`account_name` AS `account_name`,
+ `accounts`.`account_login` AS `account_login`,
+ `accounts`.`account_url` AS `account_url`,
+ `accounts`.`account_notes` AS `account_notes`,
+ `accounts`.`account_userId` AS `account_userId`,
+ `accounts`.`account_userGroupId` AS `account_userGroupId`,
+ `accounts`.`account_otherUserEdit` AS `account_otherUserEdit`,
+ `accounts`.`account_otherGroupEdit` AS `account_otherGroupEdit`,
+ `accounts`.`account_isPrivate` AS `account_isPrivate`,
+ `accounts`.`account_passDate` AS `account_passDate`,
+ `accounts`.`account_passDateChange` AS `account_passDateChange`,
+ `accounts`.`account_parentId` AS `account_parentId`,
+ `accounts`.`account_countView` AS `account_countView`,
+ `ug`.`usergroup_name` AS `usergroup_name`,
+ `categories`.`category_name` AS `category_name`,
+ `customers`.`customer_name` AS `customer_name`,
+ (SELECT COUNT(0)
+ FROM
+ `accFiles`
+ WHERE
+ (`accFiles`.`accfile_accountId` = `accounts`.`account_id`)) AS `num_files`
+ FROM
+ (((`accounts`
+ LEFT JOIN `categories` ON ((`accounts`.`account_categoryId` = `categories`.`category_id`)))
+ LEFT JOIN `usrGroups` `ug` ON ((`accounts`.`account_userGroupId` = `ug`.`usergroup_id`)))
+ LEFT JOIN `customers` ON ((`customers`.`customer_id` = `accounts`.`account_customerId`)));
+
+ALTER TABLE `accounts`
+ ADD INDEX `IDX_parentId` USING BTREE (`account_parentId` ASC);
+
+ALTER TABLE `categories`
+ ADD COLUMN `category_hash` VARBINARY(40) NOT NULL DEFAULT 0
+ AFTER `category_description`;
+
+CREATE TABLE `plugins` (
+ `plugin_id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
+ `plugin_name` VARCHAR(100) NOT NULL,
+ `plugin_data` VARBINARY(5000) NULL,
+ `plugin_enabled` BIT(1) NOT NULL DEFAULT b'0',
+ PRIMARY KEY (`plugin_id`),
+ UNIQUE INDEX `plugin_name_UNIQUE` (`plugin_name` ASC)
+);
+
+CREATE TABLE `notices` (
+ `notice_id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
+ `notice_type` VARCHAR(100) NULL,
+ `notice_component` VARCHAR(100) NOT NULL,
+ `notice_description` VARCHAR(500) NOT NULL,
+ `notice_date` INT UNSIGNED NOT NULL,
+ `notice_checked` BIT(1) NULL DEFAULT b'0',
+ `notice_userId` SMALLINT(5) UNSIGNED NULL,
+ `notice_sticky` BIT(1) NULL DEFAULT b'0',
+ `notice_onlyAdmin` BIT(1) NULL DEFAULT b'0',
+ PRIMARY KEY (`notice_id`),
+ INDEX `IDX_userId` (`notice_userId` ASC, `notice_checked` ASC, `notice_date` ASC),
+ INDEX `IDX_component` (`notice_component` ASC, `notice_date` ASC, `notice_checked` ASC, `notice_userId` ASC)
+);
\ No newline at end of file
diff --git a/inc/sql/20017011302.sql b/inc/sql/20017011302.sql
new file mode 100644
index 00000000..8a21433e
--- /dev/null
+++ b/inc/sql/20017011302.sql
@@ -0,0 +1 @@
+ALTER TABLE `accounts` CHANGE COLUMN `account_id` `account_id` SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT;
\ No newline at end of file
diff --git a/inc/sql/20017011701.sql b/inc/sql/20017011701.sql
new file mode 100644
index 00000000..9711b3ce
--- /dev/null
+++ b/inc/sql/20017011701.sql
@@ -0,0 +1,80 @@
+ALTER TABLE `accounts` ADD COLUMN `account_isPrivateGroup` BIT(1) NULL DEFAULT b'0' AFTER `account_isPrivate`;
+
+ALTER TABLE `accHistory` ADD COLUMN `accHistory_isPrivate` BIT(1) NULL DEFAULT b'0' AFTER `accHistory_parentId`,
+ADD COLUMN `accHistory_isPrivateGroup` BIT(1) NULL DEFAULT b'0' AFTER `accHistory_isPrivate`;
+
+
+CREATE OR REPLACE ALGORITHM = UNDEFINED DEFINER = CURRENT_USER SQL SECURITY DEFINER VIEW `account_data_v` AS
+ SELECT
+ `accounts`.`account_id` AS `account_id`,
+ `accounts`.`account_name` AS `account_name`,
+ `accounts`.`account_categoryId` AS `account_categoryId`,
+ `accounts`.`account_userId` AS `account_userId`,
+ `accounts`.`account_customerId` AS `account_customerId`,
+ `accounts`.`account_userGroupId` AS `account_userGroupId`,
+ `accounts`.`account_userEditId` AS `account_userEditId`,
+ `accounts`.`account_login` AS `account_login`,
+ `accounts`.`account_url` AS `account_url`,
+ `accounts`.`account_notes` AS `account_notes`,
+ `accounts`.`account_countView` AS `account_countView`,
+ `accounts`.`account_countDecrypt` AS `account_countDecrypt`,
+ `accounts`.`account_dateAdd` AS `account_dateAdd`,
+ `accounts`.`account_dateEdit` AS `account_dateEdit`,
+ CONV(`accounts`.`account_otherUserEdit`,10,2) AS `account_otherUserEdit`,
+ CONV(`accounts`.`account_otherGroupEdit`,10,2) AS `account_otherGroupEdit`,
+ CONV(`accounts`.`account_isPrivate`, 10, 2) AS `account_isPrivate`,
+ CONV(`accounts`.`account_isPrivateGroup`, 10, 2) AS `account_isPrivateGroup`,
+ `accounts`.`account_passDate` AS `account_passDate`,
+ `accounts`.`account_passDateChange` AS `account_passDateChange`,
+ `accounts`.`account_parentId` AS `account_parentId`,
+ `categories`.`category_name` AS `category_name`,
+ `customers`.`customer_name` AS `customer_name`,
+ `ug`.`usergroup_name` AS `usergroup_name`,
+ `u1`.`user_name` AS `user_name`,
+ `u1`.`user_login` AS `user_login`,
+ `u2`.`user_name` AS `user_editName`,
+ `u2`.`user_login` AS `user_editLogin`,
+ `publicLinks`.`publicLink_hash` AS `publicLink_hash`
+ FROM
+ ((((((`accounts`
+ LEFT JOIN `categories` ON ((`accounts`.`account_categoryId` = `categories`.`category_id`)))
+ LEFT JOIN `usrGroups` `ug` ON ((`accounts`.`account_userGroupId` = `ug`.`usergroup_id`)))
+ LEFT JOIN `usrData` `u1` ON ((`accounts`.`account_userId` = `u1`.`user_id`)))
+ LEFT JOIN `usrData` `u2` ON ((`accounts`.`account_userEditId` = `u2`.`user_id`)))
+ LEFT JOIN `customers` ON ((`accounts`.`account_customerId` = `customers`.`customer_id`)))
+ LEFT JOIN `publicLinks` ON ((`accounts`.`account_id` = `publicLinks`.`publicLink_itemId`)));
+
+CREATE OR REPLACE ALGORITHM = UNDEFINED DEFINER = CURRENT_USER SQL SECURITY DEFINER VIEW `account_search_v` AS
+ SELECT DISTINCT
+ `accounts`.`account_id` AS `account_id`,
+ `accounts`.`account_customerId` AS `account_customerId`,
+ `accounts`.`account_categoryId` AS `account_categoryId`,
+ `accounts`.`account_name` AS `account_name`,
+ `accounts`.`account_login` AS `account_login`,
+ `accounts`.`account_url` AS `account_url`,
+ `accounts`.`account_notes` AS `account_notes`,
+ `accounts`.`account_userId` AS `account_userId`,
+ `accounts`.`account_userGroupId` AS `account_userGroupId`,
+ `accounts`.`account_otherUserEdit` AS `account_otherUserEdit`,
+ `accounts`.`account_otherGroupEdit` AS `account_otherGroupEdit`,
+ `accounts`.`account_isPrivate` AS `account_isPrivate`,
+ `accounts`.`account_isPrivateGroup` AS `account_isPrivateGroup`,
+ `accounts`.`account_passDate` AS `account_passDate`,
+ `accounts`.`account_passDateChange` AS `account_passDateChange`,
+ `accounts`.`account_parentId` AS `account_parentId`,
+ `accounts`.`account_countView` AS `account_countView`,
+ `ug`.`usergroup_name` AS `usergroup_name`,
+ `categories`.`category_name` AS `category_name`,
+ `customers`.`customer_name` AS `customer_name`,
+ (SELECT
+ COUNT(0)
+ FROM
+ `accFiles`
+ WHERE
+ (`accFiles`.`accfile_accountId` = `accounts`.`account_id`)) AS `num_files`
+ FROM
+ (((`accounts`
+ LEFT JOIN `categories` ON ((`accounts`.`account_categoryId` = `categories`.`category_id`)))
+ LEFT JOIN `usrGroups` `ug` ON ((`accounts`.`account_userGroupId` = `ug`.`usergroup_id`)))
+ LEFT JOIN `customers` ON ((`customers`.`customer_id` = `accounts`.`account_customerId`)));
+
diff --git a/inc/sql/20017012901.sql b/inc/sql/20017012901.sql
new file mode 100644
index 00000000..165a0261
--- /dev/null
+++ b/inc/sql/20017012901.sql
@@ -0,0 +1,40 @@
+CREATE OR REPLACE ALGORITHM = UNDEFINED DEFINER = CURRENT_USER SQL SECURITY DEFINER VIEW `account_search_v` AS
+ SELECT DISTINCT
+ `accounts`.`account_id` AS `account_id`,
+ `accounts`.`account_customerId` AS `account_customerId`,
+ `accounts`.`account_categoryId` AS `account_categoryId`,
+ `accounts`.`account_name` AS `account_name`,
+ `accounts`.`account_login` AS `account_login`,
+ `accounts`.`account_url` AS `account_url`,
+ `accounts`.`account_notes` AS `account_notes`,
+ `accounts`.`account_userId` AS `account_userId`,
+ `accounts`.`account_userGroupId` AS `account_userGroupId`,
+ CONV(`accounts`.`account_otherUserEdit`,
+ 10,
+ 2) AS `account_otherUserEdit`,
+ CONV(`accounts`.`account_otherGroupEdit`,
+ 10,
+ 2) AS `account_otherGroupEdit`,
+ CONV(`accounts`.`account_isPrivate`, 10, 2) AS `account_isPrivate`,
+ CONV(`accounts`.`account_isPrivateGroup`,
+ 10,
+ 2) AS `account_isPrivateGroup`,
+ `accounts`.`account_passDate` AS `account_passDate`,
+ `accounts`.`account_passDateChange` AS `account_passDateChange`,
+ `accounts`.`account_parentId` AS `account_parentId`,
+ `accounts`.`account_countView` AS `account_countView`,
+ `accounts`.`account_dateEdit` AS `account_dateEdit`,
+ `ug`.`usergroup_name` AS `usergroup_name`,
+ `categories`.`category_name` AS `category_name`,
+ `customers`.`customer_name` AS `customer_name`,
+ (SELECT
+ COUNT(0)
+ FROM
+ `accFiles`
+ WHERE
+ (`accFiles`.`accfile_accountId` = `accounts`.`account_id`)) AS `num_files`
+ FROM
+ (((`accounts`
+ LEFT JOIN `categories` ON ((`accounts`.`account_categoryId` = `categories`.`category_id`)))
+ LEFT JOIN `usrGroups` `ug` ON ((`accounts`.`account_userGroupId` = `ug`.`usergroup_id`)))
+ LEFT JOIN `customers` ON ((`customers`.`customer_id` = `accounts`.`account_customerId`)))
diff --git a/inc/sql/dbstructure.sql b/inc/sql/dbstructure.sql
new file mode 100644
index 00000000..6cda379a
--- /dev/null
+++ b/inc/sql/dbstructure.sql
@@ -0,0 +1,501 @@
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8 */;
+/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
+/*!40103 SET TIME_ZONE='+00:00' */;
+/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
+/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
+/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
+/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
+
+DROP TABLE IF EXISTS `customers`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `customers` (
+ `customer_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `customer_name` varchar(100) NOT NULL,
+ `customer_hash` varbinary(40) NOT NULL,
+ `customer_description` varchar(255) DEFAULT NULL,
+ PRIMARY KEY (`customer_id`),
+ KEY `IDX_name` (`customer_name`,`customer_hash`)
+) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+DROP TABLE IF EXISTS `categories`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `categories` (
+ `category_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
+ `category_name` varchar(50) NOT NULL,
+ `category_hash` varbinary(40) NOT NULL,
+ `category_description` varchar(255) DEFAULT NULL,
+ PRIMARY KEY (`category_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+DROP TABLE IF EXISTS `usrGroups`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `usrGroups` (
+ `usergroup_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
+ `usergroup_name` varchar(50) NOT NULL,
+ `usergroup_description` varchar(255) DEFAULT NULL,
+ PRIMARY KEY (`usergroup_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+DROP TABLE IF EXISTS `usrProfiles`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `usrProfiles` (
+ `userprofile_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
+ `userprofile_name` varchar(45) NOT NULL,
+ `userProfile_profile` blob NOT NULL,
+ PRIMARY KEY (`userprofile_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+DROP TABLE IF EXISTS `usrData`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `usrData` (
+ `user_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
+ `user_name` varchar(80) NOT NULL,
+ `user_groupId` smallint(3) unsigned NOT NULL,
+ `user_secGroupId` smallint(3) unsigned DEFAULT NULL,
+ `user_login` varchar(50) NOT NULL,
+ `user_pass` varbinary(255) NOT NULL,
+ `user_mPass` varbinary(255) DEFAULT NULL,
+ `user_mIV` varbinary(32) NOT NULL,
+ `user_email` varchar(80) DEFAULT NULL,
+ `user_notes` text,
+ `user_count` int(10) unsigned NOT NULL DEFAULT '0',
+ `user_profileId` smallint(5) unsigned NOT NULL,
+ `user_lastLogin` datetime DEFAULT NULL,
+ `user_lastUpdate` datetime DEFAULT NULL,
+ `user_lastUpdateMPass` int(11) unsigned NOT NULL DEFAULT '0',
+ `user_isAdminApp` bit(1) DEFAULT b'0',
+ `user_isAdminAcc` bit(1) DEFAULT b'0',
+ `user_isLdap` bit(1) DEFAULT b'0',
+ `user_isDisabled` bit(1) DEFAULT b'0',
+ `user_hashSalt` varbinary(128) NOT NULL,
+ `user_isMigrate` bit(1) DEFAULT b'0',
+ `user_isChangePass` bit(1) DEFAULT b'0',
+ `user_preferences` blob,
+ PRIMARY KEY (`user_id`),
+ UNIQUE KEY `IDX_login` (`user_login`),
+ KEY `IDX_pass` (`user_pass`),
+ KEY `fk_usrData_groups_id_idx` (`user_groupId`),
+ KEY `fk_usrData_profiles_id_idx` (`user_profileId`),
+ CONSTRAINT `fk_usrData_groups_id` FOREIGN KEY (`user_groupId`) REFERENCES `usrGroups` (`usergroup_id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
+ CONSTRAINT `fk_usrData_profiles_id` FOREIGN KEY (`user_profileId`) REFERENCES `usrProfiles` (`userprofile_id`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+DROP TABLE IF EXISTS `accounts`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `accounts` (
+ `account_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
+ `account_userGroupId` smallint(5) unsigned NOT NULL,
+ `account_userId` smallint(5) unsigned NOT NULL,
+ `account_userEditId` smallint(5) unsigned NOT NULL,
+ `account_customerId` int(10) unsigned NOT NULL,
+ `account_name` varchar(50) NOT NULL,
+ `account_categoryId` smallint(5) unsigned NOT NULL,
+ `account_login` varchar(50) DEFAULT NULL,
+ `account_url` varchar(255) DEFAULT NULL,
+ `account_pass` varbinary(255) NOT NULL,
+ `account_IV` varbinary(32) NOT NULL,
+ `account_notes` text,
+ `account_countView` int(10) unsigned NOT NULL DEFAULT '0',
+ `account_countDecrypt` int(10) unsigned NOT NULL DEFAULT '0',
+ `account_dateAdd` datetime NOT NULL,
+ `account_dateEdit` datetime DEFAULT NULL,
+ `account_otherGroupEdit` bit(1) DEFAULT b'0',
+ `account_otherUserEdit` bit(1) DEFAULT b'0',
+ `account_isPrivate` bit(1) DEFAULT b'0',
+ `account_isPrivateGroup` BIT(1) NULL DEFAULT b'0',
+ `account_passDate` int(11) unsigned DEFAULT NULL,
+ `account_passDateChange` int(11) unsigned DEFAULT NULL,
+ `account_parentId` smallint(5) unsigned DEFAULT NULL,
+ PRIMARY KEY (`account_id`),
+ KEY `IDX_categoryId` (`account_categoryId`),
+ KEY `IDX_userId` (`account_userGroupId`,`account_userId`),
+ KEY `IDX_customerId` (`account_customerId`),
+ KEY `fk_accounts_user_id` (`account_userId`),
+ KEY `fk_accounts_user_edit_id` (`account_userEditId`),
+ CONSTRAINT `fk_accounts_user_id` FOREIGN KEY (`account_userId`) REFERENCES `usrData` (`user_id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
+ CONSTRAINT `fk_accounts_category_id` FOREIGN KEY (`account_categoryId`) REFERENCES `categories` (`category_id`) ON DELETE RESTRICT ON UPDATE CASCADE,
+ CONSTRAINT `fk_accounts_user_edit_id` FOREIGN KEY (`account_userEditId`) REFERENCES `usrData` (`user_id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
+ CONSTRAINT `fk_accounts_customer_id` FOREIGN KEY (`account_customerId`) REFERENCES `customers` (`customer_id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
+ CONSTRAINT `fk_accounts_userGroup_id` FOREIGN KEY (`account_userGroupId`) REFERENCES `usrGroups` (`usergroup_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
+) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+DROP TABLE IF EXISTS `accFavorites`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `accFavorites` (
+ `accfavorite_accountId` smallint(5) unsigned NOT NULL,
+ `accfavorite_userId` smallint(5) unsigned NOT NULL,
+ KEY `fk_accFavorites_accounts_idx` (`accfavorite_accountId`),
+ KEY `fk_accFavorites_users_idx` (`accfavorite_userId`),
+ KEY `search_idx` (`accfavorite_accountId`,`accfavorite_userId`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+DROP TABLE IF EXISTS `accFiles`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `accFiles` (
+ `accfile_id` int(11) NOT NULL AUTO_INCREMENT,
+ `accfile_accountId` smallint(5) unsigned NOT NULL,
+ `accfile_name` varchar(100) NOT NULL,
+ `accfile_type` varchar(100) NOT NULL,
+ `accfile_size` int(11) NOT NULL,
+ `accfile_content` mediumblob NOT NULL,
+ `accfile_extension` varchar(10) NOT NULL,
+ `accFile_thumb` mediumblob,
+ PRIMARY KEY (`accfile_id`),
+ KEY `IDX_accountId` (`accfile_accountId`),
+ CONSTRAINT `fk_accFiles_accounts_id` FOREIGN KEY (`accfile_accountId`) REFERENCES `accounts` (`account_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
+) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+DROP TABLE IF EXISTS `accGroups`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `accGroups` (
+ `accgroup_accountId` smallint(5) unsigned NOT NULL,
+ `accgroup_groupId` smallint(5) unsigned NOT NULL,
+ KEY `IDX_accountId` (`accgroup_accountId`),
+ KEY `fk_accGroups_groups_id_idx` (`accgroup_groupId`),
+ CONSTRAINT `fk_accGroups_accounts_id` FOREIGN KEY (`accgroup_accountId`) REFERENCES `accounts` (`account_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `fk_accGroups_groups_id` FOREIGN KEY (`accgroup_groupId`) REFERENCES `usrGroups` (`usergroup_id`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+DROP TABLE IF EXISTS `accHistory`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `accHistory` (
+ `acchistory_id` int(11) NOT NULL AUTO_INCREMENT,
+ `acchistory_accountId` smallint(5) unsigned NOT NULL,
+ `acchistory_userGroupId` smallint(5) unsigned NOT NULL,
+ `acchistory_userId` smallint(5) unsigned NOT NULL,
+ `acchistory_userEditId` smallint(5) unsigned NOT NULL,
+ `acchistory_customerId` int(10) unsigned NOT NULL,
+ `acchistory_name` varchar(255) NOT NULL,
+ `acchistory_categoryId` smallint(5) unsigned NOT NULL,
+ `acchistory_login` varchar(50) NOT NULL,
+ `acchistory_url` varchar(255) DEFAULT NULL,
+ `acchistory_pass` varbinary(255) NOT NULL,
+ `acchistory_IV` varbinary(32) NOT NULL,
+ `acchistory_notes` text NOT NULL,
+ `acchistory_countView` int(10) unsigned NOT NULL DEFAULT '0',
+ `acchistory_countDecrypt` int(10) unsigned NOT NULL DEFAULT '0',
+ `acchistory_dateAdd` datetime NOT NULL,
+ `acchistory_dateEdit` datetime DEFAULT NULL,
+ `acchistory_isModify` bit(1) DEFAULT NULL,
+ `acchistory_isDeleted` bit(1) DEFAULT NULL,
+ `acchistory_mPassHash` varbinary(255) NOT NULL,
+ `accHistory_otherUserEdit` bit(1) DEFAULT b'0',
+ `accHistory_otherGroupEdit` bit(1) DEFAULT b'0',
+ `accHistory_passDate` int(10) unsigned DEFAULT NULL,
+ `accHistory_passDateChange` int(10) unsigned DEFAULT NULL,
+ `accHistory_parentId` smallint(5) unsigned DEFAULT NULL,
+ `accHistory_isPrivate` BIT(1) NULL DEFAULT b'0',
+ `accHistory_isPrivateGroup` BIT(1) NULL DEFAULT b'0',
+ PRIMARY KEY (`acchistory_id`),
+ KEY `IDX_accountId` (`acchistory_accountId`),
+ KEY `fk_accHistory_users_edit_id_idx` (`acchistory_userEditId`),
+ KEY `fk_accHistory_users_id` (`acchistory_userId`),
+ KEY `fk_accHistory_categories_id` (`acchistory_categoryId`),
+ KEY `fk_accHistory_customers_id` (`acchistory_customerId`),
+ CONSTRAINT `fk_accHistory_users_id` FOREIGN KEY (`acchistory_userId`) REFERENCES `usrData` (`user_id`) ON DELETE NO ACTION ON UPDATE CASCADE,
+ CONSTRAINT `fk_accHistory_users_edit_id` FOREIGN KEY (`acchistory_userEditId`) REFERENCES `usrData` (`user_id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
+ CONSTRAINT `fk_accHistory_category_id` FOREIGN KEY (`acchistory_categoryId`) REFERENCES `categories` (`category_id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
+ CONSTRAINT `fk_accHistory_customer_id` FOREIGN KEY (`acchistory_customerId`) REFERENCES `customers` (`customer_id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
+ CONSTRAINT `fk_accHistory_userGroup_id` FOREIGN KEY (`acchistory_userGroupId`) REFERENCES `usrGroups` (`usergroup_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
+) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+DROP TABLE IF EXISTS `accTags`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `accTags` (
+ `acctag_accountId` smallint(10) unsigned NOT NULL,
+ `acctag_tagId` int(10) unsigned NOT NULL,
+ KEY `IDX_id` (`acctag_accountId`),
+ KEY `fk_accTags_tags_id_idx` (`acctag_tagId`),
+ CONSTRAINT `fk_accTags_accounts_id` FOREIGN KEY (`acctag_accountId`) REFERENCES `accounts` (`account_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `fk_accTags_tags_id` FOREIGN KEY (`acctag_tagId`) REFERENCES `tags` (`tag_id`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+DROP TABLE IF EXISTS `accUsers`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `accUsers` (
+ `accuser_accountId` smallint(5) unsigned NOT NULL,
+ `accuser_userId` smallint(5) unsigned NOT NULL,
+ KEY `idx_account` (`accuser_accountId`),
+ KEY `fk_accUsers_users_id_idx` (`accuser_userId`),
+ CONSTRAINT `fk_accUsers_accounts_id` FOREIGN KEY (`accuser_accountId`) REFERENCES `accounts` (`account_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `fk_accUsers_users_id` FOREIGN KEY (`accuser_userId`) REFERENCES `usrData` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+DROP TABLE IF EXISTS `authTokens`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `authTokens` (
+ `authtoken_id` int(11) NOT NULL AUTO_INCREMENT,
+ `authtoken_userId` smallint(5) unsigned 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`),
+ KEY `fk_authTokens_users_id_idx` (`authtoken_userId`,`authtoken_createdBy`),
+ KEY `fk_authTokens_users_createdby_id` (`authtoken_createdBy`),
+ CONSTRAINT `fk_authTokens_user_id` FOREIGN KEY (`authtoken_userId`) REFERENCES `usrData` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `fk_authTokens_createdBy_id` FOREIGN KEY (`authtoken_createdBy`) REFERENCES `usrData` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+DROP TABLE IF EXISTS `config`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `config` (
+ `config_parameter` varchar(50) NOT NULL,
+ `config_value` varchar(2000) DEFAULT NULL,
+ UNIQUE KEY `vacParameter` (`config_parameter`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+DROP TABLE IF EXISTS `customFieldsData`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+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`),
+ CONSTRAINT `fk_customFieldsData_def_id` FOREIGN KEY (`customfielddata_defId`) REFERENCES `customFieldsDef` (`customfielddef_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+DROP TABLE IF EXISTS `customFieldsDef`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+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;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+DROP TABLE IF EXISTS `log`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `log` (
+ `log_id` int unsigned NOT NULL AUTO_INCREMENT,
+ `log_date` int(10) unsigned NOT NULL,
+ `log_login` varchar(25) NOT NULL,
+ `log_userId` smallint(5) unsigned NOT NULL,
+ `log_ipAddress` varchar(45) NOT NULL,
+ `log_action` varchar(50) NOT NULL,
+ `log_description` text,
+ `log_level` varchar(20) NOT NULL,
+ PRIMARY KEY (`log_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+DROP TABLE IF EXISTS `publicLinks`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `publicLinks` (
+ `publicLink_id` int UNSIGNED NOT NULL AUTO_INCREMENT,
+ `publicLink_itemId` int UNSIGNED DEFAULT NULL,
+ `publicLink_hash` varbinary(100) NOT NULL,
+ `publicLink_linkData` longblob,
+ PRIMARY KEY (`publicLink_id`),
+ UNIQUE KEY `IDX_hash` (`publicLink_hash`),
+ UNIQUE KEY `unique_publicLink_hash` (`publicLink_hash`),
+ UNIQUE KEY `unique_publicLink_accountId` (`publicLink_itemId`),
+ KEY `IDX_itemId` (`publicLink_itemId`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+DROP TABLE IF EXISTS `tags`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `tags` (
+ `tag_id` int unsigned NOT NULL AUTO_INCREMENT,
+ `tag_name` varchar(45) NOT NULL,
+ `tag_hash` binary(40) NOT NULL,
+ PRIMARY KEY (`tag_id`),
+ UNIQUE KEY `tag_hash_UNIQUE` (`tag_hash`),
+ KEY `IDX_name` (`tag_name`)
+) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+DROP TABLE IF EXISTS `usrPassRecover`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `usrPassRecover` (
+ `userpassr_id` int unsigned NOT NULL AUTO_INCREMENT,
+ `userpassr_userId` smallint(5) unsigned NOT NULL,
+ `userpassr_hash` varbinary(40) NOT NULL,
+ `userpassr_date` int unsigned NOT NULL,
+ `userpassr_used` bit(1) DEFAULT b'0',
+ PRIMARY KEY (`userpassr_id`),
+ KEY `IDX_userId` (`userpassr_userId`,`userpassr_date`),
+ CONSTRAINT `fk_usrPassRecover_users` FOREIGN KEY (`userpassr_userId`) REFERENCES `usrData` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+DROP TABLE IF EXISTS `usrToGroups`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `usrToGroups` (
+ `usertogroup_userId` smallint(5) unsigned NOT NULL,
+ `usertogroup_groupId` smallint(5) unsigned NOT NULL,
+ KEY `IDX_usertogroup_userId` (`usertogroup_userId`),
+ KEY `fk_usrToGroups_groups_id_idx` (`usertogroup_groupId`),
+ CONSTRAINT `fk_usrToGroups_groups_id` FOREIGN KEY (`usertogroup_groupId`) REFERENCES `usrGroups` (`usergroup_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `fk_usrToGroups_users_id` FOREIGN KEY (`usertogroup_userId`) REFERENCES `usrData` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+DROP TABLE IF EXISTS `plugins`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `plugins` (
+ `plugin_id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
+ `plugin_name` VARCHAR(100) NOT NULL,
+ `plugin_data` VARBINARY(5000) NULL,
+ `plugin_enabled` BIT(1) NOT NULL DEFAULT b'0',
+ PRIMARY KEY (`plugin_id`),
+ UNIQUE INDEX `plugin_name_UNIQUE` (`plugin_name` ASC));
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+DROP TABLE IF EXISTS `notices`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `notices` (
+ `notice_id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
+ `notice_type` VARCHAR(100) NULL,
+ `notice_component` VARCHAR(100) NOT NULL,
+ `notice_description` VARCHAR(500) NOT NULL,
+ `notice_date` INT UNSIGNED NOT NULL,
+ `notice_checked` BIT(1) NULL DEFAULT b'0',
+ `notice_userId` SMALLINT(5) UNSIGNED NULL,
+ `notice_sticky` BIT(1) NULL DEFAULT b'0',
+ `notice_onlyAdmin` BIT(1) NULL DEFAULT b'0',
+ PRIMARY KEY (`notice_id`),
+ INDEX `IDX_userId` (`notice_userId` ASC, `notice_checked` ASC, `notice_date` ASC),
+ INDEX `IDX_component` (`notice_component` ASC, `notice_date` ASC, `notice_checked` ASC, `notice_userId` ASC));
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+DROP TABLE IF EXISTS `account_data_v`;
+CREATE OR REPLACE ALGORITHM = UNDEFINED DEFINER = CURRENT_USER SQL SECURITY DEFINER VIEW `account_data_v` AS
+ SELECT
+ `accounts`.`account_id` AS `account_id`,
+ `accounts`.`account_name` AS `account_name`,
+ `accounts`.`account_categoryId` AS `account_categoryId`,
+ `accounts`.`account_userId` AS `account_userId`,
+ `accounts`.`account_customerId` AS `account_customerId`,
+ `accounts`.`account_userGroupId` AS `account_userGroupId`,
+ `accounts`.`account_userEditId` AS `account_userEditId`,
+ `accounts`.`account_login` AS `account_login`,
+ `accounts`.`account_url` AS `account_url`,
+ `accounts`.`account_notes` AS `account_notes`,
+ `accounts`.`account_countView` AS `account_countView`,
+ `accounts`.`account_countDecrypt` AS `account_countDecrypt`,
+ `accounts`.`account_dateAdd` AS `account_dateAdd`,
+ `accounts`.`account_dateEdit` AS `account_dateEdit`,
+ CONV(`accounts`.`account_otherUserEdit`,
+ 10,
+ 2) AS `account_otherUserEdit`,
+ CONV(`accounts`.`account_otherGroupEdit`,
+ 10,
+ 2) AS `account_otherGroupEdit`,
+ CONV(`accounts`.`account_isPrivate`, 10, 2) AS `account_isPrivate`,
+ CONV(`accounts`.`account_isPrivateGroup`, 10, 2) AS `account_isPrivateGroup`,
+ `accounts`.`account_passDate` AS `account_passDate`,
+ `accounts`.`account_passDateChange` AS `account_passDateChange`,
+ `accounts`.`account_parentId` AS `account_parentId`,
+ `categories`.`category_name` AS `category_name`,
+ `customers`.`customer_name` AS `customer_name`,
+ `ug`.`usergroup_name` AS `usergroup_name`,
+ `u1`.`user_name` AS `user_name`,
+ `u1`.`user_login` AS `user_login`,
+ `u2`.`user_name` AS `user_editName`,
+ `u2`.`user_login` AS `user_editLogin`,
+ `publicLinks`.`publicLink_hash` AS `publicLink_hash`
+ FROM
+ ((((((`accounts`
+ LEFT JOIN `categories` ON ((`accounts`.`account_categoryId` = `categories`.`category_id`)))
+ LEFT JOIN `usrGroups` `ug` ON ((`accounts`.`account_userGroupId` = `ug`.`usergroup_id`)))
+ LEFT JOIN `usrData` `u1` ON ((`accounts`.`account_userId` = `u1`.`user_id`)))
+ LEFT JOIN `usrData` `u2` ON ((`accounts`.`account_userEditId` = `u2`.`user_id`)))
+ LEFT JOIN `customers` ON ((`accounts`.`account_customerId` = `customers`.`customer_id`)))
+ LEFT JOIN `publicLinks` ON ((`accounts`.`account_id` = `publicLinks`.`publicLink_itemId`)));
+
+DROP TABLE IF EXISTS `account_search_v`;
+CREATE OR REPLACE ALGORITHM = UNDEFINED DEFINER = CURRENT_USER SQL SECURITY DEFINER VIEW `account_search_v` AS
+ SELECT DISTINCT
+ `accounts`.`account_id` AS `account_id`,
+ `accounts`.`account_customerId` AS `account_customerId`,
+ `accounts`.`account_categoryId` AS `account_categoryId`,
+ `accounts`.`account_name` AS `account_name`,
+ `accounts`.`account_login` AS `account_login`,
+ `accounts`.`account_url` AS `account_url`,
+ `accounts`.`account_notes` AS `account_notes`,
+ `accounts`.`account_userId` AS `account_userId`,
+ `accounts`.`account_userGroupId` AS `account_userGroupId`,
+ `accounts`.`account_otherUserEdit` AS `account_otherUserEdit`,
+ `accounts`.`account_otherGroupEdit` AS `account_otherGroupEdit`,
+ `accounts`.`account_isPrivate` AS `account_isPrivate`,
+ `accounts`.`account_isPrivateGroup` AS `account_isPrivateGroup`,
+ `accounts`.`account_passDate` AS `account_passDate`,
+ `accounts`.`account_passDateChange` AS `account_passDateChange`,
+ `accounts`.`account_parentId` AS `account_parentId`,
+ `accounts`.`account_countView` AS `account_countView`,
+ `ug`.`usergroup_name` AS `usergroup_name`,
+ `categories`.`category_name` AS `category_name`,
+ `customers`.`customer_name` AS `customer_name`,
+ (SELECT
+ COUNT(0)
+ FROM
+ `accFiles`
+ WHERE
+ (`accFiles`.`accfile_accountId` = `accounts`.`account_id`)) AS `num_files`
+ FROM
+ (((`accounts`
+ LEFT JOIN `categories` ON ((`accounts`.`account_categoryId` = `categories`.`category_id`)))
+ LEFT JOIN `usrGroups` `ug` ON ((`accounts`.`account_userGroupId` = `ug`.`usergroup_id`)))
+ LEFT JOIN `customers` ON ((`customers`.`customer_id` = `accounts`.`account_customerId`)));
+
+/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
+/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
+/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
+/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
\ No newline at end of file
diff --git a/inc/themes/classic/2fa.inc b/inc/themes/classic/2fa.inc
deleted file mode 100644
index eea64b92..00000000
--- a/inc/themes/classic/2fa.inc
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/inc/themes/classic/account.inc b/inc/themes/classic/account.inc
deleted file mode 100644
index df97c74e..00000000
--- a/inc/themes/classic/account.inc
+++ /dev/null
@@ -1,511 +0,0 @@
-
-
-